apply divider visualelement
[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 DrawDivider(void);
70
71         void DrawDescriptionText(void);
72
73         void DrawEditItem(const Tizen::Graphics::FloatPoint& point);
74
75         void DrawDividerLine(const Tizen::Graphics::FloatPoint& point, Tizen::Graphics::Canvas* pCanvas);
76
77         void DrawItems(void);
78
79         result DrawTitleText(Tizen::Graphics::Canvas* pCanvas);
80
81         int GetSelectedItemIndex(void) const;
82
83         bool IsInitialDraw(void) const;
84
85         bool IsTabEditModeEnabled(void) const;
86
87         result SetDescriptionText(const Tizen::Base::String& description);
88
89         result SetItemSelected(int itemIndex, bool adjust);
90
91         result SetInitialDrawState(bool state);
92
93         result SetTabEditModeEnabled(bool enable);
94
95         result SetTitleText(const Tizen::Base::String& title, HorizontalAlignment alignment);
96
97         result SetUsableAreaBounds(const Tizen::Graphics::FloatRectangle& rect);
98
99         bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
100
101         bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
102
103         bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
104
105         bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
106
107         void OnChangeLayout(Tizen::Ui::_ControlOrientation orientation);
108
109         bool OnLongPressGestureDetected(void);
110
111         virtual bool OnFlickGestureDetected(_TouchFlickGestureDetector& gesture);
112
113         virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
114
115         virtual void OnDrawFocus(void);
116
117         virtual void OnChildControlFocusMoved(const _Control& control);
118
119         virtual bool IsChildControlFocusManage(void) const;
120
121         virtual void OnFocusableStateChanged(bool focusalbeState);
122
123         virtual void OnFocusModeStateChanged(void);
124
125         virtual bool OnFocusGained(const _Control& source);
126
127         virtual bool OnFocusLost(const _Control& source);
128
129         result TimerForTitleSlideInit(void);
130
131         result TimerForTitleSlideStart(void);
132
133         result TimerForTitleSlideTimeout(void);
134
135         Tizen::Graphics::FloatRectangle GetTitleTextBoundsF(void) const;
136
137         Tizen::Graphics::FloatRectangle GetDescriptionBoundsF(void) const;
138
139         void OnFontChanged(Tizen::Graphics::Font* pFont);
140         void OnFontInfoRequested(unsigned long& style, int& size);
141         void OnFontInfoRequested(unsigned long& style, float& size);
142         void OnAncestorVisibleStateChanged(const _Control& control);
143         void SetFontInfo(unsigned long style, float size);
144
145         result AdjustItemPositionX(float distance);
146         void SetItemFit(int);
147         int GetFirstLoadedItemIndex(void);
148
149 protected:
150         result _SetModel(const _ToolbarModel& toolbarModel);
151
152 private:
153         void StartFlickAnimation(void);
154         result StartFlickAnimationTimer(void);
155         result ResetFlickAnimationTimer(void);
156
157         void SetFirstLoadedItemIndex(void);
158         void SetLastLoadedItemIndex(void);
159
160         float CalculateProgress(float timeProgress) const;
161
162         void DrawTitleTextDimBitmap(void);
163
164         virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target);
165         virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount);
166         virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
167
168 private:
169         _Toolbar* __pToolbar;
170
171         _ToolbarModel* __pToolbarModel;
172
173         bool __initialDraw;
174
175         bool __tabEditEnabled;
176
177         bool __beingEdited;
178
179         bool __touchInitiatedInToolbar;
180
181         int __editItemIndex;
182
183         int __pressedItemIndex;
184
185         _ButtonStatus __initialPressesItemStatus;
186
187         _Label* __pEditItem;
188
189         Tizen::Graphics::Bitmap* __pTitleBackgroundBitmap;
190
191         Tizen::Base::Runtime::Timer* __pTitleSlideTimer;
192
193         Tizen::Base::Runtime::Timer* __pFlickAnimationTimer;
194
195         Tizen::Graphics::FloatRectangle __titleRect;
196
197         Tizen::Graphics::FloatRectangle __descriptionRect;
198
199         Tizen::Graphics::FloatRectangle __toolbarUsableArea;
200
201         Tizen::Graphics::FloatPoint __currentTouchPosition;
202
203         Tizen::Base::String __titleText;
204
205         Tizen::Graphics::Font* __pTitleTextFont;
206
207         Tizen::Graphics::Font* __pTextFont;
208
209         Tizen::Graphics::_Text::TextObject* __pDescriptionTextObject;
210
211         Tizen::Graphics::_Text::TextObject* __pTitleTextObject;
212
213         Tizen::Ui::Animations::VisualElement* __pBouncingEffectVe;
214
215         _FlickAnimation __flickAnimation;
216
217         static const int FLICK_ANIMATION_TIMER_PERIOD = 3;
218         static const int FLICK_ANIMATION_FPS_TAB = 30;
219         static const int FLICK_ANIMATION_SENSITIVITY_TAB = 30;
220         static const int FLICK_ANIMATION_COUNT = 50;
221
222
223         float __moveDistance;
224         float __flickMove;
225         float __flickDistance;
226         int __flickFlag;
227         int __firstLoadedItemIndex;
228         int __lastLoadedItemIndex;
229         bool __tabSlideLeft;
230         bool __tabSlideRight;
231
232         Tizen::Graphics::FloatDimension __portraitSize;
233         Tizen::Graphics::FloatDimension __landscapeSize;
234
235         unsigned long __fontStyle;
236         float __fontSize;
237         bool __tabMoved;
238
239         bool __titlePressed;
240         bool __titleSliding;
241
242 private:
243         _ToolbarPresenter(const _ToolbarPresenter& value);
244
245         _ToolbarPresenter& operator =(const _ToolbarPresenter& value);
246
247 };
248
249 }}} // Tizen::Ui::Controls
250
251 #endif  // _FUI_CTRL_INTERNAL_TOOLBAR_PRESENTER_H_