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