2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
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
9 // http://floralicense.org/license/
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.
19 * @file FUiCtrl_ListViewItem.h
20 * @brief This is the header file for the _ListViewItem class.
22 * This header file contains the declarations of the _ListViewItem class.
25 #ifndef _FUI_CTRL_INTERNAL_LIST_VIEW_ITEM_H_
26 #define _FUI_CTRL_INTERNAL_LIST_VIEW_ITEM_H_
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"
35 namespace Tizen { namespace Ui
37 class _AccessibilityElement;
38 class _ITouchLongPressGestureEventListener;
39 class _TouchLongPressGestureDetector;
42 namespace Tizen { namespace Ui { namespace Controls
46 class _ListViewContextItem;
49 enum ListViewItemElementType
51 LISTVIEW_ITEM_ELEMENT_TEXT = 0,
52 LISTVIEW_ITEM_ELEMENT_BITMAP,
53 LISTVIEW_ITEM_ELEMENT_OBJ,
54 LISTVIEW_ITEM_ELEMENT_INVALID
57 enum ListViewItemSelectionType
59 LISTVIEW_ITEM_SELECTED = 0,
60 LISTVIEW_ITEM_ELEMENT_SELECTED,
61 LISTVIEW_ITEM_UILINK_SELECTED
64 struct _ListViewItemUiLinkInfo
66 Tizen::Base::String textInfo;
67 Tizen::Base::Utility::LinkType linkType;
68 Tizen::Base::String linkInfo;
71 struct _ListViewItemStateChangedInfo
73 ListViewItemSelectionType selectionType;
75 _ListViewItemUiLinkInfo* pUiLinkInfo;
78 struct _ListViewItemElementText
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];
86 bool cutlinkViewModeEnabled;
87 bool cutlinkParseEnabled;
88 unsigned long cutlinkMaskType;
89 bool textSlidingEnabled;
92 struct _ListViewItemElementBitmap
94 Tizen::Ui::Animations::_VisualElement* pVE;
95 Tizen::Graphics::Bitmap* pBitmap[LISTVIEW_ITEM_STATUS_MAX];
98 struct _ListViewItemElementCustom
100 Tizen::Ui::Animations::_VisualElement* pVE;
101 _ICustomElement* pCustom;
104 struct _ListViewItemElement
108 bool selectionEnabled;
109 ListViewItemElementType elementType;
110 _ListViewItemElementText* pTextElement;
111 _ListViewItemElementBitmap* pBitmapElement;
112 _ListViewItemElementCustom* pCustomElement;
113 Tizen::Graphics::Rectangle bounds;
116 class _ListViewItemHitTestVEDelegator
117 : public Tizen::Ui::Animations::VisualElementContentProvider
120 _ListViewItemHitTestVEDelegator(void);
122 virtual ~_ListViewItemHitTestVEDelegator(void);
124 virtual Tizen::Ui::Animations::HitTestResult HitTest(Tizen::Ui::Animations::VisualElement& target, const Tizen::Graphics::FloatPoint& point);
125 }; // _ListViewItemHitTestVEDelegator
128 : public Tizen::Ui::Controls::_TableViewItem
131 _ListViewItem(int itemHeight);
133 virtual ~_ListViewItem(void);
135 static _ListViewItem* CreateListViewItemN(int itemHeight);
137 void SetListViewItemType(ListViewItemType type);
139 void AddTouchLongPressGestureEventListener(Tizen::Ui::_ITouchLongPressGestureEventListener& listener);
141 void RemoveTouchLongPressGestureEventListener(Tizen::Ui::_ITouchLongPressGestureEventListener& listener);
143 result AddElement(Tizen::Graphics::Rectangle& rect, int elementId, const Tizen::Base::String& text, bool textSliding = false);
145 result AddElement(Tizen::Graphics::Rectangle& rect, int elementId, const Tizen::Graphics::EnrichedText* pEnrichedText, bool textSliding = false);
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);
150 result AddElement(Tizen::Graphics::Rectangle& rect, int elementId, const _ICustomElement* pCustom);
152 bool DeleteElement(int elementId);
154 void DeleteAllElement(void);
156 bool HasElement(int elementId);
158 bool RefreshElement(int elementId);
160 void SetLastStateChangedInfo(void);
162 bool GetLastStateChangedInfo(_ListViewItemStateChangedInfo& changedInfo) const;
164 void ClearLastStateChangedInfo(void);
166 int GetElementIdFromPosition(const Tizen::Graphics::Point& position) const;
168 int GetElementIdFromCurrentTouchPosition(void) const;
170 ListViewItemElementType GetElementType(int elementId) const;
172 bool SetElementSelectionEnabled(int elementId, bool enable);
174 bool GetElementSelectionEnabled(int elementId, bool& enable);
176 bool SetTextCutlinkMask(int elementId, unsigned long mask);
178 bool SetTextCutlinkViewMode(int elementId, bool cutlinkViewMode, bool cutlinkParseEnable = true);
180 bool SetTextAlignment(int elementId, Tizen::Graphics::_Text::TextObjectAlignment textAlignment);
182 bool GetTextAlignment(int elementId, Tizen::Graphics::_Text::TextObjectAlignment& textAlignment) const;
184 bool SetTextWrapType(int elementId, Tizen::Graphics::_Text::TextObjectWrapType wrapType);
186 bool SetTextSize(int elementId, int textSize);
188 bool SetTextColor(int elementId, Tizen::Graphics::Color textColor, ListViewItemDrawingStatus status = LISTVIEW_ITEM_STATUS_NORMAL);
190 bool GetTextColor(int elementId, Tizen::Graphics::Color& textColor, ListViewItemDrawingStatus status = LISTVIEW_ITEM_STATUS_NORMAL) const;
192 bool SetProgressValue(int value);
194 bool SetProgressMargins(int leftMargin, int rightMargin);
196 bool SetDescriptionText(const Tizen::Base::String& text);
198 void SetDescriptionTextColor(const Tizen::Graphics::Color& color);
200 void SetDescriptionTextShowState(bool show);
202 void SetContextItemEventListener(Tizen::Ui::Controls::_IActionEventListener& listener);
204 void SetContextItemActivationState(bool activate);
206 // Window event handler
207 virtual void OnDraw(void);
209 virtual void OnBoundsChanged(void);
211 virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
213 virtual void OnFontInfoRequested(unsigned long& style, int& size);
215 virtual void OnAncestorEnableStateChanged(const _Control& control);
217 // Touch event handler
218 virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
220 virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
222 virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
224 virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
226 // Timer Callback API
227 void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
230 _ListViewItem(const _ListViewItem& rhs);
232 _ListViewItem& operator =(const _ListViewItem& rhs);
234 void DeleteElement(_ListViewItemElement* pElement);
236 _ListViewItemElement* GetElement(int elementId) const;
238 Tizen::Graphics::_Text::TextObject* GetTextObjectInElement(int elementId) const;
240 _ListViewItemElementText* GetElementText(int elementId) const;
242 _ListViewItemElementBitmap* GetElementBitmap(int elementId) const;
244 ListViewItemDrawingStatus GetItemDrawingStatus(void);
246 void DrawElement(_ListViewItemElement* pElement);
248 void DrawElements(void);
250 bool DrawText(Tizen::Graphics::Rectangle& rect, ListViewItemDrawingStatus status, _ListViewItemElementText* pText);
252 bool DrawBitmap(Tizen::Graphics::Rectangle& rect, ListViewItemDrawingStatus status, _ListViewItemElementBitmap* pBitmap);
254 void DrawDivider(void);
256 int GetDescriptionTextHeight(void);
258 void AdjustProgressBounds(void);
260 Tizen::Graphics::Font* GetFont(unsigned long fontStyle, int fontSize);
263 void StartTextSlideTimer(void);
265 void StopTextSlideTimer(void);
267 bool IsTextSlideTimerRunning(void);
269 void OnTextSlideTimerExpired(void);
271 void ResetTextSlide(void);
274 bool ParseCutlinkText(_ListViewItemElementText* pText);
276 bool IsCutlinkTextSelected(const Tizen::Graphics::Point& position, int* index, _ListViewItemUiLinkInfo** ppInfo) const;
278 bool SetCutlinkTextFocus(const Tizen::Graphics::Point& position);
280 bool ResetCutlinkFocus(void);
282 void SetAccessibilityElement(void);
285 static const int TOUCH_LONGPRESSED_EVENT_DURATION = 300;
286 static const int TEXT_SLIDING_TIMER_DURATION = 60;
288 _LinkedList <_ListViewItemElement> __elements;
290 ListViewItemType __itemType;
294 int __selectedElementId;
296 int __progressLeftMargin;
298 int __progressRightMargin;
300 _Progress* __pProgress;
302 bool __descriptionTextShowState;
304 Tizen::Graphics::Color __descriptionTextColor;
306 _Label* __pDescriptionText;
310 bool __selectionEabled;
312 Tizen::Graphics::Color __selectionEabledBgColor;
314 unsigned long __fontStyle;
318 Tizen::Base::String __fontName;
320 Tizen::Graphics::Point __prevTouchPos; // for UiLink
322 Tizen::Base::Runtime::Timer* __pTextSlideTimer;
324 _ListViewItemStateChangedInfo ___stateChangedInfo; // for event fire in _ListViewImpl
326 _ListViewItemHitTestVEDelegator __hitTestVEDelegator;
328 _TouchLongPressGestureDetector* __pLongPressedGesture;
330 _IActionEventListener* __pContextItemEventListener;
333 }}} // Tizen::Ui::Controls
335 #endif // _FUI_CTRL_INTERNAL_LIST_VIEW_ITEM_H_