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 <FBaseInteger.h>
19 #include <FUiAccessibilityContainer.h>
20 #include <FUiAccessibilityElement.h>
21 #include "FUiCtrl_TabBarImpl.h"
22 #include "FUiCtrl_TabBarItem.h"
23 #include "FUi_CoordinateSystemUtils.h"
24 #include "FUi_ResourceSizeInfo.h"
25 #include "FUi_ResourceManager.h"
28 #include <FUiCtrlTabBarItem.h>
29 #include "FUi_UiBuilder.h"
31 using namespace Tizen::Ui;
32 using namespace Tizen::Graphics;
33 using namespace Tizen::Base::Runtime;
35 namespace Tizen { namespace Ui { namespace Controls
39 _TabBarImpl::GetInstance(TabBar& tabBar)
41 return static_cast<_TabBarImpl*> (tabBar._pControlImpl);
45 _TabBarImpl::GetInstance(const TabBar& tabBar)
47 return static_cast<const _TabBarImpl*> (tabBar._pControlImpl);
50 _TabBarImpl::_TabBarImpl(TabBar* pTabBar, _TabBar* pCore)
51 : _ControlImpl(pTabBar, pCore)
52 , __pPublicActionEvent(null)
56 _TabBarImpl::~_TabBarImpl(void)
58 if (__pPublicActionEvent)
60 delete __pPublicActionEvent;
61 __pPublicActionEvent = null;
66 _TabBarImpl::CreateTabBarImplN(TabBar* pTabBar, const Tizen::Graphics::FloatRectangle& bounds)
69 SysTryReturn(NID_UI_CTRL, bounds.width >= 0.0f && bounds.height >= 0.0f, null, E_INVALID_ARG, "[E_INVALID_ARG] The specified width is smaller than minimum size.");
72 GET_SHAPE_CONFIG(TABBAR::HEIGHT, _CONTROL_ORIENTATION_PORTRAIT, height);
76 _TabBar* pCore = _TabBar::CreateTabBarN();
77 SysTryReturn(NID_UI_CTRL, pCore != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] _TabBar is not constructed.");
79 _TabBarImpl* pImpl = new (std::nothrow) _TabBarImpl(pTabBar, pCore);
80 r = CheckConstruction(pCore, pImpl);
81 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
83 r = pImpl->SetBounds(FloatRectangle(bounds.x, bounds.y, bounds.width, height));
84 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] SetBounds is failed.", GetErrorMessage(r));
86 r = pImpl->SetMinimumSize(FloatDimension(pImpl->GetMinimumSizeF().width, height));
87 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] SetMinimumSize is failed.", GetErrorMessage(r));
89 r = pImpl->SetMaximumSize(FloatDimension(pImpl->GetMaximumSizeLimitF().width, height));
90 SysTryCatch(NID_UI_CTRL, r == E_SUCCESS, , r, "[%s] SetMaximumSize is failed.", GetErrorMessage(r));
101 _TabBarImpl::AddItem(const Tizen::Base::String& text, int actionId)
104 GET_SHAPE_CONFIG(TABBAR::ITEM_COUNT_MAX, GetCore().GetOrientation(), itemMaxCnt);
105 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);
107 return GetCore().AddItem(text, actionId);
111 _TabBarImpl::InsertItemAt(int index, const Tizen::Base::String& text, int actionId)
114 GET_SHAPE_CONFIG(TABBAR::ITEM_COUNT_MAX, GetCore().GetOrientation(), itemMaxCnt);
115 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);
116 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);
118 return GetCore().InsertItemAt(index, text, actionId);
121 Tizen::Graphics::Color
122 _TabBarImpl::GetColor(void) const
124 return GetCore().GetColor();
128 _TabBarImpl::GetItemCount(void) const
130 return GetCore().GetItemCount();
133 Tizen::Graphics::Color
134 _TabBarImpl::GetSelectedItemColor(void) const
136 return GetCore().GetItemColor(ITEM_STATUS_SELECTED);
139 Tizen::Graphics::Color
140 _TabBarImpl::GetItemTextColor(TabBarItemStatus status) const
142 if (status == TAB_BAR_ITEM_STATUS_NORMAL)
144 return GetCore().GetItemTextColor(ITEM_STATUS_NORMAL);
146 else if (status == TAB_BAR_ITEM_STATUS_SELECTED)
148 return GetCore().GetItemTextColor(ITEM_STATUS_SELECTED);
151 return Tizen::Graphics::Color(0);
155 _TabBarImpl::GetSelectedItemIndex(void) const
157 return GetCore().GetSelectedItemIndex();
161 _TabBarImpl::RemoveItemAt(int index)
163 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);
165 return GetCore().RemoveItemAt(index);
169 _TabBarImpl::RemoveAllItems(void)
171 return GetCore().RemoveAllItems();
175 _TabBarImpl::SetColor(const Tizen::Graphics::Color& color)
177 return GetCore().SetColor(color);
181 _TabBarImpl::SetItemAt(int index, const Tizen::Base::String& text, int actionId)
183 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);
185 return GetCore().SetItemAt(index, text, actionId);
189 _TabBarImpl::SetItemSelected(int index)
191 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);
193 return GetCore().SetItemSelected(index);
197 _TabBarImpl::SetItemTextColor(TabBarItemStatus status, const Tizen::Graphics::Color& color)
199 if (status == TAB_BAR_ITEM_STATUS_NORMAL)
201 GetCore().SetItemTextColor(ITEM_STATUS_NORMAL, color);
203 else if (status == TAB_BAR_ITEM_STATUS_SELECTED)
205 GetCore().SetItemTextColor(ITEM_STATUS_SELECTED, color);
212 _TabBarImpl::SetSelectedItemColor(const Tizen::Graphics::Color& color)
214 return GetCore().SetItemColor(ITEM_STATUS_SELECTED, color);
218 _TabBarImpl::SetWidth(float width)
220 return GetCore().SetWidth(width);
224 _TabBarImpl::AddActionEventListener(Tizen::Ui::IActionEventListener& listener)
228 if (__pPublicActionEvent == null)
230 __pPublicActionEvent = _PublicActionEvent::CreateInstanceN(GetPublic());
232 if (__pPublicActionEvent == null || IsFailed(GetLastResult()))
234 SysLogException(NID_UI_CTRL, E_INVALID_STATE, "[E_INVALID_STATE] System error occurred.");
235 SetLastResult(E_INVALID_STATE);
236 delete __pPublicActionEvent;
241 SetLastResult(E_SUCCESS);
243 __pPublicActionEvent->AddListener(listener);
245 GetCore().AddActionEventListener(*this);
249 _TabBarImpl::RemoveActionEventListener(Tizen::Ui::IActionEventListener& listener)
251 SysTryReturnVoidResult(NID_UI_CTRL, __pPublicActionEvent, E_INVALID_STATE, "[E_INVALID_STATE] This instance isn't constructed.")
253 // Todo : check fail case of RemoveListener
254 __pPublicActionEvent->RemoveListener(listener);
256 GetCore().RemoveActionEventListener(*this);
260 _TabBarImpl::GetPublic(void)
262 return static_cast <TabBar&>(_ControlImpl::GetPublic());
266 _TabBarImpl::GetPublic(void) const
268 return static_cast <const TabBar&>(_ControlImpl::GetPublic());
272 _TabBarImpl::GetPublicClassName(void) const
274 return "Tizen::Ui::Controls::TabBar";
278 _TabBarImpl::GetCore(void) const
280 return static_cast <const _TabBar&>(_ControlImpl::GetCore());
284 _TabBarImpl::GetCore(void)
286 return static_cast <_TabBar&>(_ControlImpl::GetCore());
290 _TabBarImpl::OnActionPerformed(const Tizen::Ui::_Control& source, int actionId)
292 if (__pPublicActionEvent != null)
294 __pPublicActionEvent->Fire(*_PublicActionEvent::CreateActionEventArgN(actionId));
299 : public _UiBuilderControlMaker
302 _TabBarMaker(_UiBuilder* uibuilder)
303 : _UiBuilderControlMaker(uibuilder){};
304 virtual ~_TabBarMaker(){};
306 static _UiBuilderControlMaker*
307 GetInstance(_UiBuilder* uibuilder)
309 _TabBarMaker* pTabBarMaker = new (std::nothrow) _TabBarMaker(uibuilder);
310 SysTryReturn(NID_UI_CTRL, pTabBarMaker != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
314 virtual Tizen::Ui::Control*
315 Make(_UiBuilderControl* pControl)
317 result r = E_SUCCESS;
318 _UiBuilderControlLayout* pControlProperty = null;
319 TabBar* pTabBar = null;
320 Tizen::Graphics::FloatRectangle rect;
321 Tizen::Base::String elementString;
325 GetProperty(pControl, &pControlProperty);
326 if (pControlProperty == null)
331 rect = pControlProperty->GetRectF();
334 pTabBar = new (std::nothrow) TabBar();
335 SysTryReturn(NID_UI_CTRL, pTabBar != null, null, E_OUT_OF_MEMORY, "[E_OUT_OF_MEMORY] Memory allocation failed.");
337 r = pTabBar->Construct(rect.x, rect.y, rect.width);
344 rect = pTabBar->GetBoundsF();
346 if (pControl->GetElement(L"BGColorOpacity", elementString) == true)
348 Base::Integer::Parse(elementString, opacity);
351 if (pControl->GetElement(L"BGColor", elementString) == true)
353 ConvertStringToColor32(elementString, opacity, color);
354 pTabBar->SetColor(color);
357 if (pControl->GetElement(L"backgroundColorOpacity", elementString) == true)
359 Base::Integer::Parse(elementString, opacity);
362 if (pControl->GetElement(L"backgroundColor", elementString) == true)
364 ConvertStringToColor32(elementString, opacity, color);
365 pTabBar->SetColor(color);
368 if (pControl->GetElement(L"normalItemTextColor", elementString) == true)
370 ConvertStringToColor(elementString, color);
371 pTabBar->SetItemTextColor(TAB_BAR_ITEM_STATUS_NORMAL, color);
374 if (pControl->GetElement(L"selectedItemTextColor", elementString) == true)
376 ConvertStringToColor(elementString, color);
377 pTabBar->SetItemTextColor(TAB_BAR_ITEM_STATUS_SELECTED, color);
380 if (pControl->GetElement(L"selectedItemColor", elementString) == true)
382 ConvertStringToColor(elementString, color);
383 pTabBar->SetSelectedItemColor(color);
386 int itemCnt = pControl->GetItemCount();
387 for (int i = 0; i < itemCnt; i++)
389 TabBarItem tabBarItem;
391 if (pControl->GetItemElement(i, "actionId", elementString))
393 Base::Integer::Parse(elementString, actionId);
396 if (pControl->GetItemElement(i, "text", elementString))
398 tabBarItem.Construct(elementString, actionId);
400 pTabBar->AddItem(tabBarItem);
402 if (pControl->GetElement(L"accessibilityHint", elementString))
404 AccessibilityContainer* pContainer = pTabBar->GetAccessibilityContainer();
407 AccessibilityElement* pElement = pContainer->GetElement(L"Category" + Base::Integer::ToString(i+1));
410 pElement->SetHint(elementString);
416 rect = (pControl->GetAttribute(UIBUILDER_ATTRIBUTE_PORTRAIT))->GetRectF();
417 (pControl->GetAttribute(UIBUILDER_ATTRIBUTE_PORTRAIT))->SetRect(rect.x, rect.y, rect.width, rect.height);
419 rect = (pControl->GetAttribute(UIBUILDER_ATTRIBUTE_LANDSCAPE))->GetRectF();
420 (pControl->GetAttribute(UIBUILDER_ATTRIBUTE_LANDSCAPE))->SetRect(rect.x, rect.y, rect.width, rect.height);
422 /*r = AddControl(pControl, pTabBar);
433 _TabBarRegister::_TabBarRegister()
435 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
436 pUiBuilderControlTableManager->RegisterControl(L"TabBar", _TabBarMaker::GetInstance);
438 _TabBarRegister::~_TabBarRegister()
440 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
441 pUiBuilderControlTableManager->UnregisterControl(L"TabBar");
443 static _TabBarRegister TabBarRegisterToUiBuilder;
444 }}} // Tizen::Ui::Controls