apply focus ui for toolbar
authorMyung Jin Kim <critical.kim@samsung.com>
Thu, 13 Jun 2013 01:04:59 +0000 (10:04 +0900)
committerMyung Jin Kim <critical.kim@samsung.com>
Thu, 13 Jun 2013 01:04:59 +0000 (10:04 +0900)
Change-Id: I26a0ed661589e5dc20c88bdfd7924b0156542556

src/ui/controls/FUiCtrl_ButtonPresenter.cpp
src/ui/controls/FUiCtrl_FooterImpl.cpp
src/ui/controls/FUiCtrl_LabelPresenter.cpp
src/ui/controls/FUiCtrl_Toolbar.cpp
src/ui/inc/FUiCtrl_ButtonPresenter.h
src/ui/inc/FUiCtrl_LabelPresenter.h
src/ui/inc/FUiCtrl_Toolbar.h

index 1e5bd6c..2068428 100644 (file)
@@ -43,7 +43,6 @@ _ButtonPresenter::_ButtonPresenter(void)
        , __pButtonModel(null)
        , __previousEnabledState(false)
        , __touchMoveHandled(false)
-       , __lazyDocode(false)
        , __pFont(null)
        , __pTextObject(null)
        , __pBase(null)
@@ -343,16 +342,12 @@ _ButtonPresenter::DrawBackground(void)
                                        && __pButton->GetBitmap(_BUTTON_STATUS_NORMAL) == null && __pButton->GetBitmap(_BUTTON_STATUS_DISABLED) == null
                                        && __pButton->GetBitmap(_BUTTON_STATUS_PRESSED) == null && __pButton->GetBitmap(_BUTTON_STATUS_HIGHLIGHTED) == null)
                        {
-                               __lazyDocode = true;
-
                                __pBase->SetBackgroundColor(_Colorf(
                                                (float)bgColor.GetRed() / 255, (float)bgColor.GetGreen() / 255, (float)bgColor.GetBlue() / 255, (float)bgColor.GetAlpha() / 255));
                                __pBase->SetImageSource(imagePath);
                        }
                        else
                        {
-                               __lazyDocode = false;
-
                                __pBase->SetImageSource(L"");
 
                                pCanvas = __pButton->GetCanvasN();
@@ -1164,7 +1159,7 @@ _ButtonPresenter::OnCanvasRequestedN(const FloatRectangle& bounds)
 {
        Canvas* pCanvas = null;
 
-       if (__lazyDocode == true)
+       if (__pBase->GetImageSource().IsEmpty() == true)
        {
                Bitmap* pBackgroundBitmap = null;
                _ButtonStatus status = __pButton->GetButtonStatus();
index c4fbdee..1a8f63e 100644 (file)
@@ -949,38 +949,69 @@ _FooterImpl::CheckItemValidate(const FooterItem& item)
 
        int count = GetItemCount();
 
-       if (__style == FOOTER_STYLE_BUTTON_ICON || __style == FOOTER_STYLE_BUTTON_TEXT || __style == FOOTER_STYLE_BUTTON_ICON_TEXT)
+       if (__style == FOOTER_STYLE_BUTTON_TEXT || __style == FOOTER_STYLE_BUTTON_ICON || __style == FOOTER_STYLE_BUTTON_ICON_TEXT)
        {
-               SysTryReturnResult(NID_UI_CTRL, (count < 5), E_MAX_EXCEEDED,
+               if (IsButtonSet(BUTTON_POSITION_LEFT) || IsMenuButtonSet())
+               {
+                       SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
                                        "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
+               }
+               else
+               {
+                       if (IsBackButtonSet())
+                       {
+                               SysTryReturnResult(NID_UI_CTRL, (count < 5), E_MAX_EXCEEDED,
+                                               "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
+                       }
+                       else
+                       {
+                               if (IsButtonSet(BUTTON_POSITION_RIGHT))
+                               {
+                                       SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
+                                                       "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
+                               }
+                               else
+                               {
+                                       SysTryReturnResult(NID_UI_CTRL, (count < 5), E_MAX_EXCEEDED,
+                                                       "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
+                               }
+                       }
+               }
        }
-       else if (__style == FOOTER_STYLE_TAB)
+       else if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT)
        {
-               SysTryReturnResult(NID_UI_CTRL, (count < 15), E_MAX_EXCEEDED,
-                                       "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
-       }
-       else if (__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT
-                       || __style == FOOTER_STYLE_BUTTON_TEXT || __style == FOOTER_STYLE_BUTTON_ICON || __style == FOOTER_STYLE_BUTTON_ICON_TEXT)
-       {
-               if (IsBackButtonSet() || IsMenuButtonSet())
+               if (IsButtonSet(BUTTON_POSITION_LEFT) || IsMenuButtonSet())
                {
-                       SysTryReturnResult(NID_UI_CTRL, (count < 4), E_MAX_EXCEEDED,
+                       SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
                                        "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
                }
                else
                {
-                       if (IsButtonSet(BUTTON_POSITION_RIGHT) || IsButtonSet(BUTTON_POSITION_LEFT))
+                       if (IsBackButtonSet())
                        {
-                               SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
+                               SysTryReturnResult(NID_UI_CTRL, (count < 4), E_MAX_EXCEEDED,
                                                "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
                        }
                        else
                        {
-                               SysTryReturnResult(NID_UI_CTRL, (count < 4), E_MAX_EXCEEDED,
-                                               "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
+                               if (IsButtonSet(BUTTON_POSITION_RIGHT))
+                               {
+                                       SysTryReturnResult(NID_UI_CTRL, (count < 3), E_MAX_EXCEEDED,
+                                                       "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
+                               }
+                               else
+                               {
+                                       SysTryReturnResult(NID_UI_CTRL, (count < 4), E_MAX_EXCEEDED,
+                                                       "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
+                               }
                        }
                }
        }
+       else if (__style == FOOTER_STYLE_TAB)
+       {
+               SysTryReturnResult(NID_UI_CTRL, (count < 15), E_MAX_EXCEEDED,
+                                       "[E_MAX_EXCEEDED] The number of items have exceeded the maximum limit.");
+       }
 
        if (item.GetActionId() < FOOTER_ACTION_ID_MIN || item.GetActionId() > FOOTER_ACTION_ID_MAX)
        {
@@ -1630,12 +1661,7 @@ _FooterImpl::SetMenuButton(void)
        SysTryReturnResult(NID_UI_CTRL, (__style != FOOTER_STYLE_TAB), E_UNSUPPORTED_OPERATION,
                           "[E_UNSUPPORTED_OPERATION] The current Footer style does not support the operation.");
 
-       if ((__style == FOOTER_STYLE_SEGMENTED_TEXT || __style == FOOTER_STYLE_SEGMENTED_ICON || __style == FOOTER_STYLE_SEGMENTED_ICON_TEXT) && GetItemCount() > 4)
-       {
-               SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] Unable to set the menu button.");
-               return E_SYSTEM;
-       }
-       else if ((__style == FOOTER_STYLE_BUTTON_ICON || __style == FOOTER_STYLE_BUTTON_TEXT || __style == FOOTER_STYLE_BUTTON_ICON_TEXT) && GetItemCount() > 5)
+       if (GetItemCount() > 3)
        {
                SysLogException(NID_UI_CTRL, E_SYSTEM, "[E_SYSTEM] Unable to set the menu button.");
                return E_SYSTEM;
index 99e3927..08264e2 100644 (file)
@@ -47,7 +47,6 @@ _LabelPresenter::_LabelPresenter(void)
        : __pLabel(null)
        , __pLabelModel(null)
        , __previousEnabledState(false)
-       , __lazyDocode(false)
        , __pFont(null)
        , __pTextObject(null)
        , __pBase(null)
@@ -283,8 +282,6 @@ _LabelPresenter::DrawBackground(void)
 
                if (imagePath.IsEmpty() == false && __pLabel->GetText() == L"")
                {
-                       __lazyDocode = true;
-
                        __pBase->SetBackgroundColor(_Colorf(
                                        (float)bgColor.GetRed() / 255, (float)bgColor.GetGreen() / 255, (float)bgColor.GetBlue() / 255, (float)bgColor.GetAlpha() / 255));
 
@@ -292,8 +289,6 @@ _LabelPresenter::DrawBackground(void)
                }
                else
                {
-                       __lazyDocode = false;
-
                        __pBase->SetImageSource(L"");
 
                        pCanvas = __pLabel->GetCanvasN();
@@ -466,7 +461,7 @@ _LabelPresenter::OnCanvasRequestedN(const FloatRectangle& bounds)
 {
        Canvas* pCanvas = null;
 
-       if (__lazyDocode == true)
+       if (__pBase->GetImageSource().IsEmpty() == true)
        {
                Bitmap* pBitmap = null;
 
index 8f346e6..ed2a55a 100644 (file)
@@ -122,6 +122,8 @@ _Toolbar::_Toolbar(void)
        , __transparent(false)
        , __isUserBackgroundBitmap(false)
        , __highlightedItemIndex(0)
+       , __lastHighlightedItemIndex(0)
+       , __highlighted(false)
        , __titleTextArea(FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f))
        , __itemArea(FloatRectangle(0.0f, 0.0f, 0.0f, 0.0f))
        , __pTitleTextElement(null)
@@ -2354,8 +2356,6 @@ _Toolbar::SetItemSelected(int itemIndex, bool fire, bool adjust)
                __pItems.at(itemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, fire);
                __pItems.at(itemIndex)->Draw();
 
-               __highlightedItemIndex = itemIndex;
-
                _AccessibilityElement* pElement = __pItems.at(currentSelectedItemIndex)->GetAccessibilityContainer()->GetChildElement(0);
                if (pElement)
                {
@@ -2381,8 +2381,6 @@ _Toolbar::SetItemSelected(int itemIndex, bool fire, bool adjust)
                }
                __pItems.at(itemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, fire);
 
-               __highlightedItemIndex = itemIndex;
-
                _AccessibilityElement* pElement = __pItems.at(itemIndex)->GetAccessibilityContainer()->GetChildElement(0);
                if (pElement)
                {
@@ -2438,6 +2436,8 @@ _Toolbar::SetItemHighlighted(int itemIndex, bool fire, bool adjust)
                __pItems.at(itemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, fire);
 
                __highlightedItemIndex = itemIndex;
+               __lastHighlightedItemIndex = __highlightedItemIndex;
+               __highlighted = true;
 
                _AccessibilityElement* pElement = __pItems.at(currentSelectedItemIndex)->GetAccessibilityContainer()->GetChildElement(0);
                if (pElement)
@@ -2465,6 +2465,8 @@ _Toolbar::SetItemHighlighted(int itemIndex, bool fire, bool adjust)
                __pItems.at(itemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, fire);
 
                __highlightedItemIndex = itemIndex;
+               __lastHighlightedItemIndex = __highlightedItemIndex;
+               __highlighted = true;
 
                _AccessibilityElement* pElement = __pItems.at(itemIndex)->GetAccessibilityContainer()->GetChildElement(0);
                if (pElement)
@@ -2547,6 +2549,8 @@ _Toolbar::SetStyle(ToolbarStyle style)
        __descriptionText = L"";
 
        __highlightedItemIndex = 0;
+       __lastHighlightedItemIndex = 0;
+       __highlighted = false;
 
        if (__style == TOOLBAR_TITLE || __style == TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_TAB_WITH_TITLE)
        {
@@ -3304,10 +3308,36 @@ _Toolbar::OnFocusGained(const _Control& source)
 {
        if (__header == true && __style != TOOLBAR_TEXT) // right align
        {
+               if (__itemCount != 0)
+               {
+                       if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
+                                       || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
+                       {
+                               __highlightedItemIndex = GetSelectedItemIndex();
+                       }
+                       else // not segmented
+                       {
+                               __highlightedItemIndex = 0;
+                       }
+               }
+
                OnHeaderFocusGained(source);
        }
        else
        {
+               if (__itemCount != 0)
+               {
+                       if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
+                                       || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
+                       {
+                               __highlightedItemIndex = GetSelectedItemIndex();
+                       }
+                       else // not segmented
+                       {
+                               __highlightedItemIndex = 0;
+                       }
+               }
+
                OnFooterFocusGained(source);
        }
 
@@ -3319,119 +3349,111 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
 {
        if (__itemCount == 0)
        {
-               if (__pButtonItems[MENU_BUTTON] || __pButtonItems[LEFT_BUTTON])
+               if (__pButtonItems[LEFT_BUTTON])
                {
-                       if (__pButtonItems[MENU_BUTTON])
+                       if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                        {
-                               if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                               {
-                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                       __pButtonItems[MENU_BUTTON]->Invalidate();
+                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                               __pButtonItems[LEFT_BUTTON]->Invalidate();
 
-                                       __highlightedItemIndex = __itemCount;
-                               }
-                               else
+                               __highlightedItemIndex = __itemCount;
+                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                               __highlighted = true;
+                       }
+                       else
+                       {
+                               if (__pButtonItems[RIGHT_BUTTON])
                                {
-                                       if (__pButtonItems[BACK_BUTTON] || __pButtonItems[RIGHT_BUTTON])
+                                       if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                        {
-                                               if (__pButtonItems[BACK_BUTTON])
-                                               {
-                                                       if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                                       }
-                                               }
-                                               else if (__pButtonItems[RIGHT_BUTTON])
-                                               {
-                                                       if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
-                                                       }
-                                               }
+                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
 
                                                __highlightedItemIndex = __itemCount + 1;
+                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                               __highlighted = true;
                                        }
                                }
                        }
-                       else if (__pButtonItems[LEFT_BUTTON])
+               }
+               else if (__pButtonItems[RIGHT_BUTTON])
+               {
+                       if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                        {
-                               if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                               __highlightedItemIndex = __itemCount;
+                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                               __highlighted = true;
+                       }
+               }
+       }
+       else // itemCount != 0
+       {
+               if (__pItems.at(__highlightedItemIndex))
+               {
+                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                       {
+                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                               __highlighted = true;
+                       }
+                       else
+                       {
+                               if (__highlightedItemIndex < __itemCount - 1)
                                {
-                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                       __highlightedItemIndex++;
 
-                                       __highlightedItemIndex = __itemCount;
+                                       OnHeaderFocusGained(source);
                                }
-                               else
+                               else if (__highlightedItemIndex == __itemCount - 1)
                                {
-                                       if (__pButtonItems[BACK_BUTTON] || __pButtonItems[RIGHT_BUTTON])
+                                       if (__pButtonItems[LEFT_BUTTON])
                                        {
-                                               if (__pButtonItems[BACK_BUTTON])
+                                               if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                                       }
+                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+
+                                                       __highlightedItemIndex = __itemCount;
+                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                       __highlighted = true;
                                                }
-                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               else
                                                {
-                                                       if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[RIGHT_BUTTON])
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                               if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                                       __highlightedItemIndex = __itemCount + 1;
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
                                                        }
                                                }
-
-                                               __highlightedItemIndex = __itemCount + 1;
                                        }
-                               }
-                       }
-               }
-               else if (__pButtonItems[BACK_BUTTON] || __pButtonItems[RIGHT_BUTTON])
-               {
-                       if (__pButtonItems[BACK_BUTTON])
-                       {
-                               if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                               {
-                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                       __pButtonItems[BACK_BUTTON]->Invalidate();
-
-                                       __highlightedItemIndex = __itemCount;
-                               }
-                       }
-                       else if (__pButtonItems[RIGHT_BUTTON])
-                       {
-                               if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                               {
-                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                       else if (__pButtonItems[RIGHT_BUTTON])
+                                       {
+                                               if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               {
+                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
 
-                                       __highlightedItemIndex = __itemCount;
+                                                       __highlightedItemIndex = __itemCount;
+                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                       __highlighted = true;
+                                               }
+                                       }
                                }
                        }
                }
        }
-       else // itemCount != 0
-       {
-               if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
-                               || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
-               {
-                       __highlightedItemIndex = GetSelectedItemIndex();
-               }
-               else // not segmented
-               {
-                       __highlightedItemIndex = 0;
-               }
-
-               if (__pItems.at(__highlightedItemIndex))
-               {
-                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                       __pItems.at(__highlightedItemIndex)->Invalidate();
-               }
-       }
 
        return E_SUCCESS;
 }
@@ -3439,8 +3461,6 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
 result
 _Toolbar::OnFooterFocusGained(const _Control& source)
 {
-       __highlightedItemIndex = 0;
-
        if (__itemCount == 0)
        {
                if (__pButtonItems[MENU_BUTTON] || __pButtonItems[LEFT_BUTTON])
@@ -3453,6 +3473,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                        __pButtonItems[MENU_BUTTON]->Invalidate();
 
                                        __highlightedItemIndex = __itemCount;
+                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                       __highlighted = true;
                                }
                                else
                                {
@@ -3464,6 +3486,10 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                        {
                                                                __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pButtonItems[BACK_BUTTON]->Invalidate();
+
+                                                               __highlightedItemIndex = __itemCount + 1;
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
@@ -3472,10 +3498,12 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                        {
                                                                __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                               __highlightedItemIndex = __itemCount + 1;
+                                                               __lastHighlightedItemIndex =__highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                }
-
-                                               __highlightedItemIndex = __itemCount + 1;
                                        }
                                }
                        }
@@ -3487,6 +3515,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                        __pButtonItems[LEFT_BUTTON]->Invalidate();
 
                                        __highlightedItemIndex = __itemCount;
+                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                       __highlighted = true;
                                }
                                else
                                {
@@ -3498,6 +3528,10 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                        {
                                                                __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pButtonItems[BACK_BUTTON]->Invalidate();
+
+                                                               __highlightedItemIndex = __itemCount + 1;
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
@@ -3506,10 +3540,12 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                        {
                                                                __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                               __highlightedItemIndex = __itemCount + 1;
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                }
-
-                                               __highlightedItemIndex = __itemCount + 1;
                                        }
                                }
                        }
@@ -3524,6 +3560,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                        __pButtonItems[BACK_BUTTON]->Invalidate();
 
                                        __highlightedItemIndex = __itemCount;
+                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                       __highlighted = true;
                                }
                        }
                        else if (__pButtonItems[RIGHT_BUTTON])
@@ -3534,6 +3572,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                        __pButtonItems[RIGHT_BUTTON]->Invalidate();
 
                                        __highlightedItemIndex = __itemCount;
+                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                       __highlighted = true;
                                }
                        }
                }
@@ -3549,6 +3589,9 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                        {
                                __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                               __highlighted = true;
                        }
                }
                else // not segmented
@@ -3563,6 +3606,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                __pButtonItems[MENU_BUTTON]->Invalidate();
 
                                                __highlightedItemIndex = __itemCount;
+                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                               __highlighted = true;
                                        }
                                        else
                                        {
@@ -3572,6 +3617,9 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                        {
                                                                __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                        else
                                                        {
@@ -3582,6 +3630,9 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                                __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                                __pItems.at(__highlightedItemIndex)->Invalidate();
 
+                                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                               __highlighted = true;
+
                                                                                break;
                                                                        }
                                                                }
@@ -3596,6 +3647,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                                        __pButtonItems[BACK_BUTTON]->Invalidate();
 
                                                                                        __highlightedItemIndex = __itemCount + 1;
+                                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                                       __highlighted = true;
                                                                                }
                                                                        }
                                                                        else if (__pButtonItems[RIGHT_BUTTON])
@@ -3606,6 +3659,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                                        __pButtonItems[RIGHT_BUTTON]->Invalidate();
 
                                                                                        __highlightedItemIndex = __itemCount + 1;
+                                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                                       __highlighted = true;
                                                                                }
                                                                        }
                                                                }
@@ -3621,6 +3676,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                __pButtonItems[LEFT_BUTTON]->Invalidate();
 
                                                __highlightedItemIndex = __itemCount;
+                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                               __highlighted = true;
                                        }
                                        else
                                        {
@@ -3630,6 +3687,9 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                        {
                                                                __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                        else
                                                        {
@@ -3640,6 +3700,9 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                                __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                                __pItems.at(__highlightedItemIndex)->Invalidate();
 
+                                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                               __highlighted = true;
+
                                                                                break;
                                                                        }
                                                                }
@@ -3654,6 +3717,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                                        __pButtonItems[BACK_BUTTON]->Invalidate();
 
                                                                                        __highlightedItemIndex = __itemCount + 1;
+                                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                                       __highlighted = true;
                                                                                }
                                                                        }
                                                                        else if (__pButtonItems[RIGHT_BUTTON])
@@ -3664,6 +3729,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                                        __pButtonItems[RIGHT_BUTTON]->Invalidate();
 
                                                                                        __highlightedItemIndex = __itemCount + 1;
+                                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                                       __highlighted = true;
                                                                                }
                                                                        }
                                                                }
@@ -3680,6 +3747,9 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                        {
                                                __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                               __highlighted = true;
                                        }
                                        else
                                        {
@@ -3690,6 +3760,9 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pItems.at(__highlightedItemIndex)->Invalidate();
 
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+
                                                                break;
                                                        }
                                                }
@@ -3704,6 +3777,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                        __pButtonItems[BACK_BUTTON]->Invalidate();
 
                                                                        __highlightedItemIndex = __itemCount;
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
                                                                }
                                                        }
                                                        else if (__pButtonItems[RIGHT_BUTTON])
@@ -3714,6 +3789,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
                                                                        __pButtonItems[RIGHT_BUTTON]->Invalidate();
 
                                                                        __highlightedItemIndex = __itemCount;
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
                                                                }
                                                        }
                                                }
@@ -3726,9 +3803,8 @@ _Toolbar::OnFooterFocusGained(const _Control& source)
        return E_SUCCESS;
 }
 
-#if 0
-result
-_Toolbar::OnHeaderFocusGained(const _Control& source)
+bool
+_Toolbar::OnFocusLost(const _Control& source)
 {
        if (__itemCount == 0)
        {
@@ -3740,110 +3816,18 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
                                {
                                        if (__pButtonItems[MENU_BUTTON])
                                        {
-                                               if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
-                                                               || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
-                                               {
-                                                       if (__pItems.empty() == true)
-                                                       {
-                                                               if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                               {
-                                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
-                                                               }
-                                                               else
-                                                               {
-                                                                       __highlightedItemIndex++;
-                                                                       OnFocusGained(source);
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex = GetSelectedItemIndex();
-
-                                                               if (__pItems.at(__highlightedItemIndex))
-                                                               {
-                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
-                                                               }
-                                                       }
-                                               }
-                                               else // not segmented
+                                               if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       if (__pItems.empty() == true)
-                                                       {
-                                                               if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                               {
-                                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
-                                                               }
-                                                               else
-                                                               {
-                                                                       __highlightedItemIndex++;
-                                                                       OnFocusGained(source);
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               if (__pItems.at(0))
-                                                               {
-                                                                       __pItems.at(0)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                                       __pItems.at(0)->Invalidate();
-                                                               }
-                                                       }
+                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
                                                }
                                        }
                                        else if (__pButtonItems[LEFT_BUTTON])
                                        {
-                                               if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
-                                                               || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
-                                               {
-                                                       if (__pItems.empty() == true)
-                                                       {
-                                                               if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                               {
-                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                               }
-                                                               else
-                                                               {
-                                                                       __highlightedItemIndex++;
-                                                                       OnFocusGained(source);
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex = GetSelectedItemIndex();
-
-                                                               if (__pItems.at(__highlightedItemIndex))
-                                                               {
-                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
-                                                               }
-                                                       }
-                                               }
-                                               else // not segmented
+                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       if (__pItems.empty() == true)
-                                                       {
-                                                               if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                               {
-                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                               }
-                                                               else
-                                                               {
-                                                                       __highlightedItemIndex++;
-                                                                       OnFocusGained(source);
-                                                               }
-                                                       }
-                                                       else
-                                                       {
-                                                               if (__pItems.at(0))
-                                                               {
-                                                                       __pItems.at(0)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                                       __pItems.at(0)->Invalidate();
-                                                               }
-                                                       }
+                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
                                                }
                                        }
                                }
@@ -3851,29 +3835,19 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
                                {
                                        if (__pButtonItems[BACK_BUTTON])
                                        {
-                                               if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                        __pButtonItems[BACK_BUTTON]->Invalidate();
                                                }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
                                        }
                                        else if (__pButtonItems[RIGHT_BUTTON])
                                        {
-                                               if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                        __pButtonItems[RIGHT_BUTTON]->Invalidate();
                                                }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
                                        }
                                }
                        }
@@ -3883,29 +3857,19 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
                                {
                                        if (__pButtonItems[MENU_BUTTON])
                                        {
-                                               if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                        __pButtonItems[MENU_BUTTON]->Invalidate();
                                                }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
                                        }
                                        else if (__pButtonItems[LEFT_BUTTON])
                                        {
-                                               if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                        __pButtonItems[LEFT_BUTTON]->Invalidate();
                                                }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
                                        }
                                }
                        }
@@ -3918,50 +3882,35 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
                                {
                                        if (__pButtonItems[BACK_BUTTON])
                                        {
-                                               if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                        __pButtonItems[BACK_BUTTON]->Invalidate();
                                                }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
                                        }
                                        else if (__pButtonItems[RIGHT_BUTTON])
                                        {
-                                               if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                        __pButtonItems[RIGHT_BUTTON]->Invalidate();
                                                }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
                                        }
                                }
                        }
                }
        }
-       else
+       else // __itemCount != 0
        {
                if (__highlightedItemIndex < __itemCount)
                {
                        if(__pItems.at(__highlightedItemIndex))
                        {
-                               if(__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                {
-                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                        __pItems.at(__highlightedItemIndex)->Invalidate();
                                }
-                               else
-                               {
-                                       __highlightedItemIndex++;
-                                       OnFocusGained(source);
-                               }
                        }
                }
                else
@@ -3974,58 +3923,38 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
                                        {
                                                if (__pButtonItems[MENU_BUTTON])
                                                {
-                                                       if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                                __pButtonItems[MENU_BUTTON]->Invalidate();
                                                        }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
                                                }
                                                else if (__pButtonItems[LEFT_BUTTON])
                                                {
-                                                       if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                                __pButtonItems[LEFT_BUTTON]->Invalidate();
                                                        }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
                                                }
                                        }
                                        else if (__highlightedItemIndex == __itemCount + 1)
                                        {
                                                if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                                __pButtonItems[BACK_BUTTON]->Invalidate();
                                                        }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                                __pButtonItems[RIGHT_BUTTON]->Invalidate();
                                                        }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
                                                }
                                        }
                                }
@@ -4035,29 +3964,19 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
                                        {
                                                if (__pButtonItems[MENU_BUTTON])
                                                {
-                                                       if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                                __pButtonItems[MENU_BUTTON]->Invalidate();
                                                        }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
                                                }
                                                else if (__pButtonItems[LEFT_BUTTON])
                                                {
-                                                       if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                                __pButtonItems[LEFT_BUTTON]->Invalidate();
                                                        }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
                                                }
                                        }
                                }
@@ -4070,768 +3989,453 @@ _Toolbar::OnHeaderFocusGained(const _Control& source)
                                        {
                                                if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                                __pButtonItems[BACK_BUTTON]->Invalidate();
                                                        }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
                                                                __pButtonItems[RIGHT_BUTTON]->Invalidate();
                                                        }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
                                                }
                                        }
                                }
                        }
                }
+
+               int selectedItemIndex = GetSelectedItemIndex();
+
+               if(selectedItemIndex != -1 && __pItems.at(selectedItemIndex))
+               {
+                       if (__pItems.at(selectedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                       {
+                               __pItems.at(selectedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                               __pItems.at(selectedItemIndex)->Invalidate();
+                       }
+               }
        }
 
-       return E_SUCCESS;
+       return true;
 }
 
-result
-_Toolbar::OnFooterFocusGained(const _Control& source)
+bool
+_Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
 {
-       if (__itemCount == 0)
+       _KeyCode keyCode = keyInfo.GetKeyCode();
+
+       int selectedItemIndex  = GetSelectedItemIndex();
+
+       if (keyCode == _KEY_RIGHT)
        {
-               if (__pButtonItems[LEFT_BUTTON] || __pButtonItems[MENU_BUTTON])
+               __highlighted = false;
+
+               if (__header == true && __style != TOOLBAR_TEXT) // right align
                {
-                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
+                       if (__itemCount != 0)
                        {
-                               if (__highlightedItemIndex == __itemCount)
+                               if (__highlightedItemIndex < (__itemCount - 1)) // 0,1
                                {
-                                       if (__pButtonItems[MENU_BUTTON])
+                                       if (__pItems.at(__highlightedItemIndex) != null)
                                        {
-                                               if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__highlightedItemIndex == selectedItemIndex)
                                                {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       }
                                                }
                                                else
                                                {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       }
                                                }
-                                       }
-                                       else if (__pButtonItems[LEFT_BUTTON])
-                                       {
-                                               if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+
+                                               __highlightedItemIndex++;
+
+                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                       __highlighted = true;
+
+                                                       if (__highlightedItemIndex - __pToolbarPresenter->GetFirstLoadedItemIndex() == SEGMENTED_ITEM_MAX)
+                                                       {
+                                                               if (__style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
+                                                               {
+                                                                       __pToolbarPresenter->SetItemFit(__highlightedItemIndex - (SEGMENTED_ITEM_MAX - 1));
+                                                               }
+                                                       }
                                                }
                                                else
                                                {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
+                                                       OnKeyReleased(source, keyInfo);
                                                }
                                        }
                                }
-                               else if (__highlightedItemIndex == __itemCount + 1)
+                               else // 2, L, R, B,
                                {
-                                       if (__pButtonItems[BACK_BUTTON])
+                                       if (__pButtonItems[LEFT_BUTTON] || __pButtonItems[RIGHT_BUTTON])
                                        {
-                                               if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                               {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
-                                               }
-                                               else
+                                               if (__highlightedItemIndex == __itemCount - 1)
                                                {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
+                                                       if (__pItems.at(__highlightedItemIndex) != null)
+                                                       {
+                                                               if (__highlightedItemIndex == selectedItemIndex)
+                                                               {
+                                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                                       {
+                                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                                       }
+                                                               }
+                                                               else
+                                                               {
+                                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                                       {
+                                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                                       }
+                                                               }
+                                                       }
                                                }
                                        }
-                                       else if (__pButtonItems[RIGHT_BUTTON])
+
+                                       if (__pButtonItems[LEFT_BUTTON])
                                        {
-                                               if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                       if (__highlightedItemIndex == __itemCount - 1)
+                                                       {
+                                                               __highlightedItemIndex++;
+
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       OnKeyReleased(source, keyInfo);
+                                                               }
+                                                       }
+                                                       else if (__highlightedItemIndex == __itemCount)
+                                                       {
+                                                               __highlightedItemIndex++;
+
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                               }
+
+                                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       OnKeyReleased(source, keyInfo);
+                                                               }
+                                                       }
                                                }
                                                else
                                                {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
+                                                       if (__highlightedItemIndex == __itemCount - 1)
+                                                       {
+                                                               __highlightedItemIndex++;
+
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       OnKeyReleased(source, keyInfo);
+                                                               }
+                                                       }
                                                }
                                        }
-                               }
-                       }
-                       else
-                       {
-                               if (__highlightedItemIndex == __itemCount)
-                               {
-                                       if (__pButtonItems[MENU_BUTTON])
+                                       else
                                        {
-                                               if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                               {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
-                                               }
-                                               else
+                                               if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
+                                                       if (__highlightedItemIndex == __itemCount - 1)
+                                                       {
+                                                               __highlightedItemIndex++;
+
+                                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       OnKeyReleased(source, keyInfo);
+                                                               }
+                                                       }
                                                }
                                        }
-                                       else if (__pButtonItems[LEFT_BUTTON])
+                               }
+
+                               if (__highlighted == false)
+                               {
+                                       __highlightedItemIndex = __lastHighlightedItemIndex;
+
+                                       if (__highlightedItemIndex < __itemCount)
                                        {
-                                               if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__pItems.at(__highlightedItemIndex))
                                                {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                               }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
-                                       }
-                               }
-                       }
-               }
-               else
-               {
-                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                       {
-                               if (__highlightedItemIndex == __itemCount)
-                               {
-                                       if (__pButtonItems[BACK_BUTTON])
-                                       {
-                                               if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                               {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
-                                               }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
-                                       }
-                                       else if (__pButtonItems[RIGHT_BUTTON])
-                                       {
-                                               if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                               {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
-                                               }
-                                               else
-                                               {
-                                                       __highlightedItemIndex++;
-                                                       OnFocusGained(source);
-                                               }
-                                       }
-                               }
-                       }
-               }
-       }
-       else
-       {
-               if (__highlightedItemIndex < __itemCount)
-               {
-                       if(__pItems.at(__highlightedItemIndex))
-                       {
-                               if(__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                               {
-                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                       __pItems.at(__highlightedItemIndex)->Invalidate();
-                               }
-                               else
-                               {
-                                       __highlightedItemIndex++;
-                                       OnFocusGained(source);
-                               }
-                       }
-               }
-               else
-               {
-                       if (__pButtonItems[LEFT_BUTTON] || __pButtonItems[MENU_BUTTON])
-                       {
-                               if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                               {
-                                       if (__highlightedItemIndex == __itemCount)
-                                       {
-                                               if (__pButtonItems[MENU_BUTTON])
-                                               {
-                                                       if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                               __pButtonItems[MENU_BUTTON]->Invalidate();
-                                                       }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
-                                               }
-                                               else if (__pButtonItems[LEFT_BUTTON])
-                                               {
-                                                       if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                       }
-                                                       else
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
                                                }
                                        }
-                                       else if (__highlightedItemIndex == __itemCount + 1)
+                                       else if (__highlightedItemIndex == __itemCount)
                                        {
-                                               if (__pButtonItems[BACK_BUTTON])
+                                               if (__pButtonItems[LEFT_BUTTON])
                                                {
-                                                       if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                                       }
-                                                       else
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
-                                                       }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
                                                }
                                        }
-                               }
-                               else
-                               {
-                                       if (__highlightedItemIndex == __itemCount)
+                                       else if (__highlightedItemIndex == __itemCount + 1)
                                        {
-                                               if (__pButtonItems[MENU_BUTTON])
-                                               {
-                                                       if(__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                               __pButtonItems[MENU_BUTTON]->Invalidate();
-                                                       }
-                                                       else
-                                                       {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
-                                                       }
-                                               }
-                                               else if (__pButtonItems[LEFT_BUTTON])
+                                               if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       if(__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                       }
-                                                       else
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
                                                }
                                        }
+
+                                       __highlighted = true;
                                }
                        }
-                       else
+                       else // itemCount == 0
                        {
-                               if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
+                               if (__pButtonItems[LEFT_BUTTON])
                                {
-                                       if (__highlightedItemIndex == __itemCount)
+                                       if (__pButtonItems[RIGHT_BUTTON])
                                        {
-                                               if (__pButtonItems[BACK_BUTTON])
+                                               if (__highlightedItemIndex == 0)
                                                {
-                                                       if(__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                                       }
-                                                       else
+                                                       __highlightedItemIndex++;
+
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
                                                        }
-                                               }
-                                               else if (__pButtonItems[RIGHT_BUTTON])
-                                               {
-                                                       if(__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                        else
                                                        {
-                                                               __highlightedItemIndex++;
-                                                               OnFocusGained(source);
+                                                               OnKeyReleased(source, keyInfo);
                                                        }
                                                }
                                        }
                                }
-                       }
-               }
-       }
-
-       return E_SUCCESS;
-}
 
-#endif
-
-bool
-_Toolbar::OnFocusLost(const _Control& source)
-{
-       if (__itemCount == 0)
-       {
-               if (__pButtonItems[LEFT_BUTTON] || __pButtonItems[MENU_BUTTON])
-               {
-                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                       {
-                               if (__highlightedItemIndex == __itemCount)
-                               {
-                                       if (__pButtonItems[MENU_BUTTON])
-                                       {
-                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[MENU_BUTTON]->Invalidate();
-                                       }
-                                       else if (__pButtonItems[LEFT_BUTTON])
-                                       {
-                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                       }
-                               }
-                               else if (__highlightedItemIndex == __itemCount + 1)
-                               {
-                                       if (__pButtonItems[BACK_BUTTON])
-                                       {
-                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                       }
-                                       else if (__pButtonItems[RIGHT_BUTTON])
-                                       {
-                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
-                                       }
-                               }
-                       }
-                       else
-                       {
-                               if (__highlightedItemIndex == __itemCount)
-                               {
-                                       if (__pButtonItems[MENU_BUTTON])
-                                       {
-                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[MENU_BUTTON]->Invalidate();
-                                       }
-                                       else if (__pButtonItems[LEFT_BUTTON])
-                                       {
-                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                       }
-                               }
-                       }
-               }
-               else
-               {
-                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                       {
-                               if (__highlightedItemIndex == __itemCount)
-                               {
-                                       if (__pButtonItems[BACK_BUTTON])
-                                       {
-                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                       }
-                                       else if (__pButtonItems[RIGHT_BUTTON])
-                                       {
-                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
-                                       }
-                               }
-                       }
-               }
-       }
-       else // __itemCount != 0
-       {
-               if (__highlightedItemIndex < __itemCount)
-               {
-                       if(__pItems.at(__highlightedItemIndex))
-                       {
-                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                               __pItems.at(__highlightedItemIndex)->Invalidate();
-                       }
-               }
-               else
-               {
-                       if (__pButtonItems[LEFT_BUTTON] || __pButtonItems[MENU_BUTTON])
-                       {
-                               if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
+                               if (__highlighted == false)
                                {
+                                       __highlightedItemIndex = __lastHighlightedItemIndex;
+
                                        if (__highlightedItemIndex == __itemCount)
                                        {
-                                               if (__pButtonItems[MENU_BUTTON])
-                                               {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
-                                               }
-                                               else if (__pButtonItems[LEFT_BUTTON])
-                                               {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                               }
-                                       }
-                                       else if (__highlightedItemIndex == __itemCount + 1)
-                                       {
-                                               if (__pButtonItems[BACK_BUTTON])
+                                               if (__pButtonItems[LEFT_BUTTON])
                                                {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
-                                               }
-                                       }
-                               }
-                               else
-                               {
-                                       if (__highlightedItemIndex == __itemCount)
-                                       {
-                                               if (__pButtonItems[MENU_BUTTON])
-                                               {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
-                                               }
-                                               else if (__pButtonItems[LEFT_BUTTON])
-                                               {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
                                                }
                                        }
-                               }
-                       }
-                       else
-                       {
-                               if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                               {
-                                       if (__highlightedItemIndex == __itemCount)
+                                       else if (__highlightedItemIndex == __itemCount + 1)
                                        {
-                                               if (__pButtonItems[BACK_BUTTON])
+                                               if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
-                                               }
-                                               else if (__pButtonItems[RIGHT_BUTTON])
-                                               {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
                                                }
                                        }
+
+                                       __highlighted = true;
                                }
                        }
                }
-
-               int selectedItemIndex = GetSelectedItemIndex();
-
-               if(selectedItemIndex != -1 && __pItems.at(selectedItemIndex))
-               {
-                       __pItems.at(selectedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                       __pItems.at(selectedItemIndex)->Invalidate();
-               }
-       }
-
-       return true;
-}
-
-bool
-_Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
-{
-       _KeyCode keyCode = keyInfo.GetKeyCode();
-
-       int selectedItemIndex  = GetSelectedItemIndex();
-
-       if (keyCode == _KEY_RIGHT)
-       {
-               if (__header == true && __style != TOOLBAR_TEXT) // right align
+               else // footer // right key
                {
                        if (__itemCount != 0)
                        {
-                               if (__highlightedItemIndex < (__itemCount - 1)) // 0,1
+                               if (__pButtonItems[LEFT_BUTTON] || __pButtonItems[MENU_BUTTON])
                                {
-                                       if (__pItems.at(__highlightedItemIndex) != null)
+                                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON]) // L Item  R
                                        {
-                                               if (__highlightedItemIndex == selectedItemIndex)
-                                               {
-                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
-                                                       }
-                                               }
-                                               else
-                                               {
-                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                       {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
-                                                       }
-                                               }
-
-                                               __highlightedItemIndex++;
-
-                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               if (__highlightedItemIndex == __itemCount)
                                                {
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
-
-                                                       if (__highlightedItemIndex - __pToolbarPresenter->GetFirstLoadedItemIndex() == SEGMENTED_ITEM_MAX)
+                                                       if (__pButtonItems[MENU_BUTTON])
                                                        {
-                                                               if (__style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
+                                                               if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                                {
-                                                                       __pToolbarPresenter->SetItemFit(__highlightedItemIndex - (SEGMENTED_ITEM_MAX - 1));
+                                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
                                                                }
                                                        }
-                                               }
-                                               else
-                                               {
-                                                       OnKeyReleased(source, keyInfo);
-                                               }
-                                       }
-                               }
-                               else // 2, L, R, B,
-                               {
-                                       if (__pButtonItems[LEFT_BUTTON] || __pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                                       {
-                                               if (__highlightedItemIndex == __itemCount - 1)
-                                               {
-                                                       if (__pItems.at(__highlightedItemIndex) != null)
+                                                       else if (__pButtonItems[LEFT_BUTTON])
                                                        {
-                                                               if (__highlightedItemIndex == selectedItemIndex)
-                                                               {
-                                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
-                                                                       }
-                                                               }
-                                                               else
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                                {
-                                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
-                                                                       }
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
                                                                }
                                                        }
-                                               }
-                                       }
-
-                                       if (__pButtonItems[LEFT_BUTTON])
-                                       {
-                                               if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                                               {
-                                                       if (__pButtonItems[BACK_BUTTON])
-                                                       {
-                                                               if (__highlightedItemIndex == __itemCount - 1)
-                                                               {
-                                                                       __highlightedItemIndex++;
 
-                                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               OnKeyReleased(source, keyInfo);
-                                                                       }
-                                                               }
-                                                               else if (__highlightedItemIndex == __itemCount)
-                                                               {
-                                                                       __highlightedItemIndex++;
+                                                       __highlightedItemIndex = 0;
 
-                                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                                       }
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
 
-                                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               OnKeyReleased(source, keyInfo);
-                                                                       }
-                                                               }
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
-                                                       else if (__pButtonItems[RIGHT_BUTTON])
+                                                       else
                                                        {
-                                                               if (__highlightedItemIndex == __itemCount - 1)
-                                                               {
-                                                                       __highlightedItemIndex++;
-
-                                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               OnKeyReleased(source, keyInfo);
-                                                                       }
-                                                               }
-                                                               else if (__highlightedItemIndex == __itemCount)
-                                                               {
-                                                                       __highlightedItemIndex++;
-
-                                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                                       }
-
-                                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               OnKeyReleased(source, keyInfo);
-                                                                       }
-                                                               }
+                                                               OnKeyReleased(source, keyInfo);
                                                        }
                                                }
-                                               else
+                                               else if (__highlightedItemIndex < __itemCount - 1)
                                                {
-                                                       if (__highlightedItemIndex == __itemCount - 1)
+                                                       if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __highlightedItemIndex++;
-
-                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                                {
-                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                               }
-                                                               else
-                                                               {
-                                                                       OnKeyReleased(source, keyInfo);
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
                                                                }
                                                        }
-                                               }
-                                       }
-                                       else
-                                       {
-                                               if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                                               {
-                                                       if (__pButtonItems[BACK_BUTTON])
+                                                       else
                                                        {
-                                                               if (__highlightedItemIndex == __itemCount - 1)
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                                {
-                                                                       __highlightedItemIndex++;
-
-                                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               OnKeyReleased(source, keyInfo);
-                                                                       }
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
                                                                }
                                                        }
-                                                       else if (__pButtonItems[RIGHT_BUTTON])
+
+                                                       __highlightedItemIndex++;
+
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               if (__highlightedItemIndex == __itemCount - 1)
-                                                               {
-                                                                       __highlightedItemIndex++;
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
 
-                                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                                       {
-                                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
-                                                                       }
-                                                                       else
-                                                                       {
-                                                                               OnKeyReleased(source, keyInfo);
-                                                                       }
-                                                               }
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
+                                                       else
+                                                       {
+                                                               OnKeyReleased(source, keyInfo);
                                                        }
                                                }
-                                       }
-                               }
-                       }
-                       else // itemCount == 0
-                       {
-                               if (__pButtonItems[LEFT_BUTTON])
-                               {
-                                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
-                                       {
-                                               if (__pButtonItems[BACK_BUTTON])
+                                               else if (__highlightedItemIndex == __itemCount -1)
                                                {
-                                                       if (__highlightedItemIndex == 0)
+                                                       if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __highlightedItemIndex++;
-
-                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                                {
-                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
+                                                       }
+                                                       else
+                                                       {
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
                                                                }
+                                                       }
 
+                                                       __highlightedItemIndex = __itemCount + 1;
+
+                                                       if (__pButtonItems[BACK_BUTTON])
+                                                       {
                                                                if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                                {
                                                                        __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                        __pButtonItems[BACK_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
                                                                }
                                                                else
                                                                {
                                                                        OnKeyReleased(source, keyInfo);
                                                                }
                                                        }
-                                               }
-                                               else if (__pButtonItems[RIGHT_BUTTON])
-                                               {
-                                                       if (__highlightedItemIndex == 0)
+                                                       else if (__pButtonItems[RIGHT_BUTTON])
                                                        {
-                                                               __highlightedItemIndex++;
-
-                                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
-                                                               {
-                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
-                                                               }
-
                                                                if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                                {
                                                                        __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                        __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
                                                                }
                                                                else
                                                                {
@@ -4840,198 +4444,280 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                                        }
                                                }
                                        }
-                               }
-                       }
-               }
-               else // footer // right key
-               {
-                       if (__itemCount != 0)
-                       {
-                               if (__pButtonItems[LEFT_BUTTON] || __pButtonItems[MENU_BUTTON])
-                               {
-                                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON]) // L Item  R
+                                       else  // L, M  Item
                                        {
                                                if (__highlightedItemIndex == __itemCount)
                                                {
                                                        if (__pButtonItems[MENU_BUTTON])
                                                        {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                               }
                                                        }
                                                        else if (__pButtonItems[LEFT_BUTTON])
                                                        {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex = 0;
 
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
-                                               }
-                                               else if (__highlightedItemIndex < __itemCount - 1)
-                                               {
-                                                       if (__highlightedItemIndex == selectedItemIndex)
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                        else
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               OnKeyReleased(source, keyInfo);
                                                        }
-
-                                                       __highlightedItemIndex++;
-
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
                                                }
-                                               else if (__highlightedItemIndex == __itemCount -1)
+                                               else if (__highlightedItemIndex < __itemCount - 1)
                                                {
                                                        if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
                                                        else
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
 
-                                                       __highlightedItemIndex = __itemCount + 1;
+                                                       __highlightedItemIndex++;
 
-                                                       if (__pButtonItems[BACK_BUTTON])
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
-                                                       else if (__pButtonItems[RIGHT_BUTTON])
+                                                       else
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                               OnKeyReleased(source, keyInfo);
                                                        }
                                                }
                                        }
-                                       else  // L  Item
+                               }
+                               else // L is null
+                               {
+                                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON]) // Item  R, B
                                        {
-                                               if (__highlightedItemIndex == __itemCount)
+                                               if (__highlightedItemIndex < __itemCount - 1)
                                                {
-                                                       if (__pButtonItems[MENU_BUTTON])
+                                                       if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
-                                                       else if (__pButtonItems[LEFT_BUTTON])
+                                                       else
                                                        {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
 
-                                                       __highlightedItemIndex = 0;
+                                                       __highlightedItemIndex++;
 
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
+                                                       else
+                                                       {
+                                                               OnKeyReleased(source, keyInfo);
+                                                       }
                                                }
-                                               else if (__highlightedItemIndex < __itemCount - 1)
+                                               else if (__highlightedItemIndex == __itemCount -1)
                                                {
                                                        if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
                                                        else
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex++;
 
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       if (__pButtonItems[BACK_BUTTON])
+                                                       {
+                                                               if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       OnKeyReleased(source, keyInfo);
+                                                               }
+                                                       }
+                                                       else if (__pButtonItems[RIGHT_BUTTON])
+                                                       {
+                                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       OnKeyReleased(source, keyInfo);
+                                                               }
+                                                       }
                                                }
                                        }
-                               }
-                               else // L is null
-                               {
-                                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON]) // Item  R
+                                       else  // Item
                                        {
                                                if (__highlightedItemIndex < __itemCount - 1)
                                                {
                                                        if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
                                                        else
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex++;
 
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+
+                                                               if (__highlightedItemIndex - __pToolbarPresenter->GetFirstLoadedItemIndex() == SEGMENTED_ITEM_MAX)
+                                                               {
+                                                                       if (__style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
+                                                                       {
+                                                                               __pToolbarPresenter->SetItemFit(__highlightedItemIndex - (SEGMENTED_ITEM_MAX - 1));
+                                                                       }
+                                                               }
+                                                       }
+                                                       else
+                                                       {
+                                                               OnKeyReleased(source, keyInfo);
+                                                       }
                                                }
-                                               else if (__highlightedItemIndex == __itemCount -1)
+                                       }
+                               }
+
+                               if (__highlighted == false)
+                               {
+                                       __highlightedItemIndex = __lastHighlightedItemIndex;
+
+                                       if (__highlightedItemIndex < __itemCount)
+                                       {
+                                               if (__pItems.at(__highlightedItemIndex))
                                                {
-                                                       if (__highlightedItemIndex == selectedItemIndex)
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                       }
+                                       else if (__highlightedItemIndex == __itemCount)
+                                       {
+                                               if (__pButtonItems[MENU_BUTTON])
+                                               {
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
-                                                       else
+                                               }
+                                               else if (__pButtonItems[LEFT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
-
-                                                       __highlightedItemIndex++;
-
-                                                       if (__pButtonItems[BACK_BUTTON])
+                                               }
+                                               else if (__pButtonItems[BACK_BUTTON])
+                                               {
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
                                                                __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
                                                        }
-                                                       else if (__pButtonItems[RIGHT_BUTTON])
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
                                                                __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
                                                        }
                                                }
                                        }
-                                       else  // Item
+                                       else if (__highlightedItemIndex == __itemCount + 1)
                                        {
-                                               if (__highlightedItemIndex < __itemCount - 1)
+                                               if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       if (__highlightedItemIndex == selectedItemIndex)
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
-                                                       }
-                                                       else
-                                                       {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
-
-                                                       __highlightedItemIndex++;
-
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
-
-                                                       if (__highlightedItemIndex - __pToolbarPresenter->GetFirstLoadedItemIndex() == SEGMENTED_ITEM_MAX)
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               if (__style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
-                                                               {
-                                                                       __pToolbarPresenter->SetItemFit(__highlightedItemIndex - (SEGMENTED_ITEM_MAX - 1));
-                                                               }
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
                                                }
                                        }
+
+                                       __highlighted = true;
                                }
                        }
                        else // __itemCount = 0
@@ -5046,27 +4732,109 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
 
                                                        if (__pButtonItems[MENU_BUTTON])
                                                        {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                               }
                                                        }
                                                        else if (__pButtonItems[LEFT_BUTTON])
                                                        {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                               }
                                                        }
 
                                                        if (__pButtonItems[BACK_BUTTON])
                                                        {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       OnKeyReleased(source, keyInfo);
+                                                               }
                                                        }
                                                        else if (__pButtonItems[RIGHT_BUTTON])
                                                        {
+                                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       OnKeyReleased(source, keyInfo);
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               if (__highlighted == false)
+                               {
+                                       __highlightedItemIndex = __lastHighlightedItemIndex;
+
+                                       if (__highlightedItemIndex == __itemCount)
+                                       {
+                                               if (__pButtonItems[MENU_BUTTON])
+                                               {
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[LEFT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[BACK_BUTTON])
+                                               {
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
                                                                __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
                                                        }
                                                }
                                        }
+                                       else if (__highlightedItemIndex == __itemCount + 1)
+                                       {
+                                               if (__pButtonItems[BACK_BUTTON])
+                                               {
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                       }
+
+                                       __highlighted = true;
                                }
                        }
                }
@@ -5074,6 +4842,8 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
 
        if (keyCode == _KEY_LEFT)
        {
+               __highlighted = false;
+
                if (__header == true && __style != TOOLBAR_TEXT) // right align
                {
                        if (__itemCount != 0)
@@ -5084,17 +4854,25 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
 
                                        if (__pButtonItems[RIGHT_BUTTON])
                                        {
-                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               {
+                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                               }
                                        }
-                                       else if (__pButtonItems[BACK_BUTTON])
+
+                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                        {
-                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[BACK_BUTTON]->Invalidate();
-                                       }
+                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
 
-                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                               __highlighted = true;
+                                       }
+                                       else
+                                       {
+                                               OnKeyReleased(source, keyInfo);
+                                       }
                                }
                                else if (__highlightedItemIndex == __itemCount)
                                {
@@ -5102,22 +4880,33 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
 
                                        if (__pButtonItems[LEFT_BUTTON])
                                        {
-                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               {
+                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                               }
                                        }
                                        else if (__pButtonItems[RIGHT_BUTTON])
                                        {
-                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               {
+                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                               }
+                                       }
+
+                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                       {
+                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                               __highlighted = true;
                                        }
-                                       else if (__pButtonItems[BACK_BUTTON])
+                                       else
                                        {
-                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[BACK_BUTTON]->Invalidate();
+                                               OnKeyReleased(source, keyInfo);
                                        }
-
-                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                       __pItems.at(__highlightedItemIndex)->Invalidate();
                                }
                                else if (__highlightedItemIndex > 0)
                                {
@@ -5125,49 +4914,153 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                        {
                                                if (__highlightedItemIndex == selectedItemIndex)
                                                {
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       }
                                                }
                                                else
                                                {
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       }
                                                }
 
                                                __highlightedItemIndex--;
 
-                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               {
+                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                       __highlighted = true;
+
+                                                       if (__pToolbarPresenter->GetFirstLoadedItemIndex() > __highlightedItemIndex)
+                                                       {
+                                                               if (__style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
+                                                               {
+                                                                       __pToolbarPresenter->SetItemFit(__highlightedItemIndex);
+                                                               }
+                                                       }
+                                               }
+                                               else
+                                               {
+                                                       OnKeyReleased(source, keyInfo);
+                                               }
+                                       }
+                               }
+
+                               if (__highlighted == false)
+                               {
+                                       __highlightedItemIndex = __lastHighlightedItemIndex;
 
-                                               if (__pToolbarPresenter->GetFirstLoadedItemIndex() > __highlightedItemIndex)
+                                       if (__highlightedItemIndex < __itemCount)
+                                       {
+                                               if (__pItems.at(__highlightedItemIndex))
+                                               {
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                       }
+                                       else if (__highlightedItemIndex == __itemCount)
+                                       {
+                                               if (__pButtonItems[LEFT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                       }
+                                       else if (__highlightedItemIndex == __itemCount + 1)
+                                       {
+                                               if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       if (__style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pToolbarPresenter->SetItemFit(__highlightedItemIndex);
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
                                                }
                                        }
+
+                                       __highlighted = true;
+                               }
+                       }
+                       else // __itemCount == 0
+                       {
+                               if (__highlightedItemIndex == __itemCount + 1)
+                               {
+                                       __highlightedItemIndex--;
+
+                                       if (__pButtonItems[RIGHT_BUTTON])
+                                       {
+                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                               {
+                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                               }
+                                       }
+
+                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                       {
+                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
+
+                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                               __highlighted = true;
+                                       }
+                                       else
+                                       {
+                                               OnKeyReleased(source, keyInfo);
+                                       }
                                }
-                       }
-                       else // __itemCount == 0
-                       {
-                               if (__highlightedItemIndex == __itemCount + 1)
+
+                               if (__highlighted == false)
                                {
-                                       __highlightedItemIndex--;
+                                       __highlightedItemIndex = __lastHighlightedItemIndex;
 
-                                       if (__pButtonItems[RIGHT_BUTTON])
+                                       if (__highlightedItemIndex == __itemCount)
                                        {
-                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                               if (__pButtonItems[LEFT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
                                        }
-                                       else if (__pButtonItems[BACK_BUTTON])
+                                       else if (__highlightedItemIndex == __itemCount + 1)
                                        {
-                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                               __pButtonItems[BACK_BUTTON]->Invalidate();
+                                               if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
                                        }
 
-                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                       __highlighted = true;
                                }
                        }
                }
@@ -5183,191 +5076,405 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                                {
                                                        if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
                                                        else
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex = __itemCount;
 
                                                        if (__pButtonItems[MENU_BUTTON])
                                                        {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       //empty
+                                                               }
                                                        }
                                                        else if (__pButtonItems[LEFT_BUTTON])
                                                        {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       //empty
+                                                               }
                                                        }
                                                }
                                                else if (__highlightedItemIndex < __itemCount)
                                                {
                                                        if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
                                                        else
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex--;
 
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
+                                                       else
+                                                       {
+                                                               OnKeyReleased(source, keyInfo);
+                                                       }
                                                }
                                                else if (__highlightedItemIndex == __itemCount + 1)
                                                {
                                                        if (__pButtonItems[BACK_BUTTON])
                                                        {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                               }
                                                        }
                                                        else if (__pButtonItems[RIGHT_BUTTON])
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex = __itemCount - 1;
 
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
+                                                       else
+                                                       {
+                                                               OnKeyReleased(source, keyInfo);
+                                                       }
                                                }
                                        }
-                                       else  // L  Item
+                                       else  // L, M  Item
                                        {
                                                if (__highlightedItemIndex == 0)
                                                {
                                                        if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
                                                        else
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex = __itemCount;
 
                                                        if (__pButtonItems[MENU_BUTTON])
                                                        {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       //empty
+                                                               }
                                                        }
                                                        else if (__pButtonItems[LEFT_BUTTON])
                                                        {
-                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       //empty
+                                                               }
                                                        }
                                                }
                                                else if (__highlightedItemIndex < __itemCount)
                                                {
                                                        if (__highlightedItemIndex == selectedItemIndex)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
+                                                       }
+                                                       else
+                                                       {
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
+                                                       }
+
+                                                       __highlightedItemIndex--;
+
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
                                                        }
                                                        else
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                               OnKeyReleased(source, keyInfo);
+                                                       }
+                                               }
+                                       }
+                               }
+                               else // L is null
+                               {
+                                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON]) // Item  R
+                                       {
+                                               if (__highlightedItemIndex == 0)
+                                               {
+                                                       // empty
+                                               }
+                                               else if (__highlightedItemIndex < __itemCount)
+                                               {
+                                                       if (__highlightedItemIndex == selectedItemIndex)
+                                                       {
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
+                                                       }
+                                                       else
+                                                       {
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
+                                                       }
+
+                                                       __highlightedItemIndex--;
+
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
+                                                       else
+                                                       {
+                                                               OnKeyReleased(source, keyInfo);
+                                                       }
+                                               }
+                                               else if (__highlightedItemIndex == __itemCount)
+                                               {
+                                                       if (__pButtonItems[BACK_BUTTON])
+                                                       {
+                                                               if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                               }
+                                                       }
+                                                       else if (__pButtonItems[RIGHT_BUTTON])
+                                                       {
+                                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                               }
+                                                       }
+
+                                                       __highlightedItemIndex--;
+
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                                __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
+                                                       else
+                                                       {
+                                                               OnKeyReleased(source, keyInfo);
+                                                       }
+                                               }
+                                       }
+                                       else // Item
+                                       {
+                                               if (__highlightedItemIndex == 0)
+                                               {
+                                                       // empty
+                                               }
+                                               else if (__highlightedItemIndex < __itemCount)
+                                               {
+                                                       if (__highlightedItemIndex == selectedItemIndex)
+                                                       {
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
+                                                       }
+                                                       else
+                                                       {
+                                                               if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex--;
 
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+
+                                                               if (__pToolbarPresenter->GetFirstLoadedItemIndex() > __highlightedItemIndex)
+                                                               {
+                                                                       if (__style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
+                                                                       {
+                                                                               __pToolbarPresenter->SetItemFit(__highlightedItemIndex);
+                                                                       }
+                                                               }
+                                                       }
+                                                       else
+                                                       {
+                                                               OnKeyReleased(source, keyInfo);
+                                                       }
                                                }
                                        }
                                }
-                               else // L is null
+
+                               if (__highlighted == false)
                                {
-                                       if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON]) // Item  R
+                                       __highlightedItemIndex = __lastHighlightedItemIndex;
+
+                                       if (__highlightedItemIndex < __itemCount)
                                        {
-                                               if (__highlightedItemIndex == 0)
+                                               if (__pItems.at(__highlightedItemIndex))
                                                {
-                                                       // empty
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
                                                }
-                                               else if (__highlightedItemIndex < __itemCount)
+                                       }
+                                       else if (__highlightedItemIndex == __itemCount)
+                                       {
+                                               if (__pButtonItems[MENU_BUTTON])
                                                {
-                                                       if (__highlightedItemIndex == selectedItemIndex)
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
-                                                       else
+                                               }
+                                               else if (__pButtonItems[LEFT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
-
-                                                       __highlightedItemIndex--;
-
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
                                                }
-                                               else if (__highlightedItemIndex == __itemCount)
+                                               else if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       if (__pButtonItems[BACK_BUTTON])
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
-                                                       else if (__pButtonItems[RIGHT_BUTTON])
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
-
-                                                       __highlightedItemIndex--;
-
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
                                                }
                                        }
-                                       else // Item
+                                       else if (__highlightedItemIndex == __itemCount + 1)
                                        {
-                                               if (__highlightedItemIndex == 0)
-                                               {
-                                                       // empty
-                                               }
-                                               else if (__highlightedItemIndex < __itemCount)
+                                               if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       if (__highlightedItemIndex == selectedItemIndex)
-                                                       {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_SELECTED, false);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
-                                                       }
-                                                       else
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pItems.at(__highlightedItemIndex)->Invalidate();
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
-
-                                                       __highlightedItemIndex--;
-
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                       __pItems.at(__highlightedItemIndex)->Invalidate();
-
-                                                       if (__pToolbarPresenter->GetFirstLoadedItemIndex() > __highlightedItemIndex)
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
                                                        {
-                                                               if (__style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
-                                                               {
-                                                                       __pToolbarPresenter->SetItemFit(__highlightedItemIndex);
-                                                               }
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
                                                }
                                        }
+
+                                       __highlighted = true;
                                }
                        }
                        else // __itemCount == 0
@@ -5376,33 +5483,115 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                {
                                        if (__pButtonItems[RIGHT_BUTTON] || __pButtonItems[BACK_BUTTON])
                                        {
-                                               if (__highlightedItemIndex == __itemCount)
+                                               if (__highlightedItemIndex == __itemCount + 1)
                                                {
                                                        if (__pButtonItems[BACK_BUTTON])
                                                        {
-                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[BACK_BUTTON]->Invalidate();
+                                                               }
                                                        }
                                                        else if (__pButtonItems[RIGHT_BUTTON])
                                                        {
-                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
-                                                               __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_NORMAL);
+                                                                       __pButtonItems[RIGHT_BUTTON]->Invalidate();
+                                                               }
                                                        }
 
                                                        __highlightedItemIndex--;
 
                                                        if (__pButtonItems[MENU_BUTTON])
                                                        {
-                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[MENU_BUTTON]->Invalidate();
+                                                               if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[MENU_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       //empty
+                                                               }
                                                        }
                                                        else if (__pButtonItems[LEFT_BUTTON])
                                                        {
+                                                               if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                               {
+                                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                                       __pButtonItems[LEFT_BUTTON]->Invalidate();
+
+                                                                       __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                                       __highlighted = true;
+                                                               }
+                                                               else
+                                                               {
+                                                                       //empty
+                                                               }
+                                                       }
+                                               }
+                                       }
+                               }
+
+                               if (__highlighted == false)
+                               {
+                                       __highlightedItemIndex = __lastHighlightedItemIndex;
+
+                                       if (__highlightedItemIndex == __itemCount)
+                                       {
+                                               if (__pButtonItems[MENU_BUTTON])
+                                               {
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[LEFT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
                                                                __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
-                                                               __pButtonItems[LEFT_BUTTON]->Invalidate();
+                                                       }
+                                               }
+                                               else if (__pButtonItems[BACK_BUTTON])
+                                               {
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                       }
+                                       else if (__highlightedItemIndex == __itemCount + 1)
+                                       {
+                                               if (__pButtonItems[BACK_BUTTON])
+                                               {
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
+                                                       }
+                                               }
+                                               else if (__pButtonItems[RIGHT_BUTTON])
+                                               {
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED, false);
                                                        }
                                                }
                                        }
+
+                                       __highlighted = true;
                                }
                        }
                }
@@ -5421,33 +5610,66 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                                if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
                                                                || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
                                                {
-                                                       SetItemHighlighted(__highlightedItemIndex, true, false);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               SetItemHighlighted(__highlightedItemIndex, true, false);
+                                                       }
                                                }
                                                else
                                                {
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                        else if (__highlightedItemIndex == __itemCount)
                                        {
                                                if (__pButtonItems[MENU_BUTTON])
                                                {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                                else if (__pButtonItems[LEFT_BUTTON])
                                                {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                        else if (__highlightedItemIndex == __itemCount + 1)
                                        {
                                                if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                }
@@ -5458,22 +5680,43 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                                if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
                                                                || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
                                                {
-                                                       SetItemHighlighted(__highlightedItemIndex, true, false);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               SetItemHighlighted(__highlightedItemIndex, true, false);
+                                                       }
                                                }
                                                else
                                                {
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                        else if (__highlightedItemIndex == __itemCount)
                                        {
                                                if (__pButtonItems[MENU_BUTTON])
                                                {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                                else if (__pButtonItems[LEFT_BUTTON])
                                                {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                }
@@ -5487,22 +5730,43 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                                if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
                                                                || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
                                                {
-                                                       SetItemHighlighted(__highlightedItemIndex, true, false);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               SetItemHighlighted(__highlightedItemIndex, true, false);
+                                                       }
                                                }
                                                else
                                                {
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                        else if (__highlightedItemIndex == __itemCount)
                                        {
                                                if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                }
@@ -5513,11 +5777,20 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                                if (__style == TOOLBAR_HEADER_SEGMENTED || __style ==TOOLBAR_HEADER_SEGMENTED_WITH_TITLE || __style == TOOLBAR_SEGMENTED
                                                                || __style == TOOLBAR_TAB || __style == TOOLBAR_TAB_WITH_TITLE)
                                                {
-                                                       SetItemHighlighted(__highlightedItemIndex, true, false);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               SetItemHighlighted(__highlightedItemIndex, true, false);
+                                                       }
                                                }
                                                else
                                                {
-                                                       __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pItems.at(__highlightedItemIndex)->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pItems.at(__highlightedItemIndex)->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                }
@@ -5533,22 +5806,46 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                        {
                                                if (__pButtonItems[MENU_BUTTON])
                                                {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                                else if (__pButtonItems[LEFT_BUTTON])
                                                {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                        else if (__highlightedItemIndex == 1)
                                        {
                                                if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                }
@@ -5558,11 +5855,23 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                        {
                                                if (__pButtonItems[MENU_BUTTON])
                                                {
-                                                       __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[MENU_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[MENU_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                                else if (__pButtonItems[LEFT_BUTTON])
                                                {
-                                                       __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[LEFT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[LEFT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                }
@@ -5575,11 +5884,23 @@ _Toolbar::OnKeyReleased(const _Control& source, const _KeyInfo& keyInfo)
                                        {
                                                if (__pButtonItems[BACK_BUTTON])
                                                {
-                                                       __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[BACK_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[BACK_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                                else if (__pButtonItems[RIGHT_BUTTON])
                                                {
-                                                       __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+                                                       if (__pButtonItems[RIGHT_BUTTON]->GetButtonStatus() != _BUTTON_STATUS_DISABLED)
+                                                       {
+                                                               __pButtonItems[RIGHT_BUTTON]->SetButtonStatus(_BUTTON_STATUS_HIGHLIGHTED);
+
+                                                               __lastHighlightedItemIndex = __highlightedItemIndex;
+                                                               __highlighted = true;
+                                                       }
                                                }
                                        }
                                }
index 1708689..765738e 100644 (file)
@@ -111,7 +111,6 @@ private:
        bool __needDraw;
        bool __previousEnabledState;
        bool __touchMoveHandled;
-       bool __lazyDocode;
 
        Tizen::Graphics::Font* __pFont;
        Tizen::Graphics::_Text::TextObject* __pTextObject;
index 4602cf5..d487bda 100644 (file)
@@ -95,7 +95,6 @@ private:
        _LabelModel* __pLabelModel;
 
        bool __previousEnabledState;
-       bool __lazyDocode;
 
        Tizen::Graphics::Font* __pFont;
        Tizen::Graphics::_Text::TextObject* __pTextObject;
index 3ee291f..b3f2e38 100644 (file)
@@ -535,6 +535,10 @@ private:
 
        int __highlightedItemIndex;
 
+       int __lastHighlightedItemIndex;
+
+       bool __highlighted;
+
        Tizen::Graphics::FloatRectangle __titleTextArea;
 
        Tizen::Graphics::FloatRectangle __itemArea;