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