Revert " modify license, permission and remove ^M char"
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_ContextMenu.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_ContextMenu.h
19  * @brief               This is the header file for the _ContextMenu class.
20  *
21  * This header file contains the declarations of the %_ContextMenu class.
22  */
23 #ifndef _FUI_CTRL_INTERNAL_CONTEXT_MENU_H_
24 #define _FUI_CTRL_INTERNAL_CONTEXT_MENU_H_
25
26 #include <FBaseString.h>
27 #include <FGrpColor.h>
28 #include "FUi_Window.h"
29 #include "FUiCtrl_IContextMenuPresenter.h"
30 #include "FUiCtrl_ContextMenuGridPresenter.h"
31 #include "FUiCtrl_ContextMenuListPresenter.h"
32 #include "FUiCtrl_ActionEvent.h"
33 #include "FUiCtrl_IActionEventListener.h"
34
35 #include "FUiCtrl_ScrollPanel.h"
36
37 namespace Tizen { namespace Ui {
38 class _AccessibilityElement;
39 }} // Tizen::Ui
40
41 namespace Tizen { namespace Ui { namespace Controls
42 {
43
44 const int CONTEXT_MENU_ITEM_STATUS_COUNT = 3;
45 const int MAX_CONTEXTMENU_LIST_SHOW_ITEM = 4;
46 const int MAX_CONTEXTMENU_ICON_SHOW_ITEM = 5;
47
48 enum ContextMenuCoreStyle
49 {
50         CONTEXT_MENU_CORE_STYLE_LIST,   /**< The style of the vertical list of image + text */
51         CONTEXT_MENU_CORE_STYLE_GRID    /**< The style of the horizontal list of image + text */
52 };
53
54 enum ContextMenuCoreAlign
55 {
56         CONTEXT_MENU_CORE_ALIGN_LEFT,
57         CONTEXT_MENU_CORE_ALIGN_RIGHT,
58         CONTEXT_MENU_CORE_ALIGN_UP,
59         CONTEXT_MENU_CORE_ALIGN_DOWN,
60         CONTEXT_MENU_CORE_ALIGN_AUTO
61 };
62
63 enum ContextMenuCoreItemStatus
64 {
65         CONTEXT_MENU_CORE_ITEM_STATUS_NORMAL = 0,   /**< The normal state */
66         CONTEXT_MENU_CORE_ITEM_STATUS_PRESSED,      /**< The pressed state  */
67         CONTEXT_MENU_CORE_ITEM_STATUS_HIGHLIGHTED   /**< The highlighted state */
68 };
69
70 // Align Bound Base
71 enum ContextMenuCoreDropPosition
72 {
73         CONTEXT_MENU_CORE_DROP_POSITION_INVALID = -1,
74         CONTEXT_MENU_CORE_DROP_POSITION_UP,
75         CONTEXT_MENU_CORE_DROP_POSITION_DOWN,
76         CONTEXT_MENU_CORE_DROP_POSITION_LEFT,
77         CONTEXT_MENU_CORE_DROP_POSITION_RIGHT,
78
79         CONTEXT_MENU_CORE_DROP_POSITION_MAX
80 };
81
82 struct _ContextMenuItemInfo;
83
84 /**
85  * @class _ContextMenu
86  * @brief
87  * @since 2.0
88  *
89  *
90  *
91  *
92  */
93 class _OSP_EXPORT_ _ContextMenu
94         : public _Window
95         , virtual public Tizen::Base::Runtime::IEventListener
96         , virtual public _IUiEventListener
97         , virtual public _IUiEventPreviewer
98 {
99         DECLARE_CLASS_BEGIN(_ContextMenu, _Control);
100         DECLARE_PROPERTY("color", GetPropertyColor, SetPropertyColor);
101         DECLARE_PROPERTY("normalItemColor", GetPropertyNormalItemColor, SetPropertyNormalItemColor);
102         DECLARE_PROPERTY("pressedItemColor", GetPropertyPressedItemColor, SetPropertyPressedItemColor);
103         DECLARE_PROPERTY("highlightedItemColor", GetPropertyHighlightedItemColor, SetPropertyHighlightedItemColor);
104         DECLARE_PROPERTY("normalItemTextColor", GetPropertyNormalItemTextColor, SetPropertyNormalItemTextColor);
105         DECLARE_PROPERTY("pressedItemTextColor", GetPropertyPressedItemTextColor, SetPropertyPressedItemTextColor);
106         DECLARE_PROPERTY("highlightedItemTextColor", GetPropertyHighlightedItemTextColor, SetPropertyHighlightedItemTextColor);
107         DECLARE_PROPERTY("maxVisibleItemsCount", GetPropertyMaxVisibleItemsCount, SetPropertyMaxVisibleItemsCount);
108         DECLARE_CLASS_END();
109
110 // Properties
111         result SetPropertyMaxVisibleItemsCount(const Variant& count);
112         Variant GetPropertyMaxVisibleItemsCount(void) const;
113
114         result SetPropertyColor(const Variant& color);
115         Variant GetPropertyColor(void) const;
116
117         result SetPropertyNormalItemColor(const Variant& color);
118         Variant GetPropertyNormalItemColor(void) const;
119
120         result SetPropertyPressedItemColor(const Variant& color);
121         Variant GetPropertyPressedItemColor(void) const;
122
123         result SetPropertyHighlightedItemColor(const Variant & color);
124         Variant GetPropertyHighlightedItemColor(void) const;
125
126         result SetPropertyNormalItemTextColor(const Variant& color);
127         Variant GetPropertyNormalItemTextColor(void) const;
128
129         result SetPropertyPressedItemTextColor(const Variant& color);
130         Variant GetPropertyPressedItemTextColor(void) const;
131
132         result SetPropertyHighlightedItemTextColor(const Variant & color);
133         Variant GetPropertyHighlightedItemTextColor(void) const;
134
135 // Lifecycle
136 public:
137         _ContextMenu(const Tizen::Graphics::FloatPoint& point, enum ContextMenuCoreStyle style
138                                 , enum ContextMenuCoreAlign contextMenuAlign = CONTEXT_MENU_CORE_ALIGN_AUTO);
139         virtual ~_ContextMenu(void);
140         static _ContextMenu* CreateContextMenuN(const Tizen::Graphics::FloatPoint& point
141                                                                                 , enum ContextMenuCoreStyle style, enum ContextMenuCoreAlign contextMenuAlign);
142
143 // Operation
144 public:
145         result Install(void);
146         result Initialize(void);
147         result AddItem(const Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap, const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
148         result InsertItem(int index, const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap
149                                          , const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
150         result SetItem(int index, const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* pNormalBitmap
151                                   , const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
152         result RemoveItemAt(int index);
153         result RemoveAllItems(void);
154         int GetItemCount(void) const;
155         result SetShowItemCount(int count);
156         int GetShowItemCount(void) const;
157         int GetShowItemMaxCount(void) const;
158         int GetItemIndexAt(int actionId) const;
159         int GetItemActionIdAt(int index) const;
160         result SetAnchorPosition(float x, float y);
161         Tizen::Graphics::FloatPoint GetAnchorPosition(void) const;
162         result SetBodyRect(const Tizen::Graphics::FloatRectangle& rect);
163         Tizen::Graphics::FloatRectangle GetBodyRect(void) const;
164         result SetArrowRect(const Tizen::Graphics::FloatRectangle& rect);
165         Tizen::Graphics::FloatRectangle GetArrowRect(void) const;
166         result SetWindowRect(const Tizen::Graphics::FloatRectangle& rect);
167         Tizen::Graphics::FloatRectangle GetWindowRect(void) const;
168         result SetTextColor(enum ContextMenuCoreItemStatus status, const Tizen::Graphics::Color& color);
169         Tizen::Graphics::Color GetTextColor(enum ContextMenuCoreItemStatus status) const;
170         result SetColor(const Tizen::Graphics::Color& color);
171         Tizen::Graphics::Color GetColor(void) const;
172         result SetItemColor(enum ContextMenuCoreItemStatus status, const Tizen::Graphics::Color& color);
173         Tizen::Graphics::Color GetItemColor(enum ContextMenuCoreItemStatus status) const;
174         result AddActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
175         result RemoveActionEventListener(const Tizen::Ui::Controls::_IActionEventListener& listener);
176         Tizen::Ui::Controls::_ActionEvent* GetActionEvent(void) const;
177         const Tizen::Graphics::Bitmap* GetArrowNormalBitmap(ContextMenuCoreDropPosition dropPosition) const;
178         const Tizen::Graphics::Bitmap* GetArrowEffectBitmap(ContextMenuCoreDropPosition dropPosition) const;
179         const Tizen::Graphics::Bitmap* GetBackgroundNormalBitmap(void) const;
180         const Tizen::Graphics::Bitmap* GetBackgroundEffectBitmap(void) const;
181         ContextMenuCoreDropPosition GetDropPosition(void) const;
182         _ControlOrientation GetLayout(void) const;
183
184         virtual result OnAttachedToMainTree(void);
185         virtual result OnDetachingFromMainTree(void);
186         virtual void OnDraw(void);
187
188         virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
189         virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
190         virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
191
192         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
193         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
194         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
195         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
196
197         virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
198         virtual void OnFontInfoRequested(unsigned long& style, float& size);
199
200         virtual void OnVisibleStateChanged(void);
201         virtual void OnChangeLayout(_ControlOrientation orientation);
202         virtual void OnOwnerChanged(_Control* pOldOwner);
203
204         virtual bool IsActivatedOnOpen(void) const;
205         Tizen::Ui::_AccessibilityElement* GetAccessibilityElement(const int mainIndex) const;
206         void AddAccessibilityElement(const _AccessibilityElement& element);
207
208         _ContextMenuItemInfo GetItemFromPosition(const Tizen::Graphics::FloatPoint& position) const;
209         _ContextMenuItemInfo FindItem(int index) const;
210         result SetTopDrawnItemIndex(int index);
211
212         _ScrollPanel* GetScrollPanel(void);
213
214 protected:
215         result SetPresenter(const _IContextMenuPresenter& ContextMenuPresenter);
216
217 private:
218         result LoadBitmap(void);
219         result LoadColorReplacedBitmap(const Tizen::Graphics::Color& color);
220         void AdjustDropPosition(void);
221         void SetAllAccessibilityElement(void);
222         void RemoveAllAccessibilityElement(void);
223
224 private:
225         _ContextMenu(const _ContextMenu& rhs);
226         _ContextMenu& operator =(const _ContextMenu& rhs);
227
228 // Attribute
229 private:
230         _IContextMenuPresenter* __pContextMenuPresenter;
231         enum ContextMenuCoreStyle __style;
232         enum ContextMenuCoreAlign __align;
233         int __showItemCount;
234         int __showItemMaxCount;
235         bool __isAttachedToMainTree;
236         bool __ownerInputEnableState;
237
238 // attribute for position fo the window
239         Tizen::Graphics::FloatPoint     __anchorPoint;  // the anchor point on whole screen area.
240         Tizen::Graphics::FloatRectangle __bodyRect;             // the body area of the ContextMenu area.
241         Tizen::Graphics::FloatRectangle __arrowRect;    // the arrow area of the ContextMenu area.
242         Tizen::Graphics::FloatRectangle __windowRect;   // the ContextMenu area on whole screen area.
243
244 // attribute for event
245         _ActionEvent* __pActionEvent;
246
247 // attribute for drawing
248         Tizen::Graphics::Bitmap* __pArrowNormalBitmap[CONTEXT_MENU_CORE_DROP_POSITION_MAX];
249         Tizen::Graphics::Bitmap* __pArrowEffectBitmap[CONTEXT_MENU_CORE_DROP_POSITION_MAX];
250         Tizen::Graphics::Bitmap* __pBackgroundNormalBitmap;
251         Tizen::Graphics::Bitmap* __pBackgroundEffectBitmap;
252         enum ContextMenuCoreDropPosition __dropPosition;
253         enum _ControlOrientation __layout;
254
255         Tizen::Graphics::Color __backgroundColor;
256         Tizen::Graphics::Color __textColor[CONTEXT_MENU_ITEM_STATUS_COUNT];
257         Tizen::Graphics::Color __itemColor[CONTEXT_MENU_ITEM_STATUS_COUNT];
258
259         Tizen::Base::Collection::ArrayListT<int> __actionId;
260         Tizen::Base::Collection::LinkedListT<_AccessibilityElement*> __accessibilityElements;
261
262         _ScrollPanel* __pScrollPanel;
263
264 }; // _ContextMenu
265
266 }}} // Tizen::Ui: Control
267
268 #endif  //_FUI_CTRL_INTERNAL_CONTEXT_MENU_H_