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_GroupedListImpl.cpp
20 * @brief This file contains implementation of _GroupedListImpl class
23 #include <FUiCtrlCustomListItem.h>
24 #include <FUiCtrlCustomListItemFormat.h>
25 #include <FBaseSysLog.h>
26 #include <FGrp_BitmapImpl.h>
27 #include "FUiCtrl_CustomListItemFormatImpl.h"
28 #include "FUiCtrl_CustomListItemImpl.h"
29 #include "FUiCtrl_GroupedListImpl.h"
30 #include "FUiCtrl_ListItemBaseImpl.h"
31 #include "FUiCtrl_CustomListElements.h"
32 #include "FUiCtrl_FastScroll.h"
33 #include "FUiCtrl_FastScrollIndex.h"
34 #include "FUiCtrl_ListListener.h"
36 #include "FUi_UiBuilder.h"
37 #include "FUi_ResourceSizeInfo.h"
38 #include "FUi_ResourceManager.h"
40 using namespace Tizen::Base;
41 using namespace Tizen::Graphics;
42 using namespace Tizen::Base::Collection;
43 using namespace Tizen::Base::Utility;
46 namespace Tizen { namespace Ui { namespace Controls
49 static const int ID_FORMAT_STRING = 1;
50 static const int ID_FORMAT_MARGIN = 2;
52 _GroupedListItemDataProvider::_GroupedListItemDataProvider(_GroupedListImpl* pGroupedListImpl)
54 __pList = pGroupedListImpl;
57 _GroupedListItemDataProvider::~_GroupedListItemDataProvider(void)
62 _GroupedListItemDataProvider::GetGroupCount()
64 SysTryReturn(NID_UI_CTRL, __pList, 0, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Item provider not constructed properly.");
65 return __pList->GetGroupCount();
69 _GroupedListItemDataProvider::GetItemCount(int groupIndex)
71 SysTryReturn(NID_UI_CTRL, __pList, 0, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Item provider not constructed properly.");
73 return __pList->GetSubItemCountAt(groupIndex);
77 _GroupedListItemDataProvider::CreateGroupItem(int groupIndex, int itemWidth)
81 _TableViewItemParams tableViewItemParams;
82 tableViewItemParams.pItem = __pList->GetCustomListItemAt(groupIndex, -1);
83 tableViewItemParams.width = itemWidth;
84 tableViewItemParams.itemId = -1;
85 tableViewItemParams.groupIndex = groupIndex;
86 tableViewItemParams.itemIndex = -1;
87 tableViewItemParams.isDividerEnabled = false;
88 tableViewItemParams.pCheckBitmaps = null;
89 tableViewItemParams.annexStyle = __pList->_annexStyle;
91 r = _CustomListItemImpl::CreateTableViewItem(tableViewItemParams);
92 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
94 return __pList->GetTableViewGroupItemAt(groupIndex);
98 _GroupedListItemDataProvider::CreateItem(int groupIndex, int itemIndex, int itemWidth)
100 result r = E_SUCCESS;
102 CustomListItem* pCustomListItem = __pList->GetCustomListItemAt(groupIndex, itemIndex);
103 SysTryReturn(NID_UI_CTRL, pCustomListItem, null, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", itemIndex);
105 _TableViewItemParams tableViewItemParams;
106 tableViewItemParams.pItem = pCustomListItem;
107 tableViewItemParams.width = itemWidth;
108 tableViewItemParams.itemId = pCustomListItem->__pCustomListItemImpl->itemId;
109 tableViewItemParams.groupIndex = groupIndex;
110 tableViewItemParams.itemIndex = itemIndex;
111 tableViewItemParams.isDividerEnabled = __pList->_isDividerEnabled;
112 tableViewItemParams.pCheckBitmaps = __pList->_pCheckBitmaps;
113 tableViewItemParams.annexStyle = __pList->_annexStyle;
115 r = _CustomListItemImpl::CreateTableViewItem(tableViewItemParams);
116 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
118 pCustomListItem->__pCustomListItemImpl->__pTableViewItemData->AddTouchEventListener(*__pList);
120 TableViewItem* pItem = pCustomListItem->__pCustomListItemImpl->__pTableViewItemData;
121 pItem->SetBackgroundColor(__pList->__bgColor);
127 _GroupedListItemDataProvider::GetDefaultGroupItemHeight(void)
129 return __pList->__groupItemHeight;
133 _GroupedListItemDataProvider::GetDefaultItemHeight(void)
135 CustomListItem* pItem = __pList->GetCustomListItemAt(0, 0);
139 return pItem->__pCustomListItemImpl->height;
143 return __pList->_defaultItemHeight;
148 _GroupedListItemDataProvider::DeleteGroupItem(int groupIndex, TableViewGroupItem* pItem)
152 if (__pList->__directDelete == false)
154 CustomListItem* pCustomListItem = __pList->GetCustomListItemAt(groupIndex, -1);
155 pCustomListItem->__pCustomListItemImpl->__pTableViewGroupItemData = null;
162 _GroupedListItemDataProvider::IsReorderable(int groupIndexFrom, int groupIndexTo)
168 _GroupedListItemDataProvider::DeleteItem(int groupIndex, int itemIndex, TableViewItem* pItem)
172 if (__pList->__directDelete == false)
174 CustomListItem* pCustomListItem = __pList->GetCustomListItemAt(groupIndex, itemIndex);
175 pCustomListItem->__pCustomListItemImpl->__pTableViewItemData = null;
182 _GroupedListItemDataProvider::UpdateGroupItem(int groupIndex, TableViewGroupItem* pItem)
187 _GroupedListItemDataProvider::UpdateItem(int groupIndex, int itemIndex, TableViewItem* pItem)
189 CustomListItem* pCustomListItem = __pList->GetCustomListItemAt(groupIndex, itemIndex);
190 SysTryReturnVoidResult(NID_UI_CTRL, pCustomListItem, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d, %d).", groupIndex, itemIndex);
192 _TableViewItemUpdateParams updateParams;
193 updateParams.pItem = pCustomListItem;
194 updateParams.isDividerEnabled = __pList->_isDividerEnabled;
195 updateParams.pCheckBitmaps = __pList->_pCheckBitmaps;
196 updateParams.annexStyle = __pList->_annexStyle;
198 result r = E_SUCCESS;
200 r = _CustomListItemImpl::UpdateTableViewItem(updateParams);
201 SysTryReturnVoidResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to refresh an item.");
203 pItem->SetEnabled(true);
207 _GroupedListImpl::GetInstance(GroupedList& groupedList)
209 return static_cast<_GroupedListImpl*>(groupedList._pControlImpl);
212 const _GroupedListImpl*
213 _GroupedListImpl::GetInstance(const GroupedList& groupedList)
215 return static_cast<const _GroupedListImpl*>(groupedList._pControlImpl);
218 _GroupedListImpl::_GroupedListImpl(Control* pList, _TableView* pCore)
219 : _ListBaseImpl(pList, pCore)
220 , __pItemProvider(null)
221 , __pItemListener(null)
222 , __groupItemHeight(0)
223 , __groupItemTextFont(0)
224 , __directDelete(false)
225 , __pItemFormat(null)
229 _GroupedListImpl::~_GroupedListImpl(void)
231 int count = GetItemCount();
233 for (int index = 0; index < count; index++)
235 RemoveFromSubItemsList(index);
238 RemoveAllFromItemsList();
240 __itemListenersList.RemoveAll(true);
241 __fastScrollListenersList.RemoveAll(true);
243 delete __pItemProvider;
245 delete __pItemFormat;
249 _GroupedListImpl::GetPublicClassName(void) const
251 return "GroupedList";
255 _GroupedListImpl::GetPublic(void) const
257 return static_cast<const GroupedList&>(_ControlImpl::GetPublic());
261 _GroupedListImpl::GetPublic(void)
263 return static_cast<GroupedList&>(_ControlImpl::GetPublic());
267 _GroupedListImpl::GetCore(void) const
269 return static_cast<const _TableView&>(_ControlImpl::GetCore());
273 _GroupedListImpl::GetCore(void)
275 return static_cast<_TableView&>(_ControlImpl::GetCore());
279 _GroupedListImpl::CreateGroupedListImplN(GroupedList* pControl, const Rectangle& bounds, bool itemDivider, bool fastScroll)
281 result r = E_SUCCESS;
282 _TableView* pCore = null;
283 _GroupedListImpl* pImpl = null;
285 r = GET_SIZE_INFO(GroupedList).CheckInitialSizeValid(Dimension(bounds.width, bounds.height), _CONTROL_ORIENTATION_PORTRAIT);
286 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
288 if(fastScroll == true)
290 pCore = _TableView::CreateTableViewN(TABLE_VIEW_STYLE_GROUPED, itemDivider, TABLE_VIEW_SCROLL_BAR_STYLE_FAST_SCROLL);
294 pCore = _TableView::CreateTableViewN(TABLE_VIEW_STYLE_GROUPED, itemDivider, TABLE_VIEW_SCROLL_BAR_STYLE_FADE_OUT);
298 SysTryReturn(NID_UI_CTRL, pCore, null, r, "[%s] Propagating.", GetErrorMessage(r));
300 pImpl = new (std::nothrow) _GroupedListImpl(pControl, pCore);
301 SysTryCatch(NID_UI_CTRL, pImpl, , E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
303 r = pImpl->InitializeBoundsProperties(GET_SIZE_INFO(GroupedList), bounds, pCore->GetOrientation());
304 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
306 pCore->SetItemDividerEnabled(itemDivider);
321 _GroupedListImpl::AddGroupedItemEventListener(const IGroupedItemEventListener& listener)
323 _ListListener* pListenerData = new (std::nothrow) _ListListener();
325 SysTryReturn(NID_UI_CTRL, pListenerData, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
327 pListenerData->pListener = const_cast<IGroupedItemEventListener*>(&listener);
328 __itemListenersList.Add(*pListenerData);
334 _GroupedListImpl::RemoveGroupedItemEventListener(const IGroupedItemEventListener& listener)
336 _ListListener* pListenerData = null;
337 int count = __itemListenersList.GetCount();
340 for (int listenerCount = 0; listenerCount < count; listenerCount++)
342 pListenerData = dynamic_cast<_ListListener*>(__itemListenersList.GetAt(listenerCount));
344 if ((pListenerData != null) && (pListenerData->pListener == &listener))
347 __itemListenersList.RemoveAt(listenerCount, true);
356 _GroupedListImpl::AddFastScrollEventListener(const IFastScrollEventListener& listener)
358 _ListListener* pListenerData = new (std::nothrow) _ListListener();
360 SysTryReturn(NID_UI_CTRL, pListenerData, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
362 pListenerData->pListener = const_cast<IFastScrollEventListener*>(&listener);
363 __fastScrollListenersList.Add(*pListenerData);
369 _GroupedListImpl::RemoveFastScrollEventListener(const IFastScrollEventListener& listener)
371 _ListListener* pListenerData = null;
372 int count = __fastScrollListenersList.GetCount();
374 for (int listenerCount = 0; listenerCount < count; listenerCount++)
376 pListenerData = dynamic_cast<_ListListener*>(__fastScrollListenersList.GetAt(listenerCount));
378 if ((pListenerData != null) && (pListenerData->pListener == &listener))
380 __fastScrollListenersList.RemoveAt(listenerCount, true);
388 _GroupedListImpl::Initialize(void)
390 __pItemProvider = new (std::nothrow) _GroupedListItemDataProvider(this);
391 SysTryReturn(NID_UI_CTRL, (__pItemProvider != null), E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
393 TableViewStyle style = GetCore().GetTableViewStyle();
394 SysTryReturn(NID_UI_CTRL, style == TABLE_VIEW_STYLE_GROUPED, E_INVALID_OPERATION, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The style of TableView is not TABLE_VIEW_STYLE_GROUPED");
396 _TableViewItemProvider* pItemProvider = _TableViewItemProvider::CreateTableViewItemProviderN(style);
397 SysTryReturn(NID_UI_CTRL, pItemProvider != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
399 result r = pItemProvider->SetGroupedStyleItemProvider(__pItemProvider);
402 delete pItemProvider;
403 SysTryReturn(NID_UI_CTRL, false, r, r, "[%s] Propagating.", GetErrorMessage(r));
406 r = GetCore().SetItemProvider(pItemProvider);
407 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
409 r = GetCore().AddGroupedTableViewItemEventListener(*this);
410 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
412 if (GetCore().GetScrollStyle() == TABLE_VIEW_SCROLL_BAR_STYLE_FAST_SCROLL)
414 r = GetCore().AddFastScrollListener(*this);
415 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
418 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_DEFAULT_HEIGHT, GetCore().GetOrientation(), __groupItemHeight);
419 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_DEFAULT_FONT_SIZE, GetCore().GetOrientation(), __groupItemTextFont);
421 __pItemFormat = new (std::nothrow) CustomListItemFormat();
422 SysTryReturn(NID_UI_CTRL, __pItemFormat, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
424 __pItemFormat->Construct();
427 GET_SHAPE_CONFIG(TABLEVIEW::GROUPITEM_INDEX_BAR_LEFT_MARGIN, GetCore().GetOrientation(), leftMargin);
429 __pItemFormat->AddElement(ID_FORMAT_MARGIN, Rectangle(0, 0, leftMargin, __groupItemHeight), __groupItemTextFont);
430 __pItemFormat->AddElement(ID_FORMAT_STRING, Rectangle(leftMargin, 0, GetCore().GetBounds().width, __groupItemHeight), __groupItemTextFont);
432 __pItemFormat->SetElementEventEnabled(ID_FORMAT_MARGIN, true);
433 __pItemFormat->SetElementEventEnabled(ID_FORMAT_STRING, true);
439 _GroupedListImpl::AddGroup(const String& text, const Bitmap* pBackgroundBitmap, int groupId)
441 return InsertGroupAt(GetGroupCount(), text, pBackgroundBitmap, groupId);
445 _GroupedListImpl::AddItem(int groupIndex, const CustomListItem& item, int itemId)
447 SysTryReturnResult(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < GetGroupCount())),
448 E_INVALID_ARG, "Invalid argument used. groupIndex = %d", groupIndex);
450 return InsertItemAt(groupIndex, GetSubItemCountAt(groupIndex), item, itemId);
454 _GroupedListImpl::SetItemAt(int groupIndex, int itemIndex, const CustomListItem& item, int itemId)
456 result r = E_SUCCESS;
458 SysTryReturnResult(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < GetGroupCount())),
459 E_INVALID_ARG, "Invalid argument used. groupIndex = %d", groupIndex);
461 SysTryReturnResult(NID_UI_CTRL, ((itemIndex >= 0) && (itemIndex < GetSubItemCountAt(groupIndex))),
462 E_INVALID_ARG, "Invalid argument used. groupIndex = %d", itemIndex);
464 SysTryReturnResult(NID_UI_CTRL, (IsItemNew(item) == true), E_SYSTEM, "A system error has occurred. The item already exists.");
466 CustomListItem* pOldCustomListItem = GetCustomListItemAt(groupIndex, itemIndex);
467 SysTryReturnResult(NID_UI_CTRL, pOldCustomListItem, E_SYSTEM, "A system error has occurred. Failed to get old CustomListItem");
469 _CheckElementModel* pOldCheckElement = GetCheckElementAt(groupIndex, itemIndex);
470 _CheckElementModel* pNewCheckElement = item.__pCustomListItemImpl->GetCheckElement();
472 if (pNewCheckElement && pOldCheckElement)
474 pNewCheckElement->SetCheckBoxStatus(pOldCheckElement->GetCheckBoxStatus());
477 item.__pCustomListItemImpl->__pTableViewItemData = pOldCustomListItem->__pCustomListItemImpl->__pTableViewItemData;
478 item.__pCustomListItemImpl->itemId = itemId;
480 _TableViewGroupItemData* pGroupItem = GetTableViewGroupItemAt(groupIndex);
481 SysTryReturn(NID_UI_CTRL, pGroupItem, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get GroupItem at %d index.", groupIndex);
483 r = SetInItemsList(item, groupIndex, itemIndex);
484 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "A system error has occurred. Failed to insert an item.");
486 r = GetCore().RefreshTableView(groupIndex, itemIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_MODIFY);
487 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "A system error has occurred. Failed to insert an item.");
493 _GroupedListImpl::InsertGroupAt(int groupIndex, const String& text, const Bitmap* pBackgroundBitmap, int groupId)
495 result r = E_SUCCESS;
497 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex <= GetGroupCount()),
498 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d", groupIndex);
500 CustomListItem* pCustomListItem = new (std::nothrow) CustomListItem();
501 SysTryReturn(NID_UI_CTRL, pCustomListItem, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
503 pCustomListItem->Construct(__groupItemHeight);
504 pCustomListItem->SetItemFormat(*__pItemFormat);
505 pCustomListItem->SetElement(ID_FORMAT_STRING, text);
506 pCustomListItem->SetElement(ID_FORMAT_MARGIN, "");
508 if (pBackgroundBitmap != null)
510 pCustomListItem->SetNormalItemBackgroundBitmap(*pBackgroundBitmap);
513 pCustomListItem->__pCustomListItemImpl->itemId = groupId;
515 r = InsertIntoItemsList(*pCustomListItem, groupIndex, -1);
516 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to insert an item.");
518 r = GetCore().RefreshTableView(groupIndex, -1, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
519 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to insert an item.");
525 _GroupedListImpl::SetGroupAt(int groupIndex, const String& text, const Bitmap* pBackgroundBitmap, int groupId)
527 result r = E_SUCCESS;
529 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < GetGroupCount()),
530 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d", groupIndex);
532 CustomListItem* pCustomListItem = GetCustomListItemAt(groupIndex, -1);
533 SysTryReturn(NID_UI_CTRL, (pCustomListItem), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to insert an item.");
535 _CustomListItemImpl* pCustomListItemImpl = pCustomListItem->__pCustomListItemImpl;
536 SysTryReturn(NID_UI_CTRL, (pCustomListItemImpl), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to insert an item.");
538 pCustomListItem->SetElement(ID_FORMAT_STRING, text);
539 if (pBackgroundBitmap != null)
541 pCustomListItem->SetNormalItemBackgroundBitmap(*pBackgroundBitmap);
544 pCustomListItemImpl->itemId = groupId;
546 _TableViewItemUpdateParams updateParams;
547 updateParams.pItem = pCustomListItem;
548 updateParams.isDividerEnabled = _isDividerEnabled;
549 updateParams.pCheckBitmaps = _pCheckBitmaps;
550 updateParams.annexStyle = _annexStyle;
552 r = _CustomListItemImpl::UpdateTableViewItem(updateParams);
553 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "A system error has occurred. Failed to refresh an item.");
559 _GroupedListImpl::InsertItemAt(int groupIndex, int itemIndex, const CustomListItem& item, int itemId)
561 result r = E_SUCCESS;
563 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < GetGroupCount())),
564 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d", groupIndex);
566 SysTryReturn(NID_UI_CTRL, ((itemIndex >= 0) && (itemIndex <= GetSubItemCountAt(groupIndex))),
567 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. itemIndex = %d", itemIndex);
569 item.__pCustomListItemImpl->itemId = itemId;
571 r = InsertIntoItemsList(item, groupIndex, itemIndex);
572 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to insert an item.");
574 r = GetCore().RefreshTableView(groupIndex, itemIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_ADD);
575 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to insert an item.");
581 _GroupedListImpl::RemoveItemAt(int groupIndex, int itemIndex)
583 int count = GetGroupCount();
584 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < count)),
585 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
587 SysTryReturn(NID_UI_CTRL, ((itemIndex >= 0) && (itemIndex < GetSubItemCountAt(groupIndex))),
588 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. itemIndex = %d", itemIndex);
590 result r = E_SUCCESS;
592 __directDelete = true;
594 r = GetCore().RefreshTableView(groupIndex, itemIndex, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
596 __directDelete = false;
600 r = RemoveFromItemsList(groupIndex, itemIndex);
601 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to remove item.");
608 _GroupedListImpl::RemoveAllItemsAt(int groupIndex)
610 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < GetGroupCount())),
611 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
613 result r = E_SUCCESS;
615 int count = GetSubItemCountAt(groupIndex) - 1;
616 for (int index = count; index >= 0; index--)
618 r = RemoveItemAt(groupIndex, 0);
625 _GroupedListImpl::RemoveGroupAt(int groupIndex)
627 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < GetGroupCount())),
628 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
630 result r = E_SUCCESS;
632 r = RemoveFromSubItemsList(groupIndex);
633 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
635 r = RemoveFromItemsList(groupIndex, -1);
636 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
638 __directDelete = true;
640 r = GetCore().RefreshTableView(groupIndex, -1, TABLE_VIEW_REFRESH_TYPE_ITEM_REMOVE);
641 SysTryReturn(NID_UI_CTRL, (r == E_SUCCESS), r, r, "[%s] Propagating.", GetErrorMessage(r));
643 __directDelete = false;
649 _GroupedListImpl::RemoveAllGroups(void)
651 result r = E_SUCCESS;
652 int count = GetGroupCount();
654 for (int groupIndex = (count - 1); groupIndex >= 0; groupIndex--)
656 r = RemoveGroupAt(groupIndex);
663 _GroupedListImpl::RemoveAllItems(void)
665 result r = E_SUCCESS;
666 int count = GetGroupCount();
668 for (int groupIndex = count - 1; groupIndex >= 0; groupIndex--)
670 r = RemoveAllItemsAt(groupIndex);
677 _GroupedListImpl::SetItemEnabled(int groupIndex, int itemIndex, bool enable)
679 int count = GetGroupCount();
680 SysTryReturnResult(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < count)), E_INVALID_ARG, "Invalid argument used. groupIndex = %d.", groupIndex);
682 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < GetSubItemCountAt(groupIndex)), E_INVALID_ARG, "Invalid argument used. itemIndex(%d)", itemIndex);
684 _CheckElementModel* pCheckElementModel = GetCheckElementAt(groupIndex, itemIndex);
686 if (pCheckElementModel)
690 if (pCheckElementModel->GetCheckBoxStatus() == CHECK_BOX_DISABLED)
692 pCheckElementModel->SetCheckBoxStatus(CHECK_BOX_CHECKED);
697 if (pCheckElementModel->GetCheckBoxStatus() == CHECK_BOX_CHECKED)
699 if (_annexStyle == TABLE_VIEW_ANNEX_STYLE_MARK)
701 pCheckElementModel->SetCheckBoxStatus(CHECK_BOX_DISABLED);
707 result r = E_SUCCESS;
709 r = GetCore().SetItemEnabled(groupIndex, itemIndex, enable);
710 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
712 DrawItem(groupIndex, itemIndex);
718 _GroupedListImpl::IsItemEnabled(int groupIndex, int itemIndex) const
720 return GetCore().IsItemEnabled(groupIndex, itemIndex);
724 _GroupedListImpl::SetItemChecked(int groupIndex, int itemIndex, bool check)
726 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, "A system error has occurred. List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
728 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < GetGroupCount())),
729 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d", groupIndex);
731 SysTryReturn(NID_UI_CTRL, ((itemIndex >= 0) && (itemIndex < GetSubItemCountAt(groupIndex))),
732 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. itemIndex = %d", itemIndex);
734 SysTryReturn(NID_UI_CTRL, (IsItemEnabled(groupIndex, itemIndex) == true),
735 E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. The List item is not enabled at index %d %d.", groupIndex, itemIndex);
737 if (IsItemChecked(groupIndex, itemIndex) == check)
742 _CheckElementModel* pCheckElement = GetCheckElementAt(groupIndex, itemIndex);
743 SysTryReturnResult(NID_UI_CTRL, (pCheckElement != null), E_SYSTEM, "A system error has occurred. Checkbox element not created");
745 if (_annexStyle == TABLE_VIEW_ANNEX_STYLE_RADIO)
749 if (_currentRadioGroupIndex != -1)
751 _CheckElementModel* pOldCheckElement = GetCheckElementAt(_currentRadioGroupIndex, _currentRadioIndex);
752 SysTryReturnResult(NID_UI_CTRL, (pOldCheckElement != null), E_SYSTEM, "A system error has occurred. Checkbox element not created");
754 pOldCheckElement->SetCheckBoxStatus(CHECK_BOX_UNCHECKED);
756 DrawItem(_currentRadioGroupIndex, _currentRadioIndex);
759 _currentRadioGroupIndex = groupIndex;
760 _currentRadioIndex = itemIndex;
765 _currentRadioGroupIndex = -1;
766 _currentRadioIndex = -1;
770 pCheckElement->SetCheckBoxStatus((_CheckBoxBitmapType)check);
778 _GroupedListImpl::IsItemChecked(int groupIndex, int itemIndex) const
780 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL),
781 false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL.");
783 const _CheckElementModel* pCheckElement = GetCheckElementAt(groupIndex, itemIndex);
784 SysTryReturn(NID_UI_CTRL, pCheckElement, false, E_SYSTEM, "[E_SYSTEM] A system error has occurred. CheckElement is not constructed properly.");
786 return (bool)pCheckElement->GetCheckBoxStatus();
790 _GroupedListImpl::SetAllItemsChecked(int groupIndex, bool check)
792 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
793 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_RADIO), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_RADIO");
795 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < GetGroupCount())),
796 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d", groupIndex);
798 _CheckElementModel* pCheckElement = null;
800 int groupItemCount = GetSubItemCountAt(groupIndex);
801 for (int indexItem = 0; indexItem < groupItemCount; indexItem++)
803 pCheckElement = GetCheckElementAt(groupIndex, indexItem);
804 SysTryReturnResult(NID_UI_CTRL, (pCheckElement != null), E_SYSTEM, "A system error has occurred. Checkbox element not created.");
806 pCheckElement->SetCheckBoxStatus((_CheckBoxBitmapType)check);
813 _GroupedListImpl::RemoveAllCheckedItems(void)
815 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
816 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_RADIO), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_RADIO");
818 int count = GetGroupCount();
820 for (int groupIndex = (count - 1); groupIndex >= 0; groupIndex--)
822 if (RemoveAllCheckedItemsAt(groupIndex) != E_SUCCESS)
824 SysLog(NID_UI_CTRL, "Checked item with groupIndex=%d not removed successfully.", groupIndex);
832 _GroupedListImpl::RemoveAllCheckedItemsAt(int groupIndex)
834 result r = E_SUCCESS;
836 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
837 SysTryReturn(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_RADIO), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. The List Style should not be TABLE_VIEW_ANNEX_STYLE_RADIO");
839 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < GetGroupCount())),
840 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d", groupIndex);
842 int count = GetSubItemCountAt(groupIndex);
843 for (int itemIndex = (count - 1) ; itemIndex >= 0; itemIndex--)
845 if (IsItemChecked(groupIndex, itemIndex))
847 r = RemoveItemAt(groupIndex, itemIndex);
850 SysLog(NID_UI_CTRL, "Checked item with index %d %d not removed successfully.", groupIndex, itemIndex);
859 _GroupedListImpl::GetFirstCheckedItemIndex(int& groupIndex, int& itemIndex) const
861 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, "List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
865 int count = GetGroupCount();
866 for (int indexGroup = 0; indexGroup < count; indexGroup++)
868 int subItemCount = GetSubItemCountAt(indexGroup);
870 for (int indexItem = 0; indexItem < subItemCount; indexItem++)
872 if (IsItemChecked(indexGroup, indexItem))
874 itemIndex = indexItem;
875 groupIndex = indexGroup;
885 _GroupedListImpl::GetLastCheckedItemIndex(int& groupIndex, int& itemIndex) const
887 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, "List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
891 int count = GetGroupCount();
893 for (int indexGroup = count - 1; indexGroup >= 0; indexGroup--)
895 int subItemCount = GetSubItemCountAt(indexGroup);
897 for (int indexItem = subItemCount - 1; indexItem >= 0; indexItem--)
899 if (IsItemChecked(indexGroup, indexItem))
901 itemIndex = indexItem;
902 groupIndex = indexGroup;
912 _GroupedListImpl::GetNextCheckedItemIndexAfter(int& groupIndex, int& itemIndex) const
914 SysTryReturnResult(NID_UI_CTRL, (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL), E_SYSTEM, "List style should not be TABLE_VIEW_ANNEX_STYLE_NORMAL");
916 int count = GetGroupCount();
918 int subItemCount = GetSubItemCountAt(groupIndex);
920 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < count)),
921 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
923 SysTryReturn(NID_UI_CTRL, ((itemIndex >= 0) && (itemIndex < subItemCount)),
924 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. itemIndex = %d.", itemIndex);
926 SysTryReturn(NID_UI_CTRL, (!((groupIndex == (count - 1)) && (itemIndex == (subItemCount - 1)))),
927 E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Input item is last item of last group")
931 for (int indexGroup = groupIndex; indexGroup < count; indexGroup++)
933 if (indexGroup == groupIndex)
935 itemStart = itemIndex + 1;
942 subItemCount = GetSubItemCountAt(groupIndex);
943 for (int indexItem = itemStart; indexItem < subItemCount; indexItem++)
945 if (IsItemChecked(indexGroup, indexItem))
947 itemIndex = indexItem;
948 groupIndex = indexGroup;
958 _GroupedListImpl::GetGroupIndexFromGroupId(int groupId) const
960 int count = GetGroupCount();
962 for (int indexGroup = 0; indexGroup < count; indexGroup++)
964 const CustomListItem* pCustomListItem = GetCustomListItemAt(indexGroup, -1);
965 SysTryReturn(NID_UI_CTRL, pCustomListItem, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", indexGroup);
967 if (pCustomListItem->__pCustomListItemImpl->itemId == groupId)
972 SetLastResult(E_SUCCESS);
977 _GroupedListImpl::GetItemIndexFromItemId(int itemId, int& groupIndex, int& itemIndex) const
982 int count = GetGroupCount();
984 for (int indexGroup = 0; indexGroup < count; indexGroup++)
986 int subItemCount = GetSubItemCountAt(indexGroup);
987 for (int indexItem = 0; indexItem < subItemCount; indexItem++)
989 const CustomListItem* pSubListItem = GetCustomListItemAt(indexGroup, indexItem);
990 SysTryReturn(NID_UI_CTRL, pSubListItem, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", indexItem);
992 if (pSubListItem->__pCustomListItemImpl->itemId == itemId)
994 itemIndex = indexItem;
995 groupIndex = indexGroup;
1005 _GroupedListImpl::ScrollToBottom(void)
1007 int lastGroupIndex = GetGroupCount() - 1;
1008 int lastItemIndex = GetSubItemCountAt(lastGroupIndex) - 1;
1010 GetCore().SetBottomDrawnItemIndex(lastGroupIndex, lastItemIndex);
1016 _GroupedListImpl::ScrollToTop(void)
1018 GetCore().SetTopDrawnItemIndex(0, -1);
1026 _GroupedListImpl::ScrollToTop(int groupIndex)
1028 SysTryReturn(NID_UI_CTRL, ((groupIndex < GetGroupCount()) && (groupIndex >= 0)),
1029 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
1031 result r = E_SUCCESS;
1033 r = GetCore().SetTopDrawnItemIndex(groupIndex, -1);
1034 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1042 _GroupedListImpl::ScrollToTop(int groupIndex, int itemIndex)
1044 SysTryReturn(NID_UI_CTRL, ((groupIndex < GetGroupCount()) && (groupIndex >= 0)),
1045 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
1047 SysTryReturn(NID_UI_CTRL, ((itemIndex >= 0) && (itemIndex < GetSubItemCountAt(groupIndex))),
1048 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. itemIndex = %d.", itemIndex);
1050 result r = E_SUCCESS;
1052 r = GetCore().SetTopDrawnItemIndex(groupIndex, itemIndex);
1053 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, r, r, "[%s] Propagating.", GetErrorMessage(r));
1061 _GroupedListImpl::RefreshGroup(int groupIndex)
1063 result r = E_SUCCESS;
1065 SysTryReturn(NID_UI_CTRL, ((groupIndex < GetGroupCount()) && (groupIndex >= 0)),
1066 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
1068 int count = GetSubItemCountAt(groupIndex);
1069 for (int indexItem = 0; indexItem < count; indexItem++)
1071 r = RefreshItem(groupIndex, indexItem);
1074 SysLog(NID_UI_CTRL, "Not able to refresh item with index %d %d.", groupIndex, indexItem);
1082 _GroupedListImpl::RefreshItem(int groupIndex, int itemIndex)
1084 SysTryReturn(NID_UI_CTRL, ((groupIndex < GetGroupCount()) && (groupIndex >= 0)),
1085 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
1087 result r = E_SUCCESS;
1089 SysTryReturn(NID_UI_CTRL, ((itemIndex >= 0) && (itemIndex < GetSubItemCountAt(groupIndex))),
1090 E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. itemIndex = %d.", itemIndex);
1092 int topItemIndex = -1;
1093 int bottomItemIndex = -1;
1094 int groupItemIndex = -1;
1096 GetCore().GetTopDrawnItemIndex(groupItemIndex, topItemIndex);
1097 GetCore().GetBottomDrawnItemIndex(groupItemIndex, bottomItemIndex);
1099 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= topItemIndex && itemIndex <= bottomItemIndex), E_INVALID_OPERATION,
1100 "Index should be within drawn item range %d.", itemIndex);
1102 _TableViewItemUpdateParams updateParams;
1103 updateParams.pItem = GetCustomListItemAt(groupIndex, itemIndex);
1104 updateParams.isDividerEnabled = _isDividerEnabled;
1105 updateParams.pCheckBitmaps = _pCheckBitmaps;
1106 updateParams.annexStyle = _annexStyle;
1108 r = _CustomListItemImpl::UpdateTableViewItem(updateParams);
1109 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), E_SYSTEM, "A system error has occurred. Failed to refresh an item.");
1111 DrawItem(groupIndex, itemIndex);
1117 _GroupedListImpl::GetGroupIdAt(int groupIndex) const
1119 SysTryReturn(NID_UI_CTRL, ((groupIndex < GetGroupCount()) && (groupIndex >= 0)),
1120 -1, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
1122 const CustomListItem* pCustomListItem = GetCustomListItemAt(groupIndex, -1);
1123 SysTryReturn(NID_UI_CTRL, pCustomListItem, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", groupIndex);
1125 SysTryReturn(NID_UI_CTRL, pCustomListItem->__pCustomListItemImpl, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", groupIndex);
1127 return pCustomListItem->__pCustomListItemImpl->itemId;
1131 _GroupedListImpl::GetItemIdAt(int groupIndex, int itemIndex) const
1133 int count = GetGroupCount();
1134 SysTryReturn(NID_UI_CTRL, ((groupIndex >= 0) && (groupIndex < count)),
1135 -1, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. groupIndex = %d.", groupIndex);
1137 SysTryReturn(NID_UI_CTRL, ((itemIndex >= 0) && (itemIndex < GetSubItemCountAt(groupIndex))),
1138 -1, E_INVALID_ARG, "[E_INVALID_ARG] Invalid argument used. itemIndex = %d.", itemIndex);
1140 const CustomListItem* pItem = GetCustomListItemAt(groupIndex, itemIndex);
1141 SysTryReturn(NID_UI_CTRL, pItem, -1, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d %d).", groupIndex, itemIndex);
1143 return pItem->__pCustomListItemImpl->itemId;
1147 _GroupedListImpl::SetListBackgroundColor(const Color& bgColor)
1149 GetCore().SetBackgroundColor(bgColor);
1154 _GroupedListImpl::OnTableViewItemStateChanged(_TableView& tableView, int itemIndex, _TableViewItem* pItem, TableViewItemStatus status)
1160 _GroupedListImpl::OnTableViewContextItemActivationStateChanged(_TableView& tableView, int itemIndex, _TableViewItem* pContextItem, bool activated)
1166 _GroupedListImpl::OnTableViewItemReordered(_TableView& tableView, int itemIndexFrom, int itemIndexTo)
1172 _GroupedListImpl::OnGroupedTableViewGroupItemStateChanged(_TableView& tableView, int groupIndex, _TableViewItem* pItem, TableViewItemStatus status)
1178 _GroupedListImpl::OnGroupedTableViewItemStateChanged(_TableView& tableView, int groupIndex, int itemIndex, _TableViewItem* pItem, TableViewItemStatus status)
1180 CustomListItemStatus customListItemStatus = CUSTOM_LIST_ITEM_STATUS_NORMAL;
1181 ItemStatus itemStatus = ITEM_HIGHLIGHTED;
1185 case TABLE_VIEW_ITEM_STATUS_SELECTED:
1186 itemStatus = ITEM_SELECTED;
1187 customListItemStatus = CUSTOM_LIST_ITEM_STATUS_SELECTED;
1189 case TABLE_VIEW_ITEM_STATUS_HIGHLIGHTED:
1190 itemStatus = ITEM_HIGHLIGHTED;
1191 customListItemStatus = CUSTOM_LIST_ITEM_STATUS_FOCUSED;
1193 case TABLE_VIEW_ITEM_STATUS_CHECKED:
1194 itemStatus = ITEM_CHECKED;
1196 case TABLE_VIEW_ITEM_STATUS_UNCHECKED:
1197 itemStatus = ITEM_UNCHECKED;
1200 SysLog(NID_UI_CTRL, "[E_SYSTEM] A system error has occurred. item status is invalid(%d).", status);
1201 SetLastResult(E_SYSTEM);
1205 CustomListItem* pCustomListItem = GetCustomListItemAt(groupIndex, itemIndex);
1206 SysTryReturnVoidResult(NID_UI_CTRL, pCustomListItem, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get an item at index(%d).", itemIndex);
1208 LinkedList* pElements = &pCustomListItem->__pCustomListItemImpl->elements;
1209 _ElementBaseModel* pElementBase = null;
1211 for (int i = 0; i < pElements->GetCount(); i++)
1213 pElementBase = dynamic_cast<_ElementBaseModel*>(pElements->GetAt(i));
1214 SysTryReturnVoidResult(NID_UI_CTRL, (pElementBase != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get valid element at index %d.", i);
1216 if ((_isDividerEnabled && pElementBase->_elementType != LIST_ITEM_ELEMENT_TYPE_CHECKBOX) || (!_isDividerEnabled))
1218 pElementBase->HandleElementEvent(customListItemStatus);
1222 if ((!_isDividerEnabled) && (_annexStyle != TABLE_VIEW_ANNEX_STYLE_NORMAL))
1224 bool isChecked = IsItemChecked(groupIndex, itemIndex);
1228 itemStatus = ITEM_UNCHECKED;
1232 itemStatus = ITEM_CHECKED;
1235 SetItemChecked(groupIndex, itemIndex, !isChecked);
1238 ProcessItemStateChange(groupIndex, itemIndex, itemStatus);
1245 _GroupedListImpl::OnGroupedTableViewContextItemActivationStateChanged(_TableView& tableView, int groupIndex, int itemIndex, _TableViewItem* pContextItem, bool activated)
1251 _GroupedListImpl::OnGroupedTableViewItemReordered(_TableView& tableView, int groupIndexFrom, int itemIndexFrom, int groupIndexTo, int itemIndexTo)
1257 _GroupedListImpl::OnSectionTableViewItemStateChanged(_TableView& tableView, int sectionIndex, int itemIndex, _TableViewItem* pItem, TableViewItemStatus status)
1263 _GroupedListImpl::OnSectionTableViewContextItemActivationStateChanged(_TableView& tableView, int sectionIndex, int itemIndex, _TableViewItem* pContextItem, bool activated)
1269 _GroupedListImpl::OnTableViewItemSwept(_TableView& tableView, int groupIndex, int itemIndex, TableViewSweepDirection direction)
1275 _GroupedListImpl::ProcessItemStateChange(int groupIndex, int itemIndex, int elementId, ItemStatus itemStatus)
1277 int itemId = GetItemIdAt(groupIndex, itemIndex);
1278 _ListListener* pListenerData = null;
1279 IGroupedItemEventListener* pGroupedItemEventListener = null;
1280 int count = __itemListenersList.GetCount();
1282 for (int listenerCount = 0; listenerCount < count; listenerCount++)
1284 pListenerData = dynamic_cast<_ListListener*>(__itemListenersList.GetAt(listenerCount));
1285 if (pListenerData != null)
1287 pGroupedItemEventListener = dynamic_cast<IGroupedItemEventListener*>(pListenerData->pListener);
1288 SysTryReturnVoidResult(NID_UI_CTRL, (pGroupedItemEventListener != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get EventListener");
1290 pGroupedItemEventListener->OnItemStateChanged(GetPublic(), groupIndex, itemIndex, itemId, elementId, itemStatus);
1298 _GroupedListImpl::ProcessItemStateChange(int groupIndex, int itemIndex, ItemStatus itemStatus)
1300 int itemId = GetItemIdAt(groupIndex, itemIndex);
1301 _ListListener* pListenerData = null;
1302 IGroupedItemEventListener* pGroupedItemEventListener = null;
1303 int count = __itemListenersList.GetCount();
1305 for (int listenerCount = 0; listenerCount < count; listenerCount++)
1307 pListenerData = dynamic_cast<_ListListener*>(__itemListenersList.GetAt(listenerCount));
1308 if (pListenerData != null)
1310 pGroupedItemEventListener = dynamic_cast<IGroupedItemEventListener*>(pListenerData->pListener);
1311 SysTryReturnVoidResult(NID_UI_CTRL, (pGroupedItemEventListener != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get EventListener");
1312 pGroupedItemEventListener->OnItemStateChanged(GetPublic(), groupIndex, itemIndex, itemId, itemStatus);
1315 SetLastResult(E_SUCCESS);
1320 _GroupedListImpl::OnUiFastScrollIndexSelected(_Control& source, _FastScrollIndex& index)
1322 _ListListener* pListenerData = null;
1323 IFastScrollEventListener* pFastScrollListener = null;
1324 int listenerCount = __fastScrollListenersList.GetCount();
1326 for (int listenerIndex = 0; listenerIndex < listenerCount; listenerIndex++)
1328 pListenerData = dynamic_cast<_ListListener*>(__fastScrollListenersList.GetAt(listenerIndex));
1329 SysTryReturnVoidResult(NID_UI_CTRL, (pListenerData != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get ScrollEventListener");
1331 pFastScrollListener = dynamic_cast<IFastScrollEventListener*>(pListenerData->pListener);
1332 SysTryReturnVoidResult(NID_UI_CTRL, (pFastScrollListener != null), E_SYSTEM, "[E_SYSTEM] A system error has occurred. Failed to get ScrollEventListener");
1335 String* pIndexText = index.GetIndexText();
1336 if (pIndexText != null)
1338 pIndexText->GetCharAt(0, mch);
1340 const Control& control = GetPublic();
1341 _FastScrollIndex* __pMainIndex = index.GetParentIndex();
1342 if (__pMainIndex == GetCore().GetFastScrollBar()->GetIndex())
1344 Character mainIndex(mch);
1345 pFastScrollListener->OnMainIndexChanged(control, mainIndex);
1349 Character subIndex(mch);
1350 pIndexText = __pMainIndex->GetIndexText();
1351 if (pIndexText != null)
1353 pIndexText->GetCharAt(0, mch);
1354 Character mainIndex(mch);
1355 pFastScrollListener->OnSubIndexChanged(control, mainIndex, subIndex);
1359 SetLastResult(E_SUCCESS);
1365 _GroupedListImpl::OnBoundsChanged(void)
1367 GetCore().OnBoundsChanged();
1372 _GroupedListImpl::SetFastScrollMainIndex(const String& text)
1374 SysTryReturn(NID_UI_CTRL, (text.GetLength() > 0), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Empty string");
1376 result r = GetCore().SetFastScrollIndex(text, false);
1377 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, E_SYSTEM, E_SYSTEM, "[%s] Propagating.", GetErrorMessage(r));
1379 __mainIndexText = text;
1385 _GroupedListImpl::SetFastScrollSubIndex(const String& text, FastScrollIndexDigit indexDigit)
1387 SysTryReturn(NID_UI_CTRL, (text.GetLength() > 0), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Empty string");
1389 SysTryReturn(NID_UI_CTRL, (indexDigit == SCROLL_INDEX_DIGIT_NUM_1), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. indexDigit is not SCROLL_INDEX_DIGIT_NUM_1");
1391 _FastScroll* pFastScroll = GetCore().GetFastScrollBar();
1392 SysTryReturn(NID_UI_CTRL, pFastScroll, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. FastScroll doesn't exist.");
1394 SysTryReturn(NID_UI_CTRL, (__mainIndexText.GetLength() > 0), E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. Main index of the fast scroll isn't set");
1396 _FastScrollIndex* pRootIndex = pFastScroll->GetIndex();
1397 SysTryReturn(NID_UI_CTRL, pRootIndex, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] A system error has occurred. RootIndex doesn't exist.");
1399 int subIndexDigit = 1 ;
1401 StringTokenizer strTok(text, delim);
1405 while (strTok.HasMoreTokens())
1407 strTok.GetNextToken(token);
1408 _FastScrollIndex* pSecondaryIndex = pRootIndex->GetChildIndex(i++);
1409 if (pSecondaryIndex != null)
1411 pSecondaryIndex->AddChildTextIndexArray(0, token.GetPointer(), subIndexDigit, token.GetLength());
1414 pFastScroll->UpdateIndex();
1419 class _GroupedListMaker
1420 : public _UiBuilderControlMaker
1423 _GroupedListMaker(_UiBuilder* uibuilder)
1424 : _UiBuilderControlMaker(uibuilder){};
1425 virtual ~_GroupedListMaker(){};
1426 static _UiBuilderControlMaker*
1427 GetInstance(_UiBuilder* uibuilder)
1429 _GroupedListMaker* pGroupedListMaker = new (std::nothrow) _GroupedListMaker(uibuilder);
1430 return pGroupedListMaker;
1433 virtual Tizen::Ui::Control*
1434 Make(_UiBuilderControl* pControl)
1436 result r = E_SYSTEM;
1437 _UiBuilderControlLayout* pControlProperty = null;
1438 GroupedList* pGroupedList = null;
1443 Tizen::Base::String elementString;
1444 CustomListStyle style = CUSTOM_LIST_STYLE_NORMAL;
1445 bool isItemDivider = true;
1446 bool isFastScroll = false;
1449 GetProperty(pControl, &pControlProperty);
1450 if (pControlProperty == null)
1455 pGroupedList = new (std::nothrow) GroupedList();
1456 if (pGroupedList == null)
1461 rect = pControlProperty->GetRect();
1463 Tizen::Base::String styleString;
1464 styleString = pControlProperty->GetStyle();
1466 if (styleString.Equals(L"CUSTOM_LIST_STYLE_NORMAL", false))
1468 style = CUSTOM_LIST_STYLE_NORMAL;
1470 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_RADIO", false))
1472 style = CUSTOM_LIST_STYLE_RADIO;
1474 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_RADIO_WITH_DIVIDER", false))
1476 style = CUSTOM_LIST_STYLE_RADIO_WITH_DIVIDER;
1478 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_MARK", false))
1480 style = CUSTOM_LIST_STYLE_MARK;
1482 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_MARK_WITH_DIVIDER", false))
1484 style = CUSTOM_LIST_STYLE_MARK_WITH_DIVIDER;
1486 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_ONOFF", false))
1488 style = CUSTOM_LIST_STYLE_ONOFF;
1490 else if (styleString.Equals(L"CUSTOM_LIST_STYLE_ONOFF_WITH_DIVIDER", false))
1492 style = CUSTOM_LIST_STYLE_ONOFF_WITH_DIVIDER;
1496 style = CUSTOM_LIST_STYLE_NORMAL;
1500 if (pControl->GetElement("itemDivider", elementString))
1502 if (elementString.Equals(L"true", false))
1504 isItemDivider = true;
1508 isItemDivider = false;
1512 if (pControl->GetElement("fastScroll", elementString))
1514 if (elementString.Equals(L"true", false))
1516 isFastScroll = true;
1520 isFastScroll = false;
1524 r = pGroupedList->Construct(rect, style, isItemDivider, isFastScroll);
1527 delete pGroupedList;
1531 if (pControl->GetElement("textOfEmptyList", elementString))
1533 pGroupedList->SetTextOfEmptyList(elementString);
1536 if (pControl->GetElement("colorOfEmptyListText", elementString))
1538 ConvertStringToColor(elementString, color);
1539 pGroupedList->SetTextColorOfEmptyList(color);
1542 GET_DIMENSION_CONFIG(LIST::GROUPEDLIST_MIN_SIZE, _CONTROL_ORIENTATION_PORTRAIT, dimMin);
1543 rectMin = (pControl->GetAttribute(0))->GetRect();
1544 (pControl->GetAttribute(0))->SetRect(rectMin.x, rectMin.y, dimMin.width, dimMin.height);
1546 GET_DIMENSION_CONFIG(LIST::GROUPEDLIST_MIN_SIZE, _CONTROL_ORIENTATION_LANDSCAPE, dimMin);
1547 rectMin = (pControl->GetAttribute(1))->GetRect();
1548 (pControl->GetAttribute(1))->SetRect(rectMin.x, rectMin.y, dimMin.width, dimMin.height);
1550 return pGroupedList;
1556 _GroupedListRegister::_GroupedListRegister()
1558 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
1559 if (pUiBuilderControlTableManager)
1561 pUiBuilderControlTableManager->RegisterControl(L"GroupedList", _GroupedListMaker::GetInstance);
1564 _GroupedListRegister::~_GroupedListRegister()
1566 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
1567 if (pUiBuilderControlTableManager)
1569 pUiBuilderControlTableManager->UnregisterControl(L"GroupedList");
1572 static _GroupedListRegister GroupedListRegisterToUiBuilder;
1573 }}} //Tizen::Ui::Controls