#include <Elementary.h>
#include <viewmgr.h>
+#include <inputmgr.h>
#include <app_debug.h>
#include "define.h"
#include "util.h"
+#include "view.h"
#define BUTTON_MAX 16
#define BUTTON_BORDER 1
enum _button_id {
BUTTON_INVALID = -1,
+ BUTTON_LIVETV,
BUTTON_FAV,
BUTTON_LOCK,
};
struct _priv {
Evas_Object *base;
+ Evas_Object *live_btn;
Evas_Object *menu_btn[BUTTON_MAX];
};
}
};
+static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Key_Down *ev)
+{
+ if (!strcmp(ev->keyname, KEY_BACK) ||
+ !strcmp(ev->keyname, KEY_BACK_REMOTE))
+ viewmgr_hide_view(VIEW_ACTION_MENU);
+}
+
+static input_handler key_handler = {
+ .key_down = _key_down_cb,
+};
+
+static void _button_click(int id)
+{
+ switch (id) {
+ case BUTTON_LIVETV:
+ viewmgr_hide_view(VIEW_ACTION_MENU);
+ break;
+ }
+}
+
+static void _button_key_up_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Key_Up *ev)
+{
+ if (strcmp(ev->keyname, KEY_ENTER) &&
+ strcmp(ev->keyname, KEY_ENTER_REMOTE))
+ return;
+
+ _button_click(id);
+}
+
+static void _button_mouse_up_cb(int id, void *data, Evas *e,
+ Evas_Object *obj, Evas_Event_Mouse_Up *ev)
+{
+ _button_click(id);
+}
+
+static void _button_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 button_handler = {
+ .key_up = _button_key_up_cb,
+ .mouse_up = _button_mouse_up_cb,
+ .mouse_move = _button_mouse_move_cb
+};
+
static bool _draw_top_area(struct _priv *priv)
{
Evas_Object *btn;
return false;
}
+ inputmgr_add_callback(btn, BUTTON_LIVETV, &button_handler, priv);
+ priv->live_btn = btn;
+
return true;
}
PART_ICON_1_SELECTED);
util_add_icon(btn, buttons[i].state[TOGGLE].disabled,
PART_ICON_1_DISABLED);
+ inputmgr_add_callback(btn, buttons[i].id,
+ &button_handler, priv);
col = i % ITEMS_IN_ROW;
row = i / ITEMS_IN_ROW;
_draw_view_content(priv);
+ inputmgr_add_callback(priv->base, 0, &key_handler, priv);
+
return base;
}
}
priv = data;
- if (priv->base)
- evas_object_show(priv->base);
+ evas_object_show(priv->base);
+
+ elm_object_focus_set(priv->live_btn, EINA_TRUE);
}
static void _hide(void *data)
}
priv = data;
- if (priv->base)
- evas_object_hide(priv->base);
+ evas_object_hide(priv->base);
}
static void _destroy(void *data)
{
struct _priv *priv;
+ int i;
if (!data) {
_ERR("Get data failed.");
}
priv = data;
- if (priv->base)
- evas_object_del(priv->base);
+ inputmgr_remove_callback(priv->live_btn, &button_handler);
+ inputmgr_remove_callback(priv->base, &key_handler);
+
+ i = 0;
+ while (priv->menu_btn[i] && i < BUTTON_MAX) {
+ inputmgr_remove_callback(priv->menu_btn[i], &button_handler);
+ i++;
+ }
+
+ evas_object_del(priv->base);
free(priv);
}
+static void _update(void *view_data, int type, void *data)
+{
+ if (type == UPDATE_TYPE_INPUT_KEY_DOWN) {
+ Evas_Event_Key_Down *ev = data;
+
+ if (!ev) {
+ _ERR("failed to get ev");
+ return;
+ }
+
+ viewmgr_show_view(VIEW_ACTION_MENU);
+ }
+}
+
static view_class _vclass = {
.view_id = VIEW_ACTION_MENU,
.create = _create,
.show = _show,
.hide = _hide,
.destroy = _destroy,
+ .update = _update
};
view_class *view_action_menu_get_vclass(void)