Merge "[AT-SPI] Use WeakHandle<Actor> in Accessible objects" into 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 public:
66   AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
67
68   /**
69    * @copydoc Dali::Accessibility::Accessible::GetName()
70    */
71   std::string GetName() override;
72
73   /**
74    * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
75    */
76   virtual std::string GetNameRaw();
77
78   /**
79    * @copydoc Dali::Accessibility::Accessible::GetDescription()
80    */
81   std::string GetDescription() override;
82
83   /**
84    * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
85    */
86   virtual std::string GetDescriptionRaw();
87
88   /**
89    * @copydoc Dali::Accessibility::Accessible::GetParent()
90    */
91   Dali::Accessibility::Accessible* GetParent() override;
92
93   /**
94    * @copydoc Dali::Accessibility::Accessible::GetChildCount()
95    */
96   size_t GetChildCount() override;
97
98   /**
99    * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
100    */
101   Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
102
103   /**
104    * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
105    */
106   size_t GetIndexInParent() override;
107
108   /**
109    * @copydoc Dali::Accessibility::Accessible::GetRole()
110    */
111   Dali::Accessibility::Role GetRole() override;
112
113   /**
114    * @copydoc Dali::Accessibility::Accessible::GetStates()
115    */
116   Dali::Accessibility::States GetStates() override;
117
118   /**
119    * @copydoc Dali::Accessibility::Accessible::GetAttributes()
120    */
121   Dali::Accessibility::Attributes GetAttributes() override;
122
123   /**
124    * @copydoc Dali::Accessibility::Component::GetExtents()
125    */
126   Dali::Rect<> GetExtents(Dali::Accessibility::CoordType ctype) override;
127
128   /**
129    * @copydoc Dali::Accessibility::Component::GetLayer()
130    */
131   Dali::Accessibility::ComponentLayer GetLayer() override;
132
133   /**
134    * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
135    */
136   int16_t GetMdiZOrder() override;
137
138   /**
139    * @copydoc Dali::Accessibility::Component::GrabFocus()
140    */
141   bool GrabFocus() override;
142
143   /**
144    * @copydoc Dali::Accessibility::Component::GetAlpha()
145    */
146   double GetAlpha() override;
147
148   /**
149    * @copydoc Dali::Accessibility::Component::GrabHighlight()
150    */
151   bool GrabHighlight() override;
152
153   /**
154    * @copydoc Dali::Accessibility::Component::ClearHighlight()
155    */
156   bool ClearHighlight() override;
157
158   /**
159    * @copydoc Dali::Accessibility::Action::GetActionName()
160    */
161   std::string GetActionName(size_t index) override;
162
163   /**
164    * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
165    */
166   std::string GetLocalizedActionName(size_t index) override;
167
168   /**
169    * @copydoc Dali::Accessibility::Action::GetActionDescription()
170    */
171   std::string GetActionDescription(size_t index) override;
172
173   /**
174    * @copydoc Dali::Accessibility::Action::GetActionCount()
175    */
176   size_t GetActionCount() override;
177
178   /**
179    * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
180    */
181   std::string GetActionKeyBinding(size_t index) override;
182
183   /**
184    * @copydoc Dali::Accessibility::Action::DoAction(size_t)
185    */
186   bool DoAction(size_t index) override;
187
188   /**
189    * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
190    */
191   bool DoAction(const std::string& name) override;
192
193   /**
194    * @copydoc Dali::Accessibility::Accessible::DoGesture()
195    */
196   bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
197
198   /**
199    * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
200    */
201   std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
202
203   /**
204    * @copydoc Dali::Accessibility::Accessible::GetStates()
205    */
206   virtual Dali::Accessibility::States CalculateStates();
207
208   /**
209    * @brief Makes sure that a given child of this container (e.g. ItemView) is visible
210    */
211   virtual void EnsureChildVisible(Actor child);
212
213   /**
214    * @brief Makes sure this actor is visible (when moving the highlight frame to an
215    * actor that is scrolled out of the viewport)
216    */
217   virtual void EnsureSelfVisible();
218
219   /**
220    * @brief Returns the index of the property that represents this actor's name
221    */
222   virtual Dali::Property::Index GetNamePropertyIndex();
223
224   /**
225    * @brief Returns the index of the property that represents this actor's description
226    */
227   virtual Dali::Property::Index GetDescriptionPropertyIndex();
228 };
229
230 } // namespace Dali::Toolkit::DevelControl
231
232 #endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H