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_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_ResourceManager.h"
29 #include "FUiCtrl_ListContextItemImpl.h"
30 #include "FUiCtrl_ListItemBaseImpl.h"
31 #include "FUiCtrl_ListViewContextItem.h"
32 #include "FUiCtrl_ListViewItem.h"
33 #include "FUiCtrl_UiListViewItemEvent.h"
34 #include "FUiCtrl_UiListViewItemEventArg.h"
36 #ifdef MEMORY_LEAK_CHECK
37 #include "mem_leak_check.h"
40 using namespace Tizen::Base;
41 using namespace Tizen::Graphics;
42 using namespace Tizen::Graphics::_Text;
44 namespace Tizen { namespace Ui { namespace Controls
48 _ListItemBaseImpl::GetInstance(ListItemBase& listItemBase)
50 return listItemBase._pImpl;
53 const _ListItemBaseImpl*
54 _ListItemBaseImpl::GetInstance(const ListItemBase& listItemBase)
56 return listItemBase._pImpl;
59 _ListItemBaseImpl::_ListItemBaseImpl(ListItemBase* pPublic)
61 , __pListViewItem(null)
62 , __style(LIST_ANNEX_STYLE_NORMAL)
68 _ListItemBaseImpl::~_ListItemBaseImpl(void)
70 if (__pListViewItem != null)
72 __pListViewItem->RemoveTouchLongPressGestureEventListener(*this);
75 if (__pListViewItem != null)
77 __pListViewItem->Release();
85 _ListItemBaseImpl::GetPublicClassName(void) const
87 return "Tizen::Ui::Controls::ListItemBase";
91 _ListItemBaseImpl::GetPublic(void) const
93 return static_cast <const ListItemBase&>(*__pPublic);
97 _ListItemBaseImpl::GetPublic(void)
103 _ListItemBaseImpl::CreateListItemBaseImplN(ListItemBase* pPublic, const Dimension& itemSize, ListAnnexStyle style)
105 _ListItemBaseImpl* pImpl = new (std::nothrow) _ListItemBaseImpl(pPublic);
106 SysTryReturn(NID_UI_CTRL, (pImpl != null), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
108 result r = pImpl->Construct(itemSize, style);
109 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] Propagating.", GetErrorMessage(r));
121 _ListItemBaseImpl::Construct(const Dimension& itemSize, ListAnnexStyle style)
123 SysTryReturn(NID_UI_CTRL, (itemSize.width >= 0) && (itemSize.height >= 0), E_INVALID_ARG, E_INVALID_ARG,
124 ("[E_INVALID_ARG] The item size should be greater than 0."));
126 __pListViewItem = _ListViewItem::CreateListViewItemN(itemSize.height);
127 SysTryReturn(NID_UI_CTRL, (__pListViewItem != null), E_OUT_OF_MEMORY, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
129 __pListViewItem->SetSize(itemSize);
130 __pListViewItem->SetBounds(Rectangle(0, 0, itemSize.width, itemSize.height));
131 __pListViewItem->SetBackgroundColor(Color(0, 0, 0, 0));
132 __pListViewItem->SetProgressValue(-1);
133 __pListViewItem->AddTouchLongPressGestureEventListener(*this);
134 __pListViewItem->SetSelectionStyle(TABLE_VIEW_ITEM_SELECTION_STYLE_WHOLE);
136 __itemSize = itemSize;
143 _ListItemBaseImpl::GetListViewItem(void) const
145 return __pListViewItem;
149 _ListItemBaseImpl::GetItemSize(void) const
155 _ListItemBaseImpl::SetBackgroundBitmap(ListItemDrawingStatus status, const Bitmap* pBitmap)
157 SysTryReturn(NID_UI_CTRL, (pBitmap != null), E_INVALID_ARG, E_INVALID_ARG, "[E_INVALID_ARG] It is invalid argument.");
159 ListItemState itemState;
163 case LIST_ITEM_DRAWING_STATUS_NORMAL:
164 itemState = LIST_ITEM_STATE_NORMAL;
167 case LIST_ITEM_DRAWING_STATUS_PRESSED:
168 itemState = LIST_ITEM_STATE_PRESSED;
171 case LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED:
172 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
176 SysTryReturn(NID_UI_CTRL, false, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Unable to set background image.");
179 bool ret = __pListViewItem->SetItemBackgroundBitmap(itemState, pBitmap);
180 __pListViewItem->SetItemChanged(ret);
186 _ListItemBaseImpl::SetBackgroundColor(ListItemDrawingStatus status, const Color& color)
188 ListItemState itemState;
192 case LIST_ITEM_DRAWING_STATUS_NORMAL:
193 itemState = LIST_ITEM_STATE_NORMAL;
196 case LIST_ITEM_DRAWING_STATUS_PRESSED:
197 itemState = LIST_ITEM_STATE_PRESSED;
200 case LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED:
201 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
205 SysTryReturn(NID_UI_CTRL, false, E_SYSTEM, E_SYSTEM, "[E_SYSTEM] Unable to set background color.");
208 __pListViewItem->SetItemBackgroundColor(itemState, color);
209 __pListViewItem->SetItemChanged(true);
215 _ListItemBaseImpl::GetBackgroundColor(ListItemDrawingStatus status) const
217 ListItemState itemState;
221 case LIST_ITEM_DRAWING_STATUS_NORMAL:
222 itemState = LIST_ITEM_STATE_NORMAL;
225 case LIST_ITEM_DRAWING_STATUS_PRESSED:
226 itemState = LIST_ITEM_STATE_PRESSED;
229 case LIST_ITEM_DRAWING_STATUS_HIGHLIGHTED:
230 itemState = LIST_ITEM_STATE_HIGHLIGHTED;
234 SysTryReturn(NID_UI_CTRL, false, Color(0), E_SYSTEM, "[E_SYSTEM] Unable to get background color.");
237 return __pListViewItem->GetItemBackgroundColor(itemState);
241 _ListItemBaseImpl::SetContextItem(const _ListContextItemImpl* pItem)
245 __pListViewItem->SetContextItem(null);
249 _ListViewContextItem* pContextItem = const_cast<_ListContextItemImpl*>(pItem)->GetContextItem();
251 if (pContextItem != null)
253 __pListViewItem->SetItemWidth(__itemSize.width);
254 __pListViewItem->SetContextItem(pContextItem);
255 __pListViewItem->SetContextItemEventListener(*this);
264 _ListItemBaseImpl::SetDescriptionText(const String& text)
266 SysTryReturn(NID_UI_CTRL, (__pListViewItem->SetDescriptionText(text) == true), E_SYSTEM, E_SYSTEM,
267 ("[E_SYSTEM] Unable to set description text."));
273 _ListItemBaseImpl::SetDescriptionTextColor(const Color& color)
275 __pListViewItem->SetDescriptionTextColor(color);
281 _ListItemBaseImpl::SetProgressValue(int value)
283 SysTryReturn(NID_UI_CTRL, (__pListViewItem->SetProgressValue(value) == true), E_SYSTEM, E_SYSTEM,
284 ("[E_SYSTEM] Unable to set progress value."));
290 _ListItemBaseImpl::SetProgressMargins(int leftMargin, int rightMargin)
292 SysTryReturn(NID_UI_CTRL, (leftMargin >= 0) && (rightMargin >= 0), E_INVALID_ARG, E_INVALID_ARG,
293 ("[E_INVALID_ARG] It is invalid argument."));
295 SysTryReturn(NID_UI_CTRL, (leftMargin < (__itemSize.width - rightMargin)), E_INVALID_ARG, E_INVALID_ARG,
296 ("[E_INVALID_ARG] It is invalid argument."));
298 SysTryReturn(NID_UI_CTRL, (__pListViewItem->SetProgressMargins(leftMargin, rightMargin) == true), E_SYSTEM, E_SYSTEM,
299 ("[E_SYSTEM] Unable to set progress bar margin."));
305 _ListItemBaseImpl::GetAnnexWidth(ListAnnexStyle style)
311 case LIST_ANNEX_STYLE_NORMAL:
315 case LIST_ANNEX_STYLE_MARK:
316 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
319 case LIST_ANNEX_STYLE_RADIO:
320 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
323 case LIST_ANNEX_STYLE_ONOFF_SLIDING:
324 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_ONOFF_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
327 case LIST_ANNEX_STYLE_DETAILED:
328 GET_SHAPE_CONFIG(TABLEVIEW::ITEM_ANNEX_MORE_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, annexWidth);
339 _ListItemBaseImpl::GetListItemAnnexStyle(void)
345 _ListItemBaseImpl::SetTextColor(int elementId, Color textColor)
347 bool ret = __pListViewItem->SetTextColor(elementId, textColor);
348 __pListViewItem->SetItemChanged(ret);
354 _ListItemBaseImpl::GetTextColor(int elementId, Color& textColor) const
356 return __pListViewItem->GetTextColor(elementId, textColor);
360 _ListItemBaseImpl::AddListViewItemEventListener(_IUiListViewItemEventListener& listener)
362 if (__pEvent == null)
364 __pEvent = new (std::nothrow) _UiListViewItemEvent();
365 SysTryReturnVoidResult(NID_UI_CTRL, __pEvent != null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
368 __pEvent->AddListener(listener);
372 _ListItemBaseImpl::RemoveListViewItemEventListener(_IUiListViewItemEventListener& listener)
374 if (__pEvent != null)
376 __pEvent->RemoveListener(listener);
381 _ListItemBaseImpl::OnActionPerformed(const _Control& source, int actionId)
383 if (__pEvent != null)
388 __pListViewItem->GetItemIndex(groupIndex, itemIndex);
389 __pEvent->SetSource(__pListViewItem);
391 _UiListViewItemEventArg* pArg = new (std::nothrow) _UiListViewItemEventArg(groupIndex, itemIndex, actionId, NOTIFY_TYPE_CONTEXTITEM_SELCTED);
392 __pEvent->Fire(*pArg);
397 _ListItemBaseImpl::OnLongPressGestureDetected(_TouchLongPressGestureDetector& gesture)
399 if (__pEvent != null)
401 int elementId = __pListViewItem->GetElementIdFromCurrentTouchPosition();
405 __pListViewItem->GetItemIndex(groupIndex, itemIndex);
406 __pEvent->SetSource(__pListViewItem);
408 _UiListViewItemEventArg* pArg = new (std::nothrow) _UiListViewItemEventArg(groupIndex, itemIndex, elementId, NOTIFY_TYPE_ITEM_LONGPRESSED);
409 __pEvent->Fire(*pArg);
416 _ListItemBaseImpl::OnLongPressGestureCanceled(_TouchLongPressGestureDetector& gesture)
421 }}} // Tizen::Ui::Controls