maintain focused item in gengrid 65/37965/2
authorJehun Lim <jehun.lim@samsung.com>
Thu, 9 Apr 2015 06:00:45 +0000 (15:00 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Thu, 9 Apr 2015 06:05:23 +0000 (15:05 +0900)
Change-Id: I692ee644b51b1172dc6c4c985a354208e3a26c7f
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
data/widget/gengrid.edc
include/view/plugged_layout.h
src/view/allsource_view.cpp
src/view/plugged_layout.cpp

index e4a9774..66a7d2d 100644 (file)
@@ -212,6 +212,11 @@ group {
                        target: "item_bg";
                        target: "item_name";
                        target: "item_type";
+                       after: "item_focused";
+               }
+               program {
+                       name: "item_focused";
+                       action: SIGNAL_EMIT "item_focused" "edc";
                }
                program {
                        name: "go_passive";
index c7a8d75..8bf25d3 100644 (file)
@@ -18,7 +18,8 @@
 #define __PLUGGED_LAYOUT_H__
 
 class CPluggedLayout : public CBaseLayout, CListenerMgr,
-       IKeyDownListener, IMouseMoveListener, IFocusedListener {
+       IKeyDownListener, IMouseMoveListener,
+       IRealizedListener, IUnrealizedListener, IFocusedListener {
 
 private:
        struct SPluggedLayout *m;
@@ -31,6 +32,11 @@ private:
        static Eina_Bool sm_CbTimerDelItem(void *data);
        void m_TimerDelItem(void);
 
+       static void sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it,
+                               const char *emission, const char *source);
+       void m_OnGridItemFocused(Elm_Object_Item *it,
+                               const char *emission, const char *source);
+
        Evas_Object *m_DrawGengrid(Evas_Object *layout);
        void m_DrawNoContentArea(void);
        void m_DrawContentArea(void);
@@ -38,6 +44,7 @@ private:
 public:
        CPluggedLayout(const char *pLayoutId) : CBaseLayout(pLayoutId),
                IKeyDownListener(this), IMouseMoveListener(this),
+               IRealizedListener(this), IUnrealizedListener(this),
                IFocusedListener(this), m(0) {}
 
        virtual ~CPluggedLayout() {}
@@ -45,11 +52,14 @@ public:
        bool Create(CLayoutMgr *mgr, void *data);
        virtual void Destroy(void);
 
+       void Focus(void);
        void Update(void *data, enum update_ui type);
 
 public:
        void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
        void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       void OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item);
+       void OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item);
        void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
index da89fb7..1e6fa55 100644 (file)
@@ -245,6 +245,10 @@ void CAllSourceView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key
                if (!strcmp(ev->keyname, KEY_BACK)
                        || !strcmp(ev->keyname, KEY_BACK_REMOTE))
                        app_efl_exit();
+               else if (!strcmp(ev->keyname, KEY_ENTER)
+                       || !strcmp(ev->keyname, KEY_ENTER_REMOTE))
+                       m->pPluggedLayout->Focus();
+               break;
        default:
                break;
        }
index 27777f4..2bc2fa3 100644 (file)
@@ -63,7 +63,8 @@ Evas_Object *CPluggedLayout::m_DrawGengrid(Evas_Object *layout)
        if (!grid)
                return NULL;
 
-       Connect(grid, PLUGGED_GRID, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+       Connect(grid, PLUGGED_GRID, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE
+                       | TYPE_REALIZED | TYPE_UNREALIZED | TYPE_FOCUSED);
 
        return grid;
 }
@@ -215,6 +216,32 @@ void CPluggedLayout::m_TimerDelItem(void)
        m->del_it = NULL;
 }
 
+void CPluggedLayout::sm_CbGridItemFocused(void *cookie, Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       CPluggedLayout *root = (CPluggedLayout *)cookie;
+
+       if (root)
+               root->m_OnGridItemFocused(it, emission, source);
+}
+
+void CPluggedLayout::m_OnGridItemFocused(Elm_Object_Item *it,
+               const char *emission, const char *source)
+{
+       if (!it)
+               return;
+
+       m->focus_it = (Elm_Object_Item *)it;
+}
+
+void CPluggedLayout::Focus(void)
+{
+       ASSERT(m);
+
+       elm_object_focus_set(m->grid, EINA_TRUE);
+       elm_object_item_focus_set(m->focus_it, EINA_TRUE);
+}
+
 void CPluggedLayout::Update(void *data, enum update_ui type)
 {
        ASSERT(m);
@@ -305,12 +332,34 @@ void CPluggedLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_M
        }
 }
 
-void CPluggedLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+void CPluggedLayout::OnRealized(int id, Evas_Object *obj, Elm_Object_Item *item)
 {
        switch (id) {
        case PLUGGED_GRID:
-               m->focus_it = (Elm_Object_Item *)item;
+               elm_object_item_signal_callback_add(item, "item_focused",
+                               "edc", sm_CbGridItemFocused, this);
+               break;
+       default:
+               break;
+       }
+}
+
+void CPluggedLayout::OnUnrealized(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case PLUGGED_GRID:
+               elm_object_item_signal_callback_del(item, "item_focused",
+                               "edc", sm_CbGridItemFocused);
+               break;
+       default:
+               break;
+       }
+}
 
+void CPluggedLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case PLUGGED_GRID:
                m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);
 
                break;