From b6781befc4fecf391f441ede8162ebf26f13fef1 Mon Sep 17 00:00:00 2001 From: Soohye Shin Date: Wed, 15 Jul 2015 16:25:57 +0900 Subject: [PATCH] support mouse handling in view_recent - select recent item - select delete button Change-Id: If8184ff7ef9c3d4fc62a9cd4d54ab8971231081d Signed-off-by: Soohye Shin --- src/view/view_recent.c | 205 ++++++++++++++++++++++++----------------- 1 file changed, 119 insertions(+), 86 deletions(-) diff --git a/src/view/view_recent.c b/src/view/view_recent.c index f8fe89c..811106b 100644 --- a/src/view/view_recent.c +++ b/src/view/view_recent.c @@ -29,6 +29,12 @@ #define MESSAGE_NO_CONTENTS "No Contents" #define PADDING_BOX 26 +enum input_handler_type { + INPUT_HANDLER_TYPE_EO, + INPUT_HANDLER_TYPE_DELETE, + INPUT_HANDLER_TYPE_DISABLE_DELETE +}; + enum recent_item_type { RECENT_ITEM_ICON = 0x00, RECENT_ITEM_PREVIEW = 0x01 @@ -53,77 +59,144 @@ struct _bar_item { struct _priv *priv; }; -static void _btn_focused(int id, void *data, Evas_Object *obj, +static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) { - elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG); + struct _bar_item *bi; + + switch (id) { + case INPUT_HANDLER_TYPE_EO: + if (!data) + return; + + bi = data; + bi->priv->cur = bi; + /* fallthrought */ + case INPUT_HANDLER_TYPE_DELETE: + elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG); + break; + default: + return; + } } static void _unfocused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) { - elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG); -} - -static void _hide_done(void *data, Evas_Object *obj, const char *emission, - const char *source) -{ - viewmgr_pop_view(); + switch (id) { + case INPUT_HANDLER_TYPE_EO: + case INPUT_HANDLER_TYPE_DELETE: + elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG); + break; + default: + return; + } } -static void _dis_btn_key_down(int id, void *data, Evas *e, Evas_Object *obj, +static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { struct _priv *priv; + struct _bar_item *bi; - if (!data) + if (!data) { + _ERR("Invalid argument"); return; + } - priv = data; - - if (!strcmp(ev->keyname, KEY_BACK) || - !strcmp(ev->keyname, KEY_BACK_REMOTE) || - !strcmp(ev->keyname, KEY_DOWN)) { - elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); + switch (id) { + case INPUT_HANDLER_TYPE_EO: + bi = data; + priv = bi->priv; + + if (!strcmp(ev->keyname, KEY_DOWN) || + !strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) { + elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, + SRC_PROG); + } else if (!strcmp(ev->keyname, KEY_ENTER) || + !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { + datamgr_select_item(priv->dm, bi->di); + } + break; + case INPUT_HANDLER_TYPE_DELETE: + priv = data; + + if (!strcmp(ev->keyname, KEY_ENTER) || + !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { + elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, + SRC_PROG); + } else if (!strcmp(ev->keyname, KEY_ENTER) || + !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { + datamgr_clear_item(priv->dm); + elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, + SRC_PROG); + } else if (!strcmp(ev->keyname, KEY_DOWN)) { + if (!priv->cur) + priv->cur = eina_list_data_get(priv->list); + elm_object_focus_set(priv->cur->eo, EINA_TRUE); + } + break; + case INPUT_HANDLER_TYPE_DISABLE_DELETE: + priv = data; + + if (!strcmp(ev->keyname, KEY_DOWN) || + !strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)){ + elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, + SRC_PROG); + } + break; + default: + return; } } -static input_handler dis_btn_handler = { - .key_down = _dis_btn_key_down -}; - -static void _btn_key_down(int id, void *data, Evas *e, Evas_Object *obj, - Evas_Event_Key_Down *ev) +static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Mouse_Down *ev) { + struct _bar_item *bi; struct _priv *priv; - if (!data) + if (!data) { + _ERR("Invalid argument"); return; + } - priv = data; + switch (id) { + case INPUT_HANDLER_TYPE_EO: + bi = data; + priv = bi->priv; + + datamgr_select_item(priv->dm, bi->di); + break; + case INPUT_HANDLER_TYPE_DELETE: + priv = data; - if (!strcmp(ev->keyname, KEY_BACK) || - !strcmp(ev->keyname, KEY_BACK_REMOTE)) { - elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); - } else if (!strcmp(ev->keyname, KEY_ENTER) || - !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { datamgr_clear_item(priv->dm); - elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); - } else if (!strcmp(ev->keyname, KEY_DOWN)) { - if (!priv->cur) - priv->cur = eina_list_data_get(priv->list); - elm_object_focus_set(priv->cur->eo, EINA_TRUE); + elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, + SRC_PROG); + break; + default: + return; } } -static input_handler btn_handler = { - .focused = _btn_focused, +static input_handler handler = { + .focused = _focused, .unfocused = _unfocused, - .key_down = _btn_key_down + .key_down = _key_down, + .mouse_down = _mouse_down }; +static void _hide_done(void *data, Evas_Object *obj, const char *emission, + const char *source) +{ + viewmgr_pop_view(); +} + static void _add_delete_btn(struct _priv *priv, const char *ic_image, - const char *focus_ic_image, input_handler *handler) + const char *focus_ic_image, enum input_handler_type type) { Evas_Object *btn, *ic, *focus_ic; @@ -150,7 +223,7 @@ static void _add_delete_btn(struct _priv *priv, const char *ic_image, return; } - inputmgr_add_callback(btn, 0, handler, priv); + inputmgr_add_callback(btn, type, &handler, priv); priv->del_btn = btn; } @@ -201,47 +274,6 @@ static Evas_Object *_create(Evas_Object *win, void *data) return base; } -static void _eo_key_down(int id, void *data, Evas *e, Evas_Object *obj, - Evas_Event_Key_Down *ev) -{ - struct _bar_item *bi; - struct _priv *priv; - - if (!data) - return; - - bi = data; - priv = bi->priv; - - if (!strcmp(ev->keyname, KEY_DOWN) || !strcmp(ev->keyname, KEY_BACK) - || !strcmp(ev->keyname, KEY_BACK_REMOTE)) { - elm_object_signal_emit(priv->base, SIG_HIDE_RECENT, SRC_PROG); - } else if (!strcmp(ev->keyname, KEY_ENTER) || - !strcmp(ev->keyname, KEY_ENTER_REMOTE)) { - datamgr_select_item(priv->dm, bi->di); - } -} - -static void _eo_focused(int id, void *data, Evas_Object *obj, - Elm_Object_Item *item) -{ - struct _bar_item *bi; - - if (!data) - return; - - elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG); - - bi = data; - bi->priv->cur = bi; -} - -static input_handler eo_handler = { - .focused = _eo_focused, - .unfocused = _unfocused, - .key_down = _eo_key_down -}; - static struct _bar_item *_pack_item(struct _priv *priv, Evas_Object *box, struct datamgr_item *di) { @@ -305,7 +337,7 @@ static struct _bar_item *_pack_item(struct _priv *priv, Evas_Object *box, } elm_object_focus_next_object_set(eo, priv->del_btn, ELM_FOCUS_UP); - inputmgr_add_callback(eo, 0, &eo_handler, bi); + inputmgr_add_callback(eo, INPUT_HANDLER_TYPE_EO, &handler, bi); elm_box_pack_end(box, eo); bi->eo = eo; @@ -326,7 +358,8 @@ static void _load_recent(struct _priv *priv) elm_object_part_text_set(priv->base, PART_RECENT_NO_CONTENTS, MESSAGE_NO_CONTENTS); _add_delete_btn(priv, IMAGE_RECENT_DELETE_DIS, - IMAGE_RECENT_DELETE_DIS, &dis_btn_handler); + IMAGE_RECENT_DELETE_DIS, + INPUT_HANDLER_TYPE_DISABLE_DELETE); return; } @@ -348,7 +381,7 @@ static void _load_recent(struct _priv *priv) elm_box_padding_set(box, PADDING_BOX * elm_config_scale_get(), 0); _add_delete_btn(priv, IMAGE_RECENT_DELETE_NOR, IMAGE_RECENT_DELETE_FOC, - &btn_handler); + INPUT_HANDLER_TYPE_DELETE); EINA_LIST_FOREACH(list, l, di) { bi = _pack_item(priv, box, di); @@ -392,14 +425,14 @@ static void _unload_recent(struct _priv *priv) struct _bar_item *bi; EINA_LIST_FREE(priv->list, bi) { - inputmgr_remove_callback(bi->eo, &eo_handler); + inputmgr_remove_callback(bi->eo, &handler); evas_object_del(bi->eo); free(bi); } elm_box_clear(priv->box); evas_object_del(priv->scr); - inputmgr_remove_callback(priv->del_btn, &btn_handler); + inputmgr_remove_callback(priv->del_btn, &handler); evas_object_del(priv->del_btn); priv->del_btn = NULL; -- 2.34.1