summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJehun Lim <jehun.lim@samsung.com>2015-09-07 22:01:39 +0900
committerJehun Lim <jehun.lim@samsung.com>2015-09-08 10:22:29 +0900
commitda0dfa9a26bed76044ca404f9f2af504a9aa9112 (patch)
treebb41fd01eda782b9207e1fb5f8c62be074a59867
parent101379e8e52b6f6894362aa96444575847ee0011 (diff)
downloadair_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.h2
-rw-r--r--include/view.h1
-rw-r--r--src/grid/grid_gallery.c2
-rw-r--r--src/grid/grid_movie.c3
-rw-r--r--src/grid/grid_music.c2
-rw-r--r--src/layout/gallery.c38
-rw-r--r--src/layout/movie.c38
-rw-r--r--src/layout/music.c38
-rw-r--r--src/util/listmgr.c32
-rw-r--r--src/view/base.c32
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);