Merge "Makes the LTR/RTL alignment of text follow the system language by default...
[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> mSelf;
51   Dali::WeakHandle<Dali::Actor> mCurrentHighlightActor;
52   bool mIsModal = false;
53   bool mIsRoot = false;
54
55   Dali::Actor Self()
56   {
57     auto handle = mSelf.GetHandle();
58
59     // Control::Impl holds a std::unique_ptr to the Accessible object,
60     // so that one does not outlive the other.
61     DALI_ASSERT_ALWAYS(handle);
62
63     return handle;
64   }
65
66   void ScrollToSelf();
67
68 public:
69   AccessibleImpl(Dali::Actor self, Dali::Accessibility::Role role, bool modal = false);
70
71   /**
72    * @copydoc Dali::Accessibility::Accessible::GetName()
73    */
74   std::string GetName() override;
75
76   /**
77    * @brief Returns the actor's name in the absence of ACCESSIBILITY_NAME property
78    */
79   virtual std::string GetNameRaw();
80
81   /**
82    * @copydoc Dali::Accessibility::Accessible::GetDescription()
83    */
84   std::string GetDescription() override;
85
86   /**
87    * @brief Returns the actor's description in the absence of ACCESSIBILITY_DESCRIPTION property
88    */
89   virtual std::string GetDescriptionRaw();
90
91   /**
92    * @copydoc Dali::Accessibility::Accessible::GetParent()
93    */
94   Dali::Accessibility::Accessible* GetParent() override;
95
96   /**
97    * @copydoc Dali::Accessibility::Accessible::GetChildCount()
98    */
99   size_t GetChildCount() override;
100
101   /**
102    * @copydoc Dali::Accessibility::Accessible::GetChildAtIndex()
103    */
104   Dali::Accessibility::Accessible* GetChildAtIndex(size_t index) override;
105
106   /**
107    * @copydoc Dali::Accessibility::Accessible::GetIndexInParent()
108    */
109   size_t GetIndexInParent() override;
110
111   /**
112    * @copydoc Dali::Accessibility::Accessible::GetRole()
113    */
114   Dali::Accessibility::Role GetRole() override;
115
116   /**
117    * @copydoc Dali::Accessibility::Accessible::GetLocalizedRoleName()
118    */
119   std::string GetLocalizedRoleName() override;
120
121   /**
122    * @copydoc Dali::Accessibility::Accessible::GetStates()
123    */
124   Dali::Accessibility::States GetStates() override;
125
126   /**
127    * @copydoc Dali::Accessibility::Accessible::GetAttributes()
128    */
129   Dali::Accessibility::Attributes GetAttributes() override;
130
131   /**
132    * @copydoc Dali::Accessibility::Component::GetExtents()
133    */
134   Dali::Rect<> GetExtents(Accessibility::CoordinateType type) override;
135
136   /**
137    * @copydoc Dali::Accessibility::Component::GetLayer()
138    */
139   Dali::Accessibility::ComponentLayer GetLayer() override;
140
141   /**
142    * @copydoc Dali::Accessibility::Component::GetMdiZOrder()
143    */
144   int16_t GetMdiZOrder() override;
145
146   /**
147    * @copydoc Dali::Accessibility::Component::GrabFocus()
148    */
149   bool GrabFocus() override;
150
151   /**
152    * @copydoc Dali::Accessibility::Component::GetAlpha()
153    */
154   double GetAlpha() override;
155
156   /**
157    * @copydoc Dali::Accessibility::Component::GrabHighlight()
158    */
159   bool GrabHighlight() override;
160
161   /**
162    * @copydoc Dali::Accessibility::Component::ClearHighlight()
163    */
164   bool ClearHighlight() override;
165
166   /**
167    * @copydoc Dali::Accessibility::Action::GetActionName()
168    */
169   std::string GetActionName(size_t index) override;
170
171   /**
172    * @copydoc Dali::Accessibility::Action::GetLocalizedActionName()
173    */
174   std::string GetLocalizedActionName(size_t index) override;
175
176   /**
177    * @copydoc Dali::Accessibility::Action::GetActionDescription()
178    */
179   std::string GetActionDescription(size_t index) override;
180
181   /**
182    * @copydoc Dali::Accessibility::Action::GetActionCount()
183    */
184   size_t GetActionCount() override;
185
186   /**
187    * @copydoc Dali::Accessibility::Action::GetActionKeyBinding()
188    */
189   std::string GetActionKeyBinding(size_t index) override;
190
191   /**
192    * @copydoc Dali::Accessibility::Action::DoAction(size_t)
193    */
194   bool DoAction(size_t index) override;
195
196   /**
197    * @copydoc Dali::Accessibility::Action::DoAction(const std::string&)
198    */
199   bool DoAction(const std::string& name) override;
200
201   /**
202    * @copydoc Dali::Accessibility::Accessible::DoGesture()
203    */
204   bool DoGesture(const Dali::Accessibility::GestureInfo& gestureInfo) override;
205
206   /**
207    * @copydoc Dali::Accessibility::Accessible::GetRelationSet()
208    */
209   std::vector<Dali::Accessibility::Relation> GetRelationSet() override;
210
211   /**
212    * @copydoc Dali::Accessibility::Accessible::GetStates()
213    */
214   virtual Dali::Accessibility::States CalculateStates();
215
216   /**
217    * @brief Makes sure that a given child of this container (e.g. ItemView) is visible
218    * @return false if scrolling is not supported or child is already visible
219    */
220   virtual bool ScrollToChild(Actor child);
221
222   /**
223    * @brief Returns the index of the property that represents this actor's name
224    */
225   virtual Dali::Property::Index GetNamePropertyIndex();
226
227   /**
228    * @brief Returns the index of the property that represents this actor's description
229    */
230   virtual Dali::Property::Index GetDescriptionPropertyIndex();
231 };
232
233 } // namespace Dali::Toolkit::DevelControl
234
235 #endif // DALI_TOOLKIT_ACCESSIBLE_IMPL_H