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_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 #ifdef MEMORY_LEAK_CHECK
31 #include "mem_leak_check.h"
35 namespace Tizen { namespace Ui { namespace Controls
38 _ListViewModel::_ListViewModel(void)
39 : __pListProviderAdaptor(null)
40 , __pTemporaryItemBuffer(null)
41 , __countOfAllGroups(0)
42 , __countOfAllItems(0)
43 , __indexOfFocusedGroup(-1)
44 , __indexOfFocusedItem(-1)
45 , __sizeOfCachingItems(CACHE_SIZE)
46 , __overflowItemsRemovingEnabled(true)
51 _ListViewModel::~_ListViewModel(void)
53 if (__pTemporaryItemBuffer != null)
55 int temporaryGroupIndex = -1;
56 int temporaryItemIndex = -1;
57 __pTemporaryItemBuffer->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
59 __pListProviderAdaptor->DeleteItem(__pTemporaryItemBuffer, temporaryGroupIndex, temporaryItemIndex);
60 __pTemporaryItemBuffer = null;
63 if (__backupGroupNodes.empty() == false)
65 _ListViewGroupNode* pBackupedListGroupNode = null;
66 for (int i = 0; i < __backupGroupNodes.size(); i++)
68 pBackupedListGroupNode = __backupGroupNodes.at(i);
70 delete pBackupedListGroupNode;
73 __backupGroupNodes.clear();
76 DeleteAllGroupAndItem();
79 _IListItemProviderAdaptor*
80 _ListViewModel::GetItemProviderAdaptor(void) const
82 return __pListProviderAdaptor;
86 _ListViewModel::RegisterItemProviderAdaptor(const _IListItemProviderAdaptor* pProviderAdaptor)
88 SysTryReturn(NID_UI_CTRL, pProviderAdaptor != null, E_INVALID_ARG, E_INVALID_ARG,
89 "[E_INVALID_ARG] pProviderAdaptor is null.");
91 if (__pListProviderAdaptor != null)
96 __pListProviderAdaptor = const_cast<_IListItemProviderAdaptor*>(pProviderAdaptor);
102 _ListViewModel::SetGroupExpandState(int groupIndex, bool state)
104 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
105 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
106 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
108 pListGroupNode->__itemExpanded = state;
114 _ListViewModel::IsGroupExpanded(int groupIndex) const
116 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
117 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
118 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
120 return pListGroupNode->__itemExpanded;
124 _ListViewModel::GetItemFromTemporaryBuffer(int groupIndex, int itemIndex)
126 int temporaryGroupIndex = -1;
127 int temporaryItemIndex = -1;
128 if (__pTemporaryItemBuffer != null)
130 __pTemporaryItemBuffer->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
131 if (groupIndex == temporaryGroupIndex && itemIndex == temporaryItemIndex)
133 return __pTemporaryItemBuffer;
137 _IListItemCommon* pItem = GetItemFromContainer(groupIndex, itemIndex);
141 __pListProviderAdaptor->UnloadItem(__pTemporaryItemBuffer, temporaryGroupIndex, temporaryItemIndex);
142 __pTemporaryItemBuffer = __pListProviderAdaptor->LoadItem(groupIndex, itemIndex);
143 if (__pTemporaryItemBuffer != null)
145 __pTemporaryItemBuffer->SetItemIndex(groupIndex, itemIndex);
148 else if (__pTemporaryItemBuffer != null && __pTemporaryItemBuffer != pItem)
150 __pListProviderAdaptor->UnloadItem(__pTemporaryItemBuffer, temporaryGroupIndex, temporaryItemIndex);
151 __pTemporaryItemBuffer = null;
157 __pTemporaryItemBuffer = null;
162 return __pTemporaryItemBuffer;
166 _ListViewModel::GetItemFromContainer(int groupIndex, int itemIndex) const
168 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), null, E_INVALID_ARG,
169 "[E_INVALID_ARG] The group index is not valid.");
171 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
172 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, null, GetLastResult(),
173 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
175 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
177 _IListItemCommon* pItem = null;
178 int temporaryGroupIndex = -1;
179 int temporaryItemIndex = -1;
181 while (theIter != pListGroupNode->__items.end())
184 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
186 if (temporaryItemIndex == itemIndex)
190 else if (temporaryItemIndex > itemIndex)
202 _ListViewModel::LoadItem(int groupIndex, int itemIndex)
204 // check validation of groupIndex
205 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), null, E_INVALID_ARG,
206 "[E_INVALID_ARG] Wrong group index.(%d)", groupIndex);
208 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
209 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, null, GetLastResult(),
210 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
212 // check validation of item index
213 if (itemIndex < -1 || itemIndex >= pListGroupNode->__itemCountInGroup)
215 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] The item index is not valid.");
219 // if loaded item, call GetItemFromContainer()
220 if (IsLoadedItem(groupIndex, itemIndex) == true)
222 return GetItemFromContainer(groupIndex, itemIndex);
225 _IListItemCommon* pItemCommon = __pListProviderAdaptor->LoadItem(groupIndex, itemIndex);
226 if (pItemCommon != null)
228 if (IsItemChecked(groupIndex, itemIndex) == true)
230 pItemCommon->SetChecked(true);
233 if (IsItemEnabled(groupIndex, itemIndex) == false)
235 pItemCommon->SetItemEnabled(false);
238 // push item to container
239 pItemCommon->SetItemIndex(groupIndex, itemIndex);
240 LoadItemToContainer(groupIndex, itemIndex, *pItemCommon);
247 _ListViewModel::LoadItemToContainer(int groupIndex, int itemIndex, _IListItemCommon& item)
249 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
250 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
251 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
253 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
255 _IListItemCommon* pItem = null;
256 int temporaryGroupIndex = -1;
257 int temporaryItemIndex = -1;
259 bool pushToTopOrMiddle = true;
261 if (pListGroupNode->__items.empty() == true)
263 int loadedGroups = GetAllGroupCount();
264 _ListViewGroupNode* pTemporaryGroupNode = null;
265 for (int i = loadedGroups - 1; i >= 0; i--)
267 pTemporaryGroupNode = GetGroupNode(i);
268 if (pTemporaryGroupNode != null)
272 if (pTemporaryGroupNode->__items.size() > 0)
279 pushToTopOrMiddle = false;
287 while (theIter != pListGroupNode->__items.end())
290 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
292 if (temporaryItemIndex == itemIndex)
296 else if (temporaryItemIndex > itemIndex)
298 // push item to top or middle
299 pListGroupNode->__items.insert(theIter, &item);
301 overCount = GetOverflowCount();
304 RemoveOverflowItems(true, overCount);
310 if (pItem == pListGroupNode->__items.back())
312 int lastLoadedItemIndex = -1;
313 int lastLoadedGroupIndex = -1;
314 GetLastLoadedItemIndex(lastLoadedGroupIndex,lastLoadedItemIndex);
315 if (lastLoadedGroupIndex == temporaryGroupIndex && lastLoadedItemIndex == temporaryItemIndex)
317 pushToTopOrMiddle = false;
321 pushToTopOrMiddle = true;
331 // push item to bottom
332 pListGroupNode->__items.push_back(&item);
334 overCount = GetOverflowCount();
337 // if push item to end of list, RemoveOverflowItems() from top.
338 RemoveOverflowItems(pushToTopOrMiddle, overCount);
345 _ListViewModel::IsValidItem(int groupIndex, int itemIndex) const
347 // check validation of groupIndex
348 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), false, E_INVALID_ARG,
349 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
351 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
352 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
353 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
355 // check validation of item index
356 SysTryReturn(NID_UI_CTRL, (itemIndex >= -1 && itemIndex < pListGroupNode->__itemCountInGroup), false, E_INVALID_ARG,
357 "[E_INVALID_ARG] Wrong item index(%d).", itemIndex);
363 _ListViewModel::IsLoadedItem(int groupIndex, int itemIndex) const
365 // check validation of groupIndex
366 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), false, E_INVALID_ARG,
367 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
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 SysTryReturn(NID_UI_CTRL, (itemIndex < pListGroupNode->__itemCountInGroup), false, E_INVALID_ARG,
375 "[E_INVALID_ARG] Wrong item index(%d).", itemIndex);
377 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
379 _IListItemCommon* pItem = null;
380 int temporaryGroupIndex = -1;
381 int temporaryItemIndex = -1;
382 while (theIter != pListGroupNode->__items.end())
385 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
387 if (temporaryItemIndex == itemIndex)
391 else if (temporaryItemIndex > itemIndex)
403 _ListViewModel::AddGroup(int itemCount, bool usingRadioStyle)
405 SysTryReturn(NID_UI_CTRL, itemCount >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The itemCount is not valid.");
407 //Create new GroupNode
408 _ListViewGroupNode* pListGroupNode = new (std::nothrow) _ListViewGroupNode();
409 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
410 "[E_OUT_OF_MEMORY] The memory is insufficient.");
412 pListGroupNode->__itemCountInGroup = itemCount;
413 pListGroupNode->__usingRadioStyle = usingRadioStyle;
415 __groupNodes.push_back(pListGroupNode);
417 __countOfAllItems = __countOfAllItems + itemCount + 1; // include groupItem
418 __countOfAllGroups++;
424 _ListViewModel::InsertGroup(int groupIndex, int itemCount, bool usingRadioStyle)
426 // check validation of groupIndex
427 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex <= __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
428 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
430 SysTryReturn(NID_UI_CTRL, itemCount >= 0, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] The itemCount is not valid.");
432 if (__groupNodes.empty() == true || groupIndex == GetAllGroupCount())
434 return AddGroup(itemCount);
437 //Create new GroupNode
438 _ListViewGroupNode* pListGroupNode = new (std::nothrow) _ListViewGroupNode();
439 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, E_OUT_OF_MEMORY, E_OUT_OF_MEMORY,
440 "[E_OUT_OF_MEMORY] The memory is insufficient.");
442 pListGroupNode->__itemCountInGroup = itemCount;
443 pListGroupNode->__usingRadioStyle = usingRadioStyle;
445 __groupNodes.insert(__groupNodes.begin() + groupIndex, pListGroupNode);
447 __countOfAllItems = __countOfAllItems + itemCount + 1; // include groupItem
448 __countOfAllGroups++;
450 // item index reordering
451 int groupCount = GetAllGroupCount();
452 int temporaryGroupIndex = -1;
453 int temporaryItemIndex = -1;
455 pListGroupNode = null;
456 _IListItemCommon* pItem = null;
458 for (int i = groupCount - 1; i > groupIndex; i--)
460 pListGroupNode = GetGroupNode(i);
461 if (pListGroupNode != null)
463 for (int j = pListGroupNode->__items.size() - 1; j >= 0; j--)
465 pItem = pListGroupNode->__items.at(j);
468 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
469 pItem->SetItemIndex(i, temporaryItemIndex);
479 _ListViewModel::UnloadAllItem(void)
481 if (__groupNodes.empty() == true)
486 int groupCount = GetAllGroupCount();
489 _ListViewGroupNode* pListGroupNode = null;
490 _IListItemCommon* pItem = null;
494 for (int i = groupCount - 1; i >= 0; i--)
496 pListGroupNode = GetGroupNode(i);
497 if (pListGroupNode != null)
499 itemCount = pListGroupNode->__items.size();
500 for (int j = itemCount - 1; j >= 0; j--)
502 pItem = pListGroupNode->__items.at(j);
503 pListGroupNode->__items.pop_back();
507 pItem->GetItemIndex(groupIndex, itemIndex);
508 __pListProviderAdaptor->UnloadItem(pItem, groupIndex, itemIndex);
512 pListGroupNode->__items.clear();
520 _ListViewModel::DeleteAllGroupAndItem(void)
522 return RemoveAllItem(true);
526 _ListViewModel::RemoveAllItem(bool internalDestroy, bool backupItemStatus)
528 if (__groupNodes.empty() == true)
533 int groupCount = GetAllGroupCount();
536 _ListViewGroupNode* pListGroupNode = null;
537 _IListItemCommon* pItem = null;
541 for (int i = groupCount - 1; i >= 0; i--)
543 pListGroupNode = GetGroupNode(i);
545 if (pListGroupNode != null)
547 itemCount = pListGroupNode->__items.size();
549 for (int j = itemCount - 1; j >= 0; j--)
551 pItem = pListGroupNode->__items.at(j);
552 pListGroupNode->__items.pop_back();
556 pItem->GetItemIndex(groupIndex, itemIndex);
558 if (internalDestroy == false)
560 __pListProviderAdaptor->UnloadItem(pItem, groupIndex, itemIndex);
564 __pListProviderAdaptor->DeleteItem(pItem, groupIndex, itemIndex);
569 pListGroupNode->__items.clear();
570 pListGroupNode->__itemCountInGroup = 0;
572 if (backupItemStatus == false)
574 __groupNodes.remove(pListGroupNode);
575 delete pListGroupNode;
576 pListGroupNode = null;
581 __countOfAllGroups = 0;
582 __countOfAllItems = 0;
584 if (backupItemStatus == false)
586 __groupNodes.clear();
590 __backupGroupNodes = __groupNodes;
597 _ListViewModel::RestoreItemStatus(void)
599 if (__backupGroupNodes.empty() == true)
604 _ListViewGroupNode* pListGroupNode = null;
605 _ListViewGroupNode* pBackupedListGroupNode = null;
606 for (int i = 0; i < __backupGroupNodes.size(); i++)
608 pListGroupNode = GetGroupNode(i);
609 pBackupedListGroupNode = __backupGroupNodes.at(i);
611 if (pListGroupNode != null)
613 pListGroupNode->__checkedItems = pBackupedListGroupNode->__checkedItems;
614 pListGroupNode->__disabledItems = pBackupedListGroupNode->__disabledItems;
615 pListGroupNode->__itemExpanded = pBackupedListGroupNode->__itemExpanded;
618 delete pBackupedListGroupNode;
621 __backupGroupNodes.clear();
626 _ListViewModel::UnloadItem(int groupIndex, int itemIndex)
628 // check validation of groupIndex
629 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
630 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
632 if (IsLoadedItem(groupIndex, itemIndex) == false)
637 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
638 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
639 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
641 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
643 _IListItemCommon* pItem = null;
644 int temporaryGroupIndex = -1;
645 int temporaryItemIndex = -1;
646 while (theIter != pListGroupNode->__items.end())
649 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
651 if (temporaryItemIndex == itemIndex)
653 pListGroupNode->__items.erase(theIter);
655 __pListProviderAdaptor->UnloadItem(pItem, groupIndex, itemIndex);
667 _ListViewModel::RemoveItemAt(int groupIndex, int itemIndex, bool internalDestroy)
669 // check validation of groupIndex
670 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
671 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
673 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
674 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
675 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
679 return RemoveGroup(groupIndex);
682 _IListItemCommon* pItem = GetItemFromContainer(groupIndex, itemIndex);
685 pListGroupNode->__items.remove(pItem);
687 if (internalDestroy == false)
689 __pListProviderAdaptor->UnloadItem(pItem, groupIndex, itemIndex);
693 __pListProviderAdaptor->DeleteItem(pItem, groupIndex, itemIndex);
697 int temporaryGroupIndex = -1;
698 int temporaryItemIndex = -1;
699 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
700 while (theIter != pListGroupNode->__items.end())
703 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
705 if (temporaryItemIndex > itemIndex)
707 pItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex - 1);
713 pListGroupNode->__itemCountInGroup--;
716 MoveCheckedAndDisabledItemIndex(pListGroupNode, itemIndex, -1);
722 _ListViewModel::RemoveGroup(int groupIndex)
724 // check validation of groupIndex
725 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
726 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
728 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
729 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
730 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
733 _IListItemCommon* pItem = null;
734 int temporaryGroupIndex = -1;
735 int temporaryItemIndex = -1;
736 int itemCount = pListGroupNode->__items.size();
738 for (int i = itemCount - 1; i >= 0; i--)
740 pItem = pListGroupNode->__items.at(i);
741 pListGroupNode->__items.pop_back();
745 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
746 __pListProviderAdaptor->UnloadItem(pItem, temporaryGroupIndex, temporaryItemIndex);
749 pListGroupNode->__items.clear();
751 __countOfAllItems -= (pListGroupNode->__itemCountInGroup + 1);
752 __countOfAllGroups--;
754 __groupNodes.erase(__groupNodes.begin() + groupIndex);
756 delete pListGroupNode;
759 int groupCount = GetAllGroupCount();
760 for (int i = groupCount - 1; i >= groupIndex; i--)
762 pListGroupNode = GetGroupNode(i);
764 if (pListGroupNode != null)
766 itemCount = pListGroupNode->__items.size();
768 for (int j = itemCount - 1; j >= 0; j--)
770 pItem = pListGroupNode->__items.at(j);
774 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
775 pItem->SetItemIndex(temporaryGroupIndex - 1, temporaryItemIndex);
785 _ListViewModel::SetMaxCachingSize(int cachingSize)
787 SysTryReturn(NID_UI_CTRL, cachingSize > 0, E_INVALID_ARG, E_INVALID_ARG,
788 "[E_INVALID_ARG] Wrong cachingSize(%d).", cachingSize);
790 __sizeOfCachingItems = cachingSize;
796 _ListViewModel::GetMaxCachingSize(void) const
798 return __sizeOfCachingItems;
802 _ListViewModel::GetOverflowCount(void) const
804 int loadedGroups = GetAllGroupCount();
807 _ListViewGroupNode* pListGroupNode = null;
808 for (int i = 0; i < loadedGroups; i++)
810 pListGroupNode = GetGroupNode(i);
811 if (pListGroupNode != null)
813 loadedItems += pListGroupNode->__items.size();
817 if (__sizeOfCachingItems < loadedItems)
819 return loadedItems - __sizeOfCachingItems;
826 _ListViewModel::RemoveOverflowItems(bool deleteFromEnd, int removeCount)
828 SysTryReturn(NID_UI_CTRL, (removeCount > 0 && removeCount < __sizeOfCachingItems), E_INVALID_ARG, E_INVALID_ARG,
829 "[E_INVALID_ARG] removeCount should be greater than 0.");
831 if (__overflowItemsRemovingEnabled == false)
836 int loadedGroups = GetAllGroupCount();
837 int temporaryGroupIndex = -1;
838 int temporaryItemIndex = -1;
843 _ListViewGroupNode* pListGroupNode = null;
844 _IListItemCommon* pItem = null;
846 // remove priority : collapsed group items
847 for (i = 0; i < loadedGroups; i++)
849 pListGroupNode = GetGroupNode(i);
850 if (pListGroupNode != null)
852 if (pListGroupNode->__itemExpanded == false)
854 loadedItems = pListGroupNode->__items.size();
855 for (j = 0; j < loadedItems; j++)
857 pItem = pListGroupNode->__items.back();
858 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
860 if (temporaryItemIndex == -1)
865 pListGroupNode->__items.pop_back();
866 __pListProviderAdaptor->UnloadItem(pItem, temporaryGroupIndex, temporaryItemIndex);
868 if (--removeCount <= 0)
877 if (deleteFromEnd == true)
879 for (i = loadedGroups - 1; i >= 0; i--)
881 pListGroupNode = GetGroupNode(i);
882 if (pListGroupNode != null)
884 loadedItems = pListGroupNode->__items.size();
885 for (j = 0; j < loadedItems; j++)
887 pItem = pListGroupNode->__items.back();
888 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
890 pListGroupNode->__items.pop_back();
891 __pListProviderAdaptor->UnloadItem(pItem, temporaryGroupIndex, temporaryItemIndex);
893 if (--removeCount <= 0)
903 for (i = 0; i < loadedGroups; i++)
905 pListGroupNode = GetGroupNode(i);
906 if (pListGroupNode != null)
908 loadedItems = pListGroupNode->__items.size();
909 for (j = 0; j < loadedItems; j++)
911 pItem = pListGroupNode->__items.front();
912 pItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
914 pListGroupNode->__items.pop_front();
915 __pListProviderAdaptor->UnloadItem(pItem, temporaryGroupIndex, temporaryItemIndex);
917 if (--removeCount <= 0)
930 _ListViewModel::GetAllItemCount(void) const
932 return __countOfAllItems;
936 _ListViewModel::GetItemCountInGroup(int groupIndex) const
938 // check validation of groupIndex
939 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), -1, E_INVALID_ARG,
940 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
944 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
946 if (pListGroupNode == null)
948 itemCount = __pListProviderAdaptor->GetItemCount(groupIndex);
952 itemCount = pListGroupNode->__itemCountInGroup;
959 _ListViewModel::GetAllGroupCount(void) const
961 return __groupNodes.size();
965 _ListViewModel::GetFocusedItem(int& groupIndex, int& itemIndex) const
967 groupIndex = __indexOfFocusedGroup;
968 itemIndex = __indexOfFocusedItem;
972 _ListViewModel::SetFocusedItem(int groupIndex, int itemIndex)
974 __indexOfFocusedGroup = groupIndex;
975 __indexOfFocusedItem = itemIndex;
979 _ListViewModel::IsFocusedItem(int groupIndex, int itemIndex) const
981 if ((groupIndex == __indexOfFocusedGroup) && (itemIndex == __indexOfFocusedItem))
990 _ListViewModel::SetItemEnabled(int groupIndex, int itemIndex, bool enable)
993 if (IsValidItem(groupIndex, itemIndex) == false)
998 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
999 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
1000 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1002 int disabledItem = itemIndex;
1003 bool findItem = false;
1005 _LinkedList <int>::_Iterator theIter = pListGroupNode->__disabledItems.begin();
1007 while (theIter != pListGroupNode->__disabledItems.end())
1009 if (*theIter == itemIndex)
1013 pListGroupNode->__disabledItems.erase(theIter);
1018 else if (*theIter > itemIndex)
1020 if (enable == false)
1022 pListGroupNode->__disabledItems.insert(theIter, disabledItem);
1031 if (findItem == false && enable == false)
1033 pListGroupNode->__disabledItems.push_back(disabledItem);
1036 if (IsLoadedItem(groupIndex, itemIndex) == false)
1041 _IListItemCommon* pItem = GetItemFromContainer(groupIndex, itemIndex);
1044 pItem->SetItemEnabled(enable);
1051 _ListViewModel::IsItemEnabled(int groupIndex, int itemIndex) const
1054 if (IsValidItem(groupIndex, itemIndex) == false)
1059 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1060 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
1061 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1063 _LinkedList <int>::_Iterator theIter = pListGroupNode->__disabledItems.begin();
1065 while (theIter != pListGroupNode->__disabledItems.end())
1067 if (*theIter == itemIndex)
1071 else if (*theIter > itemIndex)
1083 _ListViewModel::SetItemChecked(int groupIndex, int itemIndex, bool check)
1086 if (IsValidItem(groupIndex, itemIndex) == false)
1091 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1092 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
1093 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1096 _IListItemCommon* pItem = null;
1097 if (pListGroupNode->__usingRadioStyle == true)
1101 if (pListGroupNode->__radioCheckedItemIndex == itemIndex)
1106 pItem = GetItemFromContainer(groupIndex, pListGroupNode->__radioCheckedItemIndex);
1109 pItem->SetChecked(false);
1112 pListGroupNode->__radioCheckedItemIndex = itemIndex;
1114 pItem = GetItemFromContainer(groupIndex, itemIndex);
1117 pItem->SetChecked(true);
1124 if (pListGroupNode->__radioCheckedItemIndex == itemIndex)
1126 pItem = GetItemFromContainer(groupIndex, pListGroupNode->__radioCheckedItemIndex);
1129 pItem->SetChecked(false);
1132 pListGroupNode->__radioCheckedItemIndex = -1;
1139 int checkedItem = itemIndex;
1140 bool findItem = false;
1142 _LinkedList <int>::_Iterator theIter = pListGroupNode->__checkedItems.begin();
1143 while (theIter != pListGroupNode->__checkedItems.end())
1145 if (*theIter == itemIndex)
1149 pListGroupNode->__checkedItems.erase(theIter);
1154 else if (*theIter > itemIndex)
1158 pListGroupNode->__checkedItems.insert(theIter, checkedItem);
1167 if (findItem == false && check == true)
1169 pListGroupNode->__checkedItems.push_back(checkedItem);
1172 if (IsLoadedItem(groupIndex, itemIndex) == false)
1177 pItem = GetItemFromContainer(groupIndex, itemIndex);
1180 pItem->SetChecked(check);
1187 _ListViewModel::IsItemChecked(int groupIndex, int itemIndex) const
1190 if (IsValidItem(groupIndex, itemIndex) == false)
1195 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1196 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, false, GetLastResult(),
1197 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1200 if (pListGroupNode->__usingRadioStyle == true)
1202 if (pListGroupNode->__radioCheckedItemIndex == itemIndex)
1210 _LinkedList <int>::_Iterator theIter = pListGroupNode->__checkedItems.begin();
1212 while (theIter != pListGroupNode->__checkedItems.end())
1214 if (*theIter == itemIndex)
1218 else if (*theIter > itemIndex)
1230 _ListViewModel::GetIndexOfRadioCheckedItem(int groupIndex) const
1232 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1233 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, -1, GetLastResult(),
1234 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1236 return pListGroupNode->__radioCheckedItemIndex;
1240 _ListViewModel::SetAllLoadedItemStateChanged(bool state)
1242 if (__groupNodes.empty() == true)
1247 int groupCount = GetAllGroupCount();
1248 _ListViewGroupNode* pListGroupNode = null;
1249 _IListItemCommon* pItem = null;
1251 for (int i = 0; i < groupCount; i++)
1253 pListGroupNode = GetGroupNode(i);
1254 SysTryReturnVoidResult(NID_UI_CTRL, pListGroupNode != null, GetLastResult(),
1255 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1257 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
1258 while (theIter != pListGroupNode->__items.end())
1261 pItem->SetItemChanged(state);
1269 _ListViewModel::GetFirstLoadedItemIndex(int& groupIndex, int& itemIndex) const
1271 int groupCount = GetAllGroupCount();
1272 _ListViewGroupNode* pListGroupNode = null;
1273 _IListItemCommon* pItem = null;
1275 for (int i = 0; i < groupCount; i++)
1277 pListGroupNode = GetGroupNode(i);
1278 SysTryReturnVoidResult(NID_UI_CTRL, pListGroupNode != null, GetLastResult(),
1279 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1281 if (pListGroupNode->__items.empty() == false)
1283 pItem = pListGroupNode->__items.front();
1284 pItem->GetItemIndex(groupIndex, itemIndex);
1291 _ListViewModel::GetLastLoadedItemIndex(int& groupIndex, int& itemIndex) const
1293 int groupCount = GetAllGroupCount();
1294 _ListViewGroupNode* pListGroupNode = null;
1295 _IListItemCommon* pItem = null;
1297 for (int i = groupCount - 1; i >= 0; i--)
1299 pListGroupNode = GetGroupNode(i);
1300 SysTryReturnVoidResult(NID_UI_CTRL, pListGroupNode != null, GetLastResult(),
1301 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1303 if (pListGroupNode->__items.empty() == false)
1305 pItem = pListGroupNode->__items.back();
1306 pItem->GetItemIndex(groupIndex, itemIndex);
1313 _ListViewModel::AddItemToGroup(_IListItemCommon* pItem, int groupIndex)
1315 return InsertItemToGroup(pItem, groupIndex, GetItemCountInGroup(groupIndex));
1320 _ListViewModel::InsertItemToGroup(_IListItemCommon* pItem, int groupIndex, int itemIndex)
1322 SysTryReturn(NID_UI_CTRL, pItem != null, E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] pItem is null.");
1324 // check validation of groupIndex
1325 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
1326 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
1328 if (itemIndex < -1 || itemIndex > GetItemCountInGroup(groupIndex))
1330 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] Item index is not valid.");
1331 return E_INVALID_ARG;
1334 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1335 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
1336 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1338 pItem->SetItemIndex(groupIndex, itemIndex);
1340 _IListItemCommon* pTemporaryItem = null;
1341 int temporaryGroupIndex = -1;
1342 int temporaryItemIndex = -1;
1343 int itemCount = pListGroupNode->__items.size();
1344 for (int i = itemCount - 1; i >= 0; i--)
1346 pTemporaryItem = pListGroupNode->__items.at(i);
1347 if (pTemporaryItem != null)
1349 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1350 if (temporaryItemIndex >= itemIndex)
1352 pTemporaryItem->SetItemIndex(temporaryGroupIndex, ++temporaryItemIndex);
1361 _LinkedList <int>::_Iterator theIter;
1362 // checked(radio/check) item index
1363 if (pListGroupNode->__usingRadioStyle == true)
1366 if (pListGroupNode->__radioCheckedItemIndex >= itemIndex)
1368 pListGroupNode->__radioCheckedItemIndex++;
1373 theIter = pListGroupNode->__checkedItems.begin();
1374 while (theIter != pListGroupNode->__checkedItems.end())
1376 if (*theIter >= itemIndex)
1385 // disabled item index
1386 theIter = pListGroupNode->__disabledItems.begin();
1387 while (theIter != pListGroupNode->__disabledItems.end())
1389 if (*theIter >= itemIndex)
1397 pListGroupNode->__itemCountInGroup++;
1398 __countOfAllItems++;
1400 return LoadItemToContainer(groupIndex, itemIndex, *pItem);
1404 _ListViewModel::SetItem(_IListItemCommon& item, int groupIndex, int itemIndex)
1406 // check validation of groupIndex
1407 SysTryReturn(NID_UI_CTRL, (groupIndex >= 0 && groupIndex < __countOfAllGroups), E_INVALID_ARG, E_INVALID_ARG,
1408 "[E_INVALID_ARG] Wrong group index(%d).", groupIndex);
1410 if (itemIndex < -1 || itemIndex > GetItemCountInGroup(groupIndex))
1412 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] Item index is not valid.");
1413 return E_INVALID_ARG;
1416 if (IsLoadedItem(groupIndex, itemIndex) == false)
1418 return __pListProviderAdaptor->UnloadItem(&item, groupIndex, itemIndex);
1421 _ListViewGroupNode* pListGroupNode = GetGroupNode(groupIndex);
1422 SysTryReturn(NID_UI_CTRL, pListGroupNode != null, GetLastResult(), GetLastResult(),
1423 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1425 item.SetItemIndex(groupIndex, itemIndex);
1426 item.SetChecked(IsItemChecked(groupIndex, itemIndex));
1427 item.SetItemEnabled(IsItemEnabled(groupIndex, itemIndex));
1429 _LinkedList <_IListItemCommon*>::_Iterator theIter = pListGroupNode->__items.begin();
1431 _IListItemCommon* pPreviousItem = null;
1432 int temporaryGroupIndex = -1;
1433 int temporaryItemIndex = -1;
1434 while (theIter != pListGroupNode->__items.end())
1436 pPreviousItem = *theIter;
1437 pPreviousItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1439 if (temporaryItemIndex == itemIndex)
1444 else if (temporaryItemIndex > itemIndex)
1446 return __pListProviderAdaptor->UnloadItem(&item, groupIndex, itemIndex);
1452 return __pListProviderAdaptor->UnloadItem(pPreviousItem, groupIndex, itemIndex);
1455 // origin & destination item must be loaded
1457 _ListViewModel::MoveItem(_ListItemPos originPosition, _ListItemPos destinationPosition)
1459 if (IsValidItem(originPosition.groupIndex, originPosition.itemIndex) == false
1460 || IsValidItem(destinationPosition.groupIndex, destinationPosition.itemIndex - 1) == false)
1462 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] Item index is not valid.");
1466 _ListViewGroupNode* pOriginGroupNode = GetGroupNode(originPosition.groupIndex);
1467 SysTryReturn(NID_UI_CTRL, pOriginGroupNode != null, GetLastResult(), GetLastResult(),
1468 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1470 _ListViewGroupNode* pDestinationGroupNode = GetGroupNode(destinationPosition.groupIndex);
1471 SysTryReturn(NID_UI_CTRL, pDestinationGroupNode != null, GetLastResult(), GetLastResult(),
1472 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1474 _IListItemCommon* pItem = GetItemFromContainer(originPosition.groupIndex, originPosition.itemIndex);
1475 SysTryReturn(NID_UI_CTRL, pItem != null, GetLastResult(), GetLastResult(),
1476 "[%s] Propagating.", GetErrorMessage(GetLastResult()));
1478 _IListItemCommon* pTemporaryItem = null;
1479 int temporaryGroupIndex = -1;
1480 int temporaryItemIndex = -1;
1482 bool isFound = false;
1484 if (originPosition.groupIndex != destinationPosition.groupIndex) // different group
1486 pOriginGroupNode->__items.remove(pItem);
1488 _LinkedList <_IListItemCommon*>::_Iterator theIter = pOriginGroupNode->__items.begin();
1489 while (theIter != pOriginGroupNode->__items.end())
1491 pTemporaryItem = *theIter;
1492 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1494 if (temporaryItemIndex > originPosition.itemIndex)
1496 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex - 1);
1502 pItem->SetItemIndex(destinationPosition.groupIndex, destinationPosition.itemIndex);
1504 _LinkedList <_IListItemCommon*>::_Iterator destinationIter = pDestinationGroupNode->__items.begin();
1505 while (destinationIter != pDestinationGroupNode->__items.end())
1507 pTemporaryItem = *destinationIter;
1508 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1510 if (temporaryItemIndex >= destinationPosition.itemIndex)
1512 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex + 1);
1514 if (temporaryItemIndex == destinationPosition.itemIndex)
1516 pDestinationGroupNode->__items.insert(destinationIter, pItem);
1524 if (isFound == false)
1526 pDestinationGroupNode->__items.push_back(pItem);
1529 // remove checked(radio/check) & disabled item index
1530 MoveCheckedAndDisabledItemIndex(pOriginGroupNode, originPosition.itemIndex, -1, pItem->IsChecked(), pItem->IsItemEnabled());
1532 // insert checked(radio/check) & disabled item index
1533 MoveCheckedAndDisabledItemIndex(pDestinationGroupNode, -1, destinationPosition.itemIndex, pItem->IsChecked(), pItem->IsItemEnabled());
1535 pOriginGroupNode->__itemCountInGroup--;
1536 pDestinationGroupNode->__itemCountInGroup++;
1540 pOriginGroupNode->__items.remove(pItem);
1542 _LinkedList <_IListItemCommon*>::_Iterator theIter = pOriginGroupNode->__items.begin();
1543 while (theIter != pOriginGroupNode->__items.end())
1545 pTemporaryItem = *theIter;
1546 pTemporaryItem->GetItemIndex(temporaryGroupIndex, temporaryItemIndex);
1548 if (temporaryItemIndex < originPosition.itemIndex && temporaryItemIndex >= destinationPosition.itemIndex)
1550 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex + 1);
1552 else if (temporaryItemIndex > originPosition.itemIndex && temporaryItemIndex <= destinationPosition.itemIndex)
1554 pTemporaryItem->SetItemIndex(temporaryGroupIndex, temporaryItemIndex - 1);
1556 if (temporaryItemIndex == destinationPosition.itemIndex)
1561 else if (temporaryItemIndex > originPosition.itemIndex && temporaryItemIndex > destinationPosition.itemIndex)
1566 if (temporaryItemIndex < destinationPosition.itemIndex)
1579 pItem->SetItemIndex(destinationPosition.groupIndex, destinationPosition.itemIndex);
1580 pOriginGroupNode->__items.insert(pOriginGroupNode->__items.begin() + indexCount, pItem);
1582 // move checked(radio/check) & disabled item index
1583 MoveCheckedAndDisabledItemIndex(pOriginGroupNode, originPosition.itemIndex, destinationPosition.itemIndex, pItem->IsChecked(), pItem->IsItemEnabled());
1589 // insert mode : originItemIndex == -1
1590 // remove mode : destinationItemIndex == -1
1592 _ListViewModel::MoveCheckedAndDisabledItemIndex(_ListViewGroupNode* pListGroupNode, int originItemIndex, int destinationItemIndex, bool checked, bool enabled)
1595 int temporaryDestinationIndex = destinationItemIndex;
1596 if (destinationItemIndex == -1)
1598 temporaryDestinationIndex = pListGroupNode->__itemCountInGroup;
1601 // move checked(radio/check) item index
1602 if (pListGroupNode->__usingRadioStyle == true)
1605 if (checked == true || (pListGroupNode->__radioCheckedItemIndex == originItemIndex && originItemIndex != -1)) // for insert mode
1607 pListGroupNode->__radioCheckedItemIndex = destinationItemIndex;
1609 else if (pListGroupNode->__radioCheckedItemIndex < originItemIndex &&
1610 pListGroupNode->__radioCheckedItemIndex >= temporaryDestinationIndex)
1612 pListGroupNode->__radioCheckedItemIndex++;
1614 else if (originItemIndex != -1 &&
1615 pListGroupNode->__radioCheckedItemIndex > originItemIndex &&
1616 pListGroupNode->__radioCheckedItemIndex < temporaryDestinationIndex)
1618 pListGroupNode->__radioCheckedItemIndex--;
1624 int checkedItemIndex = -1;
1625 _LinkedList <int>::_Iterator theIter = pListGroupNode->__checkedItems.begin();
1627 while (theIter != pListGroupNode->__checkedItems.end())
1629 checkedItemIndex = (int)(*theIter);
1630 if (originItemIndex == -1) // insert mode
1632 if (checkedItemIndex >= temporaryDestinationIndex)
1634 *theIter = checkedItemIndex + 1;
1643 if (checkedItemIndex < originItemIndex && checkedItemIndex >= temporaryDestinationIndex)
1645 *theIter = checkedItemIndex + 1;
1647 else if (checkedItemIndex > originItemIndex && checkedItemIndex < temporaryDestinationIndex)
1649 *theIter = checkedItemIndex - 1;
1651 else if (checkedItemIndex == originItemIndex)
1653 pListGroupNode->__checkedItems.erase(theIter);
1655 else if (checkedItemIndex > originItemIndex && checkedItemIndex > temporaryDestinationIndex)
1660 if (checkedItemIndex <= temporaryDestinationIndex && checkedItemIndex != originItemIndex)
1669 if (destinationItemIndex != -1 && checked == true)
1671 pListGroupNode->__checkedItems.insert(pListGroupNode->__checkedItems.begin()
1672 + indexCount, destinationItemIndex);
1679 int disabledItemIndex = -1;
1680 _LinkedList <int>::_Iterator theIter = pListGroupNode->__disabledItems.begin();
1682 while (theIter != pListGroupNode->__disabledItems.end())
1684 disabledItemIndex = (int)(*theIter);
1685 if (originItemIndex == -1) // insert mode
1687 if (disabledItemIndex >= temporaryDestinationIndex)
1689 *theIter = disabledItemIndex + 1;
1698 if (disabledItemIndex < originItemIndex && disabledItemIndex >= temporaryDestinationIndex)
1700 *theIter = disabledItemIndex + 1;
1702 else if (disabledItemIndex > originItemIndex && disabledItemIndex < temporaryDestinationIndex)
1704 *theIter = disabledItemIndex - 1;
1706 else if (disabledItemIndex == originItemIndex)
1708 pListGroupNode->__disabledItems.erase(theIter);
1710 else if (disabledItemIndex > originItemIndex && disabledItemIndex > temporaryDestinationIndex)
1715 if (disabledItemIndex <= temporaryDestinationIndex && disabledItemIndex != originItemIndex)
1724 if (destinationItemIndex != -1 && enabled == false)
1726 pListGroupNode->__disabledItems.insert(pListGroupNode->__disabledItems.begin()
1727 + indexCount, destinationItemIndex);
1732 _ListViewModel::GetGroupNode(int groupIndex) const
1734 if (__groupNodes.empty() == true)
1736 SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] GroupNode is Empty.");
1740 _ListViewGroupNode* pListGroupNode = __groupNodes.at(groupIndex);
1741 if (pListGroupNode == null)
1743 SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] Failed to get _ListViewGroupNode.");
1746 return pListGroupNode;
1749 }}} // Tizen::Ui::Controls