Adaptor refactor
[platform/core/uifw/dali-adaptor.git] / dali / internal / accessibility / common / accessibility-adaptor-impl.h
1 #ifndef __DALI_INTERNAL_ACCESSIBILITY_ADAPTOR_H__
2 #define __DALI_INTERNAL_ACCESSIBILITY_ADAPTOR_H__
3
4 /*
5  * Copyright (c) 2014 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
24 #include <dali/public-api/object/base-object.h>
25 #include <dali/public-api/math/vector2.h>
26 #include <dali/public-api/events/touch-point.h>
27 #include <dali/integration-api/events/touch-event-combiner.h>
28
29 // INTERNAL INCLUDES
30 #include <dali/devel-api/adaptor-framework/accessibility-adaptor.h>
31 #include <dali/devel-api/adaptor-framework/accessibility-action-handler.h>
32 #include <dali/devel-api/adaptor-framework/accessibility-gesture-handler.h>
33 #include <dali/internal/window-system/common/indicator-interface.h>
34 #include <dali/internal/accessibility/common/accessibility-gesture-detector.h>
35
36 namespace Dali
37 {
38
39 namespace Internal
40 {
41
42 namespace Adaptor
43 {
44
45 /**
46  * This class detects to accessibility action
47  */
48 class AccessibilityAdaptor : public Dali::BaseObject
49 {
50 public:
51
52   /**
53    * Constructor.
54    */
55   AccessibilityAdaptor();
56
57   /**
58    * @brief Get an instance of the AccessibilityAdaptor.
59    *
60    * @note This singleton-style getter can be reimplemented for different platforms.
61    * @return The instance of the AccessibilityAdaptor.
62    */
63   static Dali::AccessibilityAdaptor Get();
64
65   /**
66    * Turn on accessibility action
67    * This method should be called by vconf callback
68    */
69   void EnableAccessibility();
70
71   /**
72    * Turn off accessibility action
73    * This method should be called by vconf callback
74    */
75   void DisableAccessibility();
76
77   /**
78    * @copydoc Dali::AccessibilityAdaptor::IsEnabled()
79    */
80   bool IsEnabled() const;
81
82   /**
83    * @copydoc Dali::AccessibilityAdaptor::GetReadPosition() const
84    */
85   Vector2 GetReadPosition() const;
86
87   /**
88    * @copydoc Dali::AccessibilityAdaptor::SetActionHandler()
89    */
90   void SetActionHandler(AccessibilityActionHandler& handler);
91
92   /**
93    * @copydoc Dali::AccessibilityAdaptor::SetGestureHandler()
94    */
95   void SetGestureHandler(AccessibilityGestureHandler& handler);
96
97   /**
98    * @brief Set the Indicator
99    * @param[in] Indiciator interface
100    */
101   void SetIndicator( IndicatorInterface* indicator );
102
103   /**
104    * @copydoc Dali::AccessibilityAdaptor::HandleActionNextEvent()
105    */
106   virtual bool HandleActionNextEvent( bool allowEndFeedback = true);
107
108   /**
109    * @copydoc Dali::AccessibilityAdaptor::HandleActionPreviousEvent()
110    */
111   virtual bool HandleActionPreviousEvent( bool allowEndFeedback = true);
112
113   /**
114    * @copydoc Dali::AccessibilityAdaptor::HandleActionActivateEvent()
115    */
116   virtual bool HandleActionActivateEvent();
117
118   /**
119    * @copydoc Dali::AccessibilityAdaptor::HandleActionReadEvent()
120    */
121   virtual bool HandleActionReadEvent( unsigned int x, unsigned int y, bool allowReadAgain );
122
123   /**
124    * @copydoc Dali::AccessibilityAdaptor::HandleActionReadNextEvent()
125    */
126   virtual bool HandleActionReadNextEvent( bool allowEndFeedback = true);
127
128   /**
129    * @copydoc Dali::AccessibilityAdaptor::HandleActionReadPreviousEvent()
130    */
131   virtual bool HandleActionReadPreviousEvent( bool allowEndFeedback = true);
132
133   /**
134    * @copydoc Dali::AccessibilityAdaptor::HandleActionUpEvent()
135    */
136   virtual bool HandleActionUpEvent();
137
138   /**
139    * @copydoc Dali::AccessibilityAdaptor::HandleActionDownEvent()
140    */
141   virtual bool HandleActionDownEvent();
142
143   /**
144    * @copydoc Dali::AccessibilityAdaptor::HandleActionClearFocusEvent()
145    */
146   bool HandleActionClearFocusEvent();
147
148   /**
149    * @copydoc Dali::AccessibilityAdaptor::HandleActionScrollEvent()
150    */
151   bool HandleActionScrollEvent(const TouchPoint& point, unsigned long timeStamp);
152
153   /**
154    * @copydoc Dali::AccessibilityAdaptor::HandleActionTouchEvent()
155    */
156   bool HandleActionTouchEvent(const TouchPoint& point, unsigned long timeStamp);
157
158   /**
159    * @copydoc Dali::AccessibilityAdaptor::HandleActionBackEvent()
160    */
161   bool HandleActionBackEvent();
162
163   /**
164    * @copydoc Dali::AccessibilityAdaptor::HandleActionEnableEvent()
165    */
166   void HandleActionEnableEvent();
167
168   /**
169    * @copydoc Dali::AccessibilityAdaptor::HandleActionDisableEvent()
170    */
171   void HandleActionDisableEvent();
172
173   /**
174    * @copydoc Dali::AccessibilityAdaptor::HandleActionScrollUpEvent()
175    */
176   bool HandleActionScrollUpEvent();
177
178   /**
179    * @copydoc Dali::AccessibilityAdaptor::HandleActionScrollDownEvent()
180    */
181   bool HandleActionScrollDownEvent();
182
183   /**
184    * @copydoc Dali::AccessibilityAdaptor::HandleActionPageLeftEvent()
185    */
186   bool HandleActionPageLeftEvent();
187
188   /**
189    * @copydoc Dali::AccessibilityAdaptor::HandleActionPageRightEvent()
190    */
191   bool HandleActionPageRightEvent();
192
193   /**
194    * @copydoc Dali::AccessibilityAdaptor::HandleActionPageUpEvent()
195    */
196   bool HandleActionPageUpEvent();
197
198   /**
199    * @copydoc Dali::AccessibilityAdaptor::HandleActionPageDownEvent()
200    */
201   bool HandleActionPageDownEvent();
202
203   /**
204    * @copydoc Dali::AccessibilityAdaptor::HandleActionMoveToFirstEvent()
205    */
206   bool HandleActionMoveToFirstEvent();
207
208   /**
209    * @copydoc Dali::AccessibilityAdaptor::HandleActionMoveToLastEvent()
210    */
211   bool HandleActionMoveToLastEvent();
212
213   /**
214    * @copydoc Dali::AccessibilityAdaptor::HandleActionReadFromTopEvent()
215    */
216   bool HandleActionReadFromTopEvent();
217
218   /**
219    * @copydoc Dali::AccessibilityAdaptor::HandleActionReadFromNextEvent()
220    */
221   bool HandleActionReadFromNextEvent();
222
223   /**
224    * @copydoc Dali::AccessibilityAdaptor::HandleActionZoomEvent()
225    */
226   bool HandleActionZoomEvent();
227
228   /**
229    * @copydoc Dali::AccessibilityAdaptor::HandleActionReadIndicatorInformationEvent()
230    */
231   bool HandleActionReadIndicatorInformationEvent();
232
233   /**
234    * @copydoc Dali::AccessibilityAdaptor::HandleActionReadPauseResumeEvent()
235    */
236   bool HandleActionReadPauseResumeEvent();
237
238   /**
239    * @copydoc Dali::AccessibilityAdaptor::HandleActionStartStopEvent()
240    */
241   bool HandleActionStartStopEvent();
242
243 protected:
244
245   /**
246    * Destructor.
247    */
248   virtual ~AccessibilityAdaptor();
249
250 private:
251
252   /**
253    * @brief Called when the singleton is destroyed.
254    *
255    * @note This can be reimplemented for different platforms.
256    * @return The instance of the AccessibilityAdaptor.
257    */
258   static void OnDestroy();
259
260   // Undefined
261   AccessibilityAdaptor( const AccessibilityAdaptor& );
262   AccessibilityAdaptor& operator=( AccessibilityAdaptor& );
263
264 protected:
265
266   Dali::Integration::TouchEventCombiner mCombiner; ///< Combines multi-touch events.
267
268   Vector2 mReadPosition; ///< ActionRead position
269
270   AccessibilityActionHandler* mActionHandler; ///< The pointer of accessibility action handler
271
272   AccessibilityGestureDetectorPtr mAccessibilityGestureDetector; ///< The accessibility gesture detector
273
274   IndicatorInterface* mIndicator; ///< The indicator
275
276   bool mIsEnabled        : 1; ///< enable/disable the accessibility action
277   bool mIndicatorFocused : 1; ///< Whether the Indicator is focused
278
279 public:
280
281   // Helpers for public-api forwarding methods
282
283   inline static Internal::Adaptor::AccessibilityAdaptor& GetImplementation(Dali::AccessibilityAdaptor& adaptor)
284   {
285     DALI_ASSERT_ALWAYS( adaptor && "AccessibilityAdaptor handle is empty" );
286
287     BaseObject& handle = adaptor.GetBaseObject();
288
289     return static_cast<Internal::Adaptor::AccessibilityAdaptor&>(handle);
290   }
291
292   inline static const Internal::Adaptor::AccessibilityAdaptor& GetImplementation(const Dali::AccessibilityAdaptor& adaptor)
293   {
294     DALI_ASSERT_ALWAYS( adaptor && "AccessibilityAdaptor handle is empty" );
295
296     const BaseObject& handle = adaptor.GetBaseObject();
297
298     return static_cast<const Internal::Adaptor::AccessibilityAdaptor&>(handle);
299   }
300
301 };
302
303 } // namespace Adaptor
304
305 } // namespace Internal
306
307 } // namespace Dali
308
309 #endif // __DALI_INTERNAL_ACCESSIBILITY_ADAPTOR_H__