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;
40 namespace Tizen { namespace Ui { namespace Controls
44 class _ListViewContextItem;
47 enum ListViewItemElementType
49 LISTVIEW_ITEM_ELEMENT_TEXT = 0,
50 LISTVIEW_ITEM_ELEMENT_BITMAP,
51 LISTVIEW_ITEM_ELEMENT_OBJ,
52 LISTVIEW_ITEM_ELEMENT_INVALID
55 enum ListViewItemSelectionType
57 LISTVIEW_ITEM_SELECTED = 0,
58 LISTVIEW_ITEM_ELEMENT_SELECTED,
59 LISTVIEW_ITEM_UILINK_SELECTED
62 struct _ListViewItemUiLinkInfo
64 Tizen::Base::String textInfo;
65 Tizen::Base::Utility::LinkType linkType;
66 Tizen::Base::String linkInfo;
69 struct _ListViewItemStateChangedInfo
71 ListViewItemSelectionType selectionType;
73 _ListViewItemUiLinkInfo* pUiLinkInfo;
76 struct _ListViewItemElementText
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];
83 bool cutlinkViewModeEnabled;
84 bool cutlinkParseEnabled;
85 unsigned long cutlinkMaskType;
86 bool textSlidingEnabled;
89 struct _ListViewItemElementBitmap
91 Tizen::Ui::Animations::_VisualElement* pVE;
92 Tizen::Graphics::Bitmap* pBitmap[LISTVIEW_ITEM_STATUS_MAX];
95 struct _ListViewItemElementCustom
97 Tizen::Ui::Animations::_VisualElement* pVE;
98 _ICustomElement* pCustom;
101 struct _ListViewItemElement
105 bool selectionEnabled;
106 ListViewItemElementType elementType;
107 _ListViewItemElementText* pTextElement;
108 _ListViewItemElementBitmap* pBitmapElement;
109 _ListViewItemElementCustom* pCustomElement;
110 Tizen::Graphics::FloatRectangle bounds;
113 class _ListViewItemHitTestVEDelegator
114 : public Tizen::Ui::Animations::VisualElementContentProvider
117 _ListViewItemHitTestVEDelegator(void);
119 virtual ~_ListViewItemHitTestVEDelegator(void);
121 virtual Tizen::Ui::Animations::HitTestResult HitTest(Tizen::Ui::Animations::VisualElement& target, const Tizen::Graphics::FloatPoint& point);
122 }; // _ListViewItemHitTestVEDelegator
125 : public Tizen::Ui::Controls::_TableViewItem
128 _ListViewItem(float itemHeight);
130 virtual ~_ListViewItem(void);
132 static _ListViewItem* CreateListViewItemN(float itemHeight);
134 void SetListViewItemType(ListViewItemType type);
136 result AddElement(Tizen::Graphics::FloatRectangle& rect, int elementId, const Tizen::Base::String& text, bool textSliding = false);
138 result AddElement(Tizen::Graphics::FloatRectangle& rect, int elementId, const Tizen::Graphics::EnrichedText* pEnrichedText, bool textSliding = false);
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);
143 result AddElement(Tizen::Graphics::FloatRectangle& rect, int elementId, const _ICustomElement* pCustom);
145 bool DeleteElement(int elementId);
147 void DeleteAllElement(void);
149 bool HasElement(int elementId);
151 bool RefreshElement(int elementId);
153 void SetLastStateChangedInfo(void);
155 bool GetLastStateChangedInfo(_ListViewItemStateChangedInfo& changedInfo) const;
157 void ClearLastStateChangedInfo(void);
159 int GetElementIdFromPosition(const Tizen::Graphics::FloatPoint& position) const;
161 int GetElementIdFromCurrentTouchPosition(void) const;
163 ListViewItemElementType GetElementType(int elementId) const;
165 bool SetElementSelectionEnabled(int elementId, bool enable);
167 bool GetElementSelectionEnabled(int elementId, bool& enable);
169 bool SetTextCutlinkMask(int elementId, unsigned long mask);
171 bool SetTextCutlinkViewMode(int elementId, bool cutlinkViewMode, bool cutlinkParseEnable = true);
173 bool SetTextAlignment(int elementId, Tizen::Graphics::_Text::TextObjectAlignment textAlignment);
175 bool GetTextAlignment(int elementId, Tizen::Graphics::_Text::TextObjectAlignment& textAlignment) const;
177 bool SetTextWrapType(int elementId, Tizen::Graphics::_Text::TextObjectWrapType wrapType);
179 bool SetTextSize(int elementId, float textSize);
181 bool SetTextColor(int elementId, Tizen::Graphics::Color textColor, ListViewItemDrawingStatus status = LISTVIEW_ITEM_STATUS_NORMAL);
183 bool GetTextColor(int elementId, Tizen::Graphics::Color& textColor, ListViewItemDrawingStatus status = LISTVIEW_ITEM_STATUS_NORMAL) const;
185 bool SetDescriptionText(const Tizen::Base::String& text);
187 void SetDescriptionTextColor(const Tizen::Graphics::Color& color);
189 void SetDescriptionTextShowState(bool show);
191 void SetContextItemEventListener(Tizen::Ui::Controls::_IActionEventListener& listener);
193 void SetContextItemActivationState(bool activate);
195 // Window event handler
196 virtual void OnDraw(void);
198 virtual result OnBoundsChanging(const Tizen::Graphics::FloatRectangle& bounds);
200 virtual void OnBoundsChanged(void);
202 virtual void OnFontChanged(Tizen::Graphics::Font* pFont);
204 virtual void OnFontInfoRequested(unsigned long& style, int& size);
206 virtual void OnFontInfoRequested(unsigned long& style, float& size);
208 virtual void OnAncestorEnableStateChanged(const _Control& control);
210 // Touch event handler
211 virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
213 virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
215 virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
217 virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
219 // Timer Callback API
220 void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
223 _ListViewItem(const _ListViewItem& rhs);
225 _ListViewItem& operator =(const _ListViewItem& rhs);
227 void DeleteElement(_ListViewItemElement* pElement);
229 _ListViewItemElement* GetElement(int elementId) const;
231 Tizen::Graphics::_Text::TextObject* GetTextObjectInElement(int elementId) const;
233 _ListViewItemElementText* GetElementText(int elementId) const;
235 _ListViewItemElementBitmap* GetElementBitmap(int elementId) const;
237 ListViewItemDrawingStatus GetItemDrawingStatus(void);
239 void DrawElement(_ListViewItemElement* pElement);
241 void DrawElements(void);
243 bool DrawText(Tizen::Graphics::FloatRectangle& rect, ListViewItemDrawingStatus status, _ListViewItemElementText* pText);
245 bool DrawBitmap(Tizen::Graphics::FloatRectangle& rect, ListViewItemDrawingStatus status, _ListViewItemElementBitmap* pBitmap);
247 void DrawDivider(void);
249 float GetDescriptionTextHeight(void);
251 void AdjustProgressBounds(void);
253 Tizen::Graphics::Font* GetFont(unsigned long fontStyle, float fontSize);
256 void StartTextSlideTimer(void);
258 void StopTextSlideTimer(void);
260 bool IsTextSlideTimerRunning(void);
262 void OnTextSlideTimerExpired(void);
264 void ResetTextSlide(void);
267 bool ParseCutlinkText(_ListViewItemElementText* pText);
269 bool IsCutlinkTextSelected(const Tizen::Graphics::FloatPoint& position, int* index, _ListViewItemUiLinkInfo** ppInfo) const;
271 bool SetCutlinkTextFocus(const Tizen::Graphics::FloatPoint& position);
273 bool ResetCutlinkFocus(void);
275 virtual void SetAccessibilityElement(void);
277 virtual void SetAccessibilityElementLabel(void);
280 static const int TEXT_SLIDING_TIMER_DURATION = 60;
282 _LinkedList <_ListViewItemElement> __elements;
284 ListViewItemType __itemType;
286 bool __needAlignContextItem;
290 int __selectedElementId;
292 float __progressLeftMargin;
294 float __progressRightMargin;
296 _Progress* __pProgress;
298 bool __descriptionTextShowState;
300 Tizen::Graphics::Color __descriptionTextColor;
302 _Label* __pDescriptionText;
306 bool __selectionEabled;
308 Tizen::Graphics::Color __selectionEabledBgColor;
310 unsigned long __fontStyle;
314 Tizen::Base::String __fontName;
316 Tizen::Graphics::FloatPoint __prevTouchPos; // for UiLink
318 Tizen::Base::Runtime::Timer* __pTextSlideTimer;
320 _ListViewItemStateChangedInfo ___stateChangedInfo; // for event fire in _ListViewImpl
322 _ListViewItemHitTestVEDelegator __hitTestVEDelegator;
324 _IActionEventListener* __pContextItemEventListener;
326 Tizen::Ui::_AccessibilityElement* __pAccessibilityElement;
329 }}} // Tizen::Ui::Controls
331 #endif // _FUI_CTRL_INTERNAL_LIST_VIEW_ITEM_H_