diff options
author | Jehun Lim <jehun.lim@samsung.com> | 2015-09-11 19:12:34 +0900 |
---|---|---|
committer | Jehun Lim <jehun.lim@samsung.com> | 2015-09-11 19:13:42 +0900 |
commit | d0e1e45cb31ed7ab9d3210d1a364b5d227682e2a (patch) | |
tree | e2bbba38ac975d6ea740500b7d216e340ab17ce3 | |
parent | ed0ef8c8af34ef4ff879eb3abcb28d332e1a9a4a (diff) | |
download | air_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.h | 1 | ||||
-rw-r--r-- | src/data/mediadata.c | 78 | ||||
-rw-r--r-- | src/grid/grid_gallery.c | 31 | ||||
-rw-r--r-- | src/layout/gallery.c | 4 |
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; |