Tizen 2.1 base
[platform/framework/native/uifw.git] / src / ui / inc / FUiCtrl_GroupedListImpl.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_GroupedListImpl.h
20  * @brief       This is the header file for the _GroupedListImpl class.
21  *
22  * This header file contains the declarations of the _GroupedListImpl class and its helper classes.
23  */
24
25 #ifndef _FUI_CTRL_INTERNAL_GROUPED_LIST_IMPL_H_
26 #define _FUI_CTRL_INTERNAL_GROUPED_LIST_IMPL_H_
27
28 #include <FUiControls.h>
29 #include <FUiCtrlIGroupedListViewItemEventListener.h>
30 #include <FUiCtrlITableViewItemEventListener.h>
31 #include <FUiCtrlIFastScrollListener.h>
32 #include <FUiCtrlIGroupedTableViewItemProvider.h>
33 #include "FUiCtrl_CustomListImpl.h"
34 #include "FUiCtrl_TableView.h"
35 #include "FUi_ControlImpl.h"
36 #include "FUiCtrl_ListBaseImpl.h"
37 #include "FUiCtrl_IFastScrollListener.h"
38 #include "FUiCtrl_CustomListItemImpl.h"
39
40 namespace Tizen { namespace Ui { namespace Controls
41 {
42
43 class _GroupedListItemDataProvider
44         : public Tizen::Ui::Controls::IGroupedTableViewItemProvider
45 {
46 public:
47         _GroupedListItemDataProvider(class _GroupedListImpl* pGroupedListImpl);
48         virtual ~_GroupedListItemDataProvider(void);
49
50         int GetGroupCount(void);
51         int GetItemCount(int groupIndex);
52         Tizen::Ui::Controls::TableViewGroupItem* CreateGroupItem(int groupIndex, int itemWidth);
53         Tizen::Ui::Controls::TableViewItem* CreateItem(int groupIndex, int itemIndex, int itemWidth);
54         bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
55         bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem);
56         bool IsReorderable(int groupIndexFrom, int groupIndexTo);
57
58         void UpdateGroupItem(int groupIndex, TableViewGroupItem* pItem);
59         void UpdateItem(int groupIndex, int itemIndex, TableViewItem* pItem);
60         int GetDefaultGroupItemHeight(void);
61         int GetDefaultItemHeight(void);
62
63 private:
64         _GroupedListItemDataProvider(const _GroupedListItemDataProvider& rhs);
65         _GroupedListItemDataProvider& operator =(const _GroupedListItemDataProvider& rhs);
66
67 private:
68         _GroupedListImpl* __pList;
69 };  //_GroupedListItemDataProvider
70
71 class _GroupedListImpl
72         : public _ListBaseImpl
73         , public _ITableViewItemEventListener
74         , public _IUiFastScrollListener
75         , virtual public Tizen::Base::Runtime::IEventListener
76 {
77 public:
78         virtual ~_GroupedListImpl(void);
79         static _GroupedListImpl* CreateGroupedListImplN(GroupedList* pControl, const Tizen::Graphics::Rectangle& bounds, bool itemDivider = true, bool fastScroll = false);
80         virtual const char* GetPublicClassName(void) const;
81         virtual const GroupedList& GetPublic(void) const;
82         virtual GroupedList& GetPublic(void);
83         virtual const _TableView& GetCore(void) const;
84         virtual _TableView& GetCore(void);
85         result Initialize(void);
86         //@See doxygen
87         result AddFastScrollEventListener(const Tizen::Ui::IFastScrollEventListener& listener);
88         //@See doxygen
89         result RemoveFastScrollEventListener(const Tizen::Ui::IFastScrollEventListener& listener);
90         //@See doxygen
91         result AddGroupedItemEventListener(const Tizen::Ui::IGroupedItemEventListener& listener);
92         //@See doxygen
93         result RemoveGroupedItemEventListener(const Tizen::Ui::IGroupedItemEventListener& listener);
94         result SetItemProvider(void);
95         //@See doxygen
96         result AddGroup(const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBackgroundBitmap, int groupId = LIST_ITEM_UNSPECIFIED_ID);
97         //@See doxygen
98         result AddItem(int groupIndex, const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
99         //@See doxygen
100         result SetItemAt(int groupIndex, int itemIndex, const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
101         //@See doxygen
102         result InsertGroupAt(int groupIndex, const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBackgroundBitmap, int groupId = LIST_ITEM_UNSPECIFIED_ID);
103         //@See doxygen
104         result SetGroupAt(int groupIndex, const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBackgroundBitmap, int groupId = LIST_ITEM_UNSPECIFIED_ID);
105         //@See doxygen
106         result InsertItemAt(int groupIndex, int itemIndex, const CustomListItem& item, int itemId = LIST_ITEM_UNSPECIFIED_ID);
107         //@See doxygen
108         result RemoveItemAt(int groupIndex, int itemIndex);
109         //@See doxygen
110         result RemoveAllItemsAt(int groupIndex);
111         //@See doxygen
112         result RemoveGroupAt(int groupIndex);
113         //@See doxygen
114         result RemoveAllGroups(void);
115         //@See doxygen
116         result RemoveAllItems(void);
117         //@See doxygen
118         result SetItemEnabled(int groupIndex, int itemIndex, bool enable);
119         //@See doxygen
120         bool IsItemEnabled(int groupIndex, int itemIndex) const;
121         //@See doxygen
122         result SetItemChecked(int groupIndex, int itemIndex, bool check);
123         //@See doxygen
124         bool IsItemChecked(int groupIndex, int itemIndex) const;
125         //@See doxygen
126         result SetAllItemsChecked(int groupIndex, bool check);
127         //@See doxygen
128         result RemoveAllCheckedItems(void);
129         //@See doxygen
130         result RemoveAllCheckedItemsAt(int groupIndex);
131         //@See doxygen
132         result GetFirstCheckedItemIndex(int& groupIndex, int& itemIndex) const;
133         //@See doxygen
134         result GetLastCheckedItemIndex(int& groupIndex, int& itemIndex) const;
135         //@See doxygen
136         result GetNextCheckedItemIndexAfter(int& groupIndex, int& itemIndex) const;
137         //@See doxygen
138         int GetGroupIndexFromGroupId(int groupId) const;
139         //@See doxygen
140         result GetItemIndexFromItemId(int itemId, int& groupIndex, int& itemIndex) const;
141         //@See doxygen
142         result SetFastScrollMainIndex(const Tizen::Base::String& text);
143         //@See doxygen
144         result SetFastScrollSubIndex(const Tizen::Base::String& text, FastScrollIndexDigit indexDigit);
145         //@See doxygen
146         void ScrollToBottom(void);
147         //@See doxygen
148         void ScrollToTop(void);
149         //@See doxygen
150         result ScrollToTop(int groupIndex, int itemIndex);
151         //@See doxygen
152         result ScrollToTop(int groupIndex);
153         //@See doxygen
154         result RefreshGroup(int groupIndex);
155         //@See doxygen
156         result RefreshItem(int groupIndex, int itemIndex);
157         //@See doxygen
158         int GetGroupIdAt(int groupIndex) const;
159         //@See doxygen
160         int GetItemIdAt(int groupIndex, int itemIndex) const;
161
162         void SetListBackgroundColor(const Tizen::Graphics::Color& bgColor);
163
164         void OnTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
165         void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
166         void OnTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int itemIndexFrom, int itemIndexTo);
167         void OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
168         void OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
169         void OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
170         void OnGroupedTableViewItemReordered(_TableView& tableView, int groupIndexFrom, int itemIndexFrom, int groupIndexTo, int itemIndexTo);
171         void OnSectionTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
172         void OnSectionTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
173         void OnTableViewItemSwept(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewSweepDirection direction);
174
175         virtual void OnUiFastScrollIndexSelected(Tizen::Ui::_Control& source, Tizen::Ui::Controls::_FastScrollIndex& index);
176         virtual void OnBoundsChanged(void);
177
178 public:
179         static _GroupedListImpl* GetInstance(GroupedList& groupedList);
180         static const _GroupedListImpl* GetInstance(const GroupedList& groupedList);
181
182 private:
183         _GroupedListImpl(Control* pPublic, _TableView* pCore);
184         _GroupedListImpl(const _GroupedListImpl& rhs);
185         _GroupedListImpl& operator =(const _GroupedListImpl& rhs);
186         virtual void ProcessItemStateChange(int groupIndex, int itemIndex, ItemStatus itemStatus);
187         virtual void ProcessItemStateChange(int groupIndex, int itemIndex, int elementId, ItemStatus itemStatus);
188
189         _GroupedListItemDataProvider* __pItemProvider;
190         Tizen::Ui::IGroupedItemEventListener* __pItemListener;
191         Tizen::Base::String __mainIndexText;
192         int __groupItemHeight;
193         int __groupItemTextFont;
194         Tizen::Base::Collection::LinkedList __itemListenersList;
195         Tizen::Base::Collection::LinkedList __fastScrollListenersList;
196         Tizen::Graphics::Color __bgColor;
197         bool __directDelete;
198         CustomListItemFormat* __pItemFormat;
199
200         friend class _GroupedListItemDataProvider;
201 }; //_GroupedListImpl
202
203 }}} // Tizen::Ui::Controls
204
205
206 #endif //_FUI_CTRL_INTERNAL_GROUPED_LIST_IMPL_H_