From 5a9d0b45c1ea3679f0c37b55fdba36cf8f041d54 Mon Sep 17 00:00:00 2001 From: Jehun Lim Date: Thu, 17 Sep 2015 21:01:42 +0900 Subject: music: add genre view mode Change-Id: I44a2ea0da58c18d33a6229a3b1a1f343818cac66 Signed-off-by: Jehun Lim --- src/grid/grid_music.c | 107 ++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 107 insertions(+) (limited to 'src/grid/grid_music.c') diff --git a/src/grid/grid_music.c b/src/grid/grid_music.c index dcdc70e..bdef254 100644 --- a/src/grid/grid_music.c +++ b/src/grid/grid_music.c @@ -29,6 +29,8 @@ #include "grid/grid.h" #include "util/util.h" +#define STR_GENRE_NAME "Genre" + static char *_media_text_get(void *data, Evas_Object *obj, const char *part) { app_media *am; @@ -157,6 +159,57 @@ static Evas_Object *_album_content_get(void *data, Evas_Object *obj, return eo; } +static char *_group_text_get(void *data, Evas_Object *obj, const char *part) +{ + struct group_info *gi; + char buf[32]; + int cnt; + + if (!data) + return NULL; + + gi = data; + + if (!strcmp(part, PART_ELM_TEXT_TITLE)) + return strdup(gi->name); + else if (!strcmp(part, PART_ELM_TEXT_COUNT)) { + cnt = eina_list_count(gi->list); + snprintf(buf, sizeof(buf), "%d", cnt); + return strdup(buf); + } + + return NULL; +} + +static Evas_Object *_group_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_song_list(struct datamgr *dmgr) { if (!dmgr) { @@ -187,6 +240,31 @@ static Eina_List *_get_artist_list(struct datamgr *dmgr) return dmgr->ops->get_group(dmgr->handle, E_ALBUM_ARTIST); } +static Eina_List *_get_genre_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_GENRE_NAME; + gi->list = dmgr->ops->get_group(dmgr->handle, E_MEDIA_GENRE); + + list = NULL; + list = eina_list_append(list, gi); + + return list; +} + static void _free_item_list(struct datamgr *dmgr, Eina_List *list) { if (!dmgr) { @@ -197,6 +275,21 @@ static void _free_item_list(struct datamgr *dmgr, Eina_List *list) dmgr->ops->free_group(list); } +static void _free_group_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) { @@ -269,6 +362,11 @@ static struct grid_class _gclass[] = { .text_get = _artist_text_get, .content_get = _album_content_get }, + [E_MUSIC_GENRE] = { + .item_style = STYLE_MUSIC_GENRE, + .text_get = _group_text_get, + .content_get = _group_content_get + }, /* Other view mode class will be added later */ }; @@ -302,6 +400,15 @@ static struct grid_data _gdata[] = { .get_item_list = _get_artist_list, .free_item_list = _free_item_list, }, + [E_MUSIC_GENRE] = { + .item_x = MUSIC_GENRE_ITEM_X, + .item_y = MUSIC_GENRE_ITEM_Y, + .item_num = MUSIC_GENRE_ITEM_NUM, + .grid_padding = MUSIC_GENRE_GRID_PADDING, + .gclass = &_gclass[E_MUSIC_GENRE], + .get_item_list = _get_genre_list, + .free_item_list = _free_group_list, + }, /* Other view mode data will be added later */ }; -- cgit v1.2.3