static void _update(void *layout_data, int update_type, void *data)
{
+ Evas_Event_Key_Down *ev = data;
+ struct _priv *priv;
+ int r;
+
+ if (!layout_data || !ev) {
+ _ERR("failed to get layout_data and ev");
+ return;
+ }
+
+ priv = layout_data;
+
+ if (!strcmp(ev->keyname, KEY_CHANNELUP) ||
+ !strcmp(ev->keyname, KEY_CHANNELUP_REMOTE)) {
+ r = tv_channel_next();
+ if (r < 0)
+ _ERR("failed to tune next channel");
+
+ _update_channel_info(priv);
+ } else if (!strcmp(ev->keyname, KEY_CHANNELDOWN) ||
+ !strcmp(ev->keyname, KEY_CHANNELDOWN_REMOTE)) {
+ r = tv_channel_prev();
+ if (r < 0)
+ _ERR("failed to tune next channel");
+
+ _update_channel_info(priv);
+ }
}
static layout_class lclass = {
};
struct key_map {
- const char *view;
- const char *key[KEY_MAX];
+ const char *view;
+ const char *key[KEY_MAX];
};
static struct key_map g_kmap[] = {
{
VIEW_CHANNELINFO,
{
- KEY_ENTER, KEY_ENTER_REMOTE, KEY_CHANNELUP,
- KEY_CHANNELUP_REMOTE, KEY_CHANNELDOWN, KEY_CHANNELDOWN_REMOTE
+ KEY_ENTER, KEY_ENTER_REMOTE,
+ KEY_CHANNELUP, KEY_CHANNELUP_REMOTE,
+ KEY_CHANNELDOWN, KEY_CHANNELDOWN_REMOTE
}
},
};
-static void _key_up_cb(int id, void *data, Evas *e, Evas_Object *obj,
- Evas_Event_Key_Up *ev)
+static void _key_down_cb(int id, void *data, Evas *e, Evas_Object *obj,
+ Evas_Event_Key_Down *ev)
{
size_t i, j;
while (g_kmap[i].key[j]) {
if (!strcmp(ev->keyname, g_kmap[i].key[j])) {
viewmgr_show_view(g_kmap[i].view);
- viewmgr_update_view(g_kmap[i].view, ev);
+ viewmgr_update_view(g_kmap[i].view,
+ UPDATE_TYPE_INPUT, ev);
return;
}
j++;
}
static input_handler key_handler = {
- .key_up = _key_up_cb,
+ .key_down = _key_down_cb,
};
static Evas_Object *_add_win(const char *name)
#include "define.h"
#include "tv.h"
+#include "view_channelinfo.h"
#include "layout_channelinfo.h"
#include "layout_channelinfo_list.h"
#include "layout_channelinfo_search.h"
#define BUF_MAX 128
#define STATUS_BOX_PADDING 10
-enum _update_type {
+enum _update_op {
START_HIDE_TIMER,
STOP_HIDE_TIMER
};
struct _priv {
Evas_Object *base;
Ecore_Timer *hide_timer;
+ const char *current_layout;
layoutmgr *lmgr;
};
else
_ERR("failed to get tv_program_info");
- viewmgr_update_view(VIEW_CHANNELINFO, START_HIDE_TIMER);
+ viewmgr_update_view(VIEW_CHANNELINFO,
+ UPDATE_TYPE_TIMER, START_HIDE_TIMER);
}
void draw_channel_info(Evas_Object *obj,
if (r < 0)
current_service = -1;
- viewmgr_update_view(VIEW_CHANNELINFO, (void *) STOP_HIDE_TIMER);
+ viewmgr_update_view(VIEW_CHANNELINFO,
+ UPDATE_TYPE_TIMER, (void *)STOP_HIDE_TIMER);
_load_channel_text(obj, channel_info);
_pack_icon_box(obj, channel_info);
if (r < 0)
viewmgr_update_view(VIEW_CHANNELINFO,
- (void *) START_HIDE_TIMER);
+ UPDATE_TYPE_TIMER, START_HIDE_TIMER);
+}
+
+static void _hide_current_layout(struct _priv *priv)
+{
+ if (!priv->current_layout)
+ return;
+
+ layoutmgr_hide_layout(priv->lmgr, priv->current_layout);
+ priv->current_layout = NULL;
+}
+
+static void _set_current_layout(struct _priv *priv, const char *layout_id)
+{
+ if (priv->current_layout && layout_id &&
+ !strcmp(priv->current_layout, layout_id))
+ return;
+
+ if (priv->current_layout)
+ layoutmgr_hide_layout(priv->lmgr, priv->current_layout);
+
+ layoutmgr_show_layout(priv->lmgr, layout_id);
+ priv->current_layout = layout_id;
}
static Evas_Object *_create(Evas_Object *win, void *data)
priv = view_data;
- layoutmgr_show_layout(priv->lmgr, LAYOUT_CHANNELINFO);
-
evas_object_show(priv->base);
}
priv = view_data;
+ _hide_current_layout(priv);
+
evas_object_hide(priv->base);
}
free(priv);
}
-static void _update(void *view_data, void *data)
+static void _update(void *view_data, int type, void *data)
{
struct _priv *priv;
+ Evas_Event_Key_Down *ev;
if (!view_data) {
_ERR("failed to get view data");
priv = view_data;
- switch ((int) data) {
- case START_HIDE_TIMER:
- _start_hide_timer(priv);
- break;
- case STOP_HIDE_TIMER:
- _stop_hide_timer(priv);
- break;
+ if (type == UPDATE_TYPE_TIMER) {
+ switch ((int) data) {
+ case START_HIDE_TIMER:
+ _start_hide_timer(priv);
+ break;
+ case STOP_HIDE_TIMER:
+ _stop_hide_timer(priv);
+ break;
+ }
+ } else if (type == UPDATE_TYPE_INPUT) {
+ ev = data;
+ if (!ev) {
+ _ERR("failed to get ev");
+ return;
+ }
+
+ if (!strcmp(ev->keyname, KEY_ENTER) ||
+ !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+ if (!priv->current_layout)
+ _set_current_layout(priv, LAYOUT_CHANNELINFO);
+ else
+ _set_current_layout(priv,
+ LAYOUT_CHANNELINFO_SEARCH);
+ } else if (!strcmp(ev->keyname, KEY_CHANNELUP) ||
+ !strcmp(ev->keyname, KEY_CHANNELUP_REMOTE) ||
+ !strcmp(ev->keyname, KEY_CHANNELDOWN) ||
+ !strcmp(ev->keyname, KEY_CHANNELDOWN_REMOTE)) {
+ _set_current_layout(priv, LAYOUT_CHANNELINFO_LIST);
+ layoutmgr_update_layout(priv->lmgr,
+ LAYOUT_CHANNELINFO_LIST, 0, ev);
+ }
}
}