Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_ExpandableListImpl.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_ExpandableListImpl.h
20  * @brief       This is the header file for the _ExpandableListImpl class.
21  *
22  * This header file contains the declarations of the _ExpandableListImpl class and its helper classes.
23  */
24
25 #ifndef _FUI_CTRL_INTERNAL_EXPANDABLELIST_IMPL_H_
26 #define _FUI_CTRL_INTERNAL_EXPANDABLELIST_IMPL_H_
27
28 #include <FUiCtrlCustomListItem.h>
29 #include "FUiCtrl_CustomListItemImpl.h"
30 #include <FUiCtrlTableView.h>
31 #include <FUiCtrlITableViewItemEventListener.h>
32 #include "FUiCtrl_TableViewItemProvider.h"
33 #include <FUiCtrlIGroupedTableViewItemProvider.h>
34 #include "FUiCtrl_TableView.h"
35 #include "FUiCtrl_ITableViewItemEventListener.h"
36 #include "FUiCtrl_ListBaseImpl.h"
37
38 namespace Tizen { namespace Ui { namespace Controls
39 {
40
41 class _ListView;
42 class _TableViewGroupItemData;
43 class _TableViewItemData;
44 class _CheckBoxElement;
45 class _ExpandableListImpl;
46
47 class _ExpandableListItemDataProvider
48         : public Tizen::Ui::Controls::IGroupedTableViewItemProvider
49 {
50 public:
51         _ExpandableListItemDataProvider(_ExpandableListImpl* pList);
52         virtual ~_ExpandableListItemDataProvider(void);
53
54         virtual int GetGroupCount(void);
55         virtual int GetItemCount(int groupIndex);
56         virtual Tizen::Ui::Controls::TableViewGroupItem* CreateGroupItem(int groupIndex, int itemWidth);
57         virtual Tizen::Ui::Controls::TableViewItem* CreateItem(int groupIndex, int itemIndex, int itemWidth);
58         virtual bool DeleteItem(int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewItem* pItem);
59         virtual bool DeleteGroupItem(int groupIndex, Tizen::Ui::Controls::TableViewGroupItem* pItem);
60         virtual bool IsReorderable(int groupIndexFrom, int groupIndexTo);
61
62         void UpdateGroupItem(int groupIndex, TableViewGroupItem *pItem);
63         void UpdateItem(int groupIndex, int itemIndex, TableViewItem *pItem);
64         int GetDefaultGroupItemHeight(void);
65         int GetDefaultItemHeight(void);
66
67 private:
68         _ExpandableListItemDataProvider(const _ExpandableListItemDataProvider& rhs);
69         _ExpandableListItemDataProvider& operator =(const _ExpandableListItemDataProvider& rhs);
70
71 private:
72         _ExpandableListImpl* __pListImpl;
73 }; //_ExpandableListItemDataProvider
74
75
76 class _ExpandableListImpl
77         : public _ListBaseImpl
78         , public _ITableViewItemEventListener
79         , virtual public Tizen::Base::Runtime::IEventListener
80 {
81 public:
82         virtual ~_ExpandableListImpl(void);
83         static _ExpandableListImpl* CreateExpandableListImplN(ExpandableList* pControl, const Tizen::Graphics::Rectangle& bounds, bool itemDivider);
84         virtual const char* GetPublicClassName(void) const;
85         virtual const ExpandableList& GetPublic(void) const;
86         virtual ExpandableList& GetPublic(void);
87         virtual const _TableView& GetCore(void) const;
88         virtual _TableView& GetCore(void);
89
90         //@See doxygen
91         result AddExpandableItemEventListener(const Tizen::Ui::IExpandableItemEventListener& listener);
92         //@See doxygen
93         result RemoveExpandableItemEventListener(const Tizen::Ui::IExpandableItemEventListener& listener);
94         //@See doxygen
95         result AddItem(const CustomListItem& item, int itemId);
96         //@See doxygen
97         result AddSubItem(int mainIndex, const CustomListItem& item, int itemId);
98         //@See doxygen
99         result InsertItemAt(int mainIndex, const CustomListItem& item, int itemId);
100         //@See doxygen
101         result SetItemAt(int mainIndex, const CustomListItem& item, int itemId);
102         //@See doxygen
103         result RemoveItemAt(int mainIndex);
104         //@See doxygen
105         result InsertSubItemAt(int mainIndex, int subIndex, const CustomListItem& item, int itemId);
106         //@See doxygen
107         result SetSubItemAt(int mainIndex, int subIndex, const CustomListItem& item, int itemId);
108         //@See doxygen
109         result RemoveSubItemAt(int mainIndex, int subIndex);
110         //@See doxygen
111         result RemoveAllSubItemsAt(int mainIndex);
112         //@See doxygen
113         const CustomListItem* GetSubItemAt(int mainIndex, int subIndex) const;
114         //@See doxygen
115         result RemoveAllItems(void);
116         //@See doxygen
117         int GetItemCount(void) const;
118         //@See doxygen
119         int GetSubItemCount(int mainIndex) const;
120         //@See doxygen
121         int GetFirstCheckedItemIndex(void) const;
122         //@See doxygen
123         int GetItemIdAt(int mainIndex) const;
124         //@See doxygen
125         int GetItemIndexFromItemId(int itemId) const;
126         //@See doxygen
127         int GetSubItemIdAt(int mainIndex, int subIndex) const;
128         //@See doxygen
129         result SetItemExpanded(int mainIndex, bool expand);
130         //@See doxygen
131         result SetItemEnabled(int mainIndex, bool enable);
132         //@See doxygen
133         bool IsItemEnabled(int mainIndex) const;
134         //@See doxygen
135         bool IsItemExpanded(int mainIndex) const;
136         //@See doxygen
137         result SetSubItemEnabled(int mainIndex, int subIndex, bool enable);
138         //@See doxygen
139         bool IsSubItemEnabled(int mainIndex, int subIndex) const;
140         //@See doxygen
141         result SetItemChecked(int mainIndex, bool check);
142         //@See doxygen
143         bool IsItemChecked(int mainIndex) const;
144         //@See doxygen
145         result SetSubItemChecked(int mainIndex, int subIndex, bool check);
146         //@See doxygen
147         bool IsSubItemChecked(int mainIndex, int subIndex) const;
148         //@See doxygen
149         result SetAllSubItemsChecked(int mainIndex, bool check);
150         //@See doxygen
151         result RemoveAllCheckedSubItemsAt(int mainIndex);
152         //@See doxygen
153         int GetFirstCheckedSubItemIndex(int mainIndex) const;
154         //@See doxygen
155         int GetLastCheckedItemIndex(void) const;
156         //@See doxygen
157         int GetLastCheckedSubItemIndex(int mainIndex) const;
158         //@See doxygen
159         int GetNextCheckedItemIndexAfter(int index) const;
160         //@See doxygen
161         int GetNextCheckedSubItemIndexAfter(int mainIndex, int subIndex) const;
162         //@See doxygen
163         result GetSubItemIndexFromItemId(int itemId, int& mainIndex, int& subIndex) const;
164         //@See doxygen
165         result ScrollToBottom(void);
166         //@See doxygen
167         result ScrollToTop(void);
168         //@See doxygen
169         result ScrollToTop(int mainIndex, int subIndex);
170         //@See doxygen
171         result ScrollToTop(int mainIndex);
172         //@See doxygen
173         void SetBgColor(const Tizen::Graphics::Color& color);
174         result RefreshItem(int index);
175         //@See doxygen
176         result RefreshSubItem(int mainIndex, int subIndex);
177
178         result Initialize(void);
179         result LoadArrowBitmap(void);
180         result UpdateBounds(const Tizen::Graphics::Rectangle& rect);
181         result SetItemChecked(int groupIndex, int itemIndex, bool check);
182         bool IsItemChecked(int groupIndex, int subIndex) const;
183
184         void OnTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
185         void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
186         void OnTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int itemIndexFrom, int itemIndexTo);
187         void OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
188         void OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
189         void OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
190         void OnGroupedTableViewItemReordered(_TableView& tableView, int groupIndexFrom, int itemIndexFrom, int groupIndexTo, int itemIndexTo);
191         void OnSectionTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
192         void OnSectionTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
193         void OnTableViewItemSwept(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex, Tizen::Ui::Controls::TableViewSweepDirection direction);
194
195         virtual void OnTouchPressed (const Tizen::Ui::Control &source, const Tizen::Graphics::Point &currentPosition, const Tizen::Ui::TouchEventInfo &touchInfo);
196         int GetCheckedItemCount(int mainIndex);
197
198         static _ExpandableListImpl* GetInstance(ExpandableList& expandableList);
199         static const _ExpandableListImpl* GetInstance(const ExpandableList& expandableList);
200
201         void OnDraw(void);
202
203         static void DeleteExpandStateFlag(Tizen::Base::Object* pObj);
204
205 private:
206         _ExpandableListImpl(Control* pPublic, _TableView* pCore);
207         _ExpandableListImpl(const _ExpandableListImpl& rhs);
208         _ExpandableListImpl& operator =(const _ExpandableListImpl& rhs);
209         result AddSubItem(int mainIndex, _TableViewItemData* pCustomItemData);
210         virtual void ProcessItemStateChange(int groupIndex, int itemIndex, int elementId, ItemStatus itemStatus);
211         virtual void ProcessItemStateChange(int groupIndex,int itemIndex, ItemStatus itemStatus);
212
213         int GetCheckedItemCountAt(int mainIndex) const;
214         result SetSubItemCheckedMarkOnOff(int mainIndex, int subIndex, bool check);
215         result SetSubItemCheckedRadio(int mainIndex, int subIndex, bool check);
216
217         result CreateArrowIcon(int groupIndex);
218
219 private:
220         Tizen::Graphics::Bitmap* __pOpenedImage;
221         Tizen::Graphics::Bitmap* __pClosedImage;
222         friend class _ExpandableListItemDataProvider;
223         _ExpandableListItemDataProvider* __pItemProvider;
224         Tizen::Base::Collection::LinkedList __itemListenersList;
225         Tizen::Graphics::Color __subItemBgColor;
226         bool __directDelete;
227         Tizen::Base::Collection::ArrayList __groupExpandStateList;
228
229         static const int _EXPANDABLE_ICON_ID = Tizen::Base::Integer::VALUE_MAX;
230 }; //_ExpandableListImpl
231
232 }}} //Tizen::Ui::Controls
233
234
235 #endif //_FUI_CTRL_INTERNAL_EXPANDABLELIST_IMPL_H_