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.cpp
20 * @brief This is the implementation file for _TableViewItem class.
22 * This file contains the implementation of _TableViewItem class.
25 #include <FBaseUtilMath.h>
26 #include <FGrp_BitmapImpl.h>
27 #include "FUi_ResourceManager.h"
28 #include "FUi_UiTouchEvent.h"
29 #include "FUiAnim_VisualElement.h"
30 #include "FUiAnim_ControlVisualElement.h"
31 #include "FUiCtrl_TableViewItem.h"
32 #include "FUiCtrl_TableView.h"
33 #include "FUi_CoordinateSystemUtils.h"
35 #include "FUiCtrl_LabelImpl.h"
36 #include "FUi_Window.h"
38 using namespace Tizen::Base;
39 using namespace Tizen::Base::Runtime;
40 using namespace Tizen::Base::Collection;
41 using namespace Tizen::Ui::Animations;
42 using namespace Tizen::Graphics;
44 namespace Tizen { namespace Ui { namespace Controls
47 _TableViewItemControl::_TableViewItemControl(void)
48 :__pBackgroundBitmap(null)
52 _TableViewItemControl::~_TableViewItemControl(void)
54 if (__pBackgroundBitmap)
56 delete __pBackgroundBitmap;
57 __pBackgroundBitmap = null;
63 _TableViewItemControl::OnDraw(void)
65 Bitmap* pBitmap = GetBackgroundBitmap();
67 FloatRectangle bounds(0.0f, 0.0f, GetBoundsF().width, GetBoundsF().height); // +++ check floating
69 Color bgColor = GetBackgroundColor();
71 Canvas* pCanvas = null;
75 pCanvas = GetCanvasN();
78 SysLog(NID_UI_CTRL, "Cannot get a canvas.");
83 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
86 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap))
88 pCanvas->DrawNinePatchedBitmap(bounds, *pBitmap);
92 FloatRectangle drawingRect(0.0f, 0.0f, bounds.width, bounds.height);
93 pCanvas->DrawBitmap(drawingRect, *pBitmap);
99 if (IsCalledGetCanvasN() == false)
101 GetVisualElement()->SetBackgroundColor(_Colorf((float)bgColor.GetRed() / 255, (float)bgColor.GetGreen() / 255, (float)bgColor.GetBlue() / 255, (float)bgColor.GetAlpha() / 255));
105 pCanvas = GetCanvasN();
108 SysLog(NID_UI_CTRL, "Cannot get a canvas.");
113 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
115 pCanvas->FillRectangle(GetBackgroundColor(), bounds); // +++ check floating
128 _TableViewItemControl::HitTest(const Graphics :: FloatPoint & point)
130 return HIT_TEST_NOWHERE;
133 _TableViewItemControl*
134 _TableViewItemControl::CreateTableViewItemControlN(void)
136 _TableViewItemControl* pItemControl = new (std::nothrow) _TableViewItemControl();
137 SysTryReturn(NID_UI_CTRL, pItemControl, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
138 SysTryCatch(NID_UI_CTRL, GetLastResult() == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
141 pItemControl->AcquireHandle();
151 _TableViewItemControl::SetBackgroundBitmap(const Bitmap& bitmap)
155 Bitmap* pClonedBitmap = _BitmapImpl::CloneN(bitmap);
159 if (__pBackgroundBitmap != null)
161 delete __pBackgroundBitmap;
164 __pBackgroundBitmap = pClonedBitmap;
173 _TableViewItemControl::GetBackgroundBitmap(void) const
175 return __pBackgroundBitmap;
178 _TableViewItem::_TableViewItem(float itemHeight)
182 , __itemHeight(itemHeight)
183 , __itemGroupIndex(-1)
185 , __checkedState(false)
186 , __enabledState(true)
187 , __itemChanged(true)
188 , __reorderMode(false)
189 , __itemSelected(false)
190 , __itemTouchMoved(false)
191 , __childMarginState(false)
192 , __annexStyle(TABLE_VIEW_ANNEX_STYLE_NORMAL)
193 , __drawingStatus(TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL)
194 , __selectionStyle(TABLE_VIEW_ITEM_SELECTION_STYLE_WHOLE)
195 , __itemType(TABLE_VIEW_ITEM_TYPE_NONE)
196 , __pContextItem(null)
197 , __isContextItem(false)
198 , __isContextItemActivated(false)
199 , __checkItemHeightNeeded(false)
200 , __pItemDivider(null)
201 , __pItemTopDivider(null)
204 , __pItemAnnexLeftDivider(null)
205 , __pItemAnnexRightDivider(null)
207 , __pDrawingProperty(null)
208 , __itemDividerEnabled(true)
209 , __pSimpleItemText(null)
210 , __pSimpleItemBitmap(null)
211 , __simpleItemTextSize(0)
212 , __pHeaderFooterItemText(null)
214 , __touchStartPosition(0.0f, 0.0f)
215 , __annexTouchStartPosition(0)
216 , __annexOnOffHandlerMoved(false)
217 , __annexOnOffHandlerPositionX(0.0f)
218 , __childControlCenterAlign(false)
219 , __customHeight(0.0f)
220 , __animationCount(0)
221 , __pAccessibilityElement(null)
222 , __pAccessibilityOnOffElement(null)
223 , __pPressedTimer(null)
224 , __pReleasedTimer(null)
225 , __isPressedTimerEnabled(false)
226 , __isReleasedTimerEnabled(false)
227 , __pressedControl(TABLE_VIEW_ITEM_PRESSED_NONE)
228 , __releasedControl(TABLE_VIEW_ITEM_PRESSED_NONE)
229 , __pCheckedTimer(null)
230 , __isCheckedTimerEnabled(false)
231 , __isCheckedAnimationEnabled(false)
233 , __checkedBounds(FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f))
234 , __isItemLayoutEnabled(false)
235 , __isMoveItemAnimationEnabled(false)
236 , __isZoomInOutItemAnimationEnabled(false)
237 , __isFadeInOutItemAnimationEnabled(false)
238 , __isAnimationCallbackBlocked(false)
239 , __isItemTapSoundEnabled(true)
240 , __isTabSoundPlayed(false)
241 , __isSelectedDetailButton(false)
242 , __isSimpleLastItem(false)
243 , __isSectionItem(false)
244 , __isTouchPressOnScroll(false)
245 , __isTouchCancelOnPressRelease(false)
246 , __pHighlightVisualElement(null)
247 , __pBitmapVisualElement(null)
248 , __pMoveItemAnimation(null)
249 , __pZoomInOutItemAnimation(null)
250 , __pFadeInOutItemtAnimation(null)
252 for (int i = 0; i < 3; i++)
254 __pItemBgBitmap[i] = null;
257 GET_COLOR_CONFIG(TABLEVIEW::ITEM_BG_NORMAL, __colorItemBg[TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL]); // for support opacity 0x00
258 GET_COLOR_CONFIG(TABLEVIEW::ITEM_BG_PRESSED, __colorItemBg[TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED]);
259 GET_COLOR_CONFIG(TABLEVIEW::ITEM_BG_HIGHLIGHTED, __colorItemBg[TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED]);
261 GET_COLOR_CONFIG(TABLEVIEW::ITEM_TEXT_NORMAL, __simpleItemTextColor[TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL]);
262 GET_COLOR_CONFIG(TABLEVIEW::ITEM_TEXT_PRESSED, __simpleItemTextColor[TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED]);
263 GET_COLOR_CONFIG(TABLEVIEW::ITEM_TEXT_HIGHLIGHTED, __simpleItemTextColor[TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED]);
264 GET_COLOR_CONFIG(TABLEVIEW::GROUPITEM_TEXT_NORMAL, __simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_NORMAL]);
265 GET_COLOR_CONFIG(TABLEVIEW::GROUPITEM_TEXT_PRESSED, __simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_PRESSED]);
266 GET_COLOR_CONFIG(TABLEVIEW::ITEM_TEXT_DISABLED, __simpleItemTextColor[TABLE_VIEW_SIMPLEITEM_DRAWING_STATUS_DISABLED]);
269 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
272 pContainer->Activate(true);
273 pContainer->AddListener(*this);
277 _TableViewItem::~_TableViewItem()
279 __isAnimationCallbackBlocked = true;
281 StopTouchPressedTimer();
282 delete __pPressedTimer;
283 __pPressedTimer = null;
285 StopTouchReleasedTimer();
286 delete __pReleasedTimer;
287 __pReleasedTimer = null;
289 _VisualElement* pVisualElement = GetVisualElement();
290 if (pVisualElement != null)
292 if (__pMoveItemAnimation != null)
294 __pMoveItemAnimation->SetVisualElementAnimationTickEventListener(null);
295 __pMoveItemAnimation->SetVisualElementAnimationStatusEventListener(null);
298 if (__pZoomInOutItemAnimation != null)
300 __pZoomInOutItemAnimation->SetVisualElementAnimationTickEventListener(null);
301 __pZoomInOutItemAnimation->SetVisualElementAnimationStatusEventListener(null);
304 if (__pFadeInOutItemtAnimation != null)
306 __pFadeInOutItemtAnimation->SetVisualElementAnimationTickEventListener(null);
307 __pFadeInOutItemtAnimation->SetVisualElementAnimationStatusEventListener(null);
309 pVisualElement->RemoveAllAnimations();
312 for (int j = 0; j < 3; j++)
314 delete __pItemBgBitmap[j];
315 __pItemBgBitmap[j] = null;
318 if (__pHighlightVisualElement != null)
320 __pHighlightVisualElement->RemoveAllAnimations();
321 __pHighlightVisualElement->SetAnimationProvider(null);
322 __pHighlightVisualElement->Destroy();
323 __pHighlightVisualElement = null;
326 if (__pBitmapVisualElement != null)
328 __pBitmapVisualElement->RemoveAllAnimations();
329 __pBitmapVisualElement->SetAnimationProvider(null);
330 __pBitmapVisualElement->Destroy();
331 __pBitmapVisualElement = null;
336 if (GetParent() != null && __isContextItem == true)
338 GetParent()->DetachChild(*this);
341 delete __pItemDivider;
342 __pItemDivider = null;
344 delete __pItemTopDivider;
345 __pItemTopDivider = null;
347 delete __pItemAnnexLeftDivider;
348 __pItemAnnexLeftDivider = null;
350 delete __pItemAnnexRightDivider;
351 __pItemAnnexRightDivider = null;
362 delete __pHeaderFooterItemText;
363 __pHeaderFooterItemText = null;
365 delete __pMoveItemAnimation;
366 __pMoveItemAnimation = null;
368 delete __pZoomInOutItemAnimation;
369 __pZoomInOutItemAnimation = null;
371 delete __pFadeInOutItemtAnimation;
372 __pFadeInOutItemtAnimation = null;
374 if (__isCheckedTimerEnabled)
376 __pCheckedTimer->Cancel();
379 delete __pCheckedTimer;
380 __pCheckedTimer = null;
382 if (__pAccessibilityElement)
384 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
387 pContainer->RemoveAllElement();
389 __pAccessibilityElement = null;
391 if (__pAccessibilityOnOffElement)
393 __pAccessibilityOnOffElement = null;
399 _TableViewItem::CreateTableViewItemN(float itemHeight)
401 result r = E_SUCCESS;
403 _TableViewItem* pItem = null;
404 pItem = new (std::nothrow) _TableViewItem(itemHeight);
405 SysTryReturn(NID_UI_CTRL, pItem, null, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
407 pItem->AcquireHandle();
409 r = pItem->Initialize();
410 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r = E_SYSTEM, "[%s] A system error has been occurred.", GetErrorMessage(E_SYSTEM));
422 _TableViewItem::Initialize(void)
424 GetVisualElement()->SetSurfaceOpaque(false);
426 result r = E_SUCCESS;
428 __pHighlightVisualElement = new (std::nothrow) _VisualElement();
429 SysTryCatch(NID_UI_CTRL, __pHighlightVisualElement != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
431 r = __pHighlightVisualElement->Construct();
432 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to construct Visual Element.", GetErrorMessage(r));
434 r = __pHighlightVisualElement->SetSurfaceOpaque(false);
435 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to set surface opaque.", GetErrorMessage(r));
437 __pHighlightVisualElement->SetImplicitAnimationEnabled(false);
439 r = GetVisualElement()->AttachChild(*__pHighlightVisualElement);
440 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to attach child to the control VisualElement.", GetErrorMessage(r));
442 r = SetItemHighlightBounds(*__pHighlightVisualElement, CalculateItemHighlightBounds());
443 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to set bounds.", GetErrorMessage(r));
445 __pHighlightVisualElement->SetBackgroundColor(_Colorf(0.0f, 0.0f, 0.0f, 0.0f));
446 __pHighlightVisualElement->SetShowState(true);
448 r = __individualSelectionControls.Construct(DEFAULT_CAPTURED_CONTROL_COUNT);
449 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to construct ArrayList", GetErrorMessage(r));
451 SetTouchPressThreshold(SENSITIVE);
453 if (!_FloatCompare(__itemHeight, 0.0f))
455 SetAccessibilityElement();
458 GetAccessibilityContainer()->Activate(false);
463 if (__pHighlightVisualElement != null)
465 __pHighlightVisualElement->RemoveAllAnimations();
466 __pHighlightVisualElement->SetAnimationProvider(null);
467 __pHighlightVisualElement->Destroy();
468 __pHighlightVisualElement = null;
475 _TableViewItem::GetContextItem(void) const
477 return __pContextItem;
481 _TableViewItem::SetContextItem(_TableViewItem* pContextItem)
483 if (pContextItem != null)
485 pContextItem->__isContextItem = true;
488 __pContextItem = pContextItem;
492 _TableViewItem::IsContextItem(void) const
494 return __isContextItem;
498 _TableViewItem::SetContextItemActivation(bool activated)
500 __isContextItemActivated = activated;
504 _TableViewItem::IsContextItemActivated(void) const
506 return __isContextItemActivated;
510 _TableViewItem::CreateItemDimLayer(void)
512 result r = E_SUCCESS;
514 if (__pDimLayer == null)
516 __pDimLayer = _Label::CreateLabelN();
519 SysTryReturn(NID_UI_CTRL, __pDimLayer != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
521 __pDimLayer->SetBackgroundColor(Color(0, 0, 0, BACKGROUND_DIMMED_OPACITY * 0xff));
522 __pDimLayer->SetVisibleState(false);
524 AttachSystemChild(*__pDimLayer);
531 _TableViewItem::CreateItemDivider(void)
533 result r = E_SUCCESS;
535 if (__pItemDivider == null)
537 __pItemDivider = _TableViewItemControl::CreateTableViewItemControlN();
539 SysTryReturn(NID_UI_CTRL, __pItemDivider != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
540 __pItemDivider->SetFocusable(false);
541 AttachSystemChild(*__pItemDivider);
543 _AccessibilityContainer* pContainer = __pItemDivider->GetAccessibilityContainer();
544 pContainer->Activate(false);
547 if (__pItemTopDivider == null)
549 __pItemTopDivider = _TableViewItemControl::CreateTableViewItemControlN();
550 SysTryReturn(NID_UI_CTRL, __pItemTopDivider != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
551 __pItemTopDivider->SetFocusable(false);
552 AttachSystemChild(*__pItemTopDivider);
554 _AccessibilityContainer* pContainer = __pItemTopDivider->GetAccessibilityContainer();
555 pContainer->Activate(false);
562 _TableViewItem::CreateItemAnnexDivider(void)
564 result r = E_SUCCESS;
566 if (__pItemAnnexLeftDivider == null)
568 __pItemAnnexLeftDivider = _TableViewItemControl::CreateTableViewItemControlN();
570 SysTryReturn(NID_UI_CTRL, __pItemAnnexLeftDivider != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
571 __pItemAnnexLeftDivider->SetFocusable(false);
572 AttachSystemChild(*__pItemAnnexLeftDivider);
575 if (__pItemAnnexRightDivider == null)
577 __pItemAnnexRightDivider = _TableViewItemControl::CreateTableViewItemControlN();
578 SysTryReturn(NID_UI_CTRL, __pItemAnnexRightDivider != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
579 __pItemAnnexRightDivider->SetFocusable(false);
580 AttachSystemChild(*__pItemAnnexRightDivider);
587 _TableViewItem::CreateItemCover(void)
589 result r = E_SUCCESS;
591 if (__pItemCover == null)
593 __pItemCover = _TableViewItemControl::CreateTableViewItemControlN();
595 SysTryReturn(NID_UI_CTRL, __pItemCover != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
596 __pItemCover->SetFocusable(false);
597 AttachSystemChild(*__pItemCover);
604 _TableViewItem::CreateCheckBox(void)
606 result r = E_SUCCESS;
608 if (__pItemAnnex == null)
610 float annexWidth = 0.0f;
611 float annexHeight = 0.0f;
612 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
613 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
615 __pItemAnnex = new (std::nothrow) Label();
617 SysTryReturn(NID_UI_CTRL, __pItemAnnex != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
619 float leftMargin = 0.0f;
620 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
622 float itemHeight = ((__customHeight > 0) ? __customHeight : GetBoundsF().height);
623 __pItemAnnex->Construct(FloatRectangle(leftMargin, ((itemHeight - annexHeight) / 2), annexWidth, annexHeight), L"");
624 __pItemAnnex->SetBackgroundColor(Color(0, 0, 0, 0));
625 GetLabelCore(__pItemAnnex)->SetFocusable(true);
627 AttachSystemChild(*GetLabelCore(__pItemAnnex));
635 _TableViewItem::CreateRadioBox(void)
637 result r = E_SUCCESS;
639 if (__pItemAnnex == null)
641 float annexWidth = 0.0f;
642 float annexHeight = 0.0f;
643 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
644 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
646 __pItemAnnex = new (std::nothrow) Label();
648 SysTryReturn(NID_UI_CTRL, __pItemAnnex != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
650 float leftMargin = 0.0f;
651 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
653 float itemHeight = ((__customHeight > 0) ? __customHeight : GetBoundsF().height);
654 __pItemAnnex->Construct(FloatRectangle(leftMargin, ((itemHeight - annexHeight) / 2), annexWidth, annexHeight), L"");
655 __pItemAnnex->SetBackgroundColor(Color(0, 0, 0, 0));
656 GetLabelCore(__pItemAnnex)->SetFocusable(true);
658 AttachSystemChild(*GetLabelCore(__pItemAnnex));
665 _TableViewItem::CreateOnOffButton(void)
667 result r = E_SUCCESS;
669 if (__pItemAnnex == null)
671 float annexWidth = 0.0f;
672 float annexHeight = 0.0f;
674 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
675 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
677 __pItemAnnex = new (std::nothrow) Label();
679 SysTryReturn(NID_UI_CTRL, __pItemAnnex != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
681 float leftMargin = 0.0f;
682 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
684 leftMargin += __pDrawingProperty->scrollMargin;
686 float itemHeight = ((__customHeight > 0) ? __customHeight : GetBoundsF().height);
687 __pItemAnnex->Construct(FloatRectangle((GetBoundsF().width - annexWidth - leftMargin), ((itemHeight - annexHeight) / 2), annexWidth, annexHeight), L"");
688 __pItemAnnex->SetBackgroundColor(Color(0, 0, 0, 0));
689 GetLabelCore(__pItemAnnex)->SetFocusable(true);
691 AttachSystemChild(*GetLabelCore(__pItemAnnex));
698 _TableViewItem::CreateDetailButton(void)
700 result r = E_SUCCESS;
702 if (__pItemAnnex == null)
704 float annexWidth = 0.0f;
705 float annexHeight = 0.0f;
707 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MORE_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
708 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MORE_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
709 __pItemAnnex = new (std::nothrow) Label();
711 SysTryReturn(NID_UI_CTRL, __pItemAnnex != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
713 float leftMargin = 0.0f;
714 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
716 leftMargin += __pDrawingProperty->scrollMargin;
717 float itemHeight = ((__customHeight > 0) ? __customHeight : GetBoundsF().height);
718 __pItemAnnex->Construct(FloatRectangle((GetBoundsF().width - annexWidth - leftMargin), ((itemHeight - annexHeight) / 2), annexWidth, annexHeight), L"");
719 __pItemAnnex->SetBackgroundColor(Color(0, 0, 0, 0));
720 GetLabelCore(__pItemAnnex)->SetFocusable(true);
722 AttachSystemChild(*GetLabelCore(__pItemAnnex));
729 _TableViewItem::GetLabelCore(Label* label)
736 _LabelImpl* pImpl = _LabelImpl::GetInstance(*label);
737 return &pImpl->GetCore();
741 _TableViewItem::ExposeContextItem(FloatRectangle itemBounds, float targetWidth)
744 if (__pDimLayer == null)
746 if (CreateItemDimLayer() != E_SUCCESS)
752 SetBounds(itemBounds);
756 if ((itemBounds.width <= 0) || (itemBounds.width >= targetWidth)) // +++ check floating
763 float rightMargin = 0.0f;
764 float dimLayerOpacity = 0.0f;
766 GET_SHAPE_CONFIG(TABLEVIEW::CONTEXTITEM_RIGHT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, rightMargin);
768 dimLayerOpacity = BACKGROUND_DIMMED_OPACITY - ((itemBounds.width * BACKGROUND_DIMMED_OPACITY) / (targetWidth - rightMargin));
769 dimLayerOpacity = ((dimLayerOpacity < 0) ? 0 : dimLayerOpacity); // +++ check floating
771 __pDimLayer->SetBounds(FloatRectangle(0.0f, 0.0f, itemBounds.width, itemBounds.height));
772 __pDimLayer->SetBackgroundColor(Color(0.0f, 0.0f, 0.0f, dimLayerOpacity * 0xff));
775 __pDimLayer->SetVisibleState(visible);
780 _TableViewItem::DrawItemDimLayer(bool visible)
782 if (__pDimLayer == null)
784 if (CreateItemDimLayer() != E_SUCCESS)
792 FloatDimension itemSize = GetSizeF();
793 __pDimLayer->SetBounds(FloatRectangle(0.0f, 0.0f, itemSize.width, itemSize.height));
794 __pDimLayer->SetBackgroundColor(Color(0, 0, 0, BACKGROUND_DISABLED_OPACITY * 0xff));
797 __pDimLayer->SetVisibleState(visible);
801 _TableViewItem::SetItemWidth(float width)
807 _TableViewItem::SetItemBackgroundBitmap(ListItemState itemState, const Bitmap* pBitmap)
809 Bitmap* pCopyBitmap = null;
811 pCopyBitmap = _BitmapImpl::CloneN(*pBitmap);
812 SysTryReturn(NID_UI_CTRL, pCopyBitmap != null, false, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
814 delete __pItemBgBitmap[itemState];
815 __pItemBgBitmap[itemState] = pCopyBitmap;
818 if (__pItemBgBitmap[TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL] == null &&
819 __pItemBgBitmap[TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED] == null &&
820 __pItemBgBitmap[TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED] == null)
822 if (__pBitmapVisualElement != null)
824 __pBitmapVisualElement->Destroy();
825 __pBitmapVisualElement = null;
830 if (__pBitmapVisualElement == null)
832 FloatRectangle bounds = GetBoundsF();
833 result r = E_SUCCESS;
835 __pBitmapVisualElement = new (std::nothrow) _VisualElement();
836 SysTryCatch(NID_UI_CTRL, __pBitmapVisualElement != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
838 r = __pBitmapVisualElement->Construct();
839 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
841 __pBitmapVisualElement->SetSurfaceOpaque(false);
842 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Failed to set surface opaque.", GetErrorMessage(r));
844 __pBitmapVisualElement->SetImplicitAnimationEnabled(false);
845 __pBitmapVisualElement->SetBounds(FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height));
846 __pBitmapVisualElement->SetShowState(true);
848 GetVisualElement()->AttachChild(*__pBitmapVisualElement);
852 SetItemChanged(true);
855 if (__pBitmapVisualElement != null)
857 __pBitmapVisualElement->RemoveAllAnimations();
858 __pBitmapVisualElement->SetAnimationProvider(null);
859 __pBitmapVisualElement->Destroy();
860 __pBitmapVisualElement = null;
865 Tizen::Graphics::Bitmap*
866 _TableViewItem::GetItemBackgroundBitmap(ListItemState itemState) const
868 return __pItemBgBitmap[itemState];
872 _TableViewItem::SetItemBackgroundColor(ListItemState itemState, const Color bgColor)
874 if (__colorItemBg[itemState] == bgColor)
879 __colorItemBg[itemState] = bgColor;
881 SetItemChanged(true);
885 _TableViewItem::GetItemBackgroundColor(ListItemState itemState) const
887 return __colorItemBg[itemState];
891 _TableViewItem::SetItemStyle(TableViewAnnexStyle style)
893 if (__annexStyle == style)
898 __annexStyle = style;
902 _TableViewItem::SetSelectionStyle(TableViewItemSelectionStyle style)
904 __selectionStyle = style;
909 TableViewItemSelectionStyle
910 _TableViewItem::GetSelectionStyle(void) const
912 return __selectionStyle;
916 _TableViewItem::GetItemHeight(void) const
918 return GetSizeF().height;
922 _TableViewItem::SetItemHeight(int itemHeight)
924 SetItemHeight(_CoordinateSystemUtils::ConvertToFloat(itemHeight));
928 _TableViewItem::SetItemHeight(float itemHeight)
930 if (_FloatCompare(GetSizeF().height, itemHeight))
935 SetSize(FloatDimension(GetSizeF().width, itemHeight));
939 _TableViewItem::SetChecked(bool checked)
941 if (__checkedState == checked)
946 __checkedState = checked;
948 SetItemChanged(true);
952 _TableViewItem::IsChecked(void) const
954 return __checkedState;
958 _TableViewItem::SetCheckedAnimationEnabled(bool enabled)
960 if (__isCheckedAnimationEnabled == enabled)
965 __isCheckedAnimationEnabled = enabled;
967 if (__isCheckedAnimationEnabled == false)
969 StopCheckBoxAnimation();
974 _TableViewItem::SetItemEnabled(bool enabled)
976 if (__enabledState == enabled)
981 __enabledState = enabled;
983 SetEnableState(enabled);
985 SetItemChanged(true);
993 _TableViewItem::IsItemEnabled(void) const
995 return __enabledState;
999 _TableViewItem::SetItemType(const TableViewItemType itemType)
1001 if (__itemType == itemType)
1006 __itemType = itemType;
1008 if (__pContextItem != null)
1010 __pContextItem->SetItemType(__itemType);
1013 if (itemType == TABLE_VIEW_ITEM_TYPE_TITLE)
1016 GET_COLOR_CONFIG(TABLEVIEW::ITEM_BG_PRESSED, titleColor);
1017 if (titleColor == __colorItemBg[TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED])
1019 GET_COLOR_CONFIG(TABLEVIEW::GROUPITEM_BG_PRESSED, __colorItemBg[TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED]);
1021 GetAccessibilityContainer()->Activate(true);
1026 _TableViewItem::SetItemIndex(int groupIndex, int itemIndex)
1028 __itemGroupIndex = groupIndex;
1029 __itemIndex = itemIndex;
1033 _TableViewItem::GetItemIndex(int& groupIndex, int& itemIndex) const
1035 groupIndex = __itemGroupIndex;
1036 itemIndex = __itemIndex;
1041 _TableViewItem::GetItemType(void) const
1047 _TableViewItem::IsReorderMode(void) const
1049 return __reorderMode;
1053 _TableViewItem::SetReorderMode(bool enabled)
1055 __reorderMode = enabled;
1059 _TableViewItem::SetAppInfo(const void* pAppInfo)
1061 __pAppInfo = const_cast<void*>(pAppInfo);
1065 _TableViewItem::GetAppInfo(void) const
1071 _TableViewItem::SetItemChanged(bool changed)
1073 __itemChanged = changed;
1077 _TableViewItem::IsItemChanged(void) const
1079 return __itemChanged;
1083 _TableViewItem::IsAnnexOnOffSliding(void)
1085 return __annexOnOffHandlerMoved;
1089 _TableViewItem::GetItemStyle(void) const
1091 return __annexStyle;
1095 _TableViewItem::DrawItem(FloatRectangle& rcItem, ListItemState itemState, bool itemDivider)
1101 _TableViewItem::SetItemTapSoundEnabled(bool tapSoundEnabled)
1103 bool oldValue = __isItemTapSoundEnabled;
1104 __isItemTapSoundEnabled = tapSoundEnabled;
1109 _TableViewItem::GetItemTapSoundEnabled(void)
1111 return __isItemTapSoundEnabled;
1115 _TableViewItem::DrawAnnexFocus(void)
1119 __pItemAnnex->SetFocus();
1124 Tizen::Graphics::Canvas*
1125 _TableViewItem::OnCanvasRequestedN(const Tizen::Graphics::FloatRectangle& bounds)
1127 Canvas* pCanvas = null;
1129 if (__pBitmapVisualElement != null && __pBitmapVisualElement->GetImageSource().IsEmpty())
1131 Bitmap* pDrawBitmap = __pItemBgBitmap[__drawingStatus];
1132 if (pDrawBitmap != null)
1134 pCanvas = __pBitmapVisualElement->GetCanvasN();
1135 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1136 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
1139 pDrawBitmap->IsNinePatchedBitmap();
1140 DrawBitmap(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height), *pDrawBitmap);
1150 _TableViewItem::FireItemEvent(bool selectedItem)
1154 || __itemType == TABLE_VIEW_ITEM_TYPE_HEADER
1155 || __itemType == TABLE_VIEW_ITEM_TYPE_FOOTER)
1160 _TableView* pParent = dynamic_cast<_TableView*>(GetParent());
1161 if (pParent == null)
1166 TableViewNotifyType eventType = TABLEVIEW_NOTIFY_TYPE_SELECTED_ITEM;
1168 if ((__annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK)
1169 || (__annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO)
1170 || (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING))
1174 eventType = TABLEVIEW_NOTIFY_TYPE_ANNEX_CHECK;
1178 eventType = TABLEVIEW_NOTIFY_TYPE_ANNEX_UNCHECK;
1181 else if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
1185 eventType = TABLEVIEW_NOTIFY_TYPE_ANNEX_MORE;
1188 else if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
1192 eventType = TABLEVIEW_NOTIFY_TYPE_SELECTED_ITEM;
1198 eventType = TABLEVIEW_NOTIFY_TYPE_ANNEX_CHECK;
1202 eventType = TABLEVIEW_NOTIFY_TYPE_ANNEX_UNCHECK;
1207 if (__isItemTapSoundEnabled)
1209 if (!__isTabSoundPlayed)
1211 PLAY_FEEDBACK(_RESOURCE_FEEDBACK_PATTERN_TAP, this);
1215 __isTabSoundPlayed = false;
1216 __checkItemHeightNeeded = true;
1218 int groupIndex = -1;
1220 GetItemIndex(groupIndex, itemIndex);
1221 pParent->FireTableViewItemEvent(groupIndex, itemIndex, eventType, this);
1225 _TableViewItem::FireItemSweepEvent(TableViewSweepDirection direction)
1227 if (HasParent() == false)
1232 _TableView* pParent = dynamic_cast<_TableView*>(GetParent());
1233 if (pParent == null)
1238 int groupIndex = -1;
1240 GetItemIndex(groupIndex, itemIndex);
1242 pParent->FireTableViewItemSweepEvent(groupIndex, itemIndex, direction);
1246 _TableViewItem::OnTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1248 __isTouchCancelOnPressRelease = false;
1250 if (IsContextItem() ||
1251 __isContextItemActivated ||
1252 IsAnimationPlaying() ||
1258 if (IsTouchPressOnScroll())
1263 __annexOnOffHandlerMoved = false;
1264 __touchStartPosition = touchinfo.GetCurrentPosition();
1266 if (&source == this)
1268 __pressedControl = TABLE_VIEW_ITEM_PRESSED_ITEM;
1270 else if (&source == GetLabelCore(__pItemAnnex))
1272 __pressedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX;
1274 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING ||
1275 __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
1277 __annexTouchStartPosition = touchinfo.GetCurrentPosition().x;
1280 else if (IsIndividualSelectionEnabled(source))
1282 __pressedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL;
1286 __pressedControl = TABLE_VIEW_ITEM_PRESSED_NONE;
1289 if (__isReleasedTimerEnabled)
1291 StopTouchReleasedTimer();
1293 _TableView* pParent = dynamic_cast<_TableView*>(GetParent());
1294 if (pParent != null)
1296 int groupIndex = -1;
1298 GetItemIndex(groupIndex, itemIndex);
1299 pParent->FireItemTouchReleasedEventDuringPressing(groupIndex, itemIndex);
1304 if (!IsIndividualSelectionEnabled(source))
1306 __itemSelected = true;
1307 if (unlikely((_AccessibilityManager::IsActivated())))
1309 FireItemTouchPressed();
1313 StartTouchPressedTimer(source, touchinfo);
1322 _TableViewItem::OnTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1324 if (IsReorderMode())
1329 if (IsTouchPressOnScroll())
1331 SetTouchPressOnScroll(false);
1335 if (&source == this)
1337 __releasedControl = TABLE_VIEW_ITEM_PRESSED_ITEM;
1339 else if (&source == GetLabelCore(__pItemAnnex))
1341 __releasedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX;
1343 else if (IsIndividualSelectionEnabled(source))
1345 __releasedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL;
1349 __releasedControl = TABLE_VIEW_ITEM_PRESSED_NONE;
1352 __isTabSoundPlayed = IS_PLAYED_FEEDBACK();
1354 if (!__itemTouchMoved && __isPressedTimerEnabled)
1356 StopTouchPressedTimer();
1358 if (!IsContextItem())
1360 FireItemTouchPressed();
1363 StartTouchReleasedTimer();
1367 FireItemTouchReleased();
1372 _TableViewItem::FireItemTouchPressed()
1374 if (__isTouchCancelOnPressRelease == true)
1379 if (__pressedControl == TABLE_VIEW_ITEM_PRESSED_ITEM)
1381 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED;
1382 SetItemChanged(true);
1385 else if (__pressedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX)
1387 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
1389 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
1390 __isSelectedDetailButton = true;
1393 else if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING ||
1394 __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
1396 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
1400 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED;
1401 SetItemChanged(true);
1407 if (__pressedControl != TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL)
1409 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED;
1410 SetItemChanged(true);
1417 _TableViewItem::FireItemTouchReleased()
1419 if (__isTouchCancelOnPressRelease == true)
1424 bool fireItemEvent = false;
1425 bool selectedItem = true;
1427 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
1429 if (__itemSelected == true)
1431 bool checked = IsChecked();
1432 fireItemEvent = true;
1434 if (__releasedControl == TABLE_VIEW_ITEM_PRESSED_ITEM)
1436 if ((__annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO)
1437 || (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING))
1439 SetChecked(!checked);
1441 else if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK)
1443 SetChecked(!checked);
1444 SetCheckedAnimationEnabled(!checked);
1447 else if (__releasedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX)
1449 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
1451 __isSelectedDetailButton = false;
1453 selectedItem = false;
1455 else if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING ||
1456 __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
1458 bool isPreviousChecked = IsChecked();
1459 AdjustAnnexOnOffHandlerPosition();
1460 selectedItem = false;
1461 if (isPreviousChecked == IsChecked())
1463 fireItemEvent = false;
1468 SetChecked(!checked);
1469 SetCheckedAnimationEnabled(!checked);
1474 if (__releasedControl != TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL)
1476 if ((__annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK)
1477 || (__annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO)
1478 || (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING))
1480 SetChecked(!checked);
1481 SetCheckedAnimationEnabled(!checked);
1486 fireItemEvent = false;
1490 SetItemChanged(true);
1495 if (__releasedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX)
1497 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING ||
1498 __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
1500 bool isPreviousChecked = IsChecked();
1501 AdjustAnnexOnOffHandlerPosition();
1502 fireItemEvent = true;
1503 if (isPreviousChecked == IsChecked())
1505 fireItemEvent = false;
1511 __itemSelected = false;
1512 __annexOnOffHandlerMoved = false;
1513 __itemTouchMoved = false;
1517 FireItemEvent(selectedItem);
1522 _TableViewItem::OnTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1524 if (IsReorderMode())
1529 if (IsTouchPressOnScroll())
1531 SetTouchPressOnScroll(false);
1534 if (__isPressedTimerEnabled)
1536 StopTouchPressedTimer();
1539 bool retVal = false;
1541 if (&source == this)
1543 __itemSelected = false;
1544 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
1546 SetItemChanged(true);
1549 else if (&source == GetLabelCore(__pItemAnnex))
1551 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
1553 __isSelectedDetailButton = false;
1554 __itemSelected = false;
1557 else if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING ||
1558 __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
1560 __annexOnOffHandlerMoved = true;
1561 DrawAnnexOnOffHandler(touchinfo.GetCurrentPosition().x);
1566 __itemSelected = false;
1567 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
1569 SetItemChanged(true);
1575 if (!IsIndividualSelectionEnabled(source))
1577 __itemSelected = false;
1578 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
1580 SetItemChanged(true);
1585 __itemTouchMoved = true;
1591 _TableViewItem::OnTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1593 __isTouchCancelOnPressRelease = true;
1595 if (__isPressedTimerEnabled)
1597 StopTouchPressedTimer();
1600 __annexOnOffHandlerMoved = false;
1601 __itemTouchMoved = false;
1603 __itemSelected = false;
1604 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
1606 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
1608 __isSelectedDetailButton = false;
1611 SetItemChanged(true);
1614 if (&source != this)
1622 _UiTouchEventDelivery
1623 _TableViewItem::OnPreviewTouchPressed(const _Control& source, const _TouchInfo& touchinfo)
1625 if (IsTouchPressOnScroll())
1627 SetTouchPressOnScroll(false);
1628 return _UI_TOUCH_EVENT_DELIVERY_NO;
1630 return _UI_TOUCH_EVENT_DELIVERY_FORCED_YES;
1633 _UiTouchEventDelivery
1634 _TableViewItem::OnPreviewTouchReleased(const _Control& source, const _TouchInfo& touchinfo)
1636 return _UI_TOUCH_EVENT_DELIVERY_FORCED_YES;
1639 _UiTouchEventDelivery
1640 _TableViewItem::OnPreviewTouchMoved(const _Control& source, const _TouchInfo& touchinfo)
1642 return _UI_TOUCH_EVENT_DELIVERY_YES;
1645 _UiTouchEventDelivery
1646 _TableViewItem::OnPreviewTouchCanceled(const _Control& source, const _TouchInfo& touchinfo)
1648 return _UI_TOUCH_EVENT_DELIVERY_FORCED_YES;
1652 _TableViewItem::OnDraw(void)
1654 if (IsItemChanged() == true)
1656 DrawItemBackground();
1660 DrawSectionStyleBackgroundCover();
1662 SetItemChanged(false);
1667 _TableViewItem::OnChildAttached(const _Control& child)
1669 _Control* pControl = const_cast<_Control*>(&child);
1670 _AccessibilityContainer* pContainer = pControl->GetAccessibilityContainer();
1672 if (__individualSelectionControls.Contains(child))
1674 pContainer->Activate(true);
1678 pContainer->Activate(false);
1680 if (!(pControl == static_cast<_Control*>(__pItemAnnexLeftDivider)
1681 || pControl == static_cast<_Control*>(__pItemAnnexRightDivider)
1682 || pControl == static_cast<_Control*>(__pItemCover)
1683 || pControl == static_cast<_Control*>(__pItemDivider)
1684 || pControl== static_cast<_Control*>(__pItemTopDivider)))
1686 GetAccessibilityContainer()->Activate(true);
1690 DeactivateChildAccessibilityContainer(child);
1692 pControl->SetTouchPressThreshold(SENSITIVE);
1694 FloatRectangle bounds = child.GetBoundsF();
1696 if (__pDrawingProperty != null && __pDrawingProperty->groupedLookEnabled)
1698 float groupedBarMargin = 0.0f;
1699 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_BAR_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, groupedBarMargin);
1701 bounds.x += groupedBarMargin;
1704 if ((__annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK) || (__annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO))
1706 if (GetLabelCore(__pItemAnnex) == &child ||
1707 GetLabelCore(__pSimpleItemBitmap) == &child ||
1708 GetLabelCore(__pSimpleItemText) == &child)
1713 float leftMargin = 0.0f;
1714 float annexWidth = 0.0f;
1716 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
1717 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
1719 bounds.x += (leftMargin * 2) + annexWidth;
1722 pControl->SetBounds(bounds);
1726 _TableViewItem::OnChildDetached(const _Control& child)
1728 if (__individualSelectionControls.Contains(child))
1730 __individualSelectionControls.Remove(child, false);
1733 _Label* pSimpleItemTextCore = GetLabelCore(__pSimpleItemText);
1734 _Label* pSimpleItemBitmapCore = GetLabelCore(__pSimpleItemBitmap);
1736 if (&child == pSimpleItemTextCore)
1738 __pSimpleItemText = null;
1741 if (&child == pSimpleItemBitmapCore)
1743 __pSimpleItemBitmap = null;
1748 _TableViewItem::OnTimerExpired(Tizen::Base::Runtime::Timer& timer)
1750 result r = E_SUCCESS;
1752 if (&timer == __pCheckedTimer)
1754 if (__checkedCount < MAX_CHECKED_COUNT)
1756 r = __pCheckedTimer->Start(CHECKED_ANIMATION_DURATION);
1757 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1760 r = PlayCheckBoxAnimation();
1761 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1763 if (__checkedCount < MAX_CHECKED_COUNT)
1770 __isCheckedAnimationEnabled = false;
1771 __isCheckedTimerEnabled = false;
1774 else if (&timer == __pPressedTimer)
1776 __isPressedTimerEnabled = false;
1777 FireItemTouchPressed();
1779 else if (&timer == __pReleasedTimer)
1781 __isReleasedTimerEnabled = false;
1782 FireItemTouchReleased();
1787 _TableViewItem::StartTouchPressedTimer(const _Control& source, const _TouchInfo& touchinfo)
1789 result r = E_SUCCESS;
1791 if (__pPressedTimer == null)
1793 __pPressedTimer = new (std::nothrow) Timer();
1794 SysTryCatch(NID_UI_CTRL, __pPressedTimer != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1796 r = __pPressedTimer->Construct(*this);
1797 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage);
1800 if (__isPressedTimerEnabled == false)
1802 r = __pPressedTimer->Start(TOUCH_PRESSED_DURATION);
1803 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1805 __isPressedTimerEnabled = true;
1811 if (__isPressedTimerEnabled && __pPressedTimer != null)
1813 __pPressedTimer->Cancel();
1816 delete __pPressedTimer;
1817 __pPressedTimer = null;
1823 _TableViewItem::StopTouchPressedTimer(void)
1825 result r = E_SUCCESS;
1827 if (__pPressedTimer == null)
1832 if (__isPressedTimerEnabled)
1834 r = __pPressedTimer->Cancel();
1835 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1838 __isPressedTimerEnabled = false;
1844 _TableViewItem::StartTouchReleasedTimer()
1846 result r = E_SUCCESS;
1848 if (__pReleasedTimer == null)
1850 __pReleasedTimer = new (std::nothrow) Timer();
1851 SysTryCatch(NID_UI_CTRL, __pReleasedTimer != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1854 r = __pReleasedTimer->Construct(*this);
1855 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage);
1858 if (!__isReleasedTimerEnabled)
1860 r = __pReleasedTimer->Start(TOUCH_RELEASED_DURATION);
1861 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1863 __isReleasedTimerEnabled = true;
1868 if (__isReleasedTimerEnabled && __pReleasedTimer != null)
1870 __pReleasedTimer->Cancel();
1873 delete __pReleasedTimer;
1874 __pReleasedTimer = null;
1880 _TableViewItem::StopTouchReleasedTimer(void)
1882 result r = E_SUCCESS;
1884 if (__pReleasedTimer == null)
1889 if (__isReleasedTimerEnabled)
1891 r = __pReleasedTimer->Cancel();
1892 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1895 __isReleasedTimerEnabled = false;
1901 _TableViewItem::OnAncestorInputEnableStateChanged(const _Control& control)
1903 if (__isPressedTimerEnabled)
1905 StopTouchPressedTimer();
1908 __annexOnOffHandlerMoved = false;
1909 __itemTouchMoved = false;
1911 __itemSelected = false;
1912 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
1914 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
1916 __isSelectedDetailButton = false;
1919 SetItemChanged(true);
1924 _TableViewItem::StartCheckBoxAnimation(void)
1926 result r = E_SUCCESS;
1928 if (__pCheckedTimer == null)
1930 __pCheckedTimer = new (std::nothrow) Timer();
1931 SysTryCatch(NID_UI_CTRL, __pCheckedTimer != null, r = E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
1934 r = __pCheckedTimer->Construct(*this);
1935 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage);
1938 if (__isCheckedTimerEnabled == false)
1940 r = __pCheckedTimer->Start(CHECKED_ANIMATION_DURATION);
1941 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Propagating.");
1943 __isCheckedTimerEnabled = true;
1949 if (__isCheckedTimerEnabled)
1951 __pCheckedTimer->Cancel();
1954 delete __pCheckedTimer;
1955 __pCheckedTimer = null;
1961 _TableViewItem::StopCheckBoxAnimation(void)
1963 result r = E_SUCCESS;
1965 SysTryReturnVoidResult(NID_UI_CTRL, __pCheckedTimer != null, E_SYSTEM, "[%s] A system error has been occurred. Timer is invalid.", GetErrorMessage(E_SYSTEM));
1968 if (__isCheckedTimerEnabled)
1970 r = __pCheckedTimer->Cancel();
1971 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
1975 __isCheckedAnimationEnabled = false;
1976 __isCheckedTimerEnabled = false;
1982 _TableViewItem::PlayCheckBoxAnimation(void)
1984 Bitmap* pCheckBox = null;
1985 Bitmap* pCheckBoxBg = null;
1986 Bitmap* pMergeBitmap = null;
1987 Canvas* pCanvas = null;
1988 result r = E_SUCCESS;
1990 FloatRectangle bounds;
1992 float annexWidth = 0.0f;
1993 float annexHeight = 0.0f;
1995 if (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL)
1997 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBoxBg);
1999 else if ((__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED) || (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED))
2001 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_BG_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBoxBg);
2003 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pCheckBoxBg != null), , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
2005 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_CHECK_MARK_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBox);
2006 SysTryCatch(NID_UI_CTRL,(r == E_SUCCESS) && (pCheckBox != null), , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
2008 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
2009 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
2011 bounds.SetBounds(0, 0, annexWidth, annexHeight);
2013 pCanvas = new (std::nothrow) Canvas();
2014 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2016 r = pCanvas->Construct(bounds);
2017 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
2020 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pCheckBoxBg), *pCheckBoxBg);
2022 __checkedBounds = CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pCheckBox);
2023 if (IsChecked() == true)
2025 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pCheckBox))
2027 FloatRectangle drawingRect(__checkedBounds.x, __checkedBounds.y, __checkedBounds.width, __checkedBounds.height);
2028 r = pCanvas->DrawNinePatchedBitmap(drawingRect, *pCheckBox); // +++ check floating
2032 FloatRectangle bitmapSourceRect(0.0f, 0.0f, pCheckBox->GetWidthF()*__checkedCount * 0.1, pCheckBox->GetHeightF());
2033 FloatRectangle drawingRect(__checkedBounds.x, __checkedBounds.y, __checkedBounds.width * __checkedCount * 0.1, __checkedBounds.height);
2034 r = pCanvas->DrawBitmap(drawingRect, *pCheckBox, bitmapSourceRect); // +++ check floating
2038 pMergeBitmap = new (std::nothrow) Bitmap();
2039 SysTryCatch(NID_UI_CTRL, pMergeBitmap != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2041 pMergeBitmap->Construct(*pCanvas, bounds);
2042 _BitmapImpl::ConvertToNonpremultiplied(*pMergeBitmap, true);
2046 __pItemAnnex->SetBackgroundBitmap(*pMergeBitmap);
2047 __pItemAnnex->Invalidate(false);
2053 delete pMergeBitmap;
2060 _TableViewItem::SetItemLayoutEnabled(bool enabled)
2062 __isItemLayoutEnabled = enabled;
2066 _TableViewItem::GetItemLayoutEnabled(void)
2068 return __isItemLayoutEnabled;
2072 _TableViewItem::OnBoundsChanged(void)
2074 if (__checkItemHeightNeeded && HasParent())
2076 _TableView* pParent = dynamic_cast<_TableView*>(GetParent());
2077 if (pParent != null)
2079 int groupIndex = -1;
2081 GetItemIndex(groupIndex, itemIndex);
2083 pParent->CheckItemHeightAndRefreshLayout(groupIndex, itemIndex);
2086 __checkItemHeightNeeded = false;
2089 AdjustAnnexBounds();
2091 SetItemHighlightBounds(*__pHighlightVisualElement, CalculateItemHighlightBounds());
2093 if (__pHeaderFooterItemText != null)
2095 FloatRectangle textBounds = __pHeaderFooterItemText->GetBoundsF();
2096 textBounds.width = GetBoundsF().width;
2098 if (__itemType == TABLE_VIEW_ITEM_TYPE_FOOTER)
2100 textBounds.x -= __pDrawingProperty->scrollMargin;
2103 __pHeaderFooterItemText->SetBounds(textBounds);
2106 if (__pBitmapVisualElement != null)
2108 FloatRectangle bounds = GetBoundsF();
2109 __pBitmapVisualElement->SetBounds(FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height));
2112 if (__pAccessibilityElement != null)
2114 __pAccessibilityElement->SetBounds(FloatRectangle(0.0f,0.0f, GetBoundsF().width, GetBoundsF().height));
2119 _TableViewItem::SetDrawingProperty(_ItemDrawingProperty* pDrawingProperty)
2122 SysTryReturnVoidResult(NID_UI_CTRL, pDrawingProperty != null, E_INVALID_ARG, "[%s] Invalid argument(s) is used. The pDrawingProperty is null.", GetErrorMessage(E_INVALID_ARG));
2124 __pDrawingProperty = pDrawingProperty;
2126 if (__pDrawingProperty->sectionStyleEnabled == true &&
2132 if (__pDrawingProperty->itemDividerEnabled)
2134 CreateItemDivider();
2140 _ItemDrawingProperty*
2141 _TableViewItem::GetDrawingProperty(void)
2143 return __pDrawingProperty;
2147 _TableViewItem::DrawItemBackground(void)
2149 Canvas* pCanvas = null;
2150 Bitmap* pDrawBitmap = __pItemBgBitmap[__drawingStatus];
2151 Color bgColor = __colorItemBg[__drawingStatus];
2152 FloatRectangle bounds = GetBoundsF();
2154 SetItemHighlightBounds(*__pHighlightVisualElement, CalculateItemHighlightBounds());
2155 __pHighlightVisualElement->SetBackgroundColor(_Colorf(0.0f, 0.0f, 0.0f, 0.0f));
2157 if (pDrawBitmap != null && __enabledState)
2159 if (__pBitmapVisualElement == null)
2164 String imagePath = null;
2165 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pDrawBitmap) == false)
2167 imagePath = _BitmapImpl::GetInstance(*pDrawBitmap)->GetFileName();
2170 if (imagePath.IsEmpty() == false)
2172 __pBitmapVisualElement->SetBackgroundColor(_Colorf((float)bgColor.GetRed() /255, (float)bgColor.GetGreen() / 255, (float)bgColor.GetBlue() / 255, (float)bgColor.GetAlpha() / 255));
2173 __pBitmapVisualElement->SetImageSource(imagePath);
2177 pCanvas = __pBitmapVisualElement->GetCanvasN();
2178 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2179 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
2182 DrawBitmap(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height), *pDrawBitmap);
2186 if (IsContextItem())
2188 DrawContextItemBackground();
2190 else if (__pDrawingProperty->sectionStyleEnabled == true)
2192 DrawSectionStyleBackground();
2198 if (__itemType == TABLE_VIEW_ITEM_TYPE_HEADER || __itemType == TABLE_VIEW_ITEM_TYPE_FOOTER)
2200 SetBackgroundColor(Color(0, 0, 0, 0));
2201 __pHighlightVisualElement->SetBackgroundColor(_Colorf(0.0f, 0.0f, 0.0f, 0.0f));
2203 else if (__itemType == TABLE_VIEW_ITEM_TYPE_TITLE)
2205 __pHighlightVisualElement->SetBackgroundColor(_Colorf((float)bgColor.GetRed() / 255.0f, (float)bgColor.GetGreen() / 255.0f, (float)bgColor.GetBlue() / 255.0f, (float)bgColor.GetAlpha() / 255.0f));
2209 SetBackgroundColor(__colorItemBg[TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL]);
2211 __pHighlightVisualElement->SetBackgroundColor(_Colorf((float)bgColor.GetRed() / 255.0f, (float)bgColor.GetGreen() / 255.0f, (float)bgColor.GetBlue() / 255.0f, (float)bgColor.GetAlpha() / 255.0f));
2213 if (__pDrawingProperty->groupedLookEnabled == true)
2221 GET_COLOR_CONFIG(TABLEVIEW::ITEM_BG_DISABLED, bgColor);
2222 SetBackgroundColor(bgColor);
2223 __pHighlightVisualElement->SetBackgroundColor(_Colorf((float)bgColor.GetRed() / 255.0f, (float)bgColor.GetGreen() / 255.0f, (float)bgColor.GetBlue() / 255.0f, (float)bgColor.GetAlpha() / 255.0f));
2225 if (__pDrawingProperty->groupedLookEnabled == true)
2237 if (__pBitmapVisualElement != null)
2239 __pBitmapVisualElement->RemoveAllAnimations();
2240 __pBitmapVisualElement->SetAnimationProvider(null);
2241 __pBitmapVisualElement->Destroy();
2242 __pBitmapVisualElement = null;
2247 _TableViewItem::DrawGroupedLook(void)
2249 if (IsTitleStyleItem() || IsContextItem())
2255 Color outlineColor = __pDrawingProperty->dividerColor;
2257 float barWidth = 0.0f;
2259 Canvas* pCanvas = GetVisualElement()->GetCanvasN();
2260 SysTryReturnVoidResult(NID_UI_CTRL, pCanvas != null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(GetLastResult()));
2262 FloatRectangle bounds = GetBoundsF();
2263 pCanvas->SetBackgroundColor(GetBackgroundColor());
2266 GET_COLOR_CONFIG(TABLEVIEW::GROUPITEM_BAR_NORMAL, barColor);
2267 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_BAR_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, barWidth);
2269 pCanvas->FillRectangle(barColor, FloatRectangle(0.0f, 0.0f, barWidth, bounds.height));
2271 if (__pDrawingProperty->sectionStyleEnabled == true)
2273 pCanvas->FillRectangle(outlineColor, FloatRectangle(bounds.width - 1.0f, 0.0f, 1.0f, bounds.height));
2275 if (__itemType == TABLE_VIEW_ITEM_TYPE_TOP || __itemType == TABLE_VIEW_ITEM_TYPE_ONE)
2277 pCanvas->FillRectangle(outlineColor, FloatRectangle(0.0f, 0.0f, bounds.width, 1.0f));
2285 _TableViewItem::DrawSectionStyleBackground(void)
2287 Canvas* pCanvas = null;
2288 Bitmap* pSectionBg = null;
2289 Bitmap* pSectionPressBg = null;
2290 Bitmap* pSectionDisabledBg = null;
2291 Bitmap* pReplacementSectionPressBg = null;
2292 Bitmap* pReplacementSectionBg = null;
2293 Color bgColor = __colorItemBg[__drawingStatus];
2294 FloatRectangle bounds = GetBoundsF();
2295 float dividerHeight = 0.0f;
2297 result r = E_SUCCESS;
2299 pCanvas = GetVisualElement()->GetCanvasN();
2300 SysTryReturnVoidResult(NID_UI_CTRL, pCanvas != null, GetLastResult(), "[%s] Propagating.", GetErrorMessage(r));
2302 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
2305 if (__itemType == TABLE_VIEW_ITEM_TYPE_ONE)
2307 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_SINGLE_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBg);
2309 else if (__itemType == TABLE_VIEW_ITEM_TYPE_TOP)
2311 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_TOP_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBg);
2313 else if (__itemType == TABLE_VIEW_ITEM_TYPE_MIDDLE)
2315 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_CENTER_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBg);
2317 else if (__itemType == TABLE_VIEW_ITEM_TYPE_BOTTOM)
2319 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_BOTTOM_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBg);
2325 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2329 if (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED || __drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED)
2331 if (__itemType == TABLE_VIEW_ITEM_TYPE_ONE)
2333 if (IS_CUSTOM_BITMAP(TABLEVIEW::SECTIONITEM_SINGLE_BG_PRESSED))
2335 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_SINGLE_BG_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionPressBg);
2336 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2339 else if (__itemType == TABLE_VIEW_ITEM_TYPE_TOP)
2341 if (IS_CUSTOM_BITMAP(TABLEVIEW::SECTIONITEM_TOP_BG_PRESSED))
2343 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_TOP_BG_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionPressBg);
2344 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2347 else if (__itemType == TABLE_VIEW_ITEM_TYPE_MIDDLE)
2349 if (IS_CUSTOM_BITMAP(TABLEVIEW::SECTIONITEM_CENTER_BG_PRESSED))
2351 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_CENTER_BG_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionPressBg);
2352 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2355 else if (__itemType == TABLE_VIEW_ITEM_TYPE_BOTTOM)
2357 if (IS_CUSTOM_BITMAP(TABLEVIEW::SECTIONITEM_BOTTOM_BG_PRESSED))
2359 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_BOTTOM_BG_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionPressBg);
2360 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2364 GET_FIXED_VALUE_CONFIG(TABLEVIEW::ITEM_DIVIDER_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, dividerHeight);
2366 if (pSectionPressBg)
2368 pReplacementSectionPressBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pSectionPressBg, Color::GetColor(COLOR_ID_MAGENTA), bgColor);
2372 pReplacementSectionPressBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pSectionBg, Color::GetColor(COLOR_ID_MAGENTA), bgColor);
2375 DrawBitmap(*pCanvas, FloatRectangle(0.0f, dividerHeight, bounds.width, bounds.height - (dividerHeight * 2)), *pReplacementSectionPressBg);
2379 if (bgColor != null)
2381 pReplacementSectionBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pSectionBg, Color::GetColor(COLOR_ID_MAGENTA), bgColor);
2385 pReplacementSectionBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pSectionBg, Color::GetColor(COLOR_ID_MAGENTA), __pDrawingProperty->sectionStyleBgColor);
2388 DrawBitmap(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height), *pReplacementSectionBg);
2393 if (__itemType == TABLE_VIEW_ITEM_TYPE_ONE)
2395 if (IS_CUSTOM_BITMAP(TABLEVIEW::SECTIONITEM_SINGLE_BG_DISABLED))
2397 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_SINGLE_BG_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionDisabledBg);
2398 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2401 else if (__itemType == TABLE_VIEW_ITEM_TYPE_TOP)
2403 if (IS_CUSTOM_BITMAP(TABLEVIEW::SECTIONITEM_TOP_BG_DISABLED))
2405 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_TOP_BG_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionDisabledBg);
2406 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2409 else if (__itemType == TABLE_VIEW_ITEM_TYPE_MIDDLE)
2411 if (IS_CUSTOM_BITMAP(TABLEVIEW::SECTIONITEM_CENTER_BG_DISABLED))
2413 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_CENTER_BG_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionDisabledBg);
2414 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2417 else if (__itemType == TABLE_VIEW_ITEM_TYPE_BOTTOM)
2419 if (IS_CUSTOM_BITMAP(TABLEVIEW::SECTIONITEM_BOTTOM_BG_DISABLED))
2421 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_BOTTOM_BG_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionDisabledBg);
2422 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2426 GET_COLOR_CONFIG(TABLEVIEW::ITEM_BG_DISABLED, bgColor);
2427 if (pSectionDisabledBg)
2429 pReplacementSectionBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pSectionDisabledBg, Color::GetColor(COLOR_ID_MAGENTA), bgColor);
2433 pReplacementSectionBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pSectionBg, Color::GetColor(COLOR_ID_MAGENTA), bgColor);
2435 DrawBitmap(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height), *pReplacementSectionBg);
2438 if (__pDrawingProperty->groupedLookEnabled == true)
2442 float barWidth = 0.0f;
2443 float barMargin = 0.0f;
2445 GET_COLOR_CONFIG(TABLEVIEW::GROUPITEM_BAR_NORMAL, barColor);
2446 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_BAR_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, barWidth);
2447 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_BAR_TOP_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, barMargin);
2449 pCanvas->FillRectangle(barColor, FloatRectangle(0.0f, barMargin, barWidth, bounds.height-barMargin));
2454 delete pSectionPressBg;
2455 delete pSectionDisabledBg;
2456 delete pReplacementSectionPressBg;
2457 delete pReplacementSectionBg;
2462 _TableViewItem::DrawSectionStyleBackgroundCover(void)
2464 if (!__pDrawingProperty->sectionStyleEnabled ||
2465 __pItemCover == null)
2470 Bitmap* pSectionBgCoverEf = null;
2471 Bitmap* pReplacementSectionBgEf = null;
2472 Bitmap* pReplacementSectionBg = null;
2473 Bitmap* pSectionBgCoverBg = null;
2474 Bitmap* pMergeBitmap = null;
2475 Canvas* pCanvas = null;
2478 result r = E_SUCCESS;
2479 FloatRectangle bounds = GetBoundsF();
2480 if (__itemType == TABLE_VIEW_ITEM_TYPE_ONE)
2482 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_SINGLE_COVER_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBgCoverEf);
2484 else if (__itemType == TABLE_VIEW_ITEM_TYPE_TOP)
2486 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_TOP_COVER_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBgCoverEf);
2488 else if (__itemType == TABLE_VIEW_ITEM_TYPE_MIDDLE)
2490 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_CENTER_COVER_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBgCoverEf);
2492 else if (__itemType == TABLE_VIEW_ITEM_TYPE_BOTTOM)
2494 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_BOTTOM_COVER_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBgCoverEf);
2500 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2502 if (__itemType == TABLE_VIEW_ITEM_TYPE_ONE)
2504 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_SINGLE_COVER_ROUND_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBgCoverBg);
2506 else if (__itemType == TABLE_VIEW_ITEM_TYPE_TOP)
2508 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_TOP_COVER_ROUND_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBgCoverBg);
2510 else if (__itemType == TABLE_VIEW_ITEM_TYPE_MIDDLE)
2512 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_CENTER_COVER_ROUND_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBgCoverBg);
2514 else if (__itemType == TABLE_VIEW_ITEM_TYPE_BOTTOM)
2516 r = GET_BITMAP_CONFIG_N(TABLEVIEW::SECTIONITEM_BOTTOM_COVER_ROUND_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pSectionBgCoverBg);
2522 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. SectionStyle image load failed", GetErrorMessage(E_SYSTEM) );
2524 __pItemCover->SetBounds(FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height));
2528 _TableView* pParent = dynamic_cast<_TableView*>(GetParent());
2529 SysTryCatch(NID_UI_CTRL, pParent != null, , E_SYSTEM, "[%s] A system error has been occurred. SectionTableView load failed", GetErrorMessage(E_SYSTEM) );
2531 bgColor = pParent->GetBackgroundColor();
2535 GET_COLOR_CONFIG(TABLEVIEW::ITEM_BG_DISABLED, bgColor);
2538 pReplacementSectionBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pSectionBgCoverBg, Color::GetColor(COLOR_ID_MAGENTA), bgColor);
2539 pReplacementSectionBgEf = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pSectionBgCoverEf, Color::GetColor(COLOR_ID_MAGENTA), bgColor);
2541 pCanvas = new (std::nothrow) Canvas();
2542 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2543 pCanvas->Construct(FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height));
2544 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
2547 DrawBitmap(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height), *pReplacementSectionBg);
2548 DrawBitmap(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height), *pReplacementSectionBgEf);
2550 pMergeBitmap = new (std::nothrow) Bitmap();
2551 SysTryCatch(NID_UI_CTRL, pMergeBitmap != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2553 pMergeBitmap->Construct(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height));
2555 _BitmapImpl::ConvertToNonpremultiplied(*pMergeBitmap, true);
2557 __pItemCover->SetBackgroundBitmap(*pMergeBitmap);
2560 delete pSectionBgCoverEf;
2561 delete pReplacementSectionBgEf;
2562 delete pReplacementSectionBg;
2563 delete pSectionBgCoverBg;
2565 delete pMergeBitmap;
2569 _TableViewItem::DrawContextItemBackground(void)
2571 Canvas* pCanvas = null;
2572 Bitmap* pContextBg = null;
2573 Bitmap* pContextBgEf = null;
2574 Bitmap* pReplacementContextBg = null;
2575 Color bgColor = __colorItemBg[__drawingStatus];
2577 FloatRectangle bounds = GetBoundsF();
2578 result r = E_SUCCESS;
2580 r = GET_BITMAP_CONFIG_N(TABLEVIEW::QUICK_MENU_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pContextBg);
2581 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. ContextItem image load failed", GetErrorMessage(E_SYSTEM));
2583 r = GET_BITMAP_CONFIG_N(TABLEVIEW::QUICK_MENU_BG_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, pContextBgEf);
2584 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] A system error has been occurred. ContextItem image load failed", GetErrorMessage(E_SYSTEM));
2586 pCanvas = GetVisualElement()->GetCanvasN();
2587 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2589 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
2594 if (bgColor == null)
2596 GET_COLOR_CONFIG(TABLEVIEW::CONTEXTITEM_BG_NORMAL, bgColor);
2601 GET_COLOR_CONFIG(TABLEVIEW::ITEM_BG_DISABLED, bgColor);
2603 pReplacementContextBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pContextBg, Color::GetColor(COLOR_ID_MAGENTA), bgColor);
2604 SysTryCatch(NID_UI_CTRL, pReplacementContextBg != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2606 DrawBitmap(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height), *pReplacementContextBg);
2607 DrawBitmap(*pCanvas, FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height), *pContextBgEf);
2612 delete pContextBgEf;
2613 delete pReplacementContextBg;
2618 _TableViewItem::CreateAnnexStyle(void)
2620 switch (__annexStyle)
2622 case TABLE_VIEW_ANNEX_STYLE_MARK:
2625 case TABLE_VIEW_ANNEX_STYLE_RADIO:
2628 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
2629 CreateOnOffButton();
2631 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER:
2632 CreateItemAnnexDivider();
2633 CreateOnOffButton();
2635 case TABLE_VIEW_ANNEX_STYLE_DETAILED:
2636 CreateDetailButton();
2644 _TableViewItem::DrawAnnexStyle(void)
2646 switch (__annexStyle)
2648 case TABLE_VIEW_ANNEX_STYLE_MARK:
2651 case TABLE_VIEW_ANNEX_STYLE_RADIO:
2654 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
2657 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER:
2658 DrawItemAnnexDivider();
2661 case TABLE_VIEW_ANNEX_STYLE_DETAILED:
2670 _TableViewItem::DrawCheckBox(void)
2672 Bitmap* pCheckBox = null;
2673 Bitmap* pCheckBoxBg = null;
2674 Bitmap* pMergeBitmap = null;
2675 Canvas* pCanvas = null;
2676 result r = E_SUCCESS;
2678 FloatRectangle bounds;
2679 float annexWidth = 0.0f;
2680 float annexHeight = 0.0f;
2684 if (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL)
2686 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBoxBg);
2687 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pCheckBoxBg != null), , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
2689 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_CHECK_MARK_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBox);
2690 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pCheckBox != null), , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
2692 else if ((__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED) || (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED))
2694 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_BG_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBoxBg);
2695 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pCheckBoxBg != null), , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
2697 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_CHECK_MARK_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBox);
2698 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pCheckBox != null), , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
2704 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_BG_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBoxBg);
2705 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pCheckBoxBg != null), , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
2707 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CHECKBOX_CHECK_MARK_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pCheckBox);
2708 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pCheckBox != null), , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
2711 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
2712 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
2714 bounds.SetBounds(0.0f, 0.0f, annexWidth, annexHeight);
2716 pCanvas = new (std::nothrow) Canvas();
2717 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2719 pCanvas->Construct(bounds);
2720 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
2723 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pCheckBoxBg), *pCheckBoxBg);
2725 if (__isCheckedAnimationEnabled == true)
2727 StartCheckBoxAnimation();
2731 if (IsChecked() == true && pCheckBox != null)
2733 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pCheckBox), *pCheckBox);
2737 pMergeBitmap = new (std::nothrow) Bitmap();
2738 SysTryCatch(NID_UI_CTRL, pMergeBitmap != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2740 pMergeBitmap->Construct(*pCanvas, bounds);
2741 _BitmapImpl::ConvertToNonpremultiplied(*pMergeBitmap, true);
2743 __pItemAnnex->SetBackgroundBitmap(*pMergeBitmap);
2744 __pItemAnnex->Invalidate(false);
2749 delete pMergeBitmap;
2756 _TableViewItem::DrawRadioBox(void)
2758 Bitmap* pRadioButton = null;
2759 Bitmap* pRadioButtonBg = null;
2760 Bitmap* pMergeBitmap = null;
2761 Canvas* pCanvas = null;
2762 result r = E_SUCCESS;
2764 FloatRectangle bounds;
2765 float annexWidth = 0.0f;
2766 float annexHeight = 0.0f;
2770 if (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL)
2772 r = GET_BITMAP_CONFIG_N(TABLEVIEW::RADIOBUTTON_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pRadioButtonBg);
2773 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pRadioButtonBg != null), , E_SYSTEM, "[%s] A system error has been occurred. RadioButtonBg image load failed", GetErrorMessage(E_SYSTEM));
2775 r = GET_BITMAP_CONFIG_N(TABLEVIEW::RADIOBUTTON_BUTTON_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pRadioButton);
2776 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pRadioButton != null), , E_SYSTEM, "[%s] A system error has been occurred.CheckBox image load failed", GetErrorMessage(E_SYSTEM));
2778 else if ((__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED) || (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED))
2780 r = GET_BITMAP_CONFIG_N(TABLEVIEW::RADIOBUTTON_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pRadioButtonBg);
2781 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pRadioButtonBg != null), , E_SYSTEM, "[%s] A system error has been occurred. RadioButtonBg image load failed", GetErrorMessage(E_SYSTEM));
2784 r = GET_BITMAP_CONFIG_N(TABLEVIEW::RADIOBUTTON_BUTTON_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pRadioButton);
2785 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pRadioButton != null), , E_SYSTEM, "[%s] A system error has been occurred.CheckBox image load failed", GetErrorMessage(E_SYSTEM));
2790 r = GET_BITMAP_CONFIG_N(TABLEVIEW::RADIOBUTTON_NORMAL_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pRadioButtonBg);
2791 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pRadioButtonBg != null), , E_SYSTEM, "[%s] A system error has been occurred. RadioButtonBg image load failed", GetErrorMessage(E_SYSTEM));
2793 r = GET_BITMAP_CONFIG_N(TABLEVIEW::RADIOBUTTON_BUTTON_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pRadioButton);
2794 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pRadioButton != null), , E_SYSTEM, "[%s] A system error has been occurred.CheckBox image load failed", GetErrorMessage(E_SYSTEM));
2797 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
2798 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
2799 bounds.SetBounds(0.0f, 0.0f, annexWidth, annexHeight);
2801 pCanvas = new (std::nothrow) Canvas();
2802 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2804 pCanvas->Construct(bounds);
2805 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
2808 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pRadioButtonBg), *pRadioButtonBg);
2810 if (pRadioButton != null && IsChecked() == true)
2812 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pRadioButton), *pRadioButton);
2815 pMergeBitmap = new (std::nothrow) Bitmap();
2816 SysTryCatch(NID_UI_CTRL, pMergeBitmap != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2818 pMergeBitmap->Construct(*pCanvas, bounds);
2819 _BitmapImpl::ConvertToNonpremultiplied(*pMergeBitmap, true);
2821 __pItemAnnex->SetBackgroundBitmap(*pMergeBitmap);
2822 __pItemAnnex->Invalidate(false);
2825 delete pRadioButton;
2826 delete pRadioButtonBg;
2827 delete pMergeBitmap;
2834 _TableViewItem::DrawOnOffButton(void)
2836 Bitmap* pOnOffButton = null;
2837 Bitmap* pOnOffButtonHandler = null;
2838 Bitmap* pMergeBitmap = null;
2839 Canvas* pCanvas = null;
2840 result r = E_SUCCESS;
2842 FloatRectangle bounds;
2843 FloatRectangle backgroundBounds;
2844 FloatRectangle handlerBounds;
2845 float annexWidth = 0.0f;
2846 float annexHeight = 0.0f;
2847 float annexMargin = 0.0f;
2849 if (IsChecked() == true)
2853 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_ON_HANDLER, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButtonHandler);
2857 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_ON_HANDLER_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButtonHandler);
2864 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_OFF_HANDLER, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButtonHandler);
2868 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_OFF_HANDLER_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButtonHandler);
2871 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pOnOffButtonHandler != null), , E_SYSTEM, "[%s] A system error has been occurred. OnOffButtonHandler image load failed", GetErrorMessage(E_SYSTEM));
2875 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_BG, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButton);
2879 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_BG_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButton);
2881 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pOnOffButton != null), , E_SYSTEM, "[%s] A system error has been occurred. OnOffButton image load failed", GetErrorMessage(E_SYSTEM));
2883 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
2884 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
2885 bounds.SetBounds(0, 0, annexWidth, annexHeight);
2887 pCanvas = new (std::nothrow) Canvas();
2888 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2890 pCanvas->Construct(bounds);
2891 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
2894 backgroundBounds = CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pOnOffButton);
2895 DrawBitmap(*pCanvas, backgroundBounds, *pOnOffButton);
2897 handlerBounds = CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pOnOffButtonHandler);
2898 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, annexMargin);
2899 if (IsChecked() == true)
2901 handlerBounds.x = backgroundBounds.width - handlerBounds.width - annexMargin;
2905 handlerBounds.x = backgroundBounds.x + annexMargin;
2908 DrawBitmap(*pCanvas, handlerBounds, *pOnOffButtonHandler);
2910 pMergeBitmap = new (std::nothrow) Bitmap();
2911 SysTryCatch(NID_UI_CTRL, pMergeBitmap != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
2913 pMergeBitmap->Construct(*pCanvas, bounds);
2914 _BitmapImpl::ConvertToNonpremultiplied(*pMergeBitmap, true);
2916 __pItemAnnex->SetBackgroundBitmap(*pMergeBitmap);
2917 __pItemAnnex->Invalidate(false);
2920 delete pOnOffButton;
2921 delete pOnOffButtonHandler;
2922 delete pMergeBitmap;
2929 _TableViewItem::AdjustAnnexOnOffHandlerPosition()
2931 float annexWidth = 0.0f;
2932 float annexHeight = 0.0f;
2933 float annexMargin = 0.0f;
2935 float annexStartPositionX = 0.0f;
2936 float annexEndPositionX = 0.0f;
2937 float handlerPositionX = 0.0f;
2938 FloatRectangle handlerBounds;
2939 result r = E_SUCCESS;
2941 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, annexMargin);
2943 Bitmap* pOnOffButtonHandler = null;
2944 if (IsChecked() == true)
2946 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_ON_HANDLER, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButtonHandler);
2950 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_OFF_HANDLER, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButtonHandler);
2952 SysTryReturnVoidResult(NID_UI_CTRL, (r == E_SUCCESS) && (pOnOffButtonHandler != null), E_SYSTEM, "[%s] A system error has been occurred. OnOffHandlerButton button image load failed.", GetErrorMessage(E_SYSTEM));
2954 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
2955 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
2957 annexStartPositionX = __pItemAnnex->GetBoundsF().x;
2958 annexEndPositionX = annexStartPositionX + annexWidth + annexMargin;
2960 handlerBounds = CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pOnOffButtonHandler);
2962 if (__annexOnOffHandlerMoved)
2964 if (annexStartPositionX <= __annexOnOffHandlerPositionX
2965 && annexEndPositionX >= __annexOnOffHandlerPositionX)
2967 if (((annexEndPositionX - annexStartPositionX) / 2) < (__annexOnOffHandlerPositionX + (handlerBounds.width / 2)) - annexStartPositionX )
2969 handlerPositionX = annexEndPositionX;
2974 handlerPositionX = annexStartPositionX;
2981 SetChecked(!IsChecked());
2984 handlerPositionX = annexEndPositionX;
2988 handlerPositionX = annexStartPositionX;
2992 DrawAnnexOnOffHandler(handlerPositionX);
2994 delete pOnOffButtonHandler;
3000 _TableViewItem::DrawAnnexOnOffHandler(float touchEndPosition)
3002 if (__pItemAnnex == null)
3007 Bitmap* pOnOffButton = null;
3008 Bitmap* pOnOffButtonHandler = null;
3009 Bitmap* pMergeBitmap = null;
3010 Canvas* pCanvas = null;
3011 result r = E_SUCCESS;
3013 FloatRectangle backgroundBounds;
3014 FloatRectangle handlerBounds;
3015 float annexWidth = 0.0f;
3016 float annexHeight = 0.0f;
3017 float annexMargin = 0.0f;
3018 float annexX = 0.0f;
3019 float nextHandlerX = 0.0f;
3021 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_BG, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButton);
3022 SysTryReturnVoidResult(NID_UI_CTRL, (r == E_SUCCESS) && (pOnOffButton != null), E_SYSTEM, "[%s] A system error has been occurred. OnOffButton image load failed", GetErrorMessage(E_SYSTEM));
3024 if (IsChecked() == true)
3026 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_ON_HANDLER, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButtonHandler);
3030 r = GET_BITMAP_CONFIG_N(TABLEVIEW::ONOFFBUTTON_OFF_HANDLER, BITMAP_PIXEL_FORMAT_ARGB8888, pOnOffButtonHandler);
3032 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pOnOffButtonHandler != null), , E_SYSTEM, "[%s] A system error has been occurred. OnOffHandlerButton button image load failed.", GetErrorMessage(E_SYSTEM));
3034 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
3035 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
3036 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, annexMargin);
3038 pCanvas = new (std::nothrow) Canvas();
3039 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
3041 pCanvas->Construct(FloatRectangle(0, 0, annexWidth, annexHeight));
3042 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
3045 backgroundBounds = CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pOnOffButton);
3046 DrawBitmap(*pCanvas, backgroundBounds, *pOnOffButton);
3048 handlerBounds = CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pOnOffButtonHandler);
3049 handlerBounds.y = backgroundBounds.y;
3053 handlerBounds.x = backgroundBounds.width - handlerBounds.width - annexMargin;
3057 handlerBounds.x = backgroundBounds.x + annexMargin;
3060 nextHandlerX = handlerBounds.x + (touchEndPosition - __annexTouchStartPosition);
3061 annexX = __pItemAnnex->GetBoundsF().x;
3063 if ((annexX + nextHandlerX + handlerBounds.width) < (annexX + annexWidth + annexMargin)
3064 && (annexX + nextHandlerX) > annexX)
3066 handlerBounds.x = nextHandlerX;
3068 else if (_FloatCompareGE((annexX + nextHandlerX + handlerBounds.width), (annexX + annexWidth + annexMargin)))
3070 handlerBounds.x = backgroundBounds.width - handlerBounds.width - annexMargin;
3072 else if (_FloatCompareLE((annexX + nextHandlerX), annexX))
3074 handlerBounds.x = backgroundBounds.x + annexMargin;
3077 __annexOnOffHandlerPositionX = annexX + handlerBounds.x;
3078 DrawBitmap(*pCanvas, handlerBounds, *pOnOffButtonHandler);
3080 pMergeBitmap = new (std::nothrow) Bitmap();
3081 SysTryCatch(NID_UI_CTRL, pMergeBitmap != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
3083 pMergeBitmap->Construct(*pCanvas, FloatRectangle(0, 0, annexWidth, annexHeight));
3084 _BitmapImpl::ConvertToNonpremultiplied(*pMergeBitmap, true);
3086 __pItemAnnex->SetBackgroundBitmap(*pMergeBitmap);
3087 __pItemAnnex->Invalidate(false);
3090 delete pOnOffButton;
3091 delete pOnOffButtonHandler;
3092 delete pMergeBitmap;
3099 _TableViewItem::DrawDetailButton(void)
3101 Bitmap* pDetail = null;
3102 Bitmap* pDetailBg = null;
3103 Bitmap* pDetailBgEffect = null;
3104 Bitmap* pDetailEffect = null;
3105 Bitmap* pReplacementDetail = null;
3106 Bitmap* pReplacementDetailBg = null;
3107 Bitmap* pMergeBitmap = null;
3108 Canvas* pCanvas = null;
3109 Color replacementNewColor;
3110 Color replacementNewBgColor;
3111 result r = E_SUCCESS;
3113 FloatRectangle bounds;
3114 float annexWidth = 0.0f;
3115 float annexHeight = 0.0f;
3116 bool themeBackgroundBitmap = false;
3118 themeBackgroundBitmap = IS_CUSTOM_BITMAP(TABLEVIEW::CIRCLE_BUTTON_BG_NORMAL);
3122 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pDetailBg);
3123 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetailBg != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3125 if (__isSelectedDetailButton)
3127 if (!themeBackgroundBitmap)
3129 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_BG_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pDetailBgEffect);
3130 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetailBgEffect != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3132 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_REVEAL_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, pDetailEffect);
3133 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetailEffect != null), , E_SYSTEM,"[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3136 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_REVEAL_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pDetail);
3137 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetail != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3139 GET_COLOR_CONFIG(TABLEVIEW::ITEM_ANNEX_DETAIL_PRESSED, replacementNewColor);
3140 GET_COLOR_CONFIG(TABLEVIEW::ITEM_ANNEX_DETAIL_BG_PRESSED, replacementNewBgColor);
3144 if (!themeBackgroundBitmap)
3146 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_BG_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, pDetailBgEffect);
3147 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetailBgEffect != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3149 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_REVEAL_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, pDetailEffect);
3150 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetailEffect != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3153 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_REVEAL_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pDetail);
3154 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetail != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3156 GET_COLOR_CONFIG(TABLEVIEW::ITEM_ANNEX_DETAIL_NORMAL, replacementNewColor);
3157 GET_COLOR_CONFIG(TABLEVIEW::ITEM_ANNEX_DETAIL_BG_NORMAL, replacementNewBgColor);
3163 if (!themeBackgroundBitmap)
3165 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_BG_EFFECT_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pDetailBgEffect);
3166 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetailBgEffect != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3168 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_REVEAL_EFFECT, BITMAP_PIXEL_FORMAT_ARGB8888, pDetailEffect);
3169 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetailEffect != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3172 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_REVEAL_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pDetail);
3173 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetail != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3175 r = GET_BITMAP_CONFIG_N(TABLEVIEW::CIRCLE_BUTTON_BG_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pDetailBg);
3176 SysTryCatch(NID_UI_CTRL, (r == E_SUCCESS) && (pDetailBg != null), , E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3178 GET_COLOR_CONFIG(TABLEVIEW::ITEM_ANNEX_DETAIL_NORMAL, replacementNewColor);
3180 pReplacementDetailBg = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pDetailBg, Color::GetColor(COLOR_ID_MAGENTA), replacementNewBgColor);
3181 SysTryCatch(NID_UI_CTRL, pReplacementDetailBg != null, r = E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3183 pReplacementDetail = Tizen::Graphics::_BitmapImpl::GetColorReplacedBitmapN(*pDetail, Color::GetColor(COLOR_ID_MAGENTA), replacementNewColor);
3184 SysTryCatch(NID_UI_CTRL, pReplacementDetail != null, r = E_SYSTEM, E_SYSTEM, "[%s] A system error has been occurred. Detail button image load failed", GetErrorMessage(E_SYSTEM));
3186 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MORE_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
3187 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MORE_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, annexHeight);
3189 bounds.SetBounds(0, 0, annexWidth, annexHeight);
3191 pCanvas = new (std::nothrow) Canvas();
3192 SysTryCatch(NID_UI_CTRL, pCanvas != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
3194 pCanvas->Construct(bounds);
3195 pCanvas->SetBackgroundColor(Color(0, 0, 0, 0));
3198 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pReplacementDetailBg), *pReplacementDetailBg);
3199 if (pDetailBgEffect)
3201 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pDetailBgEffect), *pDetailBgEffect);
3203 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pReplacementDetail), *pReplacementDetail);
3206 DrawBitmap(*pCanvas, CalculateAnnexBitmapBounds(annexWidth, annexHeight, *pDetailEffect), *pDetailEffect);
3209 pMergeBitmap = new (std::nothrow) Bitmap();
3210 SysTryCatch(NID_UI_CTRL, pMergeBitmap != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
3211 pMergeBitmap->Construct(*pCanvas, bounds);
3212 _BitmapImpl::ConvertToNonpremultiplied(*pMergeBitmap, true);
3214 __pItemAnnex->SetBackgroundBitmap(*pMergeBitmap);
3215 __pItemAnnex->Invalidate(false);
3220 delete pDetailBgEffect;
3221 delete pDetailEffect;
3222 delete pReplacementDetail;
3223 delete pReplacementDetailBg;
3224 delete pMergeBitmap;
3231 _TableViewItem::DrawItemDivider(void)
3233 if (__pItemDivider == null || __pItemTopDivider == null)
3238 if (__pDrawingProperty->itemDividerEnabled == false ||
3239 __itemType == TABLE_VIEW_ITEM_TYPE_HEADER ||
3240 __itemType == TABLE_VIEW_ITEM_TYPE_FOOTER ||
3241 __itemDividerEnabled == false ||
3244 __pItemDivider->SetVisibleState(false);
3245 __pItemTopDivider->SetVisibleState(false);
3250 FloatRectangle dividerBottomBounds;
3251 FloatRectangle dividerTopBounds;
3253 Color bottomLineColor;
3254 Color customDividerColor;
3255 FloatRectangle bounds;
3256 FloatPoint bottomPoint;
3258 __pItemDivider->SetVisibleState(true);
3259 __pItemTopDivider->SetVisibleState(true);
3261 if ( __drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED ||
3262 __drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_HIGHLIGHTED)
3264 if (__colorItemBg[TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL] != __colorItemBg[TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED])
3266 if (__itemType != TABLE_VIEW_ITEM_TYPE_TITLE)
3268 __pItemDivider->SetVisibleState(false);
3271 __pItemTopDivider->SetVisibleState(false);
3275 if (__itemType == TABLE_VIEW_ITEM_TYPE_TITLE)
3277 if (__pItemBgBitmap[__drawingStatus] != null)
3279 __pItemDivider->SetVisibleState(false);
3283 float lineHeight = 0.0f;
3284 float lineLeftMargin = 0.0f;
3285 float lineBottomMargin = 0.0f;
3286 bounds = GetBoundsF();
3288 if (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL)
3290 GET_COLOR_CONFIG(TABLEVIEW::GROUPITEM_INDEX_BAR_NORMAL, bottomLineColor);
3294 GET_COLOR_CONFIG(TABLEVIEW::GROUPITEM_INDEX_BAR_PRESSED, bottomLineColor);
3297 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_INDEX_BAR_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, lineHeight);
3298 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_INDEX_BAR_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, lineLeftMargin);
3299 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_INDEX_BAR_BOTTOM_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, lineBottomMargin);
3301 lineHeight = Tizen::Graphics::CoordinateSystem::ConvertToLogicalY(lineHeight);
3302 lineBottomMargin = Tizen::Graphics::CoordinateSystem::ConvertToLogicalY(lineBottomMargin);
3303 bottomPoint = Tizen::Graphics::CoordinateSystem::AlignToDevice(FloatPoint(lineLeftMargin, bounds.height));
3304 dividerBottomBounds = FloatRectangle(bottomPoint.x, bottomPoint.y - lineBottomMargin, bounds.width - lineLeftMargin * 2.0f, lineHeight);
3309 float lineLeftMargin = 0.0f;
3310 float lineHeight = 0.0f;
3311 bounds = GetBoundsF();
3313 if (!IsContextItem())
3315 if (!__isSimpleLastItem)
3317 if (__itemType == TABLE_VIEW_ITEM_TYPE_BOTTOM || __itemType == TABLE_VIEW_ITEM_TYPE_ONE)
3319 __pItemDivider->SetVisibleState(false);
3320 __pItemTopDivider->SetVisibleState(false);
3325 customDividerColor = __pDrawingProperty->dividerColor;
3326 GET_COLOR_CONFIG(TABLEVIEW::ITEM_DIVIDER_TOP_BG_NORMAL, topLineColor);
3327 GET_COLOR_CONFIG(TABLEVIEW::ITEM_DIVIDER_BOTTOM_BG_NORMAL, bottomLineColor);
3328 GET_FIXED_VALUE_CONFIG(TABLEVIEW::ITEM_DIVIDER_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, lineLeftMargin);
3329 GET_FIXED_VALUE_CONFIG(TABLEVIEW::ITEM_DIVIDER_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, lineHeight);
3331 lineLeftMargin = Tizen::Graphics::CoordinateSystem::ConvertToLogicalX(lineLeftMargin);
3332 lineHeight = Tizen::Graphics::CoordinateSystem::ConvertToLogicalY(lineHeight);
3333 bottomPoint = Tizen::Graphics::CoordinateSystem::AlignToDevice(FloatPoint(lineLeftMargin, (bounds.height)));
3335 dividerTopBounds.SetBounds(lineLeftMargin, bottomPoint.y - (lineHeight * 2.0f), bounds.width - lineLeftMargin * 2.0f, lineHeight);
3336 dividerBottomBounds.SetBounds(lineLeftMargin, bottomPoint.y - lineHeight, bounds.width - lineLeftMargin * 2.0f, lineHeight);
3339 if (__pItemDivider->GetVisibleState())
3341 __pItemDivider->SetBounds(dividerBottomBounds);
3342 if (customDividerColor == bottomLineColor || __itemType == TABLE_VIEW_ITEM_TYPE_TITLE)
3344 __pItemDivider->SetBackgroundColor(bottomLineColor);
3348 __pItemDivider->SetBackgroundColor(customDividerColor);
3349 __pItemDivider->GetVisualElement()->SetOpacity(ITEM_BOTTOM_DIVIDER_OPACITY);
3351 __pItemDivider->Invalidate();
3354 if (__pItemTopDivider->GetVisibleState())
3356 __pItemTopDivider->SetBounds(dividerTopBounds);
3357 if (customDividerColor == bottomLineColor)
3359 __pItemTopDivider->SetBackgroundColor(topLineColor);
3363 __pItemTopDivider->SetBackgroundColor(customDividerColor);
3364 __pItemTopDivider->GetVisualElement()->SetOpacity(ITEM_TOP_DIVIDER_OPACITY);
3366 __pItemTopDivider->Invalidate();
3371 _TableViewItem::DrawItemAnnexDivider(void)
3373 if (__itemType == TABLE_VIEW_ITEM_TYPE_HEADER || __itemType == TABLE_VIEW_ITEM_TYPE_FOOTER)
3375 if (__pItemAnnexLeftDivider != null)
3377 __pItemAnnexLeftDivider->SetVisibleState(false);
3380 if (__pItemAnnexRightDivider != null)
3382 __pItemAnnexRightDivider->SetVisibleState(false);
3387 Color dividerLeftColor;
3388 Color dividerRightColor;
3389 Color customDividerColor;
3390 Color bottomLineColor;
3391 FloatRectangle bounds = GetBoundsF();
3392 float dividerHeight = 0;
3393 float itemHeight = 0;
3394 float dividerWidth = 0.0f;
3395 float dividerTopMargin = 0.0f;
3396 float annexWidth = 0.0f;
3397 float annexLeftMargin = 0.0f;
3398 float itemLeftMargin = 0.0f;
3400 customDividerColor = __pDrawingProperty->dividerColor;
3401 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, itemLeftMargin);
3402 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, annexLeftMargin);
3403 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
3404 GET_COLOR_CONFIG(TABLEVIEW::ITEM_ANNEX_DIVIDER_LEFT_BG_NORMAL, dividerLeftColor);
3405 GET_COLOR_CONFIG(TABLEVIEW::ITEM_ANNEX_DIVIDER_RIGHT_BG_NORMAL, dividerRightColor);
3406 GET_COLOR_CONFIG(TABLEVIEW::ITEM_DIVIDER_BOTTOM_BG_NORMAL, bottomLineColor);
3407 GET_FIXED_VALUE_CONFIG(TABLEVIEW::ITEM_ANNEX_DIVIDER_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, dividerWidth);
3408 GET_FIXED_VALUE_CONFIG(TABLEVIEW::ITEM_ANNEX_DIVIDER_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, dividerTopMargin);
3410 itemLeftMargin += __pDrawingProperty->scrollMargin;
3411 itemHeight = ((__customHeight > 0) ? __customHeight : GetBoundsF().height);
3412 dividerHeight = itemHeight - (dividerTopMargin*2);
3413 dividerHeight = (dividerHeight > 0) ? dividerHeight : 0;
3414 __pItemAnnexLeftDivider->SetBounds(FloatRectangle((GetBoundsF().width - annexWidth - (itemLeftMargin + annexLeftMargin) - (dividerWidth*2)), dividerTopMargin, dividerWidth, dividerHeight));
3415 __pItemAnnexRightDivider->SetBounds(FloatRectangle((GetBoundsF().width - annexWidth - (itemLeftMargin + annexLeftMargin) - dividerWidth), dividerTopMargin, dividerWidth, dividerHeight));
3417 if (customDividerColor == bottomLineColor)
3419 __pItemAnnexLeftDivider->SetBackgroundColor(dividerLeftColor);
3423 __pItemAnnexLeftDivider->SetBackgroundColor(customDividerColor);
3424 __pItemAnnexLeftDivider->GetVisualElement()->SetOpacity(ITEM_TOP_DIVIDER_OPACITY);
3427 if (customDividerColor == bottomLineColor)
3429 __pItemAnnexRightDivider->SetBackgroundColor(dividerRightColor);
3433 __pItemAnnexRightDivider->SetBackgroundColor(customDividerColor);
3434 __pItemAnnexRightDivider->GetVisualElement()->SetOpacity(ITEM_BOTTOM_DIVIDER_OPACITY);
3437 __pItemAnnexLeftDivider->Invalidate();
3438 __pItemAnnexRightDivider->Invalidate();
3441 if (__pItemAnnexLeftDivider != null)
3443 _AccessibilityContainer* pContainer = __pItemAnnexLeftDivider->GetAccessibilityContainer();
3444 pContainer->Activate(false);
3447 if (__pItemAnnexRightDivider != null)
3449 _AccessibilityContainer* pContainer = __pItemAnnexRightDivider->GetAccessibilityContainer();
3450 pContainer->Activate(false);
3456 _TableViewItem::DrawBitmap(Canvas& canvas, const FloatRectangle& bounds, const Bitmap& bitmap)
3458 result r = E_SUCCESS;
3459 if (_BitmapImpl::CheckNinePatchedBitmapStrictly(bitmap))
3461 r = canvas.DrawNinePatchedBitmap(bounds, bitmap);
3462 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Fail to draw ninepatched bitmap.");
3466 r = canvas.DrawBitmap(bounds, bitmap);
3467 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Fail to draw bitmap.");
3474 _TableViewItem::SetItemHighlightBounds(_VisualElement& highlightVisualElement, const FloatRectangle& bounds)
3476 return highlightVisualElement.SetBounds(bounds);
3480 _TableViewItem::CalculateItemHighlightBounds(void)
3482 FloatRectangle itemBounds = GetBoundsF();
3483 return FloatRectangle(0.0f, 0.0f, itemBounds.width, itemBounds.height);
3487 _TableViewItem::CalculateAnnexBitmapBounds(float annexWidth, float annexHeight, const Bitmap& bitmap)
3489 FloatRectangle bounds;
3492 float leftMargin = 0;
3493 float topMargin = 0;
3495 if (annexWidth > bitmap.GetWidthF())
3497 leftMargin = (annexWidth - bitmap.GetWidthF()) / 2;
3498 width = bitmap.GetWidthF();
3505 if (annexHeight > bitmap.GetHeightF())
3507 topMargin = (annexHeight - bitmap.GetHeightF()) / 2;
3508 height = bitmap.GetHeightF();
3512 height = annexHeight;
3515 bounds.SetBounds(leftMargin, topMargin, width, height);
3521 _TableViewItem::IsTitleStyleItem(void) const
3523 if (__itemType == TABLE_VIEW_ITEM_TYPE_TITLE || __itemType == TABLE_VIEW_ITEM_TYPE_HEADER || __itemType == TABLE_VIEW_ITEM_TYPE_FOOTER)
3532 _TableViewItem::IsValidSelectionState(void)
3534 _TableView* pParent = dynamic_cast<_TableView*>(GetParent());
3535 if (pParent == null)
3540 if (pParent->GetPressedItemCount() > 0)
3549 _TableViewItem::DrawSimpleItem(void)
3551 if (__pSimpleItemText != null)
3553 Color textColor = __simpleItemTextColor[__drawingStatus];
3556 textColor = __simpleItemTextColor[TABLE_VIEW_SIMPLEITEM_DRAWING_STATUS_DISABLED];
3559 if (__itemType == TABLE_VIEW_ITEM_TYPE_TITLE)
3561 if (__drawingStatus == TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL)
3563 textColor = __simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_NORMAL];
3567 textColor = __simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_PRESSED];
3571 __pSimpleItemText->SetTextColor(textColor);
3572 __pSimpleItemText->Invalidate(false);
3576 _TableViewItem::SetSimpleItemContents(const Tizen::Base::String& text, const Tizen::Graphics::Bitmap* pBitmap, bool groupType)
3578 result r = E_SUCCESS;
3579 bool textOnly = true;
3581 if (pBitmap != null)
3586 r = CreateSimpleItemContents(textOnly);
3587 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
3589 FloatRectangle bitmapRect = FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
3590 FloatRectangle textRect = FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f);
3591 float leftMargin = 0.0f;
3592 float annexMargin = 0.0f;
3593 float elementWidth = 0;
3594 float elementHeight = 0;
3595 float itemHeight = GetBoundsF().height;
3596 float itemWidth = GetBoundsF().width;
3597 float annexWidth = GetAnnexWidth(__annexStyle);
3601 if (__simpleItemTextSize == 0)
3603 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_DEFAULT_FONT_SIZE, _CONTROL_ORIENTATION_PORTRAIT, __simpleItemTextSize);
3605 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
3609 if (__simpleItemTextSize == 0)
3611 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_DEFAULT_FONT_SIZE, _CONTROL_ORIENTATION_PORTRAIT, __simpleItemTextSize);
3613 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
3618 elementWidth = itemHeight * SIMPLE_ITEM_ELEMENT_BITMAP_SIZE_RATIO;
3619 elementHeight = elementWidth;
3621 bitmapRect.x = leftMargin;
3622 bitmapRect.y = (itemHeight - elementHeight) / 2;
3623 bitmapRect.width = elementWidth;
3624 bitmapRect.height = elementHeight;
3627 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_NORMAL)
3629 textRect.x = bitmapRect.x + elementWidth + leftMargin;
3630 elementWidth = itemWidth - textRect.x - leftMargin;
3634 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, annexMargin);
3635 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK || __annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO)
3637 bitmapRect.x = leftMargin + annexWidth + annexMargin;
3638 textRect.x = bitmapRect.x + elementWidth + leftMargin;
3639 elementWidth = itemWidth - textRect.x - leftMargin;
3643 textRect.x = bitmapRect.x + elementWidth + leftMargin;
3644 elementWidth = itemWidth - textRect.x - annexWidth - leftMargin - annexMargin;
3649 textRect.width = elementWidth < 0 ? 0 : elementWidth;;
3650 textRect.height = itemHeight;
3652 if (__pSimpleItemBitmap != null && pBitmap != null)
3654 __pSimpleItemBitmap->SetBackgroundBitmap(*pBitmap);
3655 __pSimpleItemBitmap->SetBounds(bitmapRect);
3657 _Label* pSimpleItemBitmapCore = GetLabelCore(__pSimpleItemBitmap);
3658 if (!pSimpleItemBitmapCore->HasParent())
3660 r = AttachChild(*pSimpleItemBitmapCore);
3661 SysTryReturn(NID_UI_CTRL, __pSimpleItemBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
3665 if (__pSimpleItemText != null)
3667 __pSimpleItemText->SetTextConfig(__simpleItemTextSize, LABEL_TEXT_STYLE_NORMAL);
3668 __pSimpleItemText->SetText(text);
3669 __pSimpleItemText->SetBounds(textRect);
3671 _Label* pSimpleItemTextCore = GetLabelCore(__pSimpleItemText);
3672 if (!pSimpleItemTextCore->HasParent())
3674 r = AttachChild(*pSimpleItemTextCore);
3675 SysTryReturn(NID_UI_CTRL, __pSimpleItemText != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
3683 _TableViewItem::CreateSimpleItemContents(bool textOnly)
3685 result r = E_SUCCESS;
3687 if (__pSimpleItemText == null)
3689 __pSimpleItemText = new (std::nothrow) Label();
3691 r = GetLastResult();
3692 SysTryReturn(NID_UI_CTRL, __pSimpleItemText != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
3694 __pSimpleItemText->Construct(FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f), L"");
3696 __pSimpleItemText->SetTextHorizontalAlignment(ALIGNMENT_LEFT);
3697 __pSimpleItemText->SetTextVerticalAlignment(ALIGNMENT_MIDDLE);
3698 if (__itemType == TABLE_VIEW_ITEM_TYPE_TITLE)
3700 __pSimpleItemText->SetTextColor(__simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_NORMAL]);
3704 __pSimpleItemText->SetTextColor(__simpleItemTextColor[TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL]);
3706 __pSimpleItemText->SetBackgroundColor(Color(0, 0, 0, 0));
3707 GetLabelCore(__pSimpleItemText)->SetFocusable(true);
3713 if (__pSimpleItemBitmap == null)
3715 __pSimpleItemBitmap = new (std::nothrow) Label();
3717 r = GetLastResult();
3718 SysTryReturn(NID_UI_CTRL, __pSimpleItemBitmap != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
3720 __pSimpleItemBitmap->Construct(FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f), L"");
3721 __pSimpleItemBitmap->SetBackgroundColor(Color(0, 0, 0, 0));
3722 GetLabelCore(__pSimpleItemBitmap)->SetFocusable(true);
3728 if (__pSimpleItemBitmap != null)
3730 delete __pSimpleItemBitmap;
3731 __pSimpleItemBitmap = null;
3739 _TableViewItem::SetSimpleTextColor(const Tizen::Graphics::Color& color, TableViewItemDrawingStatus status)
3741 __simpleItemTextColor[status] = color;
3746 Tizen::Graphics::Color
3747 _TableViewItem::GetSimpleItemTextColor(TableViewItemDrawingStatus status) const
3749 return __simpleItemTextColor[status];
3753 _TableViewItem::SetSimpleGroupItemTextColor(const Tizen::Graphics::Color& color, TableViewItemDrawingStatus status)
3755 if (status == TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL)
3757 __simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_NORMAL] = color;
3759 else if (status == TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED)
3761 __simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_PRESSED] = color;
3767 Tizen::Graphics::Color
3768 _TableViewItem::GetSimpleGroupItemTextColor(TableViewItemDrawingStatus status) const
3770 if (status == TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED)
3772 return __simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_PRESSED];
3776 return __simpleItemTextColor[TABLE_VIEW_GROUPITEM_DRAWING_STATUS_NORMAL];
3781 _TableViewItem::SetSimpleItemTextSize(int size)
3783 if (__simpleItemTextSize == size)
3788 __simpleItemTextSize = size;
3790 if (__pSimpleItemText != null)
3792 __pSimpleItemText->SetTextConfig(__simpleItemTextSize, LABEL_TEXT_STYLE_NORMAL);
3798 _TableViewItem::GetSimpleItemTextSize(void) const
3800 return __simpleItemTextSize;
3804 _TableViewItem::SetSectionHeaderFooterContents(const Tizen::Base::String& text, HorizontalAlignment alignment, bool isHeader)
3806 if (__pHeaderFooterItemText == null)
3808 result r = E_SUCCESS;
3809 float contentsHeight = 0.0f;
3810 float positionY = 0.0f;
3813 GET_COLOR_CONFIG(TABLEVIEW::GROUPITEM_TEXT_NORMAL, textColor);
3814 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_DEFAULT_TEXT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, contentsHeight);
3816 __pHeaderFooterItemText = new (std::nothrow) Label();
3818 r = GetLastResult();
3819 SysTryReturn(NID_UI_CTRL, __pHeaderFooterItemText != null, r, r, "[%s] Propagating.", GetErrorMessage(r));
3823 positionY = GetBoundsF().height - contentsHeight;
3825 __pHeaderFooterItemText->Construct(FloatRectangle(0.0f, positionY, GetBoundsF().width, contentsHeight), text);
3826 __pHeaderFooterItemText->SetTextHorizontalAlignment(alignment);
3827 __pHeaderFooterItemText->SetTextColor(textColor);
3828 __pHeaderFooterItemText->SetBackgroundColor(Color(0, 0, 0, 0));
3830 _Label* pHeaderFooterItemTextCore = GetLabelCore(__pHeaderFooterItemText);
3831 pHeaderFooterItemTextCore->SetFocusable(false);
3832 AttachChild(*pHeaderFooterItemTextCore);
3839 _TableViewItem::SetSectionHeaderFooterAlignment(HorizontalAlignment alignment)
3841 if (__pHeaderFooterItemText != null)
3843 __pHeaderFooterItemText->SetTextHorizontalAlignment(alignment);
3844 __pHeaderFooterItemText->Invalidate(false);
3851 _TableViewItem::GetAnnexWidth(TableViewAnnexStyle style)
3853 float annexWidth = 0.0f;
3854 float annexDividerWidth = 0.0f;
3858 case TABLE_VIEW_ANNEX_STYLE_NORMAL:
3862 case TABLE_VIEW_ANNEX_STYLE_MARK:
3863 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
3866 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
3867 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
3870 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER:
3871 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, annexDividerWidth);
3872 GET_FIXED_VALUE_CONFIG(TABLEVIEW::ITEM_ANNEX_DIVIDER_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexDividerWidth);
3873 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
3874 annexWidth = annexWidth + (annexDividerWidth*2) + annexDividerWidth;
3877 case TABLE_VIEW_ANNEX_STYLE_DETAILED:
3878 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MORE_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
3881 case TABLE_VIEW_ANNEX_STYLE_RADIO:
3882 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
3893 _TableViewItem::SetDrawingStatus(TableViewItemDrawingStatus status)
3895 __drawingStatus = status;
3898 TableViewItemDrawingStatus
3899 _TableViewItem::GetDrawingStatus(void)
3901 return __drawingStatus;
3905 _TableViewItem::SetPressedControl(TableViewItemPressedControl pressedControl)
3907 __pressedControl = pressedControl;
3909 if (__pressedControl == TABLE_VIEW_ITEM_PRESSED_ITEM)
3911 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED;
3913 else if (__pressedControl == TABLE_VIEW_ITEM_PRESSED_ANNEX)
3915 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
3917 __isSelectedDetailButton = true;
3918 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
3920 else if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING ||
3921 __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
3923 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
3927 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED;
3932 if (__pressedControl != TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL)
3934 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_PRESSED;
3939 TableViewItemPressedControl
3940 _TableViewItem::GetPressedControl(void)
3942 return __pressedControl;
3946 _TableViewItem::AdjustChildControlMargin(void)
3948 if (__childMarginState)
3953 if (IsTitleStyleItem())
3958 __childMarginState = true;
3962 if (__pDrawingProperty->groupedLookEnabled)
3964 float groupedBarMargin = 0.0f;
3965 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_BAR_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, groupedBarMargin);
3967 margin = margin + groupedBarMargin;
3972 _VisualElement* pVisualElement = GetVisualElement();
3974 if (pVisualElement != null)
3976 FloatPoint position;
3978 position.SetPosition(margin, 0.0f);
3979 pVisualElement->ScrollByPoint(position, false);
3985 _TableViewItem::AdjustContextItemBounds(void)
3987 _TableViewItem* pContextItem = GetContextItem();
3989 if (pContextItem == null)
3994 FloatDimension contextItemSize = pContextItem->GetSizeF();
3995 FloatDimension itemSize = GetSizeF();
3997 if (!_FloatCompare(contextItemSize.height, itemSize.height))
3999 contextItemSize.height = itemSize.height;
4001 pContextItem->SetSize(contextItemSize);
4004 pContextItem->AdjustChildControlCenterAlign();
4008 _TableViewItem::AdjustAnnexBounds(void)
4010 if (__pItemAnnex == null || __isMoveItemAnimationEnabled || __isZoomInOutItemAnimationEnabled ||__isFadeInOutItemAnimationEnabled)
4016 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING || __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER || __annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
4018 _Label* pAnnexCore = GetLabelCore(__pItemAnnex);
4019 if (pAnnexCore->HasParent())
4021 FloatRectangle annexBounds = __pItemAnnex->GetBoundsF();
4022 float annexPositionX = annexBounds.x;
4023 float leftMargin = 0.0f;
4025 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, leftMargin);
4026 leftMargin += __pDrawingProperty->scrollMargin;
4028 annexPositionX = GetBoundsF().width - annexBounds.width - leftMargin;
4030 if (!_FloatCompare(annexPositionX, annexBounds.x))
4032 __pItemAnnex->SetPosition(FloatPoint(annexPositionX, annexBounds.y));
4034 if (__pAccessibilityOnOffElement != null)
4036 __pAccessibilityOnOffElement->SetBounds(__pItemAnnex->GetBoundsF());
4043 FloatRectangle itemBounds = GetBoundsF();
4044 FloatRectangle annexBounds = __pItemAnnex->GetBoundsF();
4046 if (__customHeight > 0)
4048 itemBounds.height = __customHeight;
4051 annexBounds.y = (itemBounds.height - annexBounds.height) / 2;
4052 __pItemAnnex->SetPosition(FloatPoint(annexBounds.x, annexBounds.y));
4053 if (__pAccessibilityOnOffElement != null)
4055 __pAccessibilityOnOffElement->SetBounds(__pItemAnnex->GetBoundsF());
4060 _TableViewItem::SetItemCustomHeight(float height)
4062 __customHeight = height;
4066 _TableViewItem::GetItemCustomHeight(void)
4068 return __customHeight;
4072 _TableViewItem::AdjustChildControlCenterAlign(void)
4074 if (__childControlCenterAlign)
4076 FloatDimension itemSize = GetSizeF();
4078 int childControlCount = GetChildCount();
4080 for (int i = 0; i < childControlCount; i++)
4082 _Control* pChildControl = GetChild(i);
4084 if (pChildControl == null)
4089 if (__pItemDivider == pChildControl)
4091 float positionX = pChildControl->GetPositionF().x;
4092 pChildControl->SetPosition(FloatPoint(positionX, itemSize.height - 1));
4096 if (__pItemTopDivider == pChildControl)
4098 float positionX = pChildControl->GetPositionF().x;
4099 pChildControl->SetPosition(FloatPoint(positionX, 0));
4103 FloatRectangle itemBounds = pChildControl->GetBoundsF();
4105 itemBounds.y = (itemSize.height - itemBounds.height) / 2;
4107 pChildControl->SetPosition(FloatPoint(itemBounds.x, itemBounds.y));
4113 _TableViewItem::SetChildControlCenterAlign(bool centerAlign)
4115 __childControlCenterAlign = centerAlign;
4119 _TableViewItem::GetLastTouchPressedPosition(void)
4121 return _CoordinateSystemUtils::ConvertToInteger(__touchStartPosition);
4125 _TableViewItem::GetLastTouchPressedPositionF(void)
4127 return __touchStartPosition;
4131 _TableViewItem::SetLastTouchPressedPosition(FloatPoint position)
4133 // This function was made to modify of ListView::RefreshList().
4134 // This function could adversely affect touch event handling. So, you should be used with caution.
4135 __touchStartPosition = position;
4139 _TableViewItem::SetLastTouchPressedPosition(Point position)
4141 // This function was made to modify of ListView::RefreshList().
4142 // This function could adversely affect touch event handling. So, you should be used with caution.
4143 __touchStartPosition = _CoordinateSystemUtils::ConvertToFloat(position);
4147 _TableViewItem::GetSelectionState(void)
4149 return __itemSelected;
4153 _TableViewItem::SetSelectionState(bool selected)
4155 // This function was made to modify of ListView::RefreshList().
4156 // This function could adversely affect touch event handling. So, you should be used with caution.
4157 __itemSelected = selected;
4161 _TableViewItem::MoveItem(FloatPoint position, int duration, int delay)
4163 _VisualElement* pVisualElement = GetVisualElement();
4164 VisualElementValueAnimation* pAnimation = null;
4165 String animationName = L"MOVE_ITEM";
4166 FloatPoint itemPosition = GetPositionF();
4167 result r = E_SUCCESS;
4169 if (position == itemPosition)
4174 if (__pMoveItemAnimation == null)
4176 __pMoveItemAnimation = new (std::nothrow) VisualElementValueAnimation;
4177 SysTryCatch(NID_UI_CTRL, __pMoveItemAnimation != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
4179 __pMoveItemAnimation->SetVisualElementAnimationTickEventListener(this);
4180 r = GetLastResult();
4181 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4183 __pMoveItemAnimation->SetVisualElementAnimationStatusEventListener(this);
4184 r = GetLastResult();
4185 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4188 pAnimation = __pMoveItemAnimation;
4190 pAnimation->SetTimingFunction(VisualElementAnimation::GetTimingFunctionByName("EaseInOut"));
4191 pAnimation->SetDuration(duration);
4192 pAnimation->SetDelay(delay);
4193 pAnimation->SetStartValue(Variant(GetPositionF()));
4194 pAnimation->SetEndValue(Variant(position));
4196 if (pVisualElement->AddAnimation(animationName, *pAnimation) != E_SUCCESS)
4207 delete __pMoveItemAnimation;
4208 __pMoveItemAnimation = null;
4214 _TableViewItem::ZoomInOutItem(bool zoomOut, int duration, int delay)
4216 _VisualElement* pVisualElement = GetVisualElement();
4217 VisualElementValueAnimation* pAnimation = null;
4218 String animationName = L"ZOOM_IN_OUT_ITEM";
4219 FloatDimension itemSize = GetSizeF();
4220 FloatDimension startValue;
4221 FloatDimension endValue;
4222 result r = E_SUCCESS;
4224 if (__pZoomInOutItemAnimation == null)
4226 __pZoomInOutItemAnimation = new (std::nothrow) VisualElementValueAnimation;
4227 SysTryCatch(NID_UI_CTRL, __pZoomInOutItemAnimation != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
4229 __pZoomInOutItemAnimation->SetVisualElementAnimationTickEventListener(this);
4230 r = GetLastResult();
4231 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4233 __pZoomInOutItemAnimation->SetVisualElementAnimationStatusEventListener(this);
4234 r = GetLastResult();
4235 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4238 pAnimation = __pZoomInOutItemAnimation;
4242 startValue = itemSize;
4243 endValue = FloatDimension(itemSize.width, itemSize.height / 2);
4244 pAnimation->SetTimingFunction(VisualElementAnimation::GetTimingFunctionByName(L"EaseOut"));
4248 startValue = FloatDimension(itemSize.width, itemSize.height / 2);
4249 endValue = itemSize;
4250 pAnimation->SetTimingFunction(VisualElementAnimation::GetTimingFunctionByName(L"EaseIn"));
4253 pAnimation->SetDuration(duration);
4254 pAnimation->SetDelay(delay);
4255 pAnimation->SetStartValue(Variant(startValue));
4256 pAnimation->SetEndValue(Variant(endValue));
4258 if (pVisualElement->AddAnimation(animationName, *pAnimation) != E_SUCCESS)
4268 delete __pZoomInOutItemAnimation;
4269 __pZoomInOutItemAnimation = null;
4275 _TableViewItem::FadeInOutItem(bool fadeOut, int duration, int delay)
4277 _VisualElement* pVisualElement = GetVisualElement();
4278 VisualElementValueAnimation* pAnimation = null;
4279 String animationName = L"FADE_IN_OUT_ITEM";
4280 float startValue = 0.0f;
4281 float endValue = 1.0f;
4282 result r = E_SUCCESS;
4284 if (__pFadeInOutItemtAnimation == null)
4286 __pFadeInOutItemtAnimation = new (std::nothrow) VisualElementValueAnimation;
4287 SysTryCatch(NID_UI_CTRL, __pFadeInOutItemtAnimation != null, , E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
4289 __pFadeInOutItemtAnimation->SetVisualElementAnimationTickEventListener(this);
4290 r = GetLastResult();
4291 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4293 __pFadeInOutItemtAnimation->SetVisualElementAnimationStatusEventListener(this);
4294 r = GetLastResult();
4295 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
4298 pAnimation = __pFadeInOutItemtAnimation;
4304 pAnimation->SetTimingFunction(VisualElementAnimation::GetTimingFunctionByName(L"EaseOut"));
4308 pAnimation->SetTimingFunction(VisualElementAnimation::GetTimingFunctionByName(L"EaseIn"));
4311 pAnimation->SetTimingFunction(VisualElementAnimation::GetTimingFunctionByName("EaseIn"));
4312 pAnimation->SetDuration(duration);
4313 pAnimation->SetDelay(delay);
4314 pAnimation->SetStartValue(Variant(startValue));
4315 pAnimation->SetEndValue(Variant(endValue));
4317 if (pVisualElement->AddAnimation(animationName, *pAnimation) != E_SUCCESS)
4322 pVisualElement->SetOpacity(startValue);
4330 delete __pFadeInOutItemtAnimation;
4331 __pFadeInOutItemtAnimation = null;
4337 _TableViewItem::SetIndividualSelectionEnabled(const _Control& control, bool enable)
4339 result r = E_SUCCESS;
4342 if (!__individualSelectionControls.Contains(control))
4344 r = __individualSelectionControls.Add(control);
4347 _AccessibilityContainer* pContainer = const_cast<_Control*>(&control)->GetAccessibilityContainer();
4348 pContainer->Activate(true);
4349 int controlCount = 0;
4350 for (int i=0; i<GetChildCount(); i++)
4352 _Control* pChildControl = GetChild(i);
4353 if (pChildControl == static_cast<_Control*>(__pItemAnnexLeftDivider)
4354 || pChildControl == static_cast<_Control*>(__pItemAnnexRightDivider)
4355 || pChildControl == static_cast<_Control*>(__pItemCover)
4356 || pChildControl == static_cast<_Control*>(__pItemDivider)
4357 || pChildControl== static_cast<_Control*>(__pItemTopDivider))
4365 if (controlCount == 0 || __individualSelectionControls.GetCount() == controlCount)
4367 GetAccessibilityContainer()->Activate(false);
4371 GetAccessibilityContainer()->Activate(true);
4376 if (__individualSelectionControls.Contains(control))
4378 r = __individualSelectionControls.Remove(control, false);
4385 _TableViewItem::IsIndividualSelectionEnabled(const _Control& control)
4387 return __individualSelectionControls.Contains(control);
4391 _TableViewItem::AddRef(void)
4393 return ++__refCount;
4397 _TableViewItem::Release(void)
4400 if (__refCount <= 0)
4410 _TableViewItem::IsAnimationPlaying(void)
4412 if (__animationCount > 0)
4421 _TableViewItem::StopAllAnimation(void)
4423 _VisualElement* pVisualElement = GetVisualElement();
4425 pVisualElement->RemoveAllAnimations();
4429 _TableViewItem::SetItemDividerEnabled(bool enable)
4431 __itemDividerEnabled = enable;
4435 _TableViewItem::OnTickOccurred(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, const Tizen::Ui::Variant& currentValue)
4437 if (keyName == L"MOVE_ITEM")
4439 FloatPoint position = currentValue.ToFloatPoint();
4440 SetPosition(position);
4442 else if (keyName == L"FADE_IN_OUT_ITEM")
4444 float opacity = currentValue.ToFloat();
4446 _VisualElement* pVisualElement = GetVisualElement();
4448 if (pVisualElement != null)
4450 pVisualElement->SetOpacity(opacity);
4453 else if (keyName == L"ZOOM_IN_OUT_ITEM")
4455 FloatDimension size = currentValue.ToFloatDimension();
4461 _TableViewItem::OnVisualElementAnimationStarted(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target)
4463 if (keyName == L"MOVE_ITEM")
4465 __isMoveItemAnimationEnabled = true;
4467 else if (keyName == L"FADE_IN_OUT_ITEM")
4469 __isFadeInOutItemAnimationEnabled = true;
4471 else if (keyName == L"ZOOM_IN_OUT_ITEM")
4473 __isZoomInOutItemAnimationEnabled = true;
4478 _TableViewItem::OnVisualElementAnimationRepeated(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, long currentRepeatCount)
4483 _TableViewItem::OnVisualElementAnimationFinished(const Tizen::Ui::Animations::VisualElementAnimation& animation, const Tizen::Base::String& keyName, Tizen::Ui::Animations::VisualElement& target, bool completedNormally)
4485 if (__isAnimationCallbackBlocked)
4490 bool tableViewItemAnimation = true;
4491 const VisualElementValueAnimation *pAnimation = dynamic_cast<const VisualElementValueAnimation*>(&(animation));
4493 if (keyName == L"MOVE_ITEM")
4495 if (pAnimation != null)
4497 FloatPoint position = pAnimation->GetEndValue().ToFloatPoint();
4499 SetPosition(position);
4501 __isMoveItemAnimationEnabled = false;
4503 else if (keyName == L"FADE_IN_OUT_ITEM")
4505 if (pAnimation != null)
4507 float opacity = pAnimation->GetEndValue().ToFloat();
4509 _VisualElement* pVisualElement = GetVisualElement();
4511 if (pVisualElement != null)
4513 pVisualElement->SetOpacity(opacity);
4517 __isFadeInOutItemAnimationEnabled = false;
4519 else if (keyName == L"ZOOM_IN_OUT_ITEM")
4521 if (pAnimation != null)
4523 FloatDimension size = pAnimation->GetEndValue().ToFloatDimension();
4527 __isZoomInOutItemAnimationEnabled = false;
4531 tableViewItemAnimation = false;
4534 if (tableViewItemAnimation)
4543 _TableViewItem::OnAttachedToMainTree(void)
4545 if (!_FloatCompare(GetBoundsF().height, 0.0f))
4547 SetAccessibilityElement();
4554 _TableViewItem::SetAccessibilityElement(void)
4556 _AccessibilityContainer* pContainer = GetAccessibilityContainer();
4558 if (pContainer != null)
4560 if (__pAccessibilityElement == null)
4562 __pAccessibilityElement = new (std::nothrow) _AccessibilityElement(true);
4563 SysTryReturnVoidResult(NID_UI_CTRL, __pAccessibilityElement, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
4565 __pAccessibilityElement->SetTrait(ACCESSIBILITY_TRAITS_NONE);
4566 __pAccessibilityElement->SetName(L"TableViewItem");
4568 pContainer->AddElement(*__pAccessibilityElement);
4570 __pAccessibilityElement->SetBounds(FloatRectangle(0.0f,0.0f, GetBoundsF().width, GetBoundsF().height));
4572 if (__pAccessibilityOnOffElement == null && __annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER)
4574 __pAccessibilityOnOffElement = new (std::nothrow) _AccessibilityElement(true);
4575 SysTryReturnVoidResult(NID_UI_CTRL, __pAccessibilityOnOffElement, E_OUT_OF_MEMORY, "[%s] Memory allocation failed.", GetErrorMessage(E_OUT_OF_MEMORY));
4577 __pAccessibilityOnOffElement->SetTraitWithStringId("IDS_TPLATFORM_BODY_ON_OFF_BUTTON_T_TTS");
4578 __pAccessibilityOnOffElement->SetName(L"OnOffButton");
4579 __pAccessibilityOnOffElement->SetHintWithStringId("IDS_TPLATFORM_BODY_DOUBLE_TAP_TO_MOVE_TO_CONTENT_T_TTS");
4581 pContainer->AddElement(*__pAccessibilityOnOffElement);
4582 __pAccessibilityOnOffElement->SetBounds(FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f));
4587 _AccessibilityElement*
4588 _TableViewItem::GetAccessibilityElement(void)
4590 return __pAccessibilityElement;
4593 _TableViewItem::SetAccessibilityElementTrait(void)
4595 if (__pAccessibilityElement == null)
4599 int groupIndex = -1;
4602 switch (__annexStyle)
4604 case TABLE_VIEW_ANNEX_STYLE_NORMAL:
4605 GetItemIndex(groupIndex, itemIndex);
4606 if (groupIndex != -1 && itemIndex == -1)
4608 __pAccessibilityElement->SetTraitWithStringId("IDS_TPLATFORM_BODY_GROUP_INDEX");
4612 case TABLE_VIEW_ANNEX_STYLE_MARK:
4613 __pAccessibilityElement->SetTraitWithStringId("IDS_TPLATFORM_BODY_TICKBOX_T_TTS");
4616 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
4617 __pAccessibilityElement->SetTraitWithStringId("IDS_TPLATFORM_BODY_ON_OFF_BUTTON_T_TTS");
4620 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER:
4623 case TABLE_VIEW_ANNEX_STYLE_DETAILED:
4624 __pAccessibilityElement->SetTraitWithStringId("IDS_TPLATFORM_BODY_BUTTON_T_TTS");
4627 case TABLE_VIEW_ANNEX_STYLE_RADIO:
4628 __pAccessibilityElement->SetTraitWithStringId("IDS_TPLATFORM_BODY_RADIO_BUTTON_T_TTS");
4636 _TableViewItem::SetAccessibilityElementValue(void)
4638 if (__pAccessibilityElement == null)
4643 switch (__annexStyle)
4645 case TABLE_VIEW_ANNEX_STYLE_MARK:
4648 __pAccessibilityElement->SetValueWithStringId("IDS_TPLATFORM_BODY_TICK_T_TTS");
4652 __pAccessibilityElement->SetValueWithStringId("IDS_TPLATFORM_BODY_UNTICK_T_TTS");
4656 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
4659 __pAccessibilityElement->SetValueWithStringId("IDS_TPLATFORM_BODY_ON");
4663 __pAccessibilityElement->SetValueWithStringId("IDS_TPLATFORM_BODY_OFF");
4667 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER:
4670 if (__pAccessibilityOnOffElement != null)
4672 __pAccessibilityOnOffElement->SetValueWithStringId("IDS_TPLATFORM_BODY_ON");
4677 if (__pAccessibilityOnOffElement != null)
4679 __pAccessibilityOnOffElement->SetValueWithStringId("IDS_TPLATFORM_BODY_OFF");
4684 case TABLE_VIEW_ANNEX_STYLE_RADIO:
4687 __pAccessibilityElement->SetValueWithStringId("IDS_TPLATFORM_BODY_SELECTED_T_TTS");
4691 __pAccessibilityElement->SetValueWithStringId("IDS_TPLATFORM_BODY_NOT_SELECTED_T_TTS");
4700 _TableViewItem::SetAccessibilityElementLabel(void)
4702 if (__pAccessibilityElement == null)
4707 if (__pAccessibilityElement->IsPublicLabelUpdated())
4712 String accessibilityLabel;
4713 String space = L" ";
4714 int childControlCount = GetChildCount();
4716 for (int i = 0; i < childControlCount; i++)
4718 _Control* pChildControl = GetChild(i);
4720 if (pChildControl == null)
4725 if (__pItemDivider == pChildControl || __pItemTopDivider == pChildControl || __pItemCover == pChildControl)
4730 accessibilityLabel += GetChildAccessibilityLabelContent(*pChildControl);
4731 accessibilityLabel += space;
4734 __pAccessibilityElement->SetLabel(accessibilityLabel);
4739 _TableViewItem::OnAccessibilityFocusMovedNext(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4745 _TableViewItem::OnAccessibilityFocusMovedPrevious(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4751 _TableViewItem::OnAccessibilityReadElement(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4757 _TableViewItem::OnAccessibilityReadingElement(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4759 SetAccessibilityElementLabel();
4760 SetAccessibilityElementTrait();
4761 SetAccessibilityElementValue();
4766 _TableViewItem::OnAccessibilityFocusIn(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4772 _TableViewItem::OnAccessibilityFocusOut(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4778 _TableViewItem::OnAccessibilityActionPerformed(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4780 switch (__annexStyle)
4782 case TABLE_VIEW_ANNEX_STYLE_NORMAL:
4785 case TABLE_VIEW_ANNEX_STYLE_MARK:
4789 GET_STRING_CONFIG(IDS_TPLATFORM_BODY_TICK_T_TTS,string);
4790 _AccessibilityManager::GetInstance()->ReadContent(string);
4795 GET_STRING_CONFIG(IDS_TPLATFORM_BODY_UNTICK_T_TTS,string);
4796 _AccessibilityManager::GetInstance()->ReadContent(string);
4799 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING:
4803 GET_STRING_CONFIG(IDS_TPLATFORM_BODY_ON,string);
4804 _AccessibilityManager::GetInstance()->ReadContent(string);
4809 GET_STRING_CONFIG(IDS_TPLATFORM_BODY_OFF,string);
4810 _AccessibilityManager::GetInstance()->ReadContent(string);
4814 case TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER:
4815 if (&element == __pAccessibilityOnOffElement && IsEnabled())
4821 GET_STRING_CONFIG(IDS_TPLATFORM_BODY_OFF,string);
4822 _AccessibilityManager::GetInstance()->ReadContent(string);
4828 GET_STRING_CONFIG(IDS_TPLATFORM_BODY_ON,string);
4829 _AccessibilityManager::GetInstance()->ReadContent(string);
4834 case TABLE_VIEW_ANNEX_STYLE_DETAILED:
4837 case TABLE_VIEW_ANNEX_STYLE_RADIO:
4841 GET_STRING_CONFIG(IDS_TPLATFORM_OPT_SELECT,string);
4842 _AccessibilityManager::GetInstance()->ReadContent(string);
4847 GET_STRING_CONFIG(IDS_TPLATFORM_BODY_NOT_SELECTED_T_TTS,string);
4848 _AccessibilityManager::GetInstance()->ReadContent(string);
4859 _TableViewItem::OnAccessibilityValueIncreased(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4865 _TableViewItem::OnAccessibilityValueDecreased(const _AccessibilityContainer& control, const _AccessibilityElement& element)
4871 _TableViewItem::OnKeyPressed(const _Control& source, const _KeyInfo& keyInfo)
4873 __isTouchCancelOnPressRelease = false;
4875 if (!IsFocusModeStateEnabled())
4880 _TableView* pParent = dynamic_cast<_TableView*>(GetParent());
4881 _KeyCode keyCode = keyInfo.GetKeyCode();
4882 IListT<_Control*>* pFocusList = GetFocusListN();
4883 SysTryReturn(NID_UI_CTRL, pFocusList != null, true, GetLastResult(), "[%s] propagating.", GetErrorMessage(GetLastResult()));
4885 _Control* pChildControl = null;
4886 _Control* pFocusedControl = null;
4887 _Window* pTop = source.GetRootWindow();
4891 pFocusedControl = pTop->GetCurrentFocusControl();
4894 int count = pFocusList->GetCount();
4896 if (pFocusedControl == null)
4906 for (int i=count-1; i>=0; i--)
4908 pFocusList->GetAt(i, pChildControl);
4909 if (pChildControl == null)
4914 if (pChildControl->IsFocused())
4918 pChildControl = null;
4922 for (int j=i-1; j>=0; j--)
4924 pFocusList->GetAt(j, pChildControl);
4925 if (pChildControl == null)
4930 if (pChildControl->IsFocusable() && pChildControl->GetEnableState()
4931 && pChildControl->GetVisibleState())
4937 pChildControl = null;
4944 if (pChildControl && pChildControl->GetEnableState()
4945 && pChildControl->GetVisibleState() && pChildControl->IsFocusable())
4947 if (pParent != null)
4949 pParent->SetAnnexFocused(true);
4951 pChildControl->SetFocused(true);
4952 pChildControl->DrawFocus();
4956 _Control* pParentControl = pFocusedControl->GetParent();
4957 _TableViewItem* pItem = dynamic_cast<_TableViewItem*>(pParentControl);
4959 if (pItem != null && pItem->GetEnableState() && !pItem->IsFocused()
4960 && pItem->GetVisibleState() && pItem->IsFocusable())
4962 if (pParent != null)
4964 pParent->SetAnnexFocused(false);
4966 pItem->SetFocused(true);
4976 if (pChildControl == null)
4978 for (int i=0; i<count; i++)
4980 pFocusList->GetAt(i, pChildControl);
4981 if (pChildControl == null)
4986 if (pChildControl->IsFocusable() && pChildControl->GetEnableState()
4987 && pChildControl->GetVisibleState())
4993 pChildControl = null;
5000 for (int i=0; i<count; i++)
5002 pFocusList->GetAt(i, pChildControl);
5003 if (pChildControl == null)
5008 if (pChildControl->IsFocused())
5012 pChildControl = null;
5016 for (int j=i+1; j<count; j++)
5018 pFocusList->GetAt(j, pChildControl);
5019 if (pChildControl == null)
5024 if (pChildControl->IsFocusable() && pChildControl->GetEnableState()
5025 && pChildControl->GetVisibleState())
5031 pChildControl = null;
5039 if (pChildControl && pChildControl->GetEnableState() && pChildControl->GetVisibleState()
5040 && pChildControl->IsFocusable())
5042 if (pParent != null)
5044 pParent->SetAnnexFocused(true);
5046 pChildControl->SetFocused(true);
5047 pChildControl->DrawFocus();
5052 if (&source == this)
5054 __pressedControl = TABLE_VIEW_ITEM_PRESSED_ITEM;
5056 else if (&source == GetLabelCore(__pItemAnnex))
5058 __pressedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX;
5060 else if (IsIndividualSelectionEnabled(source))
5062 __pressedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL;
5066 __pressedControl = TABLE_VIEW_ITEM_PRESSED_NONE;
5068 __itemSelected = true;
5069 FireItemTouchPressed();
5075 __annexOnOffHandlerMoved = false;
5076 __itemTouchMoved = false;
5078 __itemSelected = false;
5079 __drawingStatus = TABLE_VIEW_ITEM_DRAWING_STATUS_NORMAL;
5081 if (__annexStyle == TABLE_VIEW_ANNEX_STYLE_DETAILED)
5083 __isSelectedDetailButton = false;
5086 SetItemChanged(true);
5096 _TableViewItem::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
5098 if (!IsFocusModeStateEnabled())
5103 _KeyCode keyCode = keyInfo.GetKeyCode();
5105 if (keyCode == _KEY_ENTER)
5107 _TableView* pParent = dynamic_cast<_TableView*>(GetParent());
5108 SysTryReturn(NID_UI_CTRL, pParent != null, true, GetLastResult(), "[%s] propagating.", GetErrorMessage(GetLastResult()));
5110 pParent->StopExpandCollapseAnimation();
5111 if (&source == this)
5113 __releasedControl = TABLE_VIEW_ITEM_PRESSED_ITEM;
5115 else if (&source == GetLabelCore(__pItemAnnex))
5117 __releasedControl = TABLE_VIEW_ITEM_PRESSED_ANNEX;
5119 else if (IsIndividualSelectionEnabled(source))
5121 __releasedControl = TABLE_VIEW_ITEM_PRESSED_INDIVIDUAL;
5125 __releasedControl = TABLE_VIEW_ITEM_PRESSED_NONE;
5127 FireItemTouchReleased();
5130 else if (keyCode == _KEY_LEFT || keyCode == _KEY_RIGHT)
5139 _TableViewItem::GetPreviousFocusChildControl(const _Control& source)
5141 _Control* pParentControl = null;
5142 float sourcePosition = 0.0f;
5144 _Control* pSource = const_cast<_Control*>(&source);
5145 _TableViewItem* pItem = dynamic_cast<_TableViewItem*>(pSource);
5148 pParentControl = pSource;
5149 sourcePosition = pParentControl->GetBoundsF().width;
5153 pParentControl = source.GetParent();
5154 sourcePosition = source.GetBoundsF().x;
5157 if (pParentControl == null)
5162 int childControlCount = pParentControl->GetChildCount();
5163 float position = 0.0f;
5164 _Control* destination = null;
5166 for (int i=0; i<childControlCount; i++)
5168 _Control* pChildControl = pParentControl->GetChild(i);
5169 if (pChildControl != null && pChildControl->IsFocusable())
5171 float childPosition = pChildControl->GetBoundsF().x;
5172 if (childPosition < sourcePosition)
5174 if (childPosition > position)
5176 position = childPosition;
5177 destination = pChildControl;
5179 else if (_FloatCompare(position, 0.0f))
5181 position = childPosition;
5182 destination = pChildControl;
5191 _TableViewItem::GetNextFocusChildControl(const _Control& source)
5193 _Control* pParentControl = null;
5194 float sourcePosition = 0.0f;
5196 _Control* pSource = const_cast<_Control*>(&source);
5197 _TableViewItem* pItem = dynamic_cast<_TableViewItem*>(pSource);
5200 pParentControl = pSource;
5201 sourcePosition = 0.0f;
5205 pParentControl = source.GetParent();
5206 sourcePosition = source.GetBoundsF().x;
5209 if (pParentControl == null)
5214 int childControlCount = pParentControl->GetChildCount();
5215 float position = 0.0f;
5216 _Control* destination = null;
5218 for (int i=0; i<childControlCount; i++)
5220 _Control* pChildControl = pParentControl->GetChild(i);
5221 if (pChildControl != null && pChildControl->IsFocusable())
5223 float childPosition = pChildControl->GetBoundsF().x;
5224 if (childPosition > sourcePosition)
5226 if (childPosition < position)
5228 position = childPosition;
5229 destination = pChildControl;
5231 else if (_FloatCompare(position, 0.0f))
5233 position = childPosition;
5234 destination = pChildControl;
5243 _TableViewItem::IsChildControlFocusManage(void) const
5249 _TableViewItem::SetSimpleLastItemEnabled(bool enable)
5251 __isSimpleLastItem = enable;
5255 _TableViewItem::SetSectionItem(bool isSectionItem)
5257 __isSectionItem = isSectionItem;
5261 _TableViewItem::SetTouchPressOnScroll(bool isTouch)
5263 __isTouchPressOnScroll = isTouch;
5267 _TableViewItem::IsTouchPressOnScroll(void) const
5269 return __isTouchPressOnScroll;
5273 _TableViewItem::OnVisibleStateChanged(void)
5282 _TableViewItem::OnAncestorEnableStateChanged(const _Control& control)
5291 _TableViewItem::OnAncestorVisibleStateChanged(const _Control& control)
5300 _TableViewItem::OnFocusableStateChanged(bool focusableState)
5302 if (IsFocused() && !focusableState)
5309 _TableViewItem::SetPublicLabelUpdate(bool resetPublicLabelUpdate)
5311 if (__pAccessibilityElement)
5313 __pAccessibilityElement->SetPublicLabelUpdate(resetPublicLabelUpdate);
5318 _TableViewItem::GetChildAccessibilityLabelContent(const _Control& source)
5320 String accessibilityLabel = L"";
5321 String space = L" ";
5323 if (IsIndividualSelectionEnabled(source))
5325 return accessibilityLabel;
5328 if (!source.IsVisible() || !source.GetEnableState())
5330 return accessibilityLabel;
5333 _Control* pSource = const_cast<_Control*>(&source);
5337 _AccessibilityContainer* pContainer = pSource->GetAccessibilityContainer();
5338 LinkedListT<_AccessibilityElement*> accessibilityElements;
5339 _AccessibilityElement* pElement = null;
5343 pContainer->GetElements(accessibilityElements);
5344 int elementCount = accessibilityElements.GetCount();
5346 for (int i = 0; i < elementCount; i++)
5348 if (accessibilityElements.GetAt(i, pElement) == E_SUCCESS)
5350 accessibilityLabel += pElement->GetLabel();
5351 accessibilityLabel += space;
5357 //check for children
5358 int childControlCount = source.GetChildCount();
5360 for (int i = 0; i < childControlCount; i++)
5362 _Control* pChildControl = source.GetChild(i);
5364 if (pChildControl == null)
5369 accessibilityLabel += GetChildAccessibilityLabelContent(*pChildControl);
5372 return accessibilityLabel;
5376 _TableViewItem::DeactivateChildAccessibilityContainer(const _Control& source)
5378 _Control* pControl = const_cast<_Control*>(&source);
5382 _AccessibilityContainer* pContainer = pControl->GetAccessibilityContainer();
5386 if (__individualSelectionControls.Contains(source))
5388 pContainer->Activate(true);
5392 pContainer->Activate(false);
5397 //check for children
5398 int childControlCount = source.GetChildCount();
5400 for (int i = 0; i < childControlCount; i++)
5402 _Control* pChildControl = source.GetChild(i);
5404 if (pChildControl == null)
5409 DeactivateChildAccessibilityContainer(*pChildControl);
5413 }}} // Tizen::Ui::Controls