2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Flora License, Version 1.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://floralicense.org/license/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an AS IS BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FUiCtrl_ExpandableListImpl.cpp
20 * @brief This file contains implementation of _ExpandableListImpl class
23 #include <FBaseSysLog.h>
24 #include <FGrp_BitmapImpl.h>
25 #include "FUiCtrl_CustomListItemImpl.h"
26 #include "FUiCtrl_CustomListItemFormatImpl.h"
27 #include "FUiCtrl_ExpandableListImpl.h"
28 #include "FUiCtrl_ListListener.h"
29 #include "FUi_ResourceSizeInfo.h"
30 #include "FUi_ResourceManager.h"
31 #include "FUiCtrl_ListItemBaseImpl.h"
32 #include "FUiCtrl_CustomListImpl.h"
33 #include "FUi_UiBuilder.h"
35 using namespace Tizen::Base;
36 using namespace Tizen::Base::Runtime;
37 using namespace Tizen::Graphics;
38 using namespace Tizen::Base::Collection;
40 namespace Tizen { namespace Ui { namespace Controls
43 extern const int INVALID_INDEX;
45 static const int _EXPANDABLE_ARROW_X_POSITION = 5;
46 static const int _EXPANDABLE_ARROW_Y_POSITION = 20;
47 static const char* ARROW_ELEMENT_NAME = "Arrow";
49 _ExpandableListItemDataProvider::_ExpandableListItemDataProvider(_ExpandableListImpl* pList)
54 _ExpandableListItemDataProvider::~_ExpandableListItemDataProvider(void)
60 _ExpandableListItemDataProvider::GetGroupCount(void)
62 SysTryReturn(NID_UI_CTRL, __pListImpl, 0, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Item provider not constructed properly.");
63 return __pListImpl->GetGroupCount();
67 _ExpandableListItemDataProvider::GetItemCount(int groupIndex)
69 SysTryReturn(NID_UI_CTRL, __pListImpl, 0, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Item provider not constructed properly.");
71 return __pListImpl->GetSubItemCountAt(groupIndex);
75 _ExpandableListItemDataProvider::CreateGroupItem(int groupIndex, int itemWidth)
77 SysTryReturn(NID_UI_CTRL, __pListImpl, null, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Item provider not constructed properly.");
79 CustomListItem* pCustomListItem = __pListImpl->GetCustomListItemAt(groupIndex, -1);
80 SysTryReturn(NID_UI_CTRL, pCustomListItem, null, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", groupIndex);
82 SysTryReturn(NID_UI_CTRL, pCustomListItem->__pCustomListItemImpl, null, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", groupIndex);
84 _TableViewItemParams tableViewItemParams;
85 tableViewItemParams.pItem = pCustomListItem;
86 tableViewItemParams.width = itemWidth;
87 tableViewItemParams.itemId = pCustomListItem->__pCustomListItemImpl->itemId;
88 tableViewItemParams.groupIndex = groupIndex;
89 tableViewItemParams.itemIndex = -1;
90 tableViewItemParams.isDividerEnabled = __pListImpl->_isDividerEnabled;
91 tableViewItemParams.pCheckBitmaps = __pListImpl->_pCheckBitmaps;
92 tableViewItemParams.annexStyle = __pListImpl->_annexStyle;
94 result r = _CustomListItemImpl::CreateTableViewItem(tableViewItemParams);
95 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
97 pCustomListItem->__pCustomListItemImpl->__pTableViewGroupItemData->AddTouchEventListener(*__pListImpl);
99 if (__pListImpl->GetSubItemCountAt(groupIndex) > 0)
101 r = __pListImpl->CreateArrowIcon(groupIndex);
102 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
105 return pCustomListItem->__pCustomListItemImpl->__pTableViewGroupItemData;
109 _ExpandableListItemDataProvider::CreateItem(int groupIndex, int itemIndex, int itemWidth)
111 SysTryReturn(NID_UI_CTRL, __pListImpl, null, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Invalid data structure.");
113 CustomListItem* pCustomListItem = __pListImpl->GetCustomListItemAt(groupIndex, itemIndex);
114 SysTryReturn(NID_UI_CTRL, pCustomListItem, null, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", groupIndex);
116 _TableViewItemParams tableViewItemParams;
117 tableViewItemParams.pItem = pCustomListItem;
118 tableViewItemParams.width = itemWidth;
119 tableViewItemParams.itemId = pCustomListItem->__pCustomListItemImpl->itemId;
120 tableViewItemParams.groupIndex = groupIndex;
121 tableViewItemParams.itemIndex = itemIndex;
122 tableViewItemParams.isDividerEnabled = __pListImpl->_isDividerEnabled;
123 tableViewItemParams.pCheckBitmaps = __pListImpl->_pCheckBitmaps;
124 tableViewItemParams.annexStyle = __pListImpl->_annexStyle;
126 result r = _CustomListItemImpl::CreateTableViewItem(tableViewItemParams);
127 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
129 pCustomListItem->__pCustomListItemImpl->__pTableViewItemData->AddTouchEventListener(*__pListImpl);
131 if (__pListImpl->GetSubItemCountAt(groupIndex) == 1)
133 r = __pListImpl->CreateArrowIcon(groupIndex);
134 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
137 return pCustomListItem->__pCustomListItemImpl->__pTableViewItemData;
141 _ExpandableListItemDataProvider::GetDefaultGroupItemHeight(void)
143 CustomListItem* pCustomListItem = __pListImpl->GetCustomListItemAt(0, -1);
144 SysTryReturn(NID_UI_CTRL, pCustomListItem, __pListImpl->_defaultItemHeight, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get first item");
146 SysTryReturn(NID_UI_CTRL, pCustomListItem->__pCustomListItemImpl, __pListImpl->_defaultItemHeight, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get first item");
148 return pCustomListItem->__pCustomListItemImpl->height;
152 _ExpandableListItemDataProvider::GetDefaultItemHeight(void)
154 CustomListItem* pCustomListItem = __pListImpl->GetCustomListItemAt(0, 0);
156 if (!pCustomListItem)
158 return __pListImpl->_defaultItemHeight;
162 return pCustomListItem->__pCustomListItemImpl->height;
167 _ExpandableListItemDataProvider::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
171 if (__pListImpl->__directDelete == false)
173 CustomListItem* pCustomListItem = __pListImpl->GetCustomListItemAt(groupIndex, itemIndex);
174 pCustomListItem->__pCustomListItemImpl->__pTableViewItemData = null;
181 _ExpandableListItemDataProvider::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
185 if (__pListImpl->__directDelete == false)
187 CustomListItem* pCustomListItem = __pListImpl->GetCustomListItemAt(groupIndex, -1);
188 pCustomListItem->__pCustomListItemImpl->__pTableViewGroupItemData = null;
195 _ExpandableListItemDataProvider::IsReorderable(int groupIndexFrom, int groupIndexTo)
201 _ExpandableListItemDataProvider::UpdateGroupItem(int groupIndex, TableViewGroupItem* pItem)
203 CustomListItem* pGroupCustomListItem = __pListImpl->GetCustomListItemAt(groupIndex, -1);
204 SysTryReturnVoidResult(NID_UI_CTRL, pGroupCustomListItem, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", groupIndex);
206 _TableViewItemUpdateParams updateParams;
207 updateParams.pItem = pGroupCustomListItem;
208 updateParams.isDividerEnabled = __pListImpl->_isDividerEnabled;
209 updateParams.pCheckBitmaps = __pListImpl->_pCheckBitmaps;
210 updateParams.annexStyle = __pListImpl->_annexStyle;
212 result r = E_SUCCESS;
214 r = _CustomListItemImpl::UpdateTableViewItem(updateParams);
215 SysTryReturnVoidResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to refresh an item.");
217 SysTryReturnVoidResult(NID_UI_CTRL, pGroupCustomListItem->__pCustomListItemImpl, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", groupIndex);
219 _TableViewItemData* pTableViewItemData = pGroupCustomListItem->__pCustomListItemImpl->__pTableViewItemData;
220 SysTryReturnVoidResult(NID_UI_CTRL, pTableViewItemData, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at groupIndex(%d)", groupIndex);
222 pTableViewItemData->SetEnabled(true);
227 _ExpandableListItemDataProvider::UpdateItem(int groupIndex, int itemIndex, TableViewItem* pItem)
229 CustomListItem* pCustomListItem = __pListImpl->GetCustomListItemAt(groupIndex, itemIndex);
230 SysTryReturnVoidResult(NID_UI_CTRL, pCustomListItem, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at groupIndex(%d) itemIndex(%d)", groupIndex, itemIndex);
232 _TableViewItemUpdateParams updateParams;
233 updateParams.pItem = pCustomListItem;
234 updateParams.isDividerEnabled = __pListImpl->_isDividerEnabled;
235 updateParams.pCheckBitmaps = __pListImpl->_pCheckBitmaps;
236 updateParams.annexStyle = __pListImpl->_annexStyle;
238 result r = E_SUCCESS;
240 r = _CustomListItemImpl::UpdateTableViewItem(updateParams);
241 SysTryReturnVoidResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to refresh an item.");
243 _TableViewItemData* pTableViewItemData = pCustomListItem->__pCustomListItemImpl->__pTableViewItemData;
244 SysTryReturnVoidResult(NID_UI_CTRL, pTableViewItemData, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at groupIndex(%d) itemIndex(%d)", groupIndex, itemIndex);
246 pTableViewItemData->SetEnabled(true);
252 _ExpandableListImpl::GetInstance(ExpandableList& expandableList)
254 return static_cast<_ExpandableListImpl*>(expandableList._pControlImpl);
257 const _ExpandableListImpl*
258 _ExpandableListImpl::GetInstance(const ExpandableList& expandableList)
260 return static_cast<const _ExpandableListImpl*>(expandableList._pControlImpl);
263 _ExpandableListImpl::_ExpandableListImpl(Control* pList, _TableView* pCore)
264 : _ListBaseImpl(pList, pCore)
265 , __pOpenedImage(null)
266 , __pClosedImage(null)
267 , __pItemProvider(null)
268 , __directDelete(false)
269 , __groupExpandStateList(DeleteExpandStateFlag)
273 _ExpandableListImpl::~_ExpandableListImpl(void)
275 GetCore().SetItemProvider(null);
277 int count = GetItemCount();
279 for (int index = 0; index < count; index++)
281 RemoveFromSubItemsList(index);
284 RemoveAllFromItemsList();
286 __groupExpandStateList.RemoveAll(true);
288 __itemListenersList.RemoveAll(true);
290 delete __pOpenedImage;
291 __pOpenedImage = null;
293 delete __pClosedImage;
294 __pClosedImage = null;
296 delete __pItemProvider;
297 __pItemProvider = null;
301 _ExpandableListImpl::GetPublicClassName(void) const
303 return "ExpandableList";
306 const ExpandableList&
307 _ExpandableListImpl::GetPublic(void) const
309 return static_cast<const ExpandableList&>(_ControlImpl::GetPublic());
313 _ExpandableListImpl::GetPublic(void)
315 return static_cast<ExpandableList&>(_ControlImpl::GetPublic());
319 _ExpandableListImpl::GetCore(void) const
321 return static_cast<const _TableView&>(_ControlImpl::GetCore());
325 _ExpandableListImpl::GetCore(void)
327 return static_cast<_TableView&>(_ControlImpl::GetCore());
331 _ExpandableListImpl::CreateExpandableListImplN(ExpandableList* pControl, const Rectangle& bounds, bool itemDivider)
333 result r = E_SUCCESS;
335 r = GET_SIZE_INFO(ExpandableList).CheckInitialSizeValid(Dimension(bounds.width, bounds.height), _CONTROL_ORIENTATION_PORTRAIT);
336 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
338 _TableView* pCore = _TableView::CreateTableViewN(TABLE_VIEW_STYLE_GROUPED, true, TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
341 SysTryReturn(NID_UI_CTRL, pCore, null, r, "[%s] Propagating.", GetErrorMessage(r));
343 _ExpandableListImpl* pImpl = new (std::nothrow) _ExpandableListImpl(pControl, pCore);
344 SysTryCatch(NID_UI_CTRL, pImpl, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
346 pCore->SetItemDividerEnabled(itemDivider);
348 r = pCore->SetScrollStyle(TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
349 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
361 _ExpandableListImpl::UpdateBounds(const Rectangle& rect)
363 result r = E_SUCCESS;
365 r = InitializeBoundsProperties(GET_SIZE_INFO(CustomList), rect, GetCore().GetOrientation());
366 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
372 _ExpandableListImpl::Initialize(void)
374 result r = E_SUCCESS;
376 __pItemProvider = new (std::nothrow) _ExpandableListItemDataProvider(this);
377 SysTryReturnResult(NID_UI_CTRL, (__pItemProvider != null), E_OUT_OF_MEMORY, "Memory allocation failed.");
379 TableViewStyle style = GetCore().GetTableViewStyle();
380 SysTryReturnResult(NID_UI_CTRL, style == TABLE_VIEW_STYLE_GROUPED, E_INVALID_OPERATION, "The style of TableView is not TABLE_VIEW_STYLE_GROUPED");
382 _TableViewItemProvider* pItemProvider = _TableViewItemProvider::CreateTableViewItemProviderN(style);
383 SysTryReturnResult(NID_UI_CTRL, pItemProvider != null, E_OUT_OF_MEMORY, "Memory allocation failed.");
385 r = pItemProvider->SetGroupedStyleItemProvider(__pItemProvider);
389 delete pItemProvider;
390 SysTryReturn(NID_UI_CTRL, false, r, r, "[%s] Propagating.", GetErrorMessage(r));
393 r = GetCore().SetItemProvider(pItemProvider);
394 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
396 r = GetCore().AddGroupedTableViewItemEventListener(*this);
397 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
401 GET_COLOR_CONFIG(LIST::EXPANDABLELIST_SUB_ITEM_BG_COLOR, __subItemBgColor);
407 _ExpandableListImpl::CreateArrowIcon(int groupIndex)
409 int size = __pOpenedImage->GetWidth();
410 result r = E_SUCCESS;
412 _TableViewGroupItemData* pTableViewGroupItemData = GetTableViewGroupItemAt(groupIndex);
413 SysTryReturnResult(NID_UI_CTRL, pTableViewGroupItemData, E_SYSTEM, "A system error has occurred. Failed to get GroupItemData at %d index.", groupIndex);
415 Label* pArrowLabel = null;
416 pArrowLabel = dynamic_cast<Label*>(pTableViewGroupItemData->GetControl(ARROW_ELEMENT_NAME));
420 Label* pArrowLabel = new (std::nothrow) Label();
421 SysTryReturn(NID_UI_CTRL, pArrowLabel, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
423 r = pArrowLabel->Construct(Rectangle((GetCore().GetBounds().width - (size + _EXPANDABLE_ARROW_X_POSITION)), _EXPANDABLE_ARROW_Y_POSITION, size, size), L"");
424 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
426 pArrowLabel->SetName(ARROW_ELEMENT_NAME);
427 pArrowLabel->SetBackgroundBitmap(*__pOpenedImage);
428 pArrowLabel->AddTouchEventListener(*this);
430 pTableViewGroupItemData->AddControl(*pArrowLabel);
431 pTableViewGroupItemData->SetIndividualSelectionEnabled(pArrowLabel, true);
438 _ExpandableListImpl::LoadArrowBitmap(void)
440 result r = E_SUCCESS;
441 Bitmap* pTempBitmap = null;
444 GET_COLOR_CONFIG(LIST::EXPANDABLELIST_DOWN_AND_UP_ARROW_COLOR, normalColor);
446 r = GET_BITMAP_CONFIG_N(LIST::BUTTON_COLLAPSE_GROUP, BITMAP_PIXEL_FORMAT_ARGB8888, pTempBitmap);
447 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "Failed to fetch Arrow Bitmap");
448 __pOpenedImage = _BitmapImpl::GetColorReplacedBitmapN(*pTempBitmap, Color::GetColor(COLOR_ID_MAGENTA), normalColor);
453 r = GET_BITMAP_CONFIG_N(LIST::BUTTON_EXPAND_GROUP, BITMAP_PIXEL_FORMAT_ARGB8888, pTempBitmap);
454 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "Failed to fetch Arrow Bitmap");
455 __pClosedImage = _BitmapImpl::GetColorReplacedBitmapN(*pTempBitmap, Color::GetColor(COLOR_ID_MAGENTA), normalColor);
464 _ExpandableListImpl::AddExpandableItemEventListener(const IExpandableItemEventListener& listener)
466 _ListListener* pListenersList = new (std::nothrow) _ListListener();
468 SysTryReturn(NID_UI_CTRL, pListenersList, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
470 pListenersList->pListener = const_cast<IExpandableItemEventListener*>(&listener);
471 __itemListenersList.Add(*pListenersList);
477 _ExpandableListImpl::RemoveExpandableItemEventListener(const IExpandableItemEventListener& listener)
479 _ListListener* pListenersList = null;
481 int count = __itemListenersList.GetCount();
483 for (int listenerCount = 0; listenerCount < count; listenerCount++)
485 pListenersList = dynamic_cast<_ListListener*>(__itemListenersList.GetAt(listenerCount));
487 if ((pListenersList != null) && (pListenersList->pListener == &listener))
490 __itemListenersList.RemoveAt(listenerCount, true);
499 _ExpandableListImpl::AddItem(const CustomListItem& item, int itemId)
501 return InsertItemAt(GetGroupCount(), item, itemId);
505 _ExpandableListImpl::InsertItemAt(int mainIndex, const CustomListItem& item, int itemId)
507 result r = E_SUCCESS;
509 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex <= GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
511 item.__pCustomListItemImpl->itemId = itemId;
513 Boolean* pIsExpanded = new Boolean(false);
514 SysTryReturn(NID_UI_CTRL, pIsExpanded, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
516 __groupExpandStateList.InsertAt(*pIsExpanded, mainIndex);
518 r = InsertIntoItemsList(item, mainIndex, -1);
519 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to insert an item.");
521 r = GetCore().RefreshTableView(mainIndex, -1, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
522 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
524 if (GetCore().GetFirstDrawnFlag() == false)
526 SetItemExpanded(mainIndex, false);
532 RemoveFromItemsList(mainIndex, -1);
533 __groupExpandStateList.RemoveAt(mainIndex, true);
539 _ExpandableListImpl::AddSubItem(int mainIndex, const CustomListItem& item, int itemId)
541 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex <= GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
543 return InsertSubItemAt(mainIndex, GetSubItemCountAt(mainIndex), item, itemId);
547 _ExpandableListImpl::InsertSubItemAt(int mainIndex, int subIndex, const CustomListItem& item, int itemId)
549 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex <= GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d.", mainIndex);
551 SysTryReturnResult(NID_UI_CTRL, (subIndex >= 0 && subIndex <= GetSubItemCount(mainIndex)), E_INVALID_ARG, "Invalid argument used. subIndex = %d.", subIndex);
553 item.__pCustomListItemImpl->itemId = itemId;
555 result r = E_SUCCESS;
557 r = InsertIntoItemsList(item, mainIndex, subIndex);
558 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, "A system error has occurred. Failed to insert item");
560 r = GetCore().RefreshTableView(mainIndex, subIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
561 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
566 RemoveFromItemsList(mainIndex, subIndex);
571 _ExpandableListImpl::GetItemCount(void) const
573 return GetGroupCount();
577 _ExpandableListImpl::GetSubItemCount(int mainIndex) const
579 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d.", mainIndex);
581 return GetSubItemCountAt(mainIndex);
585 _ExpandableListImpl::SetItemAt(int mainIndex, const CustomListItem& item, int itemId)
587 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
589 SysTryReturnResult(NID_UI_CTRL, (IsItemNew(item) == true), E_SYSTEM, "[E_SYSTEM] A system error has occurred. The item already exists.");
591 result r = E_SUCCESS;
592 item.__pCustomListItemImpl->itemId = itemId;
594 r = SetInItemsList(item, mainIndex, -1);
595 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
597 _TableViewItemUpdateParams updateParams;
598 updateParams.pItem = const_cast<CustomListItem*>(&item);
599 updateParams.isDividerEnabled = _isDividerEnabled;
600 updateParams.pCheckBitmaps = _pCheckBitmaps;
601 updateParams.annexStyle = _annexStyle;
603 r = _CustomListItemImpl::UpdateTableViewItem(updateParams);
604 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "A system error has occurred. Failed to refresh an item.");
610 _ExpandableListImpl::RemoveItemAt(int mainIndex)
612 result r = E_SUCCESS;
614 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d.", mainIndex);
616 r = RemoveFromSubItemsList(mainIndex);
617 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
619 r = RemoveFromItemsList(mainIndex, -1);
620 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
622 __groupExpandStateList.RemoveAt(mainIndex, true);
624 __directDelete = true;
626 r = GetCore().RefreshTableView(mainIndex, -1, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
628 __directDelete = false;
630 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
636 _ExpandableListImpl::SetSubItemAt(int mainIndex, int subIndex, const CustomListItem& item, int itemId)
638 result r = E_SUCCESS;
640 SysTryReturn(NID_UI_CTRL, ((mainIndex >= 0) && (mainIndex < GetGroupCount())), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
642 _TableViewGroupItemData* pGroupItem = GetTableViewGroupItemAt(mainIndex);
643 SysTryReturn(NID_UI_CTRL, pGroupItem, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get GroupItem at %d index.", mainIndex);
645 SysTryReturn(NID_UI_CTRL, ((subIndex >= 0) && (subIndex < GetSubItemCountAt(mainIndex))), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. subIndex = %d", subIndex);
647 item.__pCustomListItemImpl->itemId = itemId;
649 CustomListItem* pOldItem = GetCustomListItemAt(mainIndex, subIndex);
650 SysTryReturnResult(NID_UI_CTRL, pOldItem, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at mainIndex(%d), subIndex(%d).", mainIndex, subIndex);
651 SysTryReturnResult(NID_UI_CTRL, pOldItem->__pCustomListItemImpl, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at mainIndex(%d), subIndex(%d).", mainIndex, subIndex);
653 item.__pCustomListItemImpl->__pTableViewItemData = pOldItem->__pCustomListItemImpl->__pTableViewItemData;
655 r = SetInItemsList(item, mainIndex, subIndex);
656 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to update an item.");
658 _TableViewItemUpdateParams updateParams;
659 updateParams.pItem = const_cast<CustomListItem*>(&item);
660 updateParams.isDividerEnabled = _isDividerEnabled;
661 updateParams.pCheckBitmaps = _pCheckBitmaps;
662 updateParams.annexStyle = _annexStyle;
664 r = _CustomListItemImpl::UpdateTableViewItem(updateParams);
665 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to refresh an item.");
667 r = GetCore().RefreshTableView(mainIndex, subIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
668 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, E_SYSTEM, "Item not inserted successFully.");
674 _ExpandableListImpl::RemoveSubItemAt(int mainIndex, int subIndex)
676 result r = E_SUCCESS;
678 SysTryReturn(NID_UI_CTRL, ((mainIndex >= 0) && (mainIndex < GetGroupCount())), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
680 SysTryReturn(NID_UI_CTRL, ((subIndex >= 0) && (subIndex < GetSubItemCount(mainIndex))), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. subIndex = %d", subIndex);
682 r = RemoveFromItemsList(mainIndex, subIndex);
683 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to remove item.");
685 __directDelete = true;
687 r = GetCore().RefreshTableView(mainIndex, subIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
689 __directDelete = false;
691 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to remove item.");
693 if (_annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK || _annexStyle == TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING)
695 int checkedCount = GetCheckedItemCount(mainIndex);
697 if (checkedCount == 0)
699 _CheckElementModel* pGroupCheckElement = GetCheckElementAt(mainIndex, -1);
700 SysTryReturnResult(NID_UI_CTRL, pGroupCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at %d index.", mainIndex);
702 pGroupCheckElement->SetCheckBoxStatus(CHECK_BOX_UNCHECKED);
704 DrawItem(mainIndex, -1);
712 _ExpandableListImpl::RemoveAllSubItemsAt(int mainIndex)
714 result r = E_SUCCESS;
716 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d.", mainIndex);
718 int count = GetSubItemCountAt(mainIndex);
719 for (int index = 0; index < count; index++)
721 r = RemoveSubItemAt(mainIndex, 0);
728 _ExpandableListImpl::RemoveAllItems(void)
730 result r = E_SUCCESS;
731 result finalResult = E_SUCCESS;
733 int count = GetGroupCount();
734 for (int index = count - 1; index >= 0; index--)
736 r = RemoveItemAt(index);
741 SysLog(NID_UI_CTRL, "[E_SYSTEM] A system error has occurred. Item at %d index not removed successfully", index);
749 _ExpandableListImpl::IsItemChecked(int groupIndex, int subIndex) const
753 return IsItemChecked(groupIndex);
757 return IsSubItemChecked(groupIndex, subIndex);
762 _ExpandableListImpl::IsItemChecked(int mainIndex) const
764 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. list style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL.");
766 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()),
767 false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
769 const _CheckElementModel* pCheckElement = GetCheckElementAt(mainIndex, -1);
770 SysTryReturn(NID_UI_CTRL, pCheckElement, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get checkElement at mainIndex(%d).", mainIndex);
772 return (bool)pCheckElement->GetCheckBoxStatus();
776 _ExpandableListImpl::GetFirstCheckedItemIndex(void) const
778 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), INVALID_INDEX, INVALID_INDEX, "[INVALID_INDEX] List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
780 int count = GetGroupCount();
781 for (int index = 0; index < count; index++)
783 if (IsItemChecked(index))
786 return INVALID_INDEX;
790 _ExpandableListImpl::GetItemIdAt(int mainIndex) const
792 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
794 const CustomListItem* pCustomListItem = GetCustomListItemAt(mainIndex, -1);
795 SysTryReturn(NID_UI_CTRL, pCustomListItem, -1, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at mainIndex(%d).", mainIndex);
797 return pCustomListItem->__pCustomListItemImpl->itemId;
801 _ExpandableListImpl::GetItemIndexFromItemId(int itemId) const
803 int count = GetGroupCount();
804 for (int index = 0; index < count; index++)
806 const CustomListItem* pCustomListItem = GetCustomListItemAt(index, -1);
807 SysTryReturn(NID_UI_CTRL, pCustomListItem, INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", index);
809 if (itemId == pCustomListItem->__pCustomListItemImpl->itemId)
812 return INVALID_INDEX;
816 _ExpandableListImpl::GetSubItemIdAt(int mainIndex, int subIndex) const
818 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
820 SysTryReturn(NID_UI_CTRL, (subIndex >= 0 && subIndex < GetSubItemCount(mainIndex)), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. subIndex = %d", subIndex);
822 const CustomListItem* pCustomListItem = GetCustomListItemAt(mainIndex, subIndex);
823 SysTryReturn(NID_UI_CTRL, pCustomListItem, INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at mainIndex(%d), subIndex(%d).", mainIndex, subIndex);
825 return pCustomListItem->__pCustomListItemImpl->itemId;
829 _ExpandableListImpl::SetItemExpanded(int mainIndex, bool expand)
831 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
833 Boolean* pIsExpanded = new Boolean(expand);
834 SysTryReturn(NID_UI_CTRL, pIsExpanded, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
836 __groupExpandStateList.SetAt(*pIsExpanded, mainIndex, true);
838 if (GetCore().GetFirstDrawnFlag() || (GetCore().IsGroupExpanded(mainIndex) == expand))
843 result r = E_SUCCESS;
845 _TableViewGroupItemData* pTableViewGroupItemData = GetTableViewGroupItemAt(mainIndex);
846 SysTryReturn(NID_UI_CTRL, pTableViewGroupItemData, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get item at %d mainIndex.", mainIndex);
848 Label* pArrowLabel = dynamic_cast<Label*>(pTableViewGroupItemData->GetControl(ARROW_ELEMENT_NAME));
849 SysTryReturn(NID_UI_CTRL, pArrowLabel, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get arrow icon.");
853 r = GetCore().ExpandGroup(mainIndex);
854 pArrowLabel->SetBackgroundBitmap(*__pClosedImage);
858 r = GetCore().CollapseGroup(mainIndex);
859 pArrowLabel->SetBackgroundBitmap(*__pOpenedImage);
862 pArrowLabel->Invalidate(true);
868 _ExpandableListImpl::SetItemEnabled(int mainIndex, bool enable)
870 result r = E_SUCCESS;
872 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
874 _CheckElementModel* pCheckElement = GetCheckElementAt(mainIndex, -1);
875 SysTryReturnResult(NID_UI_CTRL, pCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at mainIndex(%d).", mainIndex);
881 if (pCheckElement->GetCheckBoxStatus() == CHECK_BOX_DISABLED)
883 pCheckElement->SetCheckBoxStatus(CHECK_BOX_CHECKED);
888 if (pCheckElement->GetCheckBoxStatus() == CHECK_BOX_CHECKED)
890 if (_annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK)
892 pCheckElement->SetCheckBoxStatus(CHECK_BOX_DISABLED);
898 r = GetCore().SetItemEnabled(mainIndex, -1, enable);
899 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
905 _ExpandableListImpl::IsItemEnabled(int mainIndex) const
907 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
909 return GetCore().IsItemEnabled(mainIndex, -1);
913 _ExpandableListImpl::SetSubItemEnabled(int mainIndex, int subIndex, bool enable)
915 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex(%d)", mainIndex);
916 SysTryReturnResult(NID_UI_CTRL, (subIndex >= 0 && subIndex < GetSubItemCount(mainIndex)), E_INVALID_ARG, "Invalid argument used. subIndex(%d)", subIndex);
918 result r = E_SUCCESS;
920 _CheckElementModel* pCheckElement = GetCheckElementAt(mainIndex, subIndex);
921 SysTryReturnResult(NID_UI_CTRL, pCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at mainIndex(%d) subIndex(%d).", mainIndex, subIndex);
927 if (pCheckElement->GetCheckBoxStatus() == CHECK_BOX_DISABLED)
929 pCheckElement->SetCheckBoxStatus(CHECK_BOX_CHECKED);
934 if (pCheckElement->GetCheckBoxStatus() == CHECK_BOX_CHECKED)
936 if (_annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK)
938 pCheckElement->SetCheckBoxStatus(CHECK_BOX_DISABLED);
944 r = GetCore().SetItemEnabled(mainIndex, subIndex, enable);
945 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
951 _ExpandableListImpl::IsSubItemEnabled(int mainIndex, int subIndex) const
953 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
955 SysTryReturn(NID_UI_CTRL, (subIndex >= 0 && subIndex < GetSubItemCount(mainIndex)), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. subIndex = %d", subIndex);
957 return GetCore().IsItemEnabled(mainIndex, subIndex);
961 _ExpandableListImpl::SetItemChecked(int groupIndex, int itemIndex, bool check)
965 return SetItemChecked(groupIndex, check);
969 return SetSubItemChecked(groupIndex, itemIndex, check);
974 _ExpandableListImpl::SetItemChecked(int mainIndex, bool check)
976 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
978 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, "A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
980 SysTryReturnResult(NID_UI_CTRL, (IsItemEnabled(mainIndex)), E_SYSTEM, "A system error has occurred. The item is not enabled at mainIndex %d.", mainIndex);
982 if (IsItemChecked(mainIndex) == check)
987 _CheckElementModel* pCheckElement = GetCheckElementAt(mainIndex, -1);
988 SysTryReturnResult(NID_UI_CTRL, pCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at mainIndex(%d)", mainIndex);
990 if (_annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO)
992 if (_currentRadioGroupIndex != -1)
994 _CheckElementModel* pOldSubCheckElement = GetCheckElementAt(_currentRadioGroupIndex, _currentRadioIndex);
995 SysTryReturnResult(NID_UI_CTRL, pOldSubCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at mainIndex(%d) subIndex(%d).", _currentRadioGroupIndex, _currentRadioIndex);
997 pOldSubCheckElement->SetCheckBoxStatus(CHECK_BOX_UNCHECKED);
999 DrawItem(_currentRadioGroupIndex, _currentRadioIndex);
1002 _currentRadioGroupIndex = (check == true) ? mainIndex : -1;
1003 pCheckElement->SetCheckBoxStatus((_CheckBoxBitmapType)check);
1004 _currentRadioIndex = -1;
1009 int subCount = GetSubItemCountAt(mainIndex);
1013 pCheckElement->SetCheckBoxStatus((_CheckBoxBitmapType)check);
1017 for (int subItemCount = 0; subItemCount < subCount; subItemCount++)
1019 SetSubItemChecked(mainIndex, subItemCount, check);
1027 _ExpandableListImpl::SetSubItemCheckedRadio(int mainIndex, int subIndex, bool check)
1029 if (_currentRadioGroupIndex != -1)
1031 _CheckElementModel* pOldSubCheckElement = GetCheckElementAt(_currentRadioGroupIndex, _currentRadioIndex);
1032 SysTryReturnResult(NID_UI_CTRL, pOldSubCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at mainIndex(%d) subIndex(%d).", _currentRadioGroupIndex, _currentRadioIndex);
1034 pOldSubCheckElement->SetCheckBoxStatus(CHECK_BOX_UNCHECKED);
1036 DrawItem(_currentRadioGroupIndex, _currentRadioIndex);
1041 _currentRadioGroupIndex = mainIndex;
1042 _currentRadioIndex = subIndex;
1046 _currentRadioGroupIndex = -1;
1047 _currentRadioIndex = -1;
1050 _CheckElementModel* pSubCheckElement = GetCheckElementAt(mainIndex, subIndex);
1051 SysTryReturnResult(NID_UI_CTRL, pSubCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at mainIndex(%d) subIndex(%d).", mainIndex, subIndex);
1053 pSubCheckElement->SetCheckBoxStatus((_CheckBoxBitmapType)check);
1055 DrawItem(mainIndex, subIndex);
1061 _ExpandableListImpl::SetSubItemCheckedMarkOnOff(int mainIndex, int subIndex, bool check)
1063 _CheckElementModel* pCheckElement = GetCheckElementAt(mainIndex, subIndex);
1064 SysTryReturnResult(NID_UI_CTRL, pCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at mainIndex(%d) subIndex(%d).", mainIndex, subIndex);
1066 pCheckElement->SetCheckBoxStatus((_CheckBoxBitmapType)check);
1068 _CheckElementModel* pGroupCheckElement = GetCheckElementAt(mainIndex, -1);
1069 SysTryReturnResult(NID_UI_CTRL, pGroupCheckElement, E_SYSTEM, "A system error has occurred. Failed to get checkElement at mainIndex(%d).", mainIndex);
1071 if ((check) || (GetCheckedItemCountAt(mainIndex) > 0))
1073 pGroupCheckElement->SetCheckBoxStatus(CHECK_BOX_CHECKED);
1077 pGroupCheckElement->SetCheckBoxStatus(CHECK_BOX_UNCHECKED);
1080 DrawItem(mainIndex, -1);
1081 DrawItem(mainIndex, subIndex);
1087 _ExpandableListImpl::SetSubItemChecked(int mainIndex, int subIndex, bool check)
1089 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
1091 SysTryReturnResult(NID_UI_CTRL, (subIndex >= 0 && subIndex < GetSubItemCount(mainIndex)), E_INVALID_ARG, "Invalid argument used. subIndex = %d", subIndex);
1093 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, "A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
1095 if (IsSubItemChecked(mainIndex, subIndex) == check)
1100 if (_annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO)
1102 return SetSubItemCheckedRadio(mainIndex, subIndex, check);
1106 return SetSubItemCheckedMarkOnOff(mainIndex, subIndex, check);
1111 _ExpandableListImpl::GetCheckedItemCountAt(int mainIndex) const
1113 int totalSubItemCount = GetSubItemCountAt(mainIndex);
1116 for (int index = 0; index < totalSubItemCount; index++)
1118 if (IsSubItemChecked(mainIndex, index) == true)
1128 _ExpandableListImpl::IsSubItemChecked(int mainIndex, int subIndex) const
1130 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. list style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL.");
1132 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
1134 SysTryReturn(NID_UI_CTRL, (subIndex >= 0 && subIndex < GetSubItemCount(mainIndex)), false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. subIndex = %d", subIndex);
1136 const _CheckElementModel* pCheckElement = GetCheckElementAt(mainIndex, subIndex);
1137 SysTryReturn(NID_UI_CTRL, pCheckElement, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get checkElement at mainIndex(%d) subIndex(%d).", mainIndex, subIndex);
1139 return (bool)pCheckElement->GetCheckBoxStatus();
1143 _ExpandableListImpl::SetAllSubItemsChecked(int mainIndex, bool check)
1145 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
1147 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, "A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
1148 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_RADIO), E_SYSTEM, "A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_RADIO");
1150 int totalSubItemCount = GetSubItemCountAt(mainIndex);
1151 result r = E_SUCCESS;
1153 for (int subItemCount = 0; subItemCount < totalSubItemCount; subItemCount++)
1155 r = SetSubItemChecked(mainIndex, subItemCount, check);
1156 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
1163 _ExpandableListImpl::RemoveAllCheckedSubItemsAt(int mainIndex)
1165 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
1167 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, "A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
1169 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_RADIO), E_SYSTEM, "A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_RADIO");
1171 result r = E_SUCCESS;
1172 int totalSubItemCount = GetSubItemCountAt(mainIndex);
1174 for (int subItemCount = 0; subItemCount < totalSubItemCount; subItemCount++)
1176 bool isChecked = IsSubItemChecked(mainIndex, subItemCount);
1180 r = RemoveSubItemAt(mainIndex, subItemCount);
1181 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, "A system error has occurred. Failed to remove item");
1189 _ExpandableListImpl::GetFirstCheckedSubItemIndex(int mainIndex) const
1191 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] A system error has occurred. List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
1193 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
1195 int totalSubItemCount = GetSubItemCountAt(mainIndex);
1197 for (int subItemCount = 0; subItemCount < totalSubItemCount; subItemCount++)
1199 if (IsSubItemChecked(mainIndex, subItemCount))
1201 return subItemCount;
1205 return INVALID_INDEX;
1209 _ExpandableListImpl::GetLastCheckedItemIndex(void) const
1211 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] A system error has occurred. List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
1213 int count = GetGroupCount();
1215 for (int index = count - 1; index >= 0; index--)
1217 if (IsItemChecked(index))
1223 return INVALID_INDEX;
1227 _ExpandableListImpl::GetLastCheckedSubItemIndex(int mainIndex) const
1229 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] A system error has occurred. List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
1231 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
1233 int count = GetSubItemCountAt(mainIndex);
1235 for (int index = count - 1; index >= 0; index--)
1237 if (IsSubItemChecked(mainIndex, index))
1242 return INVALID_INDEX;
1246 _ExpandableListImpl::GetNextCheckedItemIndexAfter(int mainIndex) const
1248 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] A system error has occurred. List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
1250 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
1252 for (int index = mainIndex+1; index < GetGroupCount(); index++)
1254 if (IsItemChecked(index))
1260 return INVALID_INDEX;
1264 _ExpandableListImpl::GetNextCheckedSubItemIndexAfter(int mainIndex, int subIndex) const
1266 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), INVALID_INDEX, E_SYSTEM, "[E_SYSTEM] A system error has occurred. List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
1268 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
1269 SysTryReturn(NID_UI_CTRL, (subIndex >= 0 && subIndex < GetSubItemCount(mainIndex)), INVALID_INDEX, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. subIndex = %d", subIndex);
1271 int count = GetSubItemCountAt(mainIndex);
1273 for (int index = subIndex + 1; index < count; index++)
1275 if (IsSubItemChecked(mainIndex, index))
1281 return INVALID_INDEX;
1285 _ExpandableListImpl::GetSubItemIndexFromItemId(int itemId, int& mainIndex, int& subIndex) const
1287 mainIndex = INVALID_INDEX;
1288 subIndex = INVALID_INDEX;
1290 for (int index = 0; index < GetGroupCount(); index++)
1292 for (int count = 0; count < GetSubItemCountAt(index); count++)
1294 const CustomListItem* pCustomListItem = GetCustomListItemAt(index, count);
1295 SysTryReturnResult(NID_UI_CTRL, pCustomListItem, E_SYSTEM, "A system error has occurred. Failed to get an item at mainIndex(%d) subIndex(%d).", index, count);
1297 SysTryReturnResult(NID_UI_CTRL, pCustomListItem->__pCustomListItemImpl, E_SYSTEM, "A system error has occurred. Failed to get an item at mainIndex(%d) subIndex(%d).", index, count);
1299 if (itemId == pCustomListItem->__pCustomListItemImpl->itemId)
1308 return E_OBJ_NOT_FOUND;
1312 _ExpandableListImpl::ScrollToBottom(void)
1314 result r = E_SUCCESS;
1316 int lastGroupIndex = GetGroupCount() - 1;
1317 int lastItemIndex = GetSubItemCountAt(lastGroupIndex) - 1;
1319 r = GetCore().SetBottomDrawnItemIndex(lastGroupIndex, lastItemIndex);
1320 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1327 _ExpandableListImpl::ScrollToTop(void)
1329 result r = E_SUCCESS;
1331 r = GetCore().SetTopDrawnItemIndex(0, -1);
1332 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
1333 SetLastResult(E_SUCCESS);
1341 _ExpandableListImpl::ScrollToTop(int mainIndex, int subIndex)
1343 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
1344 SysTryReturnResult(NID_UI_CTRL, (subIndex >= 0 && subIndex < GetSubItemCount(mainIndex)), E_INVALID_ARG, "Invalid argument used. subIndex = %d", subIndex);
1345 result r = E_SUCCESS;
1347 r = GetCore().SetTopDrawnItemIndex(mainIndex, subIndex);
1348 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1356 _ExpandableListImpl::ScrollToTop(int mainIndex)
1358 SysTryReturn(NID_UI_CTRL, ((mainIndex < GetGroupCount()) && (mainIndex >= 0)), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d.", mainIndex);
1360 result r = E_SUCCESS;
1362 r = GetCore().SetTopDrawnItemIndex(mainIndex, -1);
1363 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1371 _ExpandableListImpl::SetBgColor(const Color& color)
1373 GetCore().SetBackgroundColor(color);
1378 _ExpandableListImpl::RefreshItem(int mainIndex)
1380 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d.", mainIndex);
1382 int topGroupIndex = -1;
1383 int bottomGroupIndex = -1;
1386 GetCore().GetTopDrawnItemIndex(topGroupIndex, itemIndex);
1387 GetCore().GetBottomDrawnItemIndex(bottomGroupIndex, itemIndex);
1389 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= topGroupIndex && mainIndex <= bottomGroupIndex), E_INVALID_OPERATION, "Index should be within drawn item range %d.", mainIndex);
1391 result r = E_SUCCESS;
1393 int count = GetSubItemCountAt(mainIndex);
1394 for (int indexItem = 0; indexItem < count; indexItem++)
1396 r = RefreshSubItem(mainIndex, indexItem);
1399 SysLog(NID_UI_CTRL, "Not able to refresh item with index %d %d.", mainIndex, indexItem);
1407 _ExpandableListImpl::RefreshSubItem(int mainIndex, int subIndex)
1409 SysTryReturnResult(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), E_INVALID_ARG, "Invalid argument used. mainIndex = %d", mainIndex);
1410 SysTryReturnResult(NID_UI_CTRL, (subIndex >= 0 && subIndex < GetSubItemCount(mainIndex)), E_INVALID_ARG, "Invalid argument used. subIndex = %d", subIndex);
1412 int topItemIndex = -1;
1413 int bottomItemIndex = -1;
1414 int groupItemIndex = -1;
1416 GetCore().GetTopDrawnItemIndex(groupItemIndex, topItemIndex);
1417 GetCore().GetBottomDrawnItemIndex(groupItemIndex, bottomItemIndex);
1419 SysTryReturnResult(NID_UI_CTRL, (subIndex >= topItemIndex && subIndex <= bottomItemIndex), E_INVALID_OPERATION,
1420 "Index should be within drawn item range %d.", subIndex);
1422 result r = E_SUCCESS;
1424 CustomListItem* pCustomListItem = GetCustomListItemAt(mainIndex, subIndex);
1425 SysTryReturn(NID_UI_CTRL, pCustomListItem, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at mainIndex(%d) subIndex(%d).", mainIndex, subIndex);
1427 _TableViewItemUpdateParams updateParams;
1428 updateParams.pItem = pCustomListItem;
1429 updateParams.isDividerEnabled = _isDividerEnabled;
1430 updateParams.pCheckBitmaps = _pCheckBitmaps;
1431 updateParams.annexStyle = _annexStyle;
1433 r = _CustomListItemImpl::UpdateTableViewItem(updateParams);
1434 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "A system error has occurred. Failed to refresh an item.");
1436 _TableViewItemData* pTableViewItemData = pCustomListItem->__pCustomListItemImpl->__pTableViewItemData;
1437 SysTryReturn(NID_UI_CTRL, pTableViewItemData, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at mainIndex(%d) subIndex(%d).", mainIndex, subIndex);
1439 pTableViewItemData->Invalidate(true);
1445 _ExpandableListImpl::GetCheckedItemCount(int mainIndex)
1447 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), 0, E_INVALID_ARG, "[E_INVALID_ARG] The groupIndex %d is invalid", mainIndex);
1449 _TableViewGroupItemData* pGroupItem = GetTableViewGroupItemAt(mainIndex);
1450 SysTryReturn(NID_UI_CTRL, pGroupItem, 0, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get GroupItem at %d index.", mainIndex);
1452 int checkedCount = 0;
1453 int subItemCount = GetSubItemCountAt(mainIndex);
1455 for (int itemCount = 0; itemCount < subItemCount; itemCount++)
1457 if (IsSubItemChecked(mainIndex, itemCount) == true)
1463 return checkedCount;
1467 _ExpandableListImpl::IsItemExpanded(int mainIndex) const
1469 SysTryReturn(NID_UI_CTRL, (mainIndex >= 0 && mainIndex < GetGroupCount()), false, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. mainIndex = %d", mainIndex);
1471 if (GetCore().GetFirstDrawnFlag())
1473 Boolean* pIsExpanded = dynamic_cast<Boolean*>(const_cast<Object*>(__groupExpandStateList.GetAt(mainIndex)));
1474 SysTryReturn(NID_UI_CTRL, pIsExpanded, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get expanded state at index(%d).", mainIndex);
1476 return pIsExpanded->ToBool();
1480 return (GetCore().IsGroupExpanded(mainIndex));
1484 _ExpandableListImpl::OnTableViewItemStateChanged(_TableView& tableView, int itemIndex, _TableViewItem* pItem, TableViewItemStatus status)
1490 _ExpandableListImpl::OnTableViewContextItemActivationStateChanged(_TableView& tableView, int itemIndex, _TableViewItem* pContextItem, bool activated)
1496 _ExpandableListImpl::OnTableViewItemReordered(_TableView& tableView, int itemIndexFrom, int itemIndexTo)
1502 _ExpandableListImpl::OnGroupedTableViewGroupItemStateChanged(_TableView& tableView, int groupIndex, _TableViewItem* pItem, TableViewItemStatus status)
1504 CustomListItem* pCustomListItem = GetCustomListItemAt(groupIndex, -1);
1505 SysTryReturnVoidResult(NID_UI_CTRL, pCustomListItem, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", groupIndex);
1507 CustomListItemStatus customListItemStatus = CUSTOM_LIST_ITEM_STATUS_NORMAL;
1508 ItemStatus itemStatus = ITEM_HIGHLIGHTED;
1512 case TABLE_VIEW_ITEM_STATUS_SELECTED:
1513 itemStatus = ITEM_SELECTED;
1514 customListItemStatus = CUSTOM_LIST_ITEM_STATUS_SELECTED;
1516 case TABLE_VIEW_ITEM_STATUS_HIGHLIGHTED:
1517 itemStatus = ITEM_HIGHLIGHTED;
1518 customListItemStatus = CUSTOM_LIST_ITEM_STATUS_FOCUSED;
1520 case TABLE_VIEW_ITEM_STATUS_CHECKED:
1521 itemStatus = ITEM_CHECKED;
1523 case TABLE_VIEW_ITEM_STATUS_UNCHECKED:
1524 itemStatus = ITEM_UNCHECKED;
1527 SetLastResult(E_SYSTEM);
1531 LinkedList* pElements = &pCustomListItem->__pCustomListItemImpl->elements;
1532 _ElementBaseModel* pElementBase = null;
1534 for (int i = 0; i < pElements->GetCount(); i++)
1536 pElementBase = dynamic_cast<_ElementBaseModel*>(pElements->GetAt(i));
1537 SysTryReturnVoidResult(NID_UI_CTRL, (pElementBase != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get valid element at index %d.", i);
1539 if (pElementBase->_elementType != LIST_ITEM_ELEMENT_TYPE_CHECKBOX)
1541 pElementBase->HandleElementEvent(customListItemStatus);
1545 if ((!_isDividerEnabled) && (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL))
1547 bool isChecked = false;
1548 isChecked = IsItemChecked(groupIndex);
1552 itemStatus = ITEM_UNCHECKED;
1556 itemStatus = ITEM_CHECKED;
1559 SetItemChecked(groupIndex, !isChecked);
1562 ProcessItemStateChange(groupIndex, -1, itemStatus);
1569 _ExpandableListImpl::OnGroupedTableViewItemStateChanged(_TableView& tableView, int groupIndex, int itemIndex, _TableViewItem* pItem, TableViewItemStatus status)
1571 CustomListItem* pCustomListItem = GetCustomListItemAt(groupIndex, itemIndex);
1572 SysTryReturnVoidResult(NID_UI_CTRL, pCustomListItem, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at groupIndex(%d), itemIndex(%d).", groupIndex, itemIndex);
1574 CustomListItemStatus customListItemStatus = CUSTOM_LIST_ITEM_STATUS_NORMAL;
1575 ItemStatus itemStatus = ITEM_HIGHLIGHTED;
1576 result r = E_SUCCESS;
1580 case TABLE_VIEW_ITEM_STATUS_SELECTED:
1581 itemStatus = ITEM_SELECTED;
1582 customListItemStatus = CUSTOM_LIST_ITEM_STATUS_SELECTED;
1584 case TABLE_VIEW_ITEM_STATUS_HIGHLIGHTED:
1585 itemStatus = ITEM_HIGHLIGHTED;
1586 customListItemStatus = CUSTOM_LIST_ITEM_STATUS_FOCUSED;
1588 case TABLE_VIEW_ITEM_STATUS_CHECKED:
1589 itemStatus = ITEM_CHECKED;
1591 case TABLE_VIEW_ITEM_STATUS_UNCHECKED:
1592 itemStatus = ITEM_UNCHECKED;
1595 SetLastResult(E_SYSTEM);
1599 SysTryReturnVoidResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[E_SYSTEM] A system error has occurred. ListItemStatus is invalid");
1601 LinkedList* pElements = &pCustomListItem->__pCustomListItemImpl->elements;
1602 _ElementBaseModel* pElementBase = null;
1604 for (int i = 0; i < pElements->GetCount(); i++)
1606 pElementBase = dynamic_cast<_ElementBaseModel*>(pElements->GetAt(i));
1607 SysTryReturnVoidResult(NID_UI_CTRL, (pElementBase != null), E_SYSTEM, "Invalid element.");
1609 if (pElementBase->_elementType != LIST_ITEM_ELEMENT_TYPE_CHECKBOX)
1611 pElementBase->HandleElementEvent(customListItemStatus);
1615 if ((!_isDividerEnabled) && (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL))
1617 bool isChecked = false;
1618 isChecked = IsSubItemChecked(groupIndex, itemIndex);
1622 itemStatus = ITEM_UNCHECKED;
1626 itemStatus = ITEM_CHECKED;
1629 SetSubItemChecked(groupIndex, itemIndex, !isChecked);
1632 ProcessItemStateChange(groupIndex, itemIndex, itemStatus);
1638 _ExpandableListImpl::OnGroupedTableViewContextItemActivationStateChanged(_TableView& tableView, int groupIndex, int itemIndex, _TableViewItem* pContextItem, bool activated)
1644 _ExpandableListImpl::OnGroupedTableViewItemReordered(_TableView& tableView, int groupIndexFrom, int itemIndexFrom, int groupIndexTo, int itemIndexTo)
1650 _ExpandableListImpl::OnSectionTableViewItemStateChanged(_TableView& tableView, int sectionIndex, int itemIndex, _TableViewItem* pItem, TableViewItemStatus status)
1656 _ExpandableListImpl::OnSectionTableViewContextItemActivationStateChanged(_TableView& tableView, int sectionIndex, int itemIndex, _TableViewItem* pContextItem, bool activated)
1662 _ExpandableListImpl::OnTableViewItemSwept(_TableView& tableView, int groupIndex, int itemIndex, TableViewSweepDirection direction)
1668 _ExpandableListImpl::OnTouchPressed (const Control &source, const Point ¤tPosition, const TouchEventInfo &touchInfo)
1670 Label* pArrowLabel = dynamic_cast<Label*>(const_cast<Control*>(&source));
1674 _TableViewGroupItemData* pTableViewGroupItemData = dynamic_cast<_TableViewGroupItemData*>(pArrowLabel->GetParent());
1675 SysTryReturnVoidResult(NID_UI_CTRL, (pTableViewGroupItemData != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get arrow icon.");
1677 if (GetCore().IsGroupExpanded(pTableViewGroupItemData->groupIndex))
1679 GetCore().CollapseGroup(pTableViewGroupItemData->groupIndex);
1680 pArrowLabel->SetBackgroundBitmap(*__pOpenedImage);
1684 GetCore().ExpandGroup(pTableViewGroupItemData->groupIndex);
1685 pArrowLabel->SetBackgroundBitmap(*__pClosedImage);
1688 pArrowLabel->Invalidate(true);
1692 _ListBaseImpl::OnTouchPressed(source, currentPosition, touchInfo);
1698 _ExpandableListImpl::ProcessItemStateChange(int mainIndex, int subIndex, int elementId, ItemStatus itemStatus)
1701 if (subIndex == -1 )
1703 itemId = GetItemIdAt(mainIndex);
1707 itemId = GetSubItemIdAt(mainIndex, subIndex);
1710 _ListListener* pListenerList = null;
1711 IExpandableItemEventListener* pEventListener = null;
1713 for (int listenerCount = 0; listenerCount < __itemListenersList.GetCount(); listenerCount++)
1715 pListenerList = dynamic_cast<_ListListener*>(__itemListenersList.GetAt(listenerCount));
1716 SysTryReturnVoidResult(NID_UI_CTRL, (pListenerList != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get ListListener");
1718 pEventListener = dynamic_cast<IExpandableItemEventListener*>(pListenerList->pListener);
1719 SysTryReturnVoidResult(NID_UI_CTRL, (pEventListener != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get EventListener");
1721 pEventListener->OnItemStateChanged(GetPublic(), mainIndex, subIndex, itemId, elementId, itemStatus);
1723 SetLastResult(E_SUCCESS);
1728 _ExpandableListImpl::ProcessItemStateChange(int mainIndex, int subIndex, ItemStatus itemStatus)
1731 if (subIndex == -1 )
1733 itemId = GetItemIdAt(mainIndex);
1737 itemId = GetSubItemIdAt(mainIndex, subIndex);
1740 _ListListener* pListenerList = null;
1741 IExpandableItemEventListener* pEventListener = null;
1743 for (int listenerCount = 0; listenerCount < __itemListenersList.GetCount(); listenerCount++)
1745 pListenerList = dynamic_cast<_ListListener*>(__itemListenersList.GetAt(listenerCount));
1746 SysTryReturnVoidResult(NID_UI_CTRL, (pListenerList != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get ListListener");
1748 pEventListener = dynamic_cast<IExpandableItemEventListener*>(pListenerList->pListener);
1749 SysTryReturnVoidResult(NID_UI_CTRL, (pEventListener != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get EventListener");
1751 pEventListener->OnItemStateChanged(GetPublic(), mainIndex, subIndex, itemId, itemStatus);
1753 SetLastResult(E_SUCCESS);
1758 _ExpandableListImpl::OnDraw(void)
1760 if (GetCore().GetFirstDrawnFlag())
1762 _ListBaseImpl::OnDraw();
1764 int mainItemCount = GetGroupCount();
1766 for (int mainIndex = 0; mainIndex < mainItemCount; mainIndex++)
1768 Boolean* pIsExpanded = dynamic_cast<Boolean*>(__groupExpandStateList.GetAt(mainIndex));
1769 SysTryReturnVoidResult(NID_UI_CTRL, pIsExpanded, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get expanded state at index(%d).", mainIndex);
1771 if (!pIsExpanded->ToBool())
1773 SetItemExpanded(mainIndex, false);
1777 GetCore().UpdateTableView();
1781 _ListBaseImpl::OnDraw();
1788 _ExpandableListImpl::DeleteExpandStateFlag(Object* pObj)
1790 Boolean* pExpanded = null;
1791 pExpanded = dynamic_cast<Boolean*>(pObj);
1796 class _ExpandableListMaker
1797 : public _UiBuilderControlMaker
1800 _ExpandableListMaker(_UiBuilder* uibuilder)
1801 : _UiBuilderControlMaker(uibuilder){};
1802 virtual ~_ExpandableListMaker(){};
1803 static _UiBuilderControlMaker*
1804 GetInstance(_UiBuilder* uibuilder)
1806 _ExpandableListMaker* pExpandableListMaker = new (std::nothrow) _ExpandableListMaker(uibuilder);
1808 return pExpandableListMaker;
1812 Make(_UiBuilderControl* pControl)
1814 result r = E_SYSTEM;
1815 _UiBuilderControlLayout* pControlProperty = null;
1816 ExpandableList* pExpandableList = null;
1820 CustomListStyle style = CUSTOM_LIST_STYLE_NORMAL;
1821 Tizen::Base::String elementString;
1822 bool isItemDivider = true;
1825 GetProperty(pControl, &pControlProperty);
1826 if (pControlProperty == null)
1831 pExpandableList = new (std::nothrow) ExpandableList();
1832 if (pExpandableList == null)
1837 rect = pControlProperty->GetRect();
1838 Tizen::Base::String styleString;
1839 styleString = pControlProperty->GetStyle();
1841 if (styleString.Equals(L"CUSTOM_LIST_STYLE_NORMAL", false))
1843 style = CUSTOM_LIST_STYLE_NORMAL;
1845 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_RADIO", false))
1847 style = CUSTOM_LIST_STYLE_RADIO;
1849 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_RADIO_WITH_DIVIDER", false))
1851 style = CUSTOM_LIST_STYLE_RADIO_WITH_DIVIDER;
1853 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_MARK", false))
1855 style = CUSTOM_LIST_STYLE_MARK;
1857 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_MARK_WITH_DIVIDER", false))
1859 style = CUSTOM_LIST_STYLE_MARK_WITH_DIVIDER;
1861 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_ONOFF", false))
1863 style = CUSTOM_LIST_STYLE_ONOFF;
1865 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_ONOFF_WITH_DIVIDER", false))
1867 style = CUSTOM_LIST_STYLE_ONOFF_WITH_DIVIDER;
1871 style = CUSTOM_LIST_STYLE_NORMAL;
1874 if (pControl->GetElement(L"itemDivider", elementString))
1876 if (elementString.Equals(L"true", false))
1878 isItemDivider = true;
1882 isItemDivider = false;
1886 r = pExpandableList->Construct(rect, style, isItemDivider);
1889 delete pExpandableList;
1893 if (pControl->GetElement(L"textOfEmptyList", elementString))
1895 pExpandableList->SetTextOfEmptyList(elementString);
1898 if (pControl->GetElement(L"colorOfEmptyListText", elementString))
1900 ConvertStringToColor(elementString, color);
1901 pExpandableList->SetTextColorOfEmptyList(color);
1903 GET_DIMENSION_CONFIG(LIST::LIST_MIN_SIZE, _CONTROL_ORIENTATION_PORTRAIT, dimMin);
1904 rectMin = (pControl->GetAttribute(0))->GetRect();
1905 (pControl->GetAttribute(0))->SetRect(rectMin.x, rectMin.y, dimMin.width, dimMin.height);
1907 GET_DIMENSION_CONFIG(LIST::LIST_MIN_SIZE, _CONTROL_ORIENTATION_LANDSCAPE, dimMin);
1908 rectMin = (pControl->GetAttribute(1))->GetRect();
1909 (pControl->GetAttribute(1))->SetRect(rectMin.x, rectMin.y, dimMin.width, dimMin.height);
1911 return pExpandableList;
1917 _ExpandableListRegister::_ExpandableListRegister()
1919 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
1921 if (pUiBuilderControlTableManager)
1923 pUiBuilderControlTableManager->RegisterControl(L"ExpandableList", _ExpandableListMaker::GetInstance);
1926 _ExpandableListRegister::~_ExpandableListRegister()
1928 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
1930 if (pUiBuilderControlTableManager)
1932 pUiBuilderControlTableManager->UnregisterControl(L"ExpandableList");
1935 static _ExpandableListRegister ExpandableListRegisterToUiBuilder;
1936 }}} //Tizen::Ui::Controls