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_ListViewContextItem.cpp
20 * @brief This is the implementation file for _ListViewContextItem class.
22 * This file contains the implementation of _ListViewContextItem class.
25 #include <FBaseSysLog.h>
27 #include "FUi_ResourceManager.h"
28 #include "FUiCtrl_ListViewContextItem.h"
30 #ifdef MEMORY_LEAK_CHECK
31 #include "mem_leak_check.h"
34 using namespace Tizen::Base;
35 using namespace Tizen::Graphics;
37 namespace Tizen { namespace Ui { namespace Controls
40 _ListViewContextItem::_ListViewContextItem(float itemHeight)
41 : _TableViewItem(itemHeight)
43 , __elementYPosition(0.0f)
45 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, __margin);
46 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_ELEMENT_SPACING, _CONTROL_ORIENTATION_PORTRAIT, __elementSpacing);
47 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_ELEMENT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, __elementHeight);
49 SetBackgroundColor(Color(0, 0, 0, 0));
52 _ListViewContextItem::~_ListViewContextItem(void)
54 for (int i = __elements.size() - 1; i >= 0; i--)
56 _ListViewContextItemElement element = __elements.at(i);
58 DetachChild(*(element.pButton));
60 delete element.pButton;
61 element.pButton = null;
63 __elements.pop_back();
70 _ListViewContextItem::CreateListViewContextItemN(float itemHeight)
72 _ListViewContextItem* pItem = new (std::nothrow) _ListViewContextItem(itemHeight);
73 SysTryReturn(NID_UI_CTRL, (pItem != null), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
75 pItem->AcquireHandle();
77 result r = pItem->Initialize();
78 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r = E_SYSTEM, "[E_SYSTEM] Unable to create TableView Item");
89 _ListViewContextItem::AddElement(int elementId, const String& text, bool enable)
91 if (text.IsEmpty() || HasElement(elementId))
96 _ListViewContextItemElement contextElement;
97 memset(&contextElement, 0, sizeof(_ListViewContextItemElement));
99 contextElement.elementId = elementId;
100 contextElement.pButton = _Button::CreateButtonN();
101 SysTryReturn(NID_UI_CTRL, (contextElement.pButton != null), false, E_OUT_OF_MEMORY, "E_OUT_OF_MEMORY] The memory is insufficient.");
103 __elements.push_back(contextElement);
105 AdjustElementLayout(GetBoundsF());
107 contextElement.pButton->SetActionId(elementId);
108 contextElement.pButton->SetEnableState(enable);
109 contextElement.pButton->SetText(text);
111 AttachChild(*(contextElement.pButton));
117 _ListViewContextItem::AddElement(int elementId, const Bitmap* pNormalBitmap, const Bitmap* pPressedBitmap,
118 const Bitmap* pHighlightedBitmap, bool enable)
120 if ((pNormalBitmap == null) || (pPressedBitmap == null) || HasElement(elementId))
125 _ListViewContextItemElement contextElement;
126 memset(&contextElement, 0, sizeof(_ListViewContextItemElement));
128 contextElement.elementId = elementId;
129 contextElement.pButton = _Button::CreateButtonN();
130 SysTryReturn(NID_UI_CTRL, (contextElement.pButton != null), false, E_OUT_OF_MEMORY, "E_OUT_OF_MEMORY] The memory is insufficient.");
132 __elements.push_back(contextElement);
134 AdjustElementLayout(GetBoundsF());
136 contextElement.pButton->SetActionId(elementId);
137 contextElement.pButton->SetEnableState(enable);
138 contextElement.pButton->SetBackgroundBitmap(_BUTTON_STATUS_NORMAL, *pNormalBitmap);
139 contextElement.pButton->SetBackgroundBitmap(_BUTTON_STATUS_PRESSED, *pPressedBitmap);
141 if (pHighlightedBitmap != null)
143 contextElement.pButton->SetBackgroundBitmap(_BUTTON_STATUS_HIGHLIGHTED, *pHighlightedBitmap);
146 AttachChild(*(contextElement.pButton));
152 _ListViewContextItem::AddElement(int elementId, const String& text, const Bitmap* pNormalBitmap, const Bitmap* pPressedBitmap,
153 const Bitmap* pHighlightedBitmap, bool enable)
155 bool ret = AddElement(elementId, pNormalBitmap, pPressedBitmap, pHighlightedBitmap, enable);
157 _ListViewContextItemElement* pElement = GetElement(elementId);
159 if ((ret) && (pElement != null))
161 pElement->pButton->SetMargin(0.0f, 0.0f, 0.0f, 0.0f);
162 pElement->pButton->SetText(text);
171 _ListViewContextItem::SetElementTextColor(int elementId, ListViewContextItemElementDrawingStatus status, const Color& textColor)
174 _ListViewContextItemElement* pElement = GetElement(elementId);
176 if (pElement != null)
178 r = pElement->pButton->SetTextColor(GetButtonDrawingStatus(status), textColor);
181 return (r == E_SUCCESS);
185 _ListViewContextItem::GetElementTextColor(int elementId, ListViewContextItemElementDrawingStatus status) const
187 _ListViewContextItemElement* pElement = GetElement(elementId);
189 if (pElement != null)
191 return pElement->pButton->GetTextColor(GetButtonDrawingStatus(status));
198 _ListViewContextItem::SetElementBackgroundColor(int elementId, ListViewContextItemElementDrawingStatus status, const Color& backgroundColor)
201 _ListViewContextItemElement* pElement = GetElement(elementId);
203 if (pElement != null)
205 r = pElement->pButton->SetColor(GetButtonDrawingStatus(status), backgroundColor);
208 return (r == E_SUCCESS);
212 _ListViewContextItem::GetElementBackgroundColor(int elementId, ListViewContextItemElementDrawingStatus status) const
214 _ListViewContextItemElement* pElement = GetElement(elementId);
216 if (pElement != null)
218 return pElement->pButton->GetColor(GetButtonDrawingStatus(status));
225 _ListViewContextItem::GetButtonDrawingStatus(ListViewContextItemElementDrawingStatus status) const
227 _ButtonStatus buttonStatus;
231 case LISTVIEW_CONTEXTITEM_ELEMENT_STATUS_NORMAL:
232 buttonStatus = _BUTTON_STATUS_NORMAL;
235 case LISTVIEW_CONTEXTITEM_ELEMENT_STATUS_PRESSED:
236 buttonStatus = _BUTTON_STATUS_PRESSED;
239 case LISTVIEW_CONTEXTITEM_ELEMENT_STATUS_HIGHLIGHTED:
240 buttonStatus = _BUTTON_STATUS_HIGHLIGHTED;
244 buttonStatus = _BUTTON_STATUS_NORMAL;
252 _ListViewContextItem::AdjustElementLayout(FloatRectangle bounds)
254 int elementCount = __elements.size();
255 FloatRectangle elementBounds;
257 if ((elementCount <= 0) || (bounds.width <= 0.0f) || (bounds.height <= 0.0f))
262 // Calculate horizontal value
263 if (elementCount == 1)
266 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_LEFT_MARGIN_ONE, _CONTROL_ORIENTATION_PORTRAIT, margin);
268 elementBounds.x = __margin + margin;
269 elementBounds.width = (bounds.width - ((__margin + margin) * 2.0f));
273 elementBounds.x = __margin;
274 elementBounds.width = ((bounds.width - __margin * 2.0f) - (__elementSpacing * (elementCount - 1))) / elementCount;
277 // Calculate vertical value
278 elementBounds.y = (bounds.height - __elementHeight) / 2.0f;
279 elementBounds.height = __elementHeight;
280 __elementYPosition = elementBounds.y;
282 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
284 for (iter = __elements.begin(); iter != __elements.end(); iter++)
286 if (iter->pButton != null)
288 iter->pButton->SetBounds(elementBounds);
291 elementBounds.x += (elementBounds.width + __elementSpacing);
295 _ListViewContextItemElement*
296 _ListViewContextItem::GetElement(int elementId) const
298 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
300 for (iter = __elements.begin(); iter != __elements.end(); iter++)
302 if (iter->elementId == elementId)
312 _ListViewContextItem::HasElement(int elementId)
314 _ListViewContextItemElement* pElement = GetElement(elementId);
316 return (pElement != null);
320 _ListViewContextItem::GetElementIdFromPosition(const FloatPoint& position) const
322 _LinkedList <_ListViewContextItemElement>::_ReverseIterator reverseIter;
324 for (reverseIter = __elements.rbegin(); reverseIter != __elements.rend(); reverseIter++)
326 if ((*reverseIter).pButton->GetBoundsF().Contains(position))
328 return (*reverseIter).elementId;
336 _ListViewContextItem::AddContextItemEventListener(_IActionEventListener& listener)
338 if (__elements.size() > 0)
340 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
342 for (iter = __elements.begin(); iter != __elements.end(); iter++)
344 iter->pButton->AddActionEventListener(listener);
350 _ListViewContextItem::RemoveContextItemEventListener(_IActionEventListener& listener)
352 if (__elements.size() > 0)
354 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
356 for (iter = __elements.begin(); iter != __elements.end(); iter++)
358 iter->pButton->RemoveActionEventListener(listener);
364 _ListViewContextItem::AdjustItemBounds(FloatRectangle& bounds)
366 if (!_FloatCompare(bounds.width, __itemWidth) || !_FloatCompare(GetSizeF().height, bounds.height))
368 AdjustElementLayout(FloatRectangle(0.0f, 0.0f, bounds.width, bounds.height));
369 __itemWidth = bounds.width;
374 _ListViewContextItem::OnBoundsChanging(const FloatRectangle& bounds)
376 float elementYPosition = (bounds.height - __elementHeight) / 2.0f;
377 if (!_FloatCompare(GetSizeF().height, bounds.height) || !_FloatCompare(__elementYPosition, elementYPosition))
379 AdjustElementLayout(FloatRectangle(0.0f, 0.0f, __itemWidth, bounds.height));
386 _ListViewContextItem::OnFontChanged(Font* pFont)
388 String fontName = GetFont();
390 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
392 for (iter = __elements.begin(); iter != __elements.end(); iter++)
394 iter->pButton->SetFont(fontName);
398 }}} // Tizen::Ui::Controls