diff options
author | Minkyu Kang <mk7.kang@samsung.com> | 2015-09-06 18:48:52 -0700 |
---|---|---|
committer | Gerrit Code Review <gerrit@review.vlan103.tizen.org> | 2015-09-06 18:48:52 -0700 |
commit | 27043b4645801eb912071bc829f999eb8b91e071 (patch) | |
tree | 21718bc59cb7c7dce34afb50f884b9af15155eab | |
parent | 2c0af96fc715b34de9d4ffe834d0b578840f828a (diff) | |
parent | 869d6f0d7760530485d1a6a9eb0707328d5aad4d (diff) | |
download | air_mediahub-27043b4645801eb912071bc829f999eb8b91e071.tar.gz air_mediahub-27043b4645801eb912071bc829f999eb8b91e071.tar.bz2 air_mediahub-27043b4645801eb912071bc829f999eb8b91e071.zip |
Merge "remove grid related code from layout" into tizen
-rw-r--r-- | include/grid/grid.h | 26 | ||||
-rw-r--r-- | include/util/listmgr.h | 26 | ||||
-rw-r--r-- | src/grid/grid_gallery.c | 53 | ||||
-rw-r--r-- | src/grid/grid_movie.c | 53 | ||||
-rw-r--r-- | src/grid/grid_music.c | 53 | ||||
-rw-r--r-- | src/layout/gallery.c | 215 | ||||
-rw-r--r-- | src/layout/movie.c | 230 | ||||
-rw-r--r-- | src/layout/music.c | 218 | ||||
-rw-r--r-- | src/util/listmgr.c | 76 |
9 files changed, 310 insertions, 640 deletions
diff --git a/include/grid/grid.h b/include/grid/grid.h index 425843c..da89cf9 100644 --- a/include/grid/grid.h +++ b/include/grid/grid.h @@ -46,9 +46,12 @@ struct grid_data { int item_x; int item_y; int item_num; + int grid_padding; struct grid_class *gclass; Eina_List *(*get_item_list)(struct mediadata *md); - void (*item_selected)(Eina_List *list, app_media *am); + void (*key_down_cb)(void *data, Elm_Object_Item *it, + Evas_Event_Key_Down *ev); + void (*selected_cb)(void *data, Elm_Object_Item *it); }; struct grid_data *get_movie_grid_data(int type); @@ -56,21 +59,24 @@ struct grid_data *get_gallery_grid_data(int type); struct grid_data *get_music_grid_data(int type); #define STYLE_MOVIE_NAME "movie_item" -#define MOVIE_NAME_PADDING 26 -#define MOVIE_NAME_ITEM_X (378 + MOVIE_NAME_PADDING) -#define MOVIE_NAME_ITEM_Y (294 + MOVIE_NAME_PADDING) +#define MOVIE_NAME_ITEM_PADDING 26 +#define MOVIE_NAME_ITEM_X (378 + MOVIE_NAME_ITEM_PADDING) +#define MOVIE_NAME_ITEM_Y (294 + MOVIE_NAME_ITEM_PADDING) #define MOVIE_NAME_ITEM_NUM 2 +#define MOVIE_NAME_GRID_PADDING (62 - MOVIE_NAME_ITEM_PADDING) #define STYLE_GALLERY_EVENT "gallery_item" -#define GALLERY_EVENT_PADDING 6 -#define GALLERY_EVENT_ITEM_X (200 + GALLERY_EVENT_PADDING) -#define GALLERY_EVENT_ITEM_Y (200 + GALLERY_EVENT_PADDING) +#define GALLERY_EVENT_ITEM_PADDING 6 +#define GALLERY_EVENT_ITEM_X (200 + GALLERY_EVENT_ITEM_PADDING) +#define GALLERY_EVENT_ITEM_Y (200 + GALLERY_EVENT_ITEM_PADDING) #define GALLERY_EVENT_ITEM_NUM 3 +#define GALLERY_EVENT_GRID_PADDING (62 - GALLERY_EVENT_ITEM_PADDING) #define STYLE_MUSIC_SONG "song_item" -#define MUSIC_SONG_PADDING 26 -#define MUSIC_SONG_ITEM_X (488 + MUSIC_SONG_PADDING) -#define MUSIC_SONG_ITEM_Y (134 + MUSIC_SONG_PADDING) +#define MUSIC_SONG_ITEM_PADDING 26 +#define MUSIC_SONG_ITEM_X (488 + MUSIC_SONG_ITEM_PADDING) +#define MUSIC_SONG_ITEM_Y (134 + MUSIC_SONG_ITEM_PADDING) #define MUSIC_SONG_ITEM_NUM 4 +#define MUSIC_SONG_GRID_PADDING (62 - MUSIC_SONG_ITEM_PADDING) #endif /* __AIR_MEDIAHUB_GRID_H__ */ diff --git a/include/util/listmgr.h b/include/util/listmgr.h index f90bb0b..f3bd96e 100644 --- a/include/util/listmgr.h +++ b/include/util/listmgr.h @@ -19,35 +19,22 @@ struct listmgr; -struct play_info_ops { +struct play_info_data { bool (*draw)(void *data, Evas_Object *base); bool (*update)(void *data, Evas_Object *base); void (*selected_cb)(void *data, Evas_Object *obj); - void *ops_data; -}; - -struct grid_ops { - struct grid_class *gclass; - - void (*key_down_cb)(void *data, Elm_Object_Item *it, - Evas_Event_Key_Down *ev); - void (*selected_cb)(void *data, Elm_Object_Item *it); - void *ops_data; + void *cb_data; }; struct listmgr_data { Evas_Object *menu_btn; Evas_Object *view_btn; - int grid_item_x; - int grid_item_y; - int grid_num_item; - - int box_padding; + struct play_info_data *pdata; - struct play_info_ops *pops; - struct grid_ops *gops; + struct grid_data *gdata; + void *grid_cb_data; }; struct listmgr *listmgr_create(Evas_Object *base, void *data); @@ -55,7 +42,8 @@ void listmgr_destroy(struct listmgr *listmgr); bool listmgr_draw_list_area(struct listmgr *lmgr); bool listmgr_update_content_item(struct listmgr *lmgr); -bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list); +bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list, + struct grid_data *gdata); bool listmgr_update_play_info(struct listmgr *lmgr, app_media_info *info); bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id); diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c index 5e5f1dd..e443ea1 100644 --- a/src/grid/grid_gallery.c +++ b/src/grid/grid_gallery.c @@ -20,6 +20,7 @@ #include <app_contents.h> #include <app_media.h> #include <gridmgr.h> +#include <inputmgr.h> #include <viewmgr.h> #include "define.h" @@ -119,17 +120,57 @@ static Eina_List *_get_item_list(struct mediadata *md) return mediadata_get_list(md, E_LIST_DATE); } -static void _item_selected(Eina_List *list, app_media *am) +static void _key_down_cb(void *data, Elm_Object_Item *it, + Evas_Event_Key_Down *ev) { struct view_update_data vdata; + struct mediadata *md; + app_media *am; + + if (!data || !ev) { + _ERR("invalid argument"); + return; + } + + md = data; + + if (!strcmp(ev->keyname, KEY_MENU) || + !strcmp(ev->keyname, KEY_MENU_REMOTE)) { + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(md); + vdata.index = util_get_media_index(vdata.list, am); + + viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); + } +} + +static void _selected_cb(void *data, Elm_Object_Item *it) +{ + struct view_update_data vdata; + struct mediadata *md; + app_media *am; - if (!list || !am) { + if (!data || !it) { _ERR("invalid argument"); return; } - vdata.list = list; - vdata.index = util_get_media_index(list, am); + md = data; + + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(md); + vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); viewmgr_push_view(VIEW_VIEWER); @@ -149,9 +190,11 @@ static struct grid_data _gdata[] = { .item_x = GALLERY_EVENT_ITEM_X, .item_y = GALLERY_EVENT_ITEM_Y, .item_num = GALLERY_EVENT_ITEM_NUM, + .grid_padding = GALLERY_EVENT_GRID_PADDING, .gclass = &_gclass[E_GALLERY_EVENT], .get_item_list = _get_item_list, - .item_selected = _item_selected + .key_down_cb = _key_down_cb, + .selected_cb = _selected_cb }, /* Other view mode data will be added later */ }; diff --git a/src/grid/grid_movie.c b/src/grid/grid_movie.c index 60ab310..49caf86 100644 --- a/src/grid/grid_movie.c +++ b/src/grid/grid_movie.c @@ -20,6 +20,7 @@ #include <app_contents.h> #include <app_media.h> #include <gridmgr.h> +#include <inputmgr.h> #include <viewmgr.h> #include "define.h" @@ -109,17 +110,57 @@ static Eina_List *_get_item_list(struct mediadata *md) return mediadata_get_list(md, E_LIST_NAME); } -static void _item_selected(Eina_List *list, app_media *am) +static void _key_down_cb(void *data, Elm_Object_Item *it, + Evas_Event_Key_Down *ev) { struct view_update_data vdata; + struct mediadata *md; + app_media *am; + + if (!data || !ev) { + _ERR("invalid argument"); + return; + } + + md = data; + + if (!strcmp(ev->keyname, KEY_MENU) || + !strcmp(ev->keyname, KEY_MENU_REMOTE)) { + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(md); + vdata.index = util_get_media_index(vdata.list, am); + + viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); + } +} + +static void _selected_cb(void *data, Elm_Object_Item *it) +{ + struct view_update_data vdata; + struct mediadata *md; + app_media *am; - if (!list || !am) { + if (!data || !it) { _ERR("invalid argument"); return; } - vdata.list = list; - vdata.index = util_get_media_index(list, am); + md = data; + + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(md); + vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); viewmgr_push_view(VIEW_VIEWER); @@ -139,9 +180,11 @@ static struct grid_data _gdata[] = { .item_x = MOVIE_NAME_ITEM_X, .item_y = MOVIE_NAME_ITEM_Y, .item_num = MOVIE_NAME_ITEM_NUM, + .grid_padding = MOVIE_NAME_GRID_PADDING, .gclass = &_gclass[E_MOVIE_NAME], .get_item_list = _get_item_list, - .item_selected = _item_selected + .key_down_cb = _key_down_cb, + .selected_cb = _selected_cb }, /* Other view mode data will be added later */ }; diff --git a/src/grid/grid_music.c b/src/grid/grid_music.c index c4e7573..99a4baa 100644 --- a/src/grid/grid_music.c +++ b/src/grid/grid_music.c @@ -20,6 +20,7 @@ #include <app_contents.h> #include <app_media.h> #include <gridmgr.h> +#include <inputmgr.h> #include <viewmgr.h> #include "define.h" @@ -106,17 +107,57 @@ static Eina_List *_get_item_list(struct mediadata *md) return mediadata_get_list(md, E_LIST_NAME); } -static void _item_selected(Eina_List *list, app_media *am) +static void _key_down_cb(void *data, Elm_Object_Item *it, + Evas_Event_Key_Down *ev) { struct view_update_data vdata; + struct mediadata *md; + app_media *am; + + if (!data || !ev) { + _ERR("invalid argument"); + return; + } + + md = data; + + if (!strcmp(ev->keyname, KEY_MENU) || + !strcmp(ev->keyname, KEY_MENU_REMOTE)) { + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(md); + vdata.index = util_get_media_index(vdata.list, am); + + viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); + } +} + +static void _selected_cb(void *data, Elm_Object_Item *it) +{ + struct view_update_data vdata; + struct mediadata *md; + app_media *am; - if (!list || !am) { + if (!data || !it) { _ERR("invalid argument"); return; } - vdata.list = list; - vdata.index = util_get_media_index(list, am); + md = data; + + am = elm_object_item_data_get(it); + if (!am) { + _ERR("failed to get app media"); + return; + } + + vdata.list = mediadata_get_medialist(md); + vdata.index = util_get_media_index(vdata.list, am); viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata); viewmgr_push_view(VIEW_MPLAYER); @@ -136,9 +177,11 @@ static struct grid_data _gdata[] = { .item_x = MUSIC_SONG_ITEM_X, .item_y = MUSIC_SONG_ITEM_Y, .item_num = MUSIC_SONG_ITEM_NUM, + .grid_padding = MUSIC_SONG_GRID_PADDING, .gclass = &_gclass[E_MUSIC_SONG], .get_item_list = _get_item_list, - .item_selected = _item_selected + .key_down_cb = _key_down_cb, + .selected_cb = _selected_cb }, /* Other view mode data will be added later */ }; diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 70efdf7..908487b 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -27,6 +27,7 @@ #include "layout.h" #include "view.h" #include "data/mediadata.h" +#include "grid/grid.h" #include "util/listmgr.h" #include "util/util.h" @@ -55,93 +56,8 @@ struct _priv { 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; - char buf[32]; - if (!data) - return NULL; - - am = data; - info = app_media_get_info(am); - if (!info) { - _ERR("failed to get media info"); - return NULL; - } - - if (info->media_type != MEDIA_CONTENT_TYPE_VIDEO) - return NULL; - - if (!strcmp(part, PART_ELM_TEXT_PLAYTIME)) { - util_time_string(buf, sizeof(buf), - info->video->duration, false); - - return strdup(buf); - } - - 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); - } else if (!strcmp(part, PART_ELM_SWALLOW_VIDEO)) { - if (info->media_type == MEDIA_CONTENT_TYPE_VIDEO) { - image = util_add_image(obj, IMAGE_THUMBNAIL_PLAY); - if (!image) { - _ERR("failed to create image object"); - return NULL; - } - - evas_object_show(image); - } - } else if (!strcmp(part, PART_ELM_SWALLOW_FAVORITE)) { - if (!info->favorite) - return NULL; - - image = util_add_image(obj, IMAGE_THUMBNAIL_FAVORITE); - 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_GALLERY_ITEM, - .text_get = _grid_text_get, - .content_get = _grid_content_get + struct grid_data *gdata; }; static void _recent_item_selected(struct _priv *priv, app_media *am) @@ -162,97 +78,22 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) viewmgr_push_view(VIEW_VIEWER); } -static void _grid_selected_cb(void *data, Elm_Object_Item *it) -{ - app_media *am; - struct view_update_data vdata; - struct _priv *priv; - - if (!data || !it) { - _ERR("invalid argument"); - return; - } - - priv = data; - - am = elm_object_item_data_get(it); - if (!am) { - _ERR("failed to get app media"); - return; - } - - vdata.list = mediadata_get_medialist(priv->md); - vdata.index = util_get_media_index(vdata.list, am); - - viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); - viewmgr_push_view(VIEW_VIEWER); -} - -static void _grid_key_down_cb(void *data, Elm_Object_Item *it, - Evas_Event_Key_Down *ev) -{ - app_media *am; - struct view_update_data vdata; - struct _priv *priv; - - if (!data || !ev) { - _ERR("invalid argument"); - return; - } - - priv = data; - - if (!strcmp(ev->keyname, KEY_MENU) || - !strcmp(ev->keyname, KEY_MENU_REMOTE)) { - am = elm_object_item_data_get(it); - if (!am) { - _ERR("failed to get app media"); - return; - } - - vdata.list = mediadata_get_medialist(priv->md); - vdata.index = util_get_media_index(vdata.list, am); - - viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); - viewmgr_show_view(VIEW_ACTION_MENU); - } -} - 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; + if (!data) { + _ERR("failed to allocate memory"); + return NULL; + } data->menu_btn = priv->menu_btn; data->view_btn = priv->view_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) { - free(data); - goto err; - } - - gops->gclass = &_gclass; - gops->key_down_cb = _grid_key_down_cb; - gops->selected_cb = _grid_selected_cb; - gops->ops_data = priv; - - data->gops = gops; + data->grid_cb_data = priv->md; return data; - -err: - _ERR("failed to allocate memory"); - return NULL; } static void _update_content_info(struct _priv *priv) @@ -282,14 +123,14 @@ static void _update_content_list(struct _priv *priv) return; } - list = mediadata_get_list(priv->md, E_LIST_DATE); + list = priv->gdata->get_item_list(priv->md); if (!list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; } - if (!listmgr_update_content_list(priv->listmgr, list)) + if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) _ERR("failed to update list area"); priv->media_list = list; @@ -324,9 +165,6 @@ static bool _create(layoutmgr *lmgr, void *data) return false; } - priv->menu_btn = ld->top; - priv->view_btn = ld->bottom; - base = layoutmgr_get_base(lmgr); if (!base) { _ERR("failed to get base object"); @@ -344,37 +182,41 @@ static bool _create(layoutmgr *lmgr, void *data) goto err2; } + md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_DATE); + if (!md) { + _ERR("failed to create mediadata"); + goto err2; + } + + priv->base = base; + priv->layout = layout; + priv->menu_btn = ld->top; + priv->view_btn = ld->bottom; + priv->lmgr = lmgr; + priv->md = md; + priv->gdata = get_gallery_grid_data(E_GALLERY_EVENT); + ldata = _create_listmgr_data(priv); if (!ldata) { _ERR("failed to create listmgr data"); - goto err2; + goto err3; } listmgr = listmgr_create(layout, (void *)ldata); if (!listmgr) { _ERR("failed to create listmgr"); + free(ldata); goto err3; } - md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_DATE); - 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; + priv->listmgr = listmgr; layoutmgr_set_layout_data(lmgr, LAYOUT_GALLERY, priv); if (!listmgr_draw_list_area(listmgr)) { _ERR("failed to draw list area"); - mediadata_destroy(md); + free(ldata); listmgr_destroy(listmgr); goto err3; } @@ -382,7 +224,7 @@ static bool _create(layoutmgr *lmgr, void *data) return true; err3: - free(ldata); + mediadata_destroy(md); err2: evas_object_del(layout); err: @@ -405,7 +247,6 @@ static void _destroy(void *layout_data) mediadata_destroy(priv->md); listmgr_destroy(priv->listmgr); - free(priv->ldata->gops); free(priv->ldata); evas_object_del(priv->layout); diff --git a/src/layout/movie.c b/src/layout/movie.c index 41d3bdf..0b7f98b 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -28,6 +28,7 @@ #include "layout.h" #include "view.h" #include "data/mediadata.h" +#include "grid/grid.h" #include "util/listmgr.h" #include "util/progressbar.h" #include "util/util.h" @@ -63,90 +64,8 @@ struct _priv { Eina_List *media_list; app_media *recent_info; -}; - -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; - - if (!strcmp(part, PART_ELM_TEXT_TITLE)) { - info = app_media_get_info(am); - if (!info) { - _ERR("failed to get media info"); - return NULL; - } - - return strdup(info->title); - } - - return NULL; -} - -static Evas_Object *_grid_content_get(void *data, - Evas_Object *obj, const char *part) -{ - Evas_Object *image; - Evas_Object *text_bg; - app_media *am; - app_media_info *info; - struct color_data bg; - - 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_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; - } else if (!strcmp(part, PART_ELM_SWALLOW_FAVORITE)) { - if (!info->favorite) - return NULL; - - image = util_add_image(obj, IMAGE_THUMBNAIL_FAVORITE); - if (!image) { - _ERR("failed to create image object"); - return NULL; - } - - evas_object_show(image); - return image; - } else if (!strcmp(part, PART_ELM_SWALLOW_TEXTBG)) { - text_bg = evas_object_rectangle_add(obj); - if (!text_bg) { - _ERR("failed to create rectangle object"); - return NULL; - } - - app_contents_get_color(info->title, NULL, &bg); - evas_object_color_set(text_bg, bg.r, bg.g, bg.b, bg.a); - return text_bg; - } - - return NULL; -} - -static struct grid_class _gclass = { - .item_style = STYLE_GRID_MOVIE_ITEM, - .text_get = _grid_text_get, - .content_get = _grid_content_get + struct grid_data *gdata; }; static bool _update_recent_info(Evas_Object *base, app_media_info *info) @@ -335,85 +254,27 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) viewmgr_push_view(VIEW_VIEWER); } -static void _item_selected(struct _priv *priv, app_media *am) -{ - struct view_update_data vdata; - - vdata.list = mediadata_get_medialist(priv->md); - vdata.index = util_get_media_index(vdata.list, am); - - viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); - viewmgr_push_view(VIEW_VIEWER); -} - static void _recent_selected_cb(void *data, Evas_Object *obj) { struct _priv *priv; - - if (!data || !obj) - return; - - priv = data; - - _item_selected(priv, priv->recent_info); -} - -static void _grid_selected_cb(void *data, Elm_Object_Item *it) -{ - app_media *am; - struct _priv *priv; - - if (!data || !it) { - _ERR("invalid argument"); - return; - } - - priv = data; - - am = elm_object_item_data_get(it); - if (!am) { - _ERR("failed to get app media"); - return; - } - - _item_selected(priv, am); -} - -static void _grid_key_down_cb(void *data, Elm_Object_Item *it, - Evas_Event_Key_Down *ev) -{ - app_media *am; struct view_update_data vdata; - struct _priv *priv; - if (!data || !ev) { - _ERR("invalid argument"); + if (!data || !obj) return; - } priv = data; - if (!strcmp(ev->keyname, KEY_MENU) || - !strcmp(ev->keyname, KEY_MENU_REMOTE)) { - am = elm_object_item_data_get(it); - if (!am) { - _ERR("failed to get app media"); - return; - } - - vdata.list = mediadata_get_medialist(priv->md); - vdata.index = util_get_media_index(vdata.list, am); + vdata.list = mediadata_get_medialist(priv->md); + vdata.index = util_get_media_index(vdata.list, priv->recent_info); - viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); - viewmgr_show_view(VIEW_ACTION_MENU); - } + viewmgr_update_view(VIEW_VIEWER, UPDATE_CONTENT, &vdata); + viewmgr_push_view(VIEW_VIEWER); } static struct listmgr_data *_create_listmgr_data(struct _priv *priv) { struct listmgr_data *data; - struct play_info_ops *pops; - struct grid_ops *gops; + struct play_info_data *pdata; data = calloc(1, sizeof(*data)); if (!data) @@ -422,36 +283,20 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) data->menu_btn = priv->menu_btn; data->view_btn = priv->view_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; - - pops = calloc(1, sizeof(*pops)); - if (!pops) + pdata = calloc(1, sizeof(*pdata)); + if (!pdata) goto err2; - pops->draw = _draw_recent; - pops->update = _update_recent; - pops->selected_cb = _recent_selected_cb; - pops->ops_data = priv; + pdata->draw = _draw_recent; + pdata->update = _update_recent; + pdata->selected_cb = _recent_selected_cb; + pdata->cb_data = priv; - gops = calloc(1, sizeof(*gops)); - if (!gops) - goto err3; - - gops->gclass = &_gclass; - gops->key_down_cb = _grid_key_down_cb; - gops->selected_cb = _grid_selected_cb; - gops->ops_data = priv; - - data->pops = pops; - data->gops = gops; + data->pdata = pdata; + data->grid_cb_data = priv->md; return data; -err3: - free(pops); err2: free(data); err: @@ -491,7 +336,7 @@ static void _update_content_list(struct _priv *priv) return; } - if (!listmgr_update_content_list(priv->listmgr, list)) { + if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) { _ERR("failed to update list area"); return; } @@ -582,9 +427,6 @@ static bool _create(layoutmgr *lmgr, void *data) return false; } - priv->menu_btn = ld->top; - priv->view_btn = ld->bottom; - base = layoutmgr_get_base(lmgr); if (!base) { _ERR("failed to get base object"); @@ -602,37 +444,42 @@ static bool _create(layoutmgr *lmgr, void *data) goto err2; } + md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_NAME); + if (!md) { + _ERR("failed to create mediadata"); + goto err2; + } + + priv->base = base; + priv->layout = layout; + priv->menu_btn = ld->top; + priv->view_btn = ld->bottom; + priv->lmgr = lmgr; + priv->md = md; + priv->gdata = get_movie_grid_data(E_MOVIE_NAME); + ldata = _create_listmgr_data(priv); if (!ldata) { _ERR("failed to create listmgr data"); - goto err2; + goto err3; } listmgr = listmgr_create(layout, (void *)ldata); if (!listmgr) { _ERR("failed to create listmgr"); + free(ldata->pdata); + free(ldata); 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; + priv->listmgr = listmgr; layoutmgr_set_layout_data(lmgr, LAYOUT_MOVIE, priv); if (!listmgr_draw_list_area(priv->listmgr)) { _ERR("failed to draw list area"); - mediadata_destroy(md); + free(ldata); listmgr_destroy(listmgr); goto err3; } @@ -640,7 +487,7 @@ static bool _create(layoutmgr *lmgr, void *data) return true; err3: - free(ldata); + mediadata_destroy(md); err2: evas_object_del(layout); err: @@ -665,8 +512,7 @@ static void _destroy(void *layout_data) mediadata_destroy(priv->md); listmgr_destroy(priv->listmgr); - free(priv->ldata->pops); - free(priv->ldata->gops); + free(priv->ldata->pdata); free(priv->ldata); evas_object_del(priv->layout); diff --git a/src/layout/music.c b/src/layout/music.c index 48161ae..5ff746e 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -28,6 +28,7 @@ #include "layout.h" #include "view.h" #include "data/mediadata.h" +#include "grid/grid.h" #include "util/listmgr.h" #include "util/util.h" @@ -59,79 +60,8 @@ struct _priv { Eina_List *media_list; app_media *playing_info; -}; - -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); - } else if (!strcmp(part, PART_ELM_SWALLOW_FAVORITE)) { - if (!info->favorite) - return NULL; - - image = util_add_image(obj, IMAGE_THUMBNAIL_FAVORITE); - 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 + struct grid_data *gdata; }; static bool _update_playing_info(void *data, Evas_Object *base) @@ -268,85 +198,27 @@ static void _recent_item_selected(struct _priv *priv, app_media *am) viewmgr_push_view(VIEW_MPLAYER); } -static void _item_selected(struct _priv *priv, app_media *am) -{ - struct view_update_data vdata; - - vdata.list = mediadata_get_medialist(priv->md); - vdata.index = util_get_media_index(vdata.list, am); - - viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata); - viewmgr_push_view(VIEW_MPLAYER); -} - static void _playing_selected_cb(void *data, Evas_Object *obj) { - struct _priv *priv; - - if (!data || !obj) - return; - - priv = data; - - _item_selected(priv, priv->playing_info); -} - -static void _grid_selected_cb(void *data, Elm_Object_Item *it) -{ - app_media *am; - struct _priv *priv; - - if (!data || !it) { - _ERR("invalid argument"); - return; - } - - priv = data; - - am = elm_object_item_data_get(it); - if (!am) { - _ERR("failed to get app media"); - return; - } - - _item_selected(priv, am); -} - -static void _grid_key_down_cb(void *data, Elm_Object_Item *it, - Evas_Event_Key_Down *ev) -{ - app_media *am; struct view_update_data vdata; struct _priv *priv; - if (!data || !ev) { - _ERR("invalid argument"); + if (!data || !obj) return; - } priv = data; - if (!strcmp(ev->keyname, KEY_MENU) || - !strcmp(ev->keyname, KEY_MENU_REMOTE)) { - am = elm_object_item_data_get(it); - if (!am) { - _ERR("failed to get app media"); - return; - } - - vdata.list = mediadata_get_medialist(priv->md); - vdata.index = util_get_media_index(vdata.list, am); + vdata.list = mediadata_get_medialist(priv->md); + vdata.index = util_get_media_index(vdata.list, priv->playing_info); - viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); - viewmgr_show_view(VIEW_ACTION_MENU); - } + viewmgr_update_view(VIEW_MPLAYER, UPDATE_CONTENT, &vdata); + viewmgr_push_view(VIEW_MPLAYER); } static struct listmgr_data *_create_listmgr_data(struct _priv *priv) { struct listmgr_data *data; - struct play_info_ops *pops; - struct grid_ops *gops; + struct play_info_data *pdata; data = calloc(1, sizeof(*data)); if (!data) @@ -355,36 +227,20 @@ static struct listmgr_data *_create_listmgr_data(struct _priv *priv) data->menu_btn = priv->menu_btn; data->view_btn = priv->view_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; - - pops = calloc(1, sizeof(*pops)); - if (!pops) + pdata = calloc(1, sizeof(*pdata)); + if (!pdata) goto err2; - pops->draw = _draw_playing_info; - pops->update = _update_playing_info; - pops->selected_cb = _playing_selected_cb; - pops->ops_data = priv; - - gops = calloc(1, sizeof(*gops)); - if (!gops) - goto err3; + pdata->draw = _draw_playing_info; + pdata->update = _update_playing_info; + pdata->selected_cb = _playing_selected_cb; + pdata->cb_data = priv; - gops->gclass = &_gclass; - gops->key_down_cb = _grid_key_down_cb; - gops->selected_cb = _grid_selected_cb; - gops->ops_data = priv; - - data->pops = pops; - data->gops = gops; + data->pdata = pdata; + data->grid_cb_data = priv->md; return data; -err3: - free(pops); err2: free(data); err: @@ -417,14 +273,14 @@ static void _update_content_list(struct _priv *priv) return; } - list = mediadata_get_list(priv->md, E_LIST_NAME); + list = priv->gdata->get_item_list(priv->md); if (!list) { elm_object_part_text_set(priv->layout, PART_NOCONTENT, TEXT_NOCONTENT); return; } - if (!listmgr_update_content_list(priv->listmgr, list)) + if (!listmgr_update_content_list(priv->listmgr, list, priv->gdata)) _ERR("failed to update list area"); priv->media_list = list; @@ -512,9 +368,6 @@ static bool _create(layoutmgr *lmgr, void *data) return false; } - priv->menu_btn = ld->top; - priv->view_btn = ld->bottom; - base = layoutmgr_get_base(lmgr); if (!base) { _ERR("failed to get base object"); @@ -532,37 +385,41 @@ static bool _create(layoutmgr *lmgr, void *data) goto err2; } + md = mediadata_create(LIST_MEDIA_COND, E_SOURCE_ALL, E_SORT_NAME); + if (!md) { + _ERR("failed to create mediadata"); + goto err2; + } + + priv->base = base; + priv->layout = layout; + priv->menu_btn = ld->top; + priv->view_btn = ld->bottom; + priv->lmgr = lmgr; + priv->md = md; + priv->gdata = get_music_grid_data(E_MUSIC_SONG); + ldata = _create_listmgr_data(priv); if (!ldata) { _ERR("failed to create listmgr data"); - goto err2; + goto err3; } listmgr = listmgr_create(layout, (void *)ldata); if (!listmgr) { _ERR("failed to create listmgr"); + free(ldata); 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; + priv->listmgr = listmgr; layoutmgr_set_layout_data(lmgr, LAYOUT_MUSIC, priv); if (!listmgr_draw_list_area(listmgr)) { _ERR("failed to draw list area"); - mediadata_destroy(md); + free(ldata); listmgr_destroy(listmgr); goto err3; } @@ -570,7 +427,7 @@ static bool _create(layoutmgr *lmgr, void *data) return true; err3: - free(ldata); + mediadata_destroy(md); err2: evas_object_del(layout); err: @@ -593,7 +450,6 @@ static void _destroy(void *layout_data) mediadata_destroy(priv->md); listmgr_destroy(priv->listmgr); - free(priv->ldata->gops); free(priv->ldata); evas_object_del(priv->layout); diff --git a/src/util/listmgr.c b/src/util/listmgr.c index cb76302..876f137 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -23,6 +23,7 @@ #include "define.h" #include "data/mediadata.h" +#include "grid/grid.h" #include "util/listmgr.h" #include "util/util.h" @@ -111,7 +112,7 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { struct listmgr *lmgr; - struct grid_ops *gops; + struct grid_data *gdata; if (!data || !obj || !ev) return; @@ -125,9 +126,9 @@ static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, !strcmp(ev->keyname, KEY_BACK_REMOTE)) elm_object_focus_next(obj, ELM_FOCUS_UP); else { - gops = lmgr->data->gops; - if (gops->key_down_cb) - gops->key_down_cb(gops->ops_data, + gdata = lmgr->data->gdata; + if (gdata->key_down_cb) + gdata->key_down_cb(lmgr->data->grid_cb_data, lmgr->focused_it, ev); } @@ -235,7 +236,7 @@ static void _focused_cb(int id, void *data, Evas_Object *obj, static void _grid_selected(void *data) { struct listmgr *lmgr; - struct grid_ops *gops; + struct grid_data *gdata; if (!data) { _ERR("invalid argument"); @@ -243,11 +244,10 @@ static void _grid_selected(void *data) } lmgr = data; + gdata = lmgr->data->gdata; - gops = lmgr->data->gops; - - if (gops->selected_cb) - gops->selected_cb(gops->ops_data, lmgr->selected_it); + if (gdata->selected_cb) + gdata->selected_cb(lmgr->data->grid_cb_data, lmgr->selected_it); } static void _grid_selected_cb(int id, void *data, Evas_Object *obj, @@ -269,16 +269,16 @@ static void _play_info_selected_cb(void *data, Evas_Object *obj, const char *emission, const char *source) { struct listmgr *lmgr; - struct play_info_ops *pops; + struct play_info_data *pdata; if (!data || !obj) return; lmgr = data; - pops = lmgr->data->pops; + pdata = lmgr->data->pdata; - if (pops->selected_cb) - pops->selected_cb(pops->ops_data, obj); + if (pdata->selected_cb) + pdata->selected_cb(pdata->cb_data, obj); } static input_handler _grid_handler = { @@ -330,7 +330,7 @@ static int _get_grid_width(int count, int num_item, int item_x) static bool _draw_play_info(struct listmgr *lmgr) { Evas_Object *ly, *index, *content; - struct play_info_ops *pops; + struct play_info_data *pdata; ly = elm_layout_add(lmgr->box); if (!ly) { @@ -340,9 +340,9 @@ static bool _draw_play_info(struct listmgr *lmgr) elm_layout_file_set(ly, EDJEFILE, GRP_LIST_ITEM); - pops = lmgr->data->pops; + pdata = lmgr->data->pdata; - if (!pops->draw(pops->ops_data, ly)) { + if (!pdata->draw(pdata->cb_data, ly)) { _ERR("failed to draw play info item"); evas_object_del(ly); return false; @@ -397,31 +397,32 @@ static Evas_Object *_add_list_item_grid(struct listmgr *lmgr, Evas_Object *base, struct group_info *gi) { Evas_Object *grid; - struct listmgr_data *data; + struct grid_data *gdata; int width; - data = lmgr->data; + gdata = lmgr->data->gdata; - grid = util_add_gengrid(base, data->grid_item_x, - data->grid_item_y, EINA_TRUE); + grid = util_add_gengrid(base, gdata->item_x, + gdata->item_y, EINA_TRUE); if (!grid) { _ERR("failed to add gengrid object"); return NULL; } - if (!gridmgr_add_grid(lmgr->gmgr, gi->name, grid, data->gops->gclass)) { + if (!gridmgr_add_grid(lmgr->gmgr, gi->name, grid, gdata->gclass)) { _ERR("failed to add grid"); evas_object_del(grid); return NULL; } - width = _get_grid_width(eina_list_count(gi->list), data->grid_num_item, - data->grid_item_x); + width = _get_grid_width(eina_list_count(gi->list), gdata->item_num, + gdata->item_x); evas_object_size_hint_min_set(grid, width, - data->grid_num_item * data->grid_item_y); + gdata->item_num * gdata->item_y); - elm_object_focus_next_object_set(grid, data->view_btn, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(grid, lmgr->data->view_btn, + ELM_FOCUS_DOWN); inputmgr_add_callback(grid, LISTMGR_GRID, &_grid_handler, lmgr); @@ -629,17 +630,25 @@ bool listmgr_update_content_item(struct listmgr *lmgr) return true; } -bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list) +bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list, + struct grid_data *gdata) { Evas_Object *ly, *btn, *grid; Eina_List *l; struct group_info *gi; - if (!lmgr) { + if (!lmgr || !gdata) { _ERR("invalid argument"); return false; } + lmgr->data->gdata = gdata; + + elm_scroller_step_size_set(lmgr->scr, SCROLLER_STEP_SIZE( + gdata->grid_padding + gdata->item_x), 0); + + elm_box_padding_set(lmgr->box, gdata->grid_padding, 0); + ly = NULL; EINA_LIST_FOREACH(list, l, gi) { ly = _draw_list_item(lmgr, gi); @@ -674,7 +683,7 @@ bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list) bool listmgr_update_play_info(struct listmgr *lmgr, app_media_info *info) { - struct play_info_ops *pops; + struct play_info_data *pdata; if (!lmgr) { _ERR("invalid argument"); @@ -693,9 +702,9 @@ bool listmgr_update_play_info(struct listmgr *lmgr, app_media_info *info) return true; } - pops = lmgr->data->pops; + pdata = lmgr->data->pdata; - if (!pops->update(pops->ops_data, lmgr->play_info)) { + if (!pdata->update(pdata->cb_data, lmgr->play_info)) { _ERR("failed to update play info"); return false; } @@ -730,9 +739,6 @@ bool listmgr_draw_list_area(struct listmgr *lmgr) return false; } - elm_scroller_step_size_set(scr, SCROLLER_STEP_SIZE( - data->box_padding + data->grid_item_x), 0); - inputmgr_add_callback(scr, LISTMGR_SCROLLER, &_handler, lmgr); box = util_add_box(scr, EINA_TRUE); @@ -742,8 +748,6 @@ bool listmgr_draw_list_area(struct listmgr *lmgr) return false; } - elm_box_padding_set(box, data->box_padding, 0); - evas_object_show(box); elm_object_content_set(scr, box); @@ -752,7 +756,7 @@ bool listmgr_draw_list_area(struct listmgr *lmgr) lmgr->scr = scr; lmgr->box = box; - if (data->pops) { + if (data->pdata) { if (!_draw_play_info(lmgr)) { _ERR("failed to draw play info"); evas_object_del(scr); |