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.
18 #include "FUiCtrl_TabBarImpl.h"
19 #include "FUiCtrl_TabBarItem.h"
20 #include "FUi_ResourceSizeInfo.h"
21 #include "FUi_ResourceManager.h"
24 #include <FUiCtrlTabBarItem.h>
25 #include "FUi_UiBuilder.h"
27 using namespace Tizen::Ui;
28 using namespace Tizen::Graphics;
29 using namespace Tizen::Base::Runtime;
31 namespace Tizen { namespace Ui { namespace Controls
34 Tizen::Graphics::Dimension
35 _TabBarImpl::TabBarSizeInfo::GetDefaultMinimumSize(_ControlOrientation orientation) const
39 Tizen::Graphics::Dimension dimension(0, 0);
41 GET_SHAPE_CONFIG(TABBAR::MIN_WIDTH, orientation, dimension.width);
43 SysTryReturn(NID_UI, r == E_SUCCESS, dimension, r, "[%s] System Error.", GetErrorMessage(r));
48 _TabBarImpl::GetInstance(TabBar& tabBar)
50 return static_cast<_TabBarImpl*> (tabBar._pControlImpl);
54 _TabBarImpl::GetInstance(const TabBar& tabBar)
56 return static_cast<const _TabBarImpl*> (tabBar._pControlImpl);
59 _TabBarImpl::_TabBarImpl(TabBar* pTabBar, _TabBar* pCore)
60 : _ControlImpl(pTabBar, pCore)
61 , __pPublicActionEvent(null)
65 _TabBarImpl::~_TabBarImpl(void)
67 if (__pPublicActionEvent)
69 delete __pPublicActionEvent;
70 __pPublicActionEvent = null;
75 _TabBarImpl::CreateTabBarImplN(TabBar* pTabBar, const Tizen::Graphics::Rectangle& bounds)
78 SysTryReturn(NID_UI_CTRL, bounds.width >= 0 && bounds.height >= 0, null, E_INVALID_ARG, "[E_INVALID_ARG] The specified width is smaller than minimum size.");
83 GET_SHAPE_CONFIG(TABBAR::MIN_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, minWidth);
84 GET_SHAPE_CONFIG(TABBAR::MAX_WIDTH, _CONTROL_ORIENTATION_PORTRAIT, maxWidth);
85 GET_SHAPE_CONFIG(TABBAR::HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, height);
88 //r = GET_SIZE_INFO(TabBar).CheckInitialSizeValid(Dimension(bounds.width, bounds.height), _CONTROL_ORIENTATION_PORTRAIT);
89 //SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, E_INVALID_ARG, "[E_INVALID_ARG] The specified width is smaller than minimum size.");
91 _TabBar* pCore = _TabBar::CreateTabBarN();
92 SysTryReturn(NID_UI_CTRL, pCore != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] _TabBar is not constructed.");
94 _TabBarImpl* pImpl = new (std::nothrow) _TabBarImpl(pTabBar, pCore);
95 r = CheckConstruction(pCore, pImpl);
96 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
98 r = pImpl->SetBounds(Rectangle(bounds.x, bounds.y, bounds.width, height));
99 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] SetBounds is failed.", GetErrorMessage(r));
101 r = pImpl->SetMinimumSize(Dimension(minWidth, height));
102 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] SetMinimumSize is failed.", GetErrorMessage(r));
104 r = pImpl->SetMaximumSize(Dimension(maxWidth, height));
105 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] SetMaximumSize is failed.", GetErrorMessage(r));
116 _TabBarImpl::AddItem(const Tizen::Base::String& text, int actionId)
119 GET_SHAPE_CONFIG(TABBAR::ITEM_COUNT_MAX, GetCore().GetOrientation(), itemMaxCnt);
120 SysTryReturn(NID_UI_CTRL, GetCore().GetItemCount() < itemMaxCnt, E_MAX_EXCEEDED, E_MAX_EXCEEDED, "[E_MAX_EXCEEDED] The item is not added more than %d.", itemMaxCnt);
122 return GetCore().AddItem(text, actionId);
126 _TabBarImpl::InsertItemAt(int index, const Tizen::Base::String& text, int actionId)
129 GET_SHAPE_CONFIG(TABBAR::ITEM_COUNT_MAX, GetCore().GetOrientation(), itemMaxCnt);
130 SysTryReturn(NID_UI_CTRL, GetCore().GetItemCount() < itemMaxCnt, E_MAX_EXCEEDED, E_MAX_EXCEEDED, "[E_MAX_EXCEEDED] The item is not added more than %d.", itemMaxCnt);
131 SysTryReturn(NID_UI_CTRL, index >= 0 && index <= GetCore().GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] This index(%d) is invalid.", index);
133 return GetCore().InsertItemAt(index, text, actionId);
136 Tizen::Graphics::Color
137 _TabBarImpl::GetColor(void) const
139 return GetCore().GetColor();
143 _TabBarImpl::GetItemCount(void) const
145 return GetCore().GetItemCount();
148 Tizen::Graphics::Color
149 _TabBarImpl::GetSelectedItemColor(void) const
151 return GetCore().GetItemColor(ITEM_STATUS_SELECTED);
154 Tizen::Graphics::Color
155 _TabBarImpl::GetItemTextColor(TabBarItemStatus status) const
157 if (status == TAB_BAR_ITEM_STATUS_NORMAL)
159 return GetCore().GetItemTextColor(ITEM_STATUS_NORMAL);
161 else if (status == TAB_BAR_ITEM_STATUS_SELECTED)
163 return GetCore().GetItemTextColor(ITEM_STATUS_SELECTED);
166 return Tizen::Graphics::Color(0);
170 _TabBarImpl::GetSelectedItemIndex(void) const
172 return GetCore().GetSelectedItemIndex();
176 _TabBarImpl::RemoveItemAt(int index)
178 SysTryReturn(NID_UI_CTRL, index >= 0 && index < GetCore().GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] This index(%d) is invalid.", index);
180 return GetCore().RemoveItemAt(index);
184 _TabBarImpl::RemoveAllItems(void)
186 return GetCore().RemoveAllItems();
190 _TabBarImpl::SetColor(const Tizen::Graphics::Color& color)
192 return GetCore().SetColor(color);
196 _TabBarImpl::SetItemAt(int index, const Tizen::Base::String& text, int actionId)
198 SysTryReturn(NID_UI_CTRL, index >= 0 && index < GetCore().GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] This index(%d) is invalid.", index);
200 return GetCore().SetItemAt(index, text, actionId);
204 _TabBarImpl::SetItemSelected(int index)
206 SysTryReturn(NID_UI_CTRL, index >= 0 && index < GetCore().GetItemCount(), E_OUT_OF_RANGE, E_OUT_OF_RANGE, "[E_OUT_OF_RANGE] This index(%d) is invalid.", index);
208 return GetCore().SetItemSelected(index);
212 _TabBarImpl::SetItemTextColor(TabBarItemStatus status, const Tizen::Graphics::Color& color)
214 if (status == TAB_BAR_ITEM_STATUS_NORMAL)
216 GetCore().SetItemTextColor(ITEM_STATUS_NORMAL, color);
218 else if (status == TAB_BAR_ITEM_STATUS_SELECTED)
220 GetCore().SetItemTextColor(ITEM_STATUS_SELECTED, color);
227 _TabBarImpl::SetSelectedItemColor(const Tizen::Graphics::Color& color)
229 return GetCore().SetItemColor(ITEM_STATUS_SELECTED, color);
233 _TabBarImpl::SetWidth(int width)
235 return GetCore().SetWidth(width);
239 _TabBarImpl::AddActionEventListener(Tizen::Ui::IActionEventListener& listener)
243 if (__pPublicActionEvent == null)
245 __pPublicActionEvent = _PublicActionEvent::CreateInstanceN(GetPublic());
247 if (__pPublicActionEvent == null || IsFailed(GetLastResult()))
249 SysLogException(NID_UI_CTRL, E_INVALID_STATE, "[E_INVALID_STATE] System error occurred.");
250 SetLastResult(E_INVALID_STATE);
251 delete __pPublicActionEvent;
256 SetLastResult(E_SUCCESS);
258 __pPublicActionEvent->AddListener(listener);
260 GetCore().AddActionEventListener(*this);
264 _TabBarImpl::RemoveActionEventListener(Tizen::Ui::IActionEventListener& listener)
266 SysTryReturnVoidResult(NID_UI_CTRL, __pPublicActionEvent, E_INVALID_STATE, "[E_INVALID_STATE] This instance isn't constructed.")
268 // Todo : check fail case of RemoveListener
269 __pPublicActionEvent->RemoveListener(listener);
271 GetCore().RemoveActionEventListener(*this);
275 _TabBarImpl::GetPublic(void)
277 return static_cast <TabBar&>(_ControlImpl::GetPublic());
281 _TabBarImpl::GetPublic(void) const
283 return static_cast <const TabBar&>(_ControlImpl::GetPublic());
287 _TabBarImpl::GetPublicClassName(void) const
289 return "Tizen::Ui::Controls::TabBar";
293 _TabBarImpl::GetCore(void) const
295 return static_cast <const _TabBar&>(_ControlImpl::GetCore());
299 _TabBarImpl::GetCore(void)
301 return static_cast <_TabBar&>(_ControlImpl::GetCore());
305 _TabBarImpl::OnActionPerformed(const Tizen::Ui::_Control& source, int actionId)
307 if (__pPublicActionEvent != null)
309 __pPublicActionEvent->Fire(*_PublicActionEvent::CreateActionEventArgN(actionId));
314 : public _UiBuilderControlMaker
317 _TabBarMaker(_UiBuilder* uibuilder)
318 : _UiBuilderControlMaker(uibuilder){};
319 virtual ~_TabBarMaker(){};
321 static _UiBuilderControlMaker*
322 GetInstance(_UiBuilder* uibuilder)
324 _TabBarMaker* pTabBarMaker = new (std::nothrow) _TabBarMaker(uibuilder);
325 SysTryReturn(NID_UI_CTRL, pTabBarMaker != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
329 virtual Tizen::Ui::Control*
330 Make(_UiBuilderControl* pControl)
332 result r = E_SUCCESS;
333 _UiBuilderControlLayout* pControlProperty = null;
334 TabBar* pTabBar = null;
335 Tizen::Graphics::Rectangle rect;
336 Tizen::Base::String elementString;
340 GetProperty(pControl, &pControlProperty);
341 if (pControlProperty == null)
346 rect = pControlProperty->GetRect();
349 pTabBar = new (std::nothrow) TabBar();
350 SysTryReturn(NID_UI_CTRL, pTabBar != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
352 r = pTabBar->Construct(rect.x, rect.y, rect.width);
359 rect = pTabBar->GetBounds();
361 if (pControl->GetElement(L"BGColorOpacity", elementString) == true)
363 Base::Integer::Parse(elementString, opacity);
366 if (pControl->GetElement(L"BGColor", elementString) == true)
368 ConvertStringToColor32(elementString, opacity, color);
369 pTabBar->SetColor(color);
372 if (pControl->GetElement(L"backgroundColorOpacity", elementString) == true)
374 Base::Integer::Parse(elementString, opacity);
377 if (pControl->GetElement(L"backgroundColor", elementString) == true)
379 ConvertStringToColor32(elementString, opacity, color);
380 pTabBar->SetColor(color);
383 if (pControl->GetElement(L"normalItemTextColor", elementString) == true)
385 ConvertStringToColor(elementString, color);
386 pTabBar->SetItemTextColor(TAB_BAR_ITEM_STATUS_NORMAL, color);
389 if (pControl->GetElement(L"selectedItemTextColor", elementString) == true)
391 ConvertStringToColor(elementString, color);
392 pTabBar->SetItemTextColor(TAB_BAR_ITEM_STATUS_SELECTED, color);
395 if (pControl->GetElement(L"selectedItemColor", elementString) == true)
397 ConvertStringToColor(elementString, color);
398 pTabBar->SetSelectedItemColor(color);
401 int itemCnt = pControl->GetItemCount();
402 for (int i = 0; i < itemCnt; i++)
404 TabBarItem tabBarItem;
406 if (pControl->GetItemElement(i, "actionId", elementString))
408 Base::Integer::Parse(elementString, actionId);
411 if (pControl->GetItemElement(i, "text", elementString))
413 tabBarItem.Construct(elementString, actionId);
415 pTabBar->AddItem(tabBarItem);
418 rect = (pControl->GetAttribute(UIBUILDER_ATTRIBUTE_PORTRAIT))->GetRect();
419 (pControl->GetAttribute(UIBUILDER_ATTRIBUTE_PORTRAIT))->SetRect(rect.x, rect.y, rect.width, rect.height);
421 rect = (pControl->GetAttribute(UIBUILDER_ATTRIBUTE_LANDSCAPE))->GetRect();
422 (pControl->GetAttribute(UIBUILDER_ATTRIBUTE_LANDSCAPE))->SetRect(rect.x, rect.y, rect.width, rect.height);
424 /*r = AddControl(pControl, pTabBar);
435 _TabBarRegister::_TabBarRegister()
437 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
438 pUiBuilderControlTableManager->RegisterControl(L"TabBar", _TabBarMaker::GetInstance);
440 _TabBarRegister::~_TabBarRegister()
442 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
443 pUiBuilderControlTableManager->UnregisterControl(L"TabBar");
445 static _TabBarRegister TabBarRegisterToUiBuilder;
446 }}} // Tizen::Ui::Controls