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