OptionMenu FocusUi Issue Fix
authorvipul <vipul.kumar@samsung.com>
Thu, 27 Jun 2013 13:33:14 +0000 (19:03 +0530)
committervipul <vipul.kumar@samsung.com>
Wed, 3 Jul 2013 13:50:32 +0000 (19:20 +0530)
Signed-off-by: vipul <vipul.kumar@samsung.com>
Change-Id: I4e20a63ecc74941f047fb1ccac852595f8e82bd1

src/ui/controls/FUiCtrl_ContextMenuListPresenter.cpp
src/ui/controls/FUiCtrl_OptionMenu.cpp
src/ui/controls/FUiCtrl_OptionMenuItem.cpp
src/ui/controls/FUiCtrl_OptionMenuPresenter.cpp
src/ui/inc/FUiCtrl_OptionMenuItem.h
src/ui/inc/FUiCtrl_OptionMenuPresenter.h

index 45f5e64..cc4cb04 100644 (file)
@@ -1260,8 +1260,6 @@ _ContextMenuListPresenter::OnKeyReleased(const _Control& source, const _KeyInfo&
                        break;
                }
 
-               pActionEvent->Fire(*pEventArg);
-
                pItem->SetFocused(false);
                pItem->SetAndInvalidate(false);
 
@@ -1270,6 +1268,8 @@ _ContextMenuListPresenter::OnKeyReleased(const _Control& source, const _KeyInfo&
                __pContextMenu->SetFocused(false);
                __pContextMenu->SetVisibleState(false);
 
+               pActionEvent->Fire(*pEventArg);
+
                break;
        }
        case _KEY_ESC:
index f0fd620..f91fb9b 100644 (file)
@@ -232,8 +232,7 @@ void
 _OptionMenu::OnFocusModeStateChanged(void)
 {
        __isFocused = false;
-       Invalidate(true);
-
+       __pOptionMenuPresenter->ClearFocus();
        return;
 }
 
index d61efa5..5bc7eca 100755 (executable)
@@ -48,6 +48,7 @@ _OptionMenuItem::_OptionMenuItem(void)
        , __upperDividerLine(false)
        , __lowerDividerLine(false)
        , __selected(false)
+       , __highlighted(false)
        , __parentScrollEnable(false)
        , __leftMargin(0.0f)
        , __rightMargin(0.0f)
@@ -530,10 +531,14 @@ _OptionMenuItem::DrawItem(void)
 void
 _OptionMenuItem::DrawItemBitmap(void)
 {
-       if (IsSelected())
+       if (__selected)
        {
                __pBitmapLabel->SetBackgroundBitmap(*__pBitmap[OPTION_MENU_ITEM_DRAWING_STATUS_PRESSED]);
        }
+       else if (__highlighted)
+       {
+               __pBitmapLabel->SetBackgroundBitmap(*__pBitmap[OPTION_MENU_ITEM_DRAWING_STATUS_HIGHLIGHTED]);
+       }
        else
        {
                __pBitmapLabel->SetBackgroundBitmap(*__pBitmap[OPTION_MENU_ITEM_DRAWING_STATUS_NORMAL]);
@@ -897,17 +902,29 @@ _OptionMenuItem::SetParentScrollEnable(bool enable)
 }
 
 bool
-_OptionMenuItem::GetParentScrollEnable() const
+_OptionMenuItem::GetParentScrollEnable(void) const
 {
        return __parentScrollEnable;
 }
 
 bool
-_OptionMenuItem::IsSelected() const
+_OptionMenuItem::IsSelected(void) const
 {
        return __selected;
 }
 
+bool
+_OptionMenuItem::IsHighlighted(void) const
+{
+       return __highlighted;
+}
+
+void
+_OptionMenuItem::SetHighlighted(bool status)
+{
+       __highlighted = status;
+}
+
 void
 _OptionMenuItem::SetAndInvalidate(bool flag)
 {
@@ -917,7 +934,7 @@ _OptionMenuItem::SetAndInvalidate(bool flag)
 }
 
 const Tizen::Graphics::Bitmap*
-_OptionMenuItem::GetMagentaBgBitmap() const
+_OptionMenuItem::GetMagentaBgBitmap(void) const
 {
        return __pMagentaBgBitmap;
 }
index 510255a..c4bad5b 100755 (executable)
@@ -73,6 +73,7 @@ _OptionMenuPresenter::_OptionMenuPresenter(_OptionMenu* pOptionMenu)
        , __itemBitmapHeight(0.0f)
        , __itemFontSize(0.0f)
        , __dividerHeight(0.0f)
+       , __focusedIndex(-1)
 {
 
 }
@@ -750,48 +751,36 @@ _OptionMenuPresenter::Draw(void)
 result
 _OptionMenuPresenter::DrawFocus(int index)
 {
-       Draw();
 
        result r = E_SUCCESS;
 
-       int count = __pOptionMenu->GetMaximumVisibleItemsCount();
-
-       Canvas* pCanvas;
-       pCanvas = __pOptionMenu->GetCanvasN();
-
-       SysTryReturn(NID_UI_CTRL, (pCanvas != null), r, r, "[%s] Propagating.", GetErrorMessage(r));
-
-       FloatRectangle bounds;
-
-       if (index >= count)
-       {
-               index = count - 1;
-       }
-
+       ClearFocus();
        _OptionMenuItem* pItem = __pModel->GetItem(index);
-       bounds = pItem->GetDrawRect();
-
-       Bitmap* pBitmap = null;
-       r = GET_BITMAP_CONFIG_N(FOCUSUI::FOCUS, BITMAP_PIXEL_FORMAT_ARGB8888, pBitmap);
-       SysTryCatch(NID_UI_CTRL, (pBitmap != null), , r, "[%s] Propagating.", GetErrorMessage(r));
-
-       if (_BitmapImpl::CheckNinePatchedBitmapStrictly(*pBitmap))
-       {
-               r = pCanvas->DrawNinePatchedBitmap(bounds, *pBitmap);
-       }
-       else
+       if (pItem != null)
        {
-               r = pCanvas->DrawBitmap(bounds, *pBitmap);
+               pItem->SetHighlighted(true);
+               pItem->Invalidate(true);
+               pItem->DrawFocus();
+               __focusedIndex = index;
        }
 
-       delete pCanvas;
-       delete pBitmap;
-
        return r;
+}
 
-CATCH:
-       delete pCanvas;
-       return r;
+void
+_OptionMenuPresenter::ClearFocus(void)
+{
+       _OptionMenuItem* pPreviousItem;
+       if (__focusedIndex != -1)
+       {
+               pPreviousItem = __pModel->GetItem(__focusedIndex);
+               if (pPreviousItem != null)
+               {
+                       pPreviousItem->SetHighlighted(false);
+                       pPreviousItem->RemoveFocusRing();
+                       pPreviousItem->Invalidate(true);
+               }
+       }
 }
 
 void
@@ -800,6 +789,7 @@ _OptionMenuPresenter::OnEnterKeyPressed(int selectedIndex)
        _OptionMenuItem* pItem = null;
        pItem = __pModel->GetItem(selectedIndex);
        __selectedIndex = -1;
+       ClearFocus();
 
        if (pItem != null)
        {
@@ -949,6 +939,7 @@ _OptionMenuPresenter::OnTouchMoved(const _Control& source, const _TouchInfo& tou
        {
                __selectedIndex = -1;
        }
+       ResetSelectedItem();
 
        return true;
 }
index c0513d1..68abb7d 100755 (executable)
@@ -108,9 +108,12 @@ public:
        Tizen::Graphics::FloatRectangle GetPressedDrawRect(void) const;
 
        void SetParentScrollEnable(bool enable);
-       bool GetParentScrollEnable() const;
+       bool GetParentScrollEnable(void) const;
 
-       bool IsSelected() const;
+       bool IsSelected(void) const;
+       bool IsHighlighted(void) const;
+
+       void SetHighlighted(bool status);
 
        int Release(void);
 
@@ -157,6 +160,7 @@ private:
 
        bool __pressed;
        bool __selected;
+       bool __highlighted;
        bool __parentScrollEnable;
 
        float __leftMargin;
index 82587ba..e67e0eb 100644 (file)
@@ -71,6 +71,7 @@ public:
        virtual result Install(void);
        virtual result Draw(void);
        result DrawFocus(int index);
+       void ClearFocus(void);
        void OnEnterKeyPressed(int selectedIndex);
        virtual result DrawBackground(Tizen::Graphics::Canvas* pCanvas);
        virtual result AddItem(const Tizen::Base::String& text, int actionId, const Tizen::Graphics::Bitmap* normalBitmap, const Tizen::Graphics::Bitmap* pPressedBitmap, const Tizen::Graphics::Bitmap* pHighlightedBitmap);
@@ -156,6 +157,7 @@ private:
        float __itemBitmapHeight;
        float __itemFontSize;
        float __dividerHeight;
+       int __focusedIndex;
 }; // _OptionMenuListPresenter
 
 }}} // Tizen::Ui: Control