modify license, permission and remove ^M char
[platform/framework/native/uifw.git] / src / ui / FUi_TouchGestureTimerManager.cpp
1 //
2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
4 //
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
8 //
9 //     http://www.apache.org/licenses/LICENSE-2.0/
10 //
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an ”AS IS” BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
16 //
17 /**
18  * @file                FUi_TouchGestureTimerManager.cpp
19  * @brief               This is the implementation file for %_TouchGestureTimerManager class
20  * @version             2.0
21  *
22  * This file contains the implementation of %_TouchGestureTimerManager class.
23  *
24  */
25
26 // includes
27 #include "FUi_ControlManager.h"
28 #include "FUi_TouchGestureTimerManager.h"
29 #include "FUi_TouchTapGestureDetector.h"
30 #include "FUi_TouchLongPressGestureDetector.h"
31 #include "FUi_Control.h"
32
33 using namespace Tizen::Base::Collection;
34 using namespace Tizen::Base::Runtime;
35 using namespace Tizen::Graphics;
36
37 namespace Tizen { namespace Ui
38 {
39 class _TouchGestureTimerManager::_TouchGestureTimerListener
40         : public ITimerEventListener
41 {
42 public:
43         _TouchGestureTimerListener(_TouchGestureTimerManager& mgr)
44                 : __pManager(&mgr)
45         {
46         }
47
48         virtual void OnTimerExpired(Timer& timer)
49         {
50                 if (!__pManager)
51                 {
52                         return;
53                 }
54                 __pManager->SetTimerState(false);
55                 _TouchLongPressGestureDetector* pLongPressGesture = null;
56                 _TouchGestureDetector* pGestureDetector = __pManager->GetGestureDetector();
57
58                 if (pGestureDetector)
59                 {
60                         switch(pGestureDetector->GetDetectorType())
61                         {
62                         case _TOUCH_GESTURE_DETECTOR_TYPE_TAP:
63                         {
64                                 _TouchTapGestureDetector* pTapGesture = dynamic_cast<_TouchTapGestureDetector*>(pGestureDetector);
65
66                                 if (pTapGesture && pTapGesture->IsGestureStarted())
67                                 {
68                                         pTapGesture->SetGestureStart(false);
69
70                                         if (pTapGesture->IsAllTapped() && pTapGesture->IsInBounds())
71                                         {
72                                                 pTapGesture->SetDetectorState(_TOUCH_GESTURE_DETECTOR_STATE_SUCCESS);
73                                         }
74                                         else
75                                         {
76                                                 pTapGesture->SetDetectorState(_TOUCH_GESTURE_DETECTOR_STATE_FAILED);
77                                         }
78                                 }
79
80                                 pTapGesture->ClearTapInfoList();
81                         }
82                         break;
83
84                         case _TOUCH_GESTURE_DETECTOR_TYPE_LONG_PRESS:
85                         {
86                                 pLongPressGesture = dynamic_cast<_TouchLongPressGestureDetector*>(pGestureDetector);
87
88                                 if (pLongPressGesture && pLongPressGesture->IsGestureStarted())
89                                 {
90                                         pLongPressGesture->SetGestureStart(false);
91
92                                         pLongPressGesture->EnableToDeleteTimer(false);
93
94                                         if (pLongPressGesture->IsPressed())
95                                         {
96                                                 pLongPressGesture->SetDetectorState(_TOUCH_GESTURE_DETECTOR_STATE_SUCCESS);
97                                         }
98                                         else
99                                         {
100                                                 pLongPressGesture->SetDetectorState(_TOUCH_GESTURE_DETECTOR_STATE_FAILED);
101                                         }
102                                 }
103
104                                 pLongPressGesture->ClearLongPressInfoList();
105                         }
106                         break;
107
108                         default:
109                         break;
110                         }
111                 }
112
113                 if (__pManager)
114                 {
115                         __pManager->SetTimerExpiredState(true);
116                 }
117
118                 if (pLongPressGesture)
119                 {
120                         if (pLongPressGesture->IsTouchCanceled())
121                         {
122                                 pLongPressGesture->ResetGestureTimerManager();
123                         }
124                 }
125         }
126
127         void SetTouchGestureTimerManager(_TouchGestureTimerManager* pManager)
128         {
129                 __pManager = pManager;
130         }
131
132 private:
133         _TouchGestureTimerManager* __pManager;
134 };
135
136 _TouchGestureTimerManager::_TouchGestureTimerManager(const _TouchGestureDetector& gestureDetector)
137         : __isTimerExpired(false)
138         , __isTimerStarted(false)
139         , __pTimer(null)
140         , __pTimerListener(null)
141 {
142         ClearLastResult();
143
144         result r = E_SUCCESS;
145
146         __pGestureDetector = const_cast<_TouchGestureDetector*>(&gestureDetector);
147         __pTimerListener = new (std::nothrow) _TouchGestureTimerListener(*this);
148         SysTryReturnVoidResult(NID_UI, __pTimerListener, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed. ");
149
150         __pTimer = new (std::nothrow) Timer;
151         SysTryCatch(NID_UI, __pTimer, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
152
153         r = __pTimer->Construct(*__pTimerListener);
154         SysTryCatch(NID_UI, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
155
156         return;
157
158 CATCH:
159         if (__pTimerListener)
160         {
161                 __pTimerListener->SetTouchGestureTimerManager(null);
162                 delete __pTimerListener;
163                 __pTimerListener = null;
164         }
165
166         if (__pTimer)
167         {
168                 delete __pTimer;
169                 __pTimer = null;
170         }
171 }
172
173 _TouchGestureTimerManager::~_TouchGestureTimerManager(void)
174 {
175         if (__pTimer)
176         {
177                 __pTimer->Cancel();
178
179                 delete __pTimer;
180                 __pTimer = null;
181         }
182
183         if (__pTimerListener)
184         {
185                 __pTimerListener->SetTouchGestureTimerManager(null);
186                 delete __pTimerListener;
187                 __pTimerListener = null;
188         }
189 }
190
191 _TouchGestureDetector*
192 _TouchGestureTimerManager::GetGestureDetector(void) const
193 {
194         return __pGestureDetector;
195 }
196
197 bool
198 _TouchGestureTimerManager::IsTimerStarted(void)
199 {
200         return __isTimerStarted;
201 }
202
203 void
204 _TouchGestureTimerManager::SetTimerState(bool started)
205 {
206         __isTimerStarted = started;
207 }
208
209 void
210 _TouchGestureTimerManager::SetTimerExpiredState(bool expired)
211 {
212         __isTimerExpired = expired;
213 }
214
215 result
216 _TouchGestureTimerManager::StartTimer(int time)
217 {
218         SysTryReturnResult(NID_UI, __pTimer != null, E_SYSTEM, "[E_SYSTEM] System error occurred. ");
219
220         result r = __pTimer->Start(time);
221         SysTryReturnResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating", GetErrorMessage(r));
222
223         __isTimerStarted = true;
224         __isTimerExpired = false;
225
226         return E_SUCCESS;
227 }
228
229 bool
230 _TouchGestureTimerManager::IsTimerExpired(void)
231 {
232         return __isTimerExpired;
233 }
234
235 result
236 _TouchGestureTimerManager::CancelTimer(void)
237 {
238         result r = __pTimer->Cancel();
239         SysTryReturnResult(NID_UI, r == E_SUCCESS, r, "[%s] Propagating", GetErrorMessage(r));
240
241         __isTimerStarted = false;
242         __isTimerExpired = true;
243
244         return E_SUCCESS;
245 }
246
247 }} // Tizen::Ui
248