diff options
-rw-r--r-- | include/view.h | 1 | ||||
-rw-r--r-- | src/grid/grid_gallery.c | 33 | ||||
-rw-r--r-- | src/layout/gallery.c | 3 | ||||
-rw-r--r-- | src/view/detail.c | 55 |
4 files changed, 87 insertions, 5 deletions
diff --git a/include/view.h b/include/view.h index ef90d13..8f8c3b9 100644 --- a/include/view.h +++ b/include/view.h @@ -60,6 +60,7 @@ enum update_type { enum detail_view_type { E_DETAIL_MOVIE_GENRE = 0, + E_DETAIL_GALLERY_PLACE, E_DETAIL_MUSIC_ALBUM, E_DETAIL_MUSIC_ARTIST, E_DETAIL_MUSIC_GENRE, diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c index 9d9aafc..e8e3295 100644 --- a/src/grid/grid_gallery.c +++ b/src/grid/grid_gallery.c @@ -278,7 +278,7 @@ static void _key_down_cb(void *data, Elm_Object_Item *it, } } -static void _selected_cb(void *data, Elm_Object_Item *it) +static void _media_selected_cb(void *data, Elm_Object_Item *it) { struct view_update_data vdata; struct datamgr *dmgr; @@ -304,6 +304,30 @@ static void _selected_cb(void *data, Elm_Object_Item *it) viewmgr_push_view(VIEW_VIEWER); } +static void _place_selected_cb(void *data, Elm_Object_Item *it) +{ + struct view_update_data vdata; + struct group_info *gi; + + if (!it) { + _ERR("invalid argument"); + return; + } + + gi = elm_object_item_data_get(it); + if (!gi) { + _ERR("failed to get group info"); + return; + } + + vdata.list = gi->list; + vdata.index = E_DETAIL_GALLERY_PLACE; + vdata.id = gi->name; + + viewmgr_update_view(VIEW_DETAIL, UPDATE_CONTENT, &vdata); + viewmgr_push_view(VIEW_DETAIL); +} + static struct grid_class _gclass[] = { [E_GALLERY_EVENT] = { .item_style = STYLE_GALLERY_EVENT, @@ -328,7 +352,7 @@ static struct grid_data _gdata[] = { .get_item_list = _get_event_list, .free_item_list = _free_media_list, .key_down_cb = _key_down_cb, - .selected_cb = _selected_cb + .selected_cb = _media_selected_cb }, [E_GALLERY_PLACE] = { .item_x = GALLERY_PLACE_ITEM_X, @@ -337,7 +361,8 @@ static struct grid_data _gdata[] = { .grid_padding = GALLERY_PLACE_GRID_PADDING, .gclass = &_gclass[E_GALLERY_PLACE], .get_item_list = _get_place_list, - .free_item_list = _free_place_list + .free_item_list = _free_place_list, + .selected_cb = _place_selected_cb }, [E_GALLERY_VIDEO] = { .item_x = GALLERY_EVENT_ITEM_X, @@ -348,7 +373,7 @@ static struct grid_data _gdata[] = { .get_item_list = _get_type_list, .free_item_list = _free_media_list, .key_down_cb = _key_down_cb, - .selected_cb = _selected_cb + .selected_cb = _media_selected_cb }, /* Other view mode data will be added later */ }; diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 028403c..0fd1cfa 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -414,6 +414,9 @@ static void _update(void *layout_data, int update_type, void *data) listmgr_focus_content_list(priv->listmgr, vdata->id); break; + case UPDATE_BACK: + listmgr_focus_content_list(priv->listmgr, NULL); + break; case UPDATE_RECENT: if (!data) { _ERR("invalid argument"); diff --git a/src/view/detail.c b/src/view/detail.c index 7d28b1c..d1d95f2 100644 --- a/src/view/detail.c +++ b/src/view/detail.c @@ -37,6 +37,7 @@ static Evas_Object *_album_content_get(void *data, Evas_Object *obj, const char *part); static void _get_movie_count(char *str, int size, Eina_List *list); +static void _get_gallery_count(char *str, int size, Eina_List *list); static void _get_song_count(char *str, int size, Eina_List *list); static void _get_album_count(char *str, int size, Eina_List *list); @@ -70,6 +71,15 @@ static struct _view_info view_info[E_DETAIL_MAX] = { .get_content_info = _get_movie_count, .detail_update = EINA_FALSE, }, + [E_DETAIL_GALLERY_PLACE] = { + .grid_style = STYLE_GALLERY_EVENT, + .grid_item_x = GALLERY_EVENT_ITEM_X, + .grid_item_y = GALLERY_EVENT_ITEM_Y, + .get_grid_text = _grid_text_get, + .get_grid_content = _grid_content_get, + .get_content_info = _get_gallery_count, + .detail_update = EINA_FALSE, + }, [E_DETAIL_MUSIC_ALBUM] = { .grid_style = STYLE_MUSIC_SONG_DETAIL, .grid_item_x = MUSIC_SONG_ITEM_X, @@ -203,6 +213,7 @@ static void _media_selected(void *data) switch (priv->view_type) { case E_DETAIL_MOVIE_GENRE: + case E_DETAIL_GALLERY_PLACE: viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); viewmgr_push_view(VIEW_VIEWER); break; @@ -457,6 +468,26 @@ static void _get_movie_count(char *str, int size, Eina_List *list) snprintf(str, size, "%d movies", eina_list_count(list)); } +static void _get_gallery_count(char *str, int size, Eina_List *list) +{ + Eina_List *l; + app_media *am; + app_media_info *mi; + int count[E_FILE_MAX] = {0}; + + EINA_LIST_FOREACH(list, l, am) { + mi = app_media_get_info(am); + if (!mi) + continue; + + count[mi->media_type]++; + } + + snprintf(str, size, "%d contents | %d photos, %d videos", + eina_list_count(list), + count[E_FILE_PHOTO], count[E_FILE_VIDEO]); +} + static void _get_song_count(char *str, int size, Eina_List *list) { snprintf(str, size, "%d songs", eina_list_count(list)); @@ -467,11 +498,33 @@ static void _get_album_count(char *str, int size, Eina_List *list) snprintf(str, size, "%d albums", eina_list_count(list)); } +static void _get_place_title(const char *title, char *str, int size) +{ + char buf[64], s[64]; + char *city, *country, *tmp; + + strcpy(buf, title); + + city = strtok_r(buf, "/", &tmp); + country = strtok_r(tmp, "", &tmp); + + snprintf(str, size, "%s", city); + + if (country) { + snprintf(s, sizeof(s), ", %s", country); + strcat(str, s); + } +} + static void _update_title_area(struct _priv *priv, const char *title) { char buf[64]; - elm_object_part_text_set(priv->base, PART_DETAIL_TITLE, title); + if (priv->view_type == E_DETAIL_GALLERY_PLACE) { + _get_place_title(title, buf, sizeof(buf)); + elm_object_part_text_set(priv->base, PART_DETAIL_TITLE, buf); + } else + elm_object_part_text_set(priv->base, PART_DETAIL_TITLE, title); priv->vinfo->get_content_info(buf, sizeof(buf), priv->media_list); elm_object_part_text_set(priv->base, PART_DETAIL_CONTENT_INFO, buf); |