From: Jehun Lim Date: Mon, 6 Jul 2015 12:43:42 +0000 (+0900) Subject: gallery: draw content list area X-Git-Tag: accepted/tizen/tv/20150728.070555~98 X-Git-Url: http://review.tizen.org/git/?a=commitdiff_plain;h=refs%2Fchanges%2F13%2F43013%2F2;p=profile%2Ftv%2Fapps%2Fnative%2Fair_mediahub.git gallery: draw content list area Change-Id: I7c8b100d699b9c0e48337b0418a738b7fe0414fd Signed-off-by: Jehun Lim --- diff --git a/include/layout/movie.h b/include/layout/movie.h index 4d83ecd..5d10efc 100644 --- a/include/layout/movie.h +++ b/include/layout/movie.h @@ -20,14 +20,10 @@ #define LAYOUT_MOVIE "LAYOUT_MOVIE" #define GRP_MOVIE_LAYOUT "group.movie_layout" -#define GRP_LIST_ITEM "group.list_item" #define PART_CONTENT "part.content" #define PART_NOCONTENT "part.nocontent" -#define PART_ITEM_TITLE "part.item_title" -#define PART_ITEM_CONTENT "part.item_content" -#define STYLE_BTN_INDEX "base_btn_index" #define STYLE_GRID_MOVIE_ITEM "movie_item" #endif /* __AIR_MEDIAHUB_LAYOUT_MOVIE_H__ */ diff --git a/include/util/util.h b/include/util/util.h index 59aefce..9f17b5f 100644 --- a/include/util/util.h +++ b/include/util/util.h @@ -20,6 +20,7 @@ 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_image(Evas_Object *base, const char *file); Evas_Object *util_add_scroller(Evas_Object *base); #endif /* __AIR_MEDIAHUB_UTIL_H__ */ diff --git a/include/view/base.h b/include/view/base.h index 470bc93..a40dd4e 100644 --- a/include/view/base.h +++ b/include/view/base.h @@ -17,15 +17,27 @@ #ifndef __AIR_MEDIAHUB_VIEW_BASE_H__ #define __AIR_MEDIAHUB_VIEW_BASE_H__ +/* view */ #define VIEW_BASE "VIEW_BASE" +/* group */ #define GRP_BASE_VIEW "group.base_view" +#define GRP_LIST_ITEM "group.list_item" +/* part */ #define PART_TITLE "part.title" #define PART_MENU_AREA "part.menu_area" #define PART_THUMBNAIL_AREA "part.thumbnail_area" #define PART_BOTTOM_AREA "part.bottom_area" -#define STYLE_MENU_BTN "base_btn_menu" +#define PART_ITEM_TITLE "part.item_title" +#define PART_ITEM_CONTENT "part.item_content" + +/* images */ +#define IMAGE_THUMBNAIL_PLAY IMAGEDIR"/ic_thumbnail_play.png" + +/* style */ +#define STYLE_BTN_MENU "base_btn_menu" +#define STYLE_BTN_INDEX "base_btn_index" #endif /* __AIR_MEDIAHUB_VIEW_BASE_H__ */ diff --git a/res/edc/layout/gallery.edc b/res/edc/layout/gallery.edc index 520e09a..a773e3d 100644 --- a/res/edc/layout/gallery.edc +++ b/res/edc/layout/gallery.edc @@ -16,4 +16,5 @@ group { name: GRP_GALLERY_LAYOUT; + inherit: GRP_MOVIE_LAYOUT; } diff --git a/res/edc/layout/movie.edc b/res/edc/layout/movie.edc index fa64707..d029dd9 100644 --- a/res/edc/layout/movie.edc +++ b/res/edc/layout/movie.edc @@ -74,65 +74,3 @@ group { } } } - -group { - name: GRP_LIST_ITEM; - parts { - part { - name: "area"; - type: RECT; - scale: 1; - description { - state: "default" 0.0; - min: 0 703; - fixed: 0 1; - visible: 0; - } - } - part { - name: PART_ITEM_TITLE; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1.to: "area"; - rel2 { - to: "area"; - relative: 1.0 0.0; - } - min: 0 36; - align: 0.5 0.0; - fixed: 0 1; - } - } - part { - name: "padding_content"; - type: SPACER; - scale: 1; - description { - state: "default" 0.0; - rel1 { - to: PART_ITEM_TITLE; - relative: 0.0 1.0; - } - rel2.to: PART_ITEM_TITLE; - min: 0 28; - align: 0.5 0.0; - fixed: 0 1; - } - } - part { - name: PART_ITEM_CONTENT; - type: SWALLOW; - scale: 1; - description { - state: "default" 0.0; - rel1 { - to: "padding_content"; - relative: 0.0 1.0; - } - rel2.to: "area"; - } - } - } -} diff --git a/res/edc/view/base.edc b/res/edc/view/base.edc index 4ad5a83..931ffda 100644 --- a/res/edc/view/base.edc +++ b/res/edc/view/base.edc @@ -154,3 +154,65 @@ group { } } } + +group { + name: GRP_LIST_ITEM; + parts { + part { + name: "area"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 703; + fixed: 0 1; + visible: 0; + } + } + part { + name: PART_ITEM_TITLE; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "area"; + rel2 { + to: "area"; + relative: 1.0 0.0; + } + min: 0 36; + align: 0.5 0.0; + fixed: 0 1; + } + } + part { + name: "padding_content"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_ITEM_TITLE; + relative: 0.0 1.0; + } + rel2.to: PART_ITEM_TITLE; + min: 0 28; + align: 0.5 0.0; + fixed: 0 1; + } + } + part { + name: PART_ITEM_CONTENT; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding_content"; + relative: 0.0 1.0; + } + rel2.to: "area"; + } + } + } +} diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc index 67e69eb..624f553 100644 --- a/res/edc/widgets/gengrid.edc +++ b/res/edc/widgets/gengrid.edc @@ -120,7 +120,7 @@ group { to: "bg"; relative: 1.0 0.0; } - min: 0 3; + min: 0 6; align: 0.5 0.0; color: COLOR_ITEM_FOCUS; fixed: 0 1; @@ -158,7 +158,7 @@ group { to: "elm.bg.text"; relative: 0.0 0.0; } - min: 3 0; + min: 6 0; align: 0.0 0.5; color: COLOR_ITEM_FOCUS; fixed: 1 0; @@ -196,7 +196,7 @@ group { to: "elm.bg.text"; relative: 1.0 0.0; } - min: 3 0; + min: 6 0; align: 1.0 0.5; color: COLOR_ITEM_FOCUS; fixed: 1 0; @@ -489,8 +489,16 @@ group { type: SWALLOW; description { state: "default" 0.0; - rel1.to: "defaultbg"; - rel2.to: "defaultbg"; + rel1 { + to: "defaultbg"; + relative: 0.5 0.5; + } + rel2 { + to: "defaultbg"; + relative: 0.5 0.5; + } + min: 80 80; + fixed: 1 1; } } part { @@ -505,7 +513,7 @@ group { to: "bg"; relative: 1.0 0.0; } - min: 0 3; + min: 0 6; align: 0.5 0.0; color: COLOR_ITEM_FOCUS; fixed: 0 1; @@ -543,7 +551,7 @@ group { to: "bg"; relative: 0.0 1.0; } - min: 3 0; + min: 6 0; align: 0.0 0.5; color: COLOR_ITEM_FOCUS; fixed: 1 0; @@ -578,7 +586,7 @@ group { relative: 1.0 1.0; } rel2.to: "bg"; - min: 3 0; + min: 6 0; align: 1.0 0.5; color: COLOR_ITEM_FOCUS; fixed: 1 0; @@ -616,7 +624,7 @@ group { to: "part_focus3"; relative: 0.0 1.0; } - min: 0 3; + min: 0 6; align: 0.5 1.0; color: COLOR_ITEM_FOCUS; fixed: 0 1; diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 85df1b1..9dd4c73 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -15,20 +15,130 @@ */ #include +#include #include +#include +#include #include #include "define.h" +#include "data/mediadata.h" +#include "util/listmgr.h" +#include "util/util.h" + +#define LIST_MEDIA_COND "media_type=0 OR media_type=1" + +#define TEXT_NOCONTENT "No Photo & Video" + +#define GRID_ITEM_X 206 +#define GRID_ITEM_Y 206 +#define GRID_NUM_ITEM 3 + +#define BOX_PADDING 62 struct _priv { Evas_Object *base; Evas_Object *layout; layoutmgr *lmgr; + + struct listmgr *listmgr; + + struct mediadata *md; + + Eina_List *media_list; +}; + +static Evas_Object *_grid_content_get(void *data, + Evas_Object *obj, const char *part) +{ + Evas_Object *image; + app_media *am; + app_media_info *info; + + if (!data) + return NULL; + + am = data; + info = app_media_get_info(am); + if (!info) { + _ERR("failed to get media info"); + return NULL; + } + + image = NULL; + if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) { + image = util_add_image(obj, info->thumbnail_path); + if (!image) { + _ERR("failed to create image object"); + return NULL; + } + + evas_object_show(image); + } else if (!strcmp(part, PART_ELM_SWALLOW_VIDEO)) { + if (info->media_type == MEDIA_CONTENT_TYPE_VIDEO) { + image = util_add_image(obj, IMAGE_THUMBNAIL_PLAY); + if (!image) { + _ERR("failed to create image object"); + return NULL; + } + + evas_object_show(image); + } + } + + return image; +} + +static struct grid_class _gclass = { + .item_style = STYLE_GRID_GALLERY_ITEM, + .content_get = _grid_content_get }; +static struct listmgr_data *_create_listmgr_data(void) +{ + struct listmgr_data *data; + + data = calloc(1, sizeof(*data)); + if (!data) { + _ERR("failed to allocate listmgr data"); + return NULL; + } + + data->grid_item_x = GRID_ITEM_X; + data->grid_item_y = GRID_ITEM_Y; + data->grid_num_item = GRID_NUM_ITEM; + data->box_padding = BOX_PADDING; + data->gclass = &_gclass; + + return data; +} + +static void _update_list_area(struct _priv *priv) +{ + Eina_List *list; + + if (priv->media_list) + return; + + list = mediadata_get_list(priv->md, E_LIST_DATE); + if (!list) { + elm_object_part_text_set(priv->layout, + PART_NOCONTENT, TEXT_NOCONTENT); + return; + } + + if (!listmgr_update_list_area(priv->listmgr, list)) + _ERR("failed to update list area"); + + priv->media_list = list; +} + static bool _create(layoutmgr *lmgr, void *data) { + struct listmgr *listmgr; + struct listmgr_data *ldata; + struct mediadata *md; struct _priv *priv; Evas_Object *base, *layout; @@ -46,30 +156,63 @@ static bool _create(layoutmgr *lmgr, void *data) base = layoutmgr_get_base(lmgr); if (!base) { _ERR("failed to get base object"); - free(priv); - return false; + goto err; } layout = elm_layout_add(base); if (!layout) { _ERR("failed to create layout"); - free(priv); - return false; + goto err; } if (!elm_layout_file_set(layout, EDJEFILE, GRP_GALLERY_LAYOUT)) { _ERR("failed to set layout file"); - evas_object_del(layout); - free(priv); + goto err2; + } + + ldata = _create_listmgr_data(); + if (!ldata) { + _ERR("failed to create listmgr data"); + goto err2; + } + + listmgr = listmgr_create(layout, (void *)ldata); + if (!listmgr) { + _ERR("failed to create listmgr"); + goto err3; + } + + md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_DATE); + if (!md) { + _ERR("failed to create mediadata"); + listmgr_destroy(listmgr); + goto err3; } priv->base = base; priv->layout = layout; priv->lmgr = lmgr; + priv->listmgr = listmgr; + priv->md = md; layoutmgr_set_layout_data(lmgr, LAYOUT_GALLERY, priv); + if (!listmgr_draw_list_area(listmgr)) { + _ERR("failed to draw list area"); + mediadata_destroy(md); + listmgr_destroy(listmgr); + goto err3; + } + return true; + +err3: + free(ldata); +err2: + evas_object_del(layout); +err: + free(priv); + return false; } static void _destroy(void *layout_data) @@ -83,6 +226,11 @@ static void _destroy(void *layout_data) priv = layout_data; + mediadata_free_list(priv->media_list); + mediadata_destroy(priv->md); + + listmgr_destroy(priv->listmgr); + evas_object_del(priv->layout); free(priv); } @@ -120,6 +268,16 @@ static void _hide(void *layout_data) static void _update(void *layout_data, int update_type, void *data) { + struct _priv *priv; + + if (!layout_data) { + _ERR("failed to get layout data"); + return; + } + + priv = layout_data; + + _update_list_area(priv); } static layout_class _lclass = { diff --git a/src/layout/movie.c b/src/layout/movie.c index af6855a..326de60 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -24,6 +24,7 @@ #include "define.h" #include "data/mediadata.h" #include "util/listmgr.h" +#include "util/util.h" #define LIST_MEDIA_COND "media_type=1 AND copyright NOT LIKE \"Unknown\"" @@ -84,13 +85,8 @@ static Evas_Object *_grid_content_get(void *data, am = data; + image = NULL; if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) { - image = elm_image_add(obj); - if (!image) { - _ERR("failed to create image object"); - return NULL; - } - info = app_media_get_info(am); if (!info) { _ERR("failed to get media info"); @@ -98,15 +94,16 @@ static Evas_Object *_grid_content_get(void *data, return NULL; } - elm_image_file_set(image, info->thumbnail_path, NULL); - elm_image_aspect_fixed_set(image, EINA_FALSE); + image = util_add_image(obj, info->thumbnail_path); + if (!image) { + _ERR("failed to create image object"); + return NULL; + } evas_object_show(image); - - return image; } - return NULL; + return image; } static struct grid_class _gclass = { diff --git a/src/util/util.c b/src/util/util.c index df8abad..e89555a 100644 --- a/src/util/util.c +++ b/src/util/util.c @@ -69,6 +69,25 @@ Evas_Object *util_add_gengrid(Evas_Object *base, return grid; } +Evas_Object *util_add_image(Evas_Object *base, const char *file) +{ + Evas_Object *image; + + if (!base || !file) + return NULL; + + image = elm_image_add(base); + if (!image) { + _ERR("failed to create image object"); + return NULL; + } + + elm_image_file_set(image, file, NULL); + elm_image_aspect_fixed_set(image, EINA_FALSE); + + return image; +} + Evas_Object *util_add_scroller(Evas_Object *base) { Evas_Object *scr; diff --git a/src/view/base.c b/src/view/base.c index 07247de..7185c77 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -140,7 +140,7 @@ static bool _draw_menu_btn(struct _priv *priv) return false; } - elm_object_style_set(btn, STYLE_MENU_BTN); + elm_object_style_set(btn, STYLE_BTN_MENU); elm_object_text_set(btn, g_menu_item[i].name); elm_box_pack_end(box, btn);