feffe75aa01fcf3493646f81e9797a5be97e922b
[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
23 // INTERNAL INCLUDES
24 #include <dali-toolkit/public-api/dali-toolkit-common.h>
25
26 namespace Dali::Toolkit::DevelControl {
27
28 /**
29  * @brief Represents the Accessible object for Dali::Toolkit::Control and derived classes
30  *
31  * You can create a derived class (and register it using SetAccessibilityConstructor)
32  * in order to customize Accessibility for a given control.
33  *
34  * @see Dali::Toolkit::DevelControl::SetAccessibilityConstructor
35  * @see Dali::Accessibility::Accessible
36  * @see Dali::Accessibility::Component
37  * @see Dali::Accessibility::Collection
38  * @see Dali::Accessibility::Action
39  * @see Dali::Accessibility::Value
40  * @see Dali::Accessibility::Text
41  * @see Dali::Accessibility::EditableText
42  */
43 struct DALI_TOOLKIT_API AccessibleImpl : public virtual Dali::Accessibility::Accessible,
44                                          public virtual Dali::Accessibility::Component,
45                                          public virtual Dali::Accessibility::Collection,
46                                          public virtual Dali::Accessibility::Action
47 {
48   Dali::Actor self;
49   bool        modal = false, root = false;
50
51   AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
52
53   /**
54    * @copydoc Dali::Accessibility::Accessible::GetName()
55    */
56   std::string GetName() override;
57
58   /**
59    * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
60    */
61   virtual std::string GetNameRaw();
62
63   /**
64    * @copydoc Dali::Accessibility::Accessible::GetDescription()
65    */
66   std::string GetDescription() override;
67
68   /**
69    * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
70    */
71   virtual std::string GetDescriptionRaw();
72
73   /**
74    * @copydoc Dali::Accessibility::Accessible::GetParent()
75    */
76   Dali::Accessibility::Accessible* GetParent() override;
77
78   /**
79    * @copydoc Dali::Accessibility::Accessible::GetChildCount()
80    */
81   size_t GetChildCount() override;
82
83   /**
84    * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
85    */
86   Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
87
88   /**
89    * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
90    */
91   size_t GetIndexInParent() override;
92
93   /**
94    * @copydoc Dali::Accessibility::Accessible::GetRole()
95    */
96   Dali::Accessibility::Role GetRole() override;
97
98   /**
99    * @copydoc Dali::Accessibility::Accessible::GetStates()
100    */
101   Dali::Accessibility::States GetStates() override;
102
103   /**
104    * @copydoc Dali::Accessibility::Accessible::GetAttributes()
105    */
106   Dali::Accessibility::Attributes GetAttributes() override;
107
108   /**
109    * @copydoc Dali::Accessibility::Component::GetExtents()
110    */
111   Dali::Rect<> GetExtents(Dali::Accessibility::CoordType ctype) override;
112
113   /**
114    * @copydoc Dali::Accessibility::Component::GetLayer()
115    */
116   Dali::Accessibility::ComponentLayer GetLayer() override;
117
118   /**
119    * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
120    */
121   int16_t GetMdiZOrder() override;
122
123   /**
124    * @copydoc Dali::Accessibility::Component::GrabFocus()
125    */
126   bool GrabFocus() override;
127
128   /**
129    * @copydoc Dali::Accessibility::Component::GetAlpha()
130    */
131   double GetAlpha() override;
132
133   /**
134    * @copydoc Dali::Accessibility::Component::GrabHighlight()
135    */
136   bool GrabHighlight() override;
137
138   /**
139    * @copydoc Dali::Accessibility::Component::ClearHighlight()
140    */
141   bool ClearHighlight() override;
142
143   /**
144    * @copydoc Dali::Accessibility::Action::GetActionName()
145    */
146   std::string GetActionName(size_t index) override;
147
148   /**
149    * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
150    */
151   std::string GetLocalizedActionName(size_t index) override;
152
153   /**
154    * @copydoc Dali::Accessibility::Action::GetActionDescription()
155    */
156   std::string GetActionDescription(size_t index) override;
157
158   /**
159    * @copydoc Dali::Accessibility::Action::GetActionCount()
160    */
161   size_t GetActionCount() override;
162
163   /**
164    * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
165    */
166   std::string GetActionKeyBinding(size_t index) override;
167
168   /**
169    * @copydoc Dali::Accessibility::Action::DoAction(size_t)
170    */
171   bool DoAction(size_t index) override;
172
173   /**
174    * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
175    */
176   bool DoAction(const std::string& name) override;
177
178   /**
179    * @copydoc Dali::Accessibility::Accessible::DoGesture()
180    */
181   bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
182
183   /**
184    * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
185    */
186   std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
187
188   /**
189    * @copydoc Dali::Accessibility::Accessible::GetStates()
190    */
191   virtual Dali::Accessibility::States CalculateStates();
192
193   /**
194    * @brief Makes sure that a given child of this container (e.g. ItemView) is visible
195    */
196   virtual void EnsureChildVisible(Actor child);
197
198   /**
199    * @brief Makes sure this actor is visible (when moving the highlight frame to an
200    * actor that is scrolled out of the viewport)
201    */
202   virtual void EnsureSelfVisible();
203
204   /**
205    * @brief Returns the index of the property that represents this actor's name
206    */
207   virtual Dali::Property::Index GetNamePropertyIndex();
208
209   /**
210    * @brief Returns the index of the property that represents this actor's description
211    */
212   virtual Dali::Property::Index GetDescriptionPropertyIndex();
213 };
214
215 } // namespace Dali::Toolkit::DevelControl
216
217 #endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H