add down arrow for user edit
[profile/tv/apps/native/air_home.git] / src / view / view_user.c
index 1a31ae3..d13782e 100644 (file)
 #include <inputmgr.h>
 
 #include "defs.h"
-#include "view_user.h"
-#include "view_user_edit.h"
+#include "view.h"
 #include "data_user.h"
 #include "datamgr.h"
 #include "utils.h"
 
 #define MESSAGE_POPUP_CONTENT "Can not add users more than 8.<br>If you want to add another user, delete one of users"
 
+enum input_handler_type {
+       INPUT_HANDLER_TYPE_BASE,
+       INPUT_HANDLER_TYPE_EO,
+       INPUT_HANDLER_TYPE_BUTTON
+};
+
 struct _priv {
        Evas_Object *win;
        Evas_Object *base;
@@ -47,19 +52,42 @@ struct _bar_item {
        struct _priv *priv;
 };
 
-static void _btn_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
+static void _focused(int id, void *data, Evas_Object *obj,
+               Elm_Object_Item *item)
 {
-       if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE) ||
-                       !strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-               evas_object_del(data);
-       }
+       struct _priv *priv;
+       struct _bar_item *bi;
+
+       if (id != INPUT_HANDLER_TYPE_EO)
+               return;
+
+       bi = data;
+       priv = bi->priv;
+       priv->foc = bi;
+
+       elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG);
 }
 
-static input_handler btn_handler = {
-       .key_down = _btn_key_down
+static void _unfocused(int id, void *data, Evas_Object *obj,
+               Elm_Object_Item *item)
+{
+       if (id != INPUT_HANDLER_TYPE_EO)
+               return;
+
+       elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG);
+}
+
+static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Down *ev);
+
+static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Down *ev);
+
+static input_handler handler = {
+       .focused = _focused,
+       .unfocused = _unfocused,
+       .key_down = _key_down,
+       .mouse_down = _mouse_down
 };
 
 static void _add_popup(struct _priv *priv)
@@ -79,7 +107,7 @@ static void _add_popup(struct _priv *priv)
                evas_object_del(popup);
                return;
        }
-       inputmgr_add_callback(btn, 0, &btn_handler, popup);
+       inputmgr_add_callback(btn, INPUT_HANDLER_TYPE_BUTTON, &handler, popup);
        elm_object_focus_set(btn, EINA_TRUE);
 }
 
@@ -93,34 +121,80 @@ static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                return;
        }
 
-       priv = data;
+       switch (id) {
+       case INPUT_HANDLER_TYPE_BUTTON:
+               if (!strcmp(ev->keyname, KEY_ENTER) ||
+                               !strcmp(ev->keyname, KEY_ENTER_REMOTE) ||
+                               !strcmp(ev->keyname, KEY_BACK) ||
+                               !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
+                       inputmgr_remove_callback(obj, &handler);
+                       evas_object_del(data);
+               }
+               break;
+       case INPUT_HANDLER_TYPE_BASE:
+               priv = data;
+               if (!strcmp(ev->keyname, KEY_ENTER) ||
+                               !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+                       if ((priv->foc->di->action == ITEM_SELECT_ACTION_PUSH)
+                                       && (eina_list_count(priv->list)
+                                       >= MAX_USER_COUNT)) {
+                               _add_popup(priv);
+                               return;
+                       }
+
+                       viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_EDIT,
+                                       NULL);
+                       datamgr_select_item(priv->dm, priv->foc->di);
+               } else if (!strcmp(ev->keyname, KEY_BACK) ||
+                               !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
+                       viewmgr_pop_view();
+               } else if (!strcmp(ev->keyname, KEY_DOWN)) {
+                       if (priv->foc->di->action == ITEM_SELECT_ACTION_PUSH)
+                               return;
+
+                       viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_EDIT,
+                                       priv->foc->di);
+                       viewmgr_push_view(VIEW_USER_EDIT);
+               }
+               break;
+       default:
+               return;
+       }
+}
 
-       if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
-               if ((priv->foc->di->action == ITEM_SELECT_ACTION_PUSH) &&
-                               (eina_list_count(priv->list) >= MAX_USER_COUNT)) {
+static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Down *ev)
+{
+       struct _priv *priv;
+
+       if (!data) {
+               _ERR("Invalid argument");
+               return;
+       }
+
+       switch (id) {
+       case INPUT_HANDLER_TYPE_BASE:
+               priv = data;
+               if ((priv->foc->di->action == ITEM_SELECT_ACTION_PUSH)
+                               && (eina_list_count(priv->list)
+                               >= MAX_USER_COUNT)) {
                        _add_popup(priv);
                        return;
                }
 
-               viewmgr_update_view(VIEW_USER_EDIT, 0, NULL);
+               viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_EDIT,
+                               NULL);
                datamgr_select_item(priv->dm, priv->foc->di);
-       } else if (!strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-               viewmgr_pop_view();
-       } else if (!strcmp(ev->keyname, KEY_DOWN)) {
-               if (priv->foc->di->action == ITEM_SELECT_ACTION_PUSH)
-                       return;
-
-               viewmgr_update_view(VIEW_USER_EDIT, 0, priv->foc->di);
-               viewmgr_push_view(VIEW_USER_EDIT);
+               break;
+       case INPUT_HANDLER_TYPE_BUTTON:
+               inputmgr_remove_callback(obj, &handler);
+               evas_object_del(data);
+               break;
+       default:
+               return;
        }
 }
 
-static input_handler base_handler = {
-       .key_down = _key_down
-};
-
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv;
@@ -162,40 +236,11 @@ static Evas_Object *_create(Evas_Object *win, void *data)
 
        viewmgr_set_view_data(VIEW_USER, priv);
        viewmgr_add_view(view_user_edit_get_vclass(), dm);
-       inputmgr_add_callback(base, 0, &base_handler, priv);
+       inputmgr_add_callback(base, INPUT_HANDLER_TYPE_BASE, &handler, priv);
 
        return base;
 }
 
-static void _focused(int id, void *data, Evas_Object *obj,
-               Elm_Object_Item *item)
-{
-       struct _priv *priv;
-       struct _bar_item *bi;
-
-       if (!data) {
-               _ERR("Invalid argument");
-               return;
-       }
-
-       bi = data;
-       priv = bi->priv;
-       priv->foc = bi;
-
-       elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG);
-}
-
-static void _unfocused(int id, void *data, Evas_Object *obj,
-               Elm_Object_Item *item)
-{
-       elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG);
-}
-
-static input_handler eo_handler = {
-       .focused = _focused,
-       .unfocused = _unfocused
-};
-
 static struct _bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box,
                struct datamgr_item *di)
 {
@@ -238,18 +283,21 @@ static struct _bar_item *_pack_bar_item(struct _priv *priv, Evas_Object *box,
        if (!ic)
                goto err;
 
-       focus_ic = utils_add_icon(eo,
-                       utils_get_focus_icon_from_icon(di->focus_icon),
+       focus_ic = utils_add_icon(eo, di->focus_icon,
                        PART_BAR_ITEM_ICON_FOCUS);
        if (!focus_ic)
                goto err;
 
+       if (!strcmp(di->icon, di->focus_icon))
+               elm_object_signal_emit(eo, SIG_SHOW_MASK, SRC_PROG);
+
        bg = utils_add_bg(eo, COLOR_DEFAULT_R, COLOR_DEFAULT_G, COLOR_DEFAULT_B,
                        COLOR_DEFAULT_A, PART_BAR_ITEM_BG);
        if (!bg)
                goto err;
 
-       inputmgr_add_callback(eo, 0, &eo_handler, bi);
+       evas_object_size_hint_align_set(eo, 0.5, 0.0);
+       inputmgr_add_callback(eo, INPUT_HANDLER_TYPE_EO, &handler, bi);
        elm_box_pack_end(box, eo);
        evas_object_show(eo);
 
@@ -335,7 +383,7 @@ static void _unload_user(struct _priv *priv)
        struct _bar_item *bi;
 
        EINA_LIST_FREE(priv->list, bi) {
-               inputmgr_remove_callback(bi->eo, &eo_handler);
+               inputmgr_remove_callback(bi->eo, &handler);
                evas_object_del(bi->eo);
                free(bi);
        }
@@ -379,7 +427,7 @@ static void _destroy(void *data)
 
        viewmgr_remove_view(VIEW_USER_EDIT);
        datamgr_fini(priv->dm);
-       inputmgr_remove_callback(priv->base, &base_handler);
+       inputmgr_remove_callback(priv->base, &handler);
        evas_object_del(priv->base);
        free(priv);
 }