diff options
author | Jehun Lim <jehun.lim@samsung.com> | 2015-09-02 15:24:54 +0900 |
---|---|---|
committer | Jehun Lim <jehun.lim@samsung.com> | 2015-09-02 15:24:54 +0900 |
commit | 91ab3c2eb1f1b3b8521474e1a1e26bb7f1e7e095 (patch) | |
tree | ee13545e761bc9f1b58b26063aeef5c21ca39b0c | |
parent | 44fbed6475c2576f0ee745521c249a22987fad7f (diff) | |
download | air_mediahub-91ab3c2eb1f1b3b8521474e1a1e26bb7f1e7e095.tar.gz air_mediahub-91ab3c2eb1f1b3b8521474e1a1e26bb7f1e7e095.tar.bz2 air_mediahub-91ab3c2eb1f1b3b8521474e1a1e26bb7f1e7e095.zip |
base: add button and ctxpopup to select view mode
Change-Id: I8e45929ebcc5b67076f375459054e26a5c999bf4
Signed-off-by: Jehun Lim <jehun.lim@samsung.com>
-rw-r--r-- | include/layout/movie.h | 1 | ||||
-rw-r--r-- | include/view/base.h | 2 | ||||
-rw-r--r-- | res/edc/layout/movie.edc | 41 | ||||
-rw-r--r-- | res/edc/view/base.edc | 85 | ||||
-rw-r--r-- | res/edc/widgets/ctxpopup.edc | 2 | ||||
-rw-r--r-- | src/layout/gallery.c | 6 | ||||
-rw-r--r-- | src/layout/movie.c | 6 | ||||
-rw-r--r-- | src/layout/music.c | 6 | ||||
-rw-r--r-- | src/view/base.c | 211 |
9 files changed, 273 insertions, 87 deletions
diff --git a/include/layout/movie.h b/include/layout/movie.h index f6f6145..2de9449 100644 --- a/include/layout/movie.h +++ b/include/layout/movie.h @@ -27,7 +27,6 @@ /* part */ #define PART_CONTENT "part.content" #define PART_NOCONTENT "part.nocontent" -#define PART_CONTENT_INFO "part.content_info" #define PART_RECENT_CONTENT_TEXTBG "part.recent_content_textbg" #define PART_RECENT_CONTENT_THUMBNAIL "part.recent_content_thumbnail" #define PART_RECENT_CONTENT_FAVORITE "part.recent_content_favorite" diff --git a/include/view/base.h b/include/view/base.h index c5f365d..95dda2e 100644 --- a/include/view/base.h +++ b/include/view/base.h @@ -28,6 +28,8 @@ #define PART_TITLE "part.title" #define PART_MENU_AREA "part.menu_area" #define PART_THUMBNAIL_AREA "part.thumbnail_area" +#define PART_VIEW_MODE "part.view_mode" +#define PART_CONTENT_INFO "part.content_info" #define PART_ITEM_TITLE "part.item_title" #define PART_ITEM_CONTENT "part.item_content" diff --git a/res/edc/layout/movie.edc b/res/edc/layout/movie.edc index 479d8ad..3b8c598 100644 --- a/res/edc/layout/movie.edc +++ b/res/edc/layout/movie.edc @@ -52,10 +52,6 @@ group { to: "padding_thumbnail_area"; relative: 1.0 0.0; } - rel2 { - to: "padding_content_info"; - relative: 1.0 0.0; - } } } part { @@ -74,42 +70,5 @@ group { color: COLOR_TEXT_NORMAL; } } - part { - name: "padding_content_info"; - type: SPACER; - scale: 1; - description { - state: "default" 0.0; - rel1.to: PART_CONTENT_INFO; - rel2 { - to: PART_CONTENT_INFO; - relative: 1.0 0.0; - } - min: 0 16; - align: 0.5 1.0; - fixed: 0 1; - } - } - part { - name: PART_CONTENT_INFO; - type: TEXT; - scale: 1; - description { - state: "default" 0.0; - rel1 { - to: "padding_thumbnail_area"; - relative: 1.0 1.0; - } - text { - font: FONT_LIGHT; - size: 28; - align: 0.0 0.5; - } - min: 0 64; - align: 0.5 1.0; - color: COLOR_TEXT_INDEX; - fixed: 0 1; - } - } } } diff --git a/res/edc/view/base.edc b/res/edc/view/base.edc index b95e599..52bdbcf 100644 --- a/res/edc/view/base.edc +++ b/res/edc/view/base.edc @@ -133,11 +133,94 @@ group { relative: 0.0 1.0; } rel2.to: "padding_thumbnail_area"; - min: 0 784; + min: 0 720; align: 0.5 0.0; fixed: 0 1; } } + part { + name: "bottom_area"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_THUMBNAIL_AREA; + relative: 0.0 1.0; + } + rel2.to: PART_THUMBNAIL_AREA; + min: 0 64; + align: 0.5 0.0; + fixed: 0 1; + } + } + part { + name: "padding_view_mode"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "bottom_area"; + rel2 { + to: "bottom_area"; + relative: 0.0 1.0; + } + min: 62 0; + align: 0.0 0.5; + fixed: 1 0; + } + } + part { + name: PART_VIEW_MODE; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding_view_mode"; + relative: 1.0 0.0; + } + rel2.to: "padding_view_mode"; + min: 218 0; + align: 0.0 0.5; + fixed: 1 0; + } + } + part { + name: "padding_content_info"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_VIEW_MODE; + relative: 1.0 0.0; + } + rel2.to: PART_VIEW_MODE; + min: 26 0; + align: 0.0 0.5; + fixed: 1 0; + } + } + part { + name: PART_CONTENT_INFO; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding_content_info"; + relative: 1.0 0.0; + } + rel2.to: "bottom_area"; + text { + font: FONT_LIGHT; + size: 28; + align: 0.0 0.5; + } + color: COLOR_TEXT_INDEX; + } + } /* CURTAIN */ part { diff --git a/res/edc/widgets/ctxpopup.edc b/res/edc/widgets/ctxpopup.edc index 188d688..616b6d4 100644 --- a/res/edc/widgets/ctxpopup.edc +++ b/res/edc/widgets/ctxpopup.edc @@ -24,7 +24,7 @@ group { scale: 1; description { state: "default" 0.0; - min: 220 226; + min: 220 0; color: COLOR_ITEM_BG; } } diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 22e32e2..3a535e8 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -267,15 +267,17 @@ static void _update_content_info(struct _priv *priv) snprintf(buf, sizeof(buf), "%d Photos, %d Videos", photo, video); - elm_object_part_text_set(priv->layout, PART_CONTENT_INFO, buf); + elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf); } static void _update_content_list(struct _priv *priv) { Eina_List *list; - if (priv->media_list) + if (priv->media_list) { + _update_content_info(priv); return; + } list = mediadata_get_list(priv->md, E_LIST_DATE); if (!list) { diff --git a/src/layout/movie.c b/src/layout/movie.c index 4639e8a..38506ae 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -469,15 +469,17 @@ static void _update_content_info(struct _priv *priv) snprintf(buf, sizeof(buf), "%d Movies", count); - elm_object_part_text_set(priv->layout, PART_CONTENT_INFO, buf); + elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf); } static void _update_content_list(struct _priv *priv) { Eina_List *list; - if (priv->media_list) + if (priv->media_list) { + _update_content_info(priv); return; + } list = mediadata_get_list(priv->md, E_LIST_NAME); if (!list) { diff --git a/src/layout/music.c b/src/layout/music.c index 1ff80c0..1b61627 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -402,15 +402,17 @@ static void _update_content_info(struct _priv *priv) snprintf(buf, sizeof(buf), "%d Songs", count); - elm_object_part_text_set(priv->layout, PART_CONTENT_INFO, buf); + elm_object_part_text_set(priv->base, PART_CONTENT_INFO, buf); } static void _update_content_list(struct _priv *priv) { Eina_List *list; - if (priv->media_list) + if (priv->media_list) { + _update_content_info(priv); return; + } list = mediadata_get_list(priv->md, E_LIST_NAME); if (!list) { diff --git a/src/view/base.c b/src/view/base.c index 4db00f3..7c928a3 100644 --- a/src/view/base.c +++ b/src/view/base.c @@ -28,6 +28,7 @@ #include "define.h" #include "layout.h" #include "view.h" +#include "util/ctxpopup.h" #include "util/util.h" #define TITLE_TEXT "Media Hub" @@ -41,6 +42,13 @@ #define TIME_TOAST_FAVORITE 5.0 +#define ARRAY_SIZE(arr) (sizeof(arr)) / (sizeof((arr)[0])) + +enum _object_type { + BASE_MENU_BTN = 0, + BASE_VIEW_BTN +}; + enum _layout_type { E_LAYOUT_MOVIE = 0, E_LAYOUT_GALLERY, @@ -51,40 +59,76 @@ enum _layout_type { struct _priv { Evas_Object *win; Evas_Object *base; - Evas_Object *btn[E_LAYOUT_MAX]; - Evas_Object *notify; + Evas_Object *menu_btn[E_LAYOUT_MAX]; + Evas_Object *view_btn; Evas_Object *focused_btn; + Evas_Object *notify; + + struct ctxpopup *cpopup; + layoutmgr *lmgr; Eina_List *favorite_list; app_media *recent_item; int current_layout; + int view_mode; +}; + +const char *view_mode_movie[] = { + "Name", + "Genre", + "Date", + "Folder" +}; + +const char *view_mode_gallery[] = { + "Event", + "Place", + "Video", + "Folder" +}; + +const char *view_mode_music[] = { + "Song", + "Album", + "Artist", + "Genre", + "Folder" }; struct _menu_item { const char *name; const char *layout_id; layout_class *(*func_get_lclass)(void); + + const char **text_view_mode; + int text_size; }; static struct _menu_item g_menu_item[E_LAYOUT_MAX] = { [E_LAYOUT_MOVIE] = { "Movie", LAYOUT_MOVIE, - layout_movie_get_lclass + layout_movie_get_lclass, + view_mode_movie, + ARRAY_SIZE(view_mode_movie) }, [E_LAYOUT_GALLERY] = { "Gallery", LAYOUT_GALLERY, - layout_gallery_get_lclass + layout_gallery_get_lclass, + view_mode_gallery, + ARRAY_SIZE(view_mode_gallery) }, [E_LAYOUT_MUSIC] = { "Music", LAYOUT_MUSIC, - layout_music_get_lclass + layout_music_get_lclass, + view_mode_music, + ARRAY_SIZE(view_mode_music) } }; @@ -94,31 +138,74 @@ static void _set_current_layout(struct _priv *priv, int layout) g_menu_item[priv->current_layout].layout_id); layoutmgr_show_layout(priv->lmgr, g_menu_item[layout].layout_id); + elm_object_text_set(priv->view_btn, + g_menu_item[layout].text_view_mode[priv->view_mode]); + if (priv->focused_btn) elm_object_signal_emit(priv->focused_btn, SIG_BTN_UNSELECTED, SIG_SOURCE_SRC); - priv->focused_btn = priv->btn[layout]; + priv->focused_btn = priv->menu_btn[layout]; priv->current_layout = layout; } +static void _update_layout(struct _priv *priv, Evas_Object *obj) +{ + int i; + + for (i = 0; i < E_LAYOUT_MAX; i++) { + if (priv->menu_btn[i] == obj) + break; + } + + if (i == E_LAYOUT_MAX) + return; + + layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id, + UPDATE_FOCUS_STATE, NULL); + + if (priv->focused_btn == obj) + return; + + _set_current_layout(priv, i); + + layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id, + UPDATE_CONTENT, NULL); +} + static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Key_Down *ev) { if (!obj || !ev) return; - if (!strcmp(ev->keyname, KEY_ENTER) || - !strcmp(ev->keyname, KEY_ENTER_REMOTE)) - elm_object_focus_next(obj, ELM_FOCUS_DOWN); - else if (!strcmp(ev->keyname, KEY_BACK) || - !strcmp(ev->keyname, KEY_BACK_REMOTE)) - ui_app_exit(); + switch (id) { + case BASE_MENU_BTN: + if (!strcmp(ev->keyname, KEY_ENTER) || + !strcmp(ev->keyname, KEY_ENTER_REMOTE)) + elm_object_focus_next(obj, ELM_FOCUS_DOWN); + else if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) + ui_app_exit(); + + break; + case BASE_VIEW_BTN: + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) + ui_app_exit(); + + break; + default: + break; + } } static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, Evas_Event_Mouse_Move *ev) { + if (!obj) + return; + if (!elm_object_focus_get(obj)) elm_object_focus_set(obj, EINA_TRUE); } @@ -127,7 +214,6 @@ static void _focused_cb(int id, void *data, Evas_Object *obj, Elm_Object_Item *it) { struct _priv *priv; - int i; if (!data) { _ERR("failed to get data"); @@ -136,29 +222,59 @@ static void _focused_cb(int id, void *data, Evas_Object *obj, priv = data; - for (i = 0; i < E_LAYOUT_MAX; i++) { - if (priv->btn[i] == obj) - break; + switch (id) { + case BASE_MENU_BTN: + _update_layout(priv, obj); + break; + default: + break; } +} - if (i == E_LAYOUT_MAX) +static void _view_btn_clicked(struct _priv *priv) +{ + struct ctxpopup *cpopup; + int x, y, w, h; + + cpopup = ctxpopup_create(priv->base, STYLE_CTXPOPUP_VIEW_MODE, + STYLE_BTN_VIEW_OPTION, + g_menu_item[priv->current_layout].text_view_mode, + g_menu_item[priv->current_layout].text_size); + if (!cpopup) { + _ERR("failed to create ctxpopup"); return; + } - layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id, - UPDATE_FOCUS_STATE, NULL); + evas_object_geometry_get(priv->view_btn, &x, &y, &w, &h); + ctxpopup_show(cpopup, x + (w / 2), y); - if (priv->focused_btn == obj) + priv->cpopup = cpopup; +} + +static void _clicked_cb(int id, void *data, Evas_Object *obj) +{ + struct _priv *priv; + + if (!data) { + _ERR("failed to get data"); return; + } - _set_current_layout(priv, i); + priv = data; - layoutmgr_update_layout(priv->lmgr, g_menu_item[i].layout_id, - UPDATE_CONTENT, NULL); + switch (id) { + case BASE_VIEW_BTN: + _view_btn_clicked(priv); + break; + default: + break; + } } static input_handler handler = { .key_down = _key_down_cb, .mouse_move = _mouse_move_cb, + .clicked = _clicked_cb, .focused = _focused_cb }; @@ -437,32 +553,50 @@ static bool _draw_menu_btn(struct _priv *priv) evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); for (i = 0; i < E_LAYOUT_MAX; i++) { - btn = elm_button_add(box); + btn = util_add_button(box, STYLE_BTN_MENU, g_menu_item[i].name); if (!btn) { - _ERR("failed to create button object"); + _ERR("failed to add button object"); + evas_object_del(box); return false; } - elm_object_style_set(btn, STYLE_BTN_MENU); - elm_object_text_set(btn, g_menu_item[i].name); - elm_box_pack_end(box, btn); evas_object_show(btn); - inputmgr_add_callback(btn, 0, &handler, priv); + inputmgr_add_callback(btn, BASE_MENU_BTN, &handler, priv); - priv->btn[i] = btn; + priv->menu_btn[i] = btn; } evas_object_show(box); elm_object_part_content_set(priv->base, PART_MENU_AREA, box); - elm_object_focus_next_object_set(priv->btn[E_LAYOUT_MAX - 1], - priv->btn[0], ELM_FOCUS_RIGHT); - elm_object_focus_next_object_set(priv->btn[0], - priv->btn[E_LAYOUT_MAX - 1], ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(priv->menu_btn[E_LAYOUT_MAX - 1], + priv->menu_btn[0], ELM_FOCUS_RIGHT); + elm_object_focus_next_object_set(priv->menu_btn[0], + priv->menu_btn[E_LAYOUT_MAX - 1], + ELM_FOCUS_LEFT); + + return true; +} + +static bool _draw_view_mode_btn(struct _priv *priv) +{ + Evas_Object *btn; + + btn = util_add_button(priv->base, STYLE_BTN_VIEW_MODE, NULL); + if (!btn) { + _ERR("failed to add button object"); + return false; + } + + inputmgr_add_callback(btn, BASE_VIEW_BTN, &handler, priv); + + elm_object_part_content_set(priv->base, PART_VIEW_MODE, btn); + + priv->view_btn = btn; return true; } @@ -478,6 +612,9 @@ static bool _draw_items(struct _priv *priv) if (!_draw_menu_btn(priv)) return false; + if (!_draw_view_mode_btn(priv)) + return false; + return true; } @@ -559,13 +696,13 @@ static Evas_Object *_create(Evas_Object *win, void *data) lmgr = layoutmgr_create(base); for (i = 0; i < E_LAYOUT_MAX; i++) layoutmgr_add_layout(lmgr, g_menu_item[i].func_get_lclass(), - priv->btn[i]); + priv->menu_btn[i]); priv->lmgr = lmgr; viewmgr_set_view_data(VIEW_BASE, priv); - elm_object_focus_set(priv->btn[0], EINA_TRUE); + elm_object_focus_set(priv->menu_btn[0], EINA_TRUE); return base; } @@ -694,7 +831,7 @@ static void _destroy(void *view_data) priv = view_data; for (i = 0; i < E_LAYOUT_MAX; i++) - inputmgr_remove_callback(priv->btn[i], &handler); + inputmgr_remove_callback(priv->menu_btn[i], &handler); layoutmgr_remove_layout(priv->lmgr, LAYOUT_MOVIE); layoutmgr_remove_layout(priv->lmgr, LAYOUT_GALLERY); |