summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--include/view/action_menu.h3
-rw-r--r--res/edc/widgets/button.edc131
-rw-r--r--src/layout/gallery.c1
-rw-r--r--src/layout/movie.c1
-rw-r--r--src/layout/music.c1
-rw-r--r--src/view/action_menu.c70
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);