Tizen 2.1 base
[framework/osp/uifw.git] / src / ui / inc / FUiCtrl_ListViewItem.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_ListViewItem.h
20  * @brief       This is the header file for the _ListViewItem class.
21  *
22  * This header file contains the declarations of the _ListViewItem class.
23  */
24
25 #ifndef _FUI_CTRL_INTERNAL_LIST_VIEW_ITEM_H_
26 #define _FUI_CTRL_INTERNAL_LIST_VIEW_ITEM_H_
27
28 #include <FUiAnimVisualElementContentProvider.h>
29 #include <FGrp_TextTextObject.h>
30 #include "FUiCtrl_IActionEventListener.h"
31 #include "FUiCtrl_ICustomElement.h"
32 #include "FUiCtrl_LinkedList.h"
33 #include "FUiCtrl_TableViewItem.h"
34
35 namespace Tizen { namespace Ui
36 {
37 class _AccessibilityElement;
38 class _ITouchLongPressGestureEventListener;
39 class _TouchLongPressGestureDetector;
40 }}
41
42 namespace Tizen { namespace Ui { namespace Controls
43 {
44
45 class _Label;
46 class _ListViewContextItem;
47 class _Progress;
48
49 enum ListViewItemElementType
50 {
51         LISTVIEW_ITEM_ELEMENT_TEXT = 0,
52         LISTVIEW_ITEM_ELEMENT_BITMAP,
53         LISTVIEW_ITEM_ELEMENT_OBJ,
54         LISTVIEW_ITEM_ELEMENT_INVALID
55 };
56
57 enum ListViewItemSelectionType
58 {
59         LISTVIEW_ITEM_SELECTED = 0,
60         LISTVIEW_ITEM_ELEMENT_SELECTED,
61         LISTVIEW_ITEM_UILINK_SELECTED
62 };
63
64 struct _ListViewItemUiLinkInfo
65 {
66         Tizen::Base::String textInfo;
67         Tizen::Base::Utility::LinkType linkType;
68         Tizen::Base::String linkInfo;
69 };
70
71 struct _ListViewItemStateChangedInfo
72 {
73         ListViewItemSelectionType selectionType;
74         int elementId;
75         _ListViewItemUiLinkInfo* pUiLinkInfo;
76 };
77
78 struct _ListViewItemElementText
79 {
80         Tizen::Ui::_AccessibilityElement* pAccessibilityElement;
81         Tizen::Ui::Animations::_VisualElement* pVE;
82         Tizen::Graphics::_Text::TextObject* pTextObject;
83         Tizen::Graphics::_EnrichedTextImpl* pEnrichedText;
84         Tizen::Graphics::Color textColor[LISTVIEW_ITEM_STATUS_MAX];
85         int textSize;
86         bool cutlinkViewModeEnabled;
87         bool cutlinkParseEnabled;
88         unsigned long cutlinkMaskType;
89         bool textSlidingEnabled;
90 };
91
92 struct _ListViewItemElementBitmap
93 {
94         Tizen::Ui::Animations::_VisualElement* pVE;
95         Tizen::Graphics::Bitmap* pBitmap[LISTVIEW_ITEM_STATUS_MAX];
96 };
97
98 struct _ListViewItemElementCustom
99 {
100         Tizen::Ui::Animations::_VisualElement* pVE;
101         _ICustomElement* pCustom;
102 };
103
104 struct _ListViewItemElement
105 {
106         int elementId;
107         bool actionElement;
108         bool selectionEnabled;
109         ListViewItemElementType elementType;
110         _ListViewItemElementText* pTextElement;
111         _ListViewItemElementBitmap* pBitmapElement;
112         _ListViewItemElementCustom* pCustomElement;
113         Tizen::Graphics::Rectangle bounds;
114 };
115
116 class _ListViewItemHitTestVEDelegator
117         : public Tizen::Ui::Animations::VisualElementContentProvider
118 {
119 public:
120         _ListViewItemHitTestVEDelegator(void);
121
122         virtual ~_ListViewItemHitTestVEDelegator(void);
123
124         virtual Tizen::Ui::Animations::HitTestResult HitTest(Tizen::Ui::Animations::VisualElement& target, const Tizen::Graphics::FloatPoint& point);
125 }; // _ListViewItemHitTestVEDelegator
126
127 class _ListViewItem
128         : public Tizen::Ui::Controls::_TableViewItem
129 {
130 public:
131         _ListViewItem(int itemHeight);
132
133         virtual ~_ListViewItem(void);
134
135         static _ListViewItem* CreateListViewItemN(int itemHeight);
136
137         void SetListViewItemType(ListViewItemType type);
138
139         void AddTouchLongPressGestureEventListener(Tizen::Ui::_ITouchLongPressGestureEventListener& listener);
140
141         void RemoveTouchLongPressGestureEventListener(Tizen::Ui::_ITouchLongPressGestureEventListener& listener);
142
143         result AddElement(Tizen::Graphics::Rectangle& rect, int elementId, const Tizen::Base::String& text, bool textSliding = false);
144
145         result AddElement(Tizen::Graphics::Rectangle& rect, int elementId, const Tizen::Graphics::EnrichedText* pEnrichedText, bool textSliding = false);
146
147         result AddElement(Tizen::Graphics::Rectangle& rect, int elementId, const Tizen::Graphics::Bitmap* pNormalBitmap,
148                         const Tizen::Graphics::Bitmap* pPressedBitmap = null, const Tizen::Graphics::Bitmap* pHighlightedBitmap = null);
149
150         result AddElement(Tizen::Graphics::Rectangle& rect, int elementId, const _ICustomElement* pCustom);
151
152         bool DeleteElement(int elementId);
153
154         void DeleteAllElement(void);
155
156         bool HasElement(int elementId);
157
158         bool RefreshElement(int elementId);
159
160         void SetLastStateChangedInfo(void);
161
162         bool GetLastStateChangedInfo(_ListViewItemStateChangedInfo& changedInfo) const;
163
164         void ClearLastStateChangedInfo(void);
165
166         int GetElementIdFromPosition(const Tizen::Graphics::Point& position) const;
167
168         int GetElementIdFromCurrentTouchPosition(void) const;
169
170         ListViewItemElementType GetElementType(int elementId) const;
171
172         bool SetElementSelectionEnabled(int elementId, bool enable);
173
174         bool GetElementSelectionEnabled(int elementId, bool& enable);
175
176         bool SetTextCutlinkMask(int elementId, unsigned long mask);
177
178         bool SetTextCutlinkViewMode(int elementId, bool cutlinkViewMode, bool cutlinkParseEnable = true);
179
180         bool SetTextAlignment(int elementId, Tizen::Graphics::_Text::TextObjectAlignment textAlignment);
181
182         bool GetTextAlignment(int elementId, Tizen::Graphics::_Text::TextObjectAlignment& textAlignment) const;
183
184         bool SetTextWrapType(int elementId, Tizen::Graphics::_Text::TextObjectWrapType wrapType);
185
186         bool SetTextSize(int elementId, int textSize);
187
188         bool SetTextColor(int elementId, Tizen::Graphics::Color textColor, ListViewItemDrawingStatus status = LISTVIEW_ITEM_STATUS_NORMAL);
189
190         bool GetTextColor(int elementId, Tizen::Graphics::Color& textColor, ListViewItemDrawingStatus status = LISTVIEW_ITEM_STATUS_NORMAL) const;
191
192         bool SetProgressValue(int value);
193
194         bool SetProgressMargins(int leftMargin, int rightMargin);
195
196         bool SetDescriptionText(const Tizen::Base::String& text);
197
198         void SetDescriptionTextColor(const Tizen::Graphics::Color& color);
199
200         void SetDescriptionTextShowState(bool show);
201
202         void SetContextItemEventListener(Tizen::Ui::Controls::_IActionEventListener& listener);
203
204         void SetContextItemActivationState(bool activate);
205
206         // Window event handler
207         virtual void OnDraw(void);
208
209         virtual void OnBoundsChanged(void);
210
211         virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
212
213         virtual void OnFontInfoRequested(unsigned long& style, int& size);
214
215         virtual void OnAncestorEnableStateChanged(const _Control& control);
216
217         // Touch event handler
218         virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
219
220         virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
221
222         virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
223
224         virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
225
226         // Timer Callback API
227         void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
228
229 private:
230         _ListViewItem(const _ListViewItem& rhs);
231
232         _ListViewItem& operator =(const _ListViewItem& rhs);
233
234         void DeleteElement(_ListViewItemElement* pElement);
235
236         _ListViewItemElement* GetElement(int elementId) const;
237
238         Tizen::Graphics::_Text::TextObject* GetTextObjectInElement(int elementId) const;
239
240         _ListViewItemElementText* GetElementText(int elementId) const;
241
242         _ListViewItemElementBitmap* GetElementBitmap(int elementId) const;
243
244         ListViewItemDrawingStatus GetItemDrawingStatus(void);
245
246         void DrawElement(_ListViewItemElement* pElement);
247
248         void DrawElements(void);
249
250         bool DrawText(Tizen::Graphics::Rectangle& rect, ListViewItemDrawingStatus status, _ListViewItemElementText* pText);
251
252         bool DrawBitmap(Tizen::Graphics::Rectangle& rect, ListViewItemDrawingStatus status, _ListViewItemElementBitmap* pBitmap);
253
254         void DrawDivider(void);
255
256         int GetDescriptionTextHeight(void);
257
258         void AdjustProgressBounds(void);
259
260         Tizen::Graphics::Font* GetFont(unsigned long fontStyle, int fontSize);
261
262         // TextSlide
263         void StartTextSlideTimer(void);
264
265         void StopTextSlideTimer(void);
266
267         bool IsTextSlideTimerRunning(void);
268
269         void OnTextSlideTimerExpired(void);
270
271         void ResetTextSlide(void);
272
273         // UiLink
274         bool ParseCutlinkText(_ListViewItemElementText* pText);
275
276         bool IsCutlinkTextSelected(const Tizen::Graphics::Point& position, int* index, _ListViewItemUiLinkInfo** ppInfo) const;
277
278         bool SetCutlinkTextFocus(const Tizen::Graphics::Point& position);
279
280         bool ResetCutlinkFocus(void);
281
282         void SetAccessibilityElement(void);
283
284 private:
285         static const int TOUCH_LONGPRESSED_EVENT_DURATION = 300;
286         static const int TEXT_SLIDING_TIMER_DURATION = 60;
287
288         _LinkedList <_ListViewItemElement> __elements;
289
290         ListViewItemType __itemType;
291
292         bool __touchPressed;
293
294         int __selectedElementId;
295
296         int __progressLeftMargin;
297
298         int __progressRightMargin;
299
300         _Progress* __pProgress;
301
302         bool __descriptionTextShowState;
303
304         Tizen::Graphics::Color __descriptionTextColor;
305
306         _Label* __pDescriptionText;
307
308         _Label* __pDivider;
309
310         bool __selectionEabled;
311
312         Tizen::Graphics::Color __selectionEabledBgColor;
313
314         unsigned long __fontStyle;
315
316         int __fontSize;
317
318         Tizen::Base::String __fontName;
319
320         Tizen::Graphics::Point __prevTouchPos; // for UiLink
321
322         Tizen::Base::Runtime::Timer* __pTextSlideTimer;
323
324         _ListViewItemStateChangedInfo ___stateChangedInfo; // for event fire in _ListViewImpl
325
326         _ListViewItemHitTestVEDelegator __hitTestVEDelegator;
327
328         _TouchLongPressGestureDetector* __pLongPressedGesture;
329
330         _IActionEventListener* __pContextItemEventListener;
331 }; // _ListViewItem
332
333 }}} // Tizen::Ui::Controls
334
335 #endif // _FUI_CTRL_INTERNAL_LIST_VIEW_ITEM_H_