summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-09-11 19:12:34 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-09-11 19:13:42 +0900
commitd0e1e45cb31ed7ab9d3210d1a364b5d227682e2a (patch)
treee2bbba38ac975d6ea740500b7d216e340ab17ce3
parented0ef8c8af34ef4ff879eb3abcb28d332e1a9a4a (diff)
downloadair_mediahub-d0e1e45cb31ed7ab9d3210d1a364b5d227682e2a.tar.gz
air_mediahub-d0e1e45cb31ed7ab9d3210d1a364b5d227682e2a.tar.bz2
air_mediahub-d0e1e45cb31ed7ab9d3210d1a364b5d227682e2a.zip
gallery: add video view mode
Change-Id: I4d0e0ebab1fb13a6efb68bdc0498ee88b981fb7c Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r--include/data/mediadata.h1
-rw-r--r--src/data/mediadata.c78
-rw-r--r--src/grid/grid_gallery.c31
-rw-r--r--src/layout/gallery.c4
4 files changed, 109 insertions, 5 deletions
diff --git a/include/data/mediadata.h b/include/data/mediadata.h
index 60b5899..f6ce7c7 100644
--- a/include/data/mediadata.h
+++ b/include/data/mediadata.h
@@ -47,6 +47,7 @@ enum list_type {
E_LIST_DATE = 0,
E_LIST_NAME,
E_LIST_GENRE,
+ E_LIST_TYPE,
E_LIST_MAX
};
diff --git a/src/data/mediadata.c b/src/data/mediadata.c
index d57cbed..fa190b2 100644
--- a/src/data/mediadata.c
+++ b/src/data/mediadata.c
@@ -21,6 +21,9 @@
#include "data/mediadata.h"
+#define STR_IMAGE_NAME "Photo"
+#define STR_VIDEO_NAME "Video"
+
typedef int (*media_compare)(struct group_info *gi, app_media_info *info);
typedef void *(*media_compare_data_get)(app_media_info *info);
typedef char *(*group_name_get)(app_media_info *info);
@@ -28,6 +31,7 @@ typedef char *(*group_name_get)(app_media_info *info);
static int _compare_cb_date(const void *, const void *);
static int _compare_cb_name(const void *, const void *);
static int _compare_cb_genre(const void *, const void *);
+static int _compare_cb_type(const void *, const void *);
static int _compare_title(struct group_info *, app_media_info *);
static char *_get_title(app_media_info *);
@@ -38,6 +42,9 @@ static void *_get_data_time(app_media_info *info);
static int _compare_genre(struct group_info *, app_media_info *);
static char *_get_genre(app_media_info *);
static void *_get_data_genre(app_media_info *);
+static int _compare_type(struct group_info *, app_media_info *);
+static char *_get_type(app_media_info *);
+static void *_get_data_type(app_media_info *);
enum _filter_type {
E_FILTER_FOLDER = 0,
@@ -100,6 +107,12 @@ static struct _list_info g_list_info[E_LIST_MAX] = {
.name_get = _get_genre,
.data_get = _get_data_genre,
},
+ [E_LIST_TYPE] = {
+ .sort_cmp_cb = _compare_cb_type,
+ .media_cmp = _compare_type,
+ .name_get = _get_type,
+ .data_get = _get_data_type,
+ },
};
static bool _create_filter(struct _data *data, filter_h *filter, int type)
@@ -254,6 +267,51 @@ static char *_get_genre(app_media_info *info)
return strdup(genre);
}
+static int _compare_type(struct group_info *gi, app_media_info *info)
+{
+ int *type;
+
+ if (!gi || !gi->data)
+ return -1;
+
+ type = gi->data;
+
+ if (*type == info->media_type)
+ return 0;
+
+ return 1;
+}
+
+static void *_get_data_type(app_media_info *info)
+{
+ int *type;
+
+ type = calloc(1, sizeof(*type));
+ if (!type)
+ return NULL;
+
+ *type = info->media_type;
+
+ return type;
+}
+
+static char *_get_type(app_media_info *info)
+{
+ const char *type;
+
+ if (info->media_type == MEDIA_CONTENT_TYPE_IMAGE)
+ type = STR_IMAGE_NAME;
+ else if (info->media_type == MEDIA_CONTENT_TYPE_VIDEO)
+ type = STR_VIDEO_NAME;
+ else
+ type = NULL;
+
+ if (!type)
+ return NULL;
+
+ return strdup(type);
+}
+
static int _compare_cb_date(const void *data1, const void *data2)
{
app_media *am1, *am2;
@@ -319,6 +377,26 @@ static int _compare_cb_genre(const void *data1, const void *data2)
return strcmp(genre1, genre2);
}
+static int _compare_cb_type(const void *data1, const void *data2)
+{
+ app_media *am1, *am2;
+ app_media_info *info1, *info2;
+
+ am1 = (app_media *)data1;
+ am2 = (app_media *)data2;
+
+ info1 = app_media_get_info(am1);
+ info2 = app_media_get_info(am2);
+
+ if (!info1 || !info2)
+ return -1;
+
+ if (info1->media_type < info2->media_type)
+ return 1;
+
+ return -1;
+}
+
static Eina_List *_sort_list(Eina_List *list, int sort)
{
Eina_List *sorted_list;
diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c
index e33555e..61fef94 100644
--- a/src/grid/grid_gallery.c
+++ b/src/grid/grid_gallery.c
@@ -110,7 +110,7 @@ static Evas_Object *_grid_content_get(void *data,
return eo;
}
-static Eina_List *_get_item_list(struct mediadata *md)
+static Eina_List *_get_event_list(struct mediadata *md)
{
if (!md) {
_ERR("invalid argument");
@@ -120,7 +120,17 @@ static Eina_List *_get_item_list(struct mediadata *md)
return mediadata_get_list(md, E_LIST_DATE);
}
-static void _free_item_list(Eina_List *list)
+static Eina_List *_get_type_list(struct mediadata *md)
+{
+ if (!md) {
+ _ERR("invalid argument");
+ return NULL;
+ }
+
+ return mediadata_get_list(md, E_LIST_TYPE);
+}
+
+static void _free_media_list(Eina_List *list)
{
mediadata_free_list(list);
}
@@ -197,8 +207,19 @@ static struct grid_data _gdata[] = {
.item_num = GALLERY_EVENT_ITEM_NUM,
.grid_padding = GALLERY_EVENT_GRID_PADDING,
.gclass = &_gclass[E_GALLERY_EVENT],
- .get_item_list = _get_item_list,
- .free_item_list = _free_item_list,
+ .get_item_list = _get_event_list,
+ .free_item_list = _free_media_list,
+ .key_down_cb = _key_down_cb,
+ .selected_cb = _selected_cb
+ },
+ [E_GALLERY_VIDEO] = {
+ .item_x = GALLERY_EVENT_ITEM_X,
+ .item_y = GALLERY_EVENT_ITEM_Y,
+ .item_num = GALLERY_EVENT_ITEM_NUM,
+ .grid_padding = GALLERY_EVENT_GRID_PADDING,
+ .gclass = &_gclass[E_GALLERY_EVENT],
+ .get_item_list = _get_type_list,
+ .free_item_list = _free_media_list,
.key_down_cb = _key_down_cb,
.selected_cb = _selected_cb
},
@@ -212,5 +233,5 @@ struct grid_data *get_gallery_grid_data(int type)
return NULL;
}
- return &_gdata[E_GALLERY_EVENT];
+ return &_gdata[type];
}
diff --git a/src/layout/gallery.c b/src/layout/gallery.c
index 0a738d5..4e2b7b5 100644
--- a/src/layout/gallery.c
+++ b/src/layout/gallery.c
@@ -349,6 +349,10 @@ static void _update(void *layout_data, int update_type, void *data)
vdata = data;
mode = vdata->index;
+ /* Place and folder view mode will be implemented later. */
+ if (mode == E_GALLERY_PLACE || mode == E_GALLERY_FOLDER)
+ return;
+
if (mode == priv->view_mode)
return;