fix contextual menu view bug 92/37992/1
authorJehun Lim <jehun.lim@samsung.com>
Thu, 9 Apr 2015 09:39:07 +0000 (18:39 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Thu, 9 Apr 2015 09:39:07 +0000 (18:39 +0900)
1. add show and hide function
2. set next focus object for function button
3. add setting focus routine in resume function for allsource view

Change-Id: I769655810962a831a3230563d86ea6c439b5bef6
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
include/view/menu_view.h
src/view/allsource_view.cpp
src/view/menu_view.cpp

index 57d8a2a..47f35d6 100644 (file)
@@ -25,6 +25,11 @@ class CMenuView : public CBaseView, IMouseDownListener, IMouseMoveListener {
 private:
        struct SMenuView* m;
 
+protected:
+       virtual void t_OnShow(void);
+       virtual void t_OnHide(void);
+       virtual void t_OnResume(void);
+;
 private:
        Evas_Object *m_AddLayout(Evas_Object *win);
        Evas_Object *m_AddBtn(Evas_Object *parent, const char *part,
@@ -51,6 +56,7 @@ public:
        void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
        void OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev);
        void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 
index 1e6fa55..5adf948 100644 (file)
@@ -38,13 +38,21 @@ enum EObjectType {
        ALL_PLUG_BTN = 0,
 };
 
+enum EFocusArea {
+       FOCUS_MENU_BTN = 0,
+       FOCUS_CONTENT_AREA
+};
+
 struct SAllSourceView {
        Evas_Object *base;
        Evas_Object *plug_btn;
        Evas_Object *focus_btn;
        Evas_Object *plug_layout;
+
        CViewMgr *vmgr;
+
        enum launch_mode mode;
+       int focus_area;
 
        CLayoutMgr *pLayoutMgr;
 
@@ -114,6 +122,8 @@ bool CAllSourceView::m_AddMenuArea(void)
 
        Connect(m->plug_btn, ALL_PLUG_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
 
+       m->focus_btn = m->plug_btn;
+
        return true;
 }
 
@@ -137,11 +147,14 @@ void CAllSourceView::sm_CbGetSignalFromLayout(void *cookie, int signal)
 {
        SAllSourceView *m = (SAllSourceView *)cookie;
 
-       if (signal == E_HIGHLIGHT)
+       if (signal == E_HIGHLIGHT) {
                elm_object_signal_emit(m->focus_btn,
                                SIG_ELM_ACTION_HIGHLIGHT, SIG_ELM);
-       else if (signal == E_RETURN)
+               m->focus_area = FOCUS_CONTENT_AREA;
+       } else if (signal == E_RETURN) {
                elm_object_focus_set(m->focus_btn, EINA_TRUE);
+               m->focus_area = FOCUS_MENU_BTN;
+       }
 }
 
 void CAllSourceView::sm_CbUpdateSrcList(void *cookie, void *data, enum update_ui type)
@@ -231,11 +244,16 @@ void CAllSourceView::t_OnShow(void)
 {
        ASSERT(m);
 
-       Evas_Object *btn;
-
-       btn = m->plug_btn;
-
-       elm_object_focus_set(btn, EINA_TRUE);
+       switch (m->focus_area) {
+       case FOCUS_MENU_BTN:
+               elm_object_focus_set(m->focus_btn, EINA_TRUE);
+               break;
+       case FOCUS_CONTENT_AREA:
+               m->pPluggedLayout->Focus();
+               break;
+       default:
+               break;
+       }
 }
 
 void CAllSourceView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
index a70c683..73b0178 100644 (file)
@@ -29,8 +29,6 @@
 #include "menu_view.h"
 #include "external.h"
 
-#define PRIV   "priv"
-
 #define TEXT_SEL       _("SELECT")
 #define TEXT_RM                _("REMOVE")
 
@@ -58,6 +56,7 @@ struct bp_property {
 struct SMenuView {
        Evas_Object *base;
        Evas_Object *btn[MAX_BTN_NUM];
+       Evas_Object *focus_btn;
        CSourceInfo *node;
        CViewMgr *vmgr;
 };
@@ -162,7 +161,12 @@ bool CMenuView::m_AddUsbMenuBtn(void)
                return false;
        }
 
-       Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+       Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
+                               | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+
+       elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_UP);
+       elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_DOWN);
+       elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_LEFT);
 
        rm_btn = m_AddBtnByIndex(USB_ROW, RM_COL);
        if (!rm_btn) {
@@ -171,7 +175,14 @@ bool CMenuView::m_AddUsbMenuBtn(void)
                return false;
        }
 
-       Connect(rm_btn, MENU_REMOVE_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+       Connect(rm_btn, MENU_REMOVE_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
+                               | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+
+       elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_UP);
+       elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_DOWN);
+       elm_object_focus_next_object_set(rm_btn, rm_btn, ELM_FOCUS_RIGHT);
+
+       elm_object_focus_set(sel_btn, EINA_TRUE);
 
        return true;
 }
@@ -186,7 +197,15 @@ bool CMenuView::m_AddExternalMenuBtn(void)
                return false;
        }
 
-       Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+       Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN
+                               | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+
+       elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_UP);
+       elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_DOWN);
+       elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_LEFT);
+       elm_object_focus_next_object_set(sel_btn, sel_btn, ELM_FOCUS_RIGHT);
+
+       elm_object_focus_set(sel_btn, EINA_TRUE);
 
        return true;
 }
@@ -269,7 +288,6 @@ bool CMenuView::Create(void *data)
        m->base = base;
        m->node = (CSourceInfo *)data;
        m->vmgr = vmgr;
-       evas_object_data_set(base, PRIV, m);
 
        if (!m_AddFocusItem()) {
                _ERR("add focus item failed.");
@@ -304,6 +322,29 @@ void CMenuView::Destroy(void)
        m = NULL;
 }
 
+void CMenuView::t_OnShow(void)
+{
+       ASSERT(m);
+
+       evas_object_show(m->base);
+
+       t_OnResume();
+}
+
+void CMenuView::t_OnHide(void)
+{
+       ASSERT(m);
+
+       evas_object_hide(m->base);
+}
+
+void CMenuView::t_OnResume(void)
+{
+       ASSERT(m);
+
+       elm_object_focus_set(m->focus_btn, EINA_TRUE);
+}
+
 void CMenuView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
 {
        switch (id) {
@@ -368,3 +409,15 @@ void CMenuView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_
                break;
        }
 }
+
+void CMenuView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case MENU_SELECT_BTN:
+       case MENU_REMOVE_BTN:
+               m->focus_btn = obj;
+               break;
+       default:
+               break;
+       }
+}