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