summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorMinkyu Kang <mk7.kang@samsung.com>2015-10-01 17:57:03 -0700
committerGerrit Code Review <gerrit@review.vlan103.tizen.org>2015-10-01 17:57:03 -0700
commita68fe226c8672d8473107a2e3ac037021d7c79d0 (patch)
treec26f3012d8bd561c7f4dde564f93dcda416a513f
parentaa3f1d4672b4542702d213010b47b995885c2fac (diff)
parent98fc5bc531ca00fa125ec6f1e9e8a5b3f36bb94a (diff)
downloadair_mediahub-a68fe226c8672d8473107a2e3ac037021d7c79d0.tar.gz
air_mediahub-a68fe226c8672d8473107a2e3ac037021d7c79d0.tar.bz2
air_mediahub-a68fe226c8672d8473107a2e3ac037021d7c79d0.zip
Merge "gallery: add place view mode" into tizen
-rw-r--r--include/data/mediadata.h1
-rw-r--r--include/define.h2
-rw-r--r--include/grid/grid.h7
-rw-r--r--res/edc/widgets/gengrid.edc179
-rw-r--r--src/data/mediadata.c101
-rw-r--r--src/grid/grid_gallery.c129
-rw-r--r--src/layout/gallery.c4
7 files changed, 417 insertions, 6 deletions
diff --git a/include/data/mediadata.h b/include/data/mediadata.h
index 709bb67..ebd07d2 100644
--- a/include/data/mediadata.h
+++ b/include/data/mediadata.h
@@ -23,6 +23,7 @@ enum media_group_type {
E_GROUP_MEDIA_DATE = 0,
E_GROUP_MEDIA_NAME,
E_GROUP_MEDIA_GENRE,
+ E_GROUP_MEDIA_PLACE,
E_GROUP_MEDIA_TYPE,
E_GROUP_MEDIA_MAX
};
diff --git a/include/define.h b/include/define.h
index 6aa800e..95da4b2 100644
--- a/include/define.h
+++ b/include/define.h
@@ -68,6 +68,8 @@
#define PART_ELM_TEXT_TITLE2 "elm.text.title2"
#define PART_ELM_TEXT_ARTIST "elm.text.artist"
#define PART_ELM_TEXT_ALBUM "elm.text.album"
+#define PART_ELM_TEXT_CITY "elm.text.city"
+#define PART_ELM_TEXT_COUNTRY "elm.text.country"
#define PART_ELM_TEXT_PLAYTIME "elm.text.playtime"
#define PART_ELM_TEXT_COUNT "elm.text.count"
#define PART_ELM_SWALLOW_THUMBNAIL "elm.swallow.thumbnail"
diff --git a/include/grid/grid.h b/include/grid/grid.h
index 39b2450..5c7855f 100644
--- a/include/grid/grid.h
+++ b/include/grid/grid.h
@@ -96,6 +96,13 @@ struct grid_data *get_music_grid_data(int type);
#define MOVIE_FOLDER_ITEM_NUM MOVIE_NAME_ITEM_NUM
#define MOVIE_FOLDER_GRID_PADDING MOVIE_NAME_GRID_PADDING
+#define STYLE_GALLERY_PLACE "place_item"
+#define GALLERY_PLACE_ITEM_PADDING GALLERY_EVENT_ITEM_PADDING
+#define GALLERY_PLACE_ITEM_X GALLERY_EVENT_ITEM_X
+#define GALLERY_PLACE_ITEM_Y GALLERY_EVENT_ITEM_Y
+#define GALLERY_PLACE_ITEM_NUM GALLERY_EVENT_ITEM_NUM
+#define GALLERY_PLACE_GRID_PADDING GALLERY_EVENT_GRID_PADDING
+
#define STYLE_MUSIC_ALBUM "album_item"
#define MUSIC_ALBUM_ITEM_PADDING 26
#define MUSIC_ALBUM_ITEM_X (212 + MUSIC_ALBUM_ITEM_PADDING)
diff --git a/res/edc/widgets/gengrid.edc b/res/edc/widgets/gengrid.edc
index 6bd69a5..be7d595 100644
--- a/res/edc/widgets/gengrid.edc
+++ b/res/edc/widgets/gengrid.edc
@@ -2277,6 +2277,185 @@ group {
}
group {
+ name: "elm/gengrid/item/place_item/default";
+ inherit: "elm/gengrid/item/genre_item/default";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.city elm.text.country elm.text.count";
+ data.item: "contents" "elm.swallow.bg";
+ data.item: "focus_highlight" "on";
+ parts {
+ part {
+ name: "padding_title_left";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1.to: "bg";
+ rel2 {
+ to: "bg";
+ relative: 0.0 0.0;
+ }
+ min: 14 66;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ }
+ }
+ part {
+ name: "padding_title_right";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "bg";
+ relative: 1.0 0.0;
+ }
+ rel2 {
+ to: "bg";
+ relative: 1.0 0.0;
+ }
+ min: 14 66;
+ align: 1.0 0.0;
+ fixed: 1 1;
+ }
+ }
+ part {
+ name: PART_ELM_TEXT_CITY;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "padding_title_left";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to: "padding_title_right";
+ relative: 0.0 1.0;
+ }
+ text {
+ font: FONT_LIGHT;
+ size: 28;
+ align: 0.5 0.5;
+ }
+ min: 0 28;
+ align: 0.5 0.0;
+ color: COLOR_TEXT_FOCUS;
+ fixed: 0 1;
+ map {
+ perspective_on: 1;
+ perspective: "map";
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ map.on: 1;
+ }
+ }
+ part {
+ name: "padding_country";
+ type: SPACER;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: PART_ELM_TEXT_CITY;
+ relative: 0.0 1.0;
+ }
+ rel2.to: PART_ELM_TEXT_CITY;
+ min: 0 12;
+ align: 0.5 0.0;
+ fixed: 0 1;
+ }
+ }
+ part {
+ name: PART_ELM_TEXT_COUNTRY;
+ type: TEXT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "padding_country";
+ relative: 0.0 1.0;
+ }
+ rel2.to: "padding_country";
+ text {
+ font: FONT_LIGHT;
+ size: 28;
+ align: 0.5 0.5;
+ }
+ min: 0 28;
+ align: 0.5 0.0;
+ color: 255 255 255 122;
+ fixed: 0 1;
+ map {
+ perspective_on: 1;
+ perspective: "map";
+ }
+ }
+ description {
+ state: "selected" 0.0;
+ inherit: "default" 0.0;
+ map.on: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "go_active";
+ signal: "elm,state,focused";
+ source: "elm";
+ action: STATE_SET "selected_0" 0.0;
+ target: "part_focus1";
+ target: "part_focus2";
+ target: "part_focus3";
+ target: "part_focus4";
+ after: "focus,in,anim";
+ }
+ program {
+ name: "focus,in,anim";
+ action: STATE_SET "selected" 0.0;
+ target: "defaultbg";
+ target: PART_ELM_SWALLOW_BG;
+ target: "part_focus1";
+ target: "part_focus2";
+ target: "part_focus3";
+ target: "part_focus4";
+ target: PART_ELM_TEXT_CITY;
+ target: PART_ELM_TEXT_COUNTRY;
+ target: PART_ELM_TEXT_COUNT;
+ transition: TRANSITION_FOCUS;
+ }
+ program {
+ name: "go_passive";
+ signal: "elm,state,unfocused";
+ source: "elm";
+ action: STATE_SET "selected_0" 0.0;
+ target: "part_focus1";
+ target: "part_focus2";
+ target: "part_focus3";
+ target: "part_focus4";
+ transition: TRANSITION_FOCUS;
+ after: "focus,out,anim";
+ }
+ program {
+ name: "focus,out,anim";
+ action: STATE_SET "default" 0.0;
+ target: PART_ELM_SWALLOW_BG;
+ target: "defaultbg";
+ target: "part_focus1";
+ target: "part_focus2";
+ target: "part_focus3";
+ target: "part_focus4";
+ target: PART_ELM_TEXT_CITY;
+ target: PART_ELM_TEXT_COUNTRY;
+ target: PART_ELM_TEXT_COUNT;
+ }
+ }
+}
+
+group {
name: "elm/gengrid/item/movie_item_favorite/default";
inherit: "elm/gengrid/item/movie_item/default";
parts {
diff --git a/src/data/mediadata.c b/src/data/mediadata.c
index 0be0959..6fdf0cb 100644
--- a/src/data/mediadata.c
+++ b/src/data/mediadata.c
@@ -24,6 +24,8 @@
#define STR_IMAGE_NAME "Photo"
#define STR_VIDEO_NAME "Video"
+#define STR_PLACE_UNKNOWN "Unknown"
+
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);
@@ -31,6 +33,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_place(const void *, const void *);
static int _compare_cb_type(const void *, const void *);
static int _compare_title(struct group_info *, app_media_info *);
@@ -42,6 +45,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_place(struct group_info *, app_media_info *);
+static char *_get_place(app_media_info *);
+static void *_get_data_place(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 *);
@@ -81,6 +87,12 @@ static struct _list_info g_group_info[E_GROUP_MEDIA_MAX] = {
.name_get = _get_genre,
.data_get = _get_data_genre,
},
+ [E_GROUP_MEDIA_PLACE] = {
+ .sort_cmp_cb = _compare_cb_place,
+ .media_cmp = _compare_place,
+ .name_get = _get_place,
+ .data_get = _get_data_place,
+ },
[E_GROUP_MEDIA_TYPE] = {
.sort_cmp_cb = _compare_cb_type,
.media_cmp = _compare_type,
@@ -237,6 +249,53 @@ static char *_get_genre(app_media_info *info)
return strdup(genre);
}
+static void _get_place_string(app_media_info *info, char **city, char **country)
+{
+ char str[64];
+ char *p, *tmp;
+
+ if (!info->location_tag)
+ return;
+
+ strcpy(str, info->location_tag);
+
+ p = strtok_r(str, "/", &tmp);
+ if (!p)
+ p = STR_PLACE_UNKNOWN;
+
+ *city = strdup(p);
+
+ p = strtok_r(tmp, "", &tmp);
+ if (!p)
+ p = STR_PLACE_UNKNOWN;
+
+ *country = strdup(p);
+}
+
+static int _compare_place(struct group_info *gi, app_media_info *info)
+{
+ if (!gi || !gi->data || !info->location_tag)
+ return -1;
+
+ return strcmp(gi->data, info->location_tag);
+}
+
+static void *_get_data_place(app_media_info *info)
+{
+ if (!info->location_tag)
+ return NULL;
+
+ return strdup(info->location_tag);
+}
+
+static char *_get_place(app_media_info *info)
+{
+ if (!info->location_tag)
+ return NULL;
+
+ return strdup(info->location_tag);
+}
+
static int _compare_type(struct group_info *gi, app_media_info *info)
{
int *type;
@@ -347,6 +406,48 @@ static int _compare_cb_genre(const void *data1, const void *data2)
return strcmp(genre1, genre2);
}
+static int _compare_cb_place(const void *data1, const void *data2)
+{
+ app_media *am1, *am2;
+ app_media_info *info1, *info2;
+ char *city1, *city2;
+ char *country1, *country2;
+ int r;
+
+ 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;
+
+ _get_place_string(info1, &city1, &country1);
+ _get_place_string(info2, &city2, &country2);
+
+ if (!city1 || !city2 || !country1 || !country2)
+ return -1;
+
+ r = strcmp(country1, country2);
+ if (!r)
+ r = strcmp(city1, city2);
+ else {
+ /* NOTE: to set "Unknown" as the last item */
+ if (r < 0 && !strcmp(country1, STR_PLACE_UNKNOWN))
+ r = 1;
+ else if (r > 0 && !strcmp(country2, STR_PLACE_UNKNOWN))
+ r = -1;
+ }
+
+ free(city1);
+ free(city2);
+ free(country1);
+ free(country2);
+
+ return r;
+}
+
static int _compare_cb_type(const void *data1, const void *data2)
{
app_media *am1, *am2;
diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c
index 6f20856..9d9aafc 100644
--- a/src/grid/grid_gallery.c
+++ b/src/grid/grid_gallery.c
@@ -29,7 +29,9 @@
#include "grid/grid.h"
#include "util/util.h"
-static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
+#define STR_PLACE_NAME "City"
+
+static char *_media_text_get(void *data, Evas_Object *obj, const char *part)
{
app_media *am;
app_media_info *info;
@@ -59,7 +61,7 @@ static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
return NULL;
}
-static Evas_Object *_grid_content_get(void *data,
+static Evas_Object *_media_content_get(void *data,
Evas_Object *obj, const char *part)
{
Evas_Object *eo;
@@ -110,6 +112,70 @@ static Evas_Object *_grid_content_get(void *data,
return eo;
}
+static char *_place_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ struct group_info *gi;
+ int cnt;
+ char buf[64];
+ char *city, *country, *tmp;
+
+ if (!data)
+ return NULL;
+
+ gi = data;
+
+ if (!strcmp(part, PART_ELM_TEXT_COUNT)) {
+ cnt = eina_list_count(gi->list);
+ snprintf(buf, sizeof(buf), "%d", cnt);
+ return strdup(buf);
+ } else {
+ strcpy(buf, gi->name);
+
+ city = strtok_r(buf, "/", &tmp);
+ country = strtok_r(tmp, "", &tmp);
+
+ if (!strcmp(part, PART_ELM_TEXT_CITY))
+ return strdup(city);
+ else if (!strcmp(part, PART_ELM_TEXT_COUNTRY)) {
+ if (!country)
+ return NULL;
+
+ return strdup(country);
+ }
+ }
+
+ return NULL;
+}
+
+static Evas_Object *_place_content_get(void *data, Evas_Object *obj,
+ const char *part)
+{
+ Evas_Object *eo;
+ struct group_info *gi;
+ struct color_data bg;
+
+ if (!data)
+ return NULL;
+
+ gi = data;
+
+ eo = NULL;
+ if (!strcmp(part, PART_ELM_SWALLOW_BG)) {
+ eo = evas_object_rectangle_add(obj);
+ if (!eo) {
+ _ERR("failed to create rectangle object");
+ return NULL;
+ }
+
+ app_contents_get_color(gi->name, &bg, NULL);
+ evas_object_color_set(eo, bg.r, bg.g, bg.b, bg.a);
+
+ evas_object_show(eo);
+ }
+
+ return eo;
+}
+
static Eina_List *_get_event_list(struct datamgr *dmgr)
{
if (!dmgr) {
@@ -120,6 +186,32 @@ static Eina_List *_get_event_list(struct datamgr *dmgr)
return dmgr->ops->get_group(dmgr->handle, E_GROUP_MEDIA_DATE, NULL);
}
+static Eina_List *_get_place_list(struct datamgr *dmgr)
+{
+ Eina_List *list;
+ struct group_info *gi;
+
+ if (!dmgr) {
+ _ERR("invalid argument");
+ return NULL;
+ }
+
+ gi = calloc(1, sizeof(*gi));
+ if (!gi) {
+ _ERR("failed to allocate memory");
+ return NULL;
+ }
+
+ gi->name = STR_PLACE_NAME;
+ gi->list = dmgr->ops->get_group(dmgr->handle,
+ E_GROUP_MEDIA_PLACE, NULL);
+
+ list = NULL;
+ list = eina_list_append(list, gi);
+
+ return list;
+}
+
static Eina_List *_get_type_list(struct datamgr *dmgr)
{
if (!dmgr) {
@@ -140,6 +232,21 @@ static void _free_media_list(struct datamgr *dmgr, Eina_List *list)
dmgr->ops->free_group(list);
}
+static void _free_place_list(struct datamgr *dmgr, Eina_List *list)
+{
+ struct group_info *gi;
+
+ if (!dmgr) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ EINA_LIST_FREE(list, gi) {
+ dmgr->ops->free_group(gi->list);
+ free(gi);
+ }
+}
+
static void _key_down_cb(void *data, Elm_Object_Item *it,
Evas_Event_Key_Down *ev)
{
@@ -200,8 +307,13 @@ static void _selected_cb(void *data, Elm_Object_Item *it)
static struct grid_class _gclass[] = {
[E_GALLERY_EVENT] = {
.item_style = STYLE_GALLERY_EVENT,
- .text_get = _grid_text_get,
- .content_get = _grid_content_get
+ .text_get = _media_text_get,
+ .content_get = _media_content_get
+ },
+ [E_GALLERY_PLACE] = {
+ .item_style = STYLE_GALLERY_PLACE,
+ .text_get = _place_text_get,
+ .content_get = _place_content_get
},
/* Other view mode class will be added later */
};
@@ -218,6 +330,15 @@ static struct grid_data _gdata[] = {
.key_down_cb = _key_down_cb,
.selected_cb = _selected_cb
},
+ [E_GALLERY_PLACE] = {
+ .item_x = GALLERY_PLACE_ITEM_X,
+ .item_y = GALLERY_PLACE_ITEM_Y,
+ .item_num = GALLERY_PLACE_ITEM_NUM,
+ .grid_padding = GALLERY_PLACE_GRID_PADDING,
+ .gclass = &_gclass[E_GALLERY_PLACE],
+ .get_item_list = _get_place_list,
+ .free_item_list = _free_place_list
+ },
[E_GALLERY_VIDEO] = {
.item_x = GALLERY_EVENT_ITEM_X,
.item_y = GALLERY_EVENT_ITEM_Y,
diff --git a/src/layout/gallery.c b/src/layout/gallery.c
index f8a5157..028403c 100644
--- a/src/layout/gallery.c
+++ b/src/layout/gallery.c
@@ -435,8 +435,8 @@ 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)
+ /* Folder view mode will be implemented later. */
+ if (mode == E_GALLERY_FOLDER)
return;
if (mode == priv->view_mode)