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_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_CoordinateSystemUtils.h"
27 #include "FUi_ResourceManager.h"
28 #include "FUiCtrl_IListItemCommon.h"
29 #include "FUiCtrl_ListItemBaseImpl.h"
30 #include "FUiCtrl_ListViewContextItem.h"
31 #include "FUiCtrl_ListViewImpl.h"
32 #include "FUiCtrl_ListViewItem.h"
33 #include "FUiCtrl_ListViewItemProviderAdaptor.h"
35 #ifdef MEMORY_LEAK_CHECK
36 #include "mem_leak_check.h"
39 using namespace Tizen::Graphics;
40 using namespace Tizen::Base;
42 namespace Tizen { namespace Ui { namespace Controls
45 _ListViewItemProviderAdaptor::_ListViewItemProviderAdaptor(const IListViewItemProvider& provider)
46 : __pListViewProvider(const_cast<IListViewItemProvider*>(&provider))
47 , __pListViewProviderF(null)
48 , __pEventListener(null)
50 , __itemAverageHeight(0.0f)
51 , __itemLoadedCount(0)
52 , __countOfAllItems(0)
53 , __pItemNeedsLazyDeletion(null)
54 , __pLazyDeletionItem(null)
55 , __usingFloatingPoint(false)
59 _ListViewItemProviderAdaptor::_ListViewItemProviderAdaptor(const IListViewItemProviderF& provider)
60 : __pListViewProvider(null)
61 , __pListViewProviderF(const_cast<IListViewItemProviderF*>(&provider))
62 , __pEventListener(null)
64 , __itemAverageHeight(0.0f)
65 , __itemLoadedCount(0)
66 , __countOfAllItems(0)
67 , __pItemNeedsLazyDeletion(null)
68 , __pLazyDeletionItem(null)
69 , __usingFloatingPoint(true)
73 _ListViewItemProviderAdaptor::~_ListViewItemProviderAdaptor(void)
75 __descriptionTextShowItem.clear();
77 SetItemLazyDeletion(null);
81 _ListViewItemProviderAdaptor::SetItemProvider(const IListViewItemProvider& provider)
83 __pListViewProvider = const_cast<IListViewItemProvider*>(&provider);
84 __pListViewProviderF = null;
86 __usingFloatingPoint = false;
90 _ListViewItemProviderAdaptor::SetItemProvider(const IListViewItemProviderF& provider)
92 __pListViewProvider = null;
93 __pListViewProviderF = const_cast<IListViewItemProviderF*>(&provider);
95 __usingFloatingPoint = true;
98 IListViewItemProvider*
99 _ListViewItemProviderAdaptor::GetItemProvider(void) const
101 return __pListViewProvider;
104 IListViewItemProviderF*
105 _ListViewItemProviderAdaptor::GetItemProviderF(void) const
107 return __pListViewProviderF;
111 _ListViewItemProviderAdaptor::LoadItem(int groupIndex, int itemIndex)
113 SysTryReturn(NID_UI_CTRL, (groupIndex == 0), null, E_INVALID_ARG,
114 "[E_INVALID_ARG] parameter not available.");
116 _TableViewItem* pTableViewItem = null;
119 pTableViewItem = GetDefaultItem();
120 pTableViewItem->SetAppInfo(null);
122 return pTableViewItem;
125 ListItemBase* pItemBase = null;
126 if (__usingFloatingPoint)
128 pItemBase = __pListViewProviderF->CreateItem(itemIndex, GetListWidth());
132 pItemBase = __pListViewProvider->CreateItem(itemIndex, _CoordinateSystemUtils::ConvertToInteger(GetListWidth()));
135 if (pItemBase == null)
137 pTableViewItem = GetDefaultItem();
138 pTableViewItem->SetAppInfo(null);
140 return pTableViewItem;
143 _ListItemBaseImpl* pItemBaseImpl = _ListItemBaseImpl::GetInstance(*pItemBase);
144 SysAssert(pItemBaseImpl != null);
146 // add ListViewItem event listener
147 pItemBaseImpl->AddListViewItemEventListener(*__pEventListener);
149 _ListViewItem* pListViewItem = pItemBaseImpl->GetListViewItem();
150 SysAssert(pListViewItem != null);
152 pListViewItem->AddRef();
153 pListViewItem->SetAppInfo(pItemBase);
154 pListViewItem->SetItemStyle(static_cast<TableViewAnnexStyle>(pItemBaseImpl->GetListItemAnnexStyle()));
155 pListViewItem->SetItemWidth(GetListWidth());
156 pListViewItem->SetFont(__fontName);
158 if (IsDescriptionTextShown(itemIndex))
160 pListViewItem->SetDescriptionTextShowState(true);
163 if (__itemLoadedCount < __countOfAllItems)
165 __itemAverageHeight = (__itemAverageHeight * __itemLoadedCount + pListViewItem->GetItemHeight()) / (__itemLoadedCount + 1);
169 return pListViewItem;
173 _ListViewItemProviderAdaptor::UnloadItem(_IListItemCommon* pListItem, int groupIndex, int itemIndex)
175 SysTryReturn(NID_UI_CTRL, pListItem != null, E_INVALID_ARG, E_INVALID_ARG,
176 "[E_INVALID_ARG]pListItem is invalid argument");
178 _ListViewItem* pListViewItem = static_cast<_ListViewItem*>(pListItem);
179 if (pListViewItem->GetParent() != null)
181 pListViewItem->GetParent()->DetachChild(*pListViewItem);
185 if (pListViewItem == GetDefaultItem())
190 if (pListViewItem == __pItemNeedsLazyDeletion)
192 SetItemLazyDeletion(pListViewItem);
195 if (pListViewItem->Release() != 0)
197 ListItemBase* pItemBase = static_cast<ListItemBase*>(pListViewItem->GetAppInfo());
199 _ListItemBaseImpl* pItemBaseImpl = _ListItemBaseImpl::GetInstance(*pItemBase);
200 SysAssert(pItemBaseImpl != null);
202 // remove ListViewItem event listener
203 pItemBaseImpl->RemoveListViewItemEventListener(*__pEventListener);
205 if (__usingFloatingPoint)
207 if (!__pListViewProviderF->DeleteItem(itemIndex, pItemBase, GetListWidth()))
214 if (!__pListViewProvider->DeleteItem(itemIndex, pItemBase, _CoordinateSystemUtils::ConvertToInteger(GetListWidth())))
225 _ListViewItemProviderAdaptor::DeleteItem(_IListItemCommon* pListItem, int groupIndex, int itemIndex)
227 SysTryReturn(NID_UI_CTRL, pListItem != null, E_INVALID_ARG, E_INVALID_ARG,
228 "[E_INVALID_ARG] pListItem is invalid argument.");
230 _ListViewItem* pListViewItem = static_cast<_ListViewItem*>(pListItem);
231 if (pListViewItem->GetParent() != null)
233 pListViewItem->GetParent()->DetachChild(*pListViewItem);
237 if (pListViewItem == GetDefaultItem())
242 if (pListViewItem == __pItemNeedsLazyDeletion)
244 SetItemLazyDeletion(pListViewItem);
247 if (pListViewItem->Release() != 0)
249 ListItemBase* pItemBase = static_cast<ListItemBase*>(pListViewItem->GetAppInfo());
257 _ListViewItemProviderAdaptor::UpdateItem(_IListItemCommon* pItem, int groupIndex, int itemIndex)
259 _ListViewItem* pListViewItem = static_cast<_ListViewItem*>(pItem);
261 if (pListViewItem != null)
263 pListViewItem->SetDescriptionTextShowState(IsDescriptionTextShown(itemIndex));
270 _ListViewItemProviderAdaptor::GetItemCount(int groupIndex) const
272 _ListViewItemProviderAdaptor* pItemProviderAdaptor = const_cast<_ListViewItemProviderAdaptor*>(this);
274 if (__usingFloatingPoint)
276 pItemProviderAdaptor->__countOfAllItems = __pListViewProviderF->GetItemCount();
280 pItemProviderAdaptor->__countOfAllItems = __pListViewProvider->GetItemCount();
283 return __countOfAllItems;
287 _ListViewItemProviderAdaptor::GetGroupCount(void) const
293 _ListViewItemProviderAdaptor::GetDefaultItemHeight(void)
295 return __itemAverageHeight;
299 _ListViewItemProviderAdaptor::GetDefaultGroupItemHeight(void)
305 _ListViewItemProviderAdaptor::SetDescriptionTextShowState(int itemIndex, bool show)
308 _LinkedList <short>::_Iterator theIter = __descriptionTextShowItem.begin();
310 while (theIter != __descriptionTextShowItem.end())
312 index = (int) (*theIter);
314 if (index == itemIndex)
318 __descriptionTextShowItem.erase(theIter);
323 else if (index > itemIndex)
327 __descriptionTextShowItem.insert(theIter, itemIndex);
338 __descriptionTextShowItem.push_back(itemIndex);
345 _ListViewItemProviderAdaptor::IsDescriptionTextShown(int itemIndex) const
348 _LinkedList <short>::_Iterator theIter = __descriptionTextShowItem.begin();
350 while (theIter != __descriptionTextShowItem.end())
352 index = (int) (*theIter);
354 if (index == itemIndex)
358 else if (index > itemIndex)
371 _ListViewItemProviderAdaptor::SetListViewItemEventListener(_IUiListViewItemEventListener& listener)
373 __pEventListener = &listener;
377 _ListViewItemProviderAdaptor::SetItemFont(const String& fontName)
379 __fontName = fontName;
383 _ListViewItemProviderAdaptor::SetItemNeedsLazyDeletion(_ListViewItem* pItem)
385 __pItemNeedsLazyDeletion = pItem;
389 _ListViewItemProviderAdaptor::SetItemLazyDeletion(_ListViewItem* pItem)
391 if (__pLazyDeletionItem != pItem)
393 if (__pLazyDeletionItem != null)
395 __pLazyDeletionItem->Release();
402 __pLazyDeletionItem = pItem;
406 }}} // Tizen::Ui::Controls