Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_TableViewItem.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 /**
19  * @file        FUiCtrl_TableViewItem.h
20  * @brief       This is the header file for the _TableViewItem class.
21  *
22  * This header file contains the declarations of the _TableViewItem class.
23  */
24
25
26 #ifndef _FUI_CTRL_INTERNAL_TABLE_VIEW_ITEM_H_
27 #define _FUI_CTRL_INTERNAL_TABLE_VIEW_ITEM_H_
28
29 #include <FUiCtrlTableViewTypes.h>
30 #include <FUiAnimIVisualElementAnimationStatusEventListener.h>
31 #include <FUiAnimIVisualElementAnimationTickEventListener.h>
32 #include <FBaseColArrayList.h>
33 #include <FBaseRtITimerEventListener.h>
34 #include "FUi_Control.h"
35 #include "FUi_IAccessibilityListener.h"
36 #include "FUiCtrl_IListItemCommon.h"
37 #include "FUiCtrl_Label.h"
38
39 namespace Tizen { namespace Ui
40 {
41 class _TouchLongPressGestureDetector;
42 }}
43
44 namespace Tizen { namespace Ui { namespace Controls
45 {
46
47 enum TableViewItemSelectionStyle
48 {
49    TABLE_VIEW_ITEM_SELECTION_STYLE_NONE = 0,
50    TABLE_VIEW_ITEM_SELECTION_STYLE_WHOLE
51 };
52
53 enum TableViewItemType
54 {
55         TABLE_VIEW_ITEM_TYPE_TOP,
56         TABLE_VIEW_ITEM_TYPE_MIDDLE,
57         TABLE_VIEW_ITEM_TYPE_BOTTOM,
58         TABLE_VIEW_ITEM_TYPE_ONE,
59         TABLE_VIEW_ITEM_TYPE_TITLE,
60         TABLE_VIEW_ITEM_TYPE_HEADER,
61         TABLE_VIEW_ITEM_TYPE_FOOTER,
62         TABLE_VIEW_ITEM_TYPE_NONE
63 };
64
65 enum TableViewGroupItemDrawingStatus
66 {
67         TABLE_VIEW_GROUPITEM_DRAWING_STATUS_NORMAL = 3,
68         TABLE_VIEW_GROUPITEM_DRAWING_STATUS_PRESSED
69 };
70
71 enum TableViewSimpleItemDrawingStatus
72 {
73         TABLE_VIEW_SIMPLEITEM_DRAWING_STATUS_DISABLED = 5,
74 };
75
76
77 struct _ItemDrawingProperty
78 {
79         bool itemDividerEnabled;
80         Tizen::Graphics::Color dividerColor;
81         bool sectionStyleEnabled;
82         Tizen::Graphics::Color sectionStyleBgColor;
83         bool groupedLookEnabled;
84         bool reorderMode;
85         int leftMargin;
86         int scrollMargin;
87         int width;
88         bool propertyChanged;
89 };
90
91 class _OSP_EXPORT_ _TableViewItem
92         : public Tizen::Ui::_Control
93         , public _IListItemCommon
94         , public _IAccessibilityListener
95         , public Tizen::Base::Runtime::ITimerEventListener
96         , public Tizen::Ui::Animations::IVisualElementAnimationTickEventListener
97         , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
98         , virtual public Tizen::Base::Runtime::IEventListener
99         , virtual public Tizen::Ui::_IUiEventListener
100         , virtual public Tizen::Ui::_IUiEventPreviewer
101 {
102 public:
103         virtual ~_TableViewItem();
104
105         static _TableViewItem* CreateTableViewItemN(int itemHeight);
106
107         virtual bool DrawItem(Tizen::Graphics::Rectangle& rcItem, ListItemState isFocused, bool itemDivider = false);
108
109         virtual int GetItemHeight(void) const;
110         virtual void SetItemHeight(int itemHeight);
111
112         virtual void SetChecked(bool checked);
113         virtual bool IsChecked(void) const;
114         virtual void SetCheckedAnimationEnabled(bool enabled);
115
116         virtual void SetItemEnabled(bool enabled);
117         virtual bool IsItemEnabled(void) const;
118
119         void SetItemType(const TableViewItemType itemType);
120         TableViewItemType GetItemType(void) const;
121
122         virtual bool IsReorderMode(void) const;
123         virtual void SetReorderMode(bool enabled);
124
125         virtual void SetItemChanged(bool changed);
126         virtual bool IsItemChanged(void) const;
127
128         virtual void SetItemIndex(int groupIndex, int itemIndex);
129         virtual void GetItemIndex(int& groupIndex, int& itemIndex) const;
130
131         _TableViewItem* GetContextItem(void) const;
132         void SetContextItem(_TableViewItem* pContextItem);
133
134         bool IsContextItem(void) const;
135         void SetContextItemActivation(bool activated);
136         bool IsContextItemActivated(void) const;
137
138         result CreateItemDimLayer(void);
139         void ExposeContextItem(Tizen::Graphics::Rectangle itemBounds, int targetWidth);
140         void DrawItemDimLayer(bool visible);
141
142         void SetItemStyle(TableViewAnnexStyle style);
143         TableViewAnnexStyle GetItemStyle(void) const;
144
145         void SetItemWidth(int width);
146
147         bool SetItemBackgroundBitmap(ListItemState itemState, const Tizen::Graphics::Bitmap* pBitmap);
148         Tizen::Graphics::Bitmap* GetItemBackgroundBitmap(ListItemState itemState) const;
149
150         void SetItemBackgroundColor(ListItemState itemState, const Tizen::Graphics::Color bgColor);
151         Tizen::Graphics::Color GetItemBackgroundColor(ListItemState itemState) const;
152
153         result SetSelectionStyle(TableViewItemSelectionStyle style);
154         TableViewItemSelectionStyle GetSelectionStyle(void) const;
155
156         virtual void SetAppInfo(const void* pAppInfo);
157         virtual void* GetAppInfo(void) const;
158
159         int AddRef(void);
160         int Release(void);
161
162         void FireItemEvent(bool selectedBody = true);
163         void FireItemSweepEvent(TableViewSweepDirection direction);
164
165         void SetDrawingProperty(_ItemDrawingProperty* pDrawingProperty);
166         _ItemDrawingProperty* GetDrawingProperty(void);
167
168         void SetDrawingStatus(TableViewItemDrawingStatus status);
169         TableViewItemDrawingStatus GetDrawingStatus(void);
170
171         void AdjustChildControlMargin(void);
172
173         void AdjustContextItemBounds(void);
174         void AdjustChildControlCenterAlign(void);
175         void SetChildControlCenterAlign(bool centerAlign);
176         void SetItemCustomHeight(int height);
177         void AdjustAnnexBounds(void);
178
179         //Simple Item
180         result SetSimpleItemContents(const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBitmap, bool groupType);
181         result SetSimpleTextColor(const Tizen::Graphics::Color& color, TableViewItemDrawingStatus status);
182         Tizen::Graphics::Color GetSimpleItemTextColor(TableViewItemDrawingStatus status) const;
183         result SetSimpleItemTextSize(int size);
184         int GetSimpleItemTextSize(void) const;
185
186         bool MoveItem(Tizen::Graphics::Point position, int duration, int delay, Tizen::Base::String* pName = null);
187         bool FadeInOutItem(bool fadeOut, int duration, int delay, Tizen::Base::String* pName = null);
188         bool ZoomInOutItem(bool zoomOut, int duration, int delay, Tizen::Base::String* pName = null);
189
190         Tizen::Graphics::Point GetLastTouchPressedPosition(void);
191         void SetLastTouchPressedPosition(Tizen::Graphics::Point position);
192
193         bool GetSelectionState(void);
194         void SetSelectionState(bool selected);
195
196         result SetIndividualSelectionEnabled(const _Control& control, bool enable);
197         bool IsIndividualSelectionEnabled(const _Control& control);
198
199         bool IsAnimationPlaying(void);
200         void StopAllAnimation(void);
201
202         void SetItemDividerEnabled(bool enable);
203
204         result PlayCheckBoxAnimation(void);
205         result StartCheckBoxAnimation(void);
206         void StopCheckBoxAnimation(void);
207
208         // event handler for ITouchEventListener
209         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
210         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
211         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
212         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
213
214         virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
215         virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
216         virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
217         virtual _UiTouchEventDelivery OnPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
218
219         virtual void OnDraw(void);
220         virtual void OnChildAttached(const _Control& child);
221         virtual void OnChildDetached(const _Control& child);
222         virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
223         virtual void OnBoundsChanged(void);
224
225         // VisualElement Animation
226         virtual void OnTickOccurred(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, const Tizen::Ui::Variant& currentValue);
227         virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target);
228         virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount);
229         virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
230
231         // accessibility listener
232         virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element);
233         virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element);
234         virtual bool OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
235         virtual bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element);
236         virtual bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element);
237         virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element);
238         virtual bool OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
239         virtual bool OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
240
241 protected:
242         _TableViewItem(int nItemHeight);
243         result Initialize(void);
244
245         // Accessibility
246         virtual void SetAccessibilityElement(void);
247
248 private:
249         _TableViewItem(const _TableViewItem&);
250         _TableViewItem& operator =(const _TableViewItem&);
251
252 private:
253         void DrawItemBackground(void);
254         void DrawSectionStyleBackground(void);
255         void DrawAnnexStyle(void);
256         void DrawCheckBox(void);
257         void DrawRadioBox(void);
258         void DrawOnOffButton(void);
259         void DrawDetailButton(void);
260         void DrawItemDivider(void);
261         void DrawGroupedLook(void);
262
263         result DrawBitmap (Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& bounds, const Tizen::Graphics::Bitmap& bitmap);
264
265         result SetItemHighlightBounds(Tizen::Ui::Animations::_VisualElement& highlightVisualElement, const Tizen::Graphics::Rectangle& bounds);
266         Tizen::Graphics::Rectangle CalculateItemHighlightBounds(void);
267         Tizen::Graphics::Rectangle CalculateAnnexBitmapBounds(int annexWidth, int annexHeight, const Tizen::Graphics::Bitmap& bitmap);
268
269         bool IsTitleStyleItem(void) const;
270         bool IsValidSelectionState(void);
271
272         //Simple Item
273         void DrawSimpleItem(void);
274         result CreateSimpleItemContents(bool textOnly);
275         int GetAnnexWidth(TableViewAnnexStyle style);
276
277 private:
278         void* __pAppInfo;
279         int __refCount;
280         int __itemHeight;
281         int __itemGroupIndex;
282         int __itemIndex;
283
284         bool __checkedState;
285         bool __enabledState;
286         bool __itemChanged;
287         bool __reorderMode;
288         bool __itemSelected;
289         bool __childMarginState;
290
291         TableViewAnnexStyle __annexStyle;
292         TableViewItemDrawingStatus __drawingStatus;
293         TableViewItemSelectionStyle __selectionStyle;
294         TableViewItemType __itemType;
295
296         _TableViewItem* __pContextItem;
297         bool __isContextItem;
298         bool __isContextItemActivated;
299         bool __checkItemHeightNeeded;
300
301         _Label* __pItemDivider;
302         _Label* __pItemTopDivider;
303         _Label* __pItemAnnex;
304
305         int __itemWidth;
306
307         Tizen::Graphics::Bitmap* __pItemBgBitmap[3];
308         Tizen::Graphics::Color __colorItemBg[3];
309
310         _ItemDrawingProperty* __pDrawingProperty;
311
312         bool __itemDividerEnabled;
313
314         // Simple Item
315         _Label* __pSimpleItemText;
316         _Label* __pSimpleItemBitmap;
317         Tizen::Graphics::Color __simpleItemTextColor[6];
318         int __simpleItemTextSize;
319
320         _Label* __pDimLayer;
321
322         Tizen::Graphics::Point __touchStartPosition;
323         bool __isTouchMoved;
324         bool __childControlCenterAlign;
325         int __customHeight;
326         int __animationCount;
327
328         Tizen::Base::Collection::ArrayList __individualSelectionControls;
329
330         Tizen::Ui::_AccessibilityElement* __pAccessibilityElement;
331
332         Tizen::Base::Runtime::Timer* __pCheckedTimer;
333         bool __isCheckedTimerEnabled;
334         bool __isCheckedAnimationEnabled;
335         int __checkedCount;
336         Tizen::Graphics::Rectangle __checkedBounds;
337
338         Tizen::Ui::Animations::_VisualElement* __pHighlightVisualElement;
339
340         static const float SIMPLE_ITEM_ELEMENT_BITMAP_SIZE_RATIO = 0.6f;
341         static const float BACKGROUND_DIMMED_OPACITY = 0.7f;
342         static const float BACKGROUND_DISABLED_OPACITY = 0.3f;
343         static const int DEFAULT_CAPTURED_CONTROL_COUNT = 10;
344         static const int CHECKED_ANIMATION_DURATION = 30;
345         static const int MAX_CHECKED_COUNT = 10;
346 };
347
348 }}} // Tizen::Ui::Controls
349
350 #endif // _FUI_CTRL_INTERNAL_TABLE_VIEW_ITEM_H_