diff options
author | Hyojung Jo <hj903.jo@samsung.com> | 2015-09-02 14:37:10 +0900 |
---|---|---|
committer | Hyojung Jo <hj903.jo@samsung.com> | 2015-09-02 16:23:18 +0900 |
commit | 895c63d6d21bef3fc80c6ed8b1a6039f41a60d59 (patch) | |
tree | 0d3aa3b7da38f27610b5480ddc91591e8e63752e | |
parent | 6ecaadda1fa00c4896d6755c398acd3baa2b2294 (diff) | |
download | air_favorite-895c63d6d21bef3fc80c6ed8b1a6039f41a60d59.tar.gz air_favorite-895c63d6d21bef3fc80c6ed8b1a6039f41a60d59.tar.bz2 air_favorite-895c63d6d21bef3fc80c6ed8b1a6039f41a60d59.zip |
View: Draw info banner of action menu
Change-Id: Ie90434f33133b37927c0678c0a5cb31def092a26
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
-rw-r--r-- | include/datamgr.h | 2 | ||||
-rw-r--r-- | include/define.h | 6 | ||||
-rw-r--r-- | include/grid.h | 1 | ||||
-rw-r--r-- | include/utils.h | 3 | ||||
-rw-r--r-- | res/favorite.edc | 10 | ||||
-rw-r--r-- | src/common/utils.c | 13 | ||||
-rw-r--r-- | src/data/channel.c | 8 | ||||
-rw-r--r-- | src/grid/grid_tv.c | 32 | ||||
-rw-r--r-- | src/view/view_action_menu.c | 33 | ||||
-rw-r--r-- | src/view/view_base.c | 2 |
10 files changed, 98 insertions, 12 deletions
diff --git a/include/datamgr.h b/include/datamgr.h index c83e92f..d9dc358 100644 --- a/include/datamgr.h +++ b/include/datamgr.h @@ -22,6 +22,8 @@ enum data_type { DATA_ARTIST, DATA_ALBUM_NAME, DATA_DURATION, + DATA_SUBTITLE, + DATA_DESCRIPTION, }; enum action_type { diff --git a/include/define.h b/include/define.h index 1a411b9..4b1616d 100644 --- a/include/define.h +++ b/include/define.h @@ -33,6 +33,7 @@ /* Group */ #define GRP_VIEW_BASE "grp.view.base" #define GRP_VIEW_ACTION_MENU "grp.view.action.menu" +#define GRP_TV_BANNER "grp.tv.banner" /* Part for edc file */ #define PART_TOP_TITLE "part.top.title" @@ -52,6 +53,10 @@ #define PART_THUMB_DEFAULT_TV_ICON "part.thumb.default.tv.icon" #define PART_LIVETV_BTN "part.livetv.button" #define PART_ACTION_MENU "part.action.menu" +#define PART_BANNER "part.banner" +#define PART_TITLE "part.title" +#define PART_SUBTITLE "part.subtitle" +#define PART_DESCRIPT "part.description" /* Style */ #define STYLE_MENU_BTN "style.menu.button" @@ -124,6 +129,7 @@ /* Count */ #define COUNT_MENU 6 #define COUNT_ACTION 2 +#define COUNT_BANNER 1 /* Image */ #define PLAY_ICON_PNG "ic_thumbnail_play.png" diff --git a/include/grid.h b/include/grid.h index 6bf4b74..e4c1ebd 100644 --- a/include/grid.h +++ b/include/grid.h @@ -34,6 +34,7 @@ struct grid_data { enum action_type type, void *data); bool (*item_updated)(void *pre_data, void *new_data); bool (*item_locked)(Elm_Object_Item *it, bool *locked); + bool (*load_item_banner)(Evas_Object *banner, void *data); }; struct grid_data *get_tv_grid_data(void); diff --git a/include/utils.h b/include/utils.h index 975a8e3..ebe092b 100644 --- a/include/utils.h +++ b/include/utils.h @@ -18,7 +18,8 @@ #define __AIR_FAVORITE_UTILS_H__ Evas_Object *utils_add_window(const char *name); -Evas_Object *utils_add_layout(Evas_Object *parent, const char *group); +Evas_Object *utils_add_layout(Evas_Object *parent, const char *group, + Eina_Bool resize); Evas_Object *utils_add_gengrid(Evas_Object *parent, int item_size_x, int item_size_y); Evas_Object *utils_add_box(Evas_Object *parent, const char *part, diff --git a/res/favorite.edc b/res/favorite.edc index 954d7dc..13873fb 100644 --- a/res/favorite.edc +++ b/res/favorite.edc @@ -496,7 +496,7 @@ collections { } part { - name, "part.info.banner"; + name, PART_BANNER; type, SWALLOW; scale, 1; description { @@ -515,7 +515,7 @@ collections { } group { - name, GRP_BANNER; + name, GRP_TV_BANNER; parts { part { name, "bg"; @@ -555,7 +555,7 @@ collections { } part { - name, "part.title"; + name, PART_TITLE; type, TEXT; scale, 1; description { @@ -598,7 +598,7 @@ collections { } part { - name, "part.subtitle"; + name, PART_SUBTITLE; type, TEXT; scale, 1; description { @@ -638,7 +638,7 @@ collections { } part { - name, "part.description"; + name, PART_DESCRIPT; type, TEXT; scale, 1; description { diff --git a/src/common/utils.c b/src/common/utils.c index a491626..39628ed 100644 --- a/src/common/utils.c +++ b/src/common/utils.c @@ -19,6 +19,7 @@ #include <app_debug.h> #include "define.h" +#include "datamgr.h" Evas_Object *utils_add_window(const char *name) { @@ -43,11 +44,12 @@ Evas_Object *utils_add_window(const char *name) return win; } -Evas_Object *utils_add_layout(Evas_Object *parent, const char *group) +Evas_Object *utils_add_layout(Evas_Object *parent, const char *group, + Eina_Bool resize) { Evas_Object *layout; - if (!parent || !group) { + if (!parent) { _ERR("Invalid argument."); return NULL; } @@ -58,11 +60,14 @@ Evas_Object *utils_add_layout(Evas_Object *parent, const char *group) return NULL; } - elm_layout_file_set(layout, EDJEFILE, group); + if (group) + elm_layout_file_set(layout, EDJEFILE, group); evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); - elm_win_resize_object_add(parent, layout); + + if (resize) + elm_win_resize_object_add(parent, layout); return layout; } diff --git a/src/data/channel.c b/src/data/channel.c index 9697cbc..50b25ad 100644 --- a/src/data/channel.c +++ b/src/data/channel.c @@ -128,6 +128,14 @@ static char *_get_data(void *data, enum data_type type) /* It will fixed after tv-service's implementation */ return NULL; + case DATA_SUBTITLE: + /* It will be implemented as GUI guide */ + return NULL; + + case DATA_DESCRIPTION: + /* It will be implemented as GUI guide */ + return NULL; + default: _ERR("Invalid data type."); return NULL; diff --git a/src/grid/grid_tv.c b/src/grid/grid_tv.c index a791221..a6bee0f 100644 --- a/src/grid/grid_tv.c +++ b/src/grid/grid_tv.c @@ -206,6 +206,37 @@ static bool _item_locked(Elm_Object_Item *it, bool *locked) return true; } +static bool _load_item_banner(Evas_Object *banner, void *data) +{ + struct datamgr *dmgr; + char *title, *subtitle, *description; + + if (!banner || !data) { + _ERR("Invaild argument."); + return false; + } + + dmgr = get_channel_datamgr(); + if (!dmgr || !dmgr->get_data) + return false; + + elm_layout_file_set(banner, EDJEFILE, GRP_TV_BANNER); + + title = dmgr->get_data(data, DATA_NAME); + if (title) + elm_object_part_text_set(banner, PART_TITLE, title); + + subtitle = dmgr->get_data(data, DATA_SUBTITLE); + if (subtitle) + elm_object_part_text_set(banner, PART_SUBTITLE, subtitle); + + description = dmgr->get_data(data, DATA_DESCRIPTION); + if (description) + elm_object_part_text_set(banner, PART_DESCRIPT, description); + + return true; +} + static struct grid_data _gdata = { .id = GRID_TV, .item_size_x = ITEM_TV_X, @@ -216,6 +247,7 @@ static struct grid_data _gdata = { .item_action = _item_action, .item_updated = _item_updated, .item_locked = _item_locked, + .load_item_banner = _load_item_banner, }; struct grid_data *get_tv_grid_data(void) diff --git a/src/view/view_action_menu.c b/src/view/view_action_menu.c index 9b20ebb..c95366b 100644 --- a/src/view/view_action_menu.c +++ b/src/view/view_action_menu.c @@ -37,6 +37,7 @@ struct _priv { Evas_Object *base; Evas_Object *live_btn; Evas_Object *menu_btn[COUNT_ACTION]; + Evas_Object *banner; struct grid_data *gdata; }; @@ -264,6 +265,32 @@ static bool _draw_action_area(struct _priv *priv) return true; } +static bool _draw_banner_area(struct _priv *priv) +{ + Evas_Object *banner; + void *data; + + data = elm_object_item_data_get(priv->gdata->focused_item); + if (!data) + return false; + + banner = utils_add_layout(priv->base, NULL, EINA_FALSE); + if (!banner) { + _ERR("Add layout failed."); + return false; + } + + if (!priv->gdata->load_item_banner || + !priv->gdata->load_item_banner(banner, data)) + return false; + + elm_object_part_content_set(priv->base, PART_BANNER, banner); + + priv->banner = banner; + + return true; +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -280,7 +307,7 @@ static Evas_Object *_create(Evas_Object *win, void *data) return NULL; } - base = utils_add_layout(win, GRP_VIEW_ACTION_MENU); + base = utils_add_layout(win, GRP_VIEW_ACTION_MENU, EINA_TRUE); if (!base) { _ERR("Add layout failed."); free(priv); @@ -328,6 +355,9 @@ static void _hide(void *data) } priv = data; + if (priv->banner) + evas_object_del(priv->banner); + if (priv->base) evas_object_hide(priv->base); } @@ -348,6 +378,7 @@ static void _update(void *view_data, int update_type, void *data) priv->gdata = data; _draw_action_area(priv); + _draw_banner_area(priv); } } diff --git a/src/view/view_base.c b/src/view/view_base.c index 211bda5..7c41ebd 100644 --- a/src/view/view_base.c +++ b/src/view/view_base.c @@ -446,7 +446,7 @@ static Evas_Object *_create(Evas_Object *win, void *data) return NULL; } - base = utils_add_layout(win, GRP_VIEW_BASE); + base = utils_add_layout(win, GRP_VIEW_BASE, EINA_TRUE); if (!base) { _ERR("Add layout failed."); free(priv); |