Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_OptionMenuPresenter.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_OptionMenuPresenter.h
19  * @brief               This is the header file for the _OptionMenuPresenter class.
20  */
21
22 #ifndef _FUI_CTRL_INTERNAL_OPTION_MENU_PRESENTER_H_
23 #define _FUI_CTRL_INTERNAL_OPTION_MENU_PRESENTER_H_
24
25 #include <FBaseObject.h>
26 #include <FBaseRtTimer.h>
27 #include <FBaseRtITimerEventListener.h>
28 #include <FGrpPoint.h>
29 #include <FGrpFloatMatrix4.h>
30 #include <FUiAnim_VisualElement.h>
31 #include <FUiAnimVisualElementAnimation.h>
32 #include <FUiAnimVisualElementAnimationProvider.h>
33 #include <FUiAnimIVisualElementAnimationStatusEventListener.h>
34 #include <FUiAnimIVisualElementAnimationTimingFunction.h>
35 #include <FGrp_TextTextObject.h>
36
37 #include "FUi_Control.h"
38
39 namespace Tizen { namespace Graphics {
40 class Font;
41 }} // Tizen::Graphics
42
43 namespace Tizen { namespace Ui { namespace Controls
44 {
45
46 class _OptionMenu;
47 class _OptionMenuModel;
48
49 class SineThirtyThreeTimingFunction
50         : public Tizen::Ui::Animations::IVisualElementAnimationTimingFunction
51 {
52 public:
53         float CalculateProgress(float timeProgress) const;
54 }; // SineTimingFunction
55
56 class SineSixtyTimingFunction
57         : public Tizen::Ui::Animations::IVisualElementAnimationTimingFunction
58 {
59 public:
60         float CalculateProgress(float timeProgress) const;
61 }; // SineTimingFunction
62
63 class _OptionMenuPresenter
64         : public Tizen::Base::Object
65         , virtual public Tizen::Ui::Animations::VisualElementAnimationProvider
66         , virtual public Tizen::Ui::Animations::IVisualElementAnimationProvider
67         , virtual public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
68         , virtual public Tizen::Base::Runtime::IEventListener
69 {
70 public:
71         result AddItem(const Tizen::Base::String& text, int actionId);
72
73         result InsertItemAt(int mainIndex, const Tizen::Base::String& text, int actionId);
74
75         result SetItemAt(int mainIndex, const Tizen::Base::String& text, int actionId);
76
77         result RemoveItemAt(int mainIndex);
78
79         Tizen::Graphics::Rectangle GetItemBounds(int index) const;
80
81         int GetItemCount(void) const;
82
83         int GetItemIndexFromActionId(int actionId) const;
84
85         int GetItemActionIdAt(int mainIndex) const;
86
87         result AddSubItem(int mainIndex, const Tizen::Base::String& text, int actionId);
88
89         result InsertSubItemAt(int mainIndex, int subIndex, const Tizen::Base::String& text, int actionId);
90
91         result SetSubItemAt(int mainIndex, int subIndex, const Tizen::Base::String& text, int actionId);
92
93         result RemoveSubItemAt(int mainIndex, int subIndex);
94
95         int GetSubItemCount(int mainIndex) const;
96
97         int GetSubItemIndexFromActionId(int actionId) const;
98
99         int GetSubItemActionIdAt(int mainIndex, int subIndex) const;
100
101         result Draw(void);
102
103 public:
104         result InitializeVisualElement(void);
105
106         result InitializeTextObject(void);
107
108 // _IControlDelegator
109         void OnChangeLayout(Tizen::Ui::_ControlOrientation orientation);
110
111         result OnAttachingToMainTree(const Tizen::Ui::_Control* pParent);
112
113         result OnAttachedToMainTree(void);
114
115         result OnDetachingFromMainTree(void);
116
117         void OnVisibleStateChanged(void);
118
119 // _ITouchEventListener
120         bool OnTouchPressed(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
121
122         bool OnTouchReleased(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
123
124         bool OnTouchMoved(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
125
126         bool OnTouchCanceled(const Tizen::Ui::_Control& source, const Tizen::Ui::_TouchInfo& touchinfo);
127
128 // _IActionEventListener
129         void OnActionPerformed(const Tizen::Ui::_Control& source, int actionId);
130
131         virtual ~_OptionMenuPresenter(void);
132
133         static _OptionMenuPresenter* CreateInstanceN(_OptionMenu& optionMenu);
134
135         result CalculateBounds(void);
136
137         result PrepareAnimation(void);
138         result SetOptionMenuVisibility(bool visibility);
139         virtual Tizen::Ui::Animations::VisualElementAnimation* CreateAnimationForProperty(Tizen::Ui::Animations::VisualElement& target, const Tizen::Base::String& property);
140         virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target);
141         virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount);
142         virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
143         result DrawResourceBitmap(Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& bounds, Tizen::Graphics::Bitmap* pBitmap);
144
145         void OnFontChanged(Tizen::Graphics::Font* pFont);
146         void OnFontInfoRequested(unsigned long& style, int& size);
147         Tizen::Graphics::Font* GetFont(void) const;
148
149 private:
150         _OptionMenuPresenter(_OptionMenu* optionMenu);
151
152         _OptionMenuPresenter(const _OptionMenuPresenter&);
153
154         _OptionMenuPresenter& operator =(const _OptionMenuPresenter&);
155
156         int GetItemIndexFromPosition(const Tizen::Graphics::Point& position) const;
157
158         result LoadBitmap(void);
159
160         result DrawHandler(Tizen::Graphics::Canvas& canvas);
161
162         result DrawItem(Tizen::Graphics::Canvas& canvas, int index);
163
164         result DrawItemLine(Tizen::Graphics::Canvas& canvas);
165
166         result RefreshItem(int index);
167
168         result LoadShapeResource(Tizen::Ui::_ControlOrientation orientation);
169
170         void Hide(void);
171
172         result SetPosition(const Tizen::Graphics::Point& position);
173
174         result StopAnimation(void);
175
176 private:
177         _OptionMenu* __pOptionMenu;
178
179         _OptionMenuModel* __pOptionMenuModel;
180
181         Tizen::Graphics::Bitmap* __pItemBitmap;
182
183         Tizen::Graphics::Bitmap* __pItemPressedBitmap;
184
185         Tizen::Graphics::Bitmap* __pItemPressedEffectBitmap;
186
187         Tizen::Graphics::Bitmap* __pArrowBitmap;
188
189         Tizen::Graphics::Bitmap* __pArrowPressedBitmap;
190
191         Tizen::Graphics::Bitmap* __pHandleBitmap;
192
193         Tizen::Graphics::Bitmap* __pHandleEffectBitmap;
194
195         Tizen::Graphics::Bitmap* __pHandlePressedBitmap;
196
197         Tizen::Graphics::Bitmap* __pHandlePressedEffectBitmap;
198
199         Tizen::Graphics::Bitmap* __pHandleArrowNormalBitmap;
200
201         Tizen::Graphics::Bitmap* __pHandleArrowPressedBitmap;
202
203         Tizen::Graphics::_Text::TextObject __textObject;
204
205         Tizen::Graphics::Font* __pFont;
206
207         int __maxColumnCount;
208
209         int __rowCount;
210
211         int __columnCount;
212
213         int __width;
214
215         int __handleHeight;
216
217         int __itemHeight;
218
219         int __lineWidth;
220
221         int __leftMargin;
222
223         int __rightMargin;
224
225         int __textSize;
226
227         int __textLeftMargin;
228
229         int __textRightMargin;
230
231         int __textTopMargin;
232
233         int __textBottomMargin;
234
235         int __arrowMargin;
236
237         int __selectedIndex;
238
239         bool __isHandlerPressed;
240
241         bool __isClosing;
242
243         bool __isAnimationStarted;
244
245         Tizen::Graphics::FloatMatrix4 _matrixOrigin;
246         Tizen::Graphics::FloatMatrix4 _matrixScale;
247         Tizen::Ui::Animations::_VisualElement* __pOptionMenuVE;
248         const Tizen::Ui::Animations::IVisualElementAnimationTimingFunction* __pThirtyThreeTimingFunction;
249         const Tizen::Ui::Animations::IVisualElementAnimationTimingFunction* __pSixtyTimingFunction;
250
251
252 }; // _OptionMenuPresenter
253
254 }}} // Tizen::Ui::Controls
255
256 #endif  // _FUI_CTRL_INTERNAL_OPTION_MENU_PRESENTER_H_