From 231ed03a186903023e77cb1a8f38d7d3745c1790 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Tue, 18 Aug 2015 14:02:17 +0900 Subject: 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, }; -- cgit v1.2.3