Fork for IVI: mesa fixing
[profile/ivi/uifw.git] / src / ui / inc / FUiCtrl_SlidableListImpl.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_SlidableListImpl.h
20  * @brief               This is the header file for the _SlidableListImpl class.
21  */
22
23 #ifndef _FUI_CTRL_SLIDABLE_LIST_IMPL_H_
24 #define _FUI_CTRL_SLIDABLE_LIST_IMPL_H_
25
26 #include <FUiISlidableListEventListener.h>
27
28 #include "FUiCtrl_CustomListItemImpl.h"
29 #include "FUiCtrl_IFastScrollListener.h"
30 #include "FUiCtrl_TableView.h"
31 #include "FUiCtrl_ListBaseImpl.h"
32
33 namespace Tizen { namespace Ui { namespace Controls
34 {
35
36 class CustomListItem;
37 class _SlidableListImpl;
38 class _TableViewItemData;
39
40 class _SlidableListItemProvider
41         : public ITableViewItemProvider
42 {
43 public:
44         _SlidableListItemProvider(_SlidableListImpl* pList);
45         virtual ~_SlidableListItemProvider(void){}
46
47 public:
48         virtual int GetItemCount(void);
49         virtual TableViewItem* CreateItem(int index, int itemWidth);
50         virtual bool DeleteItem(const int itemIndex, TableViewItem* pItem);
51         virtual void UpdateItem(int itemIndex, TableViewItem* pItem);
52         virtual int GetDefaultItemHeight(void);
53
54         result UpdateCheckStatus(_TableViewItemData* pTableViewItemData, int index);
55         result CallLoadToTopCb(int index);
56         _TableViewItemData* LoadAtTop(int index);
57         result CallLoadToBottomCb(int index);
58         _TableViewItemData* LoadAtBottom(int index);
59
60         bool firstTime;
61         int bottomListenerIndex;
62         int topListenerIndex;
63
64 private:
65         _SlidableListItemProvider(const _SlidableListItemProvider& rhs);
66         _SlidableListItemProvider& operator =(const _SlidableListItemProvider& rhs);
67         _SlidableListImpl* __pListImpl;
68
69         friend class _CustomListItemImpl;
70
71 }; //_SlidableListItemProvider
72
73 class _SlidableListImpl
74         : public _ListBaseImpl
75         , public _ITableViewItemEventListener
76 {
77 private:
78         _SlidableListImpl(Control* pList, _TableView* pCore);
79         ~_SlidableListImpl(void);
80
81         void ProcessItemStateChange(int groupIndex, int index, int elementId, ItemStatus itemStatus);
82         void ProcessItemStateChange(int groupIndex, int index, ItemStatus itemStatus);
83
84 public:
85         static _SlidableListImpl* CreateSlidableListImplN(SlidableList* pControl, const Tizen::Graphics::Rectangle& bounds, bool itemDivider);
86
87         void AddSlidableListEventListener(const Tizen::Ui::ISlidableListEventListener& listener);
88         void RemoveSlidableListEventListener(const Tizen::Ui::ISlidableListEventListener& listener);
89
90         void AddCustomItemEventListener(const Tizen::Ui::ICustomItemEventListener& listener);
91
92         result AddItem(const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
93         //@See doxygen
94         int GetBottomDrawnItemIndex(void) const;
95         //@See doxygen
96         int GetFirstCheckedItemIndex(void) const;
97         //@See doxygen
98         int GetFirstLoadedItemIndex(void) const;
99         //@See doxygen
100         int GetLastLoadedItemIndex(void) const;
101         //@See doxygen
102         int GetItemCount(void) const;
103         int GetItemIndexFromItemId(int itemId) const;
104         //@See doxygen
105         int GetItemIndexFromPosition(int x, int y) const;
106         //@See doxygen
107         int GetItemIndexFromPosition(const Tizen::Graphics::Point& position) const;
108         //@See doxygen
109         int GetLastCheckedItemIndex(void) const;
110         //@See doxygen
111         const CustomListItem* GetLoadedItemAt(int index) const;
112         //@See doxygen
113         int GetLoadedItemIdAt(int index) const;
114         //@See doxygen
115         int GetNextCheckedItemIndexAfter(int index) const;
116         //@See doxygen
117         Tizen::Graphics::Color GetTextColorOfEmptyList(void) const;
118         //@See doxygen
119         int GetTopDrawnItemIndex(void) const;
120         //@See doxygen
121         result InsertItemAt(int index, const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
122         //@See doxygen
123         bool IsItemChecked(int index) const;
124         //@See doxygen
125         bool IsItemLoaded(int index) const;
126         //@See doxygen
127         bool IsLoadedItemEnabled(int index) const;
128         //@See doxygen
129         result LoadItemToTop(const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
130         //@See doxygen
131         result LoadItemToBottom(const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
132         //@See doxygen
133         void SetItemCountAndHeight(int count, int listHeight);
134
135         //@See doxygen
136         int GetLoadedItemIndexFromItemId(int itemId) const;
137
138         //@See doxygen
139         result UnloadAllItems(void);
140         //@See doxygen
141         result RefreshItem(int index);
142         //@See doxygen
143         result RemoveAllCheckedItems(int itemHeight);
144         //@See doxygen
145         result RemoveAllItems(void);
146         //@See doxygen
147         void RemoveCustomItemEventListener(const Tizen::Ui::ICustomItemEventListener& listener);
148         //@See doxygen
149         result RemoveItemAt(int index, int itemHeight);
150         //@See doxygen
151         void ScrollToBottom(void);
152         //@See doxygen
153         result ScrollToTop(int index);
154         //@See doxygen
155         void ScrollToTop(void);
156         //@See doxygen
157         result SetAllItemsChecked(bool check);
158
159         //@See doxygen
160         result SetItemAt(int index, const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
161         //@See doxygen
162         result SetItemChecked(int index, bool check);
163         result SetItemChecked(int groupindex, int index, bool check);
164         //@See doxygen
165         result SetLoadedItemEnabled(int index, bool enable);
166         //@See doxygen
167         void SetTextColorOfEmptyList(const Tizen::Graphics::Color& color);
168         //@See doxygen
169         void SetTextOfEmptyList(const Tizen::Base::String& text);
170
171         virtual void OnTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
172
173         virtual void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
174
175         virtual void OnTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int itemIndexFrom, int itemIndexTo);
176
177         virtual void OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
178
179         virtual void OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
180
181         virtual void OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
182
183         virtual void OnGroupedTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int groupIndexFrom, int itemIndexFrom, int groupIndexTo, int itemIndexTo);
184
185         virtual void OnSectionTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
186
187         virtual void OnSectionTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
188
189         virtual void OnTableViewItemSwept(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewSweepDirection direction);
190
191         result Initalize(void);
192         result UpdateBounds(const Tizen::Graphics::Rectangle& rect);
193
194         void OnDraw(void);
195         int GetTopItemIndex(void);
196         bool IsItemChecked(int groupIndex, int subIndex) const;
197
198 public:
199         static _SlidableListImpl* GetInstance(SlidableList& slidableList);
200         static const _SlidableListImpl* GetInstance(const SlidableList& slidableList);
201
202 private:
203         _SlidableListImpl(const _SlidableListImpl& rhs);
204         _SlidableListImpl& operator =(const _SlidableListImpl& rhs);
205
206         void CallUnloadItemCb(int index);
207         void HandleItemStateChanged(int index, int elementId, ItemStatus itemStatus);
208         void HandleItemStateChanged(int index, ItemStatus itemStatus);
209         bool IsCheckedStyle(void);
210         const bool IsCheckedStyle(void) const;
211
212         result CreateItemProvider(void);
213
214         const char* GetPublicClassName(void) const;
215         const SlidableList& GetPublic(void) const;
216         SlidableList& GetPublic(void);
217         const _TableView& GetCore(void) const;
218         _TableView& GetCore(void);
219
220         Tizen::Base::Collection::ArrayList* __pCheckedList;
221         Tizen::Base::Collection::LinkedList __slidableListenersList;
222         Tizen::Base::Collection::LinkedList __itemListenersList;
223
224         int __totalItemCount;
225         int __topIndex;
226         _SlidableListItemProvider* __pItemProvider;
227         bool __isDirectDelete;
228         bool __isCreating;
229         int __itemCacheSize;
230         static const int LISTVIEW_MAX_ITEM_COUNT = 30;
231         static const int LISTVIEW_ITEM_HEIGHT = 100;
232         friend class _SlidableListItemProvider;
233         friend class _CustomListItemImpl;
234 }; //_SlidableListImpl
235 }}} //Tizen::Ui::Controls
236
237 #endif // _FUI_CTRL_SLIDABLE_LIST_IMPL_H_
238