Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_TabPresenter.h
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  * @file                FUiCtrl_TabPresenter.h
19  * @brief       This is the header file for the _TabPresenter class.
20  *
21  * This header file contains the declarations of the %_TabPresenter class.
22  */
23 #ifndef _FUICTRL_INTERNAL_TAB_PRESENTER_H_
24 #define _FUICTRL_INTERNAL_TAB_PRESENTER_H_
25
26 #include <FBaseObject.h>
27 #include <FUiAnimIVisualElementAnimationStatusEventListener.h>
28 #include "FUiCtrl_Tab.h"
29 #include "FUiCtrl_TabModel.h"
30 #include "FUiCtrl_TabItem.h"
31 #include "FUiCtrl_FlickAnimation.h"
32
33 namespace Tizen { namespace Ui { namespace Animations {
34         class _VisualElement;
35         class VisualElementAnimation;
36 }}} // Tizen::Ui::Animations
37
38 namespace Tizen { namespace Graphics {
39         class Bitmap;
40         class Font;
41 }} // Tizen::Graphics
42
43 namespace Tizen { namespace Graphics { namespace _Text {
44         class TextObject;
45 }}} // Tizen::Graphics::_Text
46
47 namespace Tizen { namespace Base { namespace RunTime {
48         class Timer;
49 }}}
50 namespace Tizen { namespace Ui { namespace Controls {
51         class _Tab;
52         class _TabModel;
53         class _TabItem;
54         class _FlickAnimation;
55
56 const int _TIMER_COUNT = 3;
57 const int _TAB_ITEM_MAXCOUNT = 14;
58 /**
59  * @class _TabPresenter
60  * @brief
61  * @since 2.0
62  *
63  *
64  *
65  *
66  */
67 class _TabPresenter
68         : public Tizen::Base::Object
69         , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
70         , public Tizen::Base::Runtime::ITimerEventListener
71 {
72
73 public:
74         _TabPresenter(void);
75         virtual ~_TabPresenter(void);
76
77 public:
78         result Construct(const _Tab& tab);
79
80 public:
81
82         void SetSelectedItemIndex(int index);
83         int GetSelectedItemIndex(void) const;
84
85         void SetPressedItemIndex(int index);
86         int GetPressedItemIndex(void) const;
87
88         void SetFirstDrawnItemIndex(int index);
89         int GetFirstDrawnItemIndex(void) const;
90
91         void SetEditModeEnabled(bool enable);
92         bool IsEditModeEnabled(void) const;
93
94         int GetItemCount(void) const;
95         _TabItem* GetItemAt(int index);
96
97         result SetItemStatus(int index, _TabItemStatus status);
98         _TabItemStatus GetItemStatus(int index) const;
99
100         int GetItemIndexFromPosition(const Tizen::Graphics::Point& point) const;
101         int GetNextItemIndexFromPosition(const Tizen::Graphics::Point& point, int currentIndex) const;
102
103         void Draw(void);
104         void SetReCalculateItemBounds(bool reCalculationRequired);
105
106         float CalculateProgress(float timeProgress) const;
107
108         result StartReorderTimer(int);
109         result ResetReorderTimer(int index = 0);
110         result CancelReorderTimer(void);
111         result StopReorderTimer(void);
112         void StartReorderAnimation(int, int);
113         void FreeHorizontalLineBitmap();
114
115         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
116         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
117         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
118
119         virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target);
120         virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount);
121         virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
122
123         virtual bool OnLongPressGestureDetected(void);
124         virtual bool OnFlickGestureDetected(_TouchFlickGestureDetector& gesture);
125         void OnFontChanged(Tizen::Graphics::Font* pFont);
126         void OnFontInfoRequested(unsigned long& style, int& size);
127         void OnBoundsChanged(void);
128
129         virtual bool OnAccessibilityFocusMovedNext(const Tizen::Ui::_AccessibilityContainer& control, const Tizen::Ui::_AccessibilityElement& element);
130         virtual bool OnAccessibilityFocusMovedPrevious(const Tizen::Ui::_AccessibilityContainer& control, const Tizen::Ui::_AccessibilityElement& element);
131 protected:
132         result SetModel(const _TabModel& tabModel);
133
134 private:
135
136         result LoadBitmap(void);
137         void DrawResourceBitmap(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& bounds, Tizen::Graphics::Bitmap* pBitmap);
138
139         void DrawTextItem(Tizen::Graphics::Canvas* pCanvas);
140
141         void DrawItemBackground(Tizen::Graphics::Canvas* pCanvas, Tizen::Graphics::Rectangle& itemRect);
142
143         void DrawFocusItemBackground(Tizen::Graphics::Canvas* pCanvas, Tizen::Graphics::Rectangle& itemRect);
144         void DrawSelectedItemBackground(Tizen::Graphics::Canvas* pCanvas, Tizen::Graphics::Rectangle& itemRect);
145
146         void DrawIconItem(Tizen::Graphics::Canvas* pCanvas);
147         void DrawItem(Tizen::Graphics::Canvas* pCanvas);
148
149         void DrawEditItem(const Tizen::Graphics::Point& point);
150         void DrawItemDivisionVerticalLine(Tizen::Graphics::Canvas* pCanvas, Tizen::Graphics::Rectangle& lineRect);
151         void DrawHorizontal(void);
152         void DrawBadgeIcon(_TabItem* pDrawItem, Tizen::Graphics::Canvas* pCanvas);
153
154
155         void CalcItemBounds(void);
156         void CalcTabBounds(bool bReset);
157
158         void StartFlickAnimation(void);
159         result StartFlickAnimationTimer(void);
160         result ResetFlickAnimationTimer(void);
161
162         result StartScrollAnimationTimer(void);
163         result ResetScrollAnimationTimer(void);
164
165         void SetItemFit(int);
166         void SetItemFitToLeft(void);
167         void SetItemFitToRight(void);
168         void SwapItems(int indexDest, int distance);
169         void ShiftItems(void);
170
171         void SetFirstLoadedItemIndex(void);
172         void SetLastLoadedItemIndex(void);
173
174         void StartScrollingEffect(void);
175         void SetOpacityVisualElement(int xPosition);
176
177         virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
178
179         void RefreshAccessibilityElement(void);
180
181 private:
182         _TabPresenter(const _TabPresenter& value);
183         _TabPresenter& operator=(const _TabPresenter& value);
184
185 private:
186         _Tab* __pTab;
187
188         _TabModel* __pTabModel;
189
190         Tizen::Graphics::Font* __pFont;
191
192         Tizen::Graphics::_Text::TextObject* __pTextObject;
193
194         Tizen::Graphics::Point __currentTouchPosition;
195         Tizen::Graphics::Rectangle __dividerLine;
196         Tizen::Graphics::Rectangle __selectedLine;
197
198         struct ReorderAnimationInfo *__pAnimInfo[_TAB_ITEM_MAXCOUNT];
199         struct TimerInfo *__pTimerInfo[_TIMER_COUNT];
200         bool __recalc;
201         bool __editMode;
202
203         int __editItemIndex;
204
205         Tizen::Graphics::Bitmap* __pVerticalLineBitmap;
206         Tizen::Graphics::Bitmap* __pHorizontalLineBitmap;
207
208         Tizen::Graphics::Bitmap* __pFrontScrollingEffectBitmap;
209         Tizen::Graphics::Bitmap* __pRearScrollingEffectBitmap;
210         Tizen::Graphics::Bitmap* __pScrollingEffectBitmap;
211         Tizen::Ui::Animations::_VisualElement* __pScrollingEffectVe;
212
213         Tizen::Base::Runtime::Timer* __pFlickAnimationTimer;
214         Tizen::Base::Runtime::Timer* __pScrollAnimationTimer;
215
216         _FlickAnimation __flickAnimation;
217
218         Tizen::Graphics::Color backgroundColor;
219         int __startShowIndex;
220         int __showItemCount;
221         int __width;
222         int __height;
223         static const int FLICK_ANIMATION_TIMER_PERIOD = 3;
224         static const int FLICK_ANIMATION_FPS_TAB = 30;
225         static const int FLICK_ANIMATION_SENSITIVITY_TAB = 30;
226         static const int SCROLL_ANIMATION_TIMER_PERIOD = 500;
227
228         static const int REORDER_TIMER_PERIOD = 1;
229
230         int __moveDistance;
231         bool __isFlickEnabled;
232         int __itemMaxCount;
233         int __itemWidth;
234         int __itemHeight;
235         int __rearIndex;
236         bool __isRightScrolable;
237         bool __isLeftScrolable;
238
239         bool __isDirectionRight;
240         bool __isTimerCanceled;
241         float __flickMove;;
242         int __flickDistance;
243         int __flickFlag;
244         int __reorderDist;
245
246         int __firstItemIndex;
247         int __lastItemIndex;
248
249         int __firstLoadedItemIndex;
250         int __lastLoadedItemIndex;
251
252         int __selectedLineLeftMargin;
253         int __selectedLineRightMargin;
254         bool __isScrollEffectEnded;
255         bool __isScrollEffectStarted;
256         int __timerCount;
257         bool __isTouchMove;
258         int __scrollFlag;
259         int __tabMinimumSize;
260
261 };
262
263 }}} // Tizen::Ui::Controls
264
265 #endif // _FUICTRL_INTERNAL_TAB_PRESENTER_H_
266
267