Merge "modify multiline button font size" into tizen_2.2
[platform/framework/native/uifw.git] / src / ui / inc / FUiCtrl_OptionMenu.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_OptionMenu.h
19  * @brief               This is the header file for the _OptionMenu class.
20  *
21  * This header file contains the declarations of the %_OptionMenu class.
22  */
23 #ifndef _FUI_CTRL_INTERNAL_OPTION_MENU_H_
24 #define _FUI_CTRL_INTERNAL_OPTION_MENU_H_
25
26 #include <FBaseString.h>
27 #include <FGrpColor.h>
28 #include "FUi_Window.h"
29 #include "FUiCtrl_OptionMenuPresenter.h"
30 #include "FUiCtrl_ActionEvent.h"
31 #include "FUiCtrl_IActionEventListener.h"
32
33 #include "FUiCtrl_ScrollPanel.h"
34
35 namespace Tizen { namespace Ui {
36 class _AccessibilityElement;
37 }} // Tizen::Ui
38
39 namespace Tizen { namespace Ui { namespace Controls
40 {
41
42 const int OPTION_MENU_ITEM_STATUS_COUNT = 3;
43
44 enum OptionMenuCoreItemStatus
45 {
46         OPTION_MENU_CORE_ITEM_STATUS_NORMAL = 0,   /**< The normal state */
47         OPTION_MENU_CORE_ITEM_STATUS_PRESSED,      /**< The pressed state  */
48         OPTION_MENU_CORE_ITEM_STATUS_HIGHLIGHTED   /**< The highlighted state */
49 };
50
51 struct _OptionMenuItemInfo;
52
53 /**
54  * @class _OptionMenu
55  * @brief
56  * @since 2.2
57  *
58  *
59  *
60  *
61  */
62 class _OptionMenuPresenter;
63 class _ContextMenu;
64 class _OptionMenuItem;
65
66 class _OSP_EXPORT_ _OptionMenu
67         : public _Window
68         , public _IActionEventListener
69         , virtual public Tizen::Base::Runtime::IEventListener
70         , virtual public _IUiEventListener
71         , virtual public _IUiEventPreviewer
72         , public _IAccessibilityListener
73 {
74         DECLARE_CLASS_BEGIN(_OptionMenu, _Control);
75         DECLARE_PROPERTY("color", GetPropertyColor, SetPropertyColor);
76         DECLARE_PROPERTY("normalItemColor", GetPropertyNormalItemColor, SetPropertyNormalItemColor);
77         DECLARE_PROPERTY("pressedItemColor", GetPropertyPressedItemColor, SetPropertyPressedItemColor);
78         DECLARE_PROPERTY("highlightedItemColor", GetPropertyHighlightedItemColor, SetPropertyHighlightedItemColor);
79         DECLARE_PROPERTY("normalItemTextColor", GetPropertyNormalItemTextColor, SetPropertyNormalItemTextColor);
80         DECLARE_PROPERTY("pressedItemTextColor", GetPropertyPressedItemTextColor, SetPropertyPressedItemTextColor);
81         DECLARE_PROPERTY("highlightedItemTextColor", GetPropertyHighlightedItemTextColor, SetPropertyHighlightedItemTextColor);
82         DECLARE_PROPERTY("maxVisibleItemsCount", GetPropertyMaxVisibleItemsCount, SetPropertyMaxVisibleItemsCount);
83         DECLARE_CLASS_END();
84
85         result SetPropertyMaxVisibleItemsCount(const Variant& count);
86         Variant GetPropertyMaxVisibleItemsCount(void) const;
87
88         result SetPropertyColor(const Variant& color);
89         Variant GetPropertyColor(void) const;
90
91         result SetPropertyNormalItemColor(const Variant& color);
92         Variant GetPropertyNormalItemColor(void) const;
93
94         result SetPropertyPressedItemColor(const Variant& color);
95         Variant GetPropertyPressedItemColor(void) const;
96
97         result SetPropertyHighlightedItemColor(const Variant & color);
98         Variant GetPropertyHighlightedItemColor(void) const;
99
100         result SetPropertyNormalItemTextColor(const Variant& color);
101         Variant GetPropertyNormalItemTextColor(void) const;
102
103         result SetPropertyPressedItemTextColor(const Variant& color);
104         Variant GetPropertyPressedItemTextColor(void) const;
105
106         result SetPropertyHighlightedItemTextColor(const Variant & color);
107         Variant GetPropertyHighlightedItemTextColor(void) const;
108
109 public:
110         _OptionMenu(void);
111         virtual ~_OptionMenu(void);
112         static _OptionMenu* CreateOptionMenuN(void);
113
114 public:
115         result Install(void);
116         result Initialize(void);
117         result AddItem(const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap, const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
118         result InsertItemAt(int mainIndex, const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap, const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
119         result SetItemAt(int mainIndex, const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap, const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
120         int GetItemIndexFromActionId(int actionId) const;
121         result AddSubItem(int mainIndex, const Tizen::Base::String& text, int actionId);
122         result InsertSubItemAt(int mainIndex, int subIndex, const Tizen::Base::String& text, int actionId);
123         result SetSubItemAt(int mainIndex, int subIndex, const Tizen::Base::String& text, int actionId);
124         result RemoveSubItemAt(int mainIndex, int subIndex);
125         int GetSubItemCount(int mainIndex) const;
126         int GetSubItemIndexFromActionId(int actionId) const;
127         int GetSubItemActionIdAt(int mainIndex, int subIndex) const;
128     result ShowSubMenu(int mainIndex, _OptionMenuItem& item);
129         bool IsSubMenuShown(void) const;
130         result DestroySubMenu(void);
131         result InsertItem(int index, const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap,
132                         const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
133         result SetItem(int index, const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap,
134                         const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
135         result RemoveItemAt(int index);
136         void RemoveAllItems(void);
137         int GetItemCount(void) const;
138         result SetShowItemCount(int count);
139         int GetMaximumVisibleItemsCount(void) const;
140         int GetItemIndexAt(int actionId) const;
141         int GetItemActionIdAt(int index) const;
142         result SetWindowRect(const Tizen::Graphics::FloatRectangle& rect);
143         Tizen::Graphics::FloatRectangle GetWindowRect(void) const;
144         result SetBodyRect(const Tizen::Graphics::FloatRectangle& rect);
145         Tizen::Graphics::FloatRectangle GetBodyRect(void) const;
146         result SetItemRect(const Tizen::Graphics::FloatRectangle& rect);
147         Tizen::Graphics::FloatRectangle GetItemRect(void) const;
148         result SetTextColor(enum OptionMenuCoreItemStatus status, const Tizen::Graphics::Color& color);
149         Tizen::Graphics::Color GetTextColor(enum OptionMenuCoreItemStatus status) const;
150         result SetColor(const Tizen::Graphics::Color& color);
151         Tizen::Graphics::Color GetColor(void) const;
152         result SetMaxVisibleItemsCount(int maxItemsCount);
153         result SetItemColor(enum OptionMenuCoreItemStatus status, const Tizen::Graphics::Color& color);
154         Tizen::Graphics::Color GetItemColor(enum OptionMenuCoreItemStatus status) const;
155         result AddActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
156         result RemoveActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
157         result FireActionEvent(int actionId);
158         Tizen::Ui::Controls::_ActionEvent* GetActionEvent(void) const;
159         const Tizen::Graphics::Bitmap* GetBackgroundNormalBitmap(void) const;
160         const Tizen::Graphics::Bitmap* GetBackgroundEffectBitmap(void) const;
161         _ControlOrientation GetLayout(void) const;
162
163         virtual result OnAttachedToMainTree(void);
164         virtual result OnDetachingFromMainTree(void);
165         virtual void OnDraw(void);
166
167         virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
168         virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
169         virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
170
171         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
172         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
173         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
174         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
175
176         virtual void OnActionPerformed(const Tizen::Ui::_Control& source, int actionId);
177
178         virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
179         virtual void OnFontInfoRequested(unsigned long& style, float& size);
180
181         virtual void OnChangeLayout(_ControlRotation rotation);
182         virtual void OnOwnerChanged(_Control* pOldOwner);
183         virtual void OnNativeWindowActivated(void);
184         void OnActivated(void);
185         void OnDeactivated(void);
186
187         virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element);
188         virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element);
189         virtual bool OnAccessibilityReadingElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
190         virtual bool OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
191         virtual bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element);
192         virtual bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element);
193         virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element);
194         virtual bool OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
195         virtual bool OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
196
197         Tizen::Ui::_AccessibilityElement* GetAccessibilityElement(const int mainIndex) const;
198         void AddAccessibilityElement(const _AccessibilityElement& element);
199
200         _OptionMenuItemInfo GetItemFromPosition(const Tizen::Graphics::FloatPoint& position) const;
201         _OptionMenuItemInfo FindItem(int index) const;
202         result SetTopDrawnItemIndex(int index);
203
204         _ScrollPanel* GetScrollPanel(void);
205
206         virtual bool OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo);
207         virtual bool OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo);
208         virtual bool OnFocusGained(const _Control& source);
209         virtual bool OnFocusLost(const _Control& source);
210         virtual void OnDrawFocus(void);
211         virtual void OnFocusModeStateChanged(void);
212
213 protected:
214         result SetPresenter(const _OptionMenuPresenter& OptionMenuPresenter);
215
216 private:
217         result LoadBitmap(void);
218         result LoadColorReplacedBitmap(const Tizen::Graphics::Color& color);
219         void SetAllAccessibilityElement(void);
220         void RemoveAllAccessibilityElement(void);
221
222         _OptionMenu(const _OptionMenu& rhs);
223         _OptionMenu& operator =(const _OptionMenu& rhs);
224
225 private:
226         _OptionMenuPresenter* __pOptionMenuPresenter;
227         int __showItemCount;
228         bool __isAttachedToMainTree;
229         bool __isMaxVisibleCountSet;
230         bool __isFocused;
231         int __currentFocusedIndex;
232
233         // attribute for position fo the window
234         Tizen::Graphics::FloatRectangle __windowRect;   // OptionMenu window in the whole screen area
235         Tizen::Graphics::FloatRectangle __bodyRect;             // body area relative to window
236         Tizen::Graphics::FloatRectangle __itemRect;             // item area relative to window
237
238         // attribute for event
239         _ActionEvent* __pActionEvent;
240
241         // attribute for drawing
242         Tizen::Graphics::Bitmap* __pBackgroundNormalBitmap;
243         Tizen::Graphics::Bitmap* __pBackgroundEffectBitmap;
244         enum _ControlOrientation __layout;
245
246         Tizen::Graphics::Color __backgroundColor;
247         Tizen::Graphics::Color __textColor[OPTION_MENU_ITEM_STATUS_COUNT];
248         Tizen::Graphics::Color __itemColor[OPTION_MENU_ITEM_STATUS_COUNT];
249
250         Tizen::Base::Collection::ArrayListT<int> __actionId;
251         Tizen::Base::Collection::LinkedListT<_AccessibilityElement*> __accessibilityElements;
252
253         _ScrollPanel* __pScrollPanel;
254         _ContextMenu* __pSubMenu;
255         int __subMenuIndex;
256
257 }; // _OptionMenu
258
259 }}} // Tizen::Ui: Control
260
261 #endif  //_FUI_CTRL_INTERNAL_OPTION_MENU_H_