gallery: draw content list area 13/43013/2
authorJehun Lim <jehun.lim@samsung.com>
Mon, 6 Jul 2015 12:43:42 +0000 (21:43 +0900)
committerJehun Lim <jehun.lim@samsung.com>
Tue, 7 Jul 2015 04:12:18 +0000 (13:12 +0900)
Change-Id: I7c8b100d699b9c0e48337b0418a738b7fe0414fd
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
include/layout/movie.h
include/util/util.h
include/view/base.h
res/edc/layout/gallery.edc
res/edc/layout/movie.edc
res/edc/view/base.edc
res/edc/widgets/gengrid.edc
src/layout/gallery.c
src/layout/movie.c
src/util/util.c
src/view/base.c

index 4d83ecd..5d10efc 100644 (file)
 #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__ */
index 59aefce..9f17b5f 100644 (file)
@@ -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__ */
index 470bc93..a40dd4e 100644 (file)
 #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__ */
index 520e09a..a773e3d 100644 (file)
@@ -16,4 +16,5 @@
 
 group {
        name: GRP_GALLERY_LAYOUT;
+       inherit: GRP_MOVIE_LAYOUT;
 }
index fa64707..d029dd9 100644 (file)
@@ -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";
-                       }
-               }
-       }
-}
index 4ad5a83..931ffda 100644 (file)
@@ -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";
+                       }
+               }
+       }
+}
index 67e69eb..624f553 100644 (file)
@@ -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;
index 85df1b1..9dd4c73 100644 (file)
  */
 
 #include <Elementary.h>
+#include <media_content.h>
 #include <app_debug.h>
+#include <app_media.h>
+#include <gridmgr.h>
 #include <layoutmgr.h>
 
 #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 = {
index af6855a..326de60 100644 (file)
@@ -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 = {
index df8abad..e89555a 100644 (file)
@@ -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;
index 07247de..7185c77 100644 (file)
@@ -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);