Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_ListViewImpl.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_ListViewImpl.h
20  * @brief               This file defines the _ListViewImpl class.
21  * @version             3.0
22  *
23  * This file contains the declarations of _ListViewImpl class.
24  */
25
26 #ifndef _FUI_CTRL_INTERNAL_LIST_VIEW_IMPL_H_
27 #define _FUI_CTRL_INTERNAL_LIST_VIEW_IMPL_H_
28
29 #include <FUiCtrlListView.h>
30 #include "FUi_ControlImpl.h"
31 #include "FUi_TouchEventArg.h"
32 #include "FUiCtrl_IFastScrollListener.h"
33 #include "FUiCtrl_IScrollEventListener.h"
34 #include "FUiCtrl_IUiListViewItemEventListener.h"
35 #include "FUiCtrl_TableView.h"
36
37 namespace Tizen { namespace Ui { namespace Controls
38 {
39
40 class _FastScrollEvent;
41 class _Label;
42 class _ListItemEvent;
43 class _ListViewItem;
44 class _PublicLinkEvent;
45 class _ScrollEvent;
46
47 class _ListViewImpl
48         : public _ControlImpl
49         , public _IScrollEventListener
50         , public _ITableViewItemEventListener
51         , public _IUiFastScrollListener
52         , public _IUiListViewItemEventListener
53         , virtual public Tizen::Base::Runtime::IEventListener
54 {
55 public:
56         virtual ~_ListViewImpl(void);
57
58         static _ListViewImpl* CreateListViewImplN(ListView* pControl, bool itemDivider, bool fastScroll);
59
60         static _ListViewImpl* CreateListViewImplN(ListView* pControl, bool itemDivider, ListScrollStyle scrollStyle);
61
62         virtual const char* GetPublicClassName(void) const;
63
64         virtual const ListView& GetPublic(void) const;
65
66         virtual ListView& GetPublic(void);
67
68         virtual const _TableView& GetCore(void) const;
69
70         virtual _TableView& GetCore(void);
71
72         result SetItemProvider(IListViewItemProvider& provider);
73
74         void AddListViewItemEventListener(IListViewItemEventListener& listener);
75
76         void RemoveListViewItemEventListener(IListViewItemEventListener& listener);
77
78         void AddFastScrollListener(IFastScrollListener& listener);
79
80         void RemoveFastScrollListener(IFastScrollListener& listener);
81
82         void AddScrollEventListener(IScrollEventListener& listener);
83
84         void RemoveScrollEventListener(IScrollEventListener& listener);
85
86         void AddUiLinkEventListener(const Tizen::Ui::IUiLinkEventListener& listener);
87
88         void RemoveUiLinkEventListener(const Tizen::Ui::IUiLinkEventListener& listener);
89
90         result SetSweepEnabled(bool enable);
91
92         result SetFastScrollIndex(const Tizen::Base::String& text, bool useSearchIcon);
93
94         int GetTopDrawnItemIndex(void) const;
95
96         int GetBottomDrawnItemIndex(void) const;
97
98         result ScrollToItem(int index, ListScrollItemAlignment itemAlignment);
99
100         result SetItemChecked(int index, bool check);
101
102         bool IsItemChecked(int index) const;
103
104         result SetItemEnabled(int index, bool enable);
105
106         bool IsItemEnabled(int index) const;
107
108         int GetItemCount(void) const;
109
110         result ShowItemDescriptionText(int index);
111
112         result HideItemDescriptionText(int index);
113
114         result RefreshList(int index, ListRefreshType type);
115
116         result RefreshList(int index, int elementId);
117
118         result UpdateList(void);
119
120         int GetItemIndexFromPosition(const Tizen::Graphics::Point& position) const;
121
122         result GetItemIndexFromPosition(const Tizen::Graphics::Point& position, int& itemIndex, int& elementId) const;
123
124         result SetItemDividerColor(const Tizen::Graphics::Color& color);
125
126         Tizen::Graphics::Color GetItemDividerColor(void) const;
127
128         result SetBitmapOfEmptyList(const Tizen::Graphics::Bitmap* pBitmap);
129
130         result SetTextOfEmptyList(const Tizen::Base::String& text);
131
132         Tizen::Base::String GetTextOfEmptyList(void) const;
133
134         result SetTextColorOfEmptyList(const Tizen::Graphics::Color& color);
135
136         Tizen::Graphics::Color GetTextColorOfEmptyList(void) const;
137
138         result SetListBackgroundColor(const Tizen::Graphics::Color& color);
139
140         result SetBackgroundBitmap(const Tizen::Graphics::Bitmap* pBitmap);
141
142         result BeginReorderingMode(void);
143
144         result EndReorderingMode(void);
145
146         bool IsInReorderingMode(void) const;
147
148         virtual void OnListViewContextItemStateChanged(Tizen::Ui::_Control& source, int groupIndex, int itemIndex, int elementId,
149                         Tizen::Ui::Controls::ListContextItemStatus status);
150
151         virtual void OnListViewItemLongPressed(Tizen::Ui::_Control& source, int groupIndex, int itemIndex, int elementId);
152
153         // _ITableViewItemEventListener
154         virtual void OnTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex,
155                         Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status);
156
157         virtual void OnTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int itemIndex,
158                         Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated);
159
160         virtual void OnTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int itemIndexFrom, int itemIndexTo);
161
162         virtual void OnGroupedTableViewGroupItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex,
163                         Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status) {};
164
165         virtual void OnGroupedTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex,
166                         Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status) {};
167
168         virtual void OnGroupedTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int groupIndex,
169                         int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated) {};
170
171         virtual void OnGroupedTableViewItemReordered(Tizen::Ui::Controls::_TableView& tableView, int groupIndexFrom, int itemIndexFrom,
172                         int groupIndexTo, int itemIndexTo) {};
173
174         virtual void OnSectionTableViewItemStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex, int itemIndex,
175                         Tizen::Ui::Controls::_TableViewItem* pItem, Tizen::Ui::Controls::TableViewItemStatus status) {};
176
177         virtual void OnSectionTableViewContextItemActivationStateChanged(Tizen::Ui::Controls::_TableView& tableView, int sectionIndex,
178                         int itemIndex, Tizen::Ui::Controls::_TableViewItem* pContextItem, bool activated) {};
179
180         virtual void OnTableViewItemSwept(Tizen::Ui::Controls::_TableView& tableView, int groupIndex, int itemIndex,
181                         Tizen::Ui::Controls::TableViewSweepDirection direction);
182
183         // Event handler for _IScrollEventListener
184         virtual void OnScrollEndReached(Tizen::Ui::_Control& source, ScrollEndEvent type);
185
186         virtual void OnScrollPositionChanged(Tizen::Ui::_Control& source, int scrollPos);
187
188         virtual void OnScrollStopped(Tizen::Ui::_Control& source);
189
190         // Event handler for _IUiFastScrollListener
191         virtual void OnUiFastScrollIndexSelected(Tizen::Ui::_Control& source, Tizen::Ui::Controls::_FastScrollIndex& index);
192
193         virtual void OnDraw(void);
194
195         virtual void OnBoundsChanged(void);
196
197         virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
198
199         virtual void OnFontInfoRequested(unsigned long& style, int& size);
200
201         virtual bool OnTouchPressed(const _ControlImpl& source, const _TouchInfo& touchinfo);
202
203         virtual bool OnTouchReleased(const _ControlImpl& source, const _TouchInfo& touchinfo);
204
205         virtual bool OnTouchMoved(const _ControlImpl& source, const _TouchInfo& touchinfo);
206
207         virtual bool OnTouchCanceled(const _ControlImpl& source, const _TouchInfo& touchinfo);
208
209 public:
210         static _ListViewImpl* GetInstance(ListView& listView);
211
212         static const _ListViewImpl* GetInstance(const ListView& listView);
213
214 private:
215         _ListViewImpl(ListView* pList, _TableView* pCore);
216
217         _ListViewImpl(_ListViewImpl& rhs);
218
219         _ListViewImpl& operator =(_ListViewImpl& rhs);
220
221         result SetItemDescriptionTextShowState(int index, bool show);
222
223         void AdjustLayoutOfEmptyList(void);
224
225         void CheckEmptyListShowState(void);
226
227         void FirePublicTouchEvent(const _TouchInfo& touchInfo);
228
229         void FirePublicListener(ITouchEventListener& listener, const TouchEventInfo& touchEventInfo);
230
231         void FireFocusListener(ITouchEventListener& listener, const TouchEventInfo& touchEventInfo);
232
233         _TouchEventArg* GetTouchEventArgN(const _TouchInfo& touchInfo);
234
235 private:
236         _ListItemEvent* __pListItemEvent;
237         _PublicLinkEvent* __pLinkEvent;
238         _ScrollEvent* __pScrollEvent;
239         _FastScrollEvent* __pFastScrollEvent;
240
241         _Label* __pEmptyBitmap;
242         _Label* __pEmptyText;
243         Tizen::Graphics::Color __emptyTextColor;
244
245         bool __redrawListView;
246         _ListViewItem* __pItemNeedsLazyDeletion;
247         _ListViewItem* __pItemSwept;
248 }; // _ListViewImpl
249
250 }}} // Tizen::Ui::Controls
251
252 #endif  // _FUI_CTRL_INTERNAL_LIST_VIEW_IMPL_H_