diff options
author | Jehun Lim <jehun.lim@samsung.com> | 2015-08-17 13:22:05 +0900 |
---|---|---|
committer | Jehun Lim <jehun.lim@samsung.com> | 2015-08-17 18:43:22 +0900 |
commit | 9b7caad610ebbed2caf7d72ed439f69c57ba5260 (patch) | |
tree | a51916de4d1dec9393e4704ec51d74bb0e4f33d0 | |
parent | 604fe9c333bf7d4ba10d1d89fe8143524dc192d4 (diff) | |
download | air_mediahub-9b7caad610ebbed2caf7d72ed439f69c57ba5260.tar.gz air_mediahub-9b7caad610ebbed2caf7d72ed439f69c57ba5260.tar.bz2 air_mediahub-9b7caad610ebbed2caf7d72ed439f69c57ba5260.zip |
listmgr: add key down callback for each layout
Change-Id: I2a72510913bcb0924028867a7cc7afed4cf8ed7b
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r-- | include/define.h | 1 | ||||
-rw-r--r-- | include/util/listmgr.h | 2 | ||||
-rw-r--r-- | res/edc/widgets/gengrid.edc | 15 | ||||
-rw-r--r-- | src/layout/gallery.c | 32 | ||||
-rw-r--r-- | src/layout/movie.c | 32 | ||||
-rw-r--r-- | src/layout/music.c | 32 | ||||
-rw-r--r-- | src/util/listmgr.c | 50 |
7 files changed, 163 insertions, 1 deletions
diff --git a/include/define.h b/include/define.h index 5872281..94f5701 100644 --- a/include/define.h +++ b/include/define.h @@ -70,6 +70,7 @@ #define SIG_BTN_CLICKED "btn,clicked" #define SIG_BTN_SELECTED "btn,selected" #define SIG_BTN_UNSELECTED "btn,unselected" +#define SIG_ITEM_FOCUSED "item,focused" #define SIG_ITEM_SELECTED "item,selected" #define SIG_ITEM_UNSELECTED "item,unselected" #define SIG_ELM_UNFOCUSED "elm,state,unfocused" diff --git a/include/util/listmgr.h b/include/util/listmgr.h index 1f12061..ff7077c 100644 --- a/include/util/listmgr.h +++ b/include/util/listmgr.h @@ -30,6 +30,8 @@ struct play_info_ops { struct grid_ops { struct grid_class *gclass; + void (*key_down_cb)(void *data, Elm_Object_Item *it, + Evas_Event_Key_Down *ev); void (*selected_cb)(void *data, Elm_Object_Item *it); void *ops_data; }; diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc index 174cbb0..30a336c 100644 --- a/res/edc/widgets/gengrid.edc +++ b/res/edc/widgets/gengrid.edc @@ -441,6 +441,11 @@ group { target: "part_focus3"; target: "defaultbg_text"; transition: TRANSITION_FOCUS; + after: "item_focused"; + } + program { + name: "item_focused"; + action: SIGNAL_EMIT SIG_ITEM_FOCUSED SIG_SOURCE_EDC; } program { name: "go_passive"; @@ -892,6 +897,11 @@ group { target: "part_focus4"; target: PART_ELM_TEXT_PLAYTIME; transition: TRANSITION_FOCUS; + after: "item_focused"; + } + program { + name: "item_focused"; + action: SIGNAL_EMIT SIG_ITEM_FOCUSED SIG_SOURCE_EDC; } program { name: "go_passive"; @@ -1546,6 +1556,11 @@ group { name: "focus,in,anim,2"; action: STATE_SET "selected" 0.0; target: "defaultbg_text"; + after: "item_focused"; + } + program { + name: "item_focused"; + action: SIGNAL_EMIT SIG_ITEM_FOCUSED SIG_SOURCE_EDC; } program { name: "go_passive"; diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 30f6e77..03c6d30 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -19,6 +19,7 @@ #include <app_debug.h> #include <app_media.h> #include <gridmgr.h> +#include <inputmgr.h> #include <layoutmgr.h> #include <viewmgr.h> @@ -192,6 +193,36 @@ static void _grid_selected_cb(void *data, Elm_Object_Item *it) viewmgr_push_view(VIEW_VIEWER); } +static void _grid_key_down_cb(void *data, Elm_Object_Item *it, + Evas_Event_Key_Down *ev) +{ + app_media *am; + struct view_update_data vdata; + struct _priv *priv; + + if (!data || !ev) { + _ERR("invalid argument"); + return; + } + + priv = data; + + if (!strcmp(ev->keyname, KEY_MENU) || + !strcmp(ev->keyname, KEY_MENU_REMOTE)) { + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(priv->md); + vdata.index = util_get_media_index(vdata.list, am); + priv->cur_index = vdata.index; + + viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + } +} + static struct listmgr_data *_create_listmgr_data(struct _priv *priv) { struct listmgr_data *data; @@ -215,6 +246,7 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) } gops->gclass = &_gclass; + gops->key_down_cb = _grid_key_down_cb; gops->selected_cb = _grid_selected_cb; gops->ops_data = priv; diff --git a/src/layout/movie.c b/src/layout/movie.c index 4a4aaa9..0028026 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -20,6 +20,7 @@ #include <app_contents.h> #include <app_media.h> #include <gridmgr.h> +#include <inputmgr.h> #include <layoutmgr.h> #include <viewmgr.h> @@ -378,6 +379,36 @@ static void _grid_selected_cb(void *data, Elm_Object_Item *it) _item_selected(priv, am); } +static void _grid_key_down_cb(void *data, Elm_Object_Item *it, + Evas_Event_Key_Down *ev) +{ + app_media *am; + struct view_update_data vdata; + struct _priv *priv; + + if (!data || !ev) { + _ERR("invalid argument"); + return; + } + + priv = data; + + if (!strcmp(ev->keyname, KEY_MENU) || + !strcmp(ev->keyname, KEY_MENU_REMOTE)) { + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(priv->md); + vdata.index = util_get_media_index(vdata.list, am); + priv->cur_index = vdata.index; + + viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + } +} + static struct listmgr_data *_create_listmgr_data(struct _priv *priv) { struct listmgr_data *data; @@ -409,6 +440,7 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) goto err3; gops->gclass = &_gclass; + gops->key_down_cb = _grid_key_down_cb; gops->selected_cb = _grid_selected_cb; gops->ops_data = priv; diff --git a/src/layout/music.c b/src/layout/music.c index 5af1198..f1c9da7 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -20,6 +20,7 @@ #include <app_contents.h> #include <app_media.h> #include <gridmgr.h> +#include <inputmgr.h> #include <layoutmgr.h> #include <viewmgr.h> @@ -311,6 +312,36 @@ static void _grid_selected_cb(void *data, Elm_Object_Item *it) _item_selected(priv, am); } +static void _grid_key_down_cb(void *data, Elm_Object_Item *it, + Evas_Event_Key_Down *ev) +{ + app_media *am; + struct view_update_data vdata; + struct _priv *priv; + + if (!data || !ev) { + _ERR("invalid argument"); + return; + } + + priv = data; + + if (!strcmp(ev->keyname, KEY_MENU) || + !strcmp(ev->keyname, KEY_MENU_REMOTE)) { + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(priv->md); + vdata.index = util_get_media_index(vdata.list, am); + priv->cur_index = vdata.index; + + viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + } +} + static struct listmgr_data *_create_listmgr_data(struct _priv *priv) { struct listmgr_data *data; @@ -342,6 +373,7 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) goto err3; gops->gclass = &_gclass; + gops->key_down_cb = _grid_key_down_cb; gops->selected_cb = _grid_selected_cb; gops->ops_data = priv; diff --git a/src/util/listmgr.c b/src/util/listmgr.c index 0b279b2..88e34ec 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -44,6 +44,7 @@ struct listmgr { Evas_Object *play_info; Evas_Object *focused; + Elm_Object_Item *focused_it; Elm_Object_Item *selected_it; struct gridmgr *gmgr; @@ -57,6 +58,7 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { struct listmgr *lmgr; + struct grid_ops *gops; if (!data || !obj || !ev) return; @@ -88,6 +90,13 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, if (!strcmp(ev->keyname, KEY_BACK) || !strcmp(ev->keyname, KEY_BACK_REMOTE)) elm_object_focus_next(obj, ELM_FOCUS_UP); + else { + gops = lmgr->data->gops; + if (gops->key_down_cb) + gops->key_down_cb(gops->ops_data, + lmgr->focused_it, ev); + } + break; default: break; @@ -234,11 +243,50 @@ static void _play_info_selected_cb(void *data, Evas_Object *obj, pops->selected_cb(pops->ops_data, obj); } +static void _item_focused_cb(void *data, Elm_Object_Item *it, + const char *emission, const char *source) +{ + struct listmgr *lmgr; + + if (!data || !it) + return; + + lmgr = data; + + lmgr->focused_it = it; +} + +static void _realized_cb(int id, void *data, Evas_Object *obj, + Elm_Object_Item *it) +{ + struct listmgr *lmgr; + + if (!data || !it) + return; + + lmgr = data; + + elm_object_item_signal_callback_add(it, SIG_ITEM_FOCUSED, + SIG_SOURCE_EDC,_item_focused_cb, lmgr); +} + +static void _unrealized_cb(int id, void *data, Evas_Object *obj, + Elm_Object_Item *it) +{ + if (!it) + return; + + elm_object_item_signal_callback_del(it, SIG_ITEM_FOCUSED, + SIG_SOURCE_EDC, _item_focused_cb); +} + static input_handler _grid_handler = { .key_down = _key_down_cb, .mouse_move = _mouse_move_cb, .focused = _focused_cb, - .selected = _grid_selected_cb + .selected = _grid_selected_cb, + .realized = _realized_cb, + .unrealized = _unrealized_cb }; static input_handler _handler = { |