diff options
-rw-r--r-- | include/view/action_menu.h | 3 | ||||
-rw-r--r-- | res/edc/widgets/button.edc | 131 | ||||
-rw-r--r-- | src/layout/gallery.c | 1 | ||||
-rw-r--r-- | src/layout/movie.c | 1 | ||||
-rw-r--r-- | src/layout/music.c | 1 | ||||
-rw-r--r-- | src/view/action_menu.c | 70 |
6 files changed, 207 insertions, 0 deletions
diff --git a/include/view/action_menu.h b/include/view/action_menu.h index f74b934..afaae01 100644 --- a/include/view/action_menu.h +++ b/include/view/action_menu.h @@ -29,4 +29,7 @@ #define PART_ACTION_FAVORITE_TITLE "part.action_favorite_title" #define PART_ACTION_FAVORITE_AREA "part.action_favorite_area" +/* style */ +#define STYLE_BTN_LIVETV "action_btn_livetv" + #endif /* __AIR_MEDIAHUB_VIEW_ACTION_MENU_H__ */ diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc index 48c87a5..264978a 100644 --- a/res/edc/widgets/button.edc +++ b/res/edc/widgets/button.edc @@ -2679,3 +2679,134 @@ group { } } } + +group { + name: "elm/button/base/action_btn_livetv"; + data.item: "focus_highlight" "on"; + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: COLOR_ITEM_FOCUS; + } + } + part { + name: "elm.text"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "bg"; + rel2.to: "bg"; + text { + font: FONT_LIGHT; + size: 28; + align: 0.5 0.5; + } + color: COLOR_TEXT_NORMAL; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: COLOR_TEXT_FOCUS; + } + } + part { + name: "border_top"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "bg"; + rel2 { + to: "bg"; + relative: 1.0 0.0; + } + min: 0 1; + align: 0.5 0.0; + color: COLOR_ITEM_BORDER; + fixed: 0 1; + } + } + part { + name: "border_left"; + inherit: "border_top"; + description { + state: "default" 0.0; + rel1 { + to: "border_top"; + relative: 0.0 1.0; + } + rel2 { + to: "bg"; + relative: 0.0 1.0; + } + min: 1 0; + align: 0.0 0.5; + fixed: 1 0; + } + } + part { + name: "border_right"; + inherit: "border_top"; + description { + state: "default" 0.0; + rel1 { + to: "border_top"; + relative: 1.0 1.0; + } + rel2 { + to: "bg"; + relative: 1.0 1.0; + } + min: 1 0; + align: 1.0 0.5; + fixed: 1 0; + } + } + part { + name: "border_bottom"; + inherit: "border_top"; + description { + state: "default" 0.0; + rel1 { + to: "border_left"; + relative: 1.0 1.0; + } + rel2 { + to: "border_right"; + relative: 0.0 1.0; + } + align: 0.5 1.0; + } + } + } + programs { + program { + name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "bg"; + target: "elm.text"; + transition: TRANSITION_FOCUS; + } + program { + name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "elm.text"; + transition: TRANSITION_FOCUS; + } + } +} diff --git a/src/layout/gallery.c b/src/layout/gallery.c index 03c6d30..902c16c 100644 --- a/src/layout/gallery.c +++ b/src/layout/gallery.c @@ -220,6 +220,7 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); } } diff --git a/src/layout/movie.c b/src/layout/movie.c index 0028026..b615b83 100644 --- a/src/layout/movie.c +++ b/src/layout/movie.c @@ -406,6 +406,7 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); } } diff --git a/src/layout/music.c b/src/layout/music.c index f1c9da7..0920703 100644 --- a/src/layout/music.c +++ b/src/layout/music.c @@ -339,6 +339,7 @@ static void _grid_key_down_cb(void *data, Elm_Object_Item *it, priv->cur_index = vdata.index; viewmgr_update_view(VIEW_ACTION_MENU, UPDATE_CONTENT, &vdata); + viewmgr_show_view(VIEW_ACTION_MENU); } } diff --git a/src/view/action_menu.c b/src/view/action_menu.c index ef0cc30..73e281a 100644 --- a/src/view/action_menu.c +++ b/src/view/action_menu.c @@ -16,15 +16,75 @@ #include <Elementary.h> #include <app_debug.h> +#include <inputmgr.h> #include <viewmgr.h> #include "define.h" +#define TEXT_LIVETV "Live TV" + struct _priv { Evas_Object *win; Evas_Object *base; + + Evas_Object *tv_btn; +}; + +static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + if (!ev) + return; + + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_BACK_REMOTE)) + viewmgr_pop_view(); +} + +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); +} + +static input_handler _handler = { + .key_down = _key_down_cb, + .mouse_move = _mouse_move_cb }; +static bool _draw_livetv_btn(struct _priv *priv) +{ + Evas_Object *btn; + + btn = elm_button_add(priv->base); + if (!btn) { + _ERR("failed to create button object"); + return false; + } + + elm_object_style_set(btn, STYLE_BTN_LIVETV); + elm_object_text_set(btn, TEXT_LIVETV); + + inputmgr_add_callback(btn, 0, &_handler, priv); + + elm_object_part_content_set(priv->base, PART_ACTION_TV_BTN, btn); + + evas_object_show(btn); + + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_UP); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(btn, btn, ELM_FOCUS_RIGHT); + + priv->tv_btn = btn; + + return true; +} + static Evas_Object *_create(Evas_Object *win, void *data) { struct _priv *priv; @@ -59,6 +119,12 @@ static Evas_Object *_create(Evas_Object *win, void *data) viewmgr_set_view_data(VIEW_ACTION_MENU, priv); + if (!_draw_livetv_btn(priv)) { + _ERR("failed to draw livetv button"); + free(priv); + return NULL; + } + return base; } @@ -74,6 +140,8 @@ static void _show(void *view_data) priv = view_data; evas_object_show(priv->base); + + elm_object_focus_set(priv->tv_btn, EINA_TRUE); } static void _hide(void *view_data) @@ -101,6 +169,8 @@ static void _destroy(void *view_data) priv = view_data; + inputmgr_remove_callback(priv->tv_btn, &_handler); + evas_object_del(priv->base); free(priv); |