2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.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://www.apache.org/licenses/LICENSE-2.0/
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_TableViewItem.h
20 * @brief This is the header file for the _TableViewItem class.
22 * This header file contains the declarations of the _TableViewItem class.
26 #ifndef _FUI_CTRL_INTERNAL_TABLE_VIEW_ITEM_H_
27 #define _FUI_CTRL_INTERNAL_TABLE_VIEW_ITEM_H_
29 #include <FUiCtrlTableViewTypes.h>
30 #include <FUiAnimIVisualElementAnimationStatusEventListener.h>
31 #include <FUiAnimIVisualElementAnimationTickEventListener.h>
32 #include <FBaseColArrayList.h>
33 #include <FBaseRtITimerEventListener.h>
34 #include "FUi_Control.h"
35 #include "FUi_IAccessibilityListener.h"
36 #include "FUiCtrl_IListItemCommon.h"
37 #include "FUiCtrl_Label.h"
39 namespace Tizen { namespace Ui
41 class _TouchLongPressGestureDetector;
44 namespace Tizen { namespace Ui { namespace Controls
47 enum TableViewItemSelectionStyle
49 TABLE_VIEW_ITEM_SELECTION_STYLE_NONE = 0,
50 TABLE_VIEW_ITEM_SELECTION_STYLE_WHOLE
53 enum TableViewItemType
55 TABLE_VIEW_ITEM_TYPE_TOP,
56 TABLE_VIEW_ITEM_TYPE_MIDDLE,
57 TABLE_VIEW_ITEM_TYPE_BOTTOM,
58 TABLE_VIEW_ITEM_TYPE_ONE,
59 TABLE_VIEW_ITEM_TYPE_TITLE,
60 TABLE_VIEW_ITEM_TYPE_HEADER,
61 TABLE_VIEW_ITEM_TYPE_FOOTER,
62 TABLE_VIEW_ITEM_TYPE_NONE
65 enum TableViewGroupItemDrawingStatus
67 TABLE_VIEW_GROUPITEM_DRAWING_STATUS_NORMAL = 3,
68 TABLE_VIEW_GROUPITEM_DRAWING_STATUS_PRESSED
71 enum TableViewSimpleItemDrawingStatus
73 TABLE_VIEW_SIMPLEITEM_DRAWING_STATUS_DISABLED = 5,
76 enum TableViewItemPressedControl
78 TABLE_VIEW_ITEM_PRESSED_NONE = 0,
79 TABLE_VIEW_ITEM_PRESSED_ITEM,
80 TABLE_VIEW_ITEM_PRESSED_ANNEX,
81 TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL
84 struct _ItemDrawingProperty
86 bool itemDividerEnabled;
87 Tizen::Graphics::Color dividerColor;
88 bool sectionStyleEnabled;
89 Tizen::Graphics::Color sectionStyleBgColor;
90 bool groupedLookEnabled;
98 // TableViewItemControl
99 class _TableViewItemControl
100 : public Tizen::Ui::_Control
103 virtual ~_TableViewItemControl(void);
104 virtual void OnDraw(void);
105 virtual Tizen::Ui::Animations::HitTestResult HitTest(const Tizen::Graphics::FloatPoint& point);
108 static _TableViewItemControl* CreateTableViewItemControlN(void);
109 result SetBackgroundBitmap(const Tizen::Graphics::Bitmap& bitmap);
110 Tizen::Graphics::Bitmap* GetBackgroundBitmap(void) const;
113 Tizen::Graphics::Bitmap* __pBackgroundBitmap;
116 _TableViewItemControl(void);
117 _TableViewItemControl(const _TableViewItemControl& rhs);
118 _TableViewItemControl& operator =(const _TableViewItemControl rhs);
122 class _OSP_EXPORT_ _TableViewItem
123 : public Tizen::Ui::_Control
124 , public _IListItemCommon
125 , public _IAccessibilityListener
126 , public Tizen::Base::Runtime::ITimerEventListener
127 , public Tizen::Ui::Animations::IVisualElementAnimationTickEventListener
128 , public Tizen::Ui::Animations::IVisualElementAnimationStatusEventListener
129 , virtual public Tizen::Base::Runtime::IEventListener
130 , virtual public Tizen::Ui::_IUiEventListener
131 , virtual public Tizen::Ui::_IUiEventPreviewer
135 virtual ~_TableViewItem();
137 static _TableViewItem* CreateTableViewItemN(float itemHeight);
139 virtual bool DrawItem(Tizen::Graphics::FloatRectangle& rcItem, ListItemState isFocused, bool itemDivider = false);
141 virtual float GetItemHeight(void) const;
142 virtual void SetItemHeight(int itemHeight); // +++ check floating
143 virtual void SetItemHeight(float itemHeight);
145 virtual void SetChecked(bool checked);
146 virtual bool IsChecked(void) const;
147 virtual void SetCheckedAnimationEnabled(bool enabled);
149 virtual void SetItemEnabled(bool enabled);
150 virtual bool IsItemEnabled(void) const;
152 void SetItemType(const TableViewItemType itemType);
153 TableViewItemType GetItemType(void) const;
155 virtual bool IsReorderMode(void) const;
156 virtual void SetReorderMode(bool enabled);
158 virtual void SetItemChanged(bool changed);
159 virtual bool IsItemChanged(void) const;
161 virtual void SetItemIndex(int groupIndex, int itemIndex);
162 virtual void GetItemIndex(int& groupIndex, int& itemIndex) const;
164 _TableViewItem* GetContextItem(void) const;
165 void SetContextItem(_TableViewItem* pContextItem);
167 bool IsContextItem(void) const;
168 void SetContextItemActivation(bool activated);
169 bool IsContextItemActivated(void) const;
171 result CreateItemDimLayer(void);
172 void ExposeContextItem(Tizen::Graphics::FloatRectangle itemBounds, float targetWidth);
173 void DrawItemDimLayer(bool visible);
175 void SetItemStyle(TableViewAnnexStyle style);
176 TableViewAnnexStyle GetItemStyle(void) const;
178 void SetItemWidth(float width);
180 bool SetItemBackgroundBitmap(ListItemState itemState, const Tizen::Graphics::Bitmap* pBitmap);
181 Tizen::Graphics::Bitmap* GetItemBackgroundBitmap(ListItemState itemState) const;
183 void SetItemBackgroundColor(ListItemState itemState, const Tizen::Graphics::Color bgColor);
184 Tizen::Graphics::Color GetItemBackgroundColor(ListItemState itemState) const;
186 result SetSelectionStyle(TableViewItemSelectionStyle style);
187 TableViewItemSelectionStyle GetSelectionStyle(void) const;
189 virtual void SetAppInfo(const void* pAppInfo);
190 virtual void* GetAppInfo(void) const;
195 void FireItemEvent(bool selectedItem = true);
196 void FireItemSweepEvent(TableViewSweepDirection direction);
198 void SetDrawingProperty(_ItemDrawingProperty* pDrawingProperty);
199 _ItemDrawingProperty* GetDrawingProperty(void);
201 void SetDrawingStatus(TableViewItemDrawingStatus status);
202 TableViewItemDrawingStatus GetDrawingStatus(void);
204 void AdjustChildControlMargin(void);
206 void AdjustContextItemBounds(void);
207 void AdjustChildControlCenterAlign(void);
208 void SetChildControlCenterAlign(bool centerAlign);
209 void AdjustAnnexBounds(void);
212 result SetSimpleItemContents(const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBitmap, bool groupType);
213 result SetSimpleTextColor(const Tizen::Graphics::Color& color, TableViewItemDrawingStatus status);
214 Tizen::Graphics::Color GetSimpleItemTextColor(TableViewItemDrawingStatus status) const;
215 result SetSimpleItemTextSize(int size);
216 int GetSimpleItemTextSize(void) const;
219 result SetSimpleGroupItemTextColor(const Tizen::Graphics::Color& color, TableViewItemDrawingStatus status);
220 Tizen::Graphics::Color GetSimpleGroupItemTextColor(TableViewItemDrawingStatus status) const;
222 result SetSectionHeaderFooterContents(const Tizen::Base::String& text, HorizontalAlignment alignment, bool isHeader);
223 result SetSectionHeaderFooterAlignment(HorizontalAlignment alignment);
225 bool MoveItem(Tizen::Graphics::FloatPoint position, int duration, int delay);
226 bool FadeInOutItem(bool fadeOut, int duration, int delay);
227 bool ZoomInOutItem(bool zoomOut, int duration, int delay);
229 Tizen::Graphics::Point GetLastTouchPressedPosition(void);
230 Tizen::Graphics::FloatPoint GetLastTouchPressedPositionF(void);
231 void SetLastTouchPressedPosition(Tizen::Graphics::Point position);
232 void SetLastTouchPressedPosition(Tizen::Graphics::FloatPoint position);
234 bool GetSelectionState(void);
235 void SetSelectionState(bool selected);
237 result SetIndividualSelectionEnabled(const _Control& control, bool enable);
238 bool IsIndividualSelectionEnabled(const _Control& control);
240 bool IsAnimationPlaying(void);
241 void StopAllAnimation(void);
243 void SetItemDividerEnabled(bool enable);
245 result PlayCheckBoxAnimation(void);
246 result StartCheckBoxAnimation(void);
247 void StopCheckBoxAnimation(void);
249 void SetItemLayoutEnabled(bool enabled);
250 bool GetItemLayoutEnabled(void);
251 bool IsAnnexOnOffSliding(void);
252 static float GetAnnexWidth(TableViewAnnexStyle style);
254 void FireItemTouchReleased(void);
255 void FireItemTouchPressed(void);
256 void SetSimpleLastItemEnabled(bool enable);
257 void SetSectionItem(bool isSectionItem);
258 void SetTouchPressOnScroll(bool isTouch);
259 bool IsTouchPressOnScroll(void) const;
262 virtual void SetAccessibilityElement(void);
263 Tizen::Ui::_AccessibilityElement* GetAccessibilityElement(void);
265 virtual result OnAttachedToMainTree(void);
267 // event handler for ITouchEventListener
268 virtual bool OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
269 virtual bool OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
270 virtual bool OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
271 virtual bool OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
273 virtual _UiTouchEventDelivery OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchinfo);
274 virtual _UiTouchEventDelivery OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo);
275 virtual _UiTouchEventDelivery OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo);
276 virtual _UiTouchEventDelivery OnPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchinfo);
278 virtual void OnDraw(void);
279 virtual void OnChildAttached(const _Control& child);
280 virtual void OnChildDetached(const _Control& child);
281 virtual void OnTimerExpired(Tizen::Base::Runtime::Timer& timer);
282 virtual void OnBoundsChanged(void);
284 // VisualElement Animation
285 virtual void OnTickOccurred(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, const Tizen::Ui::Variant& currentValue);
286 virtual void OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target);
287 virtual void OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount);
288 virtual void OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally);
290 // accessibility listener
291 virtual bool OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element);
292 virtual bool OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element);
293 virtual bool OnAccessibilityReadingElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
294 virtual bool OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element);
295 virtual bool OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element);
296 virtual bool OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element);
297 virtual bool OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element);
298 virtual bool OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
299 virtual bool OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element);
302 virtual bool OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo);
303 virtual bool OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo);
304 virtual bool IsChildControlFocusManage(void) const;
305 virtual void OnFocusModeStateChanged(void);
307 bool SetItemTapSoundEnabled(bool tapSoundEnabled);
308 bool GetItemTapSoundEnabled(void);
310 void DrawAnnexFocus(void);
311 void ResetItemState(void);
313 virtual Tizen::Graphics::Canvas* OnCanvasRequestedN(const Tizen::Graphics::FloatRectangle& bounds);
315 //Enable/Visible state change
316 virtual void OnVisibleStateChanged(void);
317 virtual void OnAncestorEnableStateChanged(const _Control& control);
318 virtual void OnAncestorVisibleStateChanged(const _Control& control);
319 virtual void OnFocusableStateChanged(bool focusableState);
322 void SetPublicLabelUpdate(bool resetPublicLabelUpdate);
326 _TableViewItem(float nItemHeight);
327 result Initialize(void);
329 virtual void SetAccessibilityElementLabel(void);
330 virtual void SetAccessibilityElementTrait(void);
331 virtual void SetAccessibilityElementValue(void);
333 void SetPressedControl(TableViewItemPressedControl pressedControl);
334 TableViewItemPressedControl GetPressedControl(void);
336 result StartTouchPressedTimer(const _Control& source, const _TouchInfo& touchinfo);
337 void StopTouchPressedTimer(bool forceStop = false);
338 result StartTouchReleasedTimer(void);
339 void StopTouchReleasedTimer(bool forceStop = false);
341 void OnAncestorInputEnableStateChanged(const _Control& control);
343 void SetItemCustomHeight(float height);
344 float GetItemCustomHeight(void);
347 _TableViewItem(const _TableViewItem&);
348 _TableViewItem& operator =(const _TableViewItem&);
351 void DrawItemBackground(void);
352 void DrawSectionStyleBackground(void);
353 void DrawSectionStyleBackgroundCover(void);
354 void DrawContextItemBackground(void);
355 void DrawAnnexStyle(void);
356 void DrawCheckBox(void);
357 void DrawRadioBox(void);
358 void DrawOnOffButton(void);
359 void DrawAnnexOnOffHandler(float position);
360 void AdjustAnnexOnOffHandlerPosition();
361 void DrawDetailButton(void);
362 void DrawItemDivider(void);
363 void DrawItemAnnexDivider(void);
364 void DrawGroupedLook(void);
366 result DrawBitmap (Tizen::Graphics::Canvas& canvas, const Tizen::Graphics::FloatRectangle& bounds, const Tizen::Graphics::Bitmap& bitmap);
368 result SetItemHighlightBounds(Tizen::Ui::Animations::_VisualElement& highlightVisualElement, const Tizen::Graphics::FloatRectangle& bounds);
369 Tizen::Graphics::FloatRectangle CalculateItemHighlightBounds(void);
370 Tizen::Graphics::FloatRectangle CalculateAnnexBitmapBounds(float annexWidth, float annexHeight, const Tizen::Graphics::Bitmap& bitmap);
372 bool IsTitleStyleItem(void) const;
373 bool IsValidSelectionState(void);
376 void DrawSimpleItem(void);
377 result CreateSimpleItemContents(bool textOnly);
379 result CreateItemDivider(void);
380 result CreateItemAnnexDivider(void);
381 result CreateItemCover(void);
383 void CreateAnnexStyle(void);
384 result CreateCheckBox(void);
385 result CreateRadioBox(void);
386 result CreateOnOffButton(void);
387 result CreateDetailButton(void);
389 _Label* GetLabelCore(Label* pLabel);
391 _Control* GetPreviousFocusChildControl(const _Control& source);
392 _Control* GetNextFocusChildControl(const _Control& source);
394 Tizen::Base::String GetChildAccessibilityLabelContent(const _Control& source);
395 void DeactivateChildAccessibilityContainer(const _Control& source);
401 int __itemGroupIndex;
409 bool __itemTouchMoved;
410 bool __childMarginState;
412 TableViewAnnexStyle __annexStyle;
413 TableViewItemDrawingStatus __drawingStatus;
414 TableViewItemSelectionStyle __selectionStyle;
415 TableViewItemType __itemType;
417 _TableViewItem* __pContextItem;
418 bool __isContextItem;
419 bool __isContextItemActivated;
420 bool __checkItemHeightNeeded;
422 _TableViewItemControl* __pItemDivider;
423 _TableViewItemControl* __pItemTopDivider;
425 _TableViewItemControl* __pItemCover;
426 _TableViewItemControl* __pItemAnnexLeftDivider;
427 _TableViewItemControl* __pItemAnnexRightDivider;
431 Tizen::Graphics::Bitmap* __pItemBgBitmap[3];
432 Tizen::Graphics::Color __colorItemBg[3];
434 _ItemDrawingProperty* __pDrawingProperty;
436 bool __itemDividerEnabled;
439 Label* __pSimpleItemText;
440 Label* __pSimpleItemBitmap;
441 Tizen::Graphics::Color __simpleItemTextColor[6];
442 int __simpleItemTextSize;
444 // Section header, footer
445 Label* __pHeaderFooterItemText;
449 Tizen::Graphics::FloatPoint __touchStartPosition;
450 float __annexTouchStartPosition;
451 bool __annexOnOffHandlerMoved;
452 float __annexOnOffHandlerPositionX;
453 bool __childControlCenterAlign;
454 float __customHeight;
455 int __animationCount;
457 Tizen::Base::Collection::ArrayList __individualSelectionControls;
459 Tizen::Ui::_AccessibilityElement* __pAccessibilityElement;
460 Tizen::Ui::_AccessibilityElement* __pAccessibilityOnOffElement;
462 Tizen::Base::Runtime::Timer* __pPressedTimer;
463 Tizen::Base::Runtime::Timer* __pReleasedTimer;
464 bool __isPressedTimerEnabled;
465 bool __isReleasedTimerEnabled;
466 TableViewItemPressedControl __pressedControl;
467 TableViewItemPressedControl __releasedControl;
469 Tizen::Base::Runtime::Timer* __pCheckedTimer;
470 bool __isCheckedTimerEnabled;
471 bool __isCheckedAnimationEnabled;
473 Tizen::Graphics::FloatRectangle __checkedBounds;
475 bool __isItemLayoutEnabled;
477 bool __isMoveItemAnimationEnabled;
478 bool __isZoomInOutItemAnimationEnabled;
479 bool __isFadeInOutItemAnimationEnabled;
480 bool __isAnimationCallbackBlocked;
482 bool __isItemTapSoundEnabled;
483 bool __isTabSoundPlayed;
484 bool __isSelectedDetailButton;
485 bool __isSimpleLastItem;
486 bool __isSectionItem;
487 bool __isTouchPressOnScroll;
489 bool __isTouchCancelOnPressRelease;
491 Tizen::Ui::Animations::_VisualElement* __pHighlightVisualElement;
492 Tizen::Ui::Animations::_VisualElement* __pBitmapVisualElement;
494 Tizen::Ui::Animations::VisualElementValueAnimation* __pMoveItemAnimation;
495 Tizen::Ui::Animations::VisualElementValueAnimation* __pZoomInOutItemAnimation;
496 Tizen::Ui::Animations::VisualElementValueAnimation* __pFadeInOutItemtAnimation;
498 static const float SIMPLE_ITEM_ELEMENT_BITMAP_SIZE_RATIO = 0.6f;
499 static const float BACKGROUND_DIMMED_OPACITY = 0.7f;
500 static const float BACKGROUND_DISABLED_OPACITY = 0.3f;
501 static const int DEFAULT_CAPTURED_CONTROL_COUNT = 10;
502 static const int CHECKED_ANIMATION_DURATION = 10;
503 static const int TOUCH_PRESSED_DURATION = 100;
504 static const int TOUCH_RELEASED_DURATION = 30;
505 static const int MAX_CHECKED_COUNT = 10;
506 static const float INSENSITIVE = 0.16f;
507 static const float SENSITIVE = 0.08f;
508 static const float ITEM_TOP_DIVIDER_OPACITY = 0.3f;
509 static const float ITEM_BOTTOM_DIVIDER_OPACITY = 1.0f;
512 }}} // Tizen::Ui::Controls
514 #endif // _FUI_CTRL_INTERNAL_TABLE_VIEW_ITEM_H_