97da73776bdedb4408b07a1b656054b8a285a2f2
[platform/core/uifw/dali-toolkit.git] / dali-toolkit / internal / accessibility-manager / accessibility-manager-impl.h
1 #ifndef DALI_TOOLKIT_INTERNAL_ACCESSIBILITY_MANAGER_H
2 #define DALI_TOOLKIT_INTERNAL_ACCESSIBILITY_MANAGER_H
3
4 /*
5  * Copyright (c) 2021 Samsung Electronics Co., Ltd.
6  *
7  * Licensed under the Apache License, Version 2.0 (the "License");
8  * you may not use this file except in compliance with the License.
9  * You may obtain a copy of the License at
10  *
11  * http://www.apache.org/licenses/LICENSE-2.0
12  *
13  * Unless required by applicable law or agreed to in writing, software
14  * distributed under the License is distributed on an "AS IS" BASIS,
15  * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
16  * See the License for the specific language governing permissions and
17  * limitations under the License.
18  *
19  */
20
21 // EXTERNAL INCLUDES
22 #include <dali/public-api/object/base-object.h>
23 #include <string>
24 #include <vector>
25
26 // INTERNAL INCLUDES
27 #include <dali-toolkit/devel-api/accessibility-manager/accessibility-manager.h>
28
29 namespace Dali
30 {
31 namespace Toolkit
32 {
33 namespace Internal
34 {
35 class AccessibilityManager;
36
37 /**
38  * @copydoc Toolkit::AccessibilityManager
39  */
40 class AccessibilityManager : public Dali::BaseObject, public Dali::ConnectionTracker
41 {
42 public:
43   typedef Dali::Toolkit::AccessibilityManager::AccessibilityActionSignalType       AccessibilityActionSignalType;
44   typedef Dali::Toolkit::AccessibilityManager::AccessibilityActionScrollSignalType AccessibilityActionScrollSignalType;
45
46   /**
47    * Construct a new AccessibilityManager.
48    */
49   AccessibilityManager();
50
51   /**
52    * @copydoc Toolkit::AccessibilityManager::SetAccessibilityAttribute
53    */
54   void SetAccessibilityAttribute(Actor actor, Toolkit::AccessibilityManager::AccessibilityAttribute type, const std::string& text);
55
56   /**
57    * @copydoc Toolkit::AccessibilityManager::GetAccessibilityAttribute
58    */
59   std::string GetAccessibilityAttribute(Actor actor, Toolkit::AccessibilityManager::AccessibilityAttribute type) const;
60
61   /**
62    * @copydoc Toolkit::AccessibilityManager::SetFocusOrder
63    */
64   void SetFocusOrder(Actor actor, const unsigned int order);
65
66   /**
67    * @copydoc Toolkit::AccessibilityManager::GetFocusOrder
68    */
69   unsigned int GetFocusOrder(Actor actor) const;
70
71   /**
72    * @copydoc Toolkit::AccessibilityManager::GenerateNewFocusOrder
73    */
74   unsigned int GenerateNewFocusOrder() const;
75
76   /**
77    * @copydoc Toolkit::AccessibilityManager::GetActorByFocusOrder
78    */
79   Actor GetActorByFocusOrder(const unsigned int order);
80
81   /**
82    * @copydoc Toolkit::AccessibilityManager::SetCurrentFocusActor
83    */
84   bool SetCurrentFocusActor(Actor actor);
85
86   /**
87    * @copydoc Toolkit::AccessibilityManager::GetCurrentFocusActor
88    */
89   Actor GetCurrentFocusActor();
90
91   /**
92    * @copydoc Toolkit::AccessibilityManager::GetCurrentFocusGroup
93    */
94   Actor GetCurrentFocusGroup();
95
96   /**
97    * @copydoc Toolkit::AccessibilityManager::GetCurrentFocusOrder
98    */
99   unsigned int GetCurrentFocusOrder();
100
101   /**
102    * @copydoc Toolkit::AccessibilityManager::MoveFocusForward
103    */
104   bool MoveFocusForward();
105
106   /**
107    * @copydoc Toolkit::AccessibilityManager::MoveFocusBackward
108    */
109   bool MoveFocusBackward();
110
111   /**
112    * @copydoc Toolkit::AccessibilityManager::ClearFocus
113    */
114   void ClearFocus();
115
116   /**
117    * @copydoc Toolkit::AccessibilityManager::Reset
118    */
119   void Reset();
120
121   /**
122    * @copydoc Toolkit::AccessibilityManager::SetFocusGroup
123    */
124   void SetFocusGroup(Actor actor, bool isFocusGroup);
125
126   /**
127    * @copydoc Toolkit::AccessibilityManager::IsFocusGroup
128    */
129   bool IsFocusGroup(Actor actor) const;
130
131   /**
132    * @copydoc Toolkit::AccessibilityManager::SetGroupMode
133    */
134   void SetGroupMode(bool enabled);
135
136   /**
137    * @copydoc Toolkit::AccessibilityManager::GetGroupMode
138    */
139   bool GetGroupMode() const;
140
141   /**
142    * @copydoc Toolkit::AccessibilityManager::GetFocusGroup
143    */
144   Actor GetFocusGroup(Actor actor);
145
146   /**
147    * @copydoc Toolkit::AccessibilityManager::GetReadPosition
148    */
149   Vector2 GetReadPosition() const;
150
151   /**
152    * @copydoc Toolkit::AccessibilityManager::SetWrapMode
153    */
154   void SetWrapMode(bool wrapped);
155
156   /**
157    * @copydoc Toolkit::AccessibilityManager::GetWrapMode
158    */
159   bool GetWrapMode() const;
160
161   /**
162    * @copydoc Toolkit::AccessibilityManager::SetFocusIndicatorActor
163    */
164   void SetFocusIndicatorActor(Actor indicator);
165
166   /**
167    * @copydoc Toolkit::AccessibilityManager::GetFocusIndicatorActor
168    */
169   Actor GetFocusIndicatorActor();
170
171 public:
172   /**
173    * @copydoc Toolkit::AccessibilityManager::FocusChangedSignal()
174    */
175   Toolkit::AccessibilityManager::FocusChangedSignalType& FocusChangedSignal();
176
177   /**
178    * @copydoc Toolkit::AccessibilityManager::FocusOvershotSignal()
179    */
180   Toolkit::AccessibilityManager::FocusOvershotSignalType& FocusOvershotSignal();
181
182   /**
183    * @copydoc Toolkit::AccessibilityManager::FocusedActorActivatedSignal()
184    */
185   Toolkit::AccessibilityManager::FocusedActorActivatedSignalType& FocusedActorActivatedSignal();
186
187 public: // Signals
188   /**
189    * @copydoc Dali::Toolkit::AccessibilityManager::StatusChangedSignal
190    */
191   AccessibilityActionSignalType& StatusChangedSignal()
192   {
193     return mStatusChangedSignal;
194   }
195
196   /**
197    * @copydoc Dali::Toolkit::AccessibilityManager::AccessibilityAdaptor::ActionNextSignal
198    */
199   AccessibilityActionSignalType& ActionNextSignal()
200   {
201     return mActionNextSignal;
202   }
203
204   /**
205    * @copydoc Dali::Toolkit::AccessibilityManager::ActionPreviousSignal
206    */
207   AccessibilityActionSignalType& ActionPreviousSignal()
208   {
209     return mActionPreviousSignal;
210   }
211
212   /**
213    * @copydoc Dali::Toolkit::AccessibilityManager::ActionActivateSignal
214    */
215   AccessibilityActionSignalType& ActionActivateSignal()
216   {
217     return mActionActivateSignal;
218   }
219
220   /**
221    * @copydoc Dali::Toolkit::AccessibilityManager::ActionOverSignal
222    */
223   AccessibilityActionSignalType& ActionOverSignal()
224   {
225     return mActionOverSignal;
226   }
227
228   /**
229    * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadSignal
230    */
231   AccessibilityActionSignalType& ActionReadSignal()
232   {
233     return mActionReadSignal;
234   }
235
236   /**
237    * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadNextSignal
238    */
239   AccessibilityActionSignalType& ActionReadNextSignal()
240   {
241     return mActionReadNextSignal;
242   }
243
244   /**
245    * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadPreviousSignal
246    */
247   AccessibilityActionSignalType& ActionReadPreviousSignal()
248   {
249     return mActionReadPreviousSignal;
250   }
251
252   /**
253    * @copydoc Dali::Toolkit::AccessibilityManager::ActionUpSignal
254    */
255   AccessibilityActionSignalType& ActionUpSignal()
256   {
257     return mActionUpSignal;
258   }
259
260   /**
261    * @copydoc Dali::Toolkit::AccessibilityManager::ActionDownSignal
262    */
263   AccessibilityActionSignalType& ActionDownSignal()
264   {
265     return mActionDownSignal;
266   }
267
268   /**
269    * @copydoc Dali::Toolkit::AccessibilityManager::ActionClearFocusSignal
270    */
271   AccessibilityActionSignalType& ActionClearFocusSignal()
272   {
273     return mActionClearFocusSignal;
274   }
275
276   /**
277    * @copydoc Dali::Toolkit::AccessibilityManager::ActionBackSignal
278    */
279   AccessibilityActionSignalType& ActionBackSignal()
280   {
281     return mActionBackSignal;
282   }
283
284   /**
285    * @copydoc Dali::Toolkit::AccessibilityManager::ActionScrollUpSignal
286    */
287   AccessibilityActionSignalType& ActionScrollUpSignal()
288   {
289     return mActionScrollUpSignal;
290   }
291
292   /**
293    * @copydoc Dali::Toolkit::AccessibilityManager::ActionScrollDownSignal
294    */
295   AccessibilityActionSignalType& ActionScrollDownSignal()
296   {
297     return mActionScrollDownSignal;
298   }
299
300   /**
301    * @copydoc Dali::Toolkit::AccessibilityManager::ActionPageLeftSignal
302    */
303   AccessibilityActionSignalType& ActionPageLeftSignal()
304   {
305     return mActionPageLeftSignal;
306   }
307
308   /**
309    * @copydoc Dali::Toolkit::AccessibilityManager::ActionPageRightSignal
310    */
311   AccessibilityActionSignalType& ActionPageRightSignal()
312   {
313     return mActionPageRightSignal;
314   }
315
316   /**
317    * @copydoc Dali::Toolkit::AccessibilityManager::ActionPageUpSignal
318    */
319   AccessibilityActionSignalType& ActionPageUpSignal()
320   {
321     return mActionPageUpSignal;
322   }
323
324   /**
325    * @copydoc Dali::Toolkit::AccessibilityManager::ActionPageDownSignal
326    */
327   AccessibilityActionSignalType& ActionPageDownSignal()
328   {
329     return mActionPageDownSignal;
330   }
331
332   /**
333    * @copydoc Dali::Toolkit::AccessibilityManager::ActionMoveToFirstSignal
334    */
335   AccessibilityActionSignalType& ActionMoveToFirstSignal()
336   {
337     return mActionMoveToFirstSignal;
338   }
339
340   /**
341    * @copydoc Dali::Toolkit::AccessibilityManager::ActionMoveToLastSignal
342    */
343   AccessibilityActionSignalType& ActionMoveToLastSignal()
344   {
345     return mActionMoveToLastSignal;
346   }
347
348   /**
349    * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadFromTopSignal
350    */
351   AccessibilityActionSignalType& ActionReadFromTopSignal()
352   {
353     return mActionReadFromTopSignal;
354   }
355
356   /**
357    * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadFromNextSignal
358    */
359   AccessibilityActionSignalType& ActionReadFromNextSignal()
360   {
361     return mActionReadFromNextSignal;
362   }
363
364   /**
365    * @copydoc Dali::Toolkit::AccessibilityManager::ActionZoomSignal
366    */
367   AccessibilityActionSignalType& ActionZoomSignal()
368   {
369     return mActionZoomSignal;
370   }
371
372   /**
373    * @copydoc Dali::Toolkit::AccessibilityManager::ActionReadPauseResumeSignal
374    */
375   AccessibilityActionSignalType& ActionReadPauseResumeSignal()
376   {
377     return mActionReadPauseResumeSignal;
378   }
379
380   /**
381    * @copydoc Dali::Toolkit::AccessibilityManager::ActionStartStopSignal
382    */
383   AccessibilityActionSignalType& ActionStartStopSignal()
384   {
385     return mActionStartStopSignal;
386   }
387
388   /**
389    * @copydoc Dali::Toolkit::AccessibilityManager::ActionScrollSignal
390    */
391   AccessibilityActionScrollSignalType& ActionScrollSignal()
392   {
393     return mActionScrollSignal;
394   }
395
396 protected:
397   /**
398    * Destructor
399    */
400   virtual ~AccessibilityManager();
401
402 private:
403   // Undefined
404   AccessibilityManager(const AccessibilityManager&);
405
406   AccessibilityManager& operator=(const AccessibilityManager& rhs);
407
408 private:
409   std::vector<Actor> mFocusOrder;
410
411   Toolkit::AccessibilityManager::FocusChangedSignalType          mFocusChangedSignal;          ///< The signal to notify the focus change
412   Toolkit::AccessibilityManager::FocusOvershotSignalType         mFocusOvershotSignal;         ///< The signal to notify the focus overshooted
413   Toolkit::AccessibilityManager::FocusedActorActivatedSignalType mFocusedActorActivatedSignal; ///< The signal to notify the activation of focused actor
414
415   // Action signals.
416   AccessibilityActionSignalType       mStatusChangedSignal;
417   AccessibilityActionSignalType       mActionNextSignal;
418   AccessibilityActionSignalType       mActionPreviousSignal;
419   AccessibilityActionSignalType       mActionActivateSignal;
420   AccessibilityActionSignalType       mActionOverSignal;
421   AccessibilityActionSignalType       mActionReadSignal;
422   AccessibilityActionSignalType       mActionReadNextSignal;
423   AccessibilityActionSignalType       mActionReadPreviousSignal;
424   AccessibilityActionSignalType       mActionUpSignal;
425   AccessibilityActionSignalType       mActionDownSignal;
426   AccessibilityActionSignalType       mActionClearFocusSignal;
427   AccessibilityActionSignalType       mActionBackSignal;
428   AccessibilityActionSignalType       mActionScrollUpSignal;
429   AccessibilityActionSignalType       mActionScrollDownSignal;
430   AccessibilityActionSignalType       mActionPageLeftSignal;
431   AccessibilityActionSignalType       mActionPageRightSignal;
432   AccessibilityActionSignalType       mActionPageUpSignal;
433   AccessibilityActionSignalType       mActionPageDownSignal;
434   AccessibilityActionSignalType       mActionMoveToFirstSignal;
435   AccessibilityActionSignalType       mActionMoveToLastSignal;
436   AccessibilityActionSignalType       mActionReadFromTopSignal;
437   AccessibilityActionSignalType       mActionReadFromNextSignal;
438   AccessibilityActionSignalType       mActionZoomSignal;
439   AccessibilityActionSignalType       mActionReadIndicatorInformationSignal;
440   AccessibilityActionSignalType       mActionReadPauseResumeSignal;
441   AccessibilityActionSignalType       mActionStartStopSignal;
442   AccessibilityActionScrollSignalType mActionScrollSignal;
443 };
444
445 } // namespace Internal
446
447 inline Internal::AccessibilityManager& GetImpl(Dali::Toolkit::AccessibilityManager& obj)
448 {
449   DALI_ASSERT_ALWAYS(obj);
450
451   Dali::BaseObject& handle = obj.GetBaseObject();
452
453   return static_cast<Internal::AccessibilityManager&>(handle);
454 }
455
456 inline const Internal::AccessibilityManager& GetImpl(const Dali::Toolkit::AccessibilityManager& obj)
457 {
458   DALI_ASSERT_ALWAYS(obj);
459
460   const Dali::BaseObject& handle = obj.GetBaseObject();
461
462   return static_cast<const Internal::AccessibilityManager&>(handle);
463 }
464
465 } // namespace Toolkit
466
467 } // namespace Dali
468
469 #endif // DALI_TOOLKIT_INTERNAL_ACCESSIBILITY_MANAGER_H