2 // Open Service Platform
3 // Copyright (c) 2012-2013 Samsung Electronics Co., Ltd.
5 // Licensed under the Apache License, Version 2.0 (the License);
6 // you may not use this file except in compliance with the License.
7 // You may obtain a copy of the License at
9 // http://www.apache.org/licenses/LICENSE-2.0/
11 // Unless required by applicable law or agreed to in writing, software
12 // distributed under the License is distributed on an "AS IS" BASIS,
13 // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
14 // See the License for the specific language governing permissions and
15 // limitations under the License.
19 * @file FUiCtrl_ListViewModel.cpp
20 * @brief This is the implementation file for _ListViewModel class.
22 * This file contains the implementation of _ListViewModel class.
25 #include <FBaseSysLog.h>
26 #include "FUiCtrl_IListItemProviderAdaptor.h"
27 #include "FUiCtrl_IListItemCommon.h"
28 #include "FUiCtrl_ListViewModel.h"
30 namespace Tizen { namespace Ui { namespace Controls
33 _ListViewModel::_ListViewModel(void)
34 : __pListProviderAdaptor(null)
35 , __pTemporaryItemBuffer(null)
36 , __countOfAllGroups(0)
37 , __countOfAllItems(0)
38 , __indexOfFocusedGroup(-1)
39 , __indexOfFocusedItem(-1)
40 , __sizeOfCachingItems(CACHE_SIZE)
41 , __overflowItemsRemovingEnabled(true)
42 , __onRemovingAllItems(false)
43 , __pListViewModelDelegate(null)
48 _ListViewModel::~_ListViewModel(void)
50 if (__pTemporaryItemBuffer != null)
52 int temporaryGroupIndex = -1;
53 int temporaryItemIndex = -1;
54 __pTemporaryItemBuffer->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
56 __pListProviderAdaptor->DeleteItem(__pTemporaryItemBuffer, temporaryGroupIndex, temporaryItemIndex);
57 __pTemporaryItemBuffer = null;
60 if (!__backupGroupNodes.empty())
62 _ListViewGroupNode* pBackupedListGroupNode = null;
63 int count = __backupGroupNodes.size();
64 for (int i = 0; i < count; i++)
66 pBackupedListGroupNode = __backupGroupNodes.back();
67 __backupGroupNodes.pop_back();
69 delete pBackupedListGroupNode;
73 DeleteAllGroupAndItem();
76 _IListItemProviderAdaptor*
77 _ListViewModel::GetItemProviderAdaptor(void) const
79 return __pListProviderAdaptor;
83 _ListViewModel::RegisterItemProviderAdaptor(const _IListItemProviderAdaptor* pProviderAdaptor)
85 SysTryReturn(NID_UI_CTRL, pProviderAdaptor != null, E_INVALID_ARG, E_INVALID_ARG,
86 "[E_INVALID_ARG] pProviderAdaptor is null.");
88 if (__pListProviderAdaptor != null)
93 __pListProviderAdaptor = const_cast<_IListItemProviderAdaptor*>(pProviderAdaptor);
99 _ListViewModel::SetGroupExpandState(int groupIndex, bool state)
101 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
102 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
103 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
105 pListGroupNode->__itemExpanded = state;
111 _ListViewModel::IsGroupExpanded(int groupIndex) const
113 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
114 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
115 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
117 return pListGroupNode->__itemExpanded;
121 _ListViewModel::GetItemFromTemporaryBuffer(int groupIndex, int itemIndex)
123 if (__onRemovingAllItems)
128 int temporaryGroupIndex = -1;
129 int temporaryItemIndex = -1;
130 if (__pTemporaryItemBuffer != null)
132 __pTemporaryItemBuffer->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
133 if (groupIndex == temporaryGroupIndex && itemIndex == temporaryItemIndex)
135 return __pTemporaryItemBuffer;
139 _IListItemCommon* pItem = GetItemFromContainer(groupIndex, itemIndex);
143 __pListProviderAdaptor->UnloadItem(__pTemporaryItemBuffer, temporaryGroupIndex, temporaryItemIndex);
144 __pTemporaryItemBuffer = __pListProviderAdaptor->LoadItem(groupIndex, itemIndex);
145 if (__pTemporaryItemBuffer != null)
147 __pTemporaryItemBuffer->SetItemIndex(groupIndex, itemIndex);
150 else if (__pTemporaryItemBuffer != null && __pTemporaryItemBuffer != pItem)
152 __pListProviderAdaptor->UnloadItem(__pTemporaryItemBuffer, temporaryGroupIndex, temporaryItemIndex);
153 __pTemporaryItemBuffer = null;
159 __pTemporaryItemBuffer = null;
164 return __pTemporaryItemBuffer;
168 _ListViewModel::GetItemFromContainer(int groupIndex, int itemIndex) const
170 if (groupIndex < 0 || groupIndex >= __countOfAllGroups)
175 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
176 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, null, GetLastResult(),
177 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
179 int temporaryGroupIndex = -1;
180 int temporaryItemIndex = -1;
182 _IListItemCommon* pItem = null;
183 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
184 _LinkedList <_IListItemCommon*>::_Iterator theEndIter = pListGroupNode->__items.end();
186 while (theIter != theEndIter)
189 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
191 if (temporaryItemIndex == itemIndex)
195 else if (temporaryItemIndex > itemIndex)
207 _ListViewModel::LoadItem(int groupIndex, int itemIndex)
209 if (__onRemovingAllItems)
214 // check validation of groupIndex
215 if (groupIndex < 0 || groupIndex >= __countOfAllGroups)
220 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
221 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, null, GetLastResult(),
222 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
224 // check validation of item index
225 if (itemIndex < -1 || itemIndex >= pListGroupNode->__itemCountInGroup)
231 _IListItemCommon* pItemCommon = GetItemFromContainer(groupIndex, itemIndex);
232 if (pItemCommon == null)
234 pItemCommon = __pListProviderAdaptor->LoadItem(groupIndex, itemIndex);
235 if (pItemCommon != null)
237 pItemCommon->SetChecked(IsItemChecked(groupIndex, itemIndex));
238 pItemCommon->SetItemEnabled(IsItemEnabled(groupIndex, itemIndex));
239 pItemCommon->SetItemIndex(groupIndex, itemIndex);
241 LoadItemToContainer(groupIndex, itemIndex, *pItemCommon);
249 _ListViewModel::LoadItemToContainer(int groupIndex, int itemIndex, _IListItemCommon& item)
251 _ListViewGroupNode* pListGroupNode = __groupNodes.at(groupIndex);
252 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
253 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
256 bool pushToTopOrMiddle = true;
258 if (pListGroupNode->__items.empty())
260 int loadedGroups = GetAllGroupCount();
261 _ListViewGroupNode* pTemporaryGroupNode = null;
262 for (int i = loadedGroups - 1; i >= 0; i--)
264 pTemporaryGroupNode = GetGroupNode(i);
265 if (pTemporaryGroupNode != null)
269 if (pTemporaryGroupNode->__items.size() > 0)
276 pushToTopOrMiddle = false;
284 int temporaryGroupIndex = -1;
285 int temporaryItemIndex = -1;
286 _IListItemCommon* pItem = null;
287 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
288 _LinkedList <_IListItemCommon*>::_Iterator theEndIter = pListGroupNode->__items.end();
289 while (theIter != theEndIter)
292 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
294 if (temporaryItemIndex == itemIndex)
298 else if (temporaryItemIndex > itemIndex)
300 // push item to top or middle
301 pListGroupNode->__items.insert(theIter, &item);
303 overCount = GetOverflowCount();
306 if (__pListViewModelDelegate != null && __pListViewModelDelegate->OnOcurredOverflowItems(__sizeOfCachingItems, overCount))
308 __sizeOfCachingItems += overCount;
312 RemoveOverflowItems(true, overCount);
321 int lastLoadedItemIndex = -1;
322 int lastLoadedGroupIndex = -1;
323 GetLastLoadedItemIndex(lastLoadedGroupIndex, lastLoadedItemIndex);
324 if (lastLoadedGroupIndex == temporaryGroupIndex && lastLoadedItemIndex == temporaryItemIndex)
326 pushToTopOrMiddle = false;
330 pushToTopOrMiddle = true;
334 // push item to bottom
335 pListGroupNode->__items.push_back(&item);
337 overCount = GetOverflowCount();
340 // if push item to end of list, RemoveOverflowItems() from top.
341 if (__pListViewModelDelegate != null && __pListViewModelDelegate->OnOcurredOverflowItems(__sizeOfCachingItems, overCount))
343 __sizeOfCachingItems += overCount;
347 RemoveOverflowItems(pushToTopOrMiddle, overCount);
355 _ListViewModel::SetListViewModelDelegate(_IListViewModelDelegate* pDelegate)
357 __pListViewModelDelegate = pDelegate;
361 _ListViewModel::IsValidItem(int groupIndex, int itemIndex) const
363 // check validation of groupIndex
364 if (groupIndex < 0 || groupIndex >= __countOfAllGroups)
369 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
370 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
371 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
373 // check validation of item index
374 if (itemIndex < -1 || itemIndex >= pListGroupNode->__itemCountInGroup)
383 _ListViewModel::IsLoadedItem(int groupIndex, int itemIndex) const
385 // check validation of groupIndex
386 if (groupIndex < 0 || groupIndex >= __countOfAllGroups)
391 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
392 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
393 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
395 // check validation of item index
396 if (itemIndex < -1 || itemIndex >= pListGroupNode->__itemCountInGroup)
401 int temporaryGroupIndex = -1;
402 int temporaryItemIndex = -1;
404 _IListItemCommon* pItem = null;
405 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
406 _LinkedList <_IListItemCommon*>::_Iterator theEndIter = pListGroupNode->__items.end();
408 while (theIter != theEndIter)
411 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
413 if (temporaryItemIndex == itemIndex)
417 else if (temporaryItemIndex > itemIndex)
429 _ListViewModel::AddGroup(int itemCount, bool usingRadioStyle)
431 SysTryReturn(NID_UI_CTRL, itemCount >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The itemCount is not valid.");
433 //Create new GroupNode
434 _ListViewGroupNode* pListGroupNode = new (std::nothrow) _ListViewGroupNode();
435 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
436 "[E_OUT_OF_MEMORY] The memory is insufficient.");
438 pListGroupNode->__itemCountInGroup = itemCount;
439 pListGroupNode->__usingRadioStyle = usingRadioStyle;
441 __groupNodes.push_back(pListGroupNode);
443 __countOfAllItems = __countOfAllItems + itemCount + 1; // include groupItem
444 __countOfAllGroups++;
450 _ListViewModel::InsertGroup(int groupIndex, int itemCount, bool usingRadioStyle)
452 // check validation of groupIndex
453 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex <= __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
454 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
456 SysTryReturn(NID_UI_CTRL, itemCount >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The itemCount is not valid.");
458 if (__groupNodes.empty() || groupIndex == GetAllGroupCount())
460 return AddGroup(itemCount);
463 //Create new GroupNode
464 _ListViewGroupNode* pListGroupNode = new (std::nothrow) _ListViewGroupNode();
465 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
466 "[E_OUT_OF_MEMORY] The memory is insufficient.");
468 pListGroupNode->__itemCountInGroup = itemCount;
469 pListGroupNode->__usingRadioStyle = usingRadioStyle;
471 __groupNodes.insert(__groupNodes.begin() + groupIndex, pListGroupNode);
473 __countOfAllItems = __countOfAllItems + itemCount + 1; // include groupItem
474 __countOfAllGroups++;
476 // item index reordering
477 int groupCount = GetAllGroupCount();
478 int temporaryGroupIndex = -1;
479 int temporaryItemIndex = -1;
481 pListGroupNode = null;
482 _IListItemCommon* pItem = null;
484 for (int i = groupCount - 1; i > groupIndex; i--)
486 pListGroupNode = GetGroupNode(i);
487 if (pListGroupNode != null)
489 for (int j = pListGroupNode->__items.size() - 1; j >= 0; j--)
491 pItem = pListGroupNode->__items.at(j);
494 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
495 pItem->SetItemIndex(i, temporaryItemIndex);
505 _ListViewModel::UnloadAllItem(void)
507 if (__groupNodes.empty())
512 int groupCount = GetAllGroupCount();
515 _ListViewGroupNode* pListGroupNode = null;
516 _IListItemCommon* pItem = null;
520 for (int i = groupCount - 1; i >= 0; i--)
522 pListGroupNode = GetGroupNode(i);
523 if (pListGroupNode != null)
525 itemCount = pListGroupNode->__items.size();
526 for (int j = itemCount - 1; j >= 0; j--)
528 pItem = pListGroupNode->__items.back();
529 pListGroupNode->__items.pop_back();
533 pItem->GetItemIndex(groupIndex, itemIndex);
534 __pListProviderAdaptor->UnloadItem(pItem, groupIndex, itemIndex);
544 _ListViewModel::DeleteAllGroupAndItem(void)
546 return RemoveAllItem(true);
550 _ListViewModel::RemoveAllItem(bool internalDestroy, bool backupItemStatus)
552 if (__groupNodes.empty())
557 __onRemovingAllItems = true;
559 _LinkedList <_ListViewGroupNode*> backupGroupNodes;
560 backupGroupNodes = __groupNodes;
562 __countOfAllGroups = 0;
563 __countOfAllItems = 0;
565 int groupCount = backupGroupNodes.size();
568 _ListViewGroupNode* pListGroupNode = null;
569 _IListItemCommon* pItem = null;
573 for (int i = groupCount - 1; i >= 0; i--)
575 pListGroupNode = backupGroupNodes.at(i);
577 if (pListGroupNode != null)
579 itemCount = pListGroupNode->__items.size();
581 for (int j = itemCount - 1; j >= 0; j--)
583 pItem = pListGroupNode->__items.back();
584 pListGroupNode->__items.pop_back();
588 pItem->GetItemIndex(groupIndex, itemIndex);
590 if (!internalDestroy)
592 __pListProviderAdaptor->UnloadItem(pItem, groupIndex, itemIndex);
596 __pListProviderAdaptor->DeleteItem(pItem, groupIndex, itemIndex);
601 pListGroupNode->__itemCountInGroup = 0;
603 if (!backupItemStatus)
605 __groupNodes.remove(pListGroupNode);
606 delete pListGroupNode;
607 pListGroupNode = null;
612 if (backupItemStatus)
614 __backupGroupNodes = backupGroupNodes;
617 __onRemovingAllItems = false;
622 _ListViewModel::RestoreItemStatus(void)
624 if (__backupGroupNodes.empty())
629 _ListViewGroupNode* pListGroupNode = null;
630 _ListViewGroupNode* pBackupedListGroupNode = null;
632 for (int i = 0; i < __backupGroupNodes.size(); i++)
634 pListGroupNode = GetGroupNode(i);
635 pBackupedListGroupNode = __backupGroupNodes.at(i);
637 if (pListGroupNode != null)
639 pListGroupNode->__checkedItems = pBackupedListGroupNode->__checkedItems;
640 pListGroupNode->__disabledItems = pBackupedListGroupNode->__disabledItems;
641 pListGroupNode->__itemExpanded = pBackupedListGroupNode->__itemExpanded;
644 delete pBackupedListGroupNode;
647 __backupGroupNodes.clear();
652 _ListViewModel::UnloadItem(int groupIndex, int itemIndex)
654 // check validation of groupIndex
655 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
656 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
658 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
659 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
660 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
662 int temporaryGroupIndex = -1;
663 int temporaryItemIndex = -1;
665 _IListItemCommon* pItem = null;
666 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
667 _LinkedList <_IListItemCommon*>::_Iterator theEndIter = pListGroupNode->__items.end();
669 while (theIter != theEndIter)
672 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
674 if (temporaryItemIndex == itemIndex)
676 pListGroupNode->__items.erase(theIter);
678 __pListProviderAdaptor->UnloadItem(pItem, groupIndex, itemIndex);
690 _ListViewModel::RemoveItemAt(int groupIndex, int itemIndex, bool internalDestroy)
692 // check validation of groupIndex
693 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
694 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
698 return RemoveGroup(groupIndex);
701 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
702 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
703 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
706 _IListItemCommon* pItem = GetItemFromContainer(groupIndex, itemIndex);
708 int temporaryGroupIndex = -1;
709 int temporaryItemIndex = -1;
710 _IListItemCommon* pTemporaryItem = null;
711 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
712 while (theIter != pListGroupNode->__items.end())
714 pTemporaryItem = *theIter;
715 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
717 if (temporaryItemIndex > itemIndex)
719 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex - 1);
725 MoveCheckedAndDisabledItemIndex(pListGroupNode, itemIndex, -1);
727 pListGroupNode->__itemCountInGroup--;
732 pListGroupNode->__items.remove(pItem);
733 if (internalDestroy == false)
735 __pListProviderAdaptor->UnloadItem(pItem, groupIndex, itemIndex);
739 __pListProviderAdaptor->DeleteItem(pItem, groupIndex, itemIndex);
747 _ListViewModel::RemoveGroup(int groupIndex)
749 // check validation of groupIndex
750 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
751 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
753 _ListViewGroupNode* pRemoveGroupNode = GetGroupNode(groupIndex);
754 SysTryReturn(NID_UI_CTRL, pRemoveGroupNode != null, GetLastResult(), GetLastResult(),
755 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
757 // remove group from model
758 __groupNodes.erase(__groupNodes.begin() + groupIndex);
760 __countOfAllItems -= (pRemoveGroupNode->__itemCountInGroup + 1);
761 __countOfAllGroups--;
763 _IListItemCommon* pItem = null;
764 _ListViewGroupNode* pListGroupNode = null;
767 int temporaryGroupIndex = -1;
768 int temporaryItemIndex = -1;
771 int groupCount = __groupNodes.size();
772 for (int i = groupCount - 1; i >= groupIndex; i--)
774 pListGroupNode = GetGroupNode(i);
776 if (pListGroupNode != null)
778 itemCount = pListGroupNode->__items.size();
780 for (int j = itemCount - 1; j >= 0; j--)
782 pItem = pListGroupNode->__items.at(j);
786 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
787 pItem->SetItemIndex(temporaryGroupIndex - 1, temporaryItemIndex);
794 itemCount = pRemoveGroupNode->__items.size();
796 for (int i = itemCount - 1; i >= 0; i--)
798 pItem = pRemoveGroupNode->__items.at(i);
799 pRemoveGroupNode->__items.pop_back();
803 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
804 __pListProviderAdaptor->UnloadItem(pItem, temporaryGroupIndex, temporaryItemIndex);
808 delete pRemoveGroupNode;
814 _ListViewModel::SetMaxCachingSize(int cachingSize)
816 SysTryReturn(NID_UI_CTRL, cachingSize > 0, E_INVALID_ARG, E_INVALID_ARG,
817 "[E_INVALID_ARG] Wrong cachingSize(%d).", cachingSize);
819 __sizeOfCachingItems = cachingSize;
825 _ListViewModel::GetMaxCachingSize(void) const
827 return __sizeOfCachingItems;
831 _ListViewModel::GetOverflowCount(void) const
834 int loadedGroups = __groupNodes.size();
836 _ListViewGroupNode* pListGroupNode = null;
837 for (int i = 0; i < loadedGroups; i++)
839 pListGroupNode = __groupNodes.at(i);
840 if (pListGroupNode != null)
842 loadedItems += pListGroupNode->__items.size();
846 if (__sizeOfCachingItems < loadedItems)
848 return loadedItems - __sizeOfCachingItems;
855 _ListViewModel::RemoveOverflowItems(bool deleteFromEnd, int removeCount)
857 SysTryReturn(NID_UI_CTRL, (removeCount > 0 && removeCount < __sizeOfCachingItems), E_INVALID_ARG, E_INVALID_ARG,
858 "[E_INVALID_ARG] removeCount should be greater than 0.");
860 if (__overflowItemsRemovingEnabled == false)
865 int loadedGroups = GetAllGroupCount();
866 int temporaryGroupIndex = -1;
867 int temporaryItemIndex = -1;
872 _ListViewGroupNode* pListGroupNode = null;
873 _IListItemCommon* pItem = null;
875 // remove priority : collapsed group items
876 for (i = 0; i < loadedGroups; i++)
878 pListGroupNode = GetGroupNode(i);
879 if (pListGroupNode != null)
881 if (pListGroupNode->__itemExpanded == false)
883 loadedItems = pListGroupNode->__items.size();
884 for (j = 0; j < loadedItems; j++)
886 pItem = pListGroupNode->__items.back();
887 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
889 if (temporaryItemIndex == -1)
894 pListGroupNode->__items.pop_back();
895 __pListProviderAdaptor->UnloadItem(pItem, temporaryGroupIndex, temporaryItemIndex);
897 if (--removeCount <= 0)
906 if (deleteFromEnd == true)
908 for (i = loadedGroups - 1; i >= 0; i--)
910 pListGroupNode = GetGroupNode(i);
911 if (pListGroupNode != null)
913 loadedItems = pListGroupNode->__items.size();
914 for (j = 0; j < loadedItems; j++)
916 pItem = pListGroupNode->__items.back();
917 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
919 pListGroupNode->__items.pop_back();
920 __pListProviderAdaptor->UnloadItem(pItem, temporaryGroupIndex, temporaryItemIndex);
922 if (--removeCount <= 0)
932 for (i = 0; i < loadedGroups; i++)
934 pListGroupNode = GetGroupNode(i);
935 if (pListGroupNode != null)
937 loadedItems = pListGroupNode->__items.size();
938 for (j = 0; j < loadedItems; j++)
940 pItem = pListGroupNode->__items.front();
941 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
943 pListGroupNode->__items.pop_front();
944 __pListProviderAdaptor->UnloadItem(pItem, temporaryGroupIndex, temporaryItemIndex);
946 if (--removeCount <= 0)
959 _ListViewModel::GetAllItemCount(void) const
961 return __countOfAllItems;
965 _ListViewModel::GetItemCountInGroup(int groupIndex) const
967 // check validation of groupIndex
968 if (groupIndex < 0 || groupIndex >= __countOfAllGroups)
975 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
977 if (pListGroupNode == null)
979 itemCount = __pListProviderAdaptor->GetItemCount(groupIndex);
983 itemCount = pListGroupNode->__itemCountInGroup;
990 _ListViewModel::GetAllGroupCount(void) const
992 return __groupNodes.size();
996 _ListViewModel::GetFocusedItem(int& groupIndex, int& itemIndex) const
998 groupIndex = __indexOfFocusedGroup;
999 itemIndex = __indexOfFocusedItem;
1003 _ListViewModel::SetFocusedItem(int groupIndex, int itemIndex)
1005 __indexOfFocusedGroup = groupIndex;
1006 __indexOfFocusedItem = itemIndex;
1010 _ListViewModel::IsFocusedItem(int groupIndex, int itemIndex) const
1012 if ((groupIndex == __indexOfFocusedGroup) && (itemIndex == __indexOfFocusedItem))
1021 _ListViewModel::SetItemEnabled(int groupIndex, int itemIndex, bool enable)
1024 if (IsValidItem(groupIndex, itemIndex) == false)
1029 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1030 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
1031 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1033 int disabledItem = itemIndex;
1034 bool findItem = false;
1036 _LinkedList <int>::_Iterator theIter = pListGroupNode->__disabledItems.begin();
1038 while (theIter != pListGroupNode->__disabledItems.end())
1040 if (*theIter == itemIndex)
1044 pListGroupNode->__disabledItems.erase(theIter);
1049 else if (*theIter > itemIndex)
1051 if (enable == false)
1053 pListGroupNode->__disabledItems.insert(theIter, disabledItem);
1062 if (findItem == false && enable == false)
1064 pListGroupNode->__disabledItems.push_back(disabledItem);
1067 if (IsLoadedItem(groupIndex, itemIndex) == false)
1072 _IListItemCommon* pItem = GetItemFromContainer(groupIndex, itemIndex);
1075 pItem->SetItemEnabled(enable);
1082 _ListViewModel::IsItemEnabled(int groupIndex, int itemIndex) const
1085 if (IsValidItem(groupIndex, itemIndex) == false)
1090 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1091 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
1092 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1094 _LinkedList <int>::_Iterator theIter = pListGroupNode->__disabledItems.begin();
1096 while (theIter != pListGroupNode->__disabledItems.end())
1098 if (*theIter == itemIndex)
1102 else if (*theIter > itemIndex)
1114 _ListViewModel::SetItemChecked(int groupIndex, int itemIndex, bool check)
1117 if (IsValidItem(groupIndex, itemIndex) == false)
1122 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1123 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
1124 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1127 _IListItemCommon* pItem = null;
1128 if (pListGroupNode->__usingRadioStyle == true)
1132 if (pListGroupNode->__radioCheckedItemIndex == itemIndex)
1137 pItem = GetItemFromContainer(groupIndex, pListGroupNode->__radioCheckedItemIndex);
1140 pItem->SetChecked(false);
1143 pListGroupNode->__radioCheckedItemIndex = itemIndex;
1145 pItem = GetItemFromContainer(groupIndex, itemIndex);
1148 pItem->SetChecked(true);
1155 if (pListGroupNode->__radioCheckedItemIndex == itemIndex)
1157 pItem = GetItemFromContainer(groupIndex, pListGroupNode->__radioCheckedItemIndex);
1160 pItem->SetChecked(false);
1163 pListGroupNode->__radioCheckedItemIndex = -1;
1170 int checkedItem = itemIndex;
1171 bool findItem = false;
1173 _LinkedList <int>::_Iterator theIter = pListGroupNode->__checkedItems.begin();
1174 while (theIter != pListGroupNode->__checkedItems.end())
1176 if (*theIter == itemIndex)
1180 pListGroupNode->__checkedItems.erase(theIter);
1185 else if (*theIter > itemIndex)
1189 pListGroupNode->__checkedItems.insert(theIter, checkedItem);
1198 if (findItem == false && check == true)
1200 pListGroupNode->__checkedItems.push_back(checkedItem);
1203 if (IsLoadedItem(groupIndex, itemIndex) == false)
1208 pItem = GetItemFromContainer(groupIndex, itemIndex);
1211 pItem->SetChecked(check);
1218 _ListViewModel::IsItemChecked(int groupIndex, int itemIndex) const
1221 if (!IsValidItem(groupIndex, itemIndex))
1226 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1227 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
1228 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1231 if (pListGroupNode->__usingRadioStyle)
1233 if (pListGroupNode->__radioCheckedItemIndex == itemIndex)
1241 _LinkedList <int>::_Iterator theIter = pListGroupNode->__checkedItems.begin();
1243 while (theIter != pListGroupNode->__checkedItems.end())
1245 if (*theIter == itemIndex)
1249 else if (*theIter > itemIndex)
1261 _ListViewModel::GetIndexOfRadioCheckedItem(int groupIndex) const
1263 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1264 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, -1, GetLastResult(),
1265 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1267 return pListGroupNode->__radioCheckedItemIndex;
1271 _ListViewModel::SetAllLoadedItemStateChanged(bool state)
1273 if (__groupNodes.empty() == true)
1278 int groupCount = GetAllGroupCount();
1279 _ListViewGroupNode* pListGroupNode = null;
1280 _IListItemCommon* pItem = null;
1282 for (int i = 0; i < groupCount; i++)
1284 pListGroupNode = GetGroupNode(i);
1285 SysTryReturnVoidResult(NID_UI_CTRL, pListGroupNode != null, GetLastResult(),
1286 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1288 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
1289 while (theIter != pListGroupNode->__items.end())
1292 pItem->SetItemChanged(state);
1300 _ListViewModel::GetFirstLoadedItemIndex(int& groupIndex, int& itemIndex) const
1302 int groupCount = GetAllGroupCount();
1303 _ListViewGroupNode* pListGroupNode = null;
1304 _IListItemCommon* pItem = null;
1306 for (int i = 0; i < groupCount; i++)
1308 pListGroupNode = GetGroupNode(i);
1309 SysTryReturnVoidResult(NID_UI_CTRL, pListGroupNode != null, GetLastResult(),
1310 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1312 if (pListGroupNode->__items.empty() == false)
1314 pItem = pListGroupNode->__items.front();
1315 pItem->GetItemIndex(groupIndex, itemIndex);
1322 _ListViewModel::GetLastLoadedItemIndex(int& groupIndex, int& itemIndex) const
1324 int groupCount = GetAllGroupCount();
1325 _ListViewGroupNode* pListGroupNode = null;
1326 _IListItemCommon* pItem = null;
1328 for (int i = groupCount - 1; i >= 0; i--)
1330 pListGroupNode = GetGroupNode(i);
1331 SysTryReturnVoidResult(NID_UI_CTRL, pListGroupNode != null, GetLastResult(),
1332 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1334 if (pListGroupNode->__items.empty() == false)
1336 pItem = pListGroupNode->__items.back();
1337 pItem->GetItemIndex(groupIndex, itemIndex);
1344 _ListViewModel::AddItemToGroup(_IListItemCommon* pItem, int groupIndex)
1346 return InsertItemToGroup(pItem, groupIndex, GetItemCountInGroup(groupIndex));
1351 _ListViewModel::InsertItemToGroup(_IListItemCommon* pItem, int groupIndex, int itemIndex)
1353 // check validation of groupIndex
1354 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
1355 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
1357 if (itemIndex < -1 || itemIndex > GetItemCountInGroup(groupIndex))
1359 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] Item index is not valid.");
1360 return E_INVALID_ARG;
1363 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1364 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
1365 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1367 _IListItemCommon* pTemporaryItem = null;
1368 int temporaryGroupIndex = -1;
1369 int temporaryItemIndex = -1;
1370 int itemCount = pListGroupNode->__items.size();
1371 for (int i = itemCount - 1; i >= 0; i--)
1373 pTemporaryItem = pListGroupNode->__items.at(i);
1374 if (pTemporaryItem != null)
1376 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1377 if (temporaryItemIndex >= itemIndex)
1379 pTemporaryItem->SetItemIndex(temporaryGroupIndex, ++temporaryItemIndex);
1388 _LinkedList <int>::_Iterator theIter;
1389 // checked(radio/check) item index
1390 if (pListGroupNode->__usingRadioStyle == true)
1393 if (pListGroupNode->__radioCheckedItemIndex >= itemIndex)
1395 pListGroupNode->__radioCheckedItemIndex++;
1400 theIter = pListGroupNode->__checkedItems.begin();
1401 while (theIter != pListGroupNode->__checkedItems.end())
1403 if (*theIter >= itemIndex)
1412 // disabled item index
1413 theIter = pListGroupNode->__disabledItems.begin();
1414 while (theIter != pListGroupNode->__disabledItems.end())
1416 if (*theIter >= itemIndex)
1424 pListGroupNode->__itemCountInGroup++;
1425 __countOfAllItems++;
1427 result r = E_SUCCESS;
1431 pItem->SetItemIndex(groupIndex, itemIndex);
1432 r = LoadItemToContainer(groupIndex, itemIndex, *pItem);
1439 _ListViewModel::SetItem(_IListItemCommon& item, int groupIndex, int itemIndex)
1441 // check validation of groupIndex
1442 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
1443 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
1445 if (itemIndex < -1 || itemIndex > GetItemCountInGroup(groupIndex))
1447 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] Item index is not valid.");
1448 return E_INVALID_ARG;
1451 if (IsLoadedItem(groupIndex, itemIndex) == false)
1453 return __pListProviderAdaptor->UnloadItem(&item, groupIndex, itemIndex);
1456 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1457 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
1458 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1460 item.SetItemIndex(groupIndex, itemIndex);
1461 item.SetChecked(IsItemChecked(groupIndex, itemIndex));
1462 item.SetItemEnabled(IsItemEnabled(groupIndex, itemIndex));
1464 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
1466 _IListItemCommon* pPreviousItem = null;
1467 int temporaryGroupIndex = -1;
1468 int temporaryItemIndex = -1;
1469 while (theIter != pListGroupNode->__items.end())
1471 pPreviousItem = *theIter;
1472 pPreviousItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1474 if (temporaryItemIndex == itemIndex)
1479 else if (temporaryItemIndex > itemIndex)
1481 return __pListProviderAdaptor->UnloadItem(&item, groupIndex, itemIndex);
1487 return __pListProviderAdaptor->UnloadItem(pPreviousItem, groupIndex, itemIndex);
1490 // origin & destination item must be loaded
1492 _ListViewModel::MoveItem(int originGroupIndex, int originItemIndex, int destinationGroupIndex, int destinationItemIndex)
1494 if (IsValidItem(originGroupIndex, originItemIndex) == false
1495 || IsValidItem(destinationGroupIndex, destinationItemIndex - 1) == false)
1497 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] Item index is not valid.");
1501 _ListViewGroupNode* pOriginGroupNode = GetGroupNode(originGroupIndex);
1502 SysTryReturn(NID_UI_CTRL, pOriginGroupNode != null, GetLastResult(), GetLastResult(),
1503 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1505 _ListViewGroupNode* pDestinationGroupNode = GetGroupNode(destinationGroupIndex);
1506 SysTryReturn(NID_UI_CTRL, pDestinationGroupNode != null, GetLastResult(), GetLastResult(),
1507 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1509 _IListItemCommon* pItem = GetItemFromContainer(originGroupIndex, originItemIndex);
1510 SysTryReturn(NID_UI_CTRL, pItem != null, GetLastResult(), GetLastResult(),
1511 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1513 _IListItemCommon* pTemporaryItem = null;
1514 int temporaryGroupIndex = -1;
1515 int temporaryItemIndex = -1;
1517 bool isFound = false;
1519 if (originGroupIndex != destinationGroupIndex) // different group
1521 pOriginGroupNode->__items.remove(pItem);
1523 _LinkedList <_IListItemCommon*>::_Iterator theIter = pOriginGroupNode->__items.begin();
1524 while (theIter != pOriginGroupNode->__items.end())
1526 pTemporaryItem = *theIter;
1527 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1529 if (temporaryItemIndex > originItemIndex)
1531 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex - 1);
1537 pItem->SetItemIndex(destinationGroupIndex, destinationItemIndex);
1539 _LinkedList <_IListItemCommon*>::_Iterator destinationIter = pDestinationGroupNode->__items.begin();
1540 while (destinationIter != pDestinationGroupNode->__items.end())
1542 pTemporaryItem = *destinationIter;
1543 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1545 if (temporaryItemIndex >= destinationItemIndex)
1547 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex + 1);
1549 if (temporaryItemIndex == destinationItemIndex)
1551 pDestinationGroupNode->__items.insert(destinationIter, pItem);
1559 if (isFound == false)
1561 pDestinationGroupNode->__items.push_back(pItem);
1564 // remove checked(radio/check) & disabled item index
1565 MoveCheckedAndDisabledItemIndex(pOriginGroupNode, originItemIndex, -1, pItem->IsChecked(), pItem->IsItemEnabled());
1567 // insert checked(radio/check) & disabled item index
1568 MoveCheckedAndDisabledItemIndex(pDestinationGroupNode, -1, destinationItemIndex, pItem->IsChecked(), pItem->IsItemEnabled());
1570 pOriginGroupNode->__itemCountInGroup--;
1571 pDestinationGroupNode->__itemCountInGroup++;
1575 pOriginGroupNode->__items.remove(pItem);
1577 _LinkedList <_IListItemCommon*>::_Iterator theIter = pOriginGroupNode->__items.begin();
1578 while (theIter != pOriginGroupNode->__items.end())
1580 pTemporaryItem = *theIter;
1581 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1583 if (temporaryItemIndex < originItemIndex && temporaryItemIndex >= destinationItemIndex)
1585 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex + 1);
1587 else if (temporaryItemIndex > originItemIndex && temporaryItemIndex <= destinationItemIndex)
1589 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex - 1);
1591 if (temporaryItemIndex == destinationItemIndex)
1596 else if (temporaryItemIndex > originItemIndex && temporaryItemIndex > destinationItemIndex)
1601 if (temporaryItemIndex < destinationItemIndex)
1614 pItem->SetItemIndex(destinationGroupIndex, destinationItemIndex);
1615 pOriginGroupNode->__items.insert(pOriginGroupNode->__items.begin() + indexCount, pItem);
1617 // move checked(radio/check) & disabled item index
1618 MoveCheckedAndDisabledItemIndex(pOriginGroupNode, originItemIndex, destinationItemIndex, pItem->IsChecked(), pItem->IsItemEnabled());
1624 // insert mode : originItemIndex == -1
1625 // remove mode : destinationItemIndex == -1
1627 _ListViewModel::MoveCheckedAndDisabledItemIndex(_ListViewGroupNode* pListGroupNode, int originItemIndex, int destinationItemIndex, bool checked, bool enabled)
1630 int temporaryDestinationIndex = destinationItemIndex;
1631 if (destinationItemIndex == -1)
1633 temporaryDestinationIndex = pListGroupNode->__itemCountInGroup;
1636 // move checked(radio/check) item index
1637 if (pListGroupNode->__usingRadioStyle)
1640 if (checked == true || (pListGroupNode->__radioCheckedItemIndex == originItemIndex && originItemIndex != -1)) // for insert mode
1642 pListGroupNode->__radioCheckedItemIndex = destinationItemIndex;
1644 else if (pListGroupNode->__radioCheckedItemIndex < originItemIndex &&
1645 pListGroupNode->__radioCheckedItemIndex >= temporaryDestinationIndex)
1647 pListGroupNode->__radioCheckedItemIndex++;
1649 else if (originItemIndex != -1 &&
1650 pListGroupNode->__radioCheckedItemIndex > originItemIndex &&
1651 pListGroupNode->__radioCheckedItemIndex < temporaryDestinationIndex)
1653 pListGroupNode->__radioCheckedItemIndex--;
1659 int checkedItemIndex = -1;
1660 _LinkedList <int>::_Iterator theIter = pListGroupNode->__checkedItems.begin();
1662 while (theIter != pListGroupNode->__checkedItems.end())
1664 checkedItemIndex = (int)(*theIter);
1665 if (originItemIndex == -1) // insert mode
1667 if (checkedItemIndex >= temporaryDestinationIndex)
1669 *theIter = checkedItemIndex + 1;
1678 if (checkedItemIndex < originItemIndex && checkedItemIndex >= temporaryDestinationIndex)
1680 *theIter = checkedItemIndex + 1;
1682 else if (checkedItemIndex > originItemIndex && checkedItemIndex < temporaryDestinationIndex)
1684 *theIter = checkedItemIndex - 1;
1686 else if (checkedItemIndex == originItemIndex)
1688 pListGroupNode->__checkedItems.erase(theIter);
1691 else if (checkedItemIndex > originItemIndex && checkedItemIndex > temporaryDestinationIndex)
1696 if (checkedItemIndex <= temporaryDestinationIndex && checkedItemIndex != originItemIndex)
1705 if (destinationItemIndex != -1 && checked == true)
1707 pListGroupNode->__checkedItems.insert(pListGroupNode->__checkedItems.begin()
1708 + indexCount, destinationItemIndex);
1715 int disabledItemIndex = -1;
1716 _LinkedList <int>::_Iterator theIter = pListGroupNode->__disabledItems.begin();
1718 while (theIter != pListGroupNode->__disabledItems.end())
1720 disabledItemIndex = (int)(*theIter);
1721 if (originItemIndex == -1) // insert mode
1723 if (disabledItemIndex >= temporaryDestinationIndex)
1725 *theIter = disabledItemIndex + 1;
1734 if (disabledItemIndex < originItemIndex && disabledItemIndex >= temporaryDestinationIndex)
1736 *theIter = disabledItemIndex + 1;
1738 else if (disabledItemIndex > originItemIndex && disabledItemIndex < temporaryDestinationIndex)
1740 *theIter = disabledItemIndex - 1;
1742 else if (disabledItemIndex == originItemIndex)
1744 pListGroupNode->__disabledItems.erase(theIter);
1747 else if (disabledItemIndex > originItemIndex && disabledItemIndex > temporaryDestinationIndex)
1752 if (disabledItemIndex <= temporaryDestinationIndex && disabledItemIndex != originItemIndex)
1761 if (destinationItemIndex != -1 && enabled == false)
1763 pListGroupNode->__disabledItems.insert(pListGroupNode->__disabledItems.begin()
1764 + indexCount, destinationItemIndex);
1769 _ListViewModel::GetGroupNode(int groupIndex) const
1771 if (__groupNodes.empty())
1773 SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] GroupNode is Empty.");
1777 _ListViewGroupNode* pListGroupNode = __groupNodes.at(groupIndex);
1778 if (pListGroupNode == null)
1780 SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] Failed to get _ListViewGroupNode.");
1783 return pListGroupNode;
1786 }}} // Tizen::Ui::Controls