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_OptionMenuModel.cpp
20 * @brief This is the implementation file for the _OptionMenuModel class.
23 #include <FBaseErrorDefine.h>
24 #include <FBaseSysLog.h>
25 #include "FUi_Control.h"
26 #include "FUiCtrl_OptionMenuModel.h"
28 using namespace Tizen::Graphics;
29 using namespace Tizen::Base;
31 namespace Tizen { namespace Ui { namespace Controls
34 _OptionMenuModel::_OptionMenuModel(void)
39 _OptionMenuModel::~_OptionMenuModel(void)
41 __items.RemoveAll(true);
46 _OptionMenuModel::Construct(void)
48 result r = __items.Construct();
49 SysTryReturnResult(NID_UI_CTRL, r == E_SUCCESS, r, "Failed to construct ArrayList.");
55 _OptionMenuModel::IsValidItem(_OptionMenuItem *pItem)
62 int actionId = pItem->GetActionId();
63 int itemCount = __items.GetCount();
65 for (int i = 0; i < itemCount; i++)
67 _OptionMenuItem* pTargetItem = GetItem(i);
69 if (pTargetItem == null)
72 if (pTargetItem->GetActionId() == actionId)
82 _OptionMenuModel::GetItemCount(void) const
84 return __items.GetCount();
88 _OptionMenuModel::AddItem(_OptionMenuItem* pItem, int mainIndex)
92 if (mainIndex == INVALID_INDEX)
94 r = __items.Add(*pItem);
98 _OptionMenuItem* pMainItem = GetItem(mainIndex);
100 SysTryReturnResult(NID_UI_CTRL, pItem != null, r, "Propagating.");
102 r = pMainItem->InsertSubItemAt(*pItem, pMainItem->GetSubItemCount());
109 _OptionMenuModel::InsertItemAt(_OptionMenuItem* pItem, int mainIndex, int subIndex)
111 result r = E_SUCCESS;
113 if (subIndex == INVALID_INDEX)
115 r = __items.InsertAt(*pItem, mainIndex);
119 _OptionMenuItem* pMainItem = GetItem(mainIndex);
121 SysTryReturnResult(NID_UI_CTRL, pItem != null, r, "Propagating.");
123 r = pMainItem->InsertSubItemAt(*pItem, subIndex);
131 _OptionMenuModel::SetItemAt(int mainIndex, const String& text, int actionId, const Bitmap* pNormalBitmap,
132 const Bitmap* pPressedBitmap, const Bitmap* pHighlightedBitmap, float fontSize, int subIndex)
134 _OptionMenuItem* pItem = GetItem(mainIndex, subIndex);
135 result r = GetLastResult();
136 SysTryReturnResult(NID_UI_CTRL, pItem != null, r, "Propagating.");
138 OptionMenuItemDrawingType itemType = OPTION_MENU_ITEM_DRAWING_TYPE_TEXT;
140 if (subIndex == INVALID_INDEX)
142 int index = GetItemIndexFromActionId(actionId);
143 SysTryReturnResult(NID_UI_CTRL, (index < 0 || mainIndex == index), E_SYSTEM,
144 "A system error has occurred. The specified actionId (%d) is not valid", actionId);
148 _OptionMenuItem* pMainItem = GetItem(mainIndex);
149 SysTryReturnResult(NID_UI_CTRL, pMainItem != null, E_SYSTEM,
150 "A system error has occurred. The specified main index (%d) does not exists.", mainIndex);
151 int index = pMainItem->GetSubItemIndexFromActionId(actionId);
152 SysTryReturnResult(NID_UI_CTRL, (index < 0 || subIndex == index), E_SYSTEM,
153 "A system error has occurred. The specified actionId (%d) is not valid", actionId);
156 _Label* pLabel = null;
158 if (pNormalBitmap != null)
160 itemType = OPTION_MENU_ITEM_DRAWING_TYPE_BITMAP;
163 pItem->SetBitmap(OPTION_MENU_ITEM_DRAWING_STATUS_NORMAL, pNormalBitmap);
165 pLabel = pItem->GetBitmapLabel();
169 pLabel->SetBackgroundBitmap(*pNormalBitmap);
172 pItem->SetBitmap(OPTION_MENU_ITEM_DRAWING_STATUS_PRESSED, pPressedBitmap);
174 pItem->SetBitmap(OPTION_MENU_ITEM_DRAWING_STATUS_HIGHLIGHTED, pHighlightedBitmap);
176 pLabel = pItem->GetTextLabel();
180 pLabel->SetText(text);
181 pLabel->SetTextConfig(fontSize, LABEL_TEXT_STYLE_NORMAL);
184 pItem->SetType(itemType);
185 pItem->SetText(text);
186 pItem->SetActionId(actionId);
187 pItem->SetTextSize(fontSize);
193 _OptionMenuModel::RemoveItem(int mainIndex, int subIndex)
195 if (subIndex == INVALID_INDEX)
197 return __items.RemoveAt(mainIndex, true);
200 _OptionMenuItem* pMainItem = GetItem(mainIndex);
201 result r = GetLastResult();
202 SysTryReturnResult(NID_UI_CTRL, pMainItem != null, r, "Propagating.");
204 SysTryReturnResult(NID_UI_CTRL,
205 (subIndex > INVALID_INDEX && subIndex < pMainItem->GetSubItemCount()), E_INVALID_ARG,
206 "Invalid argument is used. The specified sub index (%d) is out of range.", subIndex);
208 return pMainItem->RemoveSubItemAt(subIndex);
212 _OptionMenuModel::RemoveAllItem(void)
214 __items.RemoveAll(true);
220 _OptionMenuModel::ResetAllItem(void)
222 int count = __items.GetCount();
224 _OptionMenuItem* pItem;
225 for(int index = 0; index < count; index++)
227 pItem = static_cast <_OptionMenuItem*>(__items.GetAt(index));
228 pItem->SetAndInvalidate(false);
233 _OptionMenuModel::ResetSelectedItem(int selectedIndex)
235 if (selectedIndex == -1)
240 _OptionMenuItem* pItem = null;
241 pItem = static_cast <_OptionMenuItem*>(__items.GetAt(selectedIndex));
242 SysTryReturnVoidResult(NID_UI_CTRL, pItem != null, E_SYSTEM, "[%s] A system error has occurred. pItem must not be null.", GetErrorMessage(E_SYSTEM));
243 pItem->SetAndInvalidate(false);
248 _OptionMenuModel::GetItemIndexFromActionId(int actionId) const
250 const _OptionMenuItem* pItem = null;
251 for (int mainIndex = 0; mainIndex < __items.GetCount(); mainIndex++)
253 pItem = static_cast<const _OptionMenuItem*>(__items.GetAt(mainIndex));
256 if (pItem->GetActionId() == actionId)
267 _OptionMenuModel::GetSubItemCount(int mainIndex) const
269 const _OptionMenuItem* pItem = GetItem(mainIndex);
275 return pItem->GetSubItemCount();
279 _OptionMenuModel::GetSubItemIndexFromActionId(int actionId, int& mainIndex) const
281 const _OptionMenuItem* pMainItem = null;
282 int mainItemCount = __items.GetCount();
283 for (int index = 0; index < mainItemCount; index++)
285 pMainItem = static_cast<const _OptionMenuItem*>(__items.GetAt(index));
286 if (pMainItem != null)
288 int subItemIndex = pMainItem->GetSubItemIndexFromActionId(actionId);
289 if (subItemIndex >= 0)
300 _OptionMenuModel::GetItem(int mainIndex, int subIndex) const
302 int count = __items.GetCount();
304 if (mainIndex < 0 || mainIndex >= count)
309 const _OptionMenuItem* pItem = static_cast <const _OptionMenuItem*>(__items.GetAt(mainIndex));
311 if (subIndex == INVALID_INDEX)
313 return const_cast<_OptionMenuItem*>(pItem);
317 return const_cast<_OptionMenuItem*>(pItem)->GetSubItem(subIndex);
321 }}} // Tizen::Ui::Controls