Add event handler for action menu 12/46312/3
authorjinwoo.shin <jw0227.shin@samsung.com>
Wed, 19 Aug 2015 06:34:05 +0000 (15:34 +0900)
committerjinwoo.shin <jw0227.shin@samsung.com>
Wed, 19 Aug 2015 06:36:24 +0000 (15:36 +0900)
Change-Id: I90ef2643d2e5c8f8540d273845c1cb0ca7a29928
Signed-off-by: jinwoo.shin <jw0227.shin@samsung.com>
src/main.c
src/view_action_menu.c

index 16fc240..cde8154 100644 (file)
@@ -67,6 +67,12 @@ static struct key_map g_kmap[] = {
                        KEY_8, KEY_9, KEY_MINUS
                }
        },
+       {
+               VIEW_ACTION_MENU,
+               {
+                       KEY_MENU, KEY_MENU_REMOTE
+               }
+       },
 };
 
 static Eina_Bool _key_down_cb(void *data, int type, void *ei)
index 97f6473..6e428e7 100644 (file)
 
 #include <Elementary.h>
 #include <viewmgr.h>
+#include <inputmgr.h>
 #include <app_debug.h>
 
 #include "define.h"
 #include "util.h"
+#include "view.h"
 
 #define BUTTON_MAX 16
 #define BUTTON_BORDER 1
 
 enum _button_id {
        BUTTON_INVALID = -1,
+       BUTTON_LIVETV,
        BUTTON_FAV,
        BUTTON_LOCK,
 };
 
 struct _priv {
        Evas_Object *base;
+       Evas_Object *live_btn;
        Evas_Object *menu_btn[BUTTON_MAX];
 };
 
@@ -95,6 +99,59 @@ static struct _button buttons[] = {
        }
 };
 
+static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Down *ev)
+{
+       if (!strcmp(ev->keyname, KEY_BACK) ||
+                       !strcmp(ev->keyname, KEY_BACK_REMOTE))
+               viewmgr_hide_view(VIEW_ACTION_MENU);
+}
+
+static input_handler key_handler = {
+       .key_down = _key_down_cb,
+};
+
+static void _button_click(int id)
+{
+       switch (id) {
+       case BUTTON_LIVETV:
+               viewmgr_hide_view(VIEW_ACTION_MENU);
+               break;
+       }
+}
+
+static void _button_key_up_cb(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Up *ev)
+{
+       if (strcmp(ev->keyname, KEY_ENTER) &&
+               strcmp(ev->keyname, KEY_ENTER_REMOTE))
+               return;
+
+       _button_click(id);
+}
+
+static void _button_mouse_up_cb(int id, void *data, Evas *e,
+               Evas_Object *obj, Evas_Event_Mouse_Up *ev)
+{
+       _button_click(id);
+}
+
+static void _button_mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Move *ev)
+{
+       if (!obj)
+               return;
+
+       if (!elm_object_focus_get(obj))
+               elm_object_focus_set(obj, EINA_TRUE);
+}
+
+static input_handler button_handler = {
+       .key_up = _button_key_up_cb,
+       .mouse_up = _button_mouse_up_cb,
+       .mouse_move = _button_mouse_move_cb
+};
+
 static bool _draw_top_area(struct _priv *priv)
 {
        Evas_Object *btn;
@@ -106,6 +163,9 @@ static bool _draw_top_area(struct _priv *priv)
                return false;
        }
 
+       inputmgr_add_callback(btn, BUTTON_LIVETV, &button_handler, priv);
+       priv->live_btn = btn;
+
        return true;
 }
 
@@ -152,6 +212,8 @@ static bool _draw_menu_area(struct _priv *priv)
                                PART_ICON_1_SELECTED);
                util_add_icon(btn, buttons[i].state[TOGGLE].disabled,
                                PART_ICON_1_DISABLED);
+               inputmgr_add_callback(btn, buttons[i].id,
+                               &button_handler, priv);
 
                col = i % ITEMS_IN_ROW;
                row = i / ITEMS_IN_ROW;
@@ -247,6 +309,8 @@ static Evas_Object *_create(Evas_Object *win, void *data)
 
        _draw_view_content(priv);
 
+       inputmgr_add_callback(priv->base, 0, &key_handler, priv);
+
        return base;
 }
 
@@ -260,8 +324,9 @@ static void _show(void *data)
        }
        priv = data;
 
-       if (priv->base)
-               evas_object_show(priv->base);
+       evas_object_show(priv->base);
+
+       elm_object_focus_set(priv->live_btn, EINA_TRUE);
 }
 
 static void _hide(void *data)
@@ -274,13 +339,13 @@ static void _hide(void *data)
        }
        priv = data;
 
-       if (priv->base)
-               evas_object_hide(priv->base);
+       evas_object_hide(priv->base);
 }
 
 static void _destroy(void *data)
 {
        struct _priv *priv;
+       int i;
 
        if (!data) {
                _ERR("Get data failed.");
@@ -288,18 +353,41 @@ static void _destroy(void *data)
        }
        priv = data;
 
-       if (priv->base)
-               evas_object_del(priv->base);
+       inputmgr_remove_callback(priv->live_btn, &button_handler);
+       inputmgr_remove_callback(priv->base, &key_handler);
+
+       i = 0;
+       while (priv->menu_btn[i] && i < BUTTON_MAX) {
+               inputmgr_remove_callback(priv->menu_btn[i], &button_handler);
+               i++;
+       }
+
+       evas_object_del(priv->base);
 
        free(priv);
 }
 
+static void _update(void *view_data, int type, void *data)
+{
+       if (type == UPDATE_TYPE_INPUT_KEY_DOWN) {
+               Evas_Event_Key_Down *ev = data;
+
+               if (!ev) {
+                       _ERR("failed to get ev");
+                       return;
+               }
+
+               viewmgr_show_view(VIEW_ACTION_MENU);
+       }
+}
+
 static view_class _vclass = {
        .view_id = VIEW_ACTION_MENU,
        .create = _create,
        .show = _show,
        .hide = _hide,
        .destroy = _destroy,
+       .update = _update
 };
 
 view_class *view_action_menu_get_vclass(void)