fix for p130925 - 00132
[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 <FUiAnimIVisualElementAnimationStatusEventListener.h>
29 #include "FUi_Window.h"
30 #include "FUiCtrl_OptionMenuPresenter.h"
31 #include "FUiCtrl_ActionEvent.h"
32 #include "FUiCtrl_IActionEventListener.h"
33 #include "FUiCtrl_IFrameEventListener.h"
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         , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
76 {
77         DECLARE_CLASS_BEGIN(_OptionMenu, _Control);
78         DECLARE_PROPERTY("color", GetPropertyColor, SetPropertyColor);
79         DECLARE_PROPERTY("normalItemColor", GetPropertyNormalItemColor, SetPropertyNormalItemColor);
80         DECLARE_PROPERTY("pressedItemColor", GetPropertyPressedItemColor, SetPropertyPressedItemColor);
81         DECLARE_PROPERTY("highlightedItemColor", GetPropertyHighlightedItemColor, SetPropertyHighlightedItemColor);
82         DECLARE_PROPERTY("normalItemTextColor", GetPropertyNormalItemTextColor, SetPropertyNormalItemTextColor);
83         DECLARE_PROPERTY("pressedItemTextColor", GetPropertyPressedItemTextColor, SetPropertyPressedItemTextColor);
84         DECLARE_PROPERTY("highlightedItemTextColor", GetPropertyHighlightedItemTextColor, SetPropertyHighlightedItemTextColor);
85         DECLARE_PROPERTY("maxVisibleItemsCount", GetPropertyMaxVisibleItemsCount, SetPropertyMaxVisibleItemsCount);
86         DECLARE_CLASS_END();
87
88         result SetPropertyMaxVisibleItemsCount(const Variant& count);
89         Variant GetPropertyMaxVisibleItemsCount(void) const;
90
91         result SetPropertyColor(const Variant& color);
92         Variant GetPropertyColor(void) const;
93
94         result SetPropertyNormalItemColor(const Variant& color);
95         Variant GetPropertyNormalItemColor(void) const;
96
97         result SetPropertyPressedItemColor(const Variant& color);
98         Variant GetPropertyPressedItemColor(void) const;
99
100         result SetPropertyHighlightedItemColor(const Variant & color);
101         Variant GetPropertyHighlightedItemColor(void) const;
102
103         result SetPropertyNormalItemTextColor(const Variant& color);
104         Variant GetPropertyNormalItemTextColor(void) const;
105
106         result SetPropertyPressedItemTextColor(const Variant& color);
107         Variant GetPropertyPressedItemTextColor(void) const;
108
109         result SetPropertyHighlightedItemTextColor(const Variant & color);
110         Variant GetPropertyHighlightedItemTextColor(void) const;
111
112 public:
113         _OptionMenu(void);
114         virtual ~_OptionMenu(void);
115         static _OptionMenu* CreateOptionMenuN(void);
116
117 public:
118          void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
119          void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount){};
120          void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target){};
121         result Install(void);
122         result Initialize(void);
123         result AddItem(const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap, const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
124         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);
125         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);
126         int GetItemIndexFromActionId(int actionId) const;
127         result AddSubItem(int mainIndex, const Tizen::Base::String& text, int actionId);
128         result InsertSubItemAt(int mainIndex, int subIndex, const Tizen::Base::String& text, int actionId);
129         result SetSubItemAt(int mainIndex, int subIndex, const Tizen::Base::String& text, int actionId);
130         result RemoveSubItemAt(int mainIndex, int subIndex);
131         int GetSubItemCount(int mainIndex) const;
132         int GetSubItemIndexFromActionId(int actionId) const;
133         int GetSubItemActionIdAt(int mainIndex, int subIndex) const;
134     result ShowSubMenu(int mainIndex, _OptionMenuItem& item);
135         bool IsSubMenuShown(void) const;
136         result DestroySubMenu(void);
137         result InsertItem(int index, const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap,
138                         const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
139         result SetItem(int index, const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap,
140                         const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
141         result RemoveItemAt(int index);
142         void RemoveAllItems(void);
143         int GetItemCount(void) const;
144         result SetShowItemCount(int count);
145         int GetMaximumVisibleItemsCount(void) const;
146         int GetItemIndexAt(int actionId) const;
147         int GetItemActionIdAt(int index) const;
148         result SetWindowRect(const Tizen::Graphics::FloatRectangle& rect);
149         Tizen::Graphics::FloatRectangle GetWindowRect(void) const;
150         result SetBodyRect(const Tizen::Graphics::FloatRectangle& rect);
151         Tizen::Graphics::FloatRectangle GetBodyRect(void) const;
152         result SetItemRect(const Tizen::Graphics::FloatRectangle& rect);
153         Tizen::Graphics::FloatRectangle GetItemRect(void) const;
154         result SetTextColor(enum OptionMenuCoreItemStatus status, const Tizen::Graphics::Color& color);
155         Tizen::Graphics::Color GetTextColor(enum OptionMenuCoreItemStatus status) const;
156         result SetColor(const Tizen::Graphics::Color& color);
157         Tizen::Graphics::Color GetColor(void) const;
158         result SetMaxVisibleItemsCount(int maxItemsCount);
159         result SetItemColor(enum OptionMenuCoreItemStatus status, const Tizen::Graphics::Color& color);
160         Tizen::Graphics::Color GetItemColor(enum OptionMenuCoreItemStatus status) const;
161         result AddActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
162         result RemoveActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
163         result FireActionEvent(int actionId);
164         Tizen::Ui::Controls::_ActionEvent* GetActionEvent(void) const;
165         const Tizen::Graphics::Bitmap* GetBackgroundNormalBitmap(void) const;
166         const Tizen::Graphics::Bitmap* GetBackgroundEffectBitmap(void) const;
167         _ControlOrientation GetLayout(void) const;
168         _ControlRotation GetRotation(void) const;
169
170         virtual result OnAttachedToMainTree(void);
171         virtual result OnDetachingFromMainTree(void);
172         virtual void OnFrameActivated(const Tizen::Ui::Controls::_Frame& source);
173         virtual void OnFrameDeactivated(const Tizen::Ui::Controls::_Frame& source);
174         virtual void OnFrameMinimized(const Tizen::Ui::Controls::_Frame& source);
175         virtual void OnFrameRestored(const Tizen::Ui::Controls::_Frame& source);
176         virtual void OnDraw(void);
177
178         virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
179         virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
180         virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
181         void CloseAnimation(int actionID);
182         void OpenAnimation();
183
184         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
185         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
186         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
187         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
188
189         virtual void OnActionPerformed(const Tizen::Ui::_Control& source, int actionId);
190
191         virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
192         virtual void OnFontInfoRequested(unsigned long& style, float& size);
193
194         virtual void OnChangeLayout(_ControlRotation rotation);
195         virtual void OnOwnerChanged(_Control* pOldOwner);
196         void OnActivated(void);
197         void OnDeactivated(void);
198
199         virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element);
200         virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element);
201         virtual bool OnAccessibilityReadingElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
202         virtual bool OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
203         virtual bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element);
204         virtual bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element);
205         virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element);
206         virtual bool OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
207         virtual bool OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
208
209         Tizen::Ui::_AccessibilityElement* GetAccessibilityElement(const int mainIndex) const;
210         void AddAccessibilityElement(const _AccessibilityElement& element);
211
212         _OptionMenuItemInfo GetItemFromPosition(const Tizen::Graphics::FloatPoint& position) const;
213         _OptionMenuItemInfo FindItem(int index) const;
214         result SetTopDrawnItemIndex(int index);
215
216         _ScrollPanel* GetScrollPanel(void);
217
218         virtual bool OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo);
219         virtual bool OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo);
220         virtual bool OnFocusGained(const _Control& source);
221         virtual bool OnFocusLost(const _Control& source);
222         virtual void OnDrawFocus(void);
223         virtual void OnFocusModeStateChanged(void);
224
225 protected:
226         result SetPresenter(const _OptionMenuPresenter& OptionMenuPresenter);
227
228 private:
229         result LoadBitmap(void);
230         result LoadColorReplacedBitmap(const Tizen::Graphics::Color& color);
231         void SetAllAccessibilityElement(void);
232         void RemoveAllAccessibilityElement(void);
233
234         _OptionMenu(const _OptionMenu& rhs);
235         _OptionMenu& operator =(const _OptionMenu& rhs);
236
237 private:
238         _OptionMenuPresenter* __pOptionMenuPresenter;
239         int __showItemCount;
240         bool __isAttachedToMainTree;
241         bool __isMaxVisibleCountSet;
242         bool __isFocused;
243         int __currentFocusedIndex;
244         int __selectedActionID;
245
246         static const int ANIMATION_DURATION = 333;
247
248         Tizen::Ui::Animations::IVisualElementAnimationTimingFunction* __pBoundsTimingFunction;
249         Tizen::Ui::Animations::IVisualElementAnimationTimingFunction* __pOpacityTimingFunction;
250
251         // attribute for position fo the window
252         Tizen::Graphics::FloatRectangle __windowRect;   // OptionMenu window in the whole screen area
253         Tizen::Graphics::FloatRectangle __bodyRect;             // body area relative to window
254         Tizen::Graphics::FloatRectangle __itemRect;             // item area relative to window
255
256         // attribute for event
257         _ActionEvent* __pActionEvent;
258
259         // attribute for drawing
260         Tizen::Graphics::Bitmap* __pBackgroundNormalBitmap;
261         Tizen::Graphics::Bitmap* __pBackgroundEffectBitmap;
262         enum _ControlOrientation __layout;
263         enum _ControlRotation __rotation;
264
265         Tizen::Graphics::Color __backgroundColor;
266         Tizen::Graphics::Color __textColor[OPTION_MENU_ITEM_STATUS_COUNT];
267         Tizen::Graphics::Color __itemColor[OPTION_MENU_ITEM_STATUS_COUNT];
268
269         Tizen::Base::Collection::ArrayListT<int> __actionId;
270         Tizen::Base::Collection::LinkedListT<_AccessibilityElement*> __accessibilityElements;
271
272         _ScrollPanel* __pScrollPanel;
273         _ContextMenu* __pSubMenu;
274         Tizen::Ui::Controls::_Frame* __pCurrentFrame;
275         int __subMenuIndex;
276
277 }; // _OptionMenu
278
279 }}} // Tizen::Ui: Control
280
281 #endif  //_FUI_CTRL_INTERNAL_OPTION_MENU_H_