diff options
author | Minkyu Kang <mk7.kang@samsung.com> | 2015-10-01 17:57:03 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@review.vlan103.tizen.org> | 2015-10-01 17:57:03 -0700 |
commit | a68fe226c8672d8473107a2e3ac037021d7c79d0 (patch) | |
tree | c26f3012d8bd561c7f4dde564f93dcda416a513f | |
parent | aa3f1d4672b4542702d213010b47b995885c2fac (diff) | |
parent | 98fc5bc531ca00fa125ec6f1e9e8a5b3f36bb94a (diff) | |
download | air_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.h | 1 | ||||
-rw-r--r-- | include/define.h | 2 | ||||
-rw-r--r-- | include/grid/grid.h | 7 | ||||
-rw-r--r-- | res/edc/widgets/gengrid.edc | 179 | ||||
-rw-r--r-- | src/data/mediadata.c | 101 | ||||
-rw-r--r-- | src/grid/grid_gallery.c | 129 | ||||
-rw-r--r-- | src/layout/gallery.c | 4 |
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) |