summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-08-17 13:22:05 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-08-17 18:43:22 +0900
commit9b7caad610ebbed2caf7d72ed439f69c57ba5260 (patch)
treea51916de4d1dec9393e4704ec51d74bb0e4f33d0
parent604fe9c333bf7d4ba10d1d89fe8143524dc192d4 (diff)
downloadair_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.h1
-rw-r--r--include/util/listmgr.h2
-rw-r--r--res/edc/widgets/gengrid.edc15
-rw-r--r--src/layout/gallery.c32
-rw-r--r--src/layout/movie.c32
-rw-r--r--src/layout/music.c32
-rw-r--r--src/util/listmgr.c50
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 = {