2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
19 * @file FUiCtrl_IconListPresenter.h
20 * @brief This is the header file for the _IconListPresenter class.
23 #ifndef _FUI_CTRL_INTERNAL_ICON_LIST_PRESENTER_H_
24 #define _FUI_CTRL_INTERNAL_ICON_LIST_PRESENTER_H_
26 #include <FBaseRtITimerEventListener.h>
27 #include <FBaseRtTimer.h>
28 #include <FGrpCanvas.h>
29 #include <FGrpFloatRectangle.h>
30 #include <FGrpPoint.h>
31 #include <FGrpRectangle.h>
32 #include <FUiCtrlControlsTypes.h>
33 #include <FUiCtrlIconListViewTypes.h>
34 #include <FUiCtrlIIconListViewItemProvider.h>
35 #include <FUiCtrlListViewTypes.h>
36 #include <FUiCtrlScrollEventTypes.h>
38 #include "FUi_ControlImpl.h"
39 #include "FUi_UiTouchEvent.h"
40 #include "FUiCtrl_FlickAnimation.h"
41 #include "FUiCtrl_IconListUtils.h"
42 #include "FUiCtrl_IconListViewItemEventArg.h"
43 #include "FUiCtrl_IScrollEventListener.h"
45 namespace Tizen { namespace Ui
47 class _AccessibilityElement;
50 namespace Tizen { namespace Ui { namespace Controls
54 class _IconListItemDrawingProperty;
55 class _IconListItemProviderAdaptor;
57 class _IListItemProviderAdaptor;
60 class _IconListPresenter
61 : public Tizen::Base::Object
62 , public Tizen::Base::Runtime::ITimerEventListener
63 , virtual public Tizen::Base::Runtime::IEventListener
64 , virtual public _IScrollEventListener
68 virtual ~_IconListPresenter(void);
70 static _IconListPresenter* CreateInstanceN(_IconListView& pIconListView);
78 result SetItemProvider(const IIconListViewItemProvider& provider);
80 result RegisterItemProviderAdaptor(_IListItemProviderAdaptor* pItemProviderAdaptor);
82 result SetScrollDirection(IconListViewScrollDirection scrollDirection);
84 result SetTopMargin(int value);
86 int GetTopMargin(void) const;
88 result SetBottomMargin(int value);
90 int GetBottomMargin(void) const;
92 result SetLeftMargin(int value);
94 int GetLeftMargin(void) const;
96 result SetRightMargin(int value);
98 int GetRightMargin(void) const;
100 result SetItemSpacing(int horizontalSpacing, int verticalSpacing);
102 int GetItemHorizontalSpacing(void) const;
104 int GetItemVerticalSpacing(void) const;
106 void SetUseCheckedStyle(bool checkedStyle);
108 result SetItemChecked(int index, bool check);
110 bool IsItemChecked(int index) const;
112 int GetItemIndexFromPosition(int x, int y) const;
114 int GetItemIndexFromPosition(const Tizen::Graphics::Point& position) const;
116 result SetTextHorizontalAlignment(HorizontalAlignment alignment);
118 result SetTextVerticalAlignment(IconListViewItemTextVerticalAlignment alignment);
120 HorizontalAlignment GetTextHorizontalAlignment(void) const;
122 IconListViewItemTextVerticalAlignment GetTextVerticalAlignment(void) const;
124 result SetItemTextColor(IconListViewItemDrawingStatus status, const Tizen::Graphics::Color& color);
126 const Tizen::Graphics::Color GetItemTextColor(IconListViewItemDrawingStatus status) const;
128 result SetItemTextSize(int size);
130 int GetItemTextSize(void) const;
132 result SetCheckBoxPosition(IconListViewCheckBoxPosition position);
134 IconListViewCheckBoxPosition GetCheckBoxPosition(void) const;
136 result SetTouchAnimationEnabled(bool enable);
138 bool IsTouchAnimationEnabled(void) const;
140 result ScrollToItem(int index);
142 result ScrollByPixel(int pixel);
144 result RefreshList(int index, ListRefreshType type);
146 result UpdateList(void);
148 result SetItemBitmapBounds(const Tizen::Graphics::Rectangle& bounds);
150 const Tizen::Graphics::Rectangle GetItemBitmapBounds(void) const;
152 result GetItemBitmapSize(int& width, int& height) const;
154 const Tizen::Graphics::Dimension GetItemBitmapSize(void) const;
156 result SetItemSize(const Tizen::Graphics::Dimension& size);
158 result GetItemSize(int& width, int& height) const;
160 const Tizen::Graphics::Dimension GetItemSize(void) const;
162 result SetMagneticScrollSize(int scrollSize);
164 int GetMagneticScrollSize(void) const;
166 void SetItemCountPerAxis(int itemCountPerAxis);
168 int GetItemCountPerAxis(void) const;
170 result SetItemLayoutHorizontalAlignment(HorizontalAlignment alignment);
172 result SetItemLayoutVerticalAlignment(VerticalAlignment alignment);
174 HorizontalAlignment GetItemLayoutHorizontalAlignment(void) const;
176 VerticalAlignment GetItemLayoutVerticalAlignment(void) const;
178 result SetItemBorderStyle(IconListViewItemBorderStyle borderStyle);
180 IconListViewItemBorderStyle GetItemBorderStyle(void) const;
182 _IconListItemDrawingProperty* GetItemDrawingProperty(void) const;
184 void ClearVisualElement(void);
186 result SetNonSlidableList(void);
188 result AddItem(_IconListItem* pItem);
190 result InsertItemAt(int index, _IconListItem* pItem);
192 result SetItemAt(int index, _IconListItem* pItem);
194 result RemoveItemAt(int index);
196 result RemoveAllItems(void);
198 void SetItemBitmapAsAspectRatio(bool isAspect);
200 bool IsItemBitmapAsAspectRatio(void) const;
202 result SetReorderModeEnabled(bool enable);
204 void ScrollFadeOut(bool showEffect = false);
208 // Tizen::Ui::_Control
209 virtual void OnBoundsChanged(void);
210 virtual void OnFontInfoRequested(unsigned long& style, int& size);
211 virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
213 // Tizen::Ui::_IKeyEventPreviewer
214 virtual bool OnPreviewKeyPressed(const _Control& source, const _KeyInfo& keyInfo);
215 virtual bool OnPreviewKeyReleased(const _Control& source, const _KeyInfo& keyInfo);
217 // Tizen::Ui::_IKeyEventListener
218 virtual bool OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo);
219 virtual bool OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo);
221 // Tizen::Ui::_INotificationEventPreviewer
222 virtual bool OnPreviewNotifiedN(const _Control& source, Tizen::Base::Collection::IList* pArgs);
224 // Tizen::Ui::_INotificationEventListener
225 virtual bool OnNotifiedN(const _Control& source, Tizen::Base::Collection::IList* pArgs);
227 // Tizen::Ui::_ITouchEventPreviewer
228 virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
230 // Tizen::Ui::_ITouchEventListener
231 virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
232 virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
233 virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
234 virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
236 // GestureListener Callback API
237 bool OnFlickGestureDetected(bool isFlicked, const Tizen::Graphics::Point& flickPosition, int flickTime);
238 bool OnLongPressGestureDetected(void);
240 // Tizen::Base::Runtime::ITimerEventListener
241 virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
243 void OnVisibleStateChanged(void);
245 // Tizen::Ui::_IScrollEventListener
246 virtual void OnScrollEndReached(Tizen::Ui::_Control& source, ScrollEndEvent type);
247 virtual void OnScrollPositionChanged(Tizen::Ui::_Control& source, int scrollPos);
248 virtual void OnScrollStopped(Tizen::Ui::_Control& source);
250 // Osp::Ui::Animations::IAnimationTransactionEventListener
251 virtual void OnAnimationTransactionStarted(int transactionId);
252 virtual void OnAnimationTransactionStopped(int transactionId);
253 virtual void OnAnimationTransactionFinished(int transactionId);
256 result Dispose(void);
257 result Initialize(void);
258 result InitializeFont(void);
261 result DrawEmptyList(void);
262 result DrawHorizontalScrollList(void);
263 result DrawVerticalScrollList(void);
265 void AdjustLayout(void);
266 void UpdateDrawnIndex(void);
268 void HideItems(int startIndex, int endIndex);
270 result RedrawItem(int index, float ratio = 1.0f, bool doShow = true, float checkRatio = 1.0f);
272 result FireIconListViewItemEvent(_IconListViewItemEventType eventType, int index, int arg);
273 result FireScrollEndReachedEvent(ScrollEndEvent type);
274 result FireScrollPositionChangedEvent(int scrollPosition);
275 result FireScrollStoppedEvent();
276 result FireScrollEvent();
278 bool SetScrollPosition(int position, bool enableFadeEffect = true);
280 int GetMagneticScrollPosition(void) const;
282 void TranslateIconListItemPosition(int& x, int& y);
284 Tizen::Graphics::Rectangle GetItemBounds(int index) const;
286 // visual interaction animation
287 void AddAnimation(_IconListItem& item, int index, int delay = 0);
288 void RemoveAnimation(_IconListItem& item, int index);
289 void MoveAnimation(_IconListItem& item, Tizen::Graphics::FloatRectangle& bounds, int delay = 0);
290 void MoveAnimation(_IconListItem& item, Tizen::Graphics::FloatRectangle& bounds, int delay, bool fadeIn);
291 void MoveAnimation(_IconListItem& item, Tizen::Graphics::FloatRectangle& startBounds, Tizen::Graphics::FloatRectangle& endBounds, int delay = 0);
292 void RemoveAllAnimation(_IconListItem& item);
294 void MoveForward(int index);
295 void MoveBackward(int index);
296 bool IsAnimationRunning(int transactionId);
298 void InitializeAccessibilityElement(void);
299 void AddAccessibilityElement(_IconListItem& item, const Tizen::Graphics::Rectangle& rect);
300 void RemoveAllAccessibilityElements(void);
303 _IconListPresenter(_IconListView* pIconListView, _ListViewModel* pListModel);
304 _IconListPresenter(const _IconListPresenter& rhs);
305 _IconListPresenter& operator =(const _IconListPresenter& rhs);
307 virtual bool OnTouchActionActivated(const _Control& source, const _TouchInfo& touchinfo);
310 void ProcessAfterTouchRelease(int index);
311 void FireEventAfterTouchRelease(int index);
313 void PrepareReordering(void);
314 void DoReordering(const Tizen::Graphics::Point& movedPosition);
315 void CheckAndReorderItem(int movedX, int movedY);
316 void SwapReorderedItems(int toIndex, bool singleItemChanged);
317 void FinishReordering(void);
318 void ClearReorderingInformation(void);
320 result StartSelectionAnimationTimer(void);
321 result ResetSelectionAnimationTimer(void);
323 result StartCheckAnimationTimer(void);
324 result ResetCheckAnimationTimer(void);
326 result StartTouchActionTimer(void);
327 result ResetTouchActionTimer(void);
329 result StartFlickAnimationTimer(void);
330 result ResetFlickAnimationTimer(void);
331 void StartFlickAnimation(void);
333 result StartMagneticScrollTimer(void);
334 result ResetMagneticScrollTimer(void);
336 result StartReorderScrollTimer(void);
337 result ResetReorderScrollTimer(void);
338 void StartReorderScrollAnimation(void);
340 result StartAnimationTimer(int delay);
341 result ResetAnimationTimer(void);
345 static const int DEFAULT_GROUP_INDEX = 0;
346 static const int INVALID_INDEX = -1;
347 static const int ITEM_CACHE_SIZE_MULTIPLIER = 5;
348 static const int MINIMUM_FLICK_EFFECT_TIME = 80;
349 static const int FLICK_ANIMATION_TIMER_PERIOD = 10;
350 static const int MAGNETIC_SCROLL_TIMER_PERIOD = 10;
351 static const int SELECTION_ANIMATION_TIMER_PERIOD = 30;
352 static const int TOUCH_ACTION_TIMER_PERIOD = 100;
353 static const int REORDER_SCROLL_TIMER_PERIOD = 20;
354 static const int REORDER_SCROLL_ANIMATION_DISTANCE = 10;
355 static const int ITEM_ANIMATION_DURATION = 333;
356 static const int ITEM_ANIMATION_DELAY = 334;
357 static const int MOVE_ITEM_ANIMATION_DURATION = 500;
358 static const int MOVE_ITEM_ANIMATION_DELAY = 167;
359 static const int SCREEN_WIDTH = 480;
360 static const int SCREEN_HEIGHT = 800;
361 static const int NEEDED_FLICK_COUNT_FOR_FINGER_FASTSCROLL = 3;
362 static const int OVERSCROLLING_MAX_DISTANCE = 400;
364 _ListViewModel* __pListModel;
365 _IconListView* __pIconListView;
366 _IListItemProviderAdaptor* __pItemProviderAdaptor;
367 Tizen::Graphics::Color __backgroundColor;
368 Tizen::Ui::_TouchInfo __currentTouchInfo;
369 int __selectedOverlayBitmapId;
372 int __highlightedIndex;
373 int __firstDrawnIndex;
374 int __lastDrawnIndex;
375 IconListViewScrollDirection __scrollDirection;
380 int __horizontalSpacing;
381 int __verticalSpacing;
382 int __magneticScrollSize;
383 int __itemCountPerAxis;
384 HorizontalAlignment __itemHorizontalAlignment;
385 VerticalAlignment __itemVerticalAlignment;
386 int __scrollPosition;
387 int __unitScrollLength;
389 int __unitLengthOfAxis;
390 int __startPosOfAxis;
392 _IconListItemDrawingProperty* __pItemDrawingProperty;
393 Tizen::Base::Runtime::Timer* __pSelectionAnimationTimer;
394 Tizen::Base::Runtime::Timer* __pCheckAnimationTimer;
395 Tizen::Base::Runtime::Timer* __pTouchActionTimer;
396 Tizen::Base::Runtime::Timer* __pFlickAnimationTimer;
397 Tizen::Base::Runtime::Timer* __pMagneticScrollTimer;
398 Tizen::Base::Runtime::Timer* __pAnimationTimer;
399 _FlickAnimation __flickAnimation;
400 _IconListUtils::TouchAnimation __touchAnimation;
401 _IconListUtils::MagneticScrollAnimation __magneticScrollAnimation;
402 _IconListUtils::CheckAnimation __checkAnimation;
403 bool __isTouchAnimationEnabled;
404 bool __previousTouchAnimatinEnabled;
405 bool __isLayoutChanged;
406 bool __isTouchPressed;
408 bool __requireNextDrawing;
410 bool __enableCustomItemProviderAdaptor;
411 bool __listStatusChanged;
412 bool __needBaseCanvas;
413 bool __isSelectionDelayed;
415 Tizen::Ui::Animations::_VisualElement* __pRemoveItemVE;
416 Tizen::Ui::Animations::_VisualElement* __pEmptyListVE;
417 Tizen::Ui::Animations::_VisualElement* __pVE;
421 int __reorderFromIndex;
422 int __reorderToIndex;
423 Tizen::Graphics::Point __lastReorderedPosition;
424 Tizen::Graphics::Point __lastReorderedDifferences;
425 Tizen::Graphics::FloatRectangle __reorderItemBounds;
426 Tizen::Base::Runtime::Timer* __pReorderScrollTimer;
427 int __reorderScrollAnimationDistance;
428 int __scrollPositionBeforeScrollAnimation;
433 int __animationItemIndex;
434 int __addTransactionId;
435 int __removeTransactionId;
436 int __moveTransactionId;
438 }; // _IconListPresenter
440 }}} // Tizen::Ui::Controls
442 #endif // _FUI_CTRL_INTERNAL_ICON_LIST_PRESENTER_H_