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_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>
26 #include "FUi_ResourceManager.h"
27 #include "FUiCtrl_ListViewContextItem.h"
29 #ifdef MEMORY_LEAK_CHECK
30 #include "mem_leak_check.h"
33 using namespace Tizen::Base;
34 using namespace Tizen::Graphics;
36 namespace Tizen { namespace Ui { namespace Controls
39 _ListViewContextItem::_ListViewContextItem(int itemHeight)
40 : _TableViewItem(itemHeight)
42 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_LEFT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, __margin);
43 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_ELEMENT_SPACING, _CONTROL_ORIENTATION_PORTRAIT, __elementSpacing);
44 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_ELEMENT_HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, __elementHeight);
45 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_ELEMENT_FONT_SIZE, _CONTROL_ORIENTATION_PORTRAIT, __textSize);
47 SetBackgroundColor(Color(0, 0, 0, 0));
50 _ListViewContextItem::~_ListViewContextItem(void)
52 for (int i = __elements.size() - 1; i >= 0; i--)
54 _ListViewContextItemElement element = __elements.at(i);
56 DetachChild(*(element.pButton));
58 delete element.pButton;
59 element.pButton = null;
61 __elements.pop_back();
68 _ListViewContextItem::CreateListViewContextItemN(int itemHeight)
70 _ListViewContextItem* pItem = new (std::nothrow) _ListViewContextItem(itemHeight);
71 SysTryReturn(NID_UI_CTRL, (pItem != null), null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] The memory is insufficient.");
73 pItem->AcquireHandle();
75 result r = pItem->Initialize();
76 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r = E_SYSTEM, "[E_SYSTEM] Unable to create TableView Item");
87 _ListViewContextItem::AddElement(int elementId, const String& text, bool enable)
89 if (text.IsEmpty() || HasElement(elementId))
94 _ListViewContextItemElement contextElement;
95 memset(&contextElement, 0, sizeof(_ListViewContextItemElement));
97 contextElement.elementId = elementId;
98 contextElement.pButton = _Button::CreateButtonN();
99 SysTryReturn(NID_UI_CTRL, (contextElement.pButton != null), false, E_OUT_OF_MEMORY, "E_OUT_OF_MEMORY] The memory is insufficient.");
101 __elements.push_back(contextElement);
103 AdjustElementLayout();
105 contextElement.pButton->SetActionId(elementId);
106 contextElement.pButton->SetEnableState(enable);
107 //contextElement.pButton->SetMargin(0, 0);
108 contextElement.pButton->SetTextSize(__textSize);
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();
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 if (text.IsEmpty() || (pNormalBitmap == null) || (pPressedBitmap == null) || HasElement(elementId))
160 _ListViewContextItemElement contextElement;
161 memset(&contextElement, 0, sizeof(_ListViewContextItemElement));
163 contextElement.elementId = elementId;
164 contextElement.pButton = _Button::CreateButtonN();
165 SysTryReturn(NID_UI_CTRL, (contextElement.pButton != null), false, E_OUT_OF_MEMORY, "E_OUT_OF_MEMORY] The memory is insufficient.");
167 __elements.push_back(contextElement);
169 AdjustElementLayout();
171 contextElement.pButton->SetActionId(elementId);
172 contextElement.pButton->SetEnableState(enable);
173 contextElement.pButton->SetMargin(0, 0);
174 contextElement.pButton->SetTextSize(__textSize);
175 contextElement.pButton->SetText(text);
176 contextElement.pButton->SetBackgroundBitmap(_BUTTON_STATUS_NORMAL, *pNormalBitmap);
177 contextElement.pButton->SetBackgroundBitmap(_BUTTON_STATUS_PRESSED, *pPressedBitmap);
179 if (pHighlightedBitmap != null)
181 contextElement.pButton->SetBackgroundBitmap(_BUTTON_STATUS_HIGHLIGHTED, *pHighlightedBitmap);
184 AttachChild(*(contextElement.pButton));
190 _ListViewContextItem::AdjustElementLayout(void)
192 if (__elements.size() == 0)
197 int elementCount = __elements.size();
198 Rectangle itemBounds = GetBounds();
199 Rectangle elementBounds;
201 // Calculate horizontal value
202 if (elementCount == 1)
205 GET_SHAPE_CONFIG(LISTVIEW::CONTEXTITEM_LEFT_MARGIN_ONE, _CONTROL_ORIENTATION_PORTRAIT, margin);
207 elementBounds.x = __margin + margin;
208 elementBounds.width = (itemBounds.width - ((__margin + margin) * 2));
212 elementBounds.x = __margin;
213 elementBounds.width = ((itemBounds.width - __margin * 2) - (__elementSpacing * (elementCount - 1))) / elementCount;
216 // Calculate vertical value
217 elementBounds.y = (itemBounds.height - __elementHeight) / 2;
218 elementBounds.height = __elementHeight;
220 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
222 for (iter = __elements.begin(); iter != __elements.end(); iter++)
224 if (iter->pButton != null)
226 iter->pButton->SetBounds(elementBounds);
229 elementBounds.x += (elementBounds.width + __elementSpacing);
233 _ListViewContextItemElement*
234 _ListViewContextItem::GetElement(int elementId) const
236 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
238 for (iter = __elements.begin(); iter != __elements.end(); iter++)
240 if (iter->elementId == elementId)
250 _ListViewContextItem::HasElement(int elementId)
252 _ListViewContextItemElement* pElement = GetElement(elementId);
254 return (pElement != null);
258 _ListViewContextItem::GetElementIdFromPosition(const Point& position) const
260 _LinkedList <_ListViewContextItemElement>::_ReverseIterator reverseIter;
262 for (reverseIter = __elements.rbegin(); reverseIter != __elements.rend(); reverseIter++)
264 if ((*reverseIter).pButton->GetBounds().Contains(position))
266 return (*reverseIter).elementId;
274 _ListViewContextItem::AddContextItemEventListener(_IActionEventListener& listener)
276 if (__elements.size() > 0)
278 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
280 for (iter = __elements.begin(); iter != __elements.end(); iter++)
282 iter->pButton->AddActionEventListener(listener);
288 _ListViewContextItem::RemoveContextItemEventListener(_IActionEventListener& listener)
290 if (__elements.size() > 0)
292 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
294 for (iter = __elements.begin(); iter != __elements.end(); iter++)
296 iter->pButton->RemoveActionEventListener(listener);
302 _ListViewContextItem::AdjustItemBounds(Rectangle& bounds)
304 Rectangle newBounds = bounds;
305 Dimension itemDimension = GetSize();
308 GET_SHAPE_CONFIG(TABLEVIEW::CONTEXTITEM_RIGHT_MARGIN, _CONTROL_ORIENTATION_PORTRAIT, margin);
309 newBounds.width -= margin;
311 if ((itemDimension.width != newBounds.width) || (itemDimension.height != newBounds.height))
313 SetBounds(Rectangle(0, 0,newBounds.width, newBounds.height));
314 AdjustElementLayout();
319 _ListViewContextItem::OnFontChanged(Font* pFont)
321 String fontName = GetFont();
323 _LinkedList <_ListViewContextItemElement>::_Iterator iter;
325 for (iter = __elements.begin(); iter != __elements.end(); iter++)
327 iter->pButton->SetFont(fontName);
331 }}} // Tizen::Ui::Controls