[dali_2.3.19] Merge branch 'devel/master'
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / devel-api / controls / accessible-impl.h
1 #ifndef DALI_TOOLKIT_ACCESSIBLE_IMPL_H
2 #define DALI_TOOLKIT_ACCESSIBLE_IMPL_H
3 /*
4  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
5  *
6  * Licensed under the Apache License, Version 2.0 (the "License");
7  * you may not use this file except in compliance with the License.
8  * You may obtain a copy of the License at
9  *
10  * http://www.apache.org/licenses/LICENSE-2.0
11  *
12  * Unless required by applicable law or agreed to in writing, software
13  * distributed under the License is distributed on an "AS IS" BASIS,
14  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
15  * See the License for the specific language governing permissions and
16  * limitations under the License.
17  *
18  */
19 // EXTERNAL INCLUDES
20 #include <dali/devel-api/adaptor-framework/accessibility-impl.h>
21 #include <dali/devel-api/adaptor-framework/accessibility.h>
22 #include <dali/public-api/object/weak-handle.h>
23
24 // INTERNAL INCLUDES
25 #include <dali-toolkit/public-api/dali-toolkit-common.h>
26
27 namespace Dali::Toolkit::DevelControl {
28
29 /**
30  * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
31  *
32  * You can create a derived class (and register it using SetAccessibilityConstructor)
33  * in order to customize Accessibility for a given control.
34  *
35  * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
36  * @see Dali::Accessibility::Accessible
37  * @see Dali::Accessibility::Component
38  * @see Dali::Accessibility::Collection
39  * @see Dali::Accessibility::Action
40  * @see Dali::Accessibility::Value
41  * @see Dali::Accessibility::Text
42  * @see Dali::Accessibility::EditableText
43  */
44 struct DALI_TOOLKIT_API AccessibleImpl : public virtual Dali::Accessibility::Accessible,
45                                          public virtual Dali::Accessibility::Component,
46                                          public virtual Dali::Accessibility::Collection,
47                                          public virtual Dali::Accessibility::Action
48 {
49 protected:
50   Dali::WeakHandle<Dali::Actor> self;
51   Dali::WeakHandle<Dali::Actor> currentHighlightActor;
52   bool        modal = false, root = false;
53
54   Dali::Actor Self()
55   {
56     auto handle = self.GetHandle();
57
58     // Control::Impl holds a std::unique_ptr to the Accessible object,
59     // so that one does not outlive the other.
60     DALI_ASSERT_ALWAYS(handle);
61
62     return handle;
63   }
64
65   void ScrollToSelf();
66
67 public:
68   AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
69
70   /**
71    * @copydoc Dali::Accessibility::Accessible::GetName()
72    */
73   std::string GetName() override;
74
75   /**
76    * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
77    */
78   virtual std::string GetNameRaw();
79
80   /**
81    * @copydoc Dali::Accessibility::Accessible::GetDescription()
82    */
83   std::string GetDescription() override;
84
85   /**
86    * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
87    */
88   virtual std::string GetDescriptionRaw();
89
90   /**
91    * @copydoc Dali::Accessibility::Accessible::GetParent()
92    */
93   Dali::Accessibility::Accessible* GetParent() override;
94
95   /**
96    * @copydoc Dali::Accessibility::Accessible::GetChildCount()
97    */
98   size_t GetChildCount() override;
99
100   /**
101    * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
102    */
103   Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
104
105   /**
106    * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
107    */
108   size_t GetIndexInParent() override;
109
110   /**
111    * @copydoc Dali::Accessibility::Accessible::GetRole()
112    */
113   Dali::Accessibility::Role GetRole() override;
114
115   /**
116    * @copydoc Dali::Accessibility::Accessible::GetStates()
117    */
118   Dali::Accessibility::States GetStates() override;
119
120   /**
121    * @copydoc Dali::Accessibility::Accessible::GetAttributes()
122    */
123   Dali::Accessibility::Attributes GetAttributes() override;
124
125   /**
126    * @copydoc Dali::Accessibility::Component::GetExtents()
127    */
128   Dali::Rect<> GetExtents(Dali::Accessibility::CoordType ctype) override;
129
130   /**
131    * @copydoc Dali::Accessibility::Component::GetLayer()
132    */
133   Dali::Accessibility::ComponentLayer GetLayer() override;
134
135   /**
136    * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
137    */
138   int16_t GetMdiZOrder() override;
139
140   /**
141    * @copydoc Dali::Accessibility::Component::GrabFocus()
142    */
143   bool GrabFocus() override;
144
145   /**
146    * @copydoc Dali::Accessibility::Component::GetAlpha()
147    */
148   double GetAlpha() override;
149
150   /**
151    * @copydoc Dali::Accessibility::Component::GrabHighlight()
152    */
153   bool GrabHighlight() override;
154
155   /**
156    * @copydoc Dali::Accessibility::Component::ClearHighlight()
157    */
158   bool ClearHighlight() override;
159
160   /**
161    * @copydoc Dali::Accessibility::Action::GetActionName()
162    */
163   std::string GetActionName(size_t index) override;
164
165   /**
166    * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
167    */
168   std::string GetLocalizedActionName(size_t index) override;
169
170   /**
171    * @copydoc Dali::Accessibility::Action::GetActionDescription()
172    */
173   std::string GetActionDescription(size_t index) override;
174
175   /**
176    * @copydoc Dali::Accessibility::Action::GetActionCount()
177    */
178   size_t GetActionCount() override;
179
180   /**
181    * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
182    */
183   std::string GetActionKeyBinding(size_t index) override;
184
185   /**
186    * @copydoc Dali::Accessibility::Action::DoAction(size_t)
187    */
188   bool DoAction(size_t index) override;
189
190   /**
191    * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
192    */
193   bool DoAction(const std::string& name) override;
194
195   /**
196    * @copydoc Dali::Accessibility::Accessible::DoGesture()
197    */
198   bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
199
200   /**
201    * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
202    */
203   std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
204
205   /**
206    * @copydoc Dali::Accessibility::Accessible::GetStates()
207    */
208   virtual Dali::Accessibility::States CalculateStates();
209
210   /**
211    * @brief Makes sure that a given child of this container (e.g. ItemView) is visible
212    * @return false if scrolling is not supported or child is already visible
213    */
214   virtual bool ScrollToChild(Actor child);
215
216   /**
217    * @brief Returns the index of the property that represents this actor's name
218    */
219   virtual Dali::Property::Index GetNamePropertyIndex();
220
221   /**
222    * @brief Returns the index of the property that represents this actor's description
223    */
224   virtual Dali::Property::Index GetDescriptionPropertyIndex();
225 };
226
227 } // namespace Dali::Toolkit::DevelControl
228
229 #endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H