Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_TableView.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_TableView.h
20  * @brief               This file defines the _TableView class.
21  * @version             3.0
22  *
23  * This file contains the declarations of TableView Control class and its helper classes.
24  */
25
26 #ifndef _FUI_CTRL_INTERNAL_TABLE_VIEW_H_
27 #define _FUI_CTRL_INTERNAL_TABLE_VIEW_H_
28
29 #include <FUiCtrlTableViewTypes.h>
30 #include "FUiCtrl_ScrollPanel.h"
31 #include "FUiCtrl_TableViewItemEventArg.h"
32 #include "FUiCtrl_ITableViewItemEventListener.h"
33
34 namespace Tizen { namespace Ui { namespace Controls
35 {
36 class _FastScroll;
37 class _TableViewItem;
38 class _TableViewItemProvider;
39 class _TableViewItemProviderAdaptor;
40 class _TableViewPresenter;
41 class _IUiFastScrollListener;
42 class _UiTableViewItemEvent;
43
44 enum TableViewStyle
45 {
46         TABLE_VIEW_STYLE_SIMPLE = 0,
47         TABLE_VIEW_STYLE_GROUPED,
48         TABLE_VIEW_STYLE_SECTION
49 };
50
51 struct TableViewItemTag
52 {
53         int groupIndex;
54         int itemIndex;
55 };
56
57 class _OSP_EXPORT_ _TableView
58         : public _ScrollPanel
59         , virtual public _ITouchGestureEventListener
60         , virtual public _IUiEventListener
61         , virtual public _IUiEventPreviewer
62         , virtual public Tizen::Base::Runtime::IEventListener
63 {
64         DECLARE_CLASS_BEGIN(_TableView, _ScrollPanel);
65         DECLARE_PROPERTY("itemDividerColor", GetPropertyItemDividerColor, SetPropertyItemDividerColor);
66         DECLARE_PROPERTY("textColorOfEmptyTableView", GetPropertyTextColorOfEmptyTableView, SetPropertyTextColorOfEmptyTableView);
67         DECLARE_PROPERTY("textOfEmptyTableView", GetPropertyTextOfEmptyTableView, SetPropertyTextOfEmptyTableView);
68         DECLARE_PROPERTY("sectionColor", GetPropertySectionColor, SetPropertySectionColor);
69         DECLARE_CLASS_END();
70
71 public:
72         virtual ~_TableView(void);
73
74         static _TableView* CreateTableViewN(TableViewStyle style, bool itemDivider, TableViewScrollBarStyle scrollStyle);
75
76         result Initialize(TableViewStyle style, bool itemDivider, TableViewScrollBarStyle scrollStyle);
77
78         result SetItemProvider(const _TableViewItemProvider* pProvider);
79
80         void SetItemProviderAdaptor(_TableViewItemProviderAdaptor* pProviderAdaptor);
81         _TableViewItemProviderAdaptor* GetItemProviderAdaptor(void) const;
82
83         result AddTableViewItemEventListener(const _ITableViewItemEventListener& listener);
84         result RemoveTableViewItemEventListener(const _ITableViewItemEventListener& listener);
85         result AddGroupedTableViewItemEventListener(const _ITableViewItemEventListener& listener);
86         result RemoveGroupedTableViewItemEventListener(const _ITableViewItemEventListener& listener);
87         result AddSectionTableViewItemEventListener(const _ITableViewItemEventListener& listener);
88         result RemoveSectionTableViewItemEventListener(const _ITableViewItemEventListener& listener);
89
90         result AddFastScrollListener(const _IUiFastScrollListener& listener);
91
92         result RemoveFastScrollListener(const _IUiFastScrollListener& listener);
93
94         // touch Event Previewer
95         virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
96         virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
97         virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
98         virtual _UiTouchEventDelivery OnPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
99
100         // event handler for ITouchEventListener
101         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
102         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
103         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
104         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
105
106         // gestureListener Callback API
107         virtual bool OnFlickGestureDetected(_TouchFlickGestureDetector& gesture);
108         virtual bool OnFlickGestureCanceled(_TouchFlickGestureDetector& gesture);
109
110         void SetSweepEnabled(bool enable);
111         bool IsSweepEnabled(void) const;
112
113         bool IsReorderModeEnabled(void) const;
114         result SetReorderModeEnabled(bool enable);
115
116         _FastScroll* GetFastScrollBar(void) const;
117         result SetFastScrollIndex(const Tizen::Base::String& text, bool useSearchIcon);
118
119         TableViewScrollBarStyle GetScrollStyle(void) const;
120         result SetScrollStyle(TableViewScrollBarStyle scrollStyle);
121
122         TableViewStyle GetTableViewStyle(void) const;
123         void SetTableViewStyle(TableViewStyle style);
124
125         result GetTopDrawnItemIndex(int& groupIndex, int& itemIndex) const;
126         result SetTopDrawnItemIndex(int groupIndex, int itemIndex); // ScrollToItem();
127
128         result GetBottomDrawnItemIndex(int& groupIndex, int& itemIndex) const;
129         result SetBottomDrawnItemIndex(int groupIndex, int itemIndex); // ScrollToItem();
130
131         result ScrollByPixel(int scrollDistance);
132         void SetScrollEnabled(bool enable);
133         bool IsScrollEnabled(void) const;
134
135         result SetItemChecked(int groupIndex, int itemIndex, bool check);
136         bool IsItemChecked(int groupIndex, int itemIndex) const;
137
138         result SetItemEnabled(int groupIndex, int itemIndex, bool enable);
139         bool IsItemEnabled(int groupIndex, int itemIndex) const;
140
141         int GetGroupCount(void) const;
142         int GetItemCountAt(int groupIndex) const;
143
144         result RefreshTableView(int groupIndex, int itemIndex, TableViewRefreshType type, bool animation = true);
145         result UpdateTableView(void);
146
147         result GetItemIndexFromPosition(const Tizen::Graphics::Point& position, int& groupIndex, int& itemIndex) const;
148
149         result GetItemIndexFromPosition(const Tizen::Graphics::Point& position, int& groupIndex, int& itemIndex, int& elementId) const;
150
151         Tizen::Graphics::Color GetItemDividerColor(void) const;
152         result SetItemDividerColor(const Tizen::Graphics::Color& color);
153
154         bool IsItemDividerEnabled(void) const;
155         void SetItemDividerEnabled(bool enable);
156
157         Tizen::Graphics::Bitmap* GetBitmapOfEmptyTableView(void) const;
158         result SetBitmapOfEmptyTableView(const Tizen::Graphics::Bitmap* pBitmap);
159
160         Tizen::Graphics::Color GetTextColorOfEmptyTableView(void) const;
161         result SetTextColorOfEmptyTableView(const Tizen::Graphics::Color& color);
162
163         Tizen::Base::String GetTextOfEmptyTableView(void) const;
164         result SetTextOfEmptyTableView(const Tizen::Base::String& text);
165
166         Tizen::Graphics::Color GetSectionColor(void) const;
167         result SetSectionColor(const Tizen::Graphics::Color& color);
168
169         int GetTopMargin(void) const;
170         result SetTopMargin(int topMargin);
171
172         int GetBottomMargin(void) const;
173         result SetBottomMargin(int bottomMargin);
174
175         bool IsItemChecked(int index) const;
176         result SetItemChecked(int index, bool check);
177
178         bool IsItemEnabled(int index) const;
179         result SetItemEnabled(int index, bool enable);
180
181         void CheckItemHeightAndRefreshLayout(int groupIndex, int itemIndex);
182
183         _TableViewItem* FindItem(int groupIndex, int itemIndex) const;
184         void UnloadItem(int groupIndex, int itemIndex);
185         _TableViewItem* LoadItem(int groupIndex, int itemIndex);
186         void RefreshItemLayout(int groupIndex, int itemIndex);
187         void GetFirstLoadedItemIndex(int& groupIndex, int& itemIndex) const;
188         void GetLastLoadedItemIndex(int& groupIndex, int& itemIndex) const;
189         void ResetSweepItem(void);
190         int GetPressedItemCount(void);
191
192         void FireTableViewItemEvent(int groupIndex, int itemIndex, TableViewNotifyType type, _TableViewItem* pItem);
193         void FireTableViewItemSweepEvent(int groupIndex, int itemIndex, TableViewSweepDirection directioin);
194         void FireTableViewItemReorderEvent(int fromItemIndex, int toItemIndex);
195         void FireTableViewItemReorderEvent(int fromGroupIndex, int fromItemIndex, int toGroupIndex, int toItemIndex);
196         void FireTableViewContextItemActivationEvent(int groupIndex, int itemIndex, _TableViewItem* pItem, bool activated);
197
198         // Item Expand / Collapse
199         result ExpandGroup(int groupIndex);
200         result CollapseGroup(int groupIndex);
201         bool IsGroupExpanded(int groupIndex) const;
202
203         result ExpandAllGroup(bool animation);
204         result CollapseAllGroup(bool animation);
205
206         void SetGroupedLookEnabled(bool enable);
207         bool IsGroupedLookEnabled(void) const;
208
209         bool GetFirstDrawnFlag(void) const;
210         int GetMaxItemCachingSize(void) const;
211
212         virtual void OnDraw(void);
213         virtual void OnBoundsChanged(void);
214
215         virtual void OnChildAttached(const _Control& child);
216         virtual void OnChildDetached(const _Control& child);
217
218         result SetTableViewStatusChanged(bool changed);
219
220 protected:
221         // Properties
222         result SetPropertyItemDividerColor(const Variant& itemDividerColor);
223         Variant GetPropertyItemDividerColor(void) const;
224
225         result SetPropertyTextColorOfEmptyTableView(const Variant& textColorOfEmptyTableView);
226         Variant GetPropertyTextColorOfEmptyTableView(void) const;
227
228         result SetPropertyTextOfEmptyTableView(const Variant& textOfEmptyTableView);
229         Variant GetPropertyTextOfEmptyTableView(void) const;
230
231         result SetPropertySectionColor(const Variant& sectionColor);
232         Variant GetPropertySectionColor(void) const;
233
234 protected:
235         _TableView(void);
236         _TableViewPresenter* GetTableViewPresenter(void) const;
237         void SetTableViewPresenter(const _TableViewPresenter* pPresenter);
238
239 private:
240         _TableView(_TableView& rhs);
241         _TableView& operator =(_TableView& rhs);
242
243         bool IsOnProcessing(void);
244
245 // Attribute
246 private:
247         _TableViewPresenter* __pTableViewPresenter;
248         _FastScroll* __pFastScroll;
249         _UiTableViewItemEvent* __pTableViewItemEvent;
250
251         // property
252         bool __itemDividerEnabled;
253         bool __sweepEnabled;
254         bool __reorderEnabled;
255         bool __sectionStyle;
256         bool __groupedLookEnable;
257         TableViewStyle __tableViewStyle;
258         TableViewScrollBarStyle __scrollStyle;
259
260         Tizen::Graphics::Color __itemDividerColor;
261         Tizen::Graphics::Bitmap* __pBitmapOfEmptyTableView;
262         Tizen::Graphics::Bitmap* __pBackgroundBitmap;
263         Tizen::Base::String __textOfEmptyTableView;
264         Tizen::Graphics::Color __textColorOfEmptyTableView;
265         Tizen::Graphics::Color __sectionStyleColor;
266 };
267
268 }}}     // Tizen::Ui::Controls
269
270 #endif // _FUI_CTRL_INTERNAL_TABLE_VIEW_H_