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_ListViewItemProviderAdaptor.cpp
20 * @brief This is the implementation file for _ListViewItemProviderAdaptor class.
22 * This file contains the implementation of _ListViewItemProviderAdaptor class.
25 #include <FUiCtrlListItemBase.h>
26 #include "FUi_ResourceManager.h"
27 #include "FUiCtrl_IListItemCommon.h"
28 #include "FUiCtrl_ListItemBaseImpl.h"
29 #include "FUiCtrl_ListViewContextItem.h"
30 #include "FUiCtrl_ListViewImpl.h"
31 #include "FUiCtrl_ListViewItem.h"
32 #include "FUiCtrl_ListViewItemProviderAdaptor.h"
34 #ifdef MEMORY_LEAK_CHECK
35 #include "mem_leak_check.h"
38 using namespace Tizen::Graphics;
39 using namespace Tizen::Base;
41 namespace Tizen { namespace Ui { namespace Controls
44 _ListViewItemProviderAdaptor::_ListViewItemProviderAdaptor(const IListViewItemProvider& provider)
45 : __pListViewProvider(const_cast<IListViewItemProvider*>(&provider))
46 , __pEventListener(null)
48 , __itemAverageHeight(0)
49 , __itemLoadedCount(0)
50 , __countOfAllItems(0)
51 , __pItemNeedsLazyDeletion(null)
55 _ListViewItemProviderAdaptor::~_ListViewItemProviderAdaptor(void)
57 __descriptionTextShowItem.clear();
59 SetItemNeedsLazyDeletion(null);
63 _ListViewItemProviderAdaptor::SetItemProvider(const IListViewItemProvider& provider)
65 __pListViewProvider = const_cast<IListViewItemProvider*>(&provider);
69 _ListViewItemProviderAdaptor::LoadItem(int groupIndex, int itemIndex)
71 SysTryReturn(NID_UI_CTRL, (groupIndex == 0), null, E_INVALID_ARG,
72 "[E_INVALID_ARG] parameter not available.");
74 _TableViewItem* pTableViewItem = null;
77 pTableViewItem = GetDefaultItem();
78 pTableViewItem->SetAppInfo(null);
80 return pTableViewItem;
83 ListItemBase* pItemBase = __pListViewProvider->CreateItem(itemIndex, GetListWidth());
85 if (pItemBase == null)
87 pTableViewItem = GetDefaultItem();
88 pTableViewItem->SetAppInfo(null);
90 return pTableViewItem;
93 _ListItemBaseImpl* pItemBaseImpl = _ListItemBaseImpl::GetInstance(*pItemBase);
94 SysAssert(pItemBaseImpl != null);
96 // add ListViewItem event listener
97 pItemBaseImpl->AddListViewItemEventListener(*__pEventListener);
99 _ListViewItem* pListViewItem = pItemBaseImpl->GetListViewItem();
100 SysAssert(pListViewItem != null);
102 pListViewItem->SetFont(__fontName);
103 pListViewItem->AddRef();
104 pListViewItem->SetAppInfo(pItemBase);
105 pListViewItem->SetItemStyle(static_cast<TableViewAnnexStyle>(pItemBaseImpl->GetListItemAnnexStyle()));
106 pListViewItem->SetItemWidth(GetListWidth());
108 if (IsDescriptionTextShown(itemIndex) == true)
110 pListViewItem->SetDescriptionTextShowState(true);
113 if (__itemLoadedCount < __countOfAllItems)
115 __itemAverageHeight = (__itemAverageHeight * __itemLoadedCount + pListViewItem->GetItemHeight()) / (__itemLoadedCount + 1);
119 return pListViewItem;
123 _ListViewItemProviderAdaptor::UnloadItem(_IListItemCommon* pListItem, int groupIndex, int itemIndex)
125 SysTryReturn(NID_UI_CTRL, pListItem != null, E_INVALID_ARG, E_INVALID_ARG,
126 "[E_INVALID_ARG]pListItem is invalid argument");
128 _ListViewItem* pListViewItem = static_cast<_ListViewItem*>(pListItem);
129 if (pListViewItem->GetParent() != null)
131 pListViewItem->GetParent()->DetachChild(*pListViewItem);
135 if (pListViewItem == GetDefaultItem())
140 if (pListViewItem == __pItemNeedsLazyDeletion)
142 pListViewItem->AddRef();
145 if (pListViewItem->Release() != 0)
147 ListItemBase* pItemBase = static_cast<ListItemBase*>(pListViewItem->GetAppInfo());
149 _ListItemBaseImpl* pItemBaseImpl = _ListItemBaseImpl::GetInstance(*pItemBase);
150 SysAssert(pItemBaseImpl != null);
152 // add ListViewItem event listener
153 //pItemBaseImpl->RemoveListViewItemEventListener(*__pEventListener);
155 if (__pListViewProvider->DeleteItem(itemIndex, pItemBase, GetListWidth()) == false)
165 _ListViewItemProviderAdaptor::DeleteItem(_IListItemCommon* pListItem, int groupIndex, int itemIndex)
167 SysTryReturn(NID_UI_CTRL, pListItem != null, E_INVALID_ARG, E_INVALID_ARG,
168 "[E_INVALID_ARG] pListItem is invalid argument.");
170 _ListViewItem* pListViewItem = static_cast<_ListViewItem*>(pListItem);
171 if (pListViewItem->GetParent() != null)
173 pListViewItem->GetParent()->DetachChild(*pListViewItem);
177 if (pListViewItem == GetDefaultItem())
182 if (pListViewItem == __pItemNeedsLazyDeletion)
184 pListViewItem->AddRef();
187 if (pListViewItem->Release() != 0)
189 ListItemBase* pItemBase = static_cast<ListItemBase*>(pListViewItem->GetAppInfo());
197 _ListViewItemProviderAdaptor::UpdateItem(_IListItemCommon* pItem, int groupIndex, int itemIndex)
199 _ListViewItem* pListViewItem = static_cast<_ListViewItem*>(pItem);
201 if (pListViewItem != null)
203 pListViewItem->SetDescriptionTextShowState(IsDescriptionTextShown(itemIndex));
210 _ListViewItemProviderAdaptor::GetItemCount(int groupIndex) const
212 _ListViewItemProviderAdaptor* pItemProviderAdaptor = const_cast<_ListViewItemProviderAdaptor*>(this);
214 pItemProviderAdaptor->__countOfAllItems = __pListViewProvider->GetItemCount();
216 return __countOfAllItems;
220 _ListViewItemProviderAdaptor::GetGroupCount(void) const
226 _ListViewItemProviderAdaptor::GetDefaultItemHeight(void)
228 return __itemAverageHeight;
232 _ListViewItemProviderAdaptor::GetDefaultGroupItemHeight(void)
238 _ListViewItemProviderAdaptor::SetDescriptionTextShowState(int itemIndex, bool show)
241 _LinkedList <short>::_Iterator theIter = __descriptionTextShowItem.begin();
243 while (theIter != __descriptionTextShowItem.end())
245 index = (int) (*theIter);
247 if (index == itemIndex)
251 __descriptionTextShowItem.erase(theIter);
256 else if (index > itemIndex)
260 __descriptionTextShowItem.insert(theIter, itemIndex);
271 __descriptionTextShowItem.push_back(itemIndex);
278 _ListViewItemProviderAdaptor::IsDescriptionTextShown(int itemIndex) const
281 _LinkedList <short>::_Iterator theIter = __descriptionTextShowItem.begin();
283 while (theIter != __descriptionTextShowItem.end())
285 index = (int) (*theIter);
287 if (index == itemIndex)
291 else if (index > itemIndex)
304 _ListViewItemProviderAdaptor::SetListViewItemEventListener(_IUiListViewItemEventListener& listener)
306 __pEventListener = &listener;
310 _ListViewItemProviderAdaptor::SetItemFont(const String& fontName)
312 __fontName = fontName;
316 _ListViewItemProviderAdaptor::SetItemNeedsLazyDeletion(_ListViewItem* pItem)
318 if (__pItemNeedsLazyDeletion != pItem)
320 if (__pItemNeedsLazyDeletion != null)
322 __pItemNeedsLazyDeletion->Release();
325 __pItemNeedsLazyDeletion = pItem;
329 }}} // Tizen::Ui::Controls