2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
20 * @file FUiCtrl_SlidableGroupedListImpl.h
21 * @brief This is the header file for _SlidableGroupedListImpl class.
24 #ifndef _FUI_CTRL_SLIDABLE_GROUPED_LIST_IMPL_H_
25 #define _FUI_CTRL_SLIDABLE_GROUPED_LIST_IMPL_H_
27 #include <FUiISlidableGroupedListEventListener.h>
28 #include <FUiCtrlITableViewItemEventListener.h>
29 #include <FUiCtrlIFastScrollListener.h>
30 #include <FUiCtrlIGroupedTableViewItemProvider.h>
32 #include "FUi_ControlImpl.h"
33 #include "FUiCtrl_TableViewItemProvider.h"
34 #include "FUiCtrl_ITableViewItemEventListener.h"
35 #include "FUiCtrl_TableView.h"
36 #include "FUiCtrl_ListBaseImpl.h"
37 #include "FUiCtrl_IFastScrollListener.h"
38 #include "FUiCtrl_CustomListItemImpl.h"
40 namespace Tizen { namespace Ui { namespace Controls
43 class _SlidableGroupedListItemProvider
44 : public IGroupedTableViewItemProvider
48 _SlidableGroupedListItemProvider(class _SlidableGroupedListImpl* pList);
49 virtual ~_SlidableGroupedListItemProvider(void){}
52 int GetGroupCount(void);
53 int GetItemCount(int groupIndex);
54 TableViewGroupItem* CreateGroupItem(int groupIndex, int itemWidth);
55 TableViewItem* CreateItem(int groupIndex, int itemIndex, int itemWidth);
56 bool DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem);
57 bool DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem);
58 bool IsReorderable(int groupIndexFrom, int groupIndexTo);
60 void UpdateGroupItem(int groupIndex, TableViewGroupItem* pItem);
61 void UpdateItem(int groupIndex, int itemIndex, TableViewItem* pItem);
62 int GetDefaultGroupItemHeight(void);
63 int GetDefaultItemHeight(void);
65 result UpdateCheckStatus(int groupIndex, int itemIndex);
66 result CallLoadToTopCb(int groupIndex, int itemIndex);
67 result ModifyIndicesAfterTopLoad();
68 _TableViewItemData* LoadAtTop(int groupIndex, int itemIndex);
69 result CallLoadToBottomCb(int groupIndex, int itemIndex);
70 result ModifyIndicesAfterBottomLoad(int groupIndex, int itemIndex);
71 _TableViewItemData* LoadAtBottom(int groupIndex, int itemIndex);
75 _SlidableGroupedListItemProvider(const _SlidableGroupedListItemProvider& rhs);
76 _SlidableGroupedListItemProvider& operator =(const _SlidableGroupedListItemProvider& rhs);
79 _SlidableGroupedListImpl* __pListImpl;
80 int __bottomListenerIndex;
81 int __topListenerIndex;
82 }; //_SlidableGroupedListItemProvider
84 class _SlidableGroupObject
85 : public Tizen::Base::Object
89 _SlidableGroupObject(void);
90 ~_SlidableGroupObject(void);
93 _SlidableGroupObject(const _SlidableGroupObject& rhs);
94 _SlidableGroupObject& operator =(const _SlidableGroupObject& rhs);
100 Tizen::Base::Collection::ArrayList* __pCheckedList;
102 friend class _SlidableGroupedListImpl;
103 friend class _SlidableGroupedListItemProvider;
105 }; //_SlidableGroupObject
107 class _SlidableGroupedListImpl
108 : public _ITableViewItemEventListener
109 , public _IUiFastScrollListener
110 , public _ListBaseImpl
113 _SlidableGroupedListImpl(Control* pList, _TableView* pCore);
114 ~_SlidableGroupedListImpl(void);
115 static _SlidableGroupedListImpl* CreateSlidableGroupedListImplN(SlidableGroupedList* pControl, const Tizen::Graphics::Rectangle& bounds, bool itemDivider, bool fastScroll);
118 void AddSlidableGroupedListEventListener(Tizen::Ui::ISlidableGroupedListEventListener& listener);
120 void RemoveSlidableGroupedListEventListener(Tizen::Ui::ISlidableGroupedListEventListener& listener);
122 void AddFastScrollEventListener(Tizen::Ui::IFastScrollEventListener& listener);
124 result AddGroup(const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBackgroundBitmap, int itemCount, int groupHeight, int groupId);
126 void AddGroupedItemEventListener(Tizen::Ui::IGroupedItemEventListener& listener);
128 result AddItem(int groupIndex, const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
130 result GetBottomDrawnItemIndex(int& groupIndex, int& itemIndex) const;
132 result GetFirstCheckedItemIndex(int& groupIndex, int& itemIndex) const;
134 int GetGroupIdAt(int groupIndex) const;
136 int GetGroupIndexFromGroupId(int groupId) const;
138 result GetFirstLoadedItemIndex(int& groupIndex, int& itemIndex) const;
140 result GetLastLoadedItemIndex(int& groupIndex, int& itemIndex) const;
142 result SetFastScrollMainIndex(const Tizen::Base::String& text);
144 result GetItemIndexFromPosition(int x, int y, int& groupIndex, int& itemIndex) const;
146 result GetItemIndexFromPosition(const Tizen::Graphics::Point& position, int& groupIndex, int& itemIndex) const;
148 result InsertGroupAt(int groupIndex, const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBackgroundBitmap, int itemCount, int groupHeight, int groupId);
150 result GetLastCheckedItemIndex(int& groupIndex, int& itemIndex) const;
152 const CustomListItem* GetLoadedItemAt(int groupIndex, int index) const;
154 int GetLoadedItemIdAt(int groupIndex, int index) const;
156 result GetNextCheckedItemIndexAfter(int& groupIndex, int& index) const;
158 result GetTopDrawnItemIndex(int& groupIndex, int& itemIndex) const;
160 bool IsItemChecked(int groupIndex, int index) const;
162 bool IsItemEnabled(int index) const;
164 bool IsItemLoaded(int groupIndex, int itemIndex) const;
166 result RemoveAllGroups(void);
168 result InsertItemAt(int groupIndex, int index, const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
170 int GetItemCountAt(int groupIndex) const;
172 result RefreshItem(int groupIndex, int index);
174 result RefreshGroup(int groupIndex);
176 bool IsLoadedItemEnabled(int groupIndex, int index) const;
178 result LoadItemToTop(const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
180 result LoadItemToBottom(const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
182 result GetLoadedItemIndexFromItemId(int itemId, int& groupIndex, int& itemIndex) const;
184 result UnloadAllItems(void);
186 result RemoveAllCheckedItemsAt(int groupIndex, int itemHeight);
188 result RemoveAllCheckedItems(int itemHeight);
190 result RemoveAllItemsAt(int groupIndex);
192 result RemoveAllItems(void);
194 void RemoveFastScrollEventListener(IFastScrollEventListener& listener);
196 void RemoveGroupedItemEventListener(IGroupedItemEventListener& listener);
198 result RemoveItemAt(int groupIndex, int index, int itemHeight);
200 result RemoveGroupAt(int groupIndex);
202 void ScrollToBottom(void);
204 result ScrollToTop(int index);
206 result ScrollToTop(int groupIndex, int itemIndex);
208 void ScrollToTop(void);
210 result SetAllItemsChecked(int groupIndex, bool check);
212 result SetItemAt(int groupIndex, int itemIndex, const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
214 result SetItemChecked(int groupIndex, int index, bool check);
216 result SetItemEnabled(int index, bool enable);
218 result SetLoadedItemEnabled(int groupIndex, int index, bool enable);
220 result SetGroupAt(int groupIndex, const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBackgroundBitmap, int groupId);
222 void OnTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
223 void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
224 void OnTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int itemIndexFrom, int itemIndexTo);
225 void OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
226 void OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
227 void OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
228 void OnGroupedTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int groupIndexFrom, int itemIndexFrom, int groupIndexTo, int itemIndexTo);
229 void OnSectionTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
230 void OnSectionTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
231 void OnTableViewItemSwept(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewSweepDirection direction);
233 void OnUiFastScrollIndexSelected(Tizen::Ui::_Control& source, Tizen::Ui::Controls::_FastScrollIndex& index);
237 void Initialize(void);
238 int GetTopItemIndex(int groupIndex) const;
241 static _SlidableGroupedListImpl* GetInstance(SlidableGroupedList& slidableGroupedList);
242 static const _SlidableGroupedListImpl* GetInstance(const SlidableGroupedList& slidableGroupedList);
245 _SlidableGroupedListImpl(const _SlidableGroupedListImpl& rhs);
246 _SlidableGroupedListImpl& operator =(const _SlidableGroupedListImpl& rhs);
248 const char* GetPublicClassName(void) const;
249 const SlidableGroupedList& GetPublic(void) const;
250 SlidableGroupedList& GetPublic(void);
251 const _TableView& GetCore(void) const;
252 _TableView& GetCore(void);
254 void ProcessItemStateChange(int groupIndex, int index, int elementId, ItemStatus itemStatus);
255 void ProcessItemStateChange(int groupIndex, int index, ItemStatus itemStatus);
257 void CallUnloadItemCb(int groupIndex, int itemIndex);
259 int GetCurrentLoadedCount(void);
260 result CreateItemProvider(void);
261 CustomListItem* CreateGroupItemN(const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBackgroundBitmap, int groupId);
263 bool IsCheckedStyle(void);
264 const bool IsCheckedStyle(void) const;
266 result CreateGroupObject(int groupIndex, int itemCount, int groupHeight);
267 result UpdateCheckedList(int groupIndex, int index, bool check);
269 result SetItemCheckedMarkOnOff(int groupIndex, int index, bool check);
270 result SetItemCheckedRadio(int groupIndex, int index, bool check);
272 Tizen::Base::Collection::LinkedList __groupsList;
273 Tizen::Ui::IFastScrollEventListener* __pFastScrollListener;
274 Tizen::Base::String __mainScrollIndex;
275 Tizen::Base::String __subScrollIndex;
281 _SlidableGroupedListItemProvider* __pItemProvider;
282 Tizen::Base::Collection::LinkedList __slidableListenersList;
283 Tizen::Base::Collection::LinkedList __itemListenersList;
287 int __groupItemTextFont;
288 int __groupItemHeight;
290 CustomListItemFormat* __pItemFormat;
292 friend class _SlidableGroupedListItemProvider;
293 }; //_SlidableGroupedListImpl
295 }}} //Tizen::Ui::Controls
297 #endif // _FUI_CTRL_SLIDABLE_GROUPED_LIST_IMPL_H_