fc381cbaeabd50e0a0f84e84603930535a49c782
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_ToolbarPresenter.h
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                FUiCtrl_ToolbarPresenter.h
19  * @brief               This is the header file fo  r the _ToolbarPresenter class.
20  *
21  * This header file contains the declarations of the %_ToolbarPresenter class.
22  */
23
24 #ifndef _FUI_CTRL_INTERNAL_TOOLBAR_PRESENTER_H_
25 #define _FUI_CTRL_INTERNAL_TOOLBAR_PRESENTER_H_
26
27 #include <FBaseObject.h>
28 #include <FUiAnimIVisualElementAnimationStatusEventListener.h>
29 #include <FGrp_TextTextObject.h>
30 #include "FUiCtrl_FlickAnimation.h"
31 #include "FUiCtrl_Toolbar.h"
32
33 namespace Tizen { namespace Ui { namespace Animations {
34         class VisualElementAnimation;
35 }}} // Tizen::Ui::Animations
36
37 namespace Tizen { namespace Ui { namespace Controls
38 {
39
40 class _Toolbar;
41 class _ToolbarModel;
42 class _Label;
43 class _FlickAnimation;
44
45 /**
46  * @class       _ToolbarPresenter
47  * @brief       The presenter class of _Toolbar class
48  * @since 2.0
49  */
50 class _ToolbarPresenter
51         : public Tizen::Base::Object
52         , public Tizen::Base::Runtime::ITimerEventListener
53         , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
54         , virtual public Tizen::Base::Runtime::IEventListener
55 {
56 public:
57         _ToolbarPresenter(void);
58
59         virtual ~_ToolbarPresenter(void);
60
61         result Construct(const _Toolbar& toolbar);
62
63         result Install(void);
64
65         result Draw(void);
66
67         void DrawBackground(void);
68
69         void DrawDescriptionText(void);
70
71         void DrawEditItem(const Tizen::Graphics::FloatPoint& point);
72
73         void DrawDivider(const Tizen::Graphics::FloatPoint& point, Tizen::Graphics::Canvas* pCanvas);
74
75         void DrawItems(void);
76
77         result DrawTitleText(Tizen::Graphics::Canvas* pCanvas);
78
79         int GetSelectedItemIndex(void) const;
80
81         bool IsInitialDraw(void) const;
82
83         bool IsTabEditModeEnabled(void) const;
84
85         result SetDescriptionText(const Tizen::Base::String& description);
86
87         result SetItemSelected(int itemIndex, bool adjust);
88
89         result SetInitialDrawState(bool state);
90
91         result SetTabEditModeEnabled(bool enable);
92
93         result SetTitleText(const Tizen::Base::String& title, HorizontalAlignment alignment);
94
95         result SetUsableAreaBounds(const Tizen::Graphics::FloatRectangle& rect);
96
97         bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
98
99         bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
100
101         bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
102
103         bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
104
105         void OnChangeLayout(Tizen::Ui::_ControlOrientation orientation);
106
107         bool OnLongPressGestureDetected(void);
108
109         virtual bool OnFlickGestureDetected(_TouchFlickGestureDetector& gesture);
110
111         virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
112
113         virtual void OnDrawFocus(void);
114
115         virtual void OnChildControlFocusMoved(const _Control& control);
116
117         virtual bool IsChildControlFocusManage(void) const;
118
119         virtual void OnFocusableStateChanged(bool focusalbeState);
120
121         virtual void OnFocusModeStateChanged(void);
122
123         virtual bool OnFocusGained(const _Control& source);
124
125         virtual bool OnFocusLost(const _Control& source);
126
127         result TimerForTitleSlideInit(void);
128
129         result TimerForTitleSlideStart(void);
130
131         result TimerForTitleSlideTimeout(void);
132
133         Tizen::Graphics::FloatRectangle GetTitleTextBoundsF(void) const;
134
135         Tizen::Graphics::FloatRectangle GetDescriptionBoundsF(void) const;
136
137         void OnFontChanged(Tizen::Graphics::Font* pFont);
138         void OnFontInfoRequested(unsigned long& style, int& size);
139         void OnFontInfoRequested(unsigned long& style, float& size);
140         void OnAncestorVisibleStateChanged(const _Control& control);
141         void SetFontInfo(unsigned long style, float size);
142
143         result AdjustItemPositionX(float distance);
144         void SetItemFit(int);
145         int GetFirstLoadedItemIndex(void);
146
147 protected:
148         result _SetModel(const _ToolbarModel& toolbarModel);
149
150 private:
151         void StartFlickAnimation(void);
152         result StartFlickAnimationTimer(void);
153         result ResetFlickAnimationTimer(void);
154
155         void SetFirstLoadedItemIndex(void);
156         void SetLastLoadedItemIndex(void);
157
158         float CalculateProgress(float timeProgress) const;
159
160         void DrawTitleTextDimBitmap(void);
161
162         virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target);
163         virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount);
164         virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
165
166 private:
167         _Toolbar* __pToolbar;
168
169         _ToolbarModel* __pToolbarModel;
170
171         bool __initialDraw;
172
173         bool __tabEditEnabled;
174
175         bool __beingEdited;
176
177         bool __touchInitiatedInToolbar;
178
179         int __editItemIndex;
180
181         int __pressedItemIndex;
182
183         _ButtonStatus __initialPressesItemStatus;
184
185         _Label* __pEditItem;
186
187         Tizen::Graphics::Bitmap* __pTitleBackgroundBitmap;
188
189         Tizen::Base::Runtime::Timer* __pTitleSlideTimer;
190
191         Tizen::Base::Runtime::Timer* __pFlickAnimationTimer;
192
193         Tizen::Graphics::FloatRectangle __titleRect;
194
195         Tizen::Graphics::FloatRectangle __descriptionRect;
196
197         Tizen::Graphics::FloatRectangle __toolbarUsableArea;
198
199         Tizen::Graphics::FloatPoint __currentTouchPosition;
200
201         Tizen::Base::String __titleText;
202
203         Tizen::Graphics::Font* __pTitleTextFont;
204
205         Tizen::Graphics::Font* __pTextFont;
206
207         Tizen::Graphics::_Text::TextObject* __pDescriptionTextObject;
208
209         Tizen::Graphics::_Text::TextObject* __pTitleTextObject;
210
211         _FlickAnimation __flickAnimation;
212
213         static const int FLICK_ANIMATION_TIMER_PERIOD = 3;
214         static const int FLICK_ANIMATION_FPS_TAB = 30;
215         static const int FLICK_ANIMATION_SENSITIVITY_TAB = 30;
216         static const int FLICK_ANIMATION_COUNT = 50;
217
218
219         float __moveDistance;
220         float __flickMove;
221         float __flickDistance;
222         int __flickFlag;
223         int __firstLoadedItemIndex;
224         int __lastLoadedItemIndex;
225         bool __tabSlideLeft;
226         bool __tabSlideRight;
227
228         Tizen::Graphics::FloatDimension __portraitSize;
229         Tizen::Graphics::FloatDimension __landscapeSize;
230
231         unsigned long __fontStyle;
232         float __fontSize;
233         bool __tabMoved;
234
235         bool __titlePressed;
236         bool __titleSliding;
237
238 private:
239         _ToolbarPresenter(const _ToolbarPresenter& value);
240
241         _ToolbarPresenter& operator =(const _ToolbarPresenter& value);
242
243 };
244
245 }}} // Tizen::Ui::Controls
246
247 #endif  // _FUI_CTRL_INTERNAL_TOOLBAR_PRESENTER_H_