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_ListItemBaseImpl.cpp
20 * @brief This is the implementation file for _ListItemBaseImpl class.
22 * This file contains the implementation of _ListItemBaseImpl class.
25 #include <FBaseSysLog.h>
26 #include <FUiCtrlListItemBase.h>
27 #include <FGrp_BitmapImpl.h>
28 #include "FUi_CoordinateSystemUtils.h"
29 #include "FUi_ResourceManager.h"
30 #include "FUiCtrl_ListContextItemImpl.h"
31 #include "FUiCtrl_ListItemBaseImpl.h"
32 #include "FUiCtrl_ListViewContextItem.h"
33 #include "FUiCtrl_ListViewItem.h"
34 #include "FUiCtrl_UiListViewItemEvent.h"
35 #include "FUiCtrl_UiListViewItemEventArg.h"
37 #ifdef MEMORY_LEAK_CHECK
38 #include "mem_leak_check.h"
41 using namespace Tizen::Base;
42 using namespace Tizen::Graphics;
43 using namespace Tizen::Graphics::_Text;
45 namespace Tizen { namespace Ui { namespace Controls
49 _ListItemBaseImpl::GetInstance(ListItemBase& listItemBase)
51 return listItemBase._pImpl;
54 const _ListItemBaseImpl*
55 _ListItemBaseImpl::GetInstance(const ListItemBase& listItemBase)
57 return listItemBase._pImpl;
60 _ListItemBaseImpl::_ListItemBaseImpl(ListItemBase* pPublic)
62 , __pListViewItem(null)
63 , __style(LIST_ANNEX_STYLE_NORMAL)
69 _ListItemBaseImpl::~_ListItemBaseImpl(void)
71 if (__pListViewItem != null)
73 _TableViewItem* pContextItem = __pListViewItem->GetContextItem();
74 __pListViewItem->Release();
78 pContextItem->Release();
87 _ListItemBaseImpl::GetPublicClassName(void) const
89 return "Tizen::Ui::Controls::ListItemBase";
93 _ListItemBaseImpl::GetPublic(void) const
95 return static_cast <const ListItemBase&>(*__pPublic);
99 _ListItemBaseImpl::GetPublic(void)
105 _ListItemBaseImpl::CreateListItemBaseImplN(ListItemBase* pPublic, const FloatDimension& itemSize, ListAnnexStyle style)
107 _ListItemBaseImpl* pImpl = new (std::nothrow) _ListItemBaseImpl(pPublic);
108 SysTryReturn(NID_UI_CTRL, (pImpl != null), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
110 result r = pImpl->Construct(itemSize, style);
111 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
123 _ListItemBaseImpl::Construct(const FloatDimension& itemSize, ListAnnexStyle style)
125 SysTryReturn(NID_UI_CTRL, (itemSize.width >= 0.0f) && (itemSize.height >= 0.0f), E_INVALID_ARG, E_INVALID_ARG,
126 ("[E_INVALID_ARG] The item size should be greater than 0.0f"));
128 __pListViewItem = _ListViewItem::CreateListViewItemN(itemSize.height);
129 SysTryReturn(NID_UI_CTRL, (__pListViewItem != null), E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
131 __pListViewItem->SetSize(itemSize);
132 __pListViewItem->SetBounds(FloatRectangle(0.0f, 0.0f, itemSize.width, itemSize.height));
133 __pListViewItem->SetBackgroundColor(Color(0, 0, 0, 0));
134 __pListViewItem->SetSelectionStyle(TABLE_VIEW_ITEM_SELECTION_STYLE_WHOLE);
135 __pListViewItem->GetAccessibilityContainer()->Activate(true);
137 __itemSize = itemSize;
144 _ListItemBaseImpl::GetListViewItem(void) const
146 return __pListViewItem;
150 _ListItemBaseImpl::GetItemSize(void) const
156 _ListItemBaseImpl::SetBackgroundBitmap(ListItemDrawingStatus status, const Bitmap* pBitmap)
158 SysTryReturn(NID_UI_CTRL, (pBitmap != null), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] It is invalid argument.");
160 ListItemState itemState;
164 case LIST_ITEM_DRAWING_STATUS_NORMAL:
165 itemState = LIST_ITEM_STATE_NORMAL;
168 case LIST_ITEM_DRAWING_STATUS_PRESSED:
169 itemState = LIST_ITEM_STATE_PRESSED;
172 case LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED:
173 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
177 SysTryReturn(NID_UI_CTRL, false, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Unable to set background image.");
180 bool ret = __pListViewItem->SetItemBackgroundBitmap(itemState, pBitmap);
181 __pListViewItem->SetItemChanged(ret);
187 _ListItemBaseImpl::SetBackgroundColor(ListItemDrawingStatus status, const Color& color)
189 ListItemState itemState;
193 case LIST_ITEM_DRAWING_STATUS_NORMAL:
194 itemState = LIST_ITEM_STATE_NORMAL;
197 case LIST_ITEM_DRAWING_STATUS_PRESSED:
198 itemState = LIST_ITEM_STATE_PRESSED;
201 case LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED:
202 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
206 SysTryReturn(NID_UI_CTRL, false, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Unable to set background color.");
209 __pListViewItem->SetItemBackgroundColor(itemState, color);
210 __pListViewItem->SetItemChanged(true);
216 _ListItemBaseImpl::GetBackgroundColor(ListItemDrawingStatus status) const
218 ListItemState itemState;
222 case LIST_ITEM_DRAWING_STATUS_NORMAL:
223 itemState = LIST_ITEM_STATE_NORMAL;
226 case LIST_ITEM_DRAWING_STATUS_PRESSED:
227 itemState = LIST_ITEM_STATE_PRESSED;
230 case LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED:
231 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
235 SysTryReturn(NID_UI_CTRL, false, Color(0), E_SYSTEM, "[E_SYSTEM] Unable to get background color.");
238 return __pListViewItem->GetItemBackgroundColor(itemState);
242 _ListItemBaseImpl::SetContextItem(const _ListContextItemImpl* pItem)
244 if (__pListViewItem->GetContextItem())
246 __pListViewItem->GetContextItem()->Release();
251 __pListViewItem->SetContextItem(null);
255 _ListViewContextItem* pContextItem = const_cast<_ListContextItemImpl*>(pItem)->GetContextItem();
257 if (pContextItem != null)
259 __pListViewItem->SetItemWidth(__itemSize.width);
261 pContextItem->AddRef();
263 __pListViewItem->SetContextItem(pContextItem);
264 __pListViewItem->SetContextItemEventListener(*this);
273 _ListItemBaseImpl::SetDescriptionText(const String& text)
275 SysTryReturn(NID_UI_CTRL, (__pListViewItem->SetDescriptionText(text) == true), E_SYSTEM, E_SYSTEM,
276 ("[E_SYSTEM] Unable to set description text."));
282 _ListItemBaseImpl::SetDescriptionTextColor(const Color& color)
284 __pListViewItem->SetDescriptionTextColor(color);
290 _ListItemBaseImpl::GetAnnexWidth(ListAnnexStyle style)
292 TableViewAnnexStyle annexStyle = TABLE_VIEW_ANNEX_STYLE_NORMAL;
296 case LIST_ANNEX_STYLE_NORMAL:
297 annexStyle = TABLE_VIEW_ANNEX_STYLE_NORMAL;
300 case LIST_ANNEX_STYLE_MARK:
301 annexStyle = TABLE_VIEW_ANNEX_STYLE_MARK;
304 case LIST_ANNEX_STYLE_ONOFF_SLIDING:
305 annexStyle = TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING;
308 case LIST_ANNEX_STYLE_DETAILED:
309 annexStyle = TABLE_VIEW_ANNEX_STYLE_DETAILED;
312 case LIST_ANNEX_STYLE_RADIO:
313 annexStyle = TABLE_VIEW_ANNEX_STYLE_RADIO;
316 case LIST_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER:
317 annexStyle = TABLE_VIEW_ANNEX_STYLE_ONOFF_SLIDING_WITH_DIVIDER;
324 return _TableViewItem::GetAnnexWidth(annexStyle);
328 _ListItemBaseImpl::GetListItemAnnexStyle(void)
334 _ListItemBaseImpl::SetTextColor(int elementId, Color textColor)
336 bool ret = __pListViewItem->SetTextColor(elementId, textColor);
337 __pListViewItem->SetItemChanged(ret);
343 _ListItemBaseImpl::GetTextColor(int elementId, Color& textColor) const
345 return __pListViewItem->GetTextColor(elementId, textColor);
349 _ListItemBaseImpl::AddListViewItemEventListener(_IUiListViewItemEventListener& listener)
351 if (__pEvent == null)
353 __pEvent = new (std::nothrow) _UiListViewItemEvent();
354 SysTryReturnVoidResult(NID_UI_CTRL, __pEvent != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
357 __pEvent->AddListener(listener);
361 _ListItemBaseImpl::RemoveListViewItemEventListener(_IUiListViewItemEventListener& listener)
363 if (__pEvent != null)
365 __pEvent->RemoveListener(listener);
370 _ListItemBaseImpl::OnActionPerformed(const _Control& source, int actionId)
372 if (__pEvent != null)
377 __pListViewItem->GetItemIndex(groupIndex, itemIndex);
378 __pEvent->SetSource(__pListViewItem);
380 _UiListViewItemEventArg* pArg = new (std::nothrow) _UiListViewItemEventArg(groupIndex, itemIndex, actionId, NOTIFY_TYPE_CONTEXTITEM_SELCTED);
381 __pEvent->Fire(*pArg);
385 }}} // Tizen::Ui::Controls