diff options
author | Jehun Lim <jehun.lim@samsung.com> | 2015-09-07 22:01:39 +0900 |
---|---|---|
committer | Jehun Lim <jehun.lim@samsung.com> | 2015-09-08 10:22:29 +0900 |
commit | da0dfa9a26bed76044ca404f9f2af504a9aa9112 (patch) | |
tree | bb41fd01eda782b9207e1fb5f8c62be074a59867 | |
parent | 101379e8e52b6f6894362aa96444575847ee0011 (diff) | |
download | air_mediahub-da0dfa9a26bed76044ca404f9f2af504a9aa9112.tar.gz air_mediahub-da0dfa9a26bed76044ca404f9f2af504a9aa9112.tar.bz2 air_mediahub-da0dfa9a26bed76044ca404f9f2af504a9aa9112.zip |
base: add view mode selected callback
Change-Id: I4b23e921d244feaebddaed7ab9577cb92dad0caa
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r-- | include/util/listmgr.h | 2 | ||||
-rw-r--r-- | include/view.h | 1 | ||||
-rw-r--r-- | src/grid/grid_gallery.c | 2 | ||||
-rw-r--r-- | src/grid/grid_movie.c | 3 | ||||
-rw-r--r-- | src/grid/grid_music.c | 2 | ||||
-rw-r--r-- | src/layout/gallery.c | 38 | ||||
-rw-r--r-- | src/layout/movie.c | 38 | ||||
-rw-r--r-- | src/layout/music.c | 38 | ||||
-rw-r--r-- | src/util/listmgr.c | 32 | ||||
-rw-r--r-- | src/view/base.c | 32 |
10 files changed, 171 insertions, 17 deletions
diff --git a/include/util/listmgr.h b/include/util/listmgr.h index f3bd96e..2540200 100644 --- a/include/util/listmgr.h +++ b/include/util/listmgr.h @@ -46,6 +46,8 @@ 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); +void listmgr_clear_content_list(struct listmgr *lmgr); + bool listmgr_focus_content_list(struct listmgr *lmgr, const char *id); bool listmgr_focus_play_info(struct listmgr *lmgr); diff --git a/include/view.h b/include/view.h index 19dca1e..d2af657 100644 --- a/include/view.h +++ b/include/view.h @@ -49,6 +49,7 @@ enum update_type { UPDATE_FAVORITE, UPDATE_RECENT, UPDATE_FOCUS_STATE, + UPDATE_VIEW_MODE, UPDATE_TOAST_SHOW, UPDATE_TOAST_HIDE, }; diff --git a/src/grid/grid_gallery.c b/src/grid/grid_gallery.c index e443ea1..2697d1c 100644 --- a/src/grid/grid_gallery.c +++ b/src/grid/grid_gallery.c @@ -206,5 +206,5 @@ struct grid_data *get_gallery_grid_data(int type) return NULL; } - return &_gdata[type]; + return &_gdata[E_GALLERY_EVENT]; } diff --git a/src/grid/grid_movie.c b/src/grid/grid_movie.c index 49caf86..f661518 100644 --- a/src/grid/grid_movie.c +++ b/src/grid/grid_movie.c @@ -196,5 +196,6 @@ struct grid_data *get_movie_grid_data(int type) return NULL; } - return &_gdata[type]; + /* It will be fixed later */ + return &_gdata[E_MOVIE_NAME]; } diff --git a/src/grid/grid_music.c b/src/grid/grid_music.c index 99a4baa..c786969 100644 --- a/src/grid/grid_music.c +++ b/src/grid/grid_music.c @@ -193,5 +193,5 @@ struct grid_data *get_music_grid_data(int type) return NULL; } - return &_gdata[type]; + return &_gdata[E_MUSIC_SONG]; } diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 908487b..829b8de 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -57,7 +57,7 @@ struct _priv { Eina_List *media_list; - struct grid_data *gdata; + int view_mode; }; static void _recent_item_selected(struct _priv *priv, app_media *am) @@ -114,23 +114,36 @@ static void _update_content_info(struct _priv *priv) elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf); } +static void _clear_content_list(struct _priv *priv) +{ + if (priv->media_list) { + mediadata_free_list(priv->media_list); + priv->media_list = NULL; + } + + listmgr_clear_content_list(priv->listmgr); +} + static void _update_content_list(struct _priv *priv) { Eina_List *list; + struct grid_data *gdata; if (priv->media_list) { _update_content_info(priv); return; } - list = priv->gdata->get_item_list(priv->md); + gdata = get_gallery_grid_data(priv->view_mode); + + list = 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, priv->gdata)) + if (!listmgr_update_content_list(priv->listmgr, list, gdata)) _ERR("failed to update list area"); priv->media_list = list; @@ -194,7 +207,6 @@ static bool _create(layoutmgr *lmgr, void *data) 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) { @@ -289,6 +301,7 @@ static void _update(void *layout_data, int update_type, void *data) { struct view_update_data *vdata; struct _priv *priv; + int mode; if (!layout_data) { _ERR("failed to get layout data"); @@ -326,6 +339,23 @@ static void _update(void *layout_data, int update_type, void *data) case UPDATE_FOCUS_STATE: listmgr_set_focus_state(priv->listmgr, EINA_FALSE); break; + case UPDATE_VIEW_MODE: + if (!data) { + _ERR("invalid argument"); + return; + } + + vdata = data; + mode = vdata->index; + + if (mode == priv->view_mode) + return; + + priv->view_mode = mode; + + _clear_content_list(priv); + _update_content_list(priv); + break; default: break; } diff --git a/src/layout/movie.c b/src/layout/movie.c index 0b7f98b..2252f1d 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -65,7 +65,7 @@ struct _priv { app_media *recent_info; - struct grid_data *gdata; + int view_mode; }; static bool _update_recent_info(Evas_Object *base, app_media_info *info) @@ -320,23 +320,36 @@ static void _update_content_info(struct _priv *priv) elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf); } +static void _clear_content_list(struct _priv *priv) +{ + if (priv->media_list) { + mediadata_free_list(priv->media_list); + priv->media_list = NULL; + } + + listmgr_clear_content_list(priv->listmgr); +} + static void _update_content_list(struct _priv *priv) { Eina_List *list; + struct grid_data *gdata; if (priv->media_list) { _update_content_info(priv); return; } - list = mediadata_get_list(priv->md, E_LIST_NAME); + gdata = get_movie_grid_data(priv->view_mode); + + list = 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, priv->gdata)) { + if (!listmgr_update_content_list(priv->listmgr, list, gdata)) { _ERR("failed to update list area"); return; } @@ -456,7 +469,6 @@ static bool _create(layoutmgr *lmgr, void *data) 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) { @@ -555,6 +567,7 @@ static void _update(void *layout_data, int update_type, void *data) { struct view_update_data *vdata; struct _priv *priv; + int mode; if (!layout_data) { _ERR("failed to get layout data"); @@ -595,6 +608,23 @@ static void _update(void *layout_data, int update_type, void *data) case UPDATE_FOCUS_STATE: listmgr_set_focus_state(priv->listmgr, EINA_FALSE); break; + case UPDATE_VIEW_MODE: + if (!data) { + _ERR("invalid argument"); + return; + } + + vdata = data; + mode = vdata->index; + + if (mode == priv->view_mode) + return; + + priv->view_mode = mode; + + _clear_content_list(priv); + _update_content_list(priv); + break; default: break; } diff --git a/src/layout/music.c b/src/layout/music.c index 5ff746e..66a922e 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -61,7 +61,7 @@ struct _priv { app_media *playing_info; - struct grid_data *gdata; + int view_mode; }; static bool _update_playing_info(void *data, Evas_Object *base) @@ -264,23 +264,36 @@ static void _update_content_info(struct _priv *priv) elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf); } +static void _clear_content_list(struct _priv *priv) +{ + if (priv->media_list) { + mediadata_free_list(priv->media_list); + priv->media_list = NULL; + } + + listmgr_clear_content_list(priv->listmgr); +} + static void _update_content_list(struct _priv *priv) { Eina_List *list; + struct grid_data *gdata; if (priv->media_list) { _update_content_info(priv); return; } - list = priv->gdata->get_item_list(priv->md); + gdata = get_music_grid_data(priv->view_mode); + + list = 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, priv->gdata)) + if (!listmgr_update_content_list(priv->listmgr, list, gdata)) _ERR("failed to update list area"); priv->media_list = list; @@ -397,7 +410,6 @@ static bool _create(layoutmgr *lmgr, void *data) 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) { @@ -492,6 +504,7 @@ static void _update(void *layout_data, int update_type, void *data) { struct view_update_data *vdata; struct _priv *priv; + int mode; if (!layout_data) { _ERR("failed to get layout data"); @@ -534,6 +547,23 @@ static void _update(void *layout_data, int update_type, void *data) case UPDATE_FOCUS_STATE: listmgr_set_focus_state(priv->listmgr, EINA_FALSE); break; + case UPDATE_VIEW_MODE: + if (!data) { + _ERR("invalid argument"); + return; + } + + vdata = data; + mode = vdata->index; + + if (mode == priv->view_mode) + return; + + priv->view_mode = mode; + + _clear_content_list(priv); + _update_content_list(priv); + break; default: break; } diff --git a/src/util/listmgr.c b/src/util/listmgr.c index 8f61d8b..9d2ac9d 100644 --- a/src/util/listmgr.c +++ b/src/util/listmgr.c @@ -27,6 +27,8 @@ #include "util/listmgr.h" #include "util/util.h" +#define STR_GRID_ID "grid_id" + #define MAX_GRID_WIDTH 1858 #define SCROLLER_STEP_SIZE(x) ((x) + 10) @@ -634,6 +636,34 @@ bool listmgr_update_content_item(struct listmgr *lmgr) return true; } +void listmgr_clear_content_list(struct listmgr *lmgr) +{ + Eina_List *list, *l; + Evas_Object *ly, *grid; + char *grid_id; + + list = elm_box_children_get(lmgr->box); + + if (lmgr->show_play_info) + list = eina_list_next(list); + + EINA_LIST_FOREACH(list, l, ly) { + elm_box_unpack(lmgr->box, ly); + + grid = elm_object_part_content_get(ly, PART_CONTENT); + elm_gengrid_clear(grid); + + grid_id = evas_object_data_get(ly, STR_GRID_ID); + gridmgr_remove_grid(lmgr->gmgr, grid_id); + + free(grid_id); + + evas_object_del(ly); + } + + eina_list_free(list); +} + bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list, struct grid_data *gdata) { @@ -670,6 +700,8 @@ bool listmgr_update_content_list(struct listmgr *lmgr, Eina_List *list, elm_box_pack_end(lmgr->box, ly); evas_object_size_hint_align_set(ly, 0.0, 0.0); + + evas_object_data_set(ly, STR_GRID_ID, strdup(gi->name)); } btn = elm_object_part_content_get(ly, PART_ITEM_TITLE); diff --git a/src/view/base.c b/src/view/base.c index 6dbf7b1..0a0ecf7 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -74,7 +74,7 @@ struct _priv { app_media *recent_item; int current_layout; - int view_mode; + int view_mode[E_LAYOUT_MAX]; }; const char *view_mode_movie[] = { @@ -134,12 +134,15 @@ static struct _menu_item g_menu_item[E_LAYOUT_MAX] = { static void _set_current_layout(struct _priv *priv, int layout) { + int mode; + layoutmgr_hide_layout(priv->lmgr, g_menu_item[priv->current_layout].layout_id); layoutmgr_show_layout(priv->lmgr, g_menu_item[layout].layout_id); + mode = priv->view_mode[layout]; elm_object_text_set(priv->view_btn, - g_menu_item[layout].text_view_mode[priv->view_mode]); + g_menu_item[layout].text_view_mode[mode]); if (priv->focused_btn) elm_object_signal_emit(priv->focused_btn, @@ -173,6 +176,29 @@ static void _update_layout(struct _priv *priv, Evas_Object *obj) UPDATE_CONTENT, NULL); } +static void _view_selected_cb(void *data, int mode) +{ + struct view_update_data vdata; + struct _priv *priv; + int cur; + + if (!data) + return; + + priv = data; + cur = priv->current_layout; + + elm_object_text_set(priv->view_btn, + g_menu_item[cur].text_view_mode[mode]); + + vdata.index = mode; + layoutmgr_update_layout(priv->lmgr, + g_menu_item[cur].layout_id, + UPDATE_VIEW_MODE, &vdata); + + priv->view_mode[cur] = mode; +} + static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { @@ -239,6 +265,8 @@ static void _view_btn_clicked(struct _priv *priv) return; } + ctxpopup_set_callback(cpopup, _view_selected_cb, priv); + evas_object_geometry_get(priv->view_btn, &x, &y, &w, &h); ctxpopup_show(cpopup, x + (w / 2), y); |