summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-07-20 10:55:37 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-07-20 10:55:37 +0900
commitfa748388d964e7a1bdd5f54798d8ba7a94b22bd1 (patch)
tree186a8fab115beb1ae9418ab4c1b082706f1742db
parentc92324982a4a76a2b9bf82ca638b13d639f91560 (diff)
downloadair_mediahub-fa748388d964e7a1bdd5f54798d8ba7a94b22bd1.tar.gz
air_mediahub-fa748388d964e7a1bdd5f54798d8ba7a94b22bd1.tar.bz2
air_mediahub-fa748388d964e7a1bdd5f54798d8ba7a94b22bd1.zip
music: draw content list area
Change-Id: I9e86ff43849a19c2310b4a6254f6da5a69a421cb Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r--include/layout/music.h2
-rw-r--r--res/edc/layout/music.edc1
-rw-r--r--src/layout/music.c233
3 files changed, 230 insertions, 6 deletions
diff --git a/include/layout/music.h b/include/layout/music.h
index 89ac040..ea3efde 100644
--- a/include/layout/music.h
+++ b/include/layout/music.h
@@ -21,4 +21,6 @@
#define GRP_MUSIC_LAYOUT "group.music_layout"
+#define STYLE_GRID_SONG_ITEM "song_item"
+
#endif /* __AIR_MEDIAHUB_LAYOUT_MUSIC_H__ */
diff --git a/res/edc/layout/music.edc b/res/edc/layout/music.edc
index e2b0788..18a60da 100644
--- a/res/edc/layout/music.edc
+++ b/res/edc/layout/music.edc
@@ -16,4 +16,5 @@
group {
name: GRP_MUSIC_LAYOUT;
+ inherit: GRP_MOVIE_LAYOUT;
}
diff --git a/src/layout/music.c b/src/layout/music.c
index 4a95782..e673555 100644
--- a/src/layout/music.c
+++ b/src/layout/music.c
@@ -15,20 +15,165 @@
*/
#include <Elementary.h>
+#include <media_content.h>
#include <app_debug.h>
+#include <app_media.h>
+#include <gridmgr.h>
#include <layoutmgr.h>
+#include <viewmgr.h>
#include "define.h"
+#include "view.h"
+#include "data/mediadata.h"
+#include "util/listmgr.h"
+#include "util/util.h"
+
+#define LIST_MEDIA_COND "media_type=3"
+
+#define TEXT_NOCONTENT "No Music"
+
+#define GRID_PADDING 26
+#define GRID_ITEM_X (488 + GRID_PADDING)
+#define GRID_ITEM_Y (134 + GRID_PADDING)
+#define GRID_NUM_ITEM 4
+
+#define BOX_PADDING (62 - GRID_PADDING)
struct _priv {
Evas_Object *base;
Evas_Object *layout;
+ Evas_Object *menu_btn;
layoutmgr *lmgr;
+
+ struct listmgr *listmgr;
+ struct listmgr_data *ldata;
+
+ struct mediadata *md;
+
+ Eina_List *media_list;
+};
+
+static char *_grid_text_get(void *data, Evas_Object *obj, const char *part)
+{
+ app_media *am;
+ app_media_info *info;
+
+ if (!data)
+ return NULL;
+
+ am = data;
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get media info");
+ return NULL;
+ }
+
+ if (!strcmp(part, PART_ELM_TEXT_TITLE))
+ return strdup(info->title);
+ else if (!strcmp(part, PART_ELM_TEXT_ARTIST))
+ return strdup(info->audio->artist);
+ else if (!strcmp(part, PART_ELM_TEXT_ALBUM))
+ return strdup(info->audio->album);
+
+ return NULL;
+}
+
+static Evas_Object *_grid_content_get(void *data,
+ Evas_Object *obj, const char *part)
+{
+ Evas_Object *image;
+ app_media *am;
+ app_media_info *info;
+
+ if (!data)
+ return NULL;
+
+ am = data;
+ info = app_media_get_info(am);
+ if (!info) {
+ _ERR("failed to get media info");
+ return NULL;
+ }
+
+ image = NULL;
+ if (!strcmp(part, PART_ELM_SWALLOW_THUMBNAIL)) {
+ image = util_add_image(obj, info->thumbnail_path);
+ if (!image) {
+ _ERR("failed to create image object");
+ return NULL;
+ }
+
+ evas_object_show(image);
+ }
+
+ return image;
+}
+
+static struct grid_class _gclass = {
+ .item_style = STYLE_GRID_SONG_ITEM,
+ .text_get = _grid_text_get,
+ .content_get = _grid_content_get
};
+static struct listmgr_data *_create_listmgr_data(struct _priv *priv)
+{
+ struct listmgr_data *data;
+ struct grid_ops *gops;
+
+ data = calloc(1, sizeof(*data));
+ if (!data)
+ goto err;
+
+ data->menu_btn = priv->menu_btn;
+
+ data->grid_item_x = GRID_ITEM_X;
+ data->grid_item_y = GRID_ITEM_Y;
+ data->grid_num_item = GRID_NUM_ITEM;
+ data->box_padding = BOX_PADDING;
+
+ gops = calloc(1, sizeof(*gops));
+ if (!gops)
+ goto err;
+
+ gops->gclass = &_gclass;
+ gops->selected_cb = NULL;
+ gops->ops_data = priv;
+
+ data->gops = gops;
+
+ return data;
+
+err:
+ _ERR("failed to allocate memory");
+ return NULL;
+}
+
+static void _update_list_area(struct _priv *priv)
+{
+ Eina_List *list;
+
+ if (priv->media_list)
+ return;
+
+ list = mediadata_get_list(priv->md, E_LIST_NAME);
+ if (!list) {
+ elm_object_part_text_set(priv->layout,
+ PART_NOCONTENT, TEXT_NOCONTENT);
+ return;
+ }
+
+ if (!listmgr_update_content_list(priv->listmgr, list))
+ _ERR("failed to update list area");
+
+ priv->media_list = list;
+}
+
static bool _create(layoutmgr *lmgr, void *data)
{
+ struct listmgr *listmgr;
+ struct listmgr_data *ldata;
+ struct mediadata *md;
struct _priv *priv;
Evas_Object *base, *layout;
@@ -37,39 +182,80 @@ static bool _create(layoutmgr *lmgr, void *data)
return false;
}
+ if (!data) {
+ _ERR("invalid argument");
+ return false;
+ }
+
priv = calloc(1, sizeof(*priv));
if (!priv) {
_ERR("failed to allocate priv");
return false;
}
+ priv->menu_btn = (Evas_Object *)data;
+
base = layoutmgr_get_base(lmgr);
if (!base) {
_ERR("failed to get base object");
- free(priv);
- return false;
+ goto err;
}
layout = elm_layout_add(base);
if (!layout) {
_ERR("failed to create layout");
- free(priv);
- return false;
+ goto err;
}
if (!elm_layout_file_set(layout, EDJEFILE, GRP_MUSIC_LAYOUT)) {
_ERR("failed to set layout file");
- evas_object_del(layout);
- free(priv);
+ goto err2;
+ }
+
+ ldata = _create_listmgr_data(priv);
+ if (!ldata) {
+ _ERR("failed to create listmgr data");
+ goto err2;
+ }
+
+ listmgr = listmgr_create(layout, (void *)ldata);
+ if (!listmgr) {
+ _ERR("failed to create listmgr");
+ goto err3;
+ }
+
+ md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_NAME);
+ if (!md) {
+ _ERR("failed to create mediadata");
+ listmgr_destroy(listmgr);
+ goto err3;
}
priv->base = base;
priv->layout = layout;
priv->lmgr = lmgr;
+ priv->listmgr = listmgr;
+ priv->ldata = ldata;
+ priv->md = md;
layoutmgr_set_layout_data(lmgr, LAYOUT_MUSIC, priv);
+ if (!listmgr_draw_list_area(listmgr)) {
+ _ERR("failed to draw list area");
+ mediadata_destroy(md);
+ listmgr_destroy(listmgr);
+ goto err3;
+ }
+
return true;
+
+err3:
+ free(ldata);
+err2:
+ evas_object_del(layout);
+err:
+ free(priv);
+ return false;
}
static void _destroy(void *layout_data)
@@ -83,7 +269,15 @@ static void _destroy(void *layout_data)
priv = layout_data;
+ mediadata_free_list(priv->media_list);
+ mediadata_destroy(priv->md);
+
+ listmgr_destroy(priv->listmgr);
+ free(priv->ldata->gops);
+ free(priv->ldata);
+
evas_object_del(priv->layout);
+
free(priv);
}
@@ -120,6 +314,33 @@ static void _hide(void *layout_data)
static void _update(void *layout_data, int update_type, void *data)
{
+ struct _priv *priv;
+ int index;
+
+ if (!layout_data) {
+ _ERR("failed to get layout data");
+ return;
+ }
+
+ priv = layout_data;
+
+ switch (update_type) {
+ case UPDATE_CONTENT:
+ _update_list_area(priv);
+ break;
+ case UPDATE_FOCUS:
+ if (!data) {
+ _ERR("invalid argument");
+ return;
+ }
+
+ index = *(int *)data;
+ listmgr_update_focus_item(priv->listmgr, index);
+
+ break;
+ default:
+ break;
+ }
}
static layout_class _lclass = {