View: Draw info banner of action menu 99/47299/3
authorHyojung Jo <hj903.jo@samsung.com>
Wed, 2 Sep 2015 05:37:10 +0000 (14:37 +0900)
committerHyojung Jo <hj903.jo@samsung.com>
Wed, 2 Sep 2015 07:23:18 +0000 (16:23 +0900)
Change-Id: Ie90434f33133b37927c0678c0a5cb31def092a26
Signed-off-by: Hyojung Jo <hj903.jo@samsung.com>
include/datamgr.h
include/define.h
include/grid.h
include/utils.h
res/favorite.edc
src/common/utils.c
src/data/channel.c
src/grid/grid_tv.c
src/view/view_action_menu.c
src/view/view_base.c

index c83e92f..d9dc358 100644 (file)
@@ -22,6 +22,8 @@ enum data_type {
        DATA_ARTIST,
        DATA_ALBUM_NAME,
        DATA_DURATION,
+       DATA_SUBTITLE,
+       DATA_DESCRIPTION,
 };
 
 enum action_type {
index 1a411b9..4b1616d 100644 (file)
@@ -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"
 #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"
 /* Count */
 #define COUNT_MENU 6
 #define COUNT_ACTION 2
+#define COUNT_BANNER 1
 
 /* Image */
 #define PLAY_ICON_PNG "ic_thumbnail_play.png"
index 6bf4b74..e4c1ebd 100644 (file)
@@ -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);
index 975a8e3..ebe092b 100644 (file)
@@ -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,
index 954d7dc..13873fb 100644 (file)
@@ -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 {
index a491626..39628ed 100644 (file)
@@ -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;
 }
index 9697cbc..50b25ad 100644 (file)
@@ -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;
index a791221..a6bee0f 100644 (file)
@@ -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)
index 9b20ebb..c95366b 100644 (file)
@@ -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);
        }
 }
 
index 211bda5..7c41ebd 100644 (file)
@@ -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);