apply InputHandler in app-common 39/35539/1 accepted/tizen/tv/20150218.123053 submit/tizen/20150218.021453
authorJehun Lim <jehun.lim@samsung.com>
Tue, 17 Feb 2015 11:20:47 +0000 (20:20 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Tue, 17 Feb 2015 11:20:47 +0000 (20:20 +0900)
Change-Id: I6b53a788e5222eecb4abbf233ddf2129dd1e4f21
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
include/view/menu_view.h
include/view/nearby_layout.h
include/view/plugged_layout.h
src/main.cpp
src/view/allsource_view.cpp
src/view/menu_view.cpp
src/view/nearby_layout.cpp
src/view/plugged_layout.cpp

index 9e61811..e24e66d 100644 (file)
 #define  MENU_VIEW  "MENU_VIEW"
 
 
-class CMenuView : public CBaseView {
+class CMenuView : public CBaseView, CListenerMgr,
+       IKeyDownListener, IMouseDownListener, IMouseMoveListener {
 private:
        struct SMenuView* m;
 
+private:
+       Evas_Object *m_AddLayout(Evas_Object *win);
+       Evas_Object *m_AddBtn(Evas_Object *parent, const char *part,
+                       const char *style, const char *str);
+       Evas_Object *m_AddBtnByIndex(unsigned int row, unsigned int col);
+       bool m_AddUsbMenuBtn(void);
+       bool m_AddExternalMenuBtn(void);
+       bool m_AddMenuBtn(void);
+       bool m_AddFocusItem(void);
+
 public:
-       CMenuView(const char *szViewId) : CBaseView(szViewId), m(0) {}
+       CMenuView(const char *szViewId) : CBaseView(szViewId),
+               IKeyDownListener(this), IMouseDownListener(this),
+               IMouseMoveListener(this), m(0) {}
+
        virtual ~CMenuView() {}
 
        virtual Evas_Object *Base(void);
 
        virtual bool Create(void *data);
        virtual void Destroy(void);
+
+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);
 };
 
 
index 0ec89f9..e33fe15 100644 (file)
@@ -17,7 +17,9 @@
 #ifndef __NEARBY_LAYOUT_H__
 #define __NEARBY_LAYOUT_H__
 
-class CNearbyLayout : public CBaseLayout {
+class CNearbyLayout : public CBaseLayout, CListenerMgr,
+       IKeyDownListener, IMouseMoveListener, IFocusedListener {
+
 private:
        struct SNearbyLayout *m;
 
@@ -26,15 +28,6 @@ protected:
        virtual void t_OnHide(void);
 
 private:
-       static void sm_CbGridMouseMove(void *data,
-               Evas *e, Evas_Object *obj, void *ev_info);
-       static void sm_CbGridKeyDown(void *data,
-               Evas *e, Evas_Object *obj, void *ev_info);
-       static void sm_CbGridFocused(void *data,
-               Evas_Object *obj, void *ev_info);
-       static void sm_CbBtnKeyDown(void *data, Evas *e, Evas_Object *obj, void *ev_info);
-       static void sm_CbBtnFocused(void *data, Evas_Object *obj, void *ev_info);
-
        static Eina_Bool sm_CbTimerDelItem(void *data);
        void m_TimerDelItem(void);
 
@@ -50,13 +43,21 @@ private:
        Evas_Object *m_DrawGengrid(Evas_Object *layout);
 
 public:
-       CNearbyLayout(const char *pLayoutId) : CBaseLayout(pLayoutId), m(0) {}
+       CNearbyLayout(const char *pLayoutId) : CBaseLayout(pLayoutId),
+               IKeyDownListener(this), IMouseMoveListener(this),
+               IFocusedListener(this),  m(0) {}
+
        ~CNearbyLayout() {}
 
        bool Create(CLayoutMgr *mgr, void *data);
        virtual void Destroy(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 OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 #endif /* __NEARBY_LAYOUT_H__ */
index 99e0213..c7a8d75 100644 (file)
@@ -17,7 +17,9 @@
 #ifndef __PLUGGED_LAYOUT_H__
 #define __PLUGGED_LAYOUT_H__
 
-class CPluggedLayout : public CBaseLayout {
+class CPluggedLayout : public CBaseLayout, CListenerMgr,
+       IKeyDownListener, IMouseMoveListener, IFocusedListener {
+
 private:
        struct SPluggedLayout *m;
 
@@ -26,13 +28,6 @@ protected:
        virtual void t_OnHide(void);
 
 private:
-       static void sm_CbGridMouseMove(void *data,
-               Evas *e, Evas_Object *obj, void *ev_info);
-       static void sm_CbGridKeyDown(void *data,
-               Evas *e, Evas_Object *obj, void *ev_info);
-       static void sm_CbGridFocused(void *data,
-               Evas_Object *obj, void *ev_info);
-
        static Eina_Bool sm_CbTimerDelItem(void *data);
        void m_TimerDelItem(void);
 
@@ -41,13 +36,21 @@ private:
        void m_DrawContentArea(void);
 
 public:
-       CPluggedLayout(const char *pLayoutId) : CBaseLayout(pLayoutId), m(0) {}
+       CPluggedLayout(const char *pLayoutId) : CBaseLayout(pLayoutId),
+               IKeyDownListener(this), IMouseMoveListener(this),
+               IFocusedListener(this), m(0) {}
+
        virtual ~CPluggedLayout() {}
 
        bool Create(CLayoutMgr *mgr, void *data);
        virtual void Destroy(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 OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 #endif /* __PLUGGED_LAYOUT_H__ */
index 9279563..6cd564f 100644 (file)
@@ -25,6 +25,7 @@
 #include "BaseApp.h"
 #include "BaseLayout.h"
 #include "LayoutMgr.h"
+#include "InputHandler.h"
 #include "allsource_view.h"
 #include "menu_view.h"
 
index 76bb18f..645b234 100644 (file)
@@ -23,6 +23,7 @@
 #include "ViewMgr.h"
 #include "BaseLayout.h"
 #include "LayoutMgr.h"
+#include "InputHandler.h"
 #include "source_mgr.h"
 #include "util.h"
 #include "def.h"
index 9b9c7a9..15fa6c0 100644 (file)
@@ -21,6 +21,7 @@
 #include "AppCommon.h"
 #include "BaseView.h"
 #include "ViewMgr.h"
+#include "InputHandler.h"
 #include "source_mgr.h"
 #include "util.h"
 #include "def.h"
 #define SEL_COL                0
 #define RM_COL         1
 
+enum EObjectType {
+       MENU_BASE = 0,
+       MENU_SELECT_BTN,
+       MENU_REMOVE_BTN
+};
+
 struct bp_property {
        const char *part;
        const char *style;
        char *text;
-       void (*btn_key_down_cb)(void *data, Evas *e, Evas_Object *obj,
-                       void *ev);
 };
 
 struct SMenuView {
@@ -57,7 +62,7 @@ struct SMenuView {
        CViewMgr *vmgr;
 };
 
-static Evas_Object *_add_layout(Evas_Object *win)
+Evas_Object *CMenuView::m_AddLayout(Evas_Object *win)
 {
        Evas_Object *base;
 
@@ -71,79 +76,7 @@ static Evas_Object *_add_layout(Evas_Object *win)
        return base;
 }
 
-static void _layout_key_down(void *data,
-               Evas *e, Evas_Object *obj, void *ev_info)
-{
-       struct SMenuView *priv;
-       Evas_Event_Key_Down *ev;
-
-       if (!data || !ev_info)
-               return;
-
-       priv = (SMenuView *)data;
-       ev = (Evas_Event_Key_Down *)ev_info;
-
-       if (!ev->keyname)
-               return;
-
-       if (!strcmp(ev->keyname, KEY_BACK))
-               priv->vmgr->PopView();
-}
-
-static void _common_sel_key_down_cb(void *data, Evas *e, Evas_Object *obj,
-               void *ev_info)
-{
-       struct SMenuView *priv;
-       Evas_Event_Key_Down *ev;
-
-       if (!data || !ev_info) {
-               _ERR("null pointer.");
-               return;
-       }
-
-       priv = (struct SMenuView *)data;
-       ev = (Evas_Event_Key_Down *)ev_info;
-
-       if (!ev->keyname)
-               return;
-
-       if (!strcmp(ev->keyname, KEY_ENTER))
-               priv->node->SwitchTo();
-}
-
-static void _usb_rm_key_down_cb(void *data, Evas *e, Evas_Object *obj,
-               void *ev_info)
-{
-       struct SMenuView *priv;
-       Evas_Event_Key_Down *ev;
-
-       if (!data || !ev_info) {
-               _ERR("null pointer.");
-               return;
-       }
-
-       priv = (struct SMenuView *)data;
-       ev = (Evas_Event_Key_Down *)ev_info;
-
-       if (!ev->keyname)
-               return;
-
-       if (!strcmp(ev->keyname, KEY_ENTER)) {
-               /* TODO call usb remove */
-               priv->vmgr->PopView();
-       }
-}
-
-static void _menu_btn_mousemove(void *data, Evas *e, Evas_Object *obj, void *ei)
-{
-       if (!obj)
-               return;
-
-       if (!elm_object_focus_get(obj))
-               elm_object_focus_set(obj, EINA_TRUE);
-}
-
-static Evas_Object *_add_btn(Evas_Object *parent,
+Evas_Object *CMenuView::m_AddBtn(Evas_Object *parent,
                const char *part,
                const char *style,
                const char *str)
@@ -173,8 +106,7 @@ static Evas_Object *_add_btn(Evas_Object *parent,
        return btn;
 }
 
-static Evas_Object *_add_btn_by_index(Evas_Object *base, struct SMenuView *priv,
-               unsigned int row, unsigned int col)
+Evas_Object *CMenuView::m_AddBtnByIndex(unsigned int row, unsigned int col)
 {
        Evas_Object *btn;
        unsigned int bp_arr_row;
@@ -183,141 +115,121 @@ static Evas_Object *_add_btn_by_index(Evas_Object *base, struct SMenuView *priv,
                        {
                                PART_MENU_BTN_1,
                                STYLE_MENU_SEL,
-                               TEXT_SEL,
-                               _common_sel_key_down_cb
+                               TEXT_SEL
                        },
                        {
                                PART_MENU_BTN_2,
                                STYLE_MENU_RM,
-                               TEXT_RM,
-                               _usb_rm_key_down_cb
+                               TEXT_RM
                        },
                },
                {
                        {
                                PART_MENU_BTN_1,
                                STYLE_MENU_SEL,
-                               TEXT_SEL,
-                               _common_sel_key_down_cb,
+                               TEXT_SEL
                        },
                        {
                                NULL,
                                NULL,
-                               NULL,
                                NULL
                        },
                },
        };
 
-       UTIL_CHECK_RETURN_VAL(base, NULL);
-       UTIL_CHECK_RETURN_VAL(priv, NULL);
-
        bp_arr_row = sizeof(bp_arr) /
                        (sizeof(struct bp_property) * MAX_BTN_NUM);
 
        if (row >= bp_arr_row || col >= MAX_BTN_NUM)
                return NULL;
 
-       btn = _add_btn(base, bp_arr[row][col].part,
+       btn = m_AddBtn(m->base, bp_arr[row][col].part,
                        bp_arr[row][col].style,
                        bp_arr[row][col].text);
        if (!btn)
                return NULL;
 
-       evas_object_event_callback_add(btn,
-                       EVAS_CALLBACK_KEY_DOWN,
-                       bp_arr[row][col].btn_key_down_cb, priv);
-       evas_object_event_callback_add(btn,
-                       EVAS_CALLBACK_MOUSE_MOVE,
-                       _menu_btn_mousemove, priv);
-
        return btn;
 }
 
-static int _add_usb_menu_btn(Evas_Object *base, struct SMenuView *priv)
+bool CMenuView::m_AddUsbMenuBtn(void)
 {
        Evas_Object *sel_btn, *rm_btn;
 
-       UTIL_CHECK_RETURN_VAL(base, -1);
-       UTIL_CHECK_RETURN_VAL(priv, -1);
-
-       sel_btn = _add_btn_by_index(base, priv, USB_ROW, SEL_COL);
+       sel_btn = m_AddBtnByIndex(USB_ROW, SEL_COL);
        if (!sel_btn) {
                _ERR("Add usb select button failed.");
-               return -1;
+               return false;
        }
 
-       rm_btn = _add_btn_by_index(base, priv, USB_ROW, RM_COL);
+       Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+
+       rm_btn = m_AddBtnByIndex(USB_ROW, RM_COL);
        if (!rm_btn) {
                _ERR("Add usb remove button failed.");
                evas_object_del(sel_btn);
-               return -1;
+               return false;
        }
 
-       return 0;
+       Connect(rm_btn, MENU_REMOVE_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+
+       return true;
 }
 
-static int _add_external_menu_btn(Evas_Object *base, struct SMenuView *priv)
+bool CMenuView::m_AddExternalMenuBtn(void)
 {
        Evas_Object *sel_btn;
 
-       if (!base || !priv)
-               return -1;
-
-       sel_btn = _add_btn_by_index(base, priv, EXTERNAL_ROW, SEL_COL);
+       sel_btn = m_AddBtnByIndex(EXTERNAL_ROW, SEL_COL);
        if (!sel_btn) {
                _ERR("Add wifi select button failed.");
-               return -1;
+               return false;
        }
 
-       return 0;
+       Connect(sel_btn, MENU_SELECT_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_DOWN | TYPE_MOUSE_MOVE);
+
+       return true;
 }
 
-static int _add_menu_btn(Evas_Object *base, struct SMenuView *priv)
+bool CMenuView::m_AddMenuBtn(void)
 {
-       UTIL_CHECK_RETURN_VAL(base, -1);
-       UTIL_CHECK_RETURN_VAL(priv, -1);
-
-       switch (priv->node->ConnType()) {
+       switch (m->node->ConnType()) {
        case CONN_TYPE_USB:
-               return _add_usb_menu_btn(base, priv);
+               return m_AddUsbMenuBtn();
        case CONN_TYPE_TV:
-               return _add_external_menu_btn(base, priv);
+               return m_AddExternalMenuBtn();
        default:
                break;
        }
 
-       return -1;
+       return false;
 }
 
-static int _add_focus_item(Evas_Object *base, struct SMenuView *priv)
+bool CMenuView::m_AddFocusItem(void)
 {
        Evas_Object *img;
        const char *path;
 
-       UTIL_CHECK_RETURN_VAL(base, -1);
-       UTIL_CHECK_RETURN_VAL(priv, -1);
-
-       elm_object_part_text_set(base,
+       elm_object_part_text_set(m->base,
                        PART_FOCUS_ITEM_TEXT_NAME,
-                       _(priv->node->Name()));
-       elm_object_part_text_set(base,
+                       _(m->node->Name()));
+       elm_object_part_text_set(m->base,
                        PART_FOCUS_ITEM_TEXT_TYPE,
-                       _(priv->node->Type()));
+                       _(m->node->Type()));
 
-       path = priv->node->IconPath();
+       path = m->node->IconPath();
        if (!path)
-               return -1;
+               return false;
 
-       img = elm_image_add(base);
+       img = elm_image_add(m->base);
        if (!img)
-               return -1;
+               return false;
 
        elm_image_file_set(img, path, NULL);
        evas_object_show(img);
-       elm_object_part_content_set(base, PART_FOCUS_ITEM_IMG, img);
+       elm_object_part_content_set(m->base, PART_FOCUS_ITEM_IMG, img);
 
-       return 0;
+       return true;
 }
 
 
@@ -342,7 +254,7 @@ bool CMenuView::Create(void *data)
        if (!win)
                return false;
 
-       base = _add_layout(win);
+       base = m_AddLayout(win);
        if (!base)
                return false;
 
@@ -359,22 +271,23 @@ bool CMenuView::Create(void *data)
        m->vmgr = vmgr;
        evas_object_data_set(base, PRIV, m);
 
-       if (_add_focus_item(base, m) == -1) {
+       if (!m_AddFocusItem()) {
                _ERR("add focus item failed.");
                evas_object_del(base);
-               free(m);
+               delete m;
+               m = NULL;
                return NULL;
        }
 
-       if (_add_menu_btn(base, m) == -1) {
+       if (!m_AddMenuBtn()) {
                _ERR("add menu button failed.");
                evas_object_del(base);
-               free(m);
+               delete m;
+               m = NULL;
                return NULL;
        }
 
-       evas_object_event_callback_add(base, EVAS_CALLBACK_KEY_DOWN,
-                       _layout_key_down, m);
+       Connect(base, MENU_BASE, TYPE_KEY_DOWN);
 
        CBaseView::Create(NULL);
 
@@ -390,3 +303,65 @@ void CMenuView::Destroy(void)
        delete m;
        m = NULL;
 }
+
+void CMenuView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       switch (id) {
+       case MENU_BASE:
+               if (!ev->keyname)
+                       return;
+
+               if (!strcmp(ev->keyname, KEY_BACK))
+                       m->vmgr->PopView();
+
+               break;
+       case MENU_SELECT_BTN:
+               if (!ev->keyname)
+                       return;
+
+               if (!strcmp(ev->keyname, KEY_ENTER))
+                       m->node->SwitchTo();
+
+               break;
+       case MENU_REMOVE_BTN:
+               if (!ev->keyname)
+                       return;
+
+               if (!strcmp(ev->keyname, KEY_ENTER)) {
+                       /* TODO call usb remove */
+                       m->vmgr->PopView();
+               }
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CMenuView::OnMouseDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Down *ev)
+{
+       switch (id) {
+       case MENU_SELECT_BTN:
+               m->node->SwitchTo();
+               break;
+       case MENU_REMOVE_BTN:
+               m->vmgr->PopView();
+               break;
+       default:
+               break;
+       }
+}
+
+void CMenuView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case MENU_SELECT_BTN:
+       case MENU_REMOVE_BTN:
+               if (!elm_object_focus_get(obj))
+                       elm_object_focus_set(obj, EINA_TRUE);
+
+               break;
+       default:
+               break;
+       }
+}
index c73a40d..8c9ac78 100644 (file)
@@ -25,6 +25,7 @@
 #include "ViewMgr.h"
 #include "BaseLayout.h"
 #include "LayoutMgr.h"
+#include "InputHandler.h"
 #include "source_mgr.h"
 #include "menu_view.h"
 #include "util.h"
 #define SETTING_ITEM "settings-item"
 #define SETTING_NETWORK "network-settings"
 
+enum EObjectType {
+       NEARBY_GRID = 0,
+       NEARBY_BTN_TOP,
+       NEARBY_BTN_LAYOUT
+};
+
 struct SNearbyLayout {
        Evas_Object *base;
        Evas_Object *grid;
@@ -65,68 +72,6 @@ struct SNearbyLayout {
        }
 };
 
-void CNearbyLayout::sm_CbGridMouseMove(void *data,
-               Evas *e, Evas_Object *obj, void *ev_info)
-{
-       SNearbyLayout *m = (SNearbyLayout *)data;
-       if (!m)
-               return;
-
-       Elm_Object_Item *it;
-       Evas_Event_Mouse_Move *ev;
-
-       if (!ev_info)
-               return;
-
-       ev = (Evas_Event_Mouse_Move *)ev_info;
-       it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
-                       ev->cur.canvas.y, NULL, NULL);
-       if (!it)
-               return;
-
-       if (elm_object_item_focus_get(it))
-               return;
-
-       elm_object_item_focus_set(it, EINA_TRUE);
-
-       if (m->send_sig_back)
-               m->send_sig_back(m->base, E_HIGHLIGHT);
-}
-
-void CNearbyLayout::sm_CbGridKeyDown(void *data, Evas *e, Evas_Object *obj, void *ev_info)
-{
-       SNearbyLayout *m = (SNearbyLayout *)data;
-       if (!m)
-               return;
-
-       CSourceInfo *si;
-       Evas_Event_Key_Down *ev;
-
-       if (!ev_info)
-               return;
-
-       ev = (Evas_Event_Key_Down *)ev_info;
-       si = m->srcmgr->SourceInfoByData(m->focus_it);
-       if (!ev->keyname || !si)
-               return;
-
-       if (!strcmp(ev->keyname, KEY_MENU))
-               m->vmgr->PushView(MENU_VIEW, si);
-
-}
-
-void CNearbyLayout::sm_CbGridFocused(void *data, Evas_Object *obj, void *ev_info)
-{
-       SNearbyLayout *m = (SNearbyLayout *)data;
-       if (!m)
-               return;
-
-       m->focus_it = (Elm_Object_Item*)ev_info;
-
-       if (m->send_sig_back)
-               m->send_sig_back(m->base, E_HIGHLIGHT);
-}
-
 void CNearbyLayout::m_LaunchSettingApp(void)
 {
        bundle *b;
@@ -155,35 +100,6 @@ void CNearbyLayout::m_LaunchSettingApp(void)
        bundle_free(b);
 }
 
-void CNearbyLayout::sm_CbBtnKeyDown(void *data, Evas *e, Evas_Object *obj, void *ev_info)
-{
-       CNearbyLayout *root = (CNearbyLayout *)data;
-       if (!root)
-               return;
-
-       Evas_Event_Key_Down *ev;
-
-       if (!ev_info)
-               return;
-
-       ev = (Evas_Event_Key_Down *)ev_info;
-       if (!ev->keyname)
-               return;
-
-       if (!strcmp(ev->keyname, KEY_ENTER))
-               root->m_LaunchSettingApp();
-}
-
-void CNearbyLayout::sm_CbBtnFocused(void *data, Evas_Object *obj, void *ev_info)
-{
-       SNearbyLayout *m = (SNearbyLayout *)data;
-       if (!m)
-               return;
-
-       if (m->send_sig_back)
-               m->send_sig_back(m->base, E_HIGHLIGHT);
-}
-
 void CNearbyLayout::m_AddSetNetworkButton(void)
 {
        Evas_Object *btn;
@@ -195,10 +111,9 @@ void CNearbyLayout::m_AddSetNetworkButton(void)
        }
 
        elm_object_text_set(btn, _(SET_UP_NETWORK));
-       evas_object_smart_callback_add(btn, "focused", sm_CbBtnFocused, m);
-       evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
-                       sm_CbBtnKeyDown, this);
        elm_object_part_content_set(Layout(), PART_BUTTON, btn);
+
+       Connect(btn, NEARBY_BTN_LAYOUT, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
 }
 
 void CNearbyLayout::m_AddNoSrcUtility(void)
@@ -225,8 +140,8 @@ void CNearbyLayout::m_AddNoSrcUtility(void)
        }
        elm_object_text_set(btn, _(NET_WORK_SET));
        elm_object_part_content_set(m->base, PART_UTILITY_BUTTON, btn);
-       evas_object_event_callback_add(btn, EVAS_CALLBACK_KEY_DOWN,
-                       sm_CbBtnKeyDown, NULL);
+
+       Connect(btn, NEARBY_BTN_TOP, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
 
        m->utility_pb = pb;
        m->utility_btn = btn;
@@ -290,12 +205,7 @@ Evas_Object *CNearbyLayout::m_DrawGengrid(Evas_Object *layout)
        if (!grid)
                return NULL;
 
-       evas_object_event_callback_add(m->grid, EVAS_CALLBACK_MOUSE_MOVE,
-                       sm_CbGridMouseMove, m);
-       evas_object_event_callback_add(m->grid, EVAS_CALLBACK_KEY_DOWN,
-                       sm_CbGridKeyDown, m);
-       evas_object_smart_callback_add(m->grid, "item,focused",
-                       sm_CbGridFocused, m);
+       Connect(grid, NEARBY_GRID, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
 
        return grid;
 }
@@ -474,3 +384,85 @@ void CNearbyLayout::Update(void *data, enum update_ui type)
                }
        }
 }
+
+void CNearbyLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       switch (id) {
+       case NEARBY_GRID:
+               CSourceInfo *si;
+
+               si = m->srcmgr->SourceInfoByData(m->focus_it);
+               if (!si)
+                       return;
+
+               if (!strcmp(ev->keyname, KEY_MENU))
+                       m->vmgr->PushView(MENU_VIEW, si);
+
+               break;
+       case NEARBY_BTN_TOP:
+       case NEARBY_BTN_LAYOUT:
+               if (!ev->keyname)
+                       return;
+
+               if (!strcmp(ev->keyname, KEY_ENTER))
+                       m_LaunchSettingApp();
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CNearbyLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case NEARBY_GRID:
+               Elm_Object_Item *it;
+
+               it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+                               ev->cur.canvas.y, NULL, NULL);
+               if (!it)
+                       return;
+
+               if (elm_object_item_focus_get(it))
+                       return;
+
+               elm_object_item_focus_set(it, EINA_TRUE);
+
+               if (m->send_sig_back)
+                       m->send_sig_back(m->base, E_HIGHLIGHT);
+
+               break;
+       case NEARBY_BTN_TOP:
+       case NEARBY_BTN_LAYOUT:
+               if (elm_object_focus_get(obj))
+                       return;
+
+               elm_object_focus_set(obj, EINA_TRUE);
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CNearbyLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case NEARBY_GRID:
+               m->focus_it = (Elm_Object_Item*)item;
+
+               if (m->send_sig_back)
+                       m->send_sig_back(m->base, E_HIGHLIGHT);
+
+               break;
+       case NEARBY_BTN_TOP:
+       case NEARBY_BTN_LAYOUT:
+               if (m->send_sig_back)
+                       m->send_sig_back(m->base, E_HIGHLIGHT);
+
+               break;
+       default:
+               break;
+       }
+}
index 9e0884d..90475da 100644 (file)
@@ -24,6 +24,7 @@
 #include "ViewMgr.h"
 #include "BaseLayout.h"
 #include "LayoutMgr.h"
+#include "InputHandler.h"
 #include "external.h"
 #include "source_mgr.h"
 #include "menu_view.h"
@@ -31,6 +32,8 @@
 #include "allsource_view.h"
 #include "plugged_layout.h"
 
+#define PLUGGED_GRID 0
+
 #define PRIV "priv"
 #define PLUGGED_DATA "plugged_data"
 
@@ -52,69 +55,6 @@ struct SPluggedLayout {
        }
 };
 
-void CPluggedLayout::sm_CbGridMouseMove(void *data,
-               Evas *e, Evas_Object *obj, void *ev_info)
-{
-       SPluggedLayout *m = (SPluggedLayout *)data;
-       if (!m)
-               return;
-
-       Elm_Object_Item *it;
-       Evas_Event_Mouse_Move *ev;
-
-       if (!ev_info)
-               return;
-
-       ev = (Evas_Event_Mouse_Move *)ev_info;
-       it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
-                       ev->cur.canvas.y, NULL, NULL);
-       if (!it)
-               return;
-
-       if (elm_object_item_focus_get(it))
-               return;
-
-       elm_object_item_focus_set(it, EINA_TRUE);
-
-       if (m->send_sig_back_func)
-               m->send_sig_back_func(m->base, E_HIGHLIGHT);
-}
-
-void CPluggedLayout::sm_CbGridKeyDown(void *data,
-               Evas *e, Evas_Object *obj, void *ev_info)
-{
-       SPluggedLayout *m = (SPluggedLayout *)data;
-       if (!m)
-               return;
-
-       CSourceInfo *si;
-       Evas_Event_Key_Down *ev;
-
-       if (!ev_info)
-               return;
-
-       ev = (Evas_Event_Key_Down *)ev_info;
-       si = m->srcmgr->SourceInfoByData(m->focus_it);
-       if (!ev->keyname || !si)
-               return;
-
-       if (!strcmp(ev->keyname, KEY_MENU))
-               m->vmgr->PushView(MENU_VIEW, si);
-}
-
-void CPluggedLayout::sm_CbGridFocused(void *data,
-               Evas_Object *obj, void *ev_info)
-{
-       SPluggedLayout *m = (SPluggedLayout *)data;
-       if (!m)
-               return;
-
-       m->focus_it = (Elm_Object_Item*)ev_info;
-
-       if (m->send_sig_back_func)
-               m->send_sig_back_func(m->base, E_HIGHLIGHT);
-}
-
 Evas_Object *CPluggedLayout::m_DrawGengrid(Evas_Object *layout)
 {
        Evas_Object *grid;
@@ -123,12 +63,7 @@ Evas_Object *CPluggedLayout::m_DrawGengrid(Evas_Object *layout)
        if (!grid)
                return NULL;
 
-       evas_object_event_callback_add(m->grid, EVAS_CALLBACK_MOUSE_MOVE,
-                       sm_CbGridMouseMove, m);
-       evas_object_event_callback_add(m->grid, EVAS_CALLBACK_KEY_DOWN,
-                       sm_CbGridKeyDown, m);
-       evas_object_smart_callback_add(m->grid, "item,focused",
-                       sm_CbGridFocused, m);
+       Connect(grid, PLUGGED_GRID, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
 
        return grid;
 }
@@ -326,3 +261,62 @@ void CPluggedLayout::Update(void *data, enum update_ui type)
                }
        }
 }
+
+void CPluggedLayout::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       switch (id) {
+       case PLUGGED_GRID:
+               CSourceInfo *si;
+
+               si = m->srcmgr->SourceInfoByData(m->focus_it);
+               if (!si)
+                       return;
+
+               if (!strcmp(ev->keyname, KEY_MENU))
+                       m->vmgr->PushView(MENU_VIEW, si);
+
+               break;
+       default:
+               break;
+       }
+}
+
+void CPluggedLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case PLUGGED_GRID:
+               Elm_Object_Item *it;
+
+               it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x,
+                               ev->cur.canvas.y, NULL, NULL);
+               if (!it)
+                       return;
+
+               if (elm_object_item_focus_get(it))
+                       return;
+
+               elm_object_item_focus_set(it, EINA_TRUE);
+
+               if (m->send_sig_back_func)
+                       m->send_sig_back_func(m->base, E_HIGHLIGHT);
+               break;
+       default:
+               break;
+       }
+}
+
+void CPluggedLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case PLUGGED_GRID:
+               m->focus_it = (Elm_Object_Item *)item;
+
+               if (m->send_sig_back_func)
+                       m->send_sig_back_func(m->base, E_HIGHLIGHT);
+
+               break;
+       default:
+               break;
+       }
+}
+