Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_CustomListItemImpl.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  * @file        FUiCtrl_CustomListItemImpl.h
19  * @brief       This is the header file for the _CustomListItemImpl class.
20  *
21  * This header file contains the declarations of the _CustomListItemImpl class and its helper classes.
22  */
23
24 #ifndef _FUI_CTRL_INTERNAL_CUSTOM_LIST_ITEM_IMPL_H_
25 #define _FUI_CTRL_INTERNAL_CUSTOM_LIST_ITEM_IMPL_H_
26
27 #include <FBaseString.h>
28 #include <FGrpBitmap.h>
29 #include <FBaseObject.h>
30 #include <FGrpRectangle.h>
31 #include <FGrpCanvas.h>
32 #include <FUiCtrlICustomElement.h>
33 #include "FUiCtrl_CustomListElements.h"
34
35
36 namespace Tizen { namespace Ui { namespace Controls
37 {
38
39 extern const int INVALID_INDEX;
40
41 struct _TableViewItemParams
42 {
43         CustomListItem* pItem;
44         int width;
45         int groupIndex;
46         int itemIndex;
47         int itemId;
48         bool isDividerEnabled;
49         Tizen::Graphics::Bitmap** pCheckBitmaps;
50         TableViewAnnexStyle annexStyle;
51 }; // _TableViewItemParams
52
53 struct _TableViewItemUpdateParams
54 {
55         CustomListItem* pItem;
56         bool isDividerEnabled;
57         Tizen::Graphics::Bitmap** pCheckBitmaps;
58         TableViewAnnexStyle annexStyle;
59 }; // _TableViewItemUpdateParams
60
61 class _ITableViewBaseItemData
62 {
63 public:
64         virtual ~_ITableViewBaseItemData(void) {}
65
66         virtual void GetIndex(int& mainIndex, int& subIndex) const = 0;
67 }; //_ITableViewBaseItemData
68
69 class _TableViewItemData
70         : public TableViewItem
71         , public _ITableViewBaseItemData
72 {
73 public:
74         _TableViewItemData(void);
75         ~_TableViewItemData(void);
76
77         result SetEnabled(bool enable);
78
79         void GetIndex(int& mainIndex, int& subIndex) const;
80
81 private:
82         _TableViewItemData(const _TableViewItemData& rhs);
83         _TableViewItemData& operator =(const _TableViewItemData& rhs);
84
85 public:
86         int itemIndex;
87         int groupIndex;
88 }; //_TableViewItemData
89
90 class _TableViewGroupItemData
91         : public TableViewGroupItem
92         , public _ITableViewBaseItemData
93 {
94
95 public:
96         _TableViewGroupItemData();
97         ~_TableViewGroupItemData();
98
99         result SetEnabled(bool enable);
100
101         void GetIndex(int& mainIndex, int& subIndex) const;
102
103 private:
104         _TableViewGroupItemData(const _TableViewGroupItemData& rhs);
105         _TableViewGroupItemData& operator =(const _TableViewGroupItemData& rhs);
106
107 public:
108         int groupIndex;
109 }; // _TableViewGroupItemData
110
111 class _CustomListItemImpl
112         : public Tizen::Base::Object
113         , public Tizen::Ui::ITouchEventListener
114         , public Tizen::Base::Runtime::ITimerEventListener
115 {
116
117 public:
118         virtual ~_CustomListItemImpl(void);
119         static _CustomListItemImpl* CreateInstanceN(int itemHeight);
120         void Initialize(int itemHeight);
121         int GetValue(void) const;
122         result SetCheckBox(int elementId);
123         result SetElement(int elementId, const Tizen::Graphics::Bitmap& normalBitmap, const Tizen::Graphics::Bitmap* pFocusedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
124         result SetElement(int elementId, const Tizen::Base::String& text);
125         result SetElement(int elementId, const Tizen::Graphics::Bitmap& normalBitmap, const Tizen::Graphics::Bitmap* pFocusedBitmap);
126         result SetElement(int elementId, const ICustomListElement& element);
127         void SetFocusedItemBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
128         void SetNormalItemBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
129         void SetHighlightedItemBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
130         void UpdateBitmaps(void);
131         result SetValue(int value);
132         _CheckElementModel* GetCheckElement(void);
133
134         result SetTextSliding(int elementId, bool enable);
135         void StartSliding(void);
136         void StopSliding(void);
137
138         // Timer Callback API
139         void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
140
141         static result SetDividerRequired(Tizen::Base::Collection::LinkedList& elementFormatList, Tizen::Graphics::Rectangle& checkElementBounds, bool& leftDivider, bool& rightDivider);
142         static result CreateTableViewItem(_TableViewItemParams& tableViewItemParams);
143         static TableViewItemBase* CreateTableViewItemN(_TableViewItemParams& tableViewItemParams);
144         static TableViewItemBase* CreateTableViewGroupItemN(_TableViewItemParams& tableViewItemParams);
145         static result UpdateTableViewItem(_TableViewItemUpdateParams& updateItemParams);
146
147         result SetElementData(_ElementBaseModel* pElement);
148         void SetBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap, TableViewItemDrawingStatus status);
149         _ElementBaseView* GetViewById(int elementId) const;
150
151         virtual void OnTouchDoublePressed (const Tizen::Ui::Control &source, const Tizen::Graphics::Point &currentPosition, const Tizen::Ui::TouchEventInfo &touchInfo);
152         virtual void OnTouchFocusIn (const Tizen::Ui::Control &source, const Tizen::Graphics::Point &currentPosition, const Tizen::Ui::TouchEventInfo &touchInfo);
153         virtual void OnTouchFocusOut (const Tizen::Ui::Control &source, const Tizen::Graphics::Point &currentPosition, const Tizen::Ui::TouchEventInfo &touchInfo);
154         virtual void OnTouchLongPressed (const Tizen::Ui::Control &source, const Tizen::Graphics::Point &currentPosition, const Tizen::Ui::TouchEventInfo &touchInfo);
155         virtual void OnTouchMoved (const Tizen::Ui::Control &source, const Tizen::Graphics::Point &currentPosition, const Tizen::Ui::TouchEventInfo &touchInfo);
156         virtual void OnTouchPressed (const Tizen::Ui::Control &source, const Tizen::Graphics::Point &currentPosition, const Tizen::Ui::TouchEventInfo &touchInfo);
157         virtual void OnTouchReleased (const Tizen::Ui::Control &source, const Tizen::Graphics::Point &currentPosition, const Tizen::Ui::TouchEventInfo &touchInfo);
158
159         static _CustomListItemFormatImpl* GetFormatImpl(CustomListItem* pItem);
160         static _CustomListItemImpl* GetItemImpl(CustomListItem* pItem);
161
162         static void DeleteCustomListItem(Tizen::Base::Object* pObj);
163         static _ListBaseImpl* GetListBaseImplFromElement(const Control& element);
164
165 private:
166         _CustomListItemImpl(int itemHeight);
167         _CustomListItemImpl(const _CustomListItemImpl& rhs);
168         _CustomListItemImpl& operator =(const _CustomListItemImpl& rhs);
169
170         _ElementBaseModel* GetElementModelById(int elementId) const;
171         _ElementBaseView* GetElementViewById(int elementId) const;
172         void RemoveElement(int elementId);
173
174         void UpdateItemBackground(const Control& element, bool isDividerEnabled);
175         void UpdateElements(const Control &source, int elementId, bool isPressed, bool isDividerEnabled);
176         bool IsElementEventEnabled(const Control& source);
177         CustomListItem* GetItemFromElement(const Control& source) const;
178         void GetIndexFromElement(const Control& source, int& groupIndex, int& itemIndex) const;
179
180         bool IsElementIdValid(Tizen::Base::Collection::LinkedList* pElementFormat, int elementId) const;
181
182         void StartTextSlideTimer(void);
183         void StopTextSlideTimer(void);
184 public:
185         int height;
186         int itemId;
187         Tizen::Base::Collection::LinkedList elements;
188
189 private:
190         static const int TEXT_SLIDING_TIMER_DURATION = 60;
191
192         int __percentValue;
193         _TableViewItemData* __pTableViewItemData;
194         _TableViewGroupItemData* __pTableViewGroupItemData;
195         Tizen::Base::Collection::ArrayList* __pSubItemsList;
196         Tizen::Base::Runtime::Timer* __pTextSlideTimer;
197         Tizen::Graphics::Bitmap* __pBitmaps[CUSTOM_LIST_ITEM_STATUS_FOCUSED + 1];
198         bool __isMoved;
199
200         friend class _CustomListImpl;
201         friend class _ExpandableListImpl;
202         friend class _ListImpl;
203         friend class _SlidableListImpl;
204         friend class _GroupedListImpl;
205         friend class _SlidableGroupedListImpl;
206         friend class _ListBaseImpl;
207
208         friend class _GroupedListItemDataProvider;
209         friend class _CustomListItemDataProvider;
210         friend class _ExpandableListItemDataProvider;
211         friend class _SlidableListItemProvider;
212         friend class _SlidableGroupedListItemProvider;
213         friend class _ListItemDataProvider;
214 }; //_CustomListItemImpl
215
216 }}} //Tizen::Ui::Controls
217
218 #endif //_FUI_CTRL_INTERNAL_CUSTOM_LIST_ITEM_IMPL_H_