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.
18 * @file FUiCtrl_FooterImpl.cpp
19 * @brief This is the implementation file for the _FooterImpl class.
23 #include <FGrp_BitmapImpl.h>
24 #include "FUi_AccessibilityContainer.h"
25 #include "FUi_AccessibilityElement.h"
26 #include "FUi_Control.h"
27 #include "FUi_ResourceManager.h"
28 #include "FUi_UiBuilder.h"
29 #include "FUiCtrl_ButtonItemImpl.h"
30 #include "FUiCtrl_FooterImpl.h"
31 #include "FUiCtrl_FooterItemImpl.h"
32 #include "FUiCtrl_IActionEventListener.h"
33 #include "FUiCtrl_PublicActionEvent.h"
35 using namespace Tizen::Base;
36 using namespace Tizen::Graphics;
38 namespace Tizen { namespace Ui { namespace Controls
42 _FooterImpl::CreateFooterImplN(Footer* pControl)
47 _Toolbar* pCore = null;
49 pCore = _Toolbar::CreateToolbarN(false);
51 SysTryReturn(NID_UI_CTRL, pCore, null, r, "[%s] Propagating.", GetErrorMessage(r));
53 r = pCore->InitializeLongPressGesture();
54 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
56 r = pCore->InitializeFlickGesture();
57 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
59 _FooterImpl* pFooterImpl = new (std::nothrow) _FooterImpl(pControl, pCore);
61 r = CheckConstruction(pCore, pFooterImpl);
62 SysTryReturn(NID_UI_CTRL, r == E_SUCCESS, null, r, "[%s] Propagating.", GetErrorMessage(r));
67 _FooterImpl::_FooterImpl(Footer* pPublic, _Toolbar* pCore)
68 : _ControlImpl(pPublic, pCore)
69 //, __calledBySetItemSelected(false)
70 , __style(FOOTER_STYLE_BUTTON_TEXT)
71 , __pPublicActionEvent(null)
73 result r = GetLastResult(); // Check if _ControlImpl succeeded.
74 SysTryReturnVoidResult(NID_UI_CTRL, r == E_SUCCESS, r, "[%s] Propagating.", GetErrorMessage(r));
76 pCore->SetStyle(TOOLBAR_TEXT);
78 Color tempColor = Color(0);
80 GET_COLOR_CONFIG(FOOTER::BG_NORMAL, tempColor);
81 pCore->SetColor(tempColor);
84 _FooterImpl::~_FooterImpl(void)
86 if (__pPublicActionEvent)
88 delete __pPublicActionEvent;
89 __pPublicActionEvent = null;
94 _FooterImpl::GetFooter(void) const
96 return &const_cast <Footer&>(GetPublic());
100 _FooterImpl::GetPublicClassName(void) const
102 return "Tizen::Ui::Controls::Footer";
106 _FooterImpl::GetPublic(void) const
108 return static_cast<const Footer&>(_ControlImpl::GetPublic());
112 _FooterImpl::GetPublic(void)
114 return static_cast<Footer&>(_ControlImpl::GetPublic());
118 _FooterImpl::GetCore(void) const
120 return static_cast<const _Toolbar&>(_ControlImpl::GetCore());
124 _FooterImpl::GetCore(void)
126 return static_cast<_Toolbar&>(_ControlImpl::GetCore());
130 _FooterImpl::GetInstance(const Footer& footer)
132 return static_cast<const _FooterImpl*> (footer._pControlImpl);
136 _FooterImpl::GetInstance(Footer& footer)
138 return static_cast<_FooterImpl*> (footer._pControlImpl);
142 _FooterImpl::AddItem(const FooterItem& item)
144 SysTryReturnResult(NID_UI_CTRL, (__style >= FOOTER_STYLE_BUTTON_TEXT && __style <= FOOTER_MAX_STATE_COUNT),
145 E_INVALID_OPERATION, "[E_INVALID_OPERATION] Current Footer style doesn't support this operation.");
147 SysTryReturnResult(NID_UI_CTRL, (item.GetActionId() <= FOOTER_ITEM_ACTION_ID_MAX && item.GetActionId() >= FOOTER_ACTION_ID_MIN),
148 E_INVALID_ARG, "[E_INVALID_ARG] The item isn't constructed.");
150 result r = CheckItemValidate(item);
157 _Button* pButton = ConvertFooterItem(item);
159 if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT
160 || __style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE)
162 pButton->SetButtonStyle(_BUTTON_STYLE_SEGMENT);
165 return GetCore().AddItem(pButton);
169 _FooterImpl::GetButtonColor(ButtonItemStatus status) const
171 _ButtonStatus tempStatus = ConvertButtonStatus(status);
173 return GetCore().GetButtonColor(tempStatus);
177 _FooterImpl::GetButtonTextColor(ButtonItemStatus status) const
179 _ButtonStatus tempStatus = ConvertButtonStatus(status);
181 return GetCore().GetButtonTextColor(tempStatus);
185 _FooterImpl::GetButtonStatus(ButtonPosition position) const
187 SysTryReturn(NID_UI_CTRL, (IsButtonSet(position) == true), BUTTON_ITEM_STATUS_NORMAL, E_INVALID_OPERATION,
188 "[E_INVALID_OPERATION] No button item is set at the specified position.");
190 _ButtonStatus buttonStatus;
192 if (position == BUTTON_POSITION_LEFT)
194 buttonStatus = GetCore().GetButtonStatus(LEFT_BUTTON);
196 else if (position == BUTTON_POSITION_RIGHT)
198 buttonStatus = GetCore().GetButtonStatus(RIGHT_BUTTON);
202 return BUTTON_ITEM_STATUS_NORMAL;
205 return ConvertButtonItemStatus(buttonStatus);
209 _FooterImpl::GetBackButtonStatus(void) const
211 SysTryReturn(NID_UI_CTRL, 0, BUTTON_ITEM_STATUS_NORMAL, E_INVALID_OPERATION,
212 "[E_INVALID_OPERATION] No button item is set at the specified position.");
216 _FooterImpl::GetItemColor(FooterItemStatus status) const
218 _ButtonStatus tempStatus = ConvertButtonStatus(status);
220 return GetCore().GetItemColor(tempStatus);
224 _FooterImpl::GetItemCount(void) const
226 return GetCore().GetItemCount();
230 _FooterImpl::GetItemStatus(int itemIndex, FooterItemStatus& status) const
232 int count = GetItemCount();
234 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < count), E_OUT_OF_RANGE,
235 "[E_OUT_OF_RANGE] The itemIndex is out of range.");
237 _Button* pButton = GetCore().GetItem(itemIndex);
239 SysTryReturnResult(NID_UI_CTRL, pButton, E_SYSTEM, "[E_SYSTEM] Unable to get the item status.");
241 status = ConvertFooterItemStatus(pButton->GetButtonStatus());
247 _FooterImpl::GetItemTextColor(FooterItemStatus status) const
249 _ButtonStatus tempStatus = ConvertButtonStatus(status);
251 return GetCore().GetItemTextColor(tempStatus);
255 _FooterImpl::GetStyle(void) const
261 _FooterImpl::GetSelectedItemIndex(void) const
263 SysTryReturn(NID_UI_CTRL, (__style != FOOTER_STYLE_BUTTON_TEXT && __style != FOOTER_STYLE_BUTTON_ICON && __style != FOOTER_STYLE_BUTTON_ICON_TEXT), -1,
264 E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] Unable to get the selected item itemIndex because the current style does not support it.");
266 return GetCore().GetSelectedItemIndex();
270 _FooterImpl::GetColor(void) const
272 return GetCore().GetColor();
276 _FooterImpl::InsertItemAt(int itemIndex, const FooterItem& item)
278 result r = CheckItemValidate(item);
285 int count = GetItemCount();
287 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex <= count), E_OUT_OF_RANGE,
288 "[E_OUT_OF_RANGE] The itemIndex is out of range.");
290 _Button* pButton = ConvertFooterItem(item);
292 if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT
293 || __style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE)
295 pButton->SetButtonStyle(_BUTTON_STYLE_SEGMENT);
298 return GetCore().InsertItemAt(itemIndex, pButton);
302 _FooterImpl::IsButtonSet(ButtonPosition position) const
304 if (position == BUTTON_POSITION_LEFT)
306 return GetCore().IsButtonSet(LEFT_BUTTON);
308 else if (position == BUTTON_POSITION_RIGHT)
310 return GetCore().IsButtonSet(RIGHT_BUTTON);
319 _FooterImpl::IsBackButtonSet(void) const
325 _FooterImpl::IsTabEditModeEnabled(void) const
327 return GetCore().IsTabEditModeEnabled();
331 _FooterImpl::RemoveAllButtons(void)
333 return GetCore().RemoveAllButtons();
337 _FooterImpl::RemoveButtonAt(ButtonPosition position)
339 if (position == BUTTON_POSITION_LEFT)
341 return GetCore().RemoveButtonAt(LEFT_BUTTON);
343 else if (position == BUTTON_POSITION_RIGHT)
345 return GetCore().RemoveButtonAt(RIGHT_BUTTON);
352 _FooterImpl::RemoveBackButton(void)
358 _FooterImpl::RemoveAllItems(void)
360 return GetCore().RemoveAllItems();
364 _FooterImpl::RemoveItemAt(int itemIndex)
366 int count = GetItemCount();
368 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < count), E_OUT_OF_RANGE,
369 "[E_OUT_OF_RANGE] The itemIndex is out of range.");
371 return GetCore().RemoveItemAt(itemIndex);
375 _FooterImpl::SetBackgroundBitmap(const Bitmap* pBitmap)
377 return GetCore().SetBackgroundBitmap(*pBitmap);
381 _FooterImpl::SetButton(ButtonPosition position, const ButtonItem& button)
383 SysTryReturnResult(NID_UI_CTRL, !(__style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE),
384 E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] Unable to set the button item because the current style does not support it.");
386 SysTryReturnResult(NID_UI_CTRL, (button.GetActionId() >= FOOTER_ACTION_ID_MIN && button.GetActionId() <= FOOTER_ACTION_ID_MAX),
387 E_INVALID_ARG, "[E_INVALID_ARG] The actionId is invalid.");
389 int count = GetItemCount();
391 if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT
392 || __style == FOOTER_STYLE_BUTTON_TEXT || __style == FOOTER_STYLE_BUTTON_ICON || __style == FOOTER_STYLE_BUTTON_ICON_TEXT)
394 SysTryReturnResult(NID_UI_CTRL, (count <= FOOTER_MAX_ITEM_COUNT_WITH_BUTTON), E_SYSTEM,
395 "[E_SYSTEM] If the item count is larger then 3, no button can be set.");
398 SysTryReturnResult(NID_UI_CTRL, (position == BUTTON_POSITION_LEFT || position == BUTTON_POSITION_RIGHT), E_INVALID_ARG,
399 "[E_INVALID_ARG] The position is invalid.");
401 _Button* pButton = ConvertButtonItem(button);
403 if (position == BUTTON_POSITION_LEFT)
405 return GetCore().SetButton(LEFT_BUTTON, pButton);
407 else if (position == BUTTON_POSITION_RIGHT)
409 return GetCore().SetButton(RIGHT_BUTTON, pButton);
416 _FooterImpl::SetButtonColor(ButtonItemStatus status, const Color& color)
418 _ButtonStatus tempStatus = ConvertButtonStatus(status);
420 return GetCore().SetButtonColor(tempStatus, color);
424 _FooterImpl::SetButtonTextColor(ButtonItemStatus status, const Color& color)
426 _ButtonStatus tempStatus = ConvertButtonStatus(status);
428 return GetCore().SetButtonTextColor(tempStatus, color);
432 _FooterImpl::SetBackButton(void)
434 return E_UNSUPPORTED_OPERATION;
438 _FooterImpl::SetItemAt(int itemIndex, const FooterItem& item)
440 SysTryReturnResult(NID_UI_CTRL, (item.GetActionId() != -1), E_INVALID_ARG, "[E_INVALID_ARG] The FooterItem isn't constructed.");
442 if (item.GetActionId() < FOOTER_ACTION_ID_MIN || item.GetActionId() > FOOTER_ACTION_ID_MAX)
444 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] The actionId is invalid.");
445 return E_INVALID_ARG;
448 int count = GetItemCount();
450 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < count), E_OUT_OF_RANGE,
451 "[E_OUT_OF_RANGE] The itemIndex is out of range.");
453 _Button* pButton = ConvertFooterItem(item);
455 if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT
456 || __style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE)
458 pButton->SetButtonStyle(_BUTTON_STYLE_SEGMENT);
461 return GetCore().SetItemAt(itemIndex, pButton);
465 _FooterImpl::SetItemColor(FooterItemStatus status, const Color& color)
467 _ButtonStatus tempStatus = ConvertButtonStatus(status);
469 return GetCore().SetItemColor(tempStatus, color);
473 _FooterImpl::SetItemEnabled(int itemIndex, bool enable)
475 int count = GetItemCount();
477 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < count), E_OUT_OF_RANGE,
478 "[E_OUT_OF_RANGE] The itemIndex is out of range.");
480 if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT
481 || __style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE)
483 // Selected item cannot be disabled.
484 int selectedItemIndex = GetSelectedItemIndex();
486 if ((selectedItemIndex == itemIndex && enable == false) || (selectedItemIndex == -1 && itemIndex == 0 && enable == false))
488 SysLogException(NID_UI_CTRL, E_INVALID_OPERATION, "[E_INVALID_OPERATION] The Selected item cannot be disabled.");
489 return E_INVALID_OPERATION;
493 return GetCore().SetItemEnabled(itemIndex, enable);
497 _FooterImpl::SetItemBadgeIcon(int itemIndex, const Bitmap* pBadgeIcon)
499 int count = GetItemCount();
501 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < count), E_OUT_OF_RANGE,
502 "[E_OUT_OF_RANGE] The itemIndex is out of range.");
504 return GetCore().SetItemBadgeIcon(itemIndex, pBadgeIcon);
508 _FooterImpl::SetItemTextColor(FooterItemStatus status, const Color& color)
510 _ButtonStatus tempStatus = ConvertButtonStatus(status);
512 return GetCore().SetItemTextColor(tempStatus, color);
516 _FooterImpl::SetButtonEnabled(ButtonPosition position, bool enable)
518 bool isButtonSet = IsButtonSet(position);
520 SysTryReturnResult(NID_UI_CTRL, isButtonSet, E_INVALID_OPERATION,
521 "[E_INVALID_OPERATION] No button item is set at the specified position.");
523 if (position == BUTTON_POSITION_LEFT)
525 return GetCore().SetButtonEnabled(LEFT_BUTTON, enable);
527 else if (position == BUTTON_POSITION_RIGHT)
529 return GetCore().SetButtonEnabled(RIGHT_BUTTON, enable);
532 return E_INVALID_STATE;
536 _FooterImpl::SetBackButtonEnabled(bool enable)
538 return E_INVALID_OPERATION;
542 _FooterImpl::SetItemSelected(int itemIndex)
544 int count = GetItemCount();
546 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < count), E_OUT_OF_RANGE,
547 "[E_OUT_OF_RANGE] The itemIndex is out of range.");
549 SysTryReturnResult(NID_UI_CTRL, (__style != FOOTER_STYLE_BUTTON_ICON && __style != FOOTER_STYLE_BUTTON_TEXT && __style != FOOTER_STYLE_BUTTON_ICON_TEXT),
550 E_UNSUPPORTED_OPERATION, "[E_UNSUPPORTED_OPERATION] Unable to get the selected item itemIndex because the current style does not support it.");
552 // Disabled item can not selected.
553 FooterItemStatus status;
554 result r = GetItemStatus(itemIndex, status);
556 SysTryReturnResult(NID_UI_CTRL, (r == E_SUCCESS), r, "[E_INVALID_STATE] Failed to get item status.");
558 SysTryReturnResult(NID_UI_CTRL, (status != FOOTER_ITEM_STATUS_DISABLED), E_INVALID_OPERATION,
559 "[E_INVALID_OPERATION] The disabled item can not be selected.");
561 //__calledBySetItemSelected = true;
563 return GetCore().SetItemSelected(itemIndex);
567 _FooterImpl::SetItemNumberedBadgeIcon(int itemIndex, int number)
569 int count = GetItemCount();
571 SysTryReturnResult(NID_UI_CTRL, (itemIndex >= 0 && itemIndex < count), E_OUT_OF_RANGE,
572 "[E_OUT_OF_RANGE] The itemIndex is out of range.");
574 SysTryReturnResult(NID_UI_CTRL, (number >= 0 && number <= FOOTER_NUMBERD_BADGE_ICON_NUMBER_MAX), E_INVALID_ARG,
575 "[E_INVALID_ARG] The number is invalid.");
577 return GetCore().SetItemNumberedBadgeIcon(itemIndex, number);
581 _FooterImpl::SetColor(const Color& color)
583 return GetCore().SetColor(color);
587 _FooterImpl::SetStyle(FooterStyle style)
594 return GetCore().SetStyle(ConvertFooterStyle(__style));
598 _FooterImpl::SetTabEditModeEnabled(bool enable)
600 SysTryReturnResult(NID_UI_CTRL, (__style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE), E_UNSUPPORTED_OPERATION,
601 "[E_UNSUPPORTED_OPERATION] This operation is only for FOOTER_STYLE_TAB or FOOTER_STYLE_TAB_LARGE");
603 return GetCore().SetTabEditModeEnabled(enable);
607 _FooterImpl::SetTransparent(bool transparent)
609 return GetCore().SetTransparent(transparent);
613 _FooterImpl::GetButtonBounds(ButtonPosition position) const
615 bool isButtonSet = IsButtonSet(position);
617 SysTryReturn(NID_UI_CTRL, isButtonSet, Rectangle(-1, -1, -1, -1),
618 E_INVALID_OPERATION, "[E_INVALID_OPERATION] No button item is set at the specified position.");
622 if (position == BUTTON_POSITION_LEFT)
624 rect = GetCore().GetButtonBounds(LEFT_BUTTON);
626 else if (position == BUTTON_POSITION_RIGHT)
628 rect = GetCore().GetButtonBounds(RIGHT_BUTTON);
635 _FooterImpl::GetButtonBoundsF(ButtonPosition position) const
637 bool isButtonSet = IsButtonSet(position);
639 SysTryReturn(NID_UI_CTRL, isButtonSet, FloatRectangle(-1.0f, -1.0f, -1.0f, -1.0f),
640 E_INVALID_OPERATION, "[E_INVALID_OPERATION] No button item is set at the specified position.");
644 if (position == BUTTON_POSITION_LEFT)
646 rect = GetCore().GetButtonBoundsF(LEFT_BUTTON);
648 else if (position == BUTTON_POSITION_RIGHT)
650 rect = GetCore().GetButtonBoundsF(RIGHT_BUTTON);
657 _FooterImpl::AddActionEventListener(IActionEventListener& listener)
659 if (__pPublicActionEvent == null)
661 __pPublicActionEvent = _PublicActionEvent::CreateInstanceN(GetPublic());
663 if (IsFailed(GetLastResult()))
665 SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] System error occurred.");
666 delete __pPublicActionEvent;
671 __pPublicActionEvent->AddListener(listener);
673 GetCore().AddActionEventListener(*this);
679 _FooterImpl::RemoveActionEventListener(IActionEventListener& listener)
683 SysTryReturnVoidResult(NID_UI_CTRL, __pPublicActionEvent, E_INVALID_STATE, "[E_INVALID_STATE] This instance isn't constructed.");
685 // Todo : check fail case of RemoveListener
686 __pPublicActionEvent->RemoveListener(listener);
688 GetCore().RemoveActionEventListener(*this);
694 _FooterImpl::OnActionPerformed(const _Control& source, int actionId)
696 if (GetCore().IsInitialDraw() == true && GetCore().GetSelectedItemIndex() == 0)
701 if (__pPublicActionEvent != null)
703 __pPublicActionEvent->Fire(*_PublicActionEvent::CreateActionEventArgN(actionId));
710 _FooterImpl::CheckItemValidate(const FooterItem& item)
712 result r = E_SUCCESS;
714 SysTryReturnResult(NID_UI_CTRL, (item.GetActionId() != -1), E_INVALID_ARG,
715 "[E_INVALID_ARG] The FooterItem isn't constructed.");
717 int count = GetItemCount();
719 if (__style == FOOTER_STYLE_BUTTON_TEXT || __style == FOOTER_STYLE_BUTTON_ICON || __style == FOOTER_STYLE_BUTTON_ICON_TEXT)
721 if (IsButtonSet(BUTTON_POSITION_LEFT))
723 SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
724 "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
728 if (IsButtonSet(BUTTON_POSITION_RIGHT))
730 SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
731 "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
735 SysTryReturnResult(NID_UI_CTRL, (count < 5), E_MAX_EXCEEDED,
736 "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
740 else if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT)
742 if (IsButtonSet(BUTTON_POSITION_LEFT))
744 SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
745 "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
749 if (IsButtonSet(BUTTON_POSITION_RIGHT))
751 SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
752 "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
756 SysTryReturnResult(NID_UI_CTRL, (count < 4), E_MAX_EXCEEDED,
757 "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
761 else if (__style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE)
763 SysTryReturnResult(NID_UI_CTRL, (count < 15), E_MAX_EXCEEDED,
764 "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
767 if (item.GetActionId() < FOOTER_ACTION_ID_MIN || item.GetActionId() > FOOTER_ACTION_ID_MAX)
769 SysLogException(NID_UI_CTRL, E_INVALID_ARG, "[E_INVALID_ARG] The actionId is invalid.");
770 return E_INVALID_ARG;
777 _FooterImpl::ConvertButtonItem(const ButtonItem& buttonItem)
779 _Button* pButton = _Button::CreateButtonN();
781 float buttonItemWidth = 0.0f;
782 float buttonItemHeight = 0.0f;
784 GET_SHAPE_CONFIG(FOOTER::BUTTON_ITEM_WIDTH, GetCore().GetOrientation(), buttonItemWidth);
785 GET_SHAPE_CONFIG(FOOTER::BUTTON_ITEM_HEIGHT, GetCore().GetOrientation(), buttonItemHeight);
787 pButton->SetMargin(0.0f, 0.0f, 0.0f, 0.0f);
788 pButton->SetBounds(FloatRectangle(0.0f, 0.0f, buttonItemWidth, buttonItemHeight));
790 pButton->SetActionId(buttonItem.GetActionId());
792 pButton->SetText(buttonItem.GetText());
794 pButton->SetTextMaxLine(2);
796 float fontSize = 0.0f;
797 float multilineFontSize = 0.0f;
798 result r = E_SUCCESS;
800 r = GET_SHAPE_CONFIG(FOOTER::BUTTON_ITEM_FONT_SIZE, GetCore().GetOrientation(), fontSize);
803 pButton->SetTextSize(fontSize, FONT_STYLE_BOLD);
806 r = GET_SHAPE_CONFIG(FOOTER::BUTTON_ITEM_MULTILINE_FONT_SIZE, GetCore().GetOrientation(), multilineFontSize);
809 pButton->SetMultilineTextSize(multilineFontSize);
812 float iconSize = 0.0f;
814 GET_SHAPE_CONFIG(FOOTER::BUTTON_ITEM_ICON_SIZE, GetCore().GetOrientation(), iconSize); //63
816 Bitmap* pIconBitmap = null;
818 pIconBitmap = const_cast<Bitmap*>(buttonItem.__pImpl->GetIcon(BUTTON_ITEM_STATUS_NORMAL));
822 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
824 pButton->SetBitmap(_BUTTON_STATUS_NORMAL, FloatPoint(0.0f, 0.0f), *pIconBitmap);
825 pButton->SetBitmap(_BUTTON_STATUS_DISABLED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
826 pButton->SetBitmap(_BUTTON_STATUS_PRESSED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
827 pButton->SetBitmap(_BUTTON_STATUS_HIGHLIGHTED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
830 pIconBitmap = const_cast<Bitmap*>(buttonItem.__pImpl->GetIcon(BUTTON_ITEM_STATUS_PRESSED));
834 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
836 pButton->SetBitmap(_BUTTON_STATUS_PRESSED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
839 pIconBitmap = const_cast<Bitmap*>(buttonItem.__pImpl->GetIcon(BUTTON_ITEM_STATUS_HIGHLIGHTED));
843 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
845 pButton->SetBitmap(_BUTTON_STATUS_HIGHLIGHTED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
848 pIconBitmap = const_cast<Bitmap*>(buttonItem.__pImpl->GetIcon(BUTTON_ITEM_STATUS_DISABLED));
852 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
854 pButton->SetBitmap(_BUTTON_STATUS_DISABLED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
857 Bitmap* pNormalBackgroundBitmap = null;
858 Bitmap* pDisabledBackgroundBitmap = null;
859 Bitmap* pPressedBackgroundBitmap = null;
860 Bitmap* pHighlightedBackgroundBitmap = null;
862 Bitmap* pColorReplacedBitmap = null;
864 GET_BITMAP_CONFIG_N(FOOTER::BUTTON_BG_NORMAL, BITMAP_PIXEL_FORMAT_ARGB8888, pNormalBackgroundBitmap);
865 GET_BITMAP_CONFIG_N(FOOTER::BUTTON_BG_DISABLED, BITMAP_PIXEL_FORMAT_ARGB8888, pDisabledBackgroundBitmap);
866 GET_BITMAP_CONFIG_N(FOOTER::BUTTON_BG_PRESSED, BITMAP_PIXEL_FORMAT_ARGB8888, pPressedBackgroundBitmap);
867 GET_BITMAP_CONFIG_N(FOOTER::BUTTON_BG_HIGHLIGHTED, BITMAP_PIXEL_FORMAT_ARGB8888, pHighlightedBackgroundBitmap);
869 if (pNormalBackgroundBitmap)
871 pColorReplacedBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pNormalBackgroundBitmap, Color::GetColor(COLOR_ID_MAGENTA),
872 GetCore().GetButtonColor(_BUTTON_STATUS_NORMAL));
874 if (GetCore().GetButtonColor(_BUTTON_STATUS_NORMAL).GetAlpha() != 0xFF)
876 pColorReplacedBitmap->SetAlphaConstant(GetCore().GetButtonColor(_BUTTON_STATUS_NORMAL).GetAlpha());
879 pButton->SetBackgroundBitmap(_BUTTON_STATUS_NORMAL, *pColorReplacedBitmap);
881 delete pColorReplacedBitmap;
882 delete pNormalBackgroundBitmap;
885 if (pDisabledBackgroundBitmap)
887 pColorReplacedBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pDisabledBackgroundBitmap, Color::GetColor(COLOR_ID_MAGENTA),
888 GetCore().GetButtonColor(_BUTTON_STATUS_DISABLED));
890 if (GetCore().GetButtonColor(_BUTTON_STATUS_DISABLED).GetAlpha() != 0xFF)
892 pColorReplacedBitmap->SetAlphaConstant(GetCore().GetButtonColor(_BUTTON_STATUS_DISABLED).GetAlpha());
895 pButton->SetBackgroundBitmap(_BUTTON_STATUS_DISABLED, *pColorReplacedBitmap);
897 delete pColorReplacedBitmap;
898 delete pDisabledBackgroundBitmap;
901 if (pPressedBackgroundBitmap)
903 pColorReplacedBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pPressedBackgroundBitmap, Color::GetColor(COLOR_ID_MAGENTA),
904 GetCore().GetButtonColor(_BUTTON_STATUS_PRESSED));
906 if (GetCore().GetButtonColor(_BUTTON_STATUS_PRESSED).GetAlpha() != 0xFF)
908 pColorReplacedBitmap->SetAlphaConstant(GetCore().GetButtonColor(_BUTTON_STATUS_PRESSED).GetAlpha());
911 pButton->SetBackgroundBitmap(_BUTTON_STATUS_PRESSED, *pColorReplacedBitmap);
913 delete pColorReplacedBitmap;
914 delete pPressedBackgroundBitmap;
917 if (pHighlightedBackgroundBitmap)
919 pColorReplacedBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pHighlightedBackgroundBitmap, Color::GetColor(COLOR_ID_MAGENTA),
920 GetCore().GetButtonColor(_BUTTON_STATUS_HIGHLIGHTED));
922 if (GetCore().GetButtonColor(_BUTTON_STATUS_HIGHLIGHTED).GetAlpha() != 0xFF)
924 pColorReplacedBitmap->SetAlphaConstant(GetCore().GetButtonColor(_BUTTON_STATUS_HIGHLIGHTED).GetAlpha());
927 pButton->SetBackgroundBitmap(_BUTTON_STATUS_HIGHLIGHTED, *pColorReplacedBitmap);
929 delete pColorReplacedBitmap;
930 delete pHighlightedBackgroundBitmap;
933 if (buttonItem.__pImpl->GetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL) != null)
935 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_NORMAL, *buttonItem.__pImpl->GetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL));
937 if (buttonItem.__pImpl->GetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED) != null)
939 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_PRESSED, *buttonItem.__pImpl->GetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED));
941 if (buttonItem.__pImpl->GetBackgroundBitmap(BUTTON_ITEM_STATUS_HIGHLIGHTED) != null)
943 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_HIGHLIGHTED, *buttonItem.__pImpl->GetBackgroundBitmap(BUTTON_ITEM_STATUS_HIGHLIGHTED));
945 if (buttonItem.__pImpl->GetBackgroundBitmap(BUTTON_ITEM_STATUS_DISABLED) != null)
947 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_DISABLED, *buttonItem.__pImpl->GetBackgroundBitmap(BUTTON_ITEM_STATUS_DISABLED));
950 if (buttonItem.__pImpl->__accessibilityHint.GetLength() > 0)
952 _AccessibilityContainer* pContainer = pButton->GetAccessibilityContainer();
955 _AccessibilityElement* pElement = pContainer->GetChildElement(L"ButtonText");
958 pElement->SetHint(buttonItem.__pImpl->__accessibilityHint);
967 _FooterImpl::ConvertFooterItem(const FooterItem& footerItem)
969 _Button* pButton = _Button::CreateButtonN();
971 float minItemLength = 0.0f;
973 GET_SHAPE_CONFIG(FOOTER::ITEM_MINIMUM_WIDTH, GetCore().GetOrientation(), minItemLength);
975 pButton->SetBounds(FloatRectangle(0.0f, 0.0f, minItemLength, minItemLength));
977 pButton->SetActionId(footerItem.GetActionId());
979 if (__style != FOOTER_STYLE_BUTTON_ICON && __style != FOOTER_STYLE_SEGMENTED_ICON)
981 pButton->SetText(footerItem.GetText());
984 pButton->SetTextMaxLine(2);
986 float fontSize = 0.0f;
987 float iconSize = 0.0f;
989 result r = E_SUCCESS;
991 bool customTheme = false;
993 if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON
994 || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT || __style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE)
996 r = GET_SHAPE_CONFIG(FOOTER::SEGMENTED_ITEM_FONT_SIZE, GetCore().GetOrientation(), fontSize);
998 if (footerItem.GetText() != L"" && __style != FOOTER_STYLE_TAB_LARGE)
1000 GET_SHAPE_CONFIG(HEADER::TAB_ITEM_ICON_SIZE_WITH_TEXT, GetCore().GetOrientation(), iconSize); //45
1004 GET_SHAPE_CONFIG(HEADER::TAB_ITEM_ICON_SIZE, GetCore().GetOrientation(), iconSize); // 63
1007 Bitmap* pSelectedBitmap = null;
1008 Bitmap* pColorReplacedBitmap = null;
1009 Color selectedBitmapColor;
1011 GET_BITMAP_CONFIG_N(FOOTER::TAB_ITEM_SELECTED, BITMAP_PIXEL_FORMAT_ARGB8888, pSelectedBitmap);
1012 GET_COLOR_CONFIG(FOOTER::SELECTED_BAR_BG_NORMAL, selectedBitmapColor);
1014 pColorReplacedBitmap = _BitmapImpl::GetColorReplacedBitmapN(*pSelectedBitmap, Color::GetColor(COLOR_ID_MAGENTA), selectedBitmapColor);
1016 if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT)
1018 if (GetCore().IsTransparent() == true)
1020 customTheme = IS_CUSTOM_BITMAP(FOOTER::SEGMENTED_ITEM_TRANSLUCENT_BG_SELECTED);
1024 customTheme = IS_CUSTOM_BITMAP(FOOTER::SEGMENTED_ITEM_BG_SELECTED);
1027 else if (__style == FOOTER_STYLE_TAB || __style == FOOTER_STYLE_TAB_LARGE)
1029 if (GetCore().IsTransparent() == true)
1031 customTheme = IS_CUSTOM_BITMAP(FOOTER::TAB_ITEM_TRANSLUCENT_BG_SELECTED);
1035 customTheme = IS_CUSTOM_BITMAP(FOOTER::TAB_ITEM_BG_SELECTED);
1039 if (pColorReplacedBitmap && customTheme == false)
1041 pButton->SetUnderlineBitmap(*pColorReplacedBitmap);
1044 delete pColorReplacedBitmap;
1045 delete pSelectedBitmap;
1047 if (__style == FOOTER_STYLE_TAB_LARGE)
1049 pButton->SetTabTextSlide(true);
1052 else if (__style == FOOTER_STYLE_BUTTON_TEXT || __style == FOOTER_STYLE_BUTTON_ICON || __style == FOOTER_STYLE_BUTTON_ICON_TEXT)
1054 r = GET_SHAPE_CONFIG(FOOTER::FOOTER_ITEM_FONT_SIZE, GetCore().GetOrientation(), fontSize);
1056 if (footerItem.GetText() != L"")
1058 GET_SHAPE_CONFIG(FOOTER::FOOTER_ITEM_BUTTON_STYLE_ICON_SIZE_WITH_TEXT, GetCore().GetOrientation(), iconSize); //45
1062 GET_SHAPE_CONFIG(FOOTER::FOOTER_ITEM_BUTTON_STYLE_ICON_SIZE, GetCore().GetOrientation(), iconSize); //63
1068 pButton->SetTextSize(fontSize, FONT_STYLE_BOLD);
1071 Bitmap* pIconBitmap = null;
1073 if (__style != FOOTER_STYLE_BUTTON_TEXT && __style != FOOTER_STYLE_SEGMENTED_TEXT)
1075 pIconBitmap = const_cast<Bitmap*>(footerItem.__pImpl->GetIcon(FOOTER_ITEM_STATUS_NORMAL));
1078 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
1080 pButton->SetBitmap(_BUTTON_STATUS_NORMAL, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1081 pButton->SetBitmap(_BUTTON_STATUS_PRESSED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1082 pButton->SetBitmap(_BUTTON_STATUS_SELECTED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1083 pButton->SetBitmap(_BUTTON_STATUS_HIGHLIGHTED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1084 pButton->SetBitmap(_BUTTON_STATUS_DISABLED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1087 pIconBitmap = const_cast<Bitmap*>(footerItem.__pImpl->GetIcon(FOOTER_ITEM_STATUS_PRESSED));
1091 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
1093 pButton->SetBitmap(_BUTTON_STATUS_PRESSED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1096 pIconBitmap = const_cast<Bitmap*>(footerItem.__pImpl->GetIcon(FOOTER_ITEM_STATUS_SELECTED));
1100 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
1102 pButton->SetBitmap(_BUTTON_STATUS_SELECTED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1105 pIconBitmap = const_cast<Bitmap*>(footerItem.__pImpl->GetIcon(FOOTER_ITEM_STATUS_HIGHLIGHTED));
1109 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
1111 pButton->SetBitmap(_BUTTON_STATUS_HIGHLIGHTED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1114 pIconBitmap = const_cast<Bitmap*>(footerItem.__pImpl->GetIcon(FOOTER_ITEM_STATUS_DISABLED));
1118 pIconBitmap->Scale(FloatDimension(iconSize, iconSize));
1120 pButton->SetBitmap(_BUTTON_STATUS_DISABLED, FloatPoint(0.0f, 0.0f), *pIconBitmap);
1124 if (footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_NORMAL) != null)
1126 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_NORMAL,
1127 *footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_NORMAL));
1129 if (footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_PRESSED) != null)
1131 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_PRESSED,
1132 *footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_PRESSED));
1134 if (footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_SELECTED) != null)
1136 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_SELECTED,
1137 *footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_SELECTED));
1139 if (footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_HIGHLIGHTED) != null)
1141 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_HIGHLIGHTED,
1142 *footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_HIGHLIGHTED));
1144 if (footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_DISABLED) != null)
1146 pButton->SetToolbarItemBackgroundBitmap(_BUTTON_STATUS_DISABLED,
1147 *footerItem.__pImpl->GetBackgroundBitmap(FOOTER_ITEM_STATUS_DISABLED));
1150 if (footerItem.__pImpl->__accessibilityHint.GetLength() > 0)
1152 _AccessibilityContainer* pContainer = pButton->GetAccessibilityContainer();
1155 _AccessibilityElement* pElement = pContainer->GetChildElement(L"ButtonText");
1158 pElement->SetHint(footerItem.__pImpl->__accessibilityHint);
1167 _FooterImpl::OnChangeLayout(_ControlOrientation orientation)
1169 GetCore().OnChangeLayout(orientation);
1175 _FooterImpl::SetButtonBadgeIcon(ButtonPosition position, const Bitmap* pBadgeIcon)
1177 SysTryReturnResult(NID_UI_CTRL, (position == BUTTON_POSITION_LEFT || position == BUTTON_POSITION_RIGHT), E_SYSTEM,
1178 "[E_SYSTEM] The position is invalid.");
1180 bool isButtonSet = IsButtonSet(position);
1182 SysTryReturnResult(NID_UI_CTRL, isButtonSet, E_INVALID_STATE,
1183 "[E_INVALID_STATE] No button item is set at the specified position.");
1185 if (position == BUTTON_POSITION_LEFT)
1187 return GetCore().SetButtonBadgeIcon(LEFT_BUTTON, pBadgeIcon);
1191 return GetCore().SetButtonBadgeIcon(RIGHT_BUTTON, pBadgeIcon);
1196 _FooterImpl::SetButtonNumberedBadgeIcon(ButtonPosition position, int number)
1198 SysTryReturnResult(NID_UI_CTRL, (position == BUTTON_POSITION_LEFT || position == BUTTON_POSITION_RIGHT), E_SYSTEM,
1199 "[E_SYSTEM] The position is invalid.");
1201 bool isButtonSet = IsButtonSet(position);
1203 SysTryReturnResult(NID_UI_CTRL, isButtonSet, E_INVALID_STATE,
1204 "[E_INVALID_STATE] No button item is set at the specified position.");
1206 SysTryReturnResult(NID_UI_CTRL, (0 <= number && number <= FOOTER_NUMBERD_BADGE_ICON_NUMBER_MAX), E_INVALID_ARG,
1207 "[E_INVALID_ARG] The number is invalid.");
1209 if (position == BUTTON_POSITION_LEFT)
1211 return GetCore().SetButtonNumberedBadgeIcon(LEFT_BUTTON, number);
1215 return GetCore().SetButtonNumberedBadgeIcon(RIGHT_BUTTON, number);
1220 _FooterImpl::ConvertButtonItemStatus(_ButtonStatus status) const
1224 case _BUTTON_STATUS_NORMAL:
1225 return BUTTON_ITEM_STATUS_NORMAL;
1228 case _BUTTON_STATUS_DISABLED:
1229 return BUTTON_ITEM_STATUS_DISABLED;
1232 case _BUTTON_STATUS_PRESSED:
1233 return BUTTON_ITEM_STATUS_PRESSED;
1236 case _BUTTON_STATUS_HIGHLIGHTED:
1237 return BUTTON_ITEM_STATUS_HIGHLIGHTED;
1241 return BUTTON_ITEM_STATUS_DISABLED;
1247 _FooterImpl::ConvertFooterItemStatus(_ButtonStatus status) const
1251 case _BUTTON_STATUS_NORMAL:
1252 return FOOTER_ITEM_STATUS_NORMAL;
1255 case _BUTTON_STATUS_DISABLED:
1256 return FOOTER_ITEM_STATUS_DISABLED;
1259 case _BUTTON_STATUS_PRESSED:
1260 return FOOTER_ITEM_STATUS_PRESSED;
1263 case _BUTTON_STATUS_HIGHLIGHTED:
1264 return FOOTER_ITEM_STATUS_HIGHLIGHTED;
1267 case _BUTTON_STATUS_SELECTED:
1268 return FOOTER_ITEM_STATUS_SELECTED;
1272 return FOOTER_ITEM_STATUS_DISABLED;
1278 _FooterImpl::ConvertButtonStatus(ButtonItemStatus status) const
1282 case BUTTON_ITEM_STATUS_NORMAL:
1283 return _BUTTON_STATUS_NORMAL;
1286 case BUTTON_ITEM_STATUS_DISABLED:
1287 return _BUTTON_STATUS_DISABLED;
1290 case BUTTON_ITEM_STATUS_PRESSED:
1291 return _BUTTON_STATUS_PRESSED;
1294 case BUTTON_ITEM_STATUS_HIGHLIGHTED:
1295 return _BUTTON_STATUS_HIGHLIGHTED;
1299 return _BUTTON_STATUS_DISABLED;
1305 _FooterImpl::ConvertButtonStatus(FooterItemStatus status) const
1309 case FOOTER_ITEM_STATUS_NORMAL:
1310 return _BUTTON_STATUS_NORMAL;
1313 case FOOTER_ITEM_STATUS_DISABLED:
1314 return _BUTTON_STATUS_DISABLED;
1317 case FOOTER_ITEM_STATUS_PRESSED:
1318 return _BUTTON_STATUS_PRESSED;
1321 case FOOTER_ITEM_STATUS_HIGHLIGHTED:
1322 return _BUTTON_STATUS_HIGHLIGHTED;
1325 case FOOTER_ITEM_STATUS_SELECTED:
1326 return _BUTTON_STATUS_SELECTED;
1330 return _BUTTON_STATUS_DISABLED;
1336 _FooterImpl::ConvertFooterStyle(FooterStyle style)
1338 ToolbarStyle viewStyle = TOOLBAR_TEXT;
1342 case FOOTER_STYLE_TAB:
1343 viewStyle = TOOLBAR_TAB;
1346 case FOOTER_STYLE_SEGMENTED_TEXT:
1349 case FOOTER_STYLE_SEGMENTED_ICON_TEXT:
1352 case FOOTER_STYLE_SEGMENTED_ICON:
1353 viewStyle = TOOLBAR_SEGMENTED;
1356 case FOOTER_STYLE_BUTTON_TEXT:
1357 viewStyle = TOOLBAR_TEXT;
1360 case FOOTER_STYLE_BUTTON_ICON:
1361 viewStyle = TOOLBAR_ICON;
1364 case FOOTER_STYLE_BUTTON_ICON_TEXT:
1365 viewStyle = TOOLBAR_ICON_TEXT;
1368 case FOOTER_STYLE_TAB_LARGE:
1369 viewStyle = TOOLBAR_TAB_LARGE;
1381 : public _UiBuilderControlMaker
1384 _FooterMaker(_UiBuilder* uibuilder)
1385 : _UiBuilderControlMaker(uibuilder){};
1386 virtual ~_FooterMaker(){};
1387 static _UiBuilderControlMaker* GetInstance(_UiBuilder* uibuilder)
1389 _FooterMaker* pFooterMaker = new (std::nothrow) _FooterMaker(uibuilder);
1390 return pFooterMaker;
1393 virtual Control* Make(_UiBuilderControl* pControl)
1395 Footer* pFooter = null;
1397 String elementString;
1399 int numberedBadge = 0;
1403 FooterStyle fstyle = FOOTER_STYLE_BUTTON_TEXT;
1404 Form* pForm = static_cast<Form*>(GetContainer());
1405 pFooter = pForm->GetFooter();
1407 if (null == pFooter)
1412 if (pControl->GetElement(L"footerStyle", elementString))
1414 if (elementString.Equals(L"FOOTER_STYLE_BUTTON_TEXT", false))
1416 fstyle = FOOTER_STYLE_BUTTON_TEXT;
1418 else if (elementString.Equals(L"FOOTER_STYLE_BUTTON_ICON", false))
1420 fstyle = FOOTER_STYLE_BUTTON_ICON;
1422 else if (elementString.Equals(L"FOOTER_STYLE_BUTTON_ICON_TEXT", false))
1424 fstyle = FOOTER_STYLE_BUTTON_ICON_TEXT;
1426 else if (elementString.Equals(L"FOOTER_STYLE_SEGMENTED_TEXT", false))
1428 fstyle = FOOTER_STYLE_SEGMENTED_TEXT;
1430 else if (elementString.Equals(L"FOOTER_STYLE_SEGMENTED_ICON", false))
1432 fstyle = FOOTER_STYLE_SEGMENTED_ICON;
1434 else if (elementString.Equals(L"FOOTER_STYLE_SEGMENTED_ICON_TEXT", false))
1436 fstyle = FOOTER_STYLE_SEGMENTED_ICON_TEXT;
1438 else if (elementString.Equals(L"FOOTER_STYLE_TAB", false))
1440 fstyle = FOOTER_STYLE_TAB;
1442 else if (elementString.Equals(L"FOOTER_STYLE_TAB_LARGE", false))
1444 fstyle = FOOTER_STYLE_TAB_LARGE;
1447 pFooter->SetStyle(fstyle);
1450 if (pControl->GetElement(L"backgroundBitmapPath", elementString) || pControl->GetElement(L"BGBitmapPath", elementString))
1452 Bitmap* pBitmap = null;
1453 pBitmap = LoadBitmapN(elementString);
1454 pFooter->SetBackgroundBitmap(pBitmap);
1458 if (pControl->GetElement(L"colorOpacity", elementString))
1460 Base::Integer::Parse(elementString, opacity);
1463 if (pControl->GetElement(L"color", elementString))
1465 ConvertStringToColor32(elementString, opacity, color);
1466 pFooter->SetColor(color);
1470 if (pControl->GetElement(L"normalButtonColorOpacity", elementString))
1472 Base::Integer::Parse(elementString, opacity);
1475 if (pControl->GetElement(L"normalButtonColor", elementString))
1477 ConvertStringToColor32(elementString, opacity, color);
1478 pFooter->SetButtonColor(BUTTON_ITEM_STATUS_NORMAL, color);
1481 if (pControl->GetElement(L"normalButtonTextColor", elementString))
1483 ConvertStringToColor(elementString, color);
1484 pFooter->SetButtonTextColor(BUTTON_ITEM_STATUS_NORMAL, color);
1488 if (pControl->GetElement(L"pressedButtonColorOpacity", elementString))
1490 Base::Integer::Parse(elementString, opacity);
1493 if (pControl->GetElement(L"pressedButtonColor", elementString))
1495 ConvertStringToColor32(elementString, opacity, color);
1496 pFooter->SetButtonColor(BUTTON_ITEM_STATUS_PRESSED, color);
1499 if (pControl->GetElement(L"pressedButtonTextColor", elementString))
1501 ConvertStringToColor(elementString, color);
1502 pFooter->SetButtonTextColor(BUTTON_ITEM_STATUS_PRESSED, color);
1505 // highlighted button
1506 if (pControl->GetElement(L"highlightedButtonColorOpacity", elementString))
1508 Base::Integer::Parse(elementString, opacity);
1511 if (pControl->GetElement(L"highlightedButtonColor", elementString))
1513 ConvertStringToColor32(elementString, opacity, color);
1514 pFooter->SetButtonColor(BUTTON_ITEM_STATUS_HIGHLIGHTED, color);
1517 if (pControl->GetElement(L"highlightedButtonTextColor", elementString))
1519 ConvertStringToColor(elementString, color);
1520 pFooter->SetButtonTextColor(BUTTON_ITEM_STATUS_HIGHLIGHTED, color);
1524 if (pControl->GetElement(L"disabledButtonColorOpacity", elementString))
1526 Base::Integer::Parse(elementString, opacity);
1529 if (pControl->GetElement(L"disabledButtonColor", elementString))
1531 ConvertStringToColor32(elementString, opacity, color);
1532 pFooter->SetButtonColor(BUTTON_ITEM_STATUS_DISABLED, color);
1535 if (pControl->GetElement(L"disabledButtonTextColor", elementString))
1537 ConvertStringToColor(elementString, color);
1538 pFooter->SetButtonTextColor(BUTTON_ITEM_STATUS_DISABLED, color);
1541 if (pControl->GetElement(L"normalItemColorOpacity", elementString))
1543 Base::Integer::Parse(elementString, opacity);
1546 if (pControl->GetElement(L"normalItemColor", elementString))
1548 ConvertStringToColor32(elementString, opacity, color);
1549 pFooter->SetItemColor(FOOTER_ITEM_STATUS_NORMAL, color);
1552 if (pControl->GetElement(L"normalItemTextColor", elementString))
1554 ConvertStringToColor(elementString, color);
1555 pFooter->SetItemTextColor(FOOTER_ITEM_STATUS_NORMAL, color);
1559 if (pControl->GetElement(L"pressedItemColorOpacity", elementString))
1561 Base::Integer::Parse(elementString, opacity);
1564 if (pControl->GetElement(L"pressedItemColor", elementString))
1566 ConvertStringToColor32(elementString, opacity, color);
1567 pFooter->SetItemColor(FOOTER_ITEM_STATUS_PRESSED, color);
1570 if (pControl->GetElement(L"pressedItemTextColor", elementString))
1572 ConvertStringToColor(elementString, color);
1573 pFooter->SetItemTextColor(FOOTER_ITEM_STATUS_PRESSED, color);
1577 if (pControl->GetElement(L"selectedItemColorOpacity", elementString))
1579 Base::Integer::Parse(elementString, opacity);
1582 if (pControl->GetElement(L"selectedItemColor", elementString))
1584 ConvertStringToColor32(elementString, opacity, color);
1585 pFooter->SetItemColor(FOOTER_ITEM_STATUS_SELECTED, color);
1588 if (pControl->GetElement(L"selectedItemTextColor", elementString))
1590 ConvertStringToColor(elementString, color);
1591 pFooter->SetItemTextColor(FOOTER_ITEM_STATUS_SELECTED, color);
1595 if (pControl->GetElement(L"highlightedItemColorOpacity", elementString))
1597 Base::Integer::Parse(elementString, opacity);
1600 if (pControl->GetElement(L"highlightedItemColor", elementString))
1602 ConvertStringToColor32(elementString, opacity, color);
1603 pFooter->SetItemColor(FOOTER_ITEM_STATUS_HIGHLIGHTED, color);
1606 if (pControl->GetElement(L"highlightedItemTextColor", elementString))
1608 ConvertStringToColor(elementString, color);
1609 pFooter->SetItemTextColor(FOOTER_ITEM_STATUS_HIGHLIGHTED, color);
1612 if (pControl->GetElement(L"disabledItemColorOpacity", elementString))
1614 Base::Integer::Parse(elementString, opacity);
1617 if (pControl->GetElement(L"disabledItemColor", elementString))
1619 ConvertStringToColor32(elementString, opacity, color);
1620 pFooter->SetItemColor(FOOTER_ITEM_STATUS_DISABLED, color);
1623 if (pControl->GetElement(L"disabledItemTextColor", elementString))
1625 ConvertStringToColor(elementString, color);
1626 pFooter->SetItemTextColor(FOOTER_ITEM_STATUS_DISABLED, color);
1629 int itemCnt = pControl->GetItemCount();
1630 ButtonItemStyle buttonItemStyle = BUTTON_ITEM_STYLE_TEXT;
1631 ButtonPosition buttonPosition = BUTTON_POSITION_LEFT;
1632 String footerItemString;
1634 for (int i = 0; i < itemCnt; i++)
1636 footerItemString = pControl->GetItemName(i);
1638 if (footerItemString.Equals(L"footerItem", false))
1640 FooterItem footerItem;
1642 if (pControl->GetItemElement(i, "actionId", elementString))
1645 Base::Integer::Parse(elementString, actionId);
1646 footerItem.Construct(actionId);
1649 if (pControl->GetItemElement(i, "text", elementString))
1651 footerItem.SetText(elementString);
1654 // footeritem background bitmap path setting
1656 if (pControl->GetItemElement(i, "normalBGBitmapPath", elementString))
1658 Bitmap* pBitmap = null;
1659 pBitmap = LoadBitmapN(elementString);
1660 footerItem.SetBackgroundBitmap(FOOTER_ITEM_STATUS_NORMAL, pBitmap);
1663 // pressed bg bitmap
1664 if (pControl->GetItemElement(i, "pressedBGBitmapPath", elementString))
1666 Bitmap* pBitmap = null;
1667 pBitmap = LoadBitmapN(elementString);
1668 footerItem.SetBackgroundBitmap(FOOTER_ITEM_STATUS_PRESSED, pBitmap);
1671 // selected bg bitmap
1672 if (pControl->GetItemElement(i, "selectedBGBitmapPath", elementString))
1674 Bitmap* pBitmap = null;
1675 pBitmap = LoadBitmapN(elementString);
1676 footerItem.SetBackgroundBitmap(FOOTER_ITEM_STATUS_SELECTED, pBitmap);
1679 // highlighted bg bitmap
1680 if (pControl->GetItemElement(i, "highlightedBGBitmapPath", elementString))
1682 Bitmap* pBitmap = null;
1683 pBitmap = LoadBitmapN(elementString);
1684 footerItem.SetBackgroundBitmap(FOOTER_ITEM_STATUS_HIGHLIGHTED, pBitmap);
1687 // disabled bg bitmap
1688 if (pControl->GetItemElement(i, "disabledBGBitmapPath", elementString))
1690 Bitmap* pBitmap = null;
1691 pBitmap = LoadBitmapN(elementString);
1692 footerItem.SetBackgroundBitmap(FOOTER_ITEM_STATUS_DISABLED, pBitmap);
1695 // footeritem icon bitmap setting
1697 if (pControl->GetItemElement(i, "normalIconPath", elementString))
1699 Bitmap* pBitmap = null;
1700 pBitmap = LoadBitmapN(elementString);
1701 footerItem.SetIcon(FOOTER_ITEM_STATUS_NORMAL, pBitmap);
1705 if (pControl->GetItemElement(i, "pressedIconPath", elementString))
1707 Bitmap* pBitmap = null;
1708 pBitmap = LoadBitmapN(elementString);
1709 footerItem.SetIcon(FOOTER_ITEM_STATUS_PRESSED, pBitmap);
1713 if (pControl->GetItemElement(i, "selectedIconPath", elementString))
1715 Bitmap* pBitmap = null;
1716 pBitmap = LoadBitmapN(elementString);
1717 footerItem.SetIcon(FOOTER_ITEM_STATUS_SELECTED, pBitmap);
1721 if (pControl->GetItemElement(i, "highlightedIconPath", elementString))
1723 Bitmap* pBitmap = null;
1724 pBitmap = LoadBitmapN(elementString);
1725 footerItem.SetIcon(FOOTER_ITEM_STATUS_HIGHLIGHTED, pBitmap);
1729 if (pControl->GetItemElement(i, "disabledIconPath", elementString))
1731 Bitmap* pBitmap = null;
1732 pBitmap = LoadBitmapN(elementString);
1733 footerItem.SetIcon(FOOTER_ITEM_STATUS_DISABLED, pBitmap);
1736 if (pControl->GetItemElement(i, L"accessibilityHint", elementString))
1738 _FooterItemImpl::GetInstance(footerItem)->SetAccessibilityHint(elementString);
1741 pFooter->AddItem(footerItem);
1743 if (pControl->GetItemElement(i, "footerItemBadgeIconPath", elementString))
1745 Bitmap* pBitmap = null;
1746 pBitmap = LoadBitmapN(elementString);
1747 result r = pFooter->SetItemBadgeIcon(i, pBitmap);
1748 SysLogException(NID_UI_CTRL, r, "[E_INVALID_STATE] Failed to set an icon");
1751 if (pControl->GetItemElement(i, "footerItemNumberedBadgeIcon", elementString))
1753 Base::Integer::Parse(elementString, numberedBadge);
1754 result r = pFooter->SetItemNumberedBadgeIcon(i, numberedBadge);
1755 SysLogException(NID_UI_CTRL, r, "[E_INVALID_STATE] Failed to set a numbered icon");
1758 else if (footerItemString.Equals(L"buttonItem", false))
1760 ButtonItem buttonItem;
1763 if (pControl->GetItemElement(i, "style", elementString))
1765 if (elementString.Equals(L"BUTTON_ITEM_STYLE_TEXT", false))
1767 buttonItemStyle = BUTTON_ITEM_STYLE_TEXT;
1769 else if (elementString.Equals(L"BUTTON_ITEM_STYLE_ICON", false))
1771 buttonItemStyle = BUTTON_ITEM_STYLE_ICON;
1775 // set button position
1776 if (pControl->GetItemElement(i, "position", elementString))
1778 if (elementString.Equals(L"BUTTON_POSITION_LEFT", false))
1780 buttonPosition = BUTTON_POSITION_LEFT;
1782 else if (elementString.Equals(L"BUTTON_POSITION_RIGHT", false))
1784 buttonPosition = BUTTON_POSITION_RIGHT;
1789 if (pControl->GetItemElement(i, "actionId", elementString))
1792 Base::Integer::Parse(elementString, actionId);
1793 buttonItem.Construct(buttonItemStyle, actionId);
1797 if (pControl->GetItemElement(i, "text", elementString))
1799 buttonItem.SetText(elementString);
1802 // buttonitem background bitmap path setting
1804 if (pControl->GetItemElement(i, "normalBGBitmapPath", elementString))
1806 Bitmap* pBitmap = null;
1807 pBitmap = LoadBitmapN(elementString);
1808 buttonItem.SetBackgroundBitmap(BUTTON_ITEM_STATUS_NORMAL, pBitmap);
1811 // pressed bg bitmap
1812 if (pControl->GetItemElement(i, "pressedBGBitmapPath", elementString))
1814 Bitmap* pBitmap = null;
1815 pBitmap = LoadBitmapN(elementString);
1816 buttonItem.SetBackgroundBitmap(BUTTON_ITEM_STATUS_PRESSED, pBitmap);
1819 // highlighted bg bitmap
1820 if (pControl->GetItemElement(i, "highlightedBGBitmapPath", elementString))
1822 Bitmap* pBitmap = null;
1823 pBitmap = LoadBitmapN(elementString);
1824 buttonItem.SetBackgroundBitmap(BUTTON_ITEM_STATUS_HIGHLIGHTED, pBitmap);
1827 // disabled bg bitmap
1828 if (pControl->GetItemElement(i, "disabledBGBitmapPath", elementString))
1830 Bitmap* pBitmap = null;
1831 pBitmap = LoadBitmapN(elementString);
1832 buttonItem.SetBackgroundBitmap(BUTTON_ITEM_STATUS_DISABLED, pBitmap);
1835 // buttonitem icon bitmap setting
1836 if (pControl->GetItemElement(i, "normalIconPath", elementString))
1838 Bitmap* pBitmap = null;
1839 pBitmap = LoadBitmapN(elementString);
1840 buttonItem.SetIcon(BUTTON_ITEM_STATUS_NORMAL, pBitmap);
1843 if (pControl->GetItemElement(i, "pressedIconPath", elementString))
1845 Bitmap* pBitmap = null;
1846 pBitmap = LoadBitmapN(elementString);
1847 buttonItem.SetIcon(BUTTON_ITEM_STATUS_PRESSED, pBitmap);
1850 if (pControl->GetItemElement(i, "highlightedIconPath", elementString))
1852 Bitmap* pBitmap = null;
1853 pBitmap = LoadBitmapN(elementString);
1854 buttonItem.SetIcon(BUTTON_ITEM_STATUS_HIGHLIGHTED, pBitmap);
1857 if (pControl->GetItemElement(i, "disabledIconPath", elementString))
1859 Bitmap* pBitmap = null;
1860 pBitmap = LoadBitmapN(elementString);
1861 buttonItem.SetIcon(BUTTON_ITEM_STATUS_DISABLED, pBitmap);
1864 if (pControl->GetItemElement(i, L"accessibilityHint", elementString))
1866 _ButtonItemImpl::GetInstance(buttonItem)->SetAccessibilityHint(elementString);
1869 pFooter->SetButton(buttonPosition, buttonItem);
1871 if (pControl->GetItemElement(i, "buttonItemBadgeIconPath", elementString))
1873 Bitmap* pBitmap = null;
1874 pBitmap = LoadBitmapN(elementString);
1875 result r = pFooter->SetButtonBadgeIcon(buttonPosition, pBitmap);
1876 SysLogException(NID_UI_CTRL, r, "[E_INVALID_STATE] Failed to set an icon");
1879 if (pControl->GetItemElement(i, "buttonItemNumberedBadgeIcon", elementString))
1881 Base::Integer::Parse(elementString, numberedBadge);
1882 result r = pFooter->SetButtonNumberedBadgeIcon(buttonPosition, numberedBadge);
1883 SysLogException(NID_UI_CTRL, r, "[E_INVALID_STATE] Failed to set a numbered icon");
1895 _FooterRegister::_FooterRegister()
1897 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
1898 pUiBuilderControlTableManager->RegisterControl(L"Footer", _FooterMaker::GetInstance);
1901 _FooterRegister::~_FooterRegister()
1903 _UiBuilderControlTableManager* pUiBuilderControlTableManager = _UiBuilderControlTableManager::GetInstance();
1904 pUiBuilderControlTableManager->UnregisterControl(L"Footer");
1907 static _FooterRegister FooterRegisterToUiBuilder;
1909 }}} // Tizen::Ui::Controls