Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_Toolbar.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_Toolbar.h
19  * @brief               This is the header file for the _Toolbar class.
20  *
21  * This header file contains the declarations of the %_Toolbar class.
22  */
23
24 #ifndef _FUI_CTRL_INTERNAL_TOOLBAR_H_
25 #define _FUI_CTRL_INTERNAL_TOOLBAR_H_
26
27 #include <vector>
28 #include <FGrpColor.h>
29 #include <FUiCtrlControlsTypes.h>
30 #include "FUi_Control.h"
31 #include "FUi_ITouchLongPressGestureEventListener.h"
32 #include "FUi_ITouchEventListener.h"
33 #include "FUiCtrl_Animation.h"
34 #include "FUiCtrl_Button.h"
35 #include "FUiCtrl_Label.h"
36
37 namespace Tizen { namespace Ui
38 {
39 class _TouchLongPressGestureDetector;
40 }}
41
42 namespace Tizen { namespace Ui
43 {
44 class _AccessibilityElement;
45 }} // Tizen::Ui
46
47 namespace Tizen { namespace Ui { namespace Controls
48 {
49
50 class _ToolbarPresenter;
51 class _ActionEvent;
52
53 const int TOOLBAR_BUTTON_MAX_STATE_COUNT = 4;
54 const int TOOLBAR_ITEM_MAX_STATE_COUNT = 5;
55 const int TOOLBAR_ACTION_ID_MIN = 0;
56 const int TOOLBAR_ACTION_ID_MAX = (int) 0x7FFFFFFF;
57 const int TOOLBAR_MORE_BUTTON_ID = -2;
58 const int TAB_ITEM_MAX = 15;
59 const int SEGMENTED_ITEM_MAX = 4;
60 const int PROCESSING_ANIMATION_COUNT = 30;
61
62 enum ToolbarStyle
63 {
64         TOOLBAR_TITLE = 0,
65         TOOLBAR_HEADER_SEGMENTED,
66         TOOLBAR_HEADER_SEGMENTED_WITH_TITLE,
67         TOOLBAR_TAB,
68         TOOLBAR_TAB_WITH_TITLE,
69         TOOLBAR_SEGMENTED,
70         TOOLBAR_TEXT,
71         TOOLBAR_ICON,
72         TOOLBAR_ICON_TEXT,
73         TOOLBAR_SOFTKEY
74 };
75
76 enum ToolbarButton
77 {
78         LEFT_BUTTON = 0,
79         RIGHT_BUTTON,
80         BACK_BUTTON,
81         MIDDLE_BUTTON,
82         BUTTON_MAX
83 };
84
85 enum ButtonType
86 {
87         TOOLBAR_BUTTON = 0,
88         TOOLBAR_ITEM
89 };
90
91 enum ToolbarAnimationPosition
92 {
93         TOOLBAR_ANIMATION_POSITION_TITLE = 0,
94         TOOLBAR_ANIMATION_POSITION_BUTTON_LEFT,
95         TOOLBAR_ANIMATION_POSITION_BUTTON_RIGHT,
96         TOOLBAR_ANIMATION_POSITION_MAX
97 };
98
99 /**
100  * @class       _Toolbar
101  * @brief       _Toolbar class is the core class of Header, Footer classes
102  * @since 2.0
103  */
104 class _OSP_EXPORT_ _Toolbar
105         : public Tizen::Ui::_Control
106         , public Tizen::Ui::_ITouchLongPressGestureEventListener
107         , public Tizen::Ui::Controls::_IAnimationEventListener
108         , virtual public Tizen::Base::Runtime::IEventListener
109         , virtual public Tizen::Ui::_IUiEventListener
110         , virtual public Tizen::Ui::_IUiEventPreviewer
111         , virtual public Tizen::Ui::_ITouchGestureEventListener
112 {
113         DECLARE_CLASS_BEGIN(_Toolbar, _Control);
114         DECLARE_PROPERTY("color", GetPropertyColor, SetPropertyColor);
115         DECLARE_PROPERTY("descriptionText", GetPropertyDescriptionText, SetPropertyDescriptionText);
116         DECLARE_PROPERTY("descriptionTextColor", GetPropertyDescriptionTextColor, SetPropertyDescriptionTextColor);
117         DECLARE_PROPERTY("titleText", GetPropertyTitleText, SetPropertyTitleText);
118         DECLARE_PROPERTY("titleTextColor", GetPropertyTitleTextColor, SetPropertyTitleTextColor);
119         DECLARE_PROPERTY("disabledButtonColor", GetPropertyDisabledButtonColor, SetPropertyDisabledButtonColor);
120         DECLARE_PROPERTY("disabledButtonTextColor", GetPropertyDisabledButtonTextColor, SetPropertyDisabledButtonTextColor);
121         DECLARE_PROPERTY("highlightedButtonColor", GetPropertyHighlightedButtonColor, SetPropertyHighlightedButtonColor);
122         DECLARE_PROPERTY("highlightedButtonTextColor", GetPropertyHighlightedButtonTextColor, SetPropertyHighlightedButtonTextColor);
123         DECLARE_PROPERTY("normalButtonColor", GetPropertyNormalButtonColor, SetPropertyNormalButtonColor);
124         DECLARE_PROPERTY("normalButtonTextColor", GetPropertyNormalButtonTextColor, SetPropertyNormalButtonTextColor);
125         DECLARE_PROPERTY("pressedButtonColor", GetPropertyPressedButtonColor, SetPropertyPressedButtonColor);
126         DECLARE_PROPERTY("pressedButtonTextColor", GetPropertyPressedButtonTextColor, SetPropertyPressedButtonTextColor);
127         DECLARE_PROPERTY("disabledItemColor", GetPropertyDisabledItemColor, SetPropertyDisabledItemColor);
128         DECLARE_PROPERTY("disabledItemTextColor", GetPropertyDisabledItemTextColor, SetPropertyDisabledItemTextColor);
129         DECLARE_PROPERTY("highlightedItemColor", GetPropertyHighlightedItemColor, SetPropertyHighlightedItemColor);
130         DECLARE_PROPERTY("highlightedItemTextColor", GetPropertyHighlightedItemTextColor, SetPropertyHighlightedItemTextColor);
131         DECLARE_PROPERTY("normalItemColor", GetPropertyNormalItemColor, SetPropertyNormalItemColor);
132         DECLARE_PROPERTY("normalItemTextColor", GetPropertyNormalItemTextColor, SetPropertyNormalItemTextColor);
133         DECLARE_PROPERTY("pressedItemColor", GetPropertyPressedItemColor, SetPropertyPressedItemColor);
134         DECLARE_PROPERTY("pressedItemTextColor", GetPropertyPressedItemTextColor, SetPropertyPressedItemTextColor);
135         DECLARE_PROPERTY("selectedItemColor", GetPropertySelectedItemColor, SetPropertySelectedItemColor);
136         DECLARE_PROPERTY("selectedItemTextColor", GetPropertySelectedItemTextColor, SetPropertySelectedItemTextColor);
137         DECLARE_CLASS_END();
138
139
140         result SetPropertyColor(const Variant& color);
141         Variant GetPropertyColor(void) const;
142         result SetPropertyDescriptionText(const Variant& text);
143         Variant GetPropertyDescriptionText(void) const;
144         result SetPropertyDescriptionTextColor(const Variant& color);
145         Variant GetPropertyDescriptionTextColor(void) const;
146         result SetPropertyTitleText(const Variant& text);
147         Variant GetPropertyTitleText(void) const;
148         result SetPropertyTitleTextColor(const Variant& color);
149         Variant GetPropertyTitleTextColor(void) const;
150         result SetPropertyDisabledButtonColor(const Variant& color);
151         Variant GetPropertyDisabledButtonColor(void) const;
152         result SetPropertyDisabledButtonTextColor(const Variant& color);
153         Variant GetPropertyDisabledButtonTextColor(void) const;
154         result SetPropertyHighlightedButtonColor(const Variant& color);
155         Variant GetPropertyHighlightedButtonColor(void) const;
156         result SetPropertyHighlightedButtonTextColor(const Variant& color);
157         Variant GetPropertyHighlightedButtonTextColor(void) const;
158         result SetPropertyNormalButtonColor(const Variant& color);
159         Variant GetPropertyNormalButtonColor(void) const;
160         result SetPropertyNormalButtonTextColor(const Variant& color);
161         Variant GetPropertyNormalButtonTextColor(void) const;
162         result SetPropertyPressedButtonColor(const Variant& color);
163         Variant GetPropertyPressedButtonColor(void) const;
164         result SetPropertyPressedButtonTextColor(const Variant& color);
165         Variant GetPropertyPressedButtonTextColor(void) const;
166         result SetPropertyDisabledItemColor(const Variant& color);
167         Variant GetPropertyDisabledItemColor(void) const;
168         result SetPropertyDisabledItemTextColor(const Variant& color);
169         Variant GetPropertyDisabledItemTextColor(void) const;
170         result SetPropertyHighlightedItemColor(const Variant& color);
171         Variant GetPropertyHighlightedItemColor(void) const;
172         result SetPropertyHighlightedItemTextColor(const Variant& color);
173         Variant GetPropertyHighlightedItemTextColor(void) const;
174         result SetPropertyNormalItemColor(const Variant& color);
175         Variant GetPropertyNormalItemColor(void) const;
176         result SetPropertyNormalItemTextColor(const Variant& color);
177         Variant GetPropertyNormalItemTextColor(void) const;
178         result SetPropertyPressedItemColor(const Variant& color);
179         Variant GetPropertyPressedItemColor(void) const;
180         result SetPropertyPressedItemTextColor(const Variant& color);
181         Variant GetPropertyPressedItemTextColor(void) const;
182         result SetPropertySelectedItemColor(const Variant& color);
183         Variant GetPropertySelectedItemColor(void) const;
184         result SetPropertySelectedItemTextColor(const Variant& color);
185         Variant GetPropertySelectedItemTextColor(void) const;
186
187
188 public:
189         _Toolbar(void);
190
191         virtual ~_Toolbar(void);
192
193         static _Toolbar* CreateToolbarN(bool header);
194
195         virtual result Construct(void);
196
197         result AddItem(_Button* pButton);
198
199         Tizen::Graphics::Bitmap* GetBackgroundBitmap(void) const;
200
201         _Button* GetButton(ToolbarButton position) const;
202
203         Tizen::Graphics::Color GetButtonColor(_ButtonStatus status) const;
204
205         _ButtonStatus GetButtonStatus(ToolbarButton position) const;
206
207         Tizen::Graphics::Color GetButtonTextColor(_ButtonStatus status) const;
208
209         Tizen::Graphics::Color GetColor(void) const;
210
211         Tizen::Base::String GetDescriptionText(void) const;
212
213         Tizen::Graphics::Color GetDescriptionTextColor(void) const;
214
215         int GetFirstEnabledItemIndex(void) const;
216
217         _Button* GetItem(int itemIndex) const;
218
219         Tizen::Graphics::Color GetItemColor(_ButtonStatus status) const;
220
221         int GetItemCount(void) const;
222
223         int GetItemIndexFromPosition(const Tizen::Graphics::Point& point) const;
224
225         result GetItemStatus(int itemIndex, _ButtonStatus& status) const;       // Temporarily uses GetItem() instead of this method
226
227         Tizen::Graphics::Color GetItemTextColor(_ButtonStatus status) const;
228
229         int GetSelectedItemIndex(void) const;
230
231         ToolbarStyle GetStyle(void) const;
232
233         Tizen::Graphics::Bitmap* GetTitleIcon(void) const;
234
235         Tizen::Base::String GetTitleText(void) const;
236
237         Tizen::Graphics::Color GetTitleTextColor(void) const;
238
239         HorizontalAlignment GetTitleTextHorizontalAlignment(void) const;
240
241         bool IsInitialDraw(void) const;
242
243         bool IsTabEditModeEnabled(void) const;
244
245         bool IsTransparent(void) const;
246
247         AnimationStatus GetWaitingAnimationStatus(ToolbarAnimationPosition animationPos) const;
248
249         result InsertItemAt(int itemIndex, _Button* pButton);
250
251         bool IsButtonSet(ToolbarButton position) const;
252
253         bool IsUserBackgroundBitmap() const;
254
255         result MoveItem(const int srcIndex, const int destIndex);
256
257         result PauseWaitingAnimation(ToolbarAnimationPosition animationPos);
258
259         result PlayWaitingAnimation(ToolbarAnimationPosition animationPos);
260
261         result RemoveAllButtons(void);
262
263         result RemoveAllItems(void);
264
265         result RemoveButtonAt(ToolbarButton position);
266
267         result RemoveItemAt(int itemIndex);
268
269         result SetBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
270
271         result SetButton(ToolbarButton position, _Button* pButton);
272
273         result SetButtonColor(_ButtonStatus status, const Tizen::Graphics::Color& color);
274
275         result SetButtonEnabled(ToolbarButton position, bool enabled);
276
277         result SetButtonTextColor(_ButtonStatus status, const Tizen::Graphics::Color& color);
278
279         result SetButtonBadgeIcon(ToolbarButton position, const Tizen::Graphics::Bitmap* pBadgeIcon);
280
281         result SetButtonNumberedBadgeIcon(ToolbarButton position, int number);
282
283         result SetColor(const Tizen::Graphics::Color& color);
284
285         result SetTranslucentColor(const Tizen::Graphics::Color& color);
286
287         result SetDescriptionText(const Tizen::Base::String& text);
288
289         result SetDescriptionTextColor(const Tizen::Graphics::Color& color);
290
291         result SetItemAt(int itemIndex, const _Button* pButton);
292
293         result SetItemBadgeIcon(int itemIndex, const Tizen::Graphics::Bitmap* pBadgeIcon);
294
295         result SetItemColor(_ButtonStatus status, const Tizen::Graphics::Color& color);
296
297         result SetItemEnabled(int itemIndex, bool enabled);
298
299         result SetItemNumberedBadgeIcon(int itemIndex, int number);
300
301         result SetItemSelected(int itemIndex, bool fire = false);
302
303         result SetItemTextColor(_ButtonStatus status, const Tizen::Graphics::Color& color);
304
305         result SetStyle(ToolbarStyle style);
306
307         result SetTabEditModeEnabled(bool enable);
308
309         result SetTitleIcon(const Tizen::Graphics::Bitmap& bitmap);
310
311         result SetTitleText(const Tizen::Base::String& text, HorizontalAlignment alignment = ALIGNMENT_LEFT);
312
313         result SetTitleTextColor(const Tizen::Graphics::Color& color);
314
315         result SetTransparent(bool transparent);
316
317         result SetWaitingAnimationPosition(ToolbarAnimationPosition animationPos, int x, int y);
318
319         result StopWaitingAnimation(ToolbarAnimationPosition animationPos);
320
321         result InitializeLongPressGesture(void);
322
323         virtual void OnAnimationStopped(const Tizen::Ui::_Control& source);
324
325         virtual void OnBoundsChanged(void);
326
327         virtual void OnChangeLayout(_ControlOrientation orientationStatus);
328
329         virtual void OnDraw(void);
330
331         virtual bool OnLongPressGestureDetected(_TouchLongPressGestureDetector& gesture);
332
333         virtual bool OnLongPressGestureCanceled(_TouchLongPressGestureDetector& gesture);
334
335         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
336
337         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
338
339         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
340
341         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
342
343         void AddActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
344
345         void RemoveActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
346
347         void SetBackEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener, int actionId);
348
349         virtual result OnAttachedToMainTree(void);
350
351         virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
352
353         virtual void OnFontInfoRequested(unsigned long& style, int& size);
354
355         Tizen::Graphics::Rectangle GetButtonBounds(ToolbarButton position) const;
356
357         result RealignIcon(_Button* pButton);
358
359         result RealignButtonIcon(_Button* pButton);
360
361         result RearrangeItems(void);
362
363 protected:
364         result SetPresenter(const _ToolbarPresenter& toolbarPresenter);
365
366
367 private:
368         _Toolbar(const _Toolbar& value);
369
370         _Toolbar& operator =(const _Toolbar& value);
371
372         result ApplyUserGUI(ButtonType buttonType, _Button* pButton);
373
374         int CalculateMinimumToolbarWidth(void);
375
376         result RearrangeHeaderSegmentedItems(void);
377
378         result RearrangeFooterSegmentedItems(void);
379
380         result RearrangeTabItmes(void);
381
382         result RearrangeButtonItems(void);
383
384         result SetAnimation(ToolbarAnimationPosition animationPos);
385
386         result SetColorReplacedBitmap(_Button* pButton, const _ButtonStatus status, const Tizen::Graphics::Color& color, const Tizen::Graphics::Bitmap* pBitmap);
387
388         void InitializeAccessibilityElement(void);
389
390         result AdjustToolbarBounds(void);
391
392         void AddAccessibilityItem(_Button* pButton);
393
394         result Initialize(bool header);
395
396         result InitToolbarColor(void);
397
398 private:
399         bool __header;
400
401         _ToolbarPresenter* __pToolbarPresenter;
402
403         Tizen::Ui::Controls::_IActionEventListener* __pActionEventListener;
404
405         Tizen::Ui::Controls::_IActionEventListener* __pBackEventListener;
406
407         _TouchLongPressGestureDetector* __pLongPressGesture;
408
409         Tizen::Graphics::Bitmap* __pToolbarBackgroundBitmap;
410
411         Tizen::Graphics::Bitmap* __pTitleIcon;
412
413         Tizen::Graphics::Color __backgroundColor;
414
415         Tizen::Base::String __titleText;
416
417         Tizen::Base::String __descriptionText;
418
419         Tizen::Graphics::Color __descriptionTextColor;
420
421         Tizen::Graphics::Color __transDescriptionTextColor;
422
423         Tizen::Graphics::Color __titleTextColor;
424
425         Tizen::Graphics::Color __transTitleTextColor;
426
427         Tizen::Graphics::Color __itemBackgroundColor[TOOLBAR_ITEM_MAX_STATE_COUNT];
428
429         Tizen::Graphics::Color __itemTextColor[TOOLBAR_ITEM_MAX_STATE_COUNT];
430
431         Tizen::Graphics::Color __itemTransBackgroundColor[TOOLBAR_ITEM_MAX_STATE_COUNT];
432
433         Tizen::Graphics::Color __itemTransTextColor[TOOLBAR_ITEM_MAX_STATE_COUNT];
434
435         bool __isItemBgColorSetByUser[TOOLBAR_ITEM_MAX_STATE_COUNT];
436
437         bool __isItemTextColorSetByUser[TOOLBAR_ITEM_MAX_STATE_COUNT];
438
439         Tizen::Graphics::Color __buttonBackgroundColor[TOOLBAR_BUTTON_MAX_STATE_COUNT];
440
441         Tizen::Graphics::Color __buttonTextColor[TOOLBAR_BUTTON_MAX_STATE_COUNT];
442
443         Tizen::Graphics::Color __buttonTransBackgroundColor[TOOLBAR_BUTTON_MAX_STATE_COUNT];
444
445         Tizen::Graphics::Color __buttonTransTextColor[TOOLBAR_BUTTON_MAX_STATE_COUNT];
446
447         bool __isButtonBgColorSetByUser[TOOLBAR_BUTTON_MAX_STATE_COUNT];
448
449         bool __isButtonTextColorSetByUser[TOOLBAR_BUTTON_MAX_STATE_COUNT];
450
451
452         HorizontalAlignment __titleTextAlignment;
453
454         std::vector<_Button*> __pItems;
455
456         _Button* __pButtonItems[BUTTON_MAX];
457
458         _Animation* __pAnimation[TOOLBAR_ANIMATION_POSITION_MAX];
459
460         Tizen::Base::Collection::ArrayList* __pAnimationFrameList;
461
462         int __backActionId;
463
464         int __itemCount;
465
466         ToolbarStyle __style;
467
468         bool __transparent;
469
470         bool __isUserBackgroundBitmap;
471
472         Tizen::Graphics::Rectangle __titleTextArea;
473
474         Tizen::Graphics::Rectangle __itemArea;
475
476         Tizen::Ui::_AccessibilityElement* __pTitleTextElement;
477 };
478
479 }}} // Tizen::Ui::Controls
480
481 #endif  // _FUI_CTRL_INTERNAL_TOOLBAR_H_