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