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