summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/view.h1
-rw-r--r--src/grid/grid_gallery.c33
-rw-r--r--src/layout/gallery.c3
-rw-r--r--src/view/detail.c55
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);