Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_ListImpl.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_ListImpl.h
19  * @brief       This is the header file for the _ListImpl class.
20  */
21
22 #ifndef _FUI_CTRL_LIST_IMPL_H_
23 #define _FUI_CTRL_LIST_IMPL_H_
24
25 #include <FUiCtrlTableView.h>
26 #include "FUiCtrl_TableViewItemProvider.h"
27 #include "FUiCtrl_CustomListItemImpl.h"
28 #include "FUiCtrl_ITableViewItemEventListener.h"
29
30
31 namespace Tizen { namespace Ui { namespace Controls
32 {
33
34 extern const int INVALID_INDEX;
35
36 class _ListImpl;
37
38 class _NumberElement
39         : public ICustomListElement
40 {
41 public:
42         _NumberElement(void);
43         ~_NumberElement(void);
44
45         result DrawElement(const Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::Rectangle& rect, Tizen::Ui::Controls::CustomListItemStatus itemStatus);
46
47 private:
48         _NumberElement(const _NumberElement& rhs);
49         _NumberElement& operator =(const _NumberElement& rhs);
50
51 public:
52         int index;
53
54 }; //_NumberElement
55
56 class _ListItemDataProvider
57         : public ITableViewItemProvider
58 {
59 public:
60         _ListItemDataProvider(_ListImpl* pListImpl);
61         virtual ~_ListItemDataProvider(void);
62
63         virtual int GetItemCount(void);
64         virtual TableViewItem* CreateItem(int index, int itemWidth);
65         virtual bool DeleteItem(const int itemIndex, TableViewItem* pItem);
66         virtual int GetDefaultItemHeight(void);
67         virtual void UpdateItem(int itemIndex, TableViewItem* pItem);
68
69 private:
70         _ListItemDataProvider(void);
71         _ListItemDataProvider(const _ListItemDataProvider& rhs);
72         _ListItemDataProvider& operator =(const _ListItemDataProvider& rhs);
73
74 private:
75         _ListImpl* __pListImpl;
76 };  //_ListItemDataProvider
77
78 class _ListImpl
79         : public _ListBaseImpl
80         , public _ITableViewItemEventListener
81 {
82 public:
83         _ListImpl(Control* pList, _TableView* pCore);
84         ~_ListImpl(void);
85
86         virtual const char* GetPublicClassName(void) const;
87         virtual const List& GetPublic(void) const;
88         virtual List& GetPublic(void);
89         virtual const _TableView& GetCore(void) const;
90         virtual _TableView& GetCore(void);
91         static _ListImpl* CreateListImplN(List* pControl, const Tizen::Graphics::Rectangle& bounds);
92         result Initialize(ListItemFormat itemFormat, int row1Height, int row2Height, int column1Width, int column2Width);
93         result UpdateBounds(const Tizen::Graphics::Rectangle& rect);
94         result SetStyle(ListStyle style);
95         void SetListItemFormat(ListItemFormat itemFormat);
96         result InitCustomListItemFormat(void);
97         bool GetTextSlide(ListItemText textIndex);
98
99         //@See doxygen
100         result AddItemEventListener(const Tizen::Ui::IItemEventListener& listener);
101         //@See doxygen
102         result RemoveItemEventListener(const Tizen::Ui::IItemEventListener& listener);
103         //@See doxygen
104         result AddItem(const Tizen::Base::String* pText1, const Tizen::Base::String* pText2, const Tizen::Graphics::Bitmap* pBitmap1, const Tizen::Graphics::Bitmap* pBitmap2, int itemId = LIST_ITEM_UNSPECIFIED_ID);
105         //@See doxygen
106         result InsertItemAt(int index, const Tizen::Base::String* pText1, const Tizen::Base::String* pText2, const Tizen::Graphics::Bitmap* pBitmap1, const Tizen::Graphics::Bitmap* pBitmap2, int itemId = LIST_ITEM_UNSPECIFIED_ID);
107         //@See doxygen
108         result SetItemAt(int index, const Tizen::Base::String* pText1, const Tizen::Base::String* pText2, const Tizen::Graphics::Bitmap* pBitmap1, const Tizen::Graphics::Bitmap* pBitmap2, int itemId = LIST_ITEM_UNSPECIFIED_ID);
109         //@See doxygen
110         result RemoveItemAt(int index);
111         //@See doxygen
112         result RemoveAllItems(void);
113         //@See doxygen
114         result SetItemEnabled(int index, bool enable);
115         //@See doxygen
116         bool IsItemEnabled(int index) const;
117         //@See doxygen
118         void SetFocusedItemBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
119         //@See doxygen
120         void SetHighlightedItemBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
121         //@See doxygen
122         void SetNormalItemBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
123         //@See doxygen
124         void SetItemTextColor(ListItemText textIndex, const Tizen::Graphics::Color& textColor);
125         //@See doxygen
126         Tizen::Graphics::Color GetItemTextColor(ListItemText textIndex) const;
127         //@See doxygen
128         void EnableTextSlide(ListItemText textIndex);
129         //@See doxygen
130         void DisableTextSlide(void);
131         //@See doxygen
132         int GetItemHeight(void) const;
133         //@See doxygen
134         int GetRow1Height(void) const;
135         //@See doxygen
136         int GetRow2Height(void) const;
137         //@See doxygen
138         int GetColumn1Width(void) const;
139         //@See doxygen
140         int GetColumn2Width(void) const;
141         //@See doxygen
142         result SetRow1Height(int row1Height);
143         //@See doxygen
144         result SetRow2Height(int row2Height);
145         //@See doxygen
146         result SetColumn1Width(int column1Width);
147         //@See doxygen
148         result SetColumn2Width(int column2Width);
149         //@See doxygen
150         result SetItemChecked(int index, bool check);
151         //@See doxygen
152         bool IsItemChecked(int index) const;
153         //@See doxygen
154         result SetAllItemsChecked(bool check);
155         //@See doxygen
156         result RemoveAllCheckedItems(void);
157         //@See doxygen
158         int GetFirstCheckedItemIndex(void) const;
159         //@See doxygen
160         int GetLastCheckedItemIndex(void) const;
161         //@See doxygen
162         int GetNextCheckedItemIndexAfter(int index) const;
163         //@See doxygen
164         int GetItemIndexFromItemId(int itemId) const;
165         //@See doxygen
166         int GetItemIdAt(int index) const;
167         //@See doxygen
168         void ScrollToBottom(void);
169         //@See doxygen
170         void ScrollToTop(void);
171         //@See doxygen
172         result ScrollToTop(int index);
173         //@See doxygen
174         result RefreshItem(int index);
175
176         static _ListImpl* GetInstance(List& list);
177         static const _ListImpl* GetInstance(const List& list);
178
179 private:
180         _ListImpl(const _ListImpl& rhs);
181         _ListImpl& operator =(const _ListImpl& rhs);
182
183         virtual void OnTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
184         virtual void OnTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int itemIndexFrom, int itemIndexTo);
185         virtual void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
186         virtual void OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
187         virtual void OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
188         virtual void OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
189         virtual void OnGroupedTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int groupIndexFrom, int itemIndexFrom, int groupIndexTo, int itemIndexTo);
190         virtual void OnSectionTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
191         virtual void OnSectionTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
192         virtual void OnTableViewItemSwept(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewSweepDirection direction);
193
194         void ProcessItemStateChange(int groupIndex, int itemIndex, ItemStatus itemStatus);
195         void ProcessItemStateChange(int groupIndex, int itemIndex, int elementId, ItemStatus itemStatus);
196
197         CustomListItem* GetNewItemN(const Tizen::Base::String* pText1, const Tizen::Base::String* pText2,
198                         const Tizen::Graphics::Bitmap* pBitmap1, const Tizen::Graphics::Bitmap* pBitmap2, int itemId, int index);
199
200         void GetElementRects(Tizen::Graphics::Rectangle& text1Rect, Tizen::Graphics::Rectangle& text2Rect, Tizen::Graphics::Rectangle& img1Rect, Tizen::Graphics::Rectangle& img2Rect);
201         result ReDrawList(void);
202         void SetBitmap(TableViewItemDrawingStatus itemStatus, const Tizen::Graphics::Bitmap& bitmap);
203         result UpdateNumbers(int index);
204         result Refresh(int);
205         result SetItemChecked(int groupIndex, int itemIndex, bool check);
206         bool IsItemChecked(int groupIndex, int subIndex) const;
207
208         result InitializeItemSizes(int row1Height, int row2height, int column1Width, int column2Width);
209         void GetItemMargins(int& leftMargin, int& numberStyleMargin, int& dividerMargin, int& lowerMargin, int& upperMargin);
210
211 private:
212         static const int ID_FORMAT_TEXT1 = 101;
213         static const int ID_FORMAT_TEXT2 = 102;
214         static const int ID_FORMAT_IMAGE1 = 103;
215         static const int ID_FORMAT_IMAGE2 = 104;
216         static const int ID_FORMAT_NUMBER = 105;
217         static const int ID_FORMAT_CHECK = 106;
218
219         Tizen::Base::Collection::LinkedList __itemListeners;
220         int __row1Height;
221         int __row2Height;
222         int __column1Width;
223         int __column2Width;
224         Tizen::Graphics::Color __text1Color;
225         Tizen::Graphics::Color __text2Color;
226         bool __text1SlideEnabled;
227         bool __text2SlideEnabled;
228         ListStyle __listStyle;
229         ListItemFormat __listItemFormat;
230         Tizen::Graphics::Bitmap* __pNormalBgBitmap;
231         Tizen::Graphics::Bitmap* __pHighlightedBgBitmap;
232         Tizen::Graphics::Bitmap* __pFocusedBgBitmap;
233         Tizen::Base::Collection::LinkedList* __pNumberElements;
234         CustomListItemFormat* __pItemFormat;
235         _ListItemDataProvider* __pItemProvider;
236         int maxCount;
237         bool divider;
238
239         friend class _ListItemDataProvider;
240         friend class _CustomListItemImpl;
241
242 }; //_ListImpl
243
244 } } } //Tizen::Ui::Controls
245
246 #endif //_FUI_CTRL_LIST_IMPL_H_