b5f1fd1b3cb56001f250ec3fec18ec4f0716fbd6
[framework/osp/uifw.git] / src / ui / controls / FUiCtrl_FastScroll.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 /**
19  * @file                FUiCtrl_FastScroll.cpp
20  * @brief               This is the implementation file for the _FastScroll class.
21  */
22
23 #include <FBaseSysLog.h>
24 #include "FUiCtrl_FastScroll.h"
25
26 using namespace Tizen::Base;
27 using namespace Tizen::Graphics;
28 using namespace Tizen::Ui::Animations;
29
30 namespace Tizen { namespace Ui { namespace Controls
31 {
32
33
34 class _FastScrollAccessibilityListener
35         : public _IAccessibilityListener
36 {
37 public:
38         _FastScrollAccessibilityListener(_FastScroll* pFastScroll)
39                 : __pFastScroll(pFastScroll)
40                 , __onAccessibility(false)
41         {
42         }
43
44         virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
45         virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
46         virtual bool OnAccessibilityReadingElement(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
47         virtual bool OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
48         virtual bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
49         virtual bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
50         virtual bool OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
51         virtual bool OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element){return true;}
52         virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element)
53         {
54                 if (__onAccessibility)
55                 {
56                         __onAccessibility = false;
57                         __pFastScroll->ReleaseTouchCapture();
58                 }
59                 else
60                 {
61                         __onAccessibility = true;
62                         __pFastScroll->SetTouchCapture(true, false);
63                 }
64
65                 _AccessibilityContainer* pAccessibilityContainer = __pFastScroll->GetAccessibilityContainer();
66                 __pFastScroll->AddAccessibilityElement(*pAccessibilityContainer, __onAccessibility);
67
68                 return true;
69         }
70
71         _FastScroll* __pFastScroll;
72         bool __onAccessibility;
73 };
74
75 _FastScroll::_FastScroll(void)
76         : __pPresenter(null)
77         , __pAccessibilityListener(null)
78 {
79 }
80
81 _FastScroll::~_FastScroll(void)
82 {
83         _AccessibilityContainer* pAccessibilityContainer = GetAccessibilityContainer();
84         if (pAccessibilityContainer && pAccessibilityContainer->IsActivated())
85         {
86                 pAccessibilityContainer->RemoveAllElement();
87         }
88
89         delete __pPresenter;
90         __pPresenter = null;
91
92         delete __pAccessibilityListener;
93         __pAccessibilityListener = null;
94 }
95
96 _FastScroll*
97 _FastScroll::CreateFastScrollN(Tizen::Ui::_Control& parentCtrl)
98 {
99         result r = E_SUCCESS;
100         ClearLastResult();
101
102         _FastScroll* pFastScroll = new (std::nothrow) _FastScroll();
103         SysTryReturn(NID_UI_CTRL, pFastScroll, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
104
105         r = pFastScroll->Construct(parentCtrl);
106         SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
107
108         return pFastScroll;
109
110 CATCH:
111         delete pFastScroll;
112         return null;
113 }
114
115 result
116 _FastScroll::SetIndex(_FastScrollIndex* pIndex)
117 {
118         return GetPresenter().SetRootIndex(pIndex);
119 }
120
121 _FastScrollIndex*
122 _FastScroll::GetIndex(void) const
123 {
124         return GetPresenter().GetRootIndex();
125 }
126
127 result
128 _FastScroll::UpdateIndex(void)
129 {
130         _AccessibilityContainer* pAccessibilityContainer = GetAccessibilityContainer();
131         if (pAccessibilityContainer && pAccessibilityContainer->IsActivated())
132         {
133                 GetPresenter().AddAccessibilityElement(*pAccessibilityContainer, false);
134         }
135         return GetPresenter().UpdateIndex();
136 }
137
138 void
139 _FastScroll::EnableFadeEffect(bool enable)
140 {
141         GetPresenter().EnableFadeEffect(enable);
142 }
143
144 bool
145 _FastScroll::IsEnabledFadeEffect(void) const
146 {
147         return GetPresenter().IsEnabledFadeEffect();
148 }
149
150 bool
151 _FastScroll::IsOnFadeEffect(void) const
152 {
153         return GetPresenter().IsOnFadeEffect();
154 }
155
156 result
157 _FastScroll::SetScrollVisibility(bool visibility)
158 {
159         return GetPresenter().SetScrollVisibility(visibility);
160 }
161
162 bool
163 _FastScroll::GetScrollVisibility(void) const
164 {
165         return GetPresenter().GetScrollVisibility();
166 }
167
168 void
169 _FastScroll::CancelFadeEffect(void)
170 {
171         GetPresenter().CancelFadeEffect();
172 }
173
174 result
175 _FastScroll::InitializeAccessibility(void)
176 {
177         if (unlikely(!(_AccessibilityManager::IsActivated())))
178         {
179                 return E_SUCCESS;
180         }
181
182         _AccessibilityContainer* pAccessibilityContainer = GetAccessibilityContainer();
183         if (pAccessibilityContainer)
184         {
185                 pAccessibilityContainer->Activate(true);
186                 __pAccessibilityListener = new (std::nothrow) _FastScrollAccessibilityListener(this);
187                 SysTryReturnResult(NID_UI_CTRL, __pAccessibilityListener, E_OUT_OF_MEMORY,      "Memory allocation failed.");
188
189                 pAccessibilityContainer->AddListener(*__pAccessibilityListener);
190         }
191         return E_SUCCESS;
192 }
193
194 result
195 _FastScroll::AddAccessibilityElement(const _AccessibilityContainer& control, bool onAccessibility)
196 {
197         return GetPresenter().AddAccessibilityElement(control, onAccessibility);
198 }
199
200 void
201 _FastScroll::AddFastScrollEventListener(const Tizen::Ui::Controls::_IUiFastScrollListener& listener)
202 {
203         GetPresenter().AddFastScrollEventListener(listener);
204 }
205
206 void
207 _FastScroll::RemoveFastScrollEventListener(const Tizen::Ui::Controls::_IUiFastScrollListener& listener)
208 {
209         GetPresenter().RemoveFastScrollEventListener(listener);
210 }
211
212 result
213 _FastScroll::OnAttachedToMainTree(void)
214 {
215         return InitializeAccessibility();
216 }
217
218 void
219 _FastScroll::OnParentBoundsChanged(void)
220 {
221         GetPresenter().OnParentBoundsChanged();
222 }
223
224 void
225 _FastScroll::OnDraw(void)
226 {
227         GetPresenter().OnDraw();
228 }
229
230 bool
231 _FastScroll::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
232 {
233         return GetPresenter().OnTouchPressed(source, touchinfo);
234 }
235
236 bool
237 _FastScroll::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
238 {
239         return GetPresenter().OnTouchReleased(source, touchinfo);
240 }
241
242 bool
243 _FastScroll::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
244 {
245         return GetPresenter().OnTouchMoved(source, touchinfo);
246 }
247
248 bool
249 _FastScroll::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
250 {
251         return GetPresenter().OnTouchCanceled(source, touchinfo);
252 }
253
254 void
255 _FastScroll::OnAncestorVisibleStateChanged(const _Control& control)
256 {
257         GetPresenter().OnAncestorVisibleStateChanged(control);
258 }
259
260 void
261 _FastScroll::OnAncestorEnableStateChanged(const _Control& control)
262 {
263         GetPresenter().OnAncestorEnableStateChanged(control);
264 }
265
266 void
267 _FastScroll::OnAncestorInputEnableStateChanged(const _Control& control)
268 {
269         GetPresenter().OnAncestorInputEnableStateChanged(control);
270 }
271
272 void
273 _FastScroll::OnFontChanged(Font* pFont)
274 {
275         GetPresenter().OnFontChanged(pFont);
276 }
277
278 void
279 _FastScroll::OnFontInfoRequested(unsigned long& style, float& size)
280 {
281         GetPresenter().OnFontInfoRequested(style, size);
282 }
283
284 HitTestResult
285 _FastScroll::HitTest(const Tizen::Graphics::FloatPoint& point)
286 {
287         return GetPresenter().HitTest(point);
288 }
289
290 result
291 _FastScroll::Construct(Tizen::Ui::_Control& parentCtrl)
292 {
293         _FastScrollPresenter* pPresenter = _FastScrollPresenter::CreateFastScrollPresenterN(parentCtrl, *this);
294         SysTryReturnResult(NID_UI_CTRL, pPresenter, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
295
296         SetPresenter(*pPresenter);
297
298         AcquireHandle();
299
300         return E_SUCCESS;
301 }
302
303 void
304 _FastScroll::SetPresenter(_FastScrollPresenter& fastScrollPresenter)
305 {
306         __pPresenter = &fastScrollPresenter;
307 }
308
309 _FastScrollPresenter&
310 _FastScroll::GetPresenter(void) const
311 {
312         return *__pPresenter;
313 }
314
315 } } } // Tizen::Ui::Controls