From 604fe9c333bf7d4ba10d1d89fe8143524dc192d4 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Mon, 17 Aug 2015 15:49:39 +0900 Subject: [PATCH 01/16] add privileges for media Change-Id: I50386c04cb60f104b8bd3d04c76937efca9549ab Signed-off-by: Minkyu Kang --- org.tizen.mediahub.xml.in | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/org.tizen.mediahub.xml.in b/org.tizen.mediahub.xml.in index eb61bd4..253533a 100644 --- a/org.tizen.mediahub.xml.in +++ b/org.tizen.mediahub.xml.in @@ -7,4 +7,8 @@ org.tizen.mediahub.png + + http://tizen.org/privilege/content.write + http://tizen.org/privilege/mediastorage + -- 2.7.4 From 9b7caad610ebbed2caf7d72ed439f69c57ba5260 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Mon, 17 Aug 2015 13:22:05 +0900 Subject: [PATCH 02/16] listmgr: add key down callback for each layout Change-Id: I2a72510913bcb0924028867a7cc7afed4cf8ed7b Signed-off-by: Jehun Lim --- include/define.h | 1 + include/util/listmgr.h | 2 ++ res/edc/widgets/gengrid.edc | 15 ++++++++++++++ src/layout/gallery.c | 32 +++++++++++++++++++++++++++++ src/layout/movie.c | 32 +++++++++++++++++++++++++++++ src/layout/music.c | 32 +++++++++++++++++++++++++++++ src/util/listmgr.c | 50 ++++++++++++++++++++++++++++++++++++++++++++- 7 files changed, 163 insertions(+), 1 deletion(-) 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 #include #include +#include #include #include @@ -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 #include #include +#include #include #include @@ -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 #include #include +#include #include #include @@ -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 = { -- 2.7.4 From ec7bca210fe8ef9650fcece0a5d390439536aa06 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Mon, 17 Aug 2015 20:18:26 +0900 Subject: [PATCH 03/16] action_menu: draw Live TV button Change-Id: If4df2bdf289c4309bd913f10b2ccc57b97032d9b Signed-off-by: Jehun Lim --- include/view/action_menu.h | 3 ++ res/edc/widgets/button.edc | 131 +++++++++++++++++++++++++++++++++++++++++++++ src/layout/gallery.c | 1 + src/layout/movie.c | 1 + src/layout/music.c | 1 + src/view/action_menu.c | 70 ++++++++++++++++++++++++ 6 files changed, 207 insertions(+) diff --git a/include/view/action_menu.h b/include/view/action_menu.h index f74b934..afaae01 100644 --- a/include/view/action_menu.h +++ b/include/view/action_menu.h @@ -29,4 +29,7 @@ #define PART_ACTION_FAVORITE_TITLE "part.action_favorite_title" #define PART_ACTION_FAVORITE_AREA "part.action_favorite_area" +/* style */ +#define STYLE_BTN_LIVETV "action_btn_livetv" + #endif /* __AIR_MEDIAHUB_VIEW_ACTION_MENU_H__ */ diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index 48c87a5..264978a 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -2679,3 +2679,134 @@ group { } } } + +group { + name: "elm/button/base/action_btn_livetv"; + data.item: "focus_highlight" "on"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: COLOR_ITEM_FOCUS; + } + } + part { + name: "elm.text"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + text { + font: FONT_LIGHT; + size: 28; + align: 0.5 0.5; + } + color: COLOR_TEXT_NORMAL; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: COLOR_TEXT_FOCUS; + } + } + part { + name: "border_top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "bg"; + rel2 { + to: "bg"; + relative: 1.0 0.0; + } + min: 0 1; + align: 0.5 0.0; + color: COLOR_ITEM_BORDER; + fixed: 0 1; + } + } + part { + name: "border_left"; + inherit: "border_top"; + description { + state: "default" 0.0; + rel1 { + to: "border_top"; + relative: 0.0 1.0; + } + rel2 { + to: "bg"; + relative: 0.0 1.0; + } + min: 1 0; + align: 0.0 0.5; + fixed: 1 0; + } + } + part { + name: "border_right"; + inherit: "border_top"; + description { + state: "default" 0.0; + rel1 { + to: "border_top"; + relative: 1.0 1.0; + } + rel2 { + to: "bg"; + relative: 1.0 1.0; + } + min: 1 0; + align: 1.0 0.5; + fixed: 1 0; + } + } + part { + name: "border_bottom"; + inherit: "border_top"; + description { + state: "default" 0.0; + rel1 { + to: "border_left"; + relative: 1.0 1.0; + } + rel2 { + to: "border_right"; + relative: 0.0 1.0; + } + align: 0.5 1.0; + } + } + } + programs { + program { + name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "bg"; + target: "elm.text"; + transition: TRANSITION_FOCUS; + } + program { + name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "elm.text"; + transition: TRANSITION_FOCUS; + } + } +} diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 03c6d30..902c16c 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -220,6 +220,7 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); } } diff --git a/src/layout/movie.c b/src/layout/movie.c index 0028026..b615b83 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -406,6 +406,7 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); } } diff --git a/src/layout/music.c b/src/layout/music.c index f1c9da7..0920703 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -339,6 +339,7 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); } } diff --git a/src/view/action_menu.c b/src/view/action_menu.c index ef0cc30..73e281a 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -16,15 +16,75 @@ #include #include +#include #include #include "define.h" +#define TEXT_LIVETV "Live TV" + struct _priv { Evas_Object *win; Evas_Object *base; + + Evas_Object *tv_btn; +}; + +static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + if (!ev) + return; + + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) + viewmgr_pop_view(); +} + +static void _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 _handler = { + .key_down = _key_down_cb, + .mouse_move = _mouse_move_cb }; +static bool _draw_livetv_btn(struct _priv *priv) +{ + Evas_Object *btn; + + btn = elm_button_add(priv->base); + if (!btn) { + _ERR("failed to create button object"); + return false; + } + + elm_object_style_set(btn, STYLE_BTN_LIVETV); + elm_object_text_set(btn, TEXT_LIVETV); + + inputmgr_add_callback(btn, 0, &_handler, priv); + + elm_object_part_content_set(priv->base, PART_ACTION_TV_BTN, btn); + + evas_object_show(btn); + + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT); + + priv->tv_btn = btn; + + return true; +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -59,6 +119,12 @@ static Evas_Object *_create(Evas_Object *win, void *data) viewmgr_set_view_data(VIEW_ACTION_MENU, priv); + if (!_draw_livetv_btn(priv)) { + _ERR("failed to draw livetv button"); + free(priv); + return NULL; + } + return base; } @@ -74,6 +140,8 @@ static void _show(void *view_data) priv = view_data; evas_object_show(priv->base); + + elm_object_focus_set(priv->tv_btn, EINA_TRUE); } static void _hide(void *view_data) @@ -101,6 +169,8 @@ static void _destroy(void *view_data) priv = view_data; + inputmgr_remove_callback(priv->tv_btn, &_handler); + evas_object_del(priv->base); free(priv); -- 2.7.4 From 5cf344b5e42e58005fcfb5d5bc1a9d90777fb1ff Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Tue, 18 Aug 2015 10:59:48 +0900 Subject: [PATCH 04/16] action_menu: draw menu area Change-Id: I889e6f550aa8236c8862ada3c9da67925f024523 Signed-off-by: Jehun Lim --- include/define.h | 2 + include/view/action_menu.h | 15 ++ res/edc/images/btn_menu_del_dis.png | Bin 0 -> 1218 bytes res/edc/images/btn_menu_del_foc.png | Bin 0 -> 1282 bytes res/edc/images/btn_menu_del_nor.png | Bin 0 -> 1313 bytes res/edc/images/btn_menu_del_sel.png | Bin 0 -> 1315 bytes res/edc/images/btn_menu_favorite_dis.png | Bin 0 -> 1780 bytes res/edc/images/btn_menu_favorite_foc.png | Bin 0 -> 1793 bytes res/edc/images/btn_menu_favorite_nor.png | Bin 0 -> 1871 bytes res/edc/images/btn_menu_favorite_sel.png | Bin 0 -> 1893 bytes res/edc/view/action_menu.edc | 81 ++++++++- res/edc/widgets/button.edc | 291 +++++++++++++++++++++++++++++++ src/view/action_menu.c | 117 ++++++++++++- 13 files changed, 493 insertions(+), 13 deletions(-) create mode 100644 res/edc/images/btn_menu_del_dis.png create mode 100644 res/edc/images/btn_menu_del_foc.png create mode 100644 res/edc/images/btn_menu_del_nor.png create mode 100644 res/edc/images/btn_menu_del_sel.png create mode 100644 res/edc/images/btn_menu_favorite_dis.png create mode 100644 res/edc/images/btn_menu_favorite_foc.png create mode 100644 res/edc/images/btn_menu_favorite_nor.png create mode 100644 res/edc/images/btn_menu_favorite_sel.png diff --git a/include/define.h b/include/define.h index 94f5701..c8861f3 100644 --- a/include/define.h +++ b/include/define.h @@ -53,6 +53,7 @@ #define COLOR_ITEM_SELECTED 64 136 211 255 #define COLOR_ITEM_BAR 190 190 190 255 #define COLOR_ITEM_BORDER 194 194 194 255 +#define COLOR_ITEM_DIVIDER 224 224 224 255 #define COLOR_LIST_BG 244 244 244 255 /* part */ @@ -73,6 +74,7 @@ #define SIG_ITEM_FOCUSED "item,focused" #define SIG_ITEM_SELECTED "item,selected" #define SIG_ITEM_UNSELECTED "item,unselected" +#define SIG_ITEM_DISABLED "item,disabled" #define SIG_ELM_UNFOCUSED "elm,state,unfocused" #define SIG_SOURCE_EDC "edc" #define SIG_SOURCE_ELM "elm" diff --git a/include/view/action_menu.h b/include/view/action_menu.h index afaae01..ccd5367 100644 --- a/include/view/action_menu.h +++ b/include/view/action_menu.h @@ -32,4 +32,19 @@ /* style */ #define STYLE_BTN_LIVETV "action_btn_livetv" +#define STYLE_BTN_FAVORITE "action_btn_favorite" +#define STYLE_BTN_DELETE "action_btn_delete" +#define STYLE_BTN_EMPTY "action_btn_empty" + +/* image */ +#define IMAGE_ACTION_FAVORITE_NOR "/btn_menu_favorite_nor.png" +#define IMAGE_ACTION_FAVORITE_FOC "/btn_menu_favorite_foc.png" +#define IMAGE_ACTION_FAVORITE_SEL "/btn_menu_favorite_sel.png" +#define IMAGE_ACTION_FAVORITE_DIS "/btn_menu_favorite_dis.png" + +#define IMAGE_ACTION_DELETE_NOR "/btn_menu_del_nor.png" +#define IMAGE_ACTION_DELETE_FOC "/btn_menu_del_foc.png" +#define IMAGE_ACTION_DELETE_SEL "/btn_menu_del_sel.png" +#define IMAGE_ACTION_DELETE_DIS "/btn_menu_del_dis.png" + #endif /* __AIR_MEDIAHUB_VIEW_ACTION_MENU_H__ */ diff --git a/res/edc/images/btn_menu_del_dis.png b/res/edc/images/btn_menu_del_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..88254affa3bdd6c923053ccf2654eb669f6a4c67 GIT binary patch literal 1218 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|l`=yjN+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+WJvVozYf|;3~p^2%P znW2t?k%6I+z5x)K=^C0?nVMM{nJYkn6417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM> zv0i>ry1t>Mr6tG=BO_g)3fZ zE`@j@w*YQzUNJP7fB~jokyxN_sAmB35=^15FMg%Dxp39RB|)hO_hL1;IHa;5RX-@T zIKQ+g85nVC${?!>telHd6HD@oLh|!-V4)b0kzbNuoRMFk;2dnGpb?&#my%yztO-`{ z>ucqiS6q^qmz?V9Vygr+K`%2i#mdagz}(T&(Z$HX%+S!#)zs0|#N5f!%+b)<$j!;f zzyPM#B|o_|H#M&WrZ)wl*A=H;P*TV(0NU)5T9jFqn&MWJpQ`}&vQ;K-w*alhJp?z$7&CYeN_t*T1EUJBYWA>AW zx14-0+Z<_0|8FC9zC|^z_gwPIm-oJheNbDO9r36+{w2$SrBA#z71^Bks-9xlP<*oW z$rVAHt8$e*54N#?@A?z2f55q+JLEw8ta-wERke$D=x!~KxU|+)5o+NxI~ma*!SmN1 z=etpSR{gEu)t0^AE~nl00!s5U>CG^B@bG}ER>Jx1ayzfy=JWn=o<)uCLFd(y=8s_o z`j*peqH>wP3RzyibBv?z`qS@8JBs$HmPg%IG5Qz71@{z~;cUTaz>pl{`8?;R&390# N;_2$=vd$@?2>^A|r`iAj literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_menu_del_foc.png b/res/edc/images/btn_menu_del_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..dfdfb40bc7ff7448d5a013453c7081cc3f7922db GIT binary patch literal 1282 zcmb7EZEO=|9KWu~6dWZ1o$SSM9xNc*-b;Je_E^RCu7x_g&8~qu&E(d5wqDkI+1-_P zL&&m_s3BQ&iz6VK_<=2Pt0QQ_&;Xhd&EkCdfX3+uh9<%X$rf?w%oLy7*1-ot;^pq1 zm;8Re|LgO--dMkT-P+2v2!gDO?&0HbthK%eOW~hgoYvt`VTO}tliFtH1RWqjQEdfi zR2JGn90+1p=Olm(`(7!LG?TIC*pw=}1PkNJ%Nk@uv0ZshNOb@cZ3XR;62N9Zxrm{X z7{K{K$=h;ph9P}=2orU;Tm8OB9=Xoex5LMeiza00%Jlk~7O!%|*!<-wpeU2J3H zd}PHITm`VSX=*Hv=W;n$&h1k5cAWJ4{gwtrIU&MnbSb8gcPhq~q5=<$lrCweq$;ST zD730sGk`%)mqU=XSZq~TF;)@g&R3=}iU2QV_?=NV6sCP>c9alDt}{O$(OwFMN|HgI^6`v29Q4psi1$UX6|VSya)m=DaH|>aYL4O->^N(>+Ujtz zdRTx0PlyhWLi5xg2?Vi)qI@us|M9o!hOa++X44m);nO>+9O&Q%$JLV2%q6;d_s?a6 z<+ItAsvFO4j0XDOO#U@+{pMxj%C?2VrKwkbPiKdofA`v3Z@k~UW)!iPmTe;Tf7)Za zU6S8AxmjF1Ix{`+%@A;6JH}u9`|{o=yZ<~o-@9?_!i~zlAJ*FszhIwiraUiQ`}Qkx z&Q@JF*ni>i@!4NrJA@2-wULke-Z@fQf2iavXWLwJyz|wcl)kBB7f*e3#4%iHmwF33 zs~`52E(%(_#P{Ar&$+s{TP9-BFOh>4A71^1&dk>qZY9@@&orEH*bm=!6wWLRPxSob zo1fco^4!4s5y!~M1L@we$F5iO9BlTE)_wQLqqnvlulu*=fm7s8WvcK!MqhDeYpN#s ycvI!gt<%x+{`2b0*!GqoTQNo}*tzrULj+P@mRLCZ^5=8btrQK{^B;uv_x=Yk54X4g literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_menu_del_nor.png b/res/edc/images/btn_menu_del_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..169874f3aefc53a6b5c8a54db43a9b9b5b8f2445 GIT binary patch literal 1313 zcmeAS@N?(olHy`uVBq!ia0vp^HXzKw1|+Ti+$;i8k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ-L~|!!ko6N+NuHtdjF{^%6m9^eS=-fVzQ(*;f=KCTFLXC?ut( zXXe=|z2CiGNg*@ERw>-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+WJvVozYf|;3~p^2%P znW2t?k%6I+z5x)K=^C0?nVMM{nJYkn6417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM> zv0i>ry1t>Mr6tG=BO_g)3fZ zE`@j@x4_pIZg5^PG@yV%reBd*pl_&Wpr4xy@)uZjaY;}r!Wmdq7l%|9r0NHy7U!21 zB?IFlO&O*c7&4a6BsFpIWGChrManjC7v#}N``KhE@mciZIxhOTUB)=#mKR*W+^8p$8CHch}`2`Bj z!Db2?;hA|U`Q^o$plE^k(j~Phvn(~mttdZN0UWMYnON*McXKgwGd4Cd1-jnV)X>n; z#mK_N%-Ge@#MH>i#llSqsyBs{u+j%QLLZbEkP-(>2$W9n5NH(^-P#o<=b*#-QEXe(%}Dm_gQxBZFZn7oP3+!* z;*8`VNr6W!VH*OS=G^RgCtY#%6pws<`M2XgBBxdAxt=Z7VcBL^yI$dI-U;eRU^2Z|5n|<5U<&Q1fzo~8Kx+v+zhm1FCJ=mHZ zTlM;kT~0Fh#1&^RZed#@o2hZa!o-wK>f6JHEec;*8-FizTfk^h$vC|${oM`I2QI<| z$3-7VYl@cbNX}XkrN`gN+AiGZGUvc0K5JGPh8;-{ZZH+_v@`bT>F#QaUb2lLXWr(O zg}mN#m*4E0%J8qq>u@5&^!FEZrq^5WB*?Cp(`pR<{7Lbt!Rc&v^$(XD=P?xYuTFe= z@Mrsvi6-iEJ;RsHiJe@$Ua%r_+5N7N^i!4UvOamG2gENO36}fu-n*TA>HIW;5GqpB!1xXLdixhgx^GDXSWPQj+a3TQxXYDuC( zMQ%=Bu~mhw64+cTAR8pCucQE0Qj%?}1aVY^Z-9bxeo?A|sh+WJvVozYf|;3~p^2%P znW2t?k%6I+z5x)K=^C0?nVMM{nJYkn6417ylr*a#7dNO~K%T8qMoCG5mA-y?dAVM> zv0i>ry1t>Mr6tG=BO_g)3fZ zE`@j@x4_pIZg5^PG@yV%reBd*pl_&Wpr4xy@)uZjaY;}r!Wmdq7l%|9r0NHy7U!21 zB?IFlO&O*c7&4a6BsFpIWGChrManjC7v#}N``KhE@mc=c`5nj#hRdKf%wuTwJ5VJHN~wcKUV=9u2z{??6)v>F>^CEHZnCg0(#ZZ z(9y-n!o|$k736*=7YjEfsNNJ(!b%_L2z^juKuR1iAz+FFG2uxa$bn~;)I4AgDFSAN z-*OjkGB7YEd%8G=RNQ(q%P{YdgMjN^#)%<(qU;V+JOcX;2rlqC&bUHwr&HcRRgJ|O z<_jK(gxnCFHsQ?nEgmM@7|!3A{6_v|cy{mKKk3)4wRhW`Up(QFCYKI}PXd$hi~}rc z292C+MDOn6REysotzX-`O*Q$w{pye3_FLMlmY8k!RbZXpc9!z!%&h^u>();C_b0pf z#?`m&?`IrN%`2R`jnAg(+Jsr5D;61UX>${6NY3En744P$ReeOP;j(tY+8s~)oS6M| z8TYp_)wCF;ws%jT`A~RTddZ9fF-t?Ae=z>C z=z^xGWwqGz4cF?Ta-uyS%u@Aj=lt`7OZU>B%ZW_4ExsCX&iOf+U$@=W&swEXpN~hR zfjx*jOfdE!`|nn}1-2zSl3z!d-uZ56F4ic%@6WUVca7(qzrO8sJ@oN;5Zv3a5GW9t b%PPT8eK}#edhz)!pkm9@)z4*}Q$iB}L;=AQ literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_menu_favorite_dis.png b/res/edc/images/btn_menu_favorite_dis.png new file mode 100644 index 0000000000000000000000000000000000000000..bd9bdd8fea7e302ea267636be304fe737619dd1b GIT binary patch literal 1780 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 G<^2oaAiI$O literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_menu_favorite_nor.png b/res/edc/images/btn_menu_favorite_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..a4729764761d5ea8f81b2abcbd37ccd1c4a469cf GIT binary patch literal 1871 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 literal 0 HcmV?d00001 diff --git a/res/edc/view/action_menu.edc b/res/edc/view/action_menu.edc index 2ba3028..3d6261e 100644 --- a/res/edc/view/action_menu.edc +++ b/res/edc/view/action_menu.edc @@ -91,6 +91,23 @@ group { } } part { + name: "menu_divider_top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "tv_btn_area"; + relative: 0.0 1.0; + } + rel2.to: "tv_btn_area"; + min: 0 1; + align: 0.5 0.0; + color: COLOR_ITEM_DIVIDER; + fixed: 0 1; + } + } + part { name: PART_ACTION_MENU_AREA; type: SWALLOW; scale: 1; @@ -101,14 +118,14 @@ group { relative: 0.0 1.0; } rel2.to: "tv_btn_area"; - min: 0 251; + min: 0 126; align: 0.5 0.0; fixed: 0 1; } } part { - name: "padding_favorite_title"; - type: SPACER; + name: "menu_divider_bottom"; + type: RECT; scale: 1; description { state: "default" 0.0; @@ -117,24 +134,69 @@ group { relative: 0.0 1.0; } rel2.to: PART_ACTION_MENU_AREA; - min: 0 40; - align: 0.5 0.0; + min: 0 1; + align: 0.5 1.0; + color: COLOR_ITEM_DIVIDER; fixed: 0 1; } } part { + name: "padding_favorite_title_left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_ACTION_MENU_AREA; + relative: 0.0 1.0; + } + rel2 { + to: PART_ACTION_MENU_AREA; + relative: 0.0 1.0; + } + min: 30 40; + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "padding_favorite_title_right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_ACTION_MENU_AREA; + relative: 1.0 1.0; + } + rel2.to: PART_ACTION_MENU_AREA; + min: 30 40; + align: 1.0 0.0; + fixed: 1 1; + } + } + part { name: PART_ACTION_FAVORITE_TITLE; type: TEXT; scale: 1; description { state: "default" 0.0; rel1 { - to: "padding_favorite_title"; + to: "padding_favorite_title_left"; + relative: 1.0 1.0; + } + rel2 { + to: "padding_favorite_title_right"; relative: 0.0 1.0; } - rel2.to: "padding_favorite_title"; + text { + font: FONT_LIGHT; + size: 32; + align: 0.0 0.5; + } min: 0 32; align: 0.5 0.0; + color: COLOR_TEXT_INDEX; fixed: 0 1; } } @@ -164,7 +226,10 @@ group { to: "padding_favorite_area"; relative: 0.0 1.0; } - rel2.to: "bg"; + rel2 { + to_x: "padding_favorite_area"; + to_y: "bg"; + } } } } diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index 264978a..f6cf990 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -17,6 +17,7 @@ #define STATE_NORMAL 0 #define STATE_FOCUSED 1 #define STATE_SELECTED 2 +#define STATE_DISABLED 3 #define STATE_SHOW 0 #define STATE_HIDE 1 @@ -2810,3 +2811,293 @@ group { } } } + +group { + name: "elm/button/base/action_btn_favorite"; + data.item: "focus_highlight" "on"; + images { + image: IMAGE_ACTION_FAVORITE_NOR COMP; + image: IMAGE_ACTION_FAVORITE_FOC COMP; + image: IMAGE_ACTION_FAVORITE_SEL COMP; + image: IMAGE_ACTION_FAVORITE_DIS COMP; + } + script { + public cur_state; + } + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 125 124; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: COLOR_ITEM_FOCUS; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + } + } + part { + name: "divider_right"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "bg"; + relative: 1.0 0.0; + } + rel2.to: "bg"; + min: 1 0; + align: 1.0 0.5; + color: COLOR_ITEM_DIVIDER; + fixed: 1 0; + } + } + part { + name: "padding_icon_top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "bg"; + rel2 { + to: "bg"; + relative: 1.0 0.0; + } + min: 0 14; + align: 0.5 0.0; + fixed: 0 1; + } + } + part { + name: "padding_icon_bottom"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "bg"; + relative: 0.0 1.0; + } + rel2.to: "bg"; + min: 0 50; + align: 0.5 1.0; + fixed: 0 1; + } + } + part { + name: "bg_menu_icon"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding_icon_top"; + relative: 0.0 1.0; + } + rel2 { + to: "padding_icon_bottom"; + relative: 1.0 0.0; + } + } + } + part { + name: "menu_icon"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "bg_menu_icon"; + relative: 0.5 0.5; + } + rel2 { + to: "bg_menu_icon"; + relative: 0.5 0.5; + } + image.normal: IMAGE_ACTION_FAVORITE_NOR; + min: 60 60; + align: 0.5 0.5; + fixed: 1 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_FAVORITE_FOC; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_FAVORITE_SEL; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_FAVORITE_DIS; + } + } + part { + name: "padding_text"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "padding_icon_bottom"; + rel2 { + to: "padding_icon_bottom"; + relative: 1.0 0.0; + } + min: 0 6; + align: 0.5 0.5; + fixed: 0 1; + } + } + part { + name: "elm.text"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding_text"; + relative: 0.0 1.0; + } + rel2.to: "padding_text"; + text { + font: FONT_LIGHT; + size: 20; + align: 0.5 0.5; + } + min: 0 20; + align: 0.5 0.0; + color: COLOR_TEXT_MENU; + fixed: 0 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: COLOR_TEXT_FOCUS; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + color: COLOR_ITEM_SELECTED; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: COLOR_TEXT_DISABLED; + } + } + } + programs { + program { + name: "load"; + signal: "load"; + source: ""; + script { + set_int(cur_state, STATE_NORMAL); + } + } + program { + name: "go_active"; + signal: "elm,action,focus"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "bg"; + target: "menu_icon"; + target: "elm.text"; + transition: TRANSITION_FOCUS; + } + program { + name: "go_passive"; + signal: "elm,action,unfocus"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "menu_icon"; + target: "elm.text"; + transition: TRANSITION_FOCUS; + } + program { + name: SIG_ITEM_SELECTED; + signal: SIG_ITEM_SELECTED; + source: SIG_SOURCE_SRC; + action: STATE_SET "selected" 0.0; + target: "bg"; + target: "menu_icon"; + target: "elm.text"; + } + program { + name: SIG_ITEM_DISABLED; + signal: SIG_ITEM_DISABLED; + source: SIG_SOURCE_SRC; + action: STATE_SET "disabled" 0.0; + target: "bg"; + target: "menu_icon"; + target: "elm.text"; + } + } +} + +group { + name: "elm/button/base/action_btn_delete"; + inherit: "elm/button/base/action_btn_favorite"; + images { + image: IMAGE_ACTION_DELETE_NOR COMP; + image: IMAGE_ACTION_DELETE_FOC COMP; + image: IMAGE_ACTION_DELETE_SEL COMP; + image: IMAGE_ACTION_DELETE_DIS COMP; + } + parts { + part { + name: "menu_icon"; + description { + state: "default" 0.0; + image.normal: IMAGE_ACTION_DELETE_NOR; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_DELETE_FOC; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_DELETE_SEL; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_DELETE_DIS; + } + } + } +} + +group { + name: "elm/button/base/action_btn_empty"; + inherit: "elm/button/base/action_btn_favorite"; + parts { + part { + name: "menu_icon"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } +} diff --git a/src/view/action_menu.c b/src/view/action_menu.c index 73e281a..c588ca7 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -20,14 +20,52 @@ #include #include "define.h" +#include "util/util.h" #define TEXT_LIVETV "Live TV" +#define MAX_NUM_MENU 4 + +enum _object_type { + ACTION_LIVETV_BTN = 0, + ACTION_MENU_BTN +}; + struct _priv { Evas_Object *win; Evas_Object *base; Evas_Object *tv_btn; + Evas_Object *menu_btn[MAX_NUM_MENU]; +}; + +struct _menu_info { + const char *title; + const char *style; + Eina_Bool disabled; +}; + +static struct _menu_info menu_info[] = { + { + .title = "Favorite", + .style = STYLE_BTN_FAVORITE, + .disabled = EINA_FALSE + }, + { + .title = "Delete", + .style = STYLE_BTN_DELETE, + .disabled = EINA_TRUE + }, + { + .title = NULL, + .style = STYLE_BTN_EMPTY, + .disabled = EINA_TRUE + }, + { + .title = NULL, + .style = STYLE_BTN_EMPTY, + .disabled = EINA_TRUE + } }; static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, @@ -69,14 +107,12 @@ static bool _draw_livetv_btn(struct _priv *priv) elm_object_style_set(btn, STYLE_BTN_LIVETV); elm_object_text_set(btn, TEXT_LIVETV); - inputmgr_add_callback(btn, 0, &_handler, priv); + inputmgr_add_callback(btn, ACTION_LIVETV_BTN, &_handler, priv); elm_object_part_content_set(priv->base, PART_ACTION_TV_BTN, btn); evas_object_show(btn); - elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP); - elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN); elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT); elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT); @@ -85,6 +121,73 @@ static bool _draw_livetv_btn(struct _priv *priv) return true; } +static bool _draw_menu_area(struct _priv *priv) +{ + Evas_Object *box, *btn; + int i; + + box = util_add_box(priv->base); + if (!box) { + _ERR("failed to create box object"); + return false; + } + + for (i = 0; i < MAX_NUM_MENU; i++) { + btn = elm_button_add(box); + if (!btn) { + _ERR("failed to create button object"); + evas_object_del(box); + return false; + } + + elm_object_style_set(btn, menu_info[i].style); + elm_object_text_set(btn, menu_info[i].title); + + if (menu_info[i].disabled) { + elm_object_signal_emit(btn, SIG_ITEM_DISABLED, + SIG_SOURCE_SRC); + elm_object_focus_allow_set(btn, EINA_FALSE); + } + + elm_box_pack_end(box, btn); + + evas_object_show(btn); + + inputmgr_add_callback(btn, ACTION_MENU_BTN, &_handler, priv); + + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN); + + priv->menu_btn[i] = btn; + } + + evas_object_show(box); + + elm_object_focus_next_object_set(priv->menu_btn[0], priv->menu_btn[0], + ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(priv->menu_btn[MAX_NUM_MENU - 1], + priv->menu_btn[MAX_NUM_MENU - 1], + ELM_FOCUS_RIGHT); + + elm_object_part_content_set(priv->base, PART_ACTION_MENU_AREA, box); + + return true; +} + +static bool _draw_items(struct _priv *priv) +{ + if (!_draw_livetv_btn(priv)) { + _ERR("failed to draw livetv button"); + return false; + } + + if (!_draw_menu_area(priv)) { + _ERR("failed to draw menu button"); + return false; + } + + return true; +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -119,8 +222,8 @@ static Evas_Object *_create(Evas_Object *win, void *data) viewmgr_set_view_data(VIEW_ACTION_MENU, priv); - if (!_draw_livetv_btn(priv)) { - _ERR("failed to draw livetv button"); + if (!_draw_items(priv)) { + _ERR("failed to draw items"); free(priv); return NULL; } @@ -161,6 +264,7 @@ static void _hide(void *view_data) static void _destroy(void *view_data) { struct _priv *priv; + int i; if (!view_data) { _ERR("failed to get view data"); @@ -171,6 +275,9 @@ static void _destroy(void *view_data) inputmgr_remove_callback(priv->tv_btn, &_handler); + for (i = 0; i < MAX_NUM_MENU; i++) + inputmgr_remove_callback(priv->menu_btn[i], &_handler); + evas_object_del(priv->base); free(priv); -- 2.7.4 From 231ed03a186903023e77cb1a8f38d7d3745c1790 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Tue, 18 Aug 2015 14:02:17 +0900 Subject: [PATCH 05/16] action_menu: draw favorite area Change-Id: I2562f008e5ca13c4768a0afcb2553204a6e446c1 Signed-off-by: Jehun Lim --- include/util/util.h | 4 +- include/view/action_menu.h | 11 +++ res/edc/view/action_menu.edc | 2 +- res/edc/widgets/gengrid.edc | 80 ++++++++++++++++++ src/util/listmgr.c | 3 +- src/util/util.c | 6 +- src/view/action_menu.c | 188 ++++++++++++++++++++++++++++++++++++++++++- 7 files changed, 283 insertions(+), 11 deletions(-) diff --git a/include/util/util.h b/include/util/util.h index 01901f6..b2e6175 100644 --- a/include/util/util.h +++ b/include/util/util.h @@ -22,8 +22,8 @@ void util_set_alpha_color(Evas_Object *obj, int alpha); Evas_Object *util_add_box(Evas_Object *base); -Evas_Object *util_add_gengrid(Evas_Object *base, - int item_size_x, int item_size_y); +Evas_Object *util_add_gengrid(Evas_Object *base, int item_size_x, + int item_size_y, Eina_Bool horizontal); Evas_Object *util_add_genlist(Evas_Object *base); Evas_Object *util_add_image(Evas_Object *base, const char *file); Evas_Object *util_add_scroller(Evas_Object *base); diff --git a/include/view/action_menu.h b/include/view/action_menu.h index ccd5367..7b0e8d9 100644 --- a/include/view/action_menu.h +++ b/include/view/action_menu.h @@ -36,6 +36,10 @@ #define STYLE_BTN_DELETE "action_btn_delete" #define STYLE_BTN_EMPTY "action_btn_empty" +#define STYLE_GRID_MOVIE_ITEM_FAVORITE "movie_item_favorite" +#define STYLE_GRID_GALLERY_ITEM_FAVORITE "gallery_item_favorite" +#define STYLE_GRID_SONG_ITEM_FAVORITE "song_item_favorite" + /* image */ #define IMAGE_ACTION_FAVORITE_NOR "/btn_menu_favorite_nor.png" #define IMAGE_ACTION_FAVORITE_FOC "/btn_menu_favorite_foc.png" @@ -47,4 +51,11 @@ #define IMAGE_ACTION_DELETE_SEL "/btn_menu_del_sel.png" #define IMAGE_ACTION_DELETE_DIS "/btn_menu_del_dis.png" +#define GRID_ITEM_X_MOVIE 440 +#define GRID_ITEM_Y_MOVIE (328 + 32) +#define GRID_ITEM_X_GALLERY (210 + 20) +#define GRID_ITEM_Y_GALLERY (210 + 20) +#define GRID_ITEM_X_MUSIC 440 +#define GRID_ITEM_Y_MUSIC (134 + 20) + #endif /* __AIR_MEDIAHUB_VIEW_ACTION_MENU_H__ */ diff --git a/res/edc/view/action_menu.edc b/res/edc/view/action_menu.edc index 3d6261e..7514ebf 100644 --- a/res/edc/view/action_menu.edc +++ b/res/edc/view/action_menu.edc @@ -170,7 +170,7 @@ group { relative: 1.0 1.0; } rel2.to: PART_ACTION_MENU_AREA; - min: 30 40; + min: 10 40; align: 1.0 0.0; fixed: 1 1; } diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc index 30a336c..b0e3eba 100644 --- a/res/edc/widgets/gengrid.edc +++ b/res/edc/widgets/gengrid.edc @@ -1597,3 +1597,83 @@ group { } } } + +group { + name: "elm/gengrid/item/movie_item_favorite/default"; + inherit: "elm/gengrid/item/movie_item/default"; + parts { + part { + name: "elm.padding.bottom_right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 1.0 1.0; + min: 0 32; + align: 1.0 1.0; + fixed: 1 1; + } + } + } +} + +group { + name: "elm/gengrid/item/gallery_item_favorite/default"; + inherit: "elm/gengrid/item/gallery_item/default"; + parts { + part { + name: "elm.padding.bottom_right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 1.0 1.0; + min: 20 20; + align: 1.0 1.0; + fixed: 1 1; + } + } + } +} + +group { + name: "elm/gengrid/item/song_item_favorite/default"; + inherit: "elm/gengrid/item/song_item/default"; + parts { + part { + name: "elm.padding.bottom_right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 1.0 1.0; + min: 0 20; + align: 1.0 1.0; + fixed: 1 1; + } + } + part { + name: "defaultbg_text"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "bg"; + relative: 1.0 0.0; + } + rel2.to: "bg"; + min: 306 0; + align: 1.0 0.5; + color: COLOR_ITEM_BG; + fixed: 1 0; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + color: COLOR_ITEM_FOCUS; + map.on: 1; + } + } + } +} diff --git a/src/util/listmgr.c b/src/util/listmgr.c index 88e34ec..c2a1831 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -396,7 +396,8 @@ static Evas_Object *_draw_list_item(struct listmgr *lmgr, struct group_info *gi) inputmgr_add_callback(btn, LISTMGR_INDEX, &_handler, lmgr); - grid = util_add_gengrid(ly, data->grid_item_x, data->grid_item_y); + grid = util_add_gengrid(ly, data->grid_item_x, + data->grid_item_y, EINA_TRUE); if (!grid) { _ERR("failed to create gengrid object"); evas_object_del(ly); diff --git a/src/util/util.c b/src/util/util.c index 41f0cd8..ec55187 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -54,8 +54,8 @@ Evas_Object *util_add_box(Evas_Object *base) return box; } -Evas_Object *util_add_gengrid(Evas_Object *base, - int item_size_x, int item_size_y) +Evas_Object *util_add_gengrid(Evas_Object *base, int item_size_x, + int item_size_y, Eina_Bool horizontal) { Evas_Object *grid; @@ -75,7 +75,7 @@ Evas_Object *util_add_gengrid(Evas_Object *base, elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_ALWAYS); elm_gengrid_multi_select_set(grid, EINA_FALSE); - elm_gengrid_horizontal_set(grid, EINA_TRUE); + elm_gengrid_horizontal_set(grid, horizontal); elm_gengrid_align_set(grid, 0.0, 0.0); diff --git a/src/view/action_menu.c b/src/view/action_menu.c index c588ca7..6b6d004 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -16,19 +16,32 @@ #include #include +#include #include #include #include "define.h" +#include "view.h" #include "util/util.h" #define TEXT_LIVETV "Live TV" +#define TEXT_FAVORITE "Favorite" + +#define VIDEO_COPYRIGHT "Unknown" #define MAX_NUM_MENU 4 enum _object_type { ACTION_LIVETV_BTN = 0, - ACTION_MENU_BTN + ACTION_MENU_BTN, + ACTION_FAVORITE_GRID +}; + +enum _content_type { + E_CONTENT_MOVIE = 0, + E_CONTENT_GALLERY, + E_CONTENT_MUSIC, + E_CONTENT_MAX }; struct _priv { @@ -37,6 +50,7 @@ struct _priv { Evas_Object *tv_btn; Evas_Object *menu_btn[MAX_NUM_MENU]; + Evas_Object *grid; }; struct _menu_info { @@ -45,6 +59,14 @@ struct _menu_info { Eina_Bool disabled; }; +struct _content_info { + int grid_x; + int grid_y; + const char *style; + + int app_contents_type; +}; + static struct _menu_info menu_info[] = { { .title = "Favorite", @@ -68,6 +90,27 @@ static struct _menu_info menu_info[] = { } }; +struct _content_info content_info[] = { + { + .grid_x = GRID_ITEM_X_MOVIE, + .grid_y = GRID_ITEM_Y_MOVIE, + .style = STYLE_GRID_MOVIE_ITEM_FAVORITE, + .app_contents_type = CONTENTS_MOVIE + }, + { + .grid_x = GRID_ITEM_X_GALLERY, + .grid_y = GRID_ITEM_Y_GALLERY, + .style = STYLE_GRID_GALLERY_ITEM_FAVORITE, + .app_contents_type = CONTENTS_GALLERY + }, + { + .grid_x = GRID_ITEM_X_MUSIC, + .grid_y = GRID_ITEM_Y_MUSIC, + .style = STYLE_GRID_SONG_ITEM_FAVORITE, + .app_contents_type = CONTENTS_MUSIC + } +}; + static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { @@ -82,11 +125,30 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) { - if (!obj) + Elm_Object_Item *it; + + if (!obj || !ev) return; - if (!elm_object_focus_get(obj)) - elm_object_focus_set(obj, EINA_TRUE); + switch (id) { + case ACTION_LIVETV_BTN: + case ACTION_MENU_BTN: + if (!elm_object_focus_get(obj)) + elm_object_focus_set(obj, EINA_TRUE); + + break; + case ACTION_FAVORITE_GRID: + it = elm_gengrid_at_xy_item_get(obj, ev->cur.canvas.x, + ev->cur.canvas.y, NULL, NULL); + + if (!it) + return; + + if (!elm_object_item_focus_get(it)) + elm_object_item_focus_set(it, EINA_TRUE); + + break; + } } static input_handler _handler = { @@ -94,6 +156,36 @@ static input_handler _handler = { .mouse_move = _mouse_move_cb }; +static bool _check_movie_type(app_media_info *info) +{ + return strcmp(info->video->copyright, VIDEO_COPYRIGHT); +} + +static int _get_content_type(app_media_info *info) +{ + int type; + + type = E_CONTENT_MAX; + switch (info->media_type) { + case MEDIA_CONTENT_TYPE_IMAGE: + type = E_CONTENT_GALLERY; + break; + case MEDIA_CONTENT_TYPE_VIDEO: + if (_check_movie_type(info)) + type = E_CONTENT_MOVIE; + else + type = E_CONTENT_GALLERY; + break; + case MEDIA_CONTENT_TYPE_MUSIC: + type = E_CONTENT_MUSIC; + break; + default: + break; + } + + return type; +} + static bool _draw_livetv_btn(struct _priv *priv) { Evas_Object *btn; @@ -173,6 +265,37 @@ static bool _draw_menu_area(struct _priv *priv) return true; } +static bool _draw_favorite_area(struct _priv *priv) +{ + Evas_Object *grid; + + elm_object_part_text_set(priv->base, PART_ACTION_FAVORITE_TITLE, + TEXT_FAVORITE); + + grid = util_add_gengrid(priv->base, 0, 0, EINA_FALSE); + if (!grid) { + _ERR("failed to create gengrid object"); + return false; + } + + inputmgr_add_callback(grid, ACTION_FAVORITE_GRID, &_handler, priv); + + elm_object_focus_next_object_set(grid, grid, ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(grid, grid, ELM_FOCUS_RIGHT); + + elm_object_part_content_set(priv->base, + PART_ACTION_FAVORITE_AREA, grid); + + priv->grid = grid; + + return true; +} + +static void _update_favorite_area(struct _priv *priv, int type) +{ + /* It will implemented later */ +} + static bool _draw_items(struct _priv *priv) { if (!_draw_livetv_btn(priv)) { @@ -180,6 +303,11 @@ static bool _draw_items(struct _priv *priv) return false; } + if (!_draw_favorite_area(priv)) { + _ERR("failed to draw favorite area"); + return false; + } + if (!_draw_menu_area(priv)) { _ERR("failed to draw menu button"); return false; @@ -188,6 +316,31 @@ static bool _draw_items(struct _priv *priv) return true; } +static bool _update_items(struct _priv *priv, struct view_update_data *vdata) +{ + app_media *am; + app_media_info *mi; + int type; + + am = eina_list_nth(vdata->list, vdata->index); + if (!am) { + _ERR("failed to get app media"); + return false; + } + + mi = app_media_get_info(am); + if (!mi) { + _ERR("failed to get app media info"); + return false; + } + + type = _get_content_type(mi); + + _update_favorite_area(priv, type); + + return true; +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -261,6 +414,31 @@ static void _hide(void *view_data) evas_object_hide(priv->base); } +static void _update(void *view_data, int update_type, void *data) +{ + struct _priv *priv; + + if (!view_data) { + _ERR("failed to get view data"); + return; + } + + if (!data) { + _ERR("invalid argument"); + return; + } + + priv = view_data; + + switch (update_type) { + case UPDATE_CONTENT: + _update_items(priv, data); + break; + default: + break; + } +} + static void _destroy(void *view_data) { struct _priv *priv; @@ -274,6 +452,7 @@ static void _destroy(void *view_data) priv = view_data; inputmgr_remove_callback(priv->tv_btn, &_handler); + inputmgr_remove_callback(priv->grid, &_handler); for (i = 0; i < MAX_NUM_MENU; i++) inputmgr_remove_callback(priv->menu_btn[i], &_handler); @@ -288,6 +467,7 @@ static view_class _vclass = { .create = _create, .show = _show, .hide = _hide, + .update = _update, .destroy = _destroy, }; -- 2.7.4 From f5feab4ca78b017d329f0f8329acbe5387f40171 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Wed, 19 Aug 2015 16:37:59 +0900 Subject: [PATCH 06/16] action_menu: add updating favorite area Change-Id: I41a633cea8faca74274e9e99c80a836edc498783 Signed-off-by: Jehun Lim --- src/view/action_menu.c | 208 ++++++++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 206 insertions(+), 2 deletions(-) diff --git a/src/view/action_menu.c b/src/view/action_menu.c index 6b6d004..552ea19 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -51,6 +51,8 @@ struct _priv { Evas_Object *tv_btn; Evas_Object *menu_btn[MAX_NUM_MENU]; Evas_Object *grid; + + Eina_List *favorite_list; }; struct _menu_info { @@ -156,6 +158,111 @@ static input_handler _handler = { .mouse_move = _mouse_move_cb }; +static char *_grid_text_get(void *data, Evas_Object *obj, const char *part) +{ + app_media *am; + app_media_info *info; + char buf[32]; + + if (!data) + return NULL; + + am = data; + + info = app_media_get_info(am); + if (!info) { + _ERR("failed to get media info"); + return NULL; + } + + if (!strcmp(part, PART_ELM_TEXT_TITLE)) + return strdup(info->title); + else if (!strcmp(part, PART_ELM_TEXT_ARTIST)) + return strdup(info->audio->artist); + else if (!strcmp(part, PART_ELM_TEXT_ALBUM)) + return strdup(info->audio->album); + else if (!strcmp(part, PART_ELM_TEXT_PLAYTIME)) { + if (info->media_type != MEDIA_CONTENT_TYPE_VIDEO) + return NULL; + + util_time_string(buf, sizeof(buf), + info->video->duration, false); + return strdup(buf); + } + + return NULL; +} + +static Evas_Object *_grid_content_get(void *data, + Evas_Object *obj, const char *part) +{ + Evas_Object *content; + app_media *am; + app_media_info *info; + struct color_data bg; + + if (!data) + return NULL; + + am = data; + + info = app_media_get_info(am); + if (!info) { + _ERR("failed to get media info"); + return NULL; + } + + content = NULL; + if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) { + content = util_add_image(obj, info->thumbnail_path); + if (!content) + goto err; + + evas_object_show(content); + } else if (!strcmp(part, PART_ELM_SWALLOW_VIDEO)) { + if (info->media_type != MEDIA_CONTENT_TYPE_VIDEO) + return NULL; + + content = util_add_image(obj, IMAGE_THUMBNAIL_PLAY); + if (!content) + goto err; + + evas_object_show(content); + } else if (!strcmp(part, PART_ELM_SWALLOW_TEXTBG)) { + content = evas_object_rectangle_add(obj); + if (!content) + goto err; + + app_contents_get_color(info->title, NULL, &bg); + evas_object_color_set(content, bg.r, bg.g, bg.b, bg.a); + + evas_object_show(content); + } + + return content; + +err: + _ERR("failed to create evas object"); + return NULL; +} + +Elm_Gengrid_Item_Class *_get_grid_item_class(int type) +{ + Elm_Gengrid_Item_Class *ic; + + ic = elm_gengrid_item_class_new(); + if (!ic) { + _ERR("failed to create gengrid item class"); + return NULL; + } + + ic->func.text_get = _grid_text_get; + ic->func.content_get = _grid_content_get; + ic->item_style = content_info[type].style; + + return ic; +} + static bool _check_movie_type(app_media_info *info) { return strcmp(info->video->copyright, VIDEO_COPYRIGHT); @@ -186,6 +293,75 @@ static int _get_content_type(app_media_info *info) return type; } +static void _free_favorite_list(Eina_List *list) +{ + app_media *am; + + EINA_LIST_FREE(list, am) + app_media_destroy(am); +} + +static void _favorite_list_foreach(gpointer data, gpointer user_data) +{ + media_info_h media; + app_media *am; + Eina_List **l; + int r; + char *id; + + if (!data || !user_data) { + _ERR("invalid argument"); + return; + } + + id = (char *)data; + l = (Eina_List **)user_data; + + r = media_info_get_media_from_db(id, &media); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("failed to get media handle"); + return; + } + + am = app_media_create(media); + if (!am) { + _ERR("failed to create app media"); + media_info_destroy(media); + return; + } + + *l = eina_list_append(*l, am); +} + +static Eina_List *_get_favorite_list(int type) +{ + GList *id_list; + Eina_List *list; + int r; + + r = media_content_connect(); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("failed to connect to media content"); + return NULL; + } + + id_list = NULL; + if (app_contents_get_favorite_list(type, &id_list) + != APP_CONTENTS_ERROR_NONE) { + _ERR("failed to get favorite list"); + return NULL; + } + + list = NULL; + g_list_foreach(id_list, _favorite_list_foreach, &list); + + app_contents_free_favorite_list(id_list); + + media_content_disconnect(); + + return list; +} + static bool _draw_livetv_btn(struct _priv *priv) { Evas_Object *btn; @@ -247,7 +423,8 @@ static bool _draw_menu_area(struct _priv *priv) inputmgr_add_callback(btn, ACTION_MENU_BTN, &_handler, priv); - elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(btn, priv->grid, + ELM_FOCUS_DOWN); priv->menu_btn[i] = btn; } @@ -293,7 +470,31 @@ static bool _draw_favorite_area(struct _priv *priv) static void _update_favorite_area(struct _priv *priv, int type) { - /* It will implemented later */ + + Elm_Gengrid_Item_Class *ic; + Elm_Object_Item *it; + Eina_List *favorite_l, *l; + app_media *am; + + elm_gengrid_clear(priv->grid); + + elm_gengrid_item_size_set(priv->grid, + elm_config_scale_get() * content_info[type].grid_x, + elm_config_scale_get() * content_info[type].grid_y); + + ic = _get_grid_item_class(type); + + favorite_l = _get_favorite_list(content_info[type].app_contents_type); + + EINA_LIST_FOREACH(favorite_l, l, am) { + it = elm_gengrid_item_append(priv->grid, ic, am, NULL, NULL); + + elm_object_item_data_set(it, am); + } + + elm_gengrid_item_class_free(ic); + + priv->favorite_list = favorite_l; } static bool _draw_items(struct _priv *priv) @@ -457,6 +658,9 @@ static void _destroy(void *view_data) for (i = 0; i < MAX_NUM_MENU; i++) inputmgr_remove_callback(priv->menu_btn[i], &_handler); + if (priv->favorite_list) + _free_favorite_list(priv->favorite_list); + evas_object_del(priv->base); free(priv); -- 2.7.4 From 89c76559ba824ffd6933dc48407e5df7c72dd2c0 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Wed, 19 Aug 2015 17:30:00 +0900 Subject: [PATCH 07/16] mplayer: add shuffle button Change-Id: I0a1b480a9c992a21afd0a321aa303f9136b98c50 Signed-off-by: Minkyu Kang --- res/edc/images/btn_music_contr_shuffle_dis.png | Bin 991 -> 1888 bytes res/edc/images/btn_music_contr_shuffle_dis_foc.png | Bin 927 -> 3657 bytes res/edc/images/btn_music_contr_shuffle_nor.png | Bin 989 -> 3737 bytes res/edc/images/btn_music_contr_shuffle_nor_foc.png | Bin 894 -> 3679 bytes res/edc/widgets/button.edc | 240 +++++++++++++++++++++ src/view/mplayer.c | 6 +- 6 files changed, 245 insertions(+), 1 deletion(-) diff --git a/res/edc/images/btn_music_contr_shuffle_dis.png b/res/edc/images/btn_music_contr_shuffle_dis.png index 633184f3555910724ef78759e5cf08b40526c485..145d4b96a23a5ab1bbd208e50fb4a11fe8f2611f 100644 GIT binary patch literal 1888 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 literal 927 zcmeAS@N?(olHy`uVBq!ia0vp^OMtkKg9S*6c4yCGU|>%3ba4!+xb^nVLGQ_hGRHrD zpEGOYp;rne0fsMv0_2odc$al>@H;grq#cf~Z~Nb=%N3a9BH<|O($w@Kz(dwbL{p?f z!Fx^W*P6JA9_e{A(5k5Q^PiMiPcJOKs%3Y==&9IShL}f6x6gbs{1UOX`)z*8&gLy2 zWp^A1<+}4c_C@0>QSFqC#XL;>6~a{$ejTmIo^E|w;lm0^iR3n$qXL@qK5%)o%Pp(h z=rk{7hS;-8#xI4N8=v+ZILdkRI7jBZ%?wL+`s6!nJ3Dp@Zkio%zlM@9wa!eUvAA z>`~~>DIaE)3;tht@>24L*dy022sLrpBrAUT7XI0J-6a1#H~%M}<=gop_DF4*&;47z ja}`}BgQg55aYf#yaQ4@?0jKu^GaiGdtDnm{r-UW|@vWO~ diff --git a/res/edc/images/btn_music_contr_shuffle_nor.png b/res/edc/images/btn_music_contr_shuffle_nor.png index 0d32fd799f72f4bcb5b02cf0271dae845c3fb9c2..19d2544ec6682d65f08af5292b9eab4482c9f2c9 100644 GIT binary patch literal 3737 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 Nprc`+j)vGr{|6oP?l=Gd literal 989 zcmeAS@N?(olHy`uVBq!ia0vp^OMtkKg9S*6c4yCGU|?S2>EaktaqI0Je~-z9GRHrD zzoeqGs$0Y<@WI&yi-M!3mA%lH;}X22q}0)+Cn&r5&3VNo-YzVHg321!p7k1+3@+&j zvX*jpEn>0ta1=6%Y>&!)WOkDOPu;2KdoRy>d-46}M}^7f^JjQG7CFmhd%)-9ghf1> zrv{u@W%7j~c%|ednP=6{{=IG3?DO4tQ|t9BEpki>g754DO||Phq&y0z6)&lA^V=Ha zck%S54bCksKF{yW3pQN2SL?;uTiU_A`8Q-gL?~G)XIENro?^9GqIWEr^XF;d$nCCs z7VpwXwfr7=xLWJ~yXh=_n`XVIF4omkMX=-nGdsuQ2?VnSSfE z=mPEftb^u4Q2T#o%bSXp!`GjfK744z~Vkm8lvDg-&J{JSAnfFsE(_ zcK3fX#n5Tp((WR?Vy1?`vQK@Y8-tIr@0`_s<|&)||F~_ki|p!7-B4Ivd4%a*LBpG) zOa4speAX`av%JtT?BfiscN^O`7WO|`+><71sCGiNB-qp3x5w{8hTW;BUoMILYj(An z(ETz|v)1I3@p3c@XtXt&(j4cibH#Yur?n@F+g6;fcC~r2v85*0 z^Uw7-=QXEyO}AA4oyoiVkElS=t9XN-pO;P-d2T6O^;7%D?z>Zddt~#RjyK%v_Rs&~ v8YQ+rX1C5{?V3OFVv0v#n@H+F5?{G*)o-iR;c__!%(e`ku6{1-oD!M<{Ku>U diff --git a/res/edc/images/btn_music_contr_shuffle_nor_foc.png b/res/edc/images/btn_music_contr_shuffle_nor_foc.png index c7207b6738e62f10569c131b533ac6a00bda10d8..ff4046184b4f33b6fcf7cff6bdd7005769c8debd 100644 GIT binary patch literal 3679 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 F;$Lth-uD0i literal 894 zcmeAS@N?(olHy`uVBq!ia0vp^OMtkKg9S*6c4yCGU|@Fjba4!+xb^nVe(%sknd2Yd z`wACckm^~~!m_<-g>S3V_Lyv=!qV^j0a>M`8j3MMoTmXoLF&3art7?uN+&o zX8vyw+9>3_aYj|opZ6y^&duolnBimV_OCo;?a>Os)tc;{mF`73XWf6dp3Carshlo* zML0gm;NjLOFV^0bme+H*Dfa$xq2~J5qBYVwjNV)3SB7wZK47%HF4r=n@!Xd12~r=* zHD=Fbz4pRl6Ym3d{Y)R*`mBB3!DfccYc7}OXs@|2yXMm*$9b+d4_GHO|5o3&f0^me zE2=GP+#?gYZafM6^m9|A&Z0F2oH>{0)@)m&z^}Rf?f!WTWiR~g!pkO@o^pLBz><7G zkNIT!DIudB=W?48L~cB;{8YKAb^(v(;gkI* z>po%FeL%wT!tpzn|C^^LsLC%W__~?dM}Wn*hH2llxkf)3SXa-^O_+4*-|Mnzr~GHu zGz7m^oPFSm{xKho$@~RLcaxbbybpK2{i?D2?}bGfr5pLqTnO2)eumJ#i<4{KO>!*T zz;@f3|wcF4bxTQ^&W`SX@Jg=aEP9qyNU_iz7%<-dJyTRy*{(S0k)KsBY( z&b8- Date: Wed, 19 Aug 2015 17:03:13 +0900 Subject: [PATCH 08/16] action_menu: draw menu area using table object Change-Id: I16e20d5b73824ebc59d81295853c5330708e8171 Signed-off-by: Jehun Lim --- include/define.h | 4 +++- include/util/util.h | 1 + res/edc/widgets/button.edc | 14 +++++++------- src/util/util.c | 18 ++++++++++++++++++ src/view/action_menu.c | 47 +++++++++++++++++++++++++--------------------- 5 files changed, 55 insertions(+), 29 deletions(-) diff --git a/include/define.h b/include/define.h index c8861f3..c626565 100644 --- a/include/define.h +++ b/include/define.h @@ -74,7 +74,9 @@ #define SIG_ITEM_FOCUSED "item,focused" #define SIG_ITEM_SELECTED "item,selected" #define SIG_ITEM_UNSELECTED "item,unselected" -#define SIG_ITEM_DISABLED "item,disabled" +#define SIG_ELM_DISABLED "elm,state,disabled" +#define SIG_ELM_FOCUS "elm,action,focus" +#define SIG_ELM_UNFOCUS "elm,action,unfocus" #define SIG_ELM_UNFOCUSED "elm,state,unfocused" #define SIG_SOURCE_EDC "edc" #define SIG_SOURCE_ELM "elm" diff --git a/include/util/util.h b/include/util/util.h index b2e6175..0bca6a0 100644 --- a/include/util/util.h +++ b/include/util/util.h @@ -27,6 +27,7 @@ Evas_Object *util_add_gengrid(Evas_Object *base, int item_size_x, Evas_Object *util_add_genlist(Evas_Object *base); Evas_Object *util_add_image(Evas_Object *base, const char *file); Evas_Object *util_add_scroller(Evas_Object *base); +Evas_Object *util_add_table(Evas_Object *base, int padding_x, int padding_y); void util_time_string(char *str, int size, unsigned int ms, bool full); void util_up_string(char *str); diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index d2b0140..c6734a4 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -3252,8 +3252,8 @@ group { } program { name: "go_active"; - signal: "elm,action,focus"; - source: "elm"; + signal: SIG_ELM_FOCUS; + source: SIG_SOURCE_ELM; action: STATE_SET "focused" 0.0; target: "bg"; target: "menu_icon"; @@ -3262,8 +3262,8 @@ group { } program { name: "go_passive"; - signal: "elm,action,unfocus"; - source: "elm"; + signal: SIG_ELM_UNFOCUS; + source: SIG_SOURCE_ELM; action: STATE_SET "default" 0.0; target: "bg"; target: "menu_icon"; @@ -3280,9 +3280,9 @@ group { target: "elm.text"; } program { - name: SIG_ITEM_DISABLED; - signal: SIG_ITEM_DISABLED; - source: SIG_SOURCE_SRC; + name: SIG_ELM_DISABLED; + signal: SIG_ELM_DISABLED; + source: SIG_SOURCE_ELM; action: STATE_SET "disabled" 0.0; target: "bg"; target: "menu_icon"; diff --git a/src/util/util.c b/src/util/util.c index ec55187..5dc631b 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -147,6 +147,24 @@ Evas_Object *util_add_scroller(Evas_Object *base) return scr; } +Evas_Object *util_add_table(Evas_Object *base, int padding_x, int padding_y) +{ + Evas_Object *table; + + if (!base) + return NULL; + + table = elm_table_add(base); + if (!table) { + _ERR("failed to create table object"); + return NULL; + } + + elm_table_padding_set(table, padding_x, padding_y); + + return table; +} + void util_time_string(char *str, int size, unsigned int ms, bool full) { int sec; diff --git a/src/view/action_menu.c b/src/view/action_menu.c index 552ea19..f4b65b9 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -29,7 +29,11 @@ #define VIDEO_COPYRIGHT "Unknown" -#define MAX_NUM_MENU 4 +#define NUM_MENU_BTN 4 +#define MAX_BTN_COL 4 + +#define TABLE_PADDING_X 0 +#define TABLE_PADDING_Y 0 enum _object_type { ACTION_LIVETV_BTN = 0, @@ -49,7 +53,7 @@ struct _priv { Evas_Object *base; Evas_Object *tv_btn; - Evas_Object *menu_btn[MAX_NUM_MENU]; + Evas_Object *menu_btn[NUM_MENU_BTN]; Evas_Object *grid; Eina_List *favorite_list; @@ -391,33 +395,29 @@ static bool _draw_livetv_btn(struct _priv *priv) static bool _draw_menu_area(struct _priv *priv) { - Evas_Object *box, *btn; + Evas_Object *table, *btn; int i; + int col, row; - box = util_add_box(priv->base); - if (!box) { - _ERR("failed to create box object"); + table = util_add_table(priv->base, TABLE_PADDING_X, TABLE_PADDING_Y); + if (!table) { + _ERR("failed to add table"); return false; } - for (i = 0; i < MAX_NUM_MENU; i++) { - btn = elm_button_add(box); + for (i = 0; i < NUM_MENU_BTN; i++) { + btn = elm_button_add(priv->base); if (!btn) { _ERR("failed to create button object"); - evas_object_del(box); + evas_object_del(table); return false; } elm_object_style_set(btn, menu_info[i].style); elm_object_text_set(btn, menu_info[i].title); - if (menu_info[i].disabled) { - elm_object_signal_emit(btn, SIG_ITEM_DISABLED, - SIG_SOURCE_SRC); - elm_object_focus_allow_set(btn, EINA_FALSE); - } - - elm_box_pack_end(box, btn); + if (menu_info[i].disabled) + elm_object_disabled_set(btn, EINA_TRUE); evas_object_show(btn); @@ -426,18 +426,23 @@ static bool _draw_menu_area(struct _priv *priv) elm_object_focus_next_object_set(btn, priv->grid, ELM_FOCUS_DOWN); + col = i % MAX_BTN_COL; + row = i / MAX_BTN_COL; + + elm_table_pack(table, btn, col, row, 1, 1); + priv->menu_btn[i] = btn; } - evas_object_show(box); + evas_object_show(table); elm_object_focus_next_object_set(priv->menu_btn[0], priv->menu_btn[0], ELM_FOCUS_LEFT); - elm_object_focus_next_object_set(priv->menu_btn[MAX_NUM_MENU - 1], - priv->menu_btn[MAX_NUM_MENU - 1], + elm_object_focus_next_object_set(priv->menu_btn[NUM_MENU_BTN - 1], + priv->menu_btn[NUM_MENU_BTN - 1], ELM_FOCUS_RIGHT); - elm_object_part_content_set(priv->base, PART_ACTION_MENU_AREA, box); + elm_object_part_content_set(priv->base, PART_ACTION_MENU_AREA, table); return true; } @@ -655,7 +660,7 @@ static void _destroy(void *view_data) inputmgr_remove_callback(priv->tv_btn, &_handler); inputmgr_remove_callback(priv->grid, &_handler); - for (i = 0; i < MAX_NUM_MENU; i++) + for (i = 0; i < NUM_MENU_BTN; i++) inputmgr_remove_callback(priv->menu_btn[i], &_handler); if (priv->favorite_list) -- 2.7.4 From 28017be78c1dee4d01b763e0243e908fae317d07 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Wed, 19 Aug 2015 18:18:43 +0900 Subject: [PATCH 09/16] action_menu: use viewmgr_hide_view() instead of viewmgr_pop_view() Change-Id: I3c544481484814f2bea480b6e00587849d195db3 Signed-off-by: Jehun Lim --- src/view/action_menu.c | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/view/action_menu.c b/src/view/action_menu.c index f4b65b9..7dec094 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -125,7 +125,7 @@ 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)) - viewmgr_pop_view(); + viewmgr_hide_view(VIEW_ACTION_MENU); } static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, -- 2.7.4 From 70875af707430879dee58a611590c2ba74bf1acf Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Thu, 20 Aug 2015 13:19:52 +0900 Subject: [PATCH 10/16] mplayer: adds support shuffling the list Change-Id: I6d301b24b8360903ceaed56d2cbb7dc40b575dd3 Signed-off-by: Minkyu Kang --- res/edc/widgets/genlist.edc | 1 + src/view/mplayer.c | 128 ++++++++++++++++++++++++++++++++++---------- 2 files changed, 100 insertions(+), 29 deletions(-) diff --git a/res/edc/widgets/genlist.edc b/res/edc/widgets/genlist.edc index 8ac6183..72b611e 100644 --- a/res/edc/widgets/genlist.edc +++ b/res/edc/widgets/genlist.edc @@ -276,6 +276,7 @@ group { ellipsis: -1; } visible: 0; + fixed: 1 1; } description { state: "default" 0.1; diff --git a/src/view/mplayer.c b/src/view/mplayer.c index 324cda0..692346b 100644 --- a/src/view/mplayer.c +++ b/src/view/mplayer.c @@ -45,7 +45,9 @@ struct _list_data { struct _playlist { Eina_List *list; + Eina_List *list_org; int cur; + bool shuffle; }; struct _priv { @@ -156,7 +158,20 @@ static void _draw_progressbar(struct _priv *priv, app_media_info *mi) progressbar_show(priv->progress); } -static app_media_info *_get_current_media_info(struct _priv *priv) +static app_media *_playlist_get_media(Eina_List *list, int index) +{ + app_media *am; + + am = eina_list_nth(list, index); + if (!am) { + _ERR("failed to get app_media"); + return NULL; + } + + return am; +} + +static app_media_info *_playlist_get_current_media_info(struct _priv *priv) { app_media *am; app_media_info *mi; @@ -176,6 +191,38 @@ static app_media_info *_get_current_media_info(struct _priv *priv) return mi; } +static int _playlist_get_index(Eina_List *dest, Eina_List *src, int index) +{ + app_media *am; + + am = _playlist_get_media(src, index); + + return util_get_media_index(dest, am); +} + +static void _playlist_set_list(struct _priv *priv, bool shuffle, int index) +{ + struct _playlist *p; + app_media *am; + + p = &priv->playlist; + if (!p) { + _ERR("playlist is NULL"); + return; + } + + am = _playlist_get_media(p->list, index); + eina_list_free(p->list); + + p->list = eina_list_clone(p->list_org); + + if (shuffle) + p->list = eina_list_shuffle(p->list, NULL); + + p->cur = util_get_media_index(p->list, am); + p->shuffle = shuffle; +} + static void _update_info(struct _priv *priv, app_media_info *mi) { struct view_update_data vdata; @@ -184,7 +231,8 @@ static void _update_info(struct _priv *priv, app_media_info *mi) progressbar_reset(priv->progress, 0, mi->audio->duration); /* update play info */ - vdata.index = priv->playlist.cur; + vdata.index = _playlist_get_index(priv->playlist.list_org, + priv->playlist.list, priv->playlist.cur); viewmgr_update_view(VIEW_BASE, UPDATE_PLAY_INFO, &vdata); /* update history */ @@ -196,7 +244,7 @@ static void _mplayer_show(struct _priv *priv) struct controller *ctl; app_media_info *mi; - mi = _get_current_media_info(priv); + mi = _playlist_get_current_media_info(priv); if (!mi) { _ERR("failed to getting media info"); return; @@ -301,7 +349,7 @@ static void _player_play_pause(struct _priv *priv) break; case PLAYER_STATE_IDLE: case PLAYER_STATE_READY: - mi = _get_current_media_info(priv); + mi = _playlist_get_current_media_info(priv); if (!mi) { _ERR("failed to getting media info"); return; @@ -331,7 +379,7 @@ static void _player_next(struct _priv *priv) playermgr_stop(priv->player); break; case PLAYER_STATE_PLAYING: - mi = _get_current_media_info(priv); + mi = _playlist_get_current_media_info(priv); if (!mi) { _ERR("failed to getting media info"); return; @@ -353,7 +401,7 @@ static void _player_play(struct _priv *priv) const char *path; struct controller *ctl; - mi = _get_current_media_info(priv); + mi = _playlist_get_current_media_info(priv); if (!mi) { _ERR("failed to getting media info"); return; @@ -421,32 +469,14 @@ static struct progressbar_ops _progressbar_ops = { .get_value = _player_get_position, }; -static void _callback_music(void *data, const char *ev) -{ - struct _priv *priv; - - if (!data || !ev) - return; - - priv = data; - - if (!strcmp(ev, SRC_BTN_MUSIC_PREV)) { - _mplayer_prev(priv); - _player_next(priv); - } else if (!strcmp(ev, SRC_BTN_MUSIC_NEXT)) { - _mplayer_next(priv); - _player_next(priv); - } else if (!strcmp(ev, SRC_BTN_MUSIC_PLAY)) { - _player_play_pause(priv); - } -} - static void _pop_view(struct _priv *priv) { struct view_update_data vdata; if (viewmgr_active_view_count() > 1) { - vdata.index = priv->playlist.cur; + vdata.index = _playlist_get_index(priv->playlist.list_org, + priv->playlist.list, priv->playlist.cur); + viewmgr_update_view(VIEW_BASE, UPDATE_FOCUS, &vdata); } @@ -686,6 +716,33 @@ static void _add_playlist_item(struct _priv *priv) } } +static void _callback_music(void *data, const char *ev) +{ + struct _priv *priv; + + if (!data || !ev) + return; + + priv = data; + + if (!strcmp(ev, SRC_BTN_MUSIC_PREV)) { + _mplayer_prev(priv); + _player_next(priv); + } else if (!strcmp(ev, SRC_BTN_MUSIC_NEXT)) { + _mplayer_next(priv); + _player_next(priv); + } else if (!strcmp(ev, SRC_BTN_MUSIC_PLAY)) { + _player_play_pause(priv); + } else if (!strcmp(ev, SRC_BTN_MUSIC_SHUFFLE)) { + _playlist_set_list(priv, !priv->playlist.shuffle, + priv->playlist.cur); + _add_playlist_item(priv); + + _mplayer_set_current(priv, priv->playlist.cur); + _player_play(priv); + } +} + static bool _ui_init(struct _priv *priv) { struct controller *ctl; @@ -783,7 +840,9 @@ static Evas_Object *_create(Evas_Object *win, void *data) priv->base = base; priv->playlist.list = NULL; + priv->playlist.list_org = NULL; priv->playlist.cur = 0; + priv->playlist.shuffle = false; player = playermgr_create(NULL); if (!player) { @@ -873,8 +932,17 @@ static void _update(void *view_data, int update_type, void *data) if (!vdata) break; - priv->playlist.list = vdata->list; - priv->playlist.cur = vdata->index; + if (priv->playlist.list_org != vdata->list) { + priv->playlist.list_org = vdata->list; + priv->playlist.list = eina_list_clone(vdata->list); + + _playlist_set_list(priv, + priv->playlist.shuffle, vdata->index); + } else { + priv->playlist.cur = _playlist_get_index( + priv->playlist.list, + vdata->list, vdata->index); + } _add_playlist_item(priv); break; @@ -922,6 +990,8 @@ static void _destroy(void *view_data) inputmgr_remove_callback(obj, &_btn_handler); } + eina_list_free(priv->playlist.list); + _list_free(priv); inputmgr_remove_callback(priv->list, &_list_handler); -- 2.7.4 From 6c754eac11174331a8a01d8409e45e94a35d5177 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Thu, 20 Aug 2015 15:14:43 +0900 Subject: [PATCH 11/16] mplayer: add repeat button Change-Id: I7aa9b2f9b98f4a0a0626daecfc2d54396fe6a8c4 Signed-off-by: Minkyu Kang --- include/view/mplayer.h | 4 + res/edc/images/btn_music_contr_one_mode_nor.png | Bin 1175 -> 2113 bytes res/edc/images/btn_music_contr_one_mode_sel.png | Bin 0 -> 2052 bytes res/edc/images/btn_music_contr_repeat_dis.png | Bin 0 -> 2041 bytes res/edc/images/btn_music_contr_repeat_dis_foc.png | Bin 0 -> 1979 bytes res/edc/images/btn_music_contr_repeat_foc.png | Bin 1058 -> 3866 bytes res/edc/images/btn_music_contr_repeat_nor.png | Bin 1110 -> 3896 bytes res/edc/widgets/button.edc | 292 ++++++++++++++++++++++ src/view/mplayer.c | 4 + 9 files changed, 300 insertions(+) create mode 100644 res/edc/images/btn_music_contr_one_mode_sel.png create mode 100644 res/edc/images/btn_music_contr_repeat_dis.png create mode 100644 res/edc/images/btn_music_contr_repeat_dis_foc.png diff --git a/include/view/mplayer.h b/include/view/mplayer.h index eab576b..b7a697a 100644 --- a/include/view/mplayer.h +++ b/include/view/mplayer.h @@ -62,6 +62,10 @@ #define IMAGE_MUSIC_SHUFFLE_DIS_NORMAL "btn_music_contr_shuffle_dis.png" #define IMAGE_MUSIC_REPEAT_FOCUS "btn_music_contr_repeat_foc.png" #define IMAGE_MUSIC_REPEAT_NORMAL "btn_music_contr_repeat_nor.png" +#define IMAGE_MUSIC_REPEAT_DIS_FOCUS "btn_music_contr_repeat_dis_foc.png" +#define IMAGE_MUSIC_REPEAT_DIS_NORMAL "btn_music_contr_repeat_dis.png" +#define IMAGE_MUSIC_REPEAT_ONE_FOCUS "btn_music_contr_one_mode_sel.png" +#define IMAGE_MUSIC_REPEAT_ONE_NORMAL "btn_music_contr_one_mode_nor.png" #define IMAGE_MUSIC_LIST_PLAY "ic_mini_player_play_nor.png" #define IMAGE_MUSIC_LIST_PLAY_FOC "ic_mini_player_play_foc.png" diff --git a/res/edc/images/btn_music_contr_one_mode_nor.png b/res/edc/images/btn_music_contr_one_mode_nor.png index 1342b25a45850388c803db211502003f7d97a4e7..9b409ac8ed2f82dff28680a2267bd56a34af4b1d 100644 GIT binary patch literal 2113 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 diff --git a/res/edc/images/btn_music_contr_one_mode_sel.png b/res/edc/images/btn_music_contr_one_mode_sel.png new file mode 100644 index 0000000000000000000000000000000000000000..20c21ba66bc2364924e82c238ddf5f0e4d315d19 GIT binary patch literal 2052 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 AVE_OC literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_music_contr_repeat_foc.png b/res/edc/images/btn_music_contr_repeat_foc.png index e01d911f54b25e830736a12fe282c79f14e7b754..41acbe58d3c5b64928a53fb968d075327216baad 100644 GIT binary patch literal 3866 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 literal 1058 zcmeAS@N?(olHy`uVBq!ia0vp^OMtkKg9S*6c4yCGU|@df>EaktaqI0J|BfrAGRHoq z|KIYaEkvnPR9lcWGH@C@_u@0&i3zez3QaA1Nz++6^MpdKsJ@W8qPpei38G>y7=Z9glB~d>`KbF@JBF($c`atHVuVY>(CKEmunS zc~Mv!WqT&Z*J>j3uK4v?G4?O_L_Ema=_;RH{q;aGZy3LU_3<#<#TWVJ6?(O=ZvV$V zt6*&sQ^R7L^R;Uh)E~5t{m4pwBYCzldQ*O72&?RmS&Dy+3d|_x^u1?`O6}oXH3JWA@H) z<||^karapNm)3QR-x%MQ?)36+ui^SJ&3kv;b1y%pew}L*{>m`V+feJxr+aOJbc4SB zht+=S*9FuYua@p!S(Cas@KT;{^tE5X$&<{k<}NdOGIx^QhPB`NmXwyxUddCrcggwO z)v^;yitnar-T(X3`LNVQ$;(;JR;!DpR^9S>+UXKBKX+^9>nz#TJe6LTLbqL=<~eK4 zZJ*Q=oSv(5SKrlmxq8>xkT#j=TkdVU#T@k1ddgJA?;cel%FC|GP1>?P&v>e${bfbn z>td&)q_=q4XVgE;(~6(}N#O(c^^(2k80Isa4|})NY)OT*#esn7tM@R}+#EKw50VYKbL{*93-dFTIkNX1qR+oeXTN;l+N;`-bdg7D zeT=*R{mYv0+=4x~HRiPA1D)BYzhCH>kffQvK}d1k(+6+n$B6Iy&vk7>FF&Kj!M#sE zo2#X~uIh<@c_cIL$)-;$TQkn6>!!`g|D1d8@~^n|t?|`gqraZe_5Cey)$8r0yK8T* zYJcf6+0I4P^M2;uvW!(#J?Bi{x}4kLZCx7cm-5~2(%V~+wl3+jDwV1OjQvyiy*wtj fn0O8l@soS1Oz5wM=Lh})^FD*8tDnm{r-UW|#;oMV diff --git a/res/edc/images/btn_music_contr_repeat_nor.png b/res/edc/images/btn_music_contr_repeat_nor.png index d638a751e8ba02950822ce3794375d4371e37451..00092ce3991cdef990cead22529dabde8b9b4840 100644 GIT binary patch literal 3896 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 QttP-o&s?`c$K~OF0LO$YDF6Tf literal 1110 zcmeAS@N?(olHy`uVBq!ia0vp^OMtkKg9S*6c4yCGU|^B;ba4!+xb^mqcgB@)iMEgG zei|G{S8_CYh2*dVb8wW_gcQH1Lq4aEx%CJ)>S5=Ew5Dofo{y4a0H z*JH8X7Kx)<9=RP|bg8RXd{M{tl$Z>kITC;QKc6yR`943)_>9cC?*)@~wu+=0v@%|l z{;|KnL$F<>a3BfIzIzVaH>s50I;!=qBtEzE-WTt`Z(a13Og;6&caLA-o&SG5OPDsN zHu#wZpLYJxd8Yh)w#C^aFLG1zR~0OoaWu`Za5A4!ZOpEkWAbZy?-lsBeo6^Gw4+)P&yNZ6l2UtXHF|_CXU8tt z>0-+6@#)U@4ykQ>cBJc`p6M)_zNo#!eqyM}#Ao7OH|J|Sc3pPy!>4(-Gtw;FHT&h1 zt)8%an~y^7Ly*2l5Qn(oT#=Fb;%p;BX zNtN;QbEXBK3Z3?3s-V@6KC^ufW}gUDa^_ngwc@ekJ?+28trn;iOuH~awC9`;h)>;K^LjzlHrWsT9B zuI4#BnSJ!c1j!d4-&w}by>zumOmY*igj#eiM}c|Xj1v={JN{@&l_{_Uv6nY+-OP#? z{&m(lhNq-osuzP2jG=6{h&-i#aky003o+@9?9>+*GA_J8Eo z$y?dM%(HAF|EHMc^G?PrR4khEg1;=hU@q6UZ@+wJrj$wh#Shj(vY*(B zcbv7UOV8<#UViyhQ_Ju5kJY;(&VIb%xX9T_+xX|~qHFti#GR>{B{}uQ#;0=@%v0A% zto|a=`a$;*>#_}jQtcg_y0=mvXb4VjJf=TIv+`ugzJq z_jlWl@F$JxM%6EjUU>X4%(uRt`H;i+PXF!ytC{>$wiz`{e3RmK{a#W0 Date: Thu, 20 Aug 2015 16:11:15 +0900 Subject: [PATCH 12/16] action_menu: add selected callback for favorite item Change-Id: Ie4139cb1d150cab130228e9f271094c12aa655ed Signed-off-by: Jehun Lim --- src/view/action_menu.c | 77 ++++++++++++++++++++++++++++++++++++++++++++++---- 1 file changed, 72 insertions(+), 5 deletions(-) diff --git a/src/view/action_menu.c b/src/view/action_menu.c index 7dec094..b2241fd 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -54,9 +54,13 @@ struct _priv { Evas_Object *tv_btn; Evas_Object *menu_btn[NUM_MENU_BTN]; + Evas_Object *grid; + Elm_Object_Item *selected_it; Eina_List *favorite_list; + + int content_type; }; struct _menu_info { @@ -157,9 +161,70 @@ static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, } } +static void _grid_selected(void *data) +{ + app_media *am; + struct view_update_data vdata; + struct _priv *priv; + + if (!data) { + _ERR("invalid argument"); + return; + } + + priv = data; + + am = elm_object_item_data_get(priv->selected_it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = priv->favorite_list; + vdata.index = util_get_media_index(vdata.list, am); + + viewmgr_hide_view(VIEW_ACTION_MENU); + + switch (priv->content_type) { + case E_CONTENT_MOVIE: + case E_CONTENT_GALLERY: + viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); + viewmgr_push_view(VIEW_VIEWER); + break; + case E_CONTENT_MUSIC: + viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata); + viewmgr_push_view(VIEW_MPLAYER); + break; + default: + break; + } +} + +static void _selected_cb(int id, void *data, Evas_Object *obj, + Elm_Object_Item *it) +{ + struct _priv *priv; + + if (!data || !it) + return; + + priv = data; + + switch (id) { + case ACTION_FAVORITE_GRID: + priv->selected_it = it; + ecore_job_add(_grid_selected, priv); + + break; + default: + break; + } +} + static input_handler _handler = { .key_down = _key_down_cb, - .mouse_move = _mouse_move_cb + .mouse_move = _mouse_move_cb, + .selected = _selected_cb }; static char *_grid_text_get(void *data, Evas_Object *obj, const char *part) @@ -473,16 +538,19 @@ static bool _draw_favorite_area(struct _priv *priv) return true; } -static void _update_favorite_area(struct _priv *priv, int type) +static void _update_favorite_area(struct _priv *priv) { Elm_Gengrid_Item_Class *ic; Elm_Object_Item *it; Eina_List *favorite_l, *l; app_media *am; + int type; elm_gengrid_clear(priv->grid); + type = priv->content_type; + elm_gengrid_item_size_set(priv->grid, elm_config_scale_get() * content_info[type].grid_x, elm_config_scale_get() * content_info[type].grid_y); @@ -526,7 +594,6 @@ static bool _update_items(struct _priv *priv, struct view_update_data *vdata) { app_media *am; app_media_info *mi; - int type; am = eina_list_nth(vdata->list, vdata->index); if (!am) { @@ -540,9 +607,9 @@ static bool _update_items(struct _priv *priv, struct view_update_data *vdata) return false; } - type = _get_content_type(mi); + priv->content_type = _get_content_type(mi); - _update_favorite_area(priv, type); + _update_favorite_area(priv); return true; } -- 2.7.4 From 0c802141d6f83606e0581ee33ae2ef0128ff0270 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Thu, 20 Aug 2015 16:28:10 +0900 Subject: [PATCH 13/16] mplayer: adds support three state of repeat mode (all/one/none) Change-Id: I5eee61ce78a29ae2b20db3e4b324579c4e113300 Signed-off-by: Minkyu Kang --- src/view/mplayer.c | 110 ++++++++++++++++++++++++++++++++++++++++++++++------- 1 file changed, 96 insertions(+), 14 deletions(-) diff --git a/src/view/mplayer.c b/src/view/mplayer.c index 8c3b881..c1cafd0 100644 --- a/src/view/mplayer.c +++ b/src/view/mplayer.c @@ -38,6 +38,12 @@ #define PART_MUSIC_BTN "control_btn" #define PLAY_BTN_LOC 2 +enum _repeat_state { + REPEAT_ALL, + REPEAT_ONE, + REPEAT_NONE +}; + struct _list_data { app_media *am; Elm_Object_Item *item; @@ -48,6 +54,7 @@ struct _playlist { Eina_List *list_org; int cur; bool shuffle; + enum _repeat_state repeat; }; struct _priv { @@ -227,6 +234,33 @@ static void _playlist_set_list(struct _priv *priv, bool shuffle, int index) p->shuffle = shuffle; } +static void _playlist_set_repeat_mode(struct _priv *priv) +{ + struct _playlist *p; + + p = &priv->playlist; + if (!p) { + _ERR("playlist is NULL"); + return; + } + + switch (p->repeat) { + case REPEAT_ALL: + p->repeat = REPEAT_ONE; + break; + case REPEAT_ONE: + p->repeat = REPEAT_NONE; + break; + case REPEAT_NONE: + p->repeat = REPEAT_ALL; + break; + default: + _ERR("Unknown repeat state"); + p->repeat = REPEAT_ALL; + break; + } +} + static void _update_info(struct _priv *priv, app_media_info *mi) { struct view_update_data vdata; @@ -278,32 +312,69 @@ static void _mplayer_hide(struct _priv *priv) ctl->ops->hide(ctl->handle); } -static void _mplayer_prev(struct _priv *priv) +static bool _mplayer_prev(struct _priv *priv) { int total; total = eina_list_count(priv->playlist.list); - if (priv->playlist.cur == 0) - priv->playlist.cur = total - 1; - else - priv->playlist.cur--; + switch (priv->playlist.repeat) { + case REPEAT_ALL: + if (priv->playlist.cur != 0) + priv->playlist.cur--; + else + priv->playlist.cur = total - 1; + break; + case REPEAT_NONE: + if (priv->playlist.cur != 0) + priv->playlist.cur--; + break; + case REPEAT_ONE: + break; + default: + _ERR("Unknown repeat state"); + break; + } _mplayer_show(priv); + + return true; } -static void _mplayer_next(struct _priv *priv) +static bool _mplayer_next(struct _priv *priv) { int total; + bool r; total = eina_list_count(priv->playlist.list); - if (priv->playlist.cur == total - 1) - priv->playlist.cur = 0; - else - priv->playlist.cur++; + r = true; + + switch (priv->playlist.repeat) { + case REPEAT_ALL: + if (priv->playlist.cur != total - 1) + priv->playlist.cur++; + else + priv->playlist.cur = 0; + break; + case REPEAT_NONE: + if (priv->playlist.cur != total - 1) + priv->playlist.cur++; + else { + priv->playlist.cur = 0; + r = false; + } + break; + case REPEAT_ONE: + break; + default: + _ERR("Unknown repeat state"); + break; + } _mplayer_show(priv); + + return r; } static void _mplayer_set_current(struct _priv *priv, int index) @@ -459,14 +530,18 @@ static void _player_stop(struct _priv *priv) static void _player_complete_cb(void *data) { struct _priv *priv; + bool r; if (!data) return; priv = data; - _mplayer_next(priv); - _player_next(priv); + r = _mplayer_next(priv); + if (r) + _player_next(priv); + else + _player_stop(priv); } static struct progressbar_ops _progressbar_ops = { @@ -723,6 +798,7 @@ static void _add_playlist_item(struct _priv *priv) static void _callback_music(void *data, const char *ev) { struct _priv *priv; + bool r; if (!data || !ev) return; @@ -733,8 +809,11 @@ static void _callback_music(void *data, const char *ev) _mplayer_prev(priv); _player_next(priv); } else if (!strcmp(ev, SRC_BTN_MUSIC_NEXT)) { - _mplayer_next(priv); - _player_next(priv); + r = _mplayer_next(priv); + if (r) + _player_next(priv); + else + _player_stop(priv); } else if (!strcmp(ev, SRC_BTN_MUSIC_PLAY)) { _player_play_pause(priv); } else if (!strcmp(ev, SRC_BTN_MUSIC_SHUFFLE)) { @@ -744,6 +823,8 @@ static void _callback_music(void *data, const char *ev) _mplayer_set_current(priv, priv->playlist.cur); _player_play(priv); + } else if (!strcmp(ev, SRC_BTN_MUSIC_REPEAT)) { + _playlist_set_repeat_mode(priv); } } @@ -847,6 +928,7 @@ static Evas_Object *_create(Evas_Object *win, void *data) priv->playlist.list_org = NULL; priv->playlist.cur = 0; priv->playlist.shuffle = false; + priv->playlist.repeat = REPEAT_ALL; player = playermgr_create(NULL); if (!player) { -- 2.7.4 From fddb959eaf0a6e1d4235b874c68c5da0e6018fa6 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Fri, 21 Aug 2015 17:27:48 +0900 Subject: [PATCH 14/16] button: set different state as focusing Change-Id: Ie6ef359ccfec704f95c3ac89ca01ff8fb4014ead Signed-off-by: Minkyu Kang --- res/edc/widgets/button.edc | 62 ++++++++++++++++++++++++++++++++++++++++------ 1 file changed, 54 insertions(+), 8 deletions(-) diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index e8a039b..3973cc9 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -714,6 +714,7 @@ group { } script { public cur_state; + public focused; } parts { part { @@ -798,9 +799,18 @@ group { signal: SIG_SET_PLAY; source: ""; script { + new state; + state = get_int(focused); + + if (state == STATE_NORMAL) { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"color", "default", 0.0); + } else { + set_state(PART:"bg", "selected", 0.0); + set_state(PART:"color", "selected", 0.0); + } + set_int(cur_state, STATE_PLAY); - set_state(PART:"bg", "default", 0.0); - set_state(PART:"color", "default", 0.0); } } program { @@ -808,9 +818,18 @@ group { signal: SIG_SET_PAUSE; source: ""; script { + new state; + state = get_int(focused); + + if (state == STATE_NORMAL) { + set_state(PART:"bg", "default_pause", 0.0); + set_state(PART:"color", "default_pause", 0.0); + } else { + set_state(PART:"bg", "selected_pause", 0.0); + set_state(PART:"color", "selected_pause", 0.0); + } + set_int(cur_state, STATE_PAUSE); - set_state(PART:"bg", "default_pause", 0.0); - set_state(PART:"color", "default_pause", 0.0); } } program { @@ -892,6 +911,8 @@ group { run_program(PROGRAM:"focused,play"); else run_program(PROGRAM:"focused,pause"); + + set_int(focused, STATE_FOCUSED); } } program { @@ -906,6 +927,8 @@ group { run_program(PROGRAM:"unfocused,play"); else run_program(PROGRAM:"unfocused,pause"); + + set_int(focused, STATE_NORMAL); } } program { @@ -1270,6 +1293,7 @@ group { } script { public cur_state; + public focused; } parts { part { @@ -1355,9 +1379,18 @@ group { signal: SIG_SET_PLAY; source: ""; script { + new state; + state = get_int(focused); + + if (state == STATE_NORMAL) { + set_state(PART:"bg", "default", 0.0); + set_state(PART:"color", "default", 0.0); + } else { + set_state(PART:"bg", "selected", 0.0); + set_state(PART:"color", "selected", 0.0); + } + set_int(cur_state, STATE_PLAY); - set_state(PART:"bg", "default", 0.0); - set_state(PART:"color", "default", 0.0); } } program { @@ -1365,9 +1398,18 @@ group { signal: SIG_SET_PAUSE; source: ""; script { + new state; + state = get_int(focused); + + if (state == STATE_NORMAL) { + set_state(PART:"bg", "default_pause", 0.0); + set_state(PART:"color", "default_pause", 0.0); + } else { + set_state(PART:"bg", "selected_pause", 0.0); + set_state(PART:"color", "selected_pause", 0.0); + } + set_int(cur_state, STATE_PAUSE); - set_state(PART:"bg", "default_pause", 0.0); - set_state(PART:"color", "default_pause", 0.0); } } program { @@ -1449,6 +1491,8 @@ group { run_program(PROGRAM:"focused,play"); else run_program(PROGRAM:"focused,pause"); + + set_int(focused, STATE_FOCUSED); } } program { @@ -1463,6 +1507,8 @@ group { run_program(PROGRAM:"unfocused,play"); else run_program(PROGRAM:"unfocused,pause"); + + set_int(focused, STATE_NORMAL); } } program { -- 2.7.4 From f72cb4d065fde2439e4c3570a3edb4960c79b6b0 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Fri, 21 Aug 2015 17:33:44 +0900 Subject: [PATCH 15/16] mplayer: adds support the remote controller Change-Id: Ie03a18c1fb1f59f5f414491cbfe4ad9ff17faae7 Signed-off-by: Minkyu Kang --- src/view/mplayer.c | 44 +++++++++++++++++++++++++++++++++++++++++++- 1 file changed, 43 insertions(+), 1 deletion(-) diff --git a/src/view/mplayer.c b/src/view/mplayer.c index c1cafd0..5109d7c 100644 --- a/src/view/mplayer.c +++ b/src/view/mplayer.c @@ -469,6 +469,31 @@ static void _player_next(struct _priv *priv) } } +static void _player_pause(struct _priv *priv) +{ + player_state_e state; + struct controller *ctl; + + playermgr_get_state(priv->player, &state); + + switch (state) { + case PLAYER_STATE_PLAYING: + progressbar_pause(priv->progress); + playermgr_pause(priv->player); + break; + case PLAYER_STATE_PAUSED: + case PLAYER_STATE_IDLE: + case PLAYER_STATE_READY: + break; + default: + _ERR("player was not created"); + break; + } + + ctl = priv->ctl; + ctl->ops->signal(ctl->handle, PLAY_BTN_LOC, SIG_SET_PLAY); +} + static void _player_play(struct _priv *priv) { app_media_info *mi; @@ -569,6 +594,7 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { struct _priv *priv; + bool r; if (!data || !ev) return; @@ -576,8 +602,24 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj, priv = data; if (!strcmp(ev->keyname, KEY_BACK) || - !strcmp(ev->keyname, KEY_BACK_REMOTE)) + !strcmp(ev->keyname, KEY_BACK_REMOTE)) { _pop_view(priv); + } else if (!strcmp(ev->keyname, KEY_PLAY)) { + _player_play(priv); + } else if (!strcmp(ev->keyname, KEY_PAUSE)) { + _player_pause(priv); + } else if (!strcmp(ev->keyname, KEY_STOP)) { + _player_stop(priv); + } else if (!strcmp(ev->keyname, KEY_NEXT)) { + r = _mplayer_next(priv); + if (r) + _player_next(priv); + else + _player_stop(priv); + } else if (!strcmp(ev->keyname, KEY_PREVIOUS)) { + _mplayer_prev(priv); + _player_next(priv); + } } static void _list_set_focus(struct _priv *priv) -- 2.7.4 From fe751c4e9afd894f9a2e56ee4ee61f81b0800119 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Fri, 21 Aug 2015 13:12:54 +0900 Subject: [PATCH 16/16] action_menu: add clicked callback for favorite menu button Change-Id: Iaa315b6fa6ec9e13691a59f14d275d2b50ed1dc6 Signed-off-by: Jehun Lim --- include/define.h | 1 + res/edc/widgets/button.edc | 128 +++++++++++++++++++++++++++++- src/view/action_menu.c | 190 +++++++++++++++++++++++++++++++++------------ 3 files changed, 266 insertions(+), 53 deletions(-) diff --git a/include/define.h b/include/define.h index c626565..0d68bd9 100644 --- a/include/define.h +++ b/include/define.h @@ -74,6 +74,7 @@ #define SIG_ITEM_FOCUSED "item,focused" #define SIG_ITEM_SELECTED "item,selected" #define SIG_ITEM_UNSELECTED "item,unselected" +#define SIG_ITEM_TOGGLED "item,toggled" #define SIG_ELM_DISABLED "elm,state,disabled" #define SIG_ELM_FOCUS "elm,action,focus" #define SIG_ELM_UNFOCUS "elm,action,unfocus" diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index 3973cc9..a854c6b 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -18,6 +18,7 @@ #define STATE_FOCUSED 1 #define STATE_SELECTED 2 #define STATE_DISABLED 3 +#define STATE_TOGGLED 4 #define STATE_SHOW 0 #define STATE_HIDE 1 @@ -3417,6 +3418,14 @@ group { color: COLOR_ITEM_FOCUS; } description { + state: "default_toggle" 0.0; + inherit: "default" 0.0; + } + description { + state: "focused_toggle" 0.0; + inherit: "focused" 0.0; + } + description { state: "selected" 0.0; inherit: "default" 0.0; } @@ -3515,6 +3524,16 @@ group { image.normal: IMAGE_ACTION_FAVORITE_FOC; } description { + state: "default_toggle" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_FAVORITE_NOR; + } + description { + state: "focused_toggle" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_FAVORITE_FOC; + } + description { state: "selected" 0.0; inherit: "default" 0.0; image.normal: IMAGE_ACTION_FAVORITE_SEL; @@ -3568,6 +3587,14 @@ group { color: COLOR_TEXT_FOCUS; } description { + state: "default_toggle" 0.0; + inherit: "default" 0.0; + } + description { + state: "focused_toggle" 0.0; + inherit: "focused" 0.0; + } + description { state: "selected" 0.0; inherit: "default" 0.0; color: COLOR_ITEM_SELECTED; @@ -3578,6 +3605,15 @@ group { color: COLOR_TEXT_DISABLED; } } + part { + name: "event"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } } programs { program { @@ -3589,9 +3625,57 @@ group { } } program { + name: "button_clicked"; + signal: "mouse,clicked,1"; + source: "event"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "anim,clicked,default"; + action: STATE_SET "focused_toggle" 0.0; + target: "bg"; + target: "menu_icon"; + target: "elm.text"; + transition: TRANSITION_CLICK; + } + program { + name: "anim,clicked,toggle"; + action: STATE_SET "focused" 0.0; + target: "bg"; + target: "menu_icon"; + target: "elm.text"; + transition: TRANSITION_CLICK; + } + program { name: "go_active"; signal: SIG_ELM_FOCUS; source: SIG_SOURCE_ELM; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_NORMAL) + run_program(PROGRAM:"focus,default"); + else + run_program(PROGRAM:"focus,toggle"); + } + } + program { + name: "go_passive"; + signal: SIG_ELM_UNFOCUS; + source: SIG_SOURCE_ELM; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_NORMAL) + run_program(PROGRAM:"unfocus,default"); + else + run_program(PROGRAM:"unfocus,toggle"); + } + } + program { + name: "focus,default"; action: STATE_SET "focused" 0.0; target: "bg"; target: "menu_icon"; @@ -3599,9 +3683,15 @@ group { transition: TRANSITION_FOCUS; } program { - name: "go_passive"; - signal: SIG_ELM_UNFOCUS; - source: SIG_SOURCE_ELM; + name: "focus,toggle"; + action: STATE_SET "focused_toggle" 0.0; + target: "bg"; + target: "menu_icon"; + target: "elm.text"; + transition: TRANSITION_FOCUS; + } + program { + name: "unfocus,default"; action: STATE_SET "default" 0.0; target: "bg"; target: "menu_icon"; @@ -3609,6 +3699,28 @@ group { transition: TRANSITION_FOCUS; } program { + name: "unfocus,toggle"; + action: STATE_SET "default_toggle" 0.0; + target: "bg"; + target: "menu_icon"; + target: "elm.text"; + transition: TRANSITION_FOCUS; + } + program { + name: SIG_ITEM_TOGGLED; + signal: SIG_ITEM_TOGGLED; + source: SIG_SOURCE_SRC; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_NORMAL) { + set_int(cur_state, STATE_TOGGLED); + set_state(PART:"menu_icon","default_toggle",0.0); + } + } + } + program { name: SIG_ITEM_SELECTED; signal: SIG_ITEM_SELECTED; source: SIG_SOURCE_SRC; @@ -3651,6 +3763,16 @@ group { image.normal: IMAGE_ACTION_DELETE_FOC; } description { + state: "default_toggle" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_DELETE_NOR; + } + description { + state: "focused_toggle" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ACTION_DELETE_FOC; + } + description { state: "selected" 0.0; inherit: "default" 0.0; image.normal: IMAGE_ACTION_DELETE_SEL; diff --git a/src/view/action_menu.c b/src/view/action_menu.c index b2241fd..34b682d 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -36,8 +36,10 @@ #define TABLE_PADDING_Y 0 enum _object_type { + ACTION_DISABLED = -1, ACTION_LIVETV_BTN = 0, - ACTION_MENU_BTN, + ACTION_FAVORITE_BTN, + ACTION_DELETE_BTN, ACTION_FAVORITE_GRID }; @@ -54,16 +56,19 @@ struct _priv { Evas_Object *tv_btn; Evas_Object *menu_btn[NUM_MENU_BTN]; + Evas_Object *table; Evas_Object *grid; Elm_Object_Item *selected_it; Eina_List *favorite_list; + app_media_info *mi; int content_type; }; struct _menu_info { + int id; const char *title; const char *style; Eina_Bool disabled; @@ -79,21 +84,25 @@ struct _content_info { static struct _menu_info menu_info[] = { { + .id = ACTION_FAVORITE_BTN, .title = "Favorite", .style = STYLE_BTN_FAVORITE, .disabled = EINA_FALSE }, { + .id = ACTION_DELETE_BTN, .title = "Delete", .style = STYLE_BTN_DELETE, .disabled = EINA_TRUE }, { + .id = ACTION_DISABLED, .title = NULL, .style = STYLE_BTN_EMPTY, .disabled = EINA_TRUE }, { + .id = ACTION_DISABLED, .title = NULL, .style = STYLE_BTN_EMPTY, .disabled = EINA_TRUE @@ -121,6 +130,37 @@ struct _content_info content_info[] = { } }; +static bool _favorite_clicked(struct _priv *priv, Evas_Object *obj) +{ + int r; + bool favorite; + + r = app_contents_favorite_check(CONTENTS_MEDIA, + priv->mi->media_id, &favorite); + if (r != APP_CONTENTS_ERROR_NONE) { + _ERR("failed to check favorite"); + return false; + } + + r = app_contents_favorite_set(CONTENTS_MEDIA, + priv->mi->media_id, !favorite); + if (r != APP_CONTENTS_ERROR_NONE) { + _ERR("failed to set favorite"); + return false; + } + + viewmgr_hide_view(VIEW_ACTION_MENU); + + return true; +} + +static bool _delete_clicked(struct _priv *priv, Evas_Object *obj) +{ + /* It will be implemented later */ + + return true; +} + static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { @@ -142,7 +182,8 @@ static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, switch (id) { case ACTION_LIVETV_BTN: - case ACTION_MENU_BTN: + case ACTION_FAVORITE_BTN: + case ACTION_DELETE_BTN: if (!elm_object_focus_get(obj)) elm_object_focus_set(obj, EINA_TRUE); @@ -161,6 +202,27 @@ static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, } } +static void _clicked_cb(int id, void *data, Evas_Object *obj) +{ + struct _priv *priv; + + if (!obj || !data) + return; + + priv = data; + + switch (id) { + case ACTION_FAVORITE_BTN: + _favorite_clicked(priv, obj); + break; + case ACTION_DELETE_BTN: + _delete_clicked(priv, obj); + break; + default: + break; + } +} + static void _grid_selected(void *data) { app_media *am; @@ -224,6 +286,7 @@ static void _selected_cb(int id, void *data, Evas_Object *obj, static input_handler _handler = { .key_down = _key_down_cb, .mouse_move = _mouse_move_cb, + .clicked = _clicked_cb, .selected = _selected_cb }; @@ -460,9 +523,7 @@ static bool _draw_livetv_btn(struct _priv *priv) static bool _draw_menu_area(struct _priv *priv) { - Evas_Object *table, *btn; - int i; - int col, row; + Evas_Object *table; table = util_add_table(priv->base, TABLE_PADDING_X, TABLE_PADDING_Y); if (!table) { @@ -470,45 +531,10 @@ static bool _draw_menu_area(struct _priv *priv) return false; } - for (i = 0; i < NUM_MENU_BTN; i++) { - btn = elm_button_add(priv->base); - if (!btn) { - _ERR("failed to create button object"); - evas_object_del(table); - return false; - } - - elm_object_style_set(btn, menu_info[i].style); - elm_object_text_set(btn, menu_info[i].title); - - if (menu_info[i].disabled) - elm_object_disabled_set(btn, EINA_TRUE); - - evas_object_show(btn); - - inputmgr_add_callback(btn, ACTION_MENU_BTN, &_handler, priv); - - elm_object_focus_next_object_set(btn, priv->grid, - ELM_FOCUS_DOWN); - - col = i % MAX_BTN_COL; - row = i / MAX_BTN_COL; - - elm_table_pack(table, btn, col, row, 1, 1); - - priv->menu_btn[i] = btn; - } - - evas_object_show(table); - - elm_object_focus_next_object_set(priv->menu_btn[0], priv->menu_btn[0], - ELM_FOCUS_LEFT); - elm_object_focus_next_object_set(priv->menu_btn[NUM_MENU_BTN - 1], - priv->menu_btn[NUM_MENU_BTN - 1], - ELM_FOCUS_RIGHT); - elm_object_part_content_set(priv->base, PART_ACTION_MENU_AREA, table); + priv->table = table; + return true; } @@ -538,6 +564,70 @@ static bool _draw_favorite_area(struct _priv *priv) return true; } +static void _set_menu_state(Evas_Object *btn, int idx, const char *id) +{ + int r; + bool favorite; + + if (menu_info[idx].disabled) { + elm_object_disabled_set(btn, EINA_TRUE); + return; + } + + r = app_contents_favorite_check(CONTENTS_MEDIA, id, &favorite); + if (r != APP_CONTENTS_ERROR_NONE) { + _ERR("failed to check favorite"); + return; + } + + if (favorite) + elm_object_signal_emit(btn, SIG_ITEM_TOGGLED, SIG_SOURCE_SRC); +} + +static void _update_menu_area(struct _priv *priv) +{ + Evas_Object *btn; + int i; + int col, row; + + elm_table_clear(priv->table, EINA_TRUE); + + for (i = 0; i < NUM_MENU_BTN; i++) { + btn = elm_button_add(priv->base); + if (!btn) { + _ERR("failed to create button object"); + return; + } + + elm_object_style_set(btn, menu_info[i].style); + elm_object_text_set(btn, menu_info[i].title); + + _set_menu_state(btn, i, priv->mi->media_id); + + evas_object_show(btn); + + inputmgr_add_callback(btn, menu_info[i].id, &_handler, priv); + + elm_object_focus_next_object_set(btn, priv->grid, + ELM_FOCUS_DOWN); + + col = i % MAX_BTN_COL; + row = i / MAX_BTN_COL; + + elm_table_pack(priv->table, btn, col, row, 1, 1); + + priv->menu_btn[i] = btn; + } + + evas_object_show(priv->table); + + elm_object_focus_next_object_set(priv->menu_btn[0], priv->menu_btn[0], + ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(priv->menu_btn[NUM_MENU_BTN - 1], + priv->menu_btn[NUM_MENU_BTN - 1], + ELM_FOCUS_RIGHT); +} + static void _update_favorite_area(struct _priv *priv) { @@ -577,13 +667,13 @@ static bool _draw_items(struct _priv *priv) return false; } - if (!_draw_favorite_area(priv)) { - _ERR("failed to draw favorite area"); + if (!_draw_menu_area(priv)) { + _ERR("failed to draw menu button"); return false; } - if (!_draw_menu_area(priv)) { - _ERR("failed to draw menu button"); + if (!_draw_favorite_area(priv)) { + _ERR("failed to draw favorite area"); return false; } @@ -593,7 +683,6 @@ static bool _draw_items(struct _priv *priv) static bool _update_items(struct _priv *priv, struct view_update_data *vdata) { app_media *am; - app_media_info *mi; am = eina_list_nth(vdata->list, vdata->index); if (!am) { @@ -601,14 +690,15 @@ static bool _update_items(struct _priv *priv, struct view_update_data *vdata) return false; } - mi = app_media_get_info(am); - if (!mi) { + priv->mi = app_media_get_info(am); + if (!priv->mi) { _ERR("failed to get app media info"); return false; } - priv->content_type = _get_content_type(mi); + priv->content_type = _get_content_type(priv->mi); + _update_menu_area(priv); _update_favorite_area(priv); return true; -- 2.7.4