refactoring allsource_view.cpp 10/37010/1
authorJehun Lim <jehun.lim@samsung.com>
Wed, 18 Mar 2015 04:18:13 +0000 (13:18 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Wed, 18 Mar 2015 04:18:13 +0000 (13:18 +0900)
1. convert C functions to CPP class member functions
2. apply InputHandler in application-common

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

index 1fc7e97..7d12832 100644 (file)
@@ -20,8 +20,6 @@
 
 #define  ALLSOURCE_VIEW  "ALLSOURCE_VIEW"
 
-typedef void (*sig_event_cb)(Evas_Object *base, int signal);
-
 enum user_signals {
        E_HIGHLIGHT = 0,
        E_RETURN
@@ -32,21 +30,36 @@ enum launch_mode {
        SRC_NEARBY,
 };
 
-class CAllSourceView : public CBaseView {
+class CAllSourceView : public CBaseView, IMouseMoveListener, IFocusedListener {
 private:
        struct SAllSourceView* m;
 
 protected:
        virtual void t_OnShow(void);
 
+private:
+       static void sm_CbGetSignalFromLayout(void *cookie, int signal);
+       static void sm_CbUpdateSrcList(void *cookie, void *data,
+                               enum update_ui type);
+       Evas_Object *m_AddLayout(Evas_Object *win);
+       Evas_Object *m_AddBtn(const char *style, const char *str);
+       bool m_AddMenuArea(void);
+
 public:
-       CAllSourceView(const char *szViewId) : CBaseView(szViewId), m(0) {}
+       CAllSourceView(const char *szViewId) : CBaseView(szViewId),
+               IMouseMoveListener(this), IFocusedListener(this),
+               m(0) {}
        virtual ~CAllSourceView() {}
 
        virtual Evas_Object *Base(void);
 
        virtual bool Create(void *data);
        virtual void Destroy(void);
+
+public:
+       virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev);
+       virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev);
+       virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
 };
 
 
index e33fe15..17b7e42 100644 (file)
@@ -54,6 +54,8 @@ public:
 
        void Update(void *data, enum update_ui type);
 
+       bool SetSendSigCallback(void (*cb)(void *cookie, int sig), void *cookie);
+
 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);
index c7a8d75..9444051 100644 (file)
@@ -47,6 +47,8 @@ public:
 
        void Update(void *data, enum update_ui type);
 
+       bool SetSendSigCallback(void (*cb)(void *cookie, int sig), void *cookie);
+
 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);
index 813de07..6b94eb5 100644 (file)
@@ -25,6 +25,7 @@
 #include "BaseLayout.h"
 #include "LayoutMgr.h"
 #include "InputHandler.h"
+#include "source_mgr.h"
 #include "allsource_view.h"
 #include "menu_view.h"
 
index 645b234..0984b62 100644 (file)
 #include "plugged_layout.h"
 #include "nearby_layout.h"
 
-#define PRIV "priv"
 #define TEXT_PLUGGED "PLUGGED"
 #define TEXT_NEARBY "NEARBY"
 
 #define LAYOUT_PLUGGED "LAYOUT_PLUGGED"
 #define LAYOUT_NEARBY "LAYOUT_NEARBY"
 
+enum EObjectType {
+       ALL_PLUG_BTN = 0,
+       ALL_NEAR_BTN
+};
+
 struct SAllSourceView {
        Evas_Object *base;
        Evas_Object *plug_btn;
@@ -59,53 +63,33 @@ struct SAllSourceView {
        }
 };
 
-static void _key_down_cb(void *data, Evas *e, Evas_Object *obj, void *ev_info)
-{
-       Evas_Event_Key_Down *ev;
-
-       if (!ev_info) {
-               _ERR("Parameter is NULL.");
-               return;
-       }
-
-       ev = (Evas_Event_Key_Down*)ev_info;
-       if (!ev->keyname)
-               return;
-
-       if (!strcmp(ev->keyname, KEY_BACK))
-               app_efl_exit();
-}
-
-static Evas_Object *_add_layout(Evas_Object *win)
+Evas_Object *CAllSourceView::m_AddLayout(Evas_Object *win)
 {
        Evas_Object *base;
 
-       UTIL_CHECK_RETURN_NULL(win);
+       if (!win)
+               return NULL;
 
-       base = util_add_layout(win, GRP_ALLSRC);
-       UTIL_CHECK_RETURN_NULL(base);
+       base = elm_layout_add(win);
+       if (!base)
+               return NULL;
 
+       elm_layout_file_set(base, EDJ_FILE, GRP_ALLSRC);
        elm_object_part_text_set(base, PART_TITLE_STR, _("SOURCE"));
 
-       evas_object_event_callback_add(base,
-                       EVAS_CALLBACK_KEY_DOWN, _key_down_cb, NULL);
+       evas_object_size_hint_weight_set(base,
+                       EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 
        evas_object_show(base);
 
        return base;
 }
 
-static Evas_Object *_add_btn(Evas_Object *parent, const char *style,
-               const char *str)
+Evas_Object *CAllSourceView::m_AddBtn(const char *style, const char *str)
 {
        Evas_Object *btn;
 
-       if (!parent) {
-               _ERR("parent is NULL.");
-               return NULL;
-       }
-
-       btn = elm_button_add(parent);
+       btn = elm_button_add(m->base);
        if (!btn) {
                _ERR("add button error.");
                return NULL;
@@ -124,121 +108,56 @@ static Evas_Object *_add_btn(Evas_Object *parent, const char *style,
        return btn;
 }
 
-static void _plug_btn_focus_cb(void *data, Evas_Object *obj, void *ev)
-{
-       struct SAllSourceView *priv;
-
-       if (!data)
-               return;
-
-       priv = (SAllSourceView*)data;
-       priv->focus_btn = obj;
-
-       priv->pLayoutMgr->Show(LAYOUT_PLUGGED);
-}
-
-static void _near_btn_focus_cb(void *data, Evas_Object *obj, void *ev)
-{
-       struct SAllSourceView *priv;
-
-       if (!data)
-               return;
-
-       priv = (SAllSourceView*)data;
-       priv->focus_btn = obj;
-
-       priv->pLayoutMgr->Show(LAYOUT_NEARBY);
-}
-
-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 bool _add_menu_area(Evas_Object *base, struct SAllSourceView *priv)
+bool CAllSourceView::m_AddMenuArea(void)
 {
-       if (!base || !priv)
-               return false;
-
-       priv->plug_btn = _add_btn(base, BTN_STYLE_PLUG, _(TEXT_PLUGGED));
-       if (!priv->plug_btn) {
+       m->plug_btn = m_AddBtn(BTN_STYLE_PLUG, _(TEXT_PLUGGED));
+       if (!m->plug_btn) {
                _ERR("Add plug_button failed.");
                return false;
        }
-       evas_object_smart_callback_add(priv->plug_btn,
-                       "focused",
-                       _plug_btn_focus_cb, priv);
-       evas_object_event_callback_add(priv->plug_btn,
-                       EVAS_CALLBACK_MOUSE_MOVE,
-                       _menu_btn_mousemove, priv);
-
-       priv->near_btn = _add_btn(base, BTN_STYLE_NEAR, _(TEXT_NEARBY));
-       if (!priv->near_btn) {
+
+       elm_object_part_content_set(m->base, PART_MENU_PLUGGED, m->plug_btn);
+
+       Connect(m->plug_btn, ALL_PLUG_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
+
+       m->near_btn = m_AddBtn(BTN_STYLE_NEAR, _(TEXT_NEARBY));
+       if (!m->near_btn) {
                _ERR("Add nearby button failed");
-               evas_object_del(priv->plug_btn);
+               evas_object_del(m->plug_btn);
                return false;
        }
-       evas_object_smart_callback_add(priv->near_btn,
-                       "focused",
-                       _near_btn_focus_cb, priv);
-       evas_object_event_callback_add(priv->near_btn,
-                       EVAS_CALLBACK_MOUSE_MOVE,
-                       _menu_btn_mousemove, priv);
 
-       elm_object_part_content_set(base, PART_MENU_NEARBY, priv->near_btn);
-       elm_object_part_content_set(base, PART_MENU_PLUGGED, priv->plug_btn);
+       elm_object_part_content_set(m->base, PART_MENU_NEARBY, m->near_btn);
+
+       Connect(m->near_btn, ALL_NEAR_BTN, TYPE_KEY_DOWN | TYPE_MOUSE_MOVE | TYPE_FOCUSED);
 
        return true;
 }
 
-static void _get_signal_from_layout(Evas_Object *base, int signal)
+void CAllSourceView::sm_CbGetSignalFromLayout(void *cookie, int signal)
 {
-       struct SAllSourceView *priv;
-
-       if (!base)
-               return;
-
-       priv = (SAllSourceView *)evas_object_data_get(base, PRIV);
-       if (!priv)
-               return;
+       SAllSourceView *m = (SAllSourceView *)cookie;
 
        if (signal == E_HIGHLIGHT)
-               elm_object_signal_emit(priv->focus_btn,
+               elm_object_signal_emit(m->focus_btn,
                                SIG_ELM_ACTION_HIGHLIGHT, SIG_ELM);
        else if (signal == E_RETURN)
-               elm_object_focus_set(priv->focus_btn, EINA_TRUE);
+               elm_object_focus_set(m->focus_btn, EINA_TRUE);
 }
 
-static void _update_src_list(void *user_data, void *data, enum update_ui type)
+void CAllSourceView::sm_CbUpdateSrcList(void *cookie, void *data, enum update_ui type)
 {
-       Evas_Object *base;
-       struct SAllSourceView *priv;
-
-       if (!user_data) {
-               _ERR("Invaild data.");
-               return;
-       }
-
-       base = (Evas_Object*)user_data;
-       priv = (SAllSourceView *)evas_object_data_get(base, PRIV);
-       if (!priv) {
-               _ERR("Invaild data.");
-               return;
-       }
+       SAllSourceView *m = (SAllSourceView *)cookie;
 
        if (type == SRC_PLUG_ADD_ONE
                        || type == SRC_PLUG_DEL_ONE
                        || type == SRC_UPDATE_ALL)
-               priv->pPluggedLayout->Update(data, type);
+               m->pPluggedLayout->Update(data, type);
 
        if (type == SRC_NEAR_ADD_ONE
                        || type == SRC_NEAR_DEL_ONE
                        || type == SRC_UPDATE_ALL)
-               priv->pNearbyLayout->Update(data, type);
+               m->pNearbyLayout->Update(data, type);
 }
 
 Evas_Object *CAllSourceView::Base(void)
@@ -252,7 +171,7 @@ bool CAllSourceView::Create(void *data)
 {
        ASSERT(!m);
 
-       Evas_Object *win = NULL, *base = NULL;
+       Evas_Object *win = NULL;
        CViewMgr *vmgr;
 
        vmgr = CViewMgr::GetInstance();
@@ -261,38 +180,40 @@ bool CAllSourceView::Create(void *data)
        _CREATE_BEGIN
        {
                _CHECK(win = vmgr->Window());
-               _CHECK(base = _add_layout(win));
                _CHECK(m = new SAllSourceView);
-               _CHECK(CSourceMgr::Initialize(_update_src_list, base));
+               _CHECK(m->base = m_AddLayout(win));
+               _CHECK(CSourceMgr::Initialize(sm_CbUpdateSrcList, m));
                _CHECK(m->pLayoutMgr = new CLayoutMgr);
-               _CHECK(m->pLayoutMgr->Create(base, NULL));
+               _CHECK(m->pLayoutMgr->Create(m->base, NULL));
                _CHECK(m->pPluggedLayout = new CPluggedLayout(LAYOUT_PLUGGED));
                _CHECK(m->pNearbyLayout = new CNearbyLayout(LAYOUT_NEARBY));
-               _CHECK(m->pPluggedLayout->Create(m->pLayoutMgr, (void *)_get_signal_from_layout));
-               _CHECK(m->pNearbyLayout->Create(m->pLayoutMgr, (void *)_get_signal_from_layout));
+               _CHECK(m->pPluggedLayout->Create(m->pLayoutMgr, NULL));
+               _CHECK(m->pPluggedLayout->SetSendSigCallback(sm_CbGetSignalFromLayout, m));
+               _CHECK(m->pNearbyLayout->Create(m->pLayoutMgr, NULL));
+               _CHECK(m->pNearbyLayout->SetSendSigCallback(sm_CbGetSignalFromLayout, m));
                _CHECK(m->pLayoutMgr->AddLayout(m->pPluggedLayout));
                _CHECK(m->pLayoutMgr->AddLayout(m->pNearbyLayout));
-               _CHECK(_add_menu_area(base, m))
+               _CHECK(m_AddMenuArea());
                _WHEN_SUCCESS{
                        m->vmgr = vmgr;
-                       m->base = base;
                        m->mode = (launch_mode)(size_t)data;
-                       evas_object_data_set(base, PRIV, m);
                        CSourceMgr::GetInstance()->Refresh();
                        CBaseView::Create(NULL);
                }
                _CHECK_FAIL{}
                _CHECK_FAIL{ m->pLayoutMgr->RemoveLayout(m->pNearbyLayout); }
                _CHECK_FAIL{ m->pLayoutMgr->RemoveLayout(m->pPluggedLayout); }
+               _CHECK_FAIL{}
                _CHECK_FAIL{ m->pNearbyLayout->Destroy(); }
+               _CHECK_FAIL{}
                _CHECK_FAIL{ m->pPluggedLayout->Destroy(); }
                _CHECK_FAIL{ delete m->pNearbyLayout; m->pNearbyLayout = NULL; }
                _CHECK_FAIL{ delete m->pPluggedLayout; m->pPluggedLayout = NULL; }
                _CHECK_FAIL{ m->pLayoutMgr->Destroy(); }
                _CHECK_FAIL{ delete m->pLayoutMgr; m->pLayoutMgr = NULL; }
                _CHECK_FAIL{ CSourceMgr::Finalize(); }
+               _CHECK_FAIL{ evas_object_del(m->base); }
                _CHECK_FAIL{ delete m; m = NULL; }
-               _CHECK_FAIL{ evas_object_del(base); }
                _CHECK_FAIL{}
        } _CREATE_END_AND_CATCH{ return false; }
 
@@ -327,3 +248,44 @@ void CAllSourceView::t_OnShow(void)
 
        elm_object_focus_set(btn, EINA_TRUE);
 }
+
+void CAllSourceView::OnKeyDown(int id, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev)
+{
+       switch (id) {
+       case ALL_PLUG_BTN:
+       case ALL_NEAR_BTN:
+               if (!strcmp(ev->keyname, KEY_BACK))
+                       app_efl_exit();
+       default:
+               break;
+       }
+}
+
+void CAllSourceView::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev)
+{
+       switch (id) {
+       case ALL_PLUG_BTN:
+       case ALL_NEAR_BTN:
+               if (!elm_object_focus_get(obj))
+                       elm_object_focus_set(obj, EINA_TRUE);
+               break;
+       default:
+               break;
+       }
+}
+
+void CAllSourceView::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       switch (id) {
+       case ALL_PLUG_BTN:
+               m->focus_btn = obj;
+               m->pLayoutMgr->Show(LAYOUT_PLUGGED);
+               break;
+       case ALL_NEAR_BTN:
+               m->focus_btn = obj;
+               m->pLayoutMgr->Show(LAYOUT_NEARBY);
+               break;
+       default:
+               break;
+       }
+}
index 8c9ac78..b3f08f0 100644 (file)
@@ -54,6 +54,11 @@ enum EObjectType {
        NEARBY_BTN_LAYOUT
 };
 
+struct SSigCallbackPair {
+       void (*cb)(void *cookie, int sig);
+       void *cookie;
+};
+
 struct SNearbyLayout {
        Evas_Object *base;
        Evas_Object *grid;
@@ -65,7 +70,7 @@ struct SNearbyLayout {
        CViewMgr *vmgr;
        int list_count;
 
-       sig_event_cb send_sig_back;
+       SSigCallbackPair *SigCb;
 
        SNearbyLayout() {
                memset(this, 0, sizeof(SNearbyLayout));
@@ -182,8 +187,7 @@ void CNearbyLayout::m_DrawNoContentArea(void)
 
        m_AddSetNetworkButton();
 
-       if (m->send_sig_back)
-               m->send_sig_back(m->base, E_RETURN);
+       m->SigCb->cb(m->SigCb->cookie, E_RETURN);
 }
 
 void CNearbyLayout::m_DrawContentArea(void)
@@ -210,6 +214,22 @@ Evas_Object *CNearbyLayout::m_DrawGengrid(Evas_Object *layout)
        return grid;
 }
 
+bool CNearbyLayout::SetSendSigCallback(void (*cb)(void *cookie, int sig), void *cookie)
+{
+       ASSERT(m);
+
+       SSigCallbackPair *rcb = new SSigCallbackPair;
+       if (!rcb)
+               return false;
+
+       rcb->cb = cb;
+       rcb->cookie = cookie;
+
+       m->SigCb = rcb;
+
+       return true;
+}
+
 bool CNearbyLayout::Create(CLayoutMgr *lmgr, void *data)
 {
        ASSERT(!m);
@@ -218,7 +238,7 @@ bool CNearbyLayout::Create(CLayoutMgr *lmgr, void *data)
        CViewMgr *vmgr;
        CSourceMgr *srcmgr;
 
-       if (!lmgr || !data)
+       if (!lmgr)
                return false;
 
        m = new SNearbyLayout;
@@ -254,7 +274,6 @@ bool CNearbyLayout::Create(CLayoutMgr *lmgr, void *data)
 
        m->srcmgr = srcmgr;
        m->vmgr = vmgr;
-       m->send_sig_back = (sig_event_cb)data;
 
        evas_object_data_set(m->base, NEARBY_DATA, m);
 
@@ -429,8 +448,7 @@ void CNearbyLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_Mo
 
                elm_object_item_focus_set(it, EINA_TRUE);
 
-               if (m->send_sig_back)
-                       m->send_sig_back(m->base, E_HIGHLIGHT);
+               m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);
 
                break;
        case NEARBY_BTN_TOP:
@@ -452,15 +470,12 @@ void CNearbyLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
        case NEARBY_GRID:
                m->focus_it = (Elm_Object_Item*)item;
 
-               if (m->send_sig_back)
-                       m->send_sig_back(m->base, E_HIGHLIGHT);
+               m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);
 
                break;
        case NEARBY_BTN_TOP:
        case NEARBY_BTN_LAYOUT:
-               if (m->send_sig_back)
-                       m->send_sig_back(m->base, E_HIGHLIGHT);
-
+               m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);
                break;
        default:
                break;
index 90475da..0b82ef2 100644 (file)
 #define TEXT_NO_SRC_TEXT_LINE1 "No plugged source"
 #define TEXT_NO_SRC_TEXT_LINE2 "Check connection status or install any cloud service."
 
+struct SSigCallbackPair {
+       void (*cb)(void *cookie, int sig);
+       void *cookie;
+};
+
 struct SPluggedLayout {
        Evas_Object *base;
        Evas_Object *grid;
@@ -48,7 +53,7 @@ struct SPluggedLayout {
        CSourceMgr *srcmgr;
        CViewMgr *vmgr;
 
-       sig_event_cb send_sig_back_func;
+       SSigCallbackPair *SigCb;
 
        SPluggedLayout() {
                memset(this, 0, sizeof(SPluggedLayout));
@@ -68,6 +73,22 @@ Evas_Object *CPluggedLayout::m_DrawGengrid(Evas_Object *layout)
        return grid;
 }
 
+bool CPluggedLayout::SetSendSigCallback(void (*cb)(void *cookie, int sig), void *cookie)
+{
+       ASSERT(m);
+
+       SSigCallbackPair *rcb = new SSigCallbackPair;
+       if (!rcb)
+               return false;
+
+       rcb->cb = cb;
+       rcb->cookie = cookie;
+
+       m->SigCb = rcb;
+
+       return true;
+}
+
 bool CPluggedLayout::Create(CLayoutMgr *lmgr, void *data)
 {
        ASSERT(!m);
@@ -76,7 +97,7 @@ bool CPluggedLayout::Create(CLayoutMgr *lmgr, void *data)
        CViewMgr *vmgr;
        CSourceMgr *srcmgr;
 
-       if (!lmgr || !data)
+       if (!lmgr)
                return false;
 
        m = new SPluggedLayout;
@@ -112,7 +133,6 @@ bool CPluggedLayout::Create(CLayoutMgr *lmgr, void *data)
 
        m->srcmgr = srcmgr;
        m->vmgr = vmgr;
-       m->send_sig_back_func = (sig_event_cb)data;
 
        evas_object_data_set(m->base, PLUGGED_DATA, m);
 
@@ -163,8 +183,7 @@ void CPluggedLayout::m_DrawNoContentArea(void)
        elm_object_part_content_unset(Layout(), PART_CONTENT_CONTENT);
        evas_object_hide(m->grid);
 
-       if (m->send_sig_back_func)
-               m->send_sig_back_func(m->base, E_RETURN);
+       m->SigCb->cb(m->SigCb->cookie, E_RETURN);
 }
 
 void CPluggedLayout::m_DrawContentArea(void)
@@ -297,8 +316,8 @@ void CPluggedLayout::OnMouseMove(int id, Evas *e, Evas_Object *obj, Evas_Event_M
 
                elm_object_item_focus_set(it, EINA_TRUE);
 
-               if (m->send_sig_back_func)
-                       m->send_sig_back_func(m->base, E_HIGHLIGHT);
+               m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);
+
                break;
        default:
                break;
@@ -311,8 +330,7 @@ void CPluggedLayout::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
        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);
+               m->SigCb->cb(m->SigCb->cookie, E_HIGHLIGHT);
 
                break;
        default: