support mouse handling in view_user_edit 41/43941/1
authorSoohye Shin <soohye.shin@samsung.com>
Wed, 15 Jul 2015 12:25:06 +0000 (21:25 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Wed, 15 Jul 2015 12:25:06 +0000 (21:25 +0900)
- select photo
- select lock
- select delete, done, cancel, discard button,
- select icon

Change-Id: I6e4117dab3fd3064c17892e296c4120fa79d6b7a
Signed-off-by: Soohye Shin <soohye.shin@samsung.com>
src/view/view_user_edit.c

index 45d8dd6..1add254 100644 (file)
 #define CTXPOPUP_Y 310
 #define MAX_BUF 128
 
+enum input_handler_type {
+       INPUT_HANDLER_TYPE_PHOTO,
+       INPUT_HANDLER_TYPE_LOCK,
+       INPUT_HANDLER_TYPE_DELETE,
+       INPUT_HANDLER_TYPE_EO,
+       INPUT_HANDLER_TYPE_BTN_DONE,
+       INPUT_HANDLER_TYPE_BTN_CANCEL,
+       INPUT_HANDLER_TYPE_POPUP_BTN_DISCARD,
+       INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL,
+       INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_DELETE,
+       INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_CANCEL
+};
+
 enum user_item_type {
        USER_ITEM_NONE = 0x00,
        USER_ITEM_ADD = 0x01,
@@ -74,113 +87,63 @@ struct _priv {
        struct datamgr_item *di;
 };
 
-static void _discard_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev);
-
-static void _cancel_user_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev);
-
-static void _delete_user_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev);
-
-static void _get_profile(struct _priv *priv, const char **name,
-               const char **photo, const char **pin)
+static void _focused(int id, void *data, Evas_Object *obj,
+               Elm_Object_Item *item)
 {
-       *name = elm_entry_entry_get(priv->name);
-       *pin = elm_entry_entry_get(priv->pin);
-       elm_image_file_get(priv->icon, photo, NULL);
-       *photo = utils_get_icon_from_photo(*photo);
+       switch (id) {
+       case INPUT_HANDLER_TYPE_PHOTO:
+       case INPUT_HANDLER_TYPE_LOCK:
+       case INPUT_HANDLER_TYPE_DELETE:
+       case INPUT_HANDLER_TYPE_EO:
+               elm_object_signal_emit(obj, SIG_FOCUS, SRC_PROG);
+               break;
+       default:
+                return;
+       }
 }
 
-static void _done_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
+static void _unfocused(int id, void *data, Evas_Object *obj,
+               Elm_Object_Item *item)
 {
-       struct _priv *priv;
-       const char *name, *pin, *photo;
-
-       if (!data) {
-               _ERR("Invalid argument");
+       switch (id) {
+       case INPUT_HANDLER_TYPE_PHOTO:
+       case INPUT_HANDLER_TYPE_LOCK:
+       case INPUT_HANDLER_TYPE_DELETE:
+       case INPUT_HANDLER_TYPE_EO:
+               elm_object_signal_emit(obj, SIG_UNFOCUS, SRC_PROG);
+               break;
+       default:
                return;
        }
-
-       priv = data;
-
-       if (!strcmp(ev->keyname, KEY_ENTER)) {
-               _get_profile(priv, &name, &photo, &pin);
-               if (priv->di) {
-                       priv->di->action = ITEM_SELECT_ACTION_UPDATE;
-                       priv->di->title = strdup(name ? name : "");
-                       priv->di->icon = strdup(photo ? photo :
-                                       IMAGE_USER_DEFAULT);
-                       priv->di->parameter = strdup(pin ? pin : "");
-                       datamgr_select_item(priv->dm, priv->di);
-               } else
-                       datamgr_add_item(priv->dm, name, photo, pin);
-               priv->di = NULL;
-               viewmgr_pop_view();
-       }
 }
 
-static input_handler done_handler = {
-       .key_down = _done_key_down
-};
+static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Down *ev);
 
-static void _delete_popup(struct _priv *priv, input_handler *handler,
-               Evas_Object *obj)
-{
-       inputmgr_remove_callback(obj, handler);
-       evas_object_del(priv->popup);
-       priv->popup = NULL;
-}
+static void _mouse_down(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Down *ev);
 
-static input_handler cancel_user_handler = {
-       .key_down = _cancel_user_key_down
+static input_handler handler = {
+       .focused = _focused,
+       .unfocused = _unfocused,
+       .key_down = _key_down,
+       .mouse_down = _mouse_down
 };
 
-static void _cancel_user_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
+static void _get_profile(struct _priv *priv, const char **name,
+               const char **photo, const char **pin)
 {
-       struct _priv *priv;
-
-       if (!data) {
-               _ERR("Invalid argument");
-               return;
-       }
-
-       priv = data;
-
-       if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE) ||
-                       !strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-               _delete_popup(priv, &cancel_user_handler, obj);
-       }
+       *name = elm_entry_entry_get(priv->name);
+       *pin = elm_entry_entry_get(priv->pin);
+       elm_image_file_get(priv->icon, photo, NULL);
+       *photo = utils_get_icon_from_photo(*photo);
 }
 
-static input_handler discard_handler = {
-       .key_down = _discard_key_down
-};
-
-static void _discard_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
+static void _delete_popup(struct _priv *priv, Evas_Object *obj)
 {
-       struct _priv *priv;
-
-       if (!data) {
-               _ERR("Invalid argument");
-               return;
-       }
-
-       priv = data;
-
-       if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
-               _delete_popup(priv, &discard_handler, obj);
-               viewmgr_pop_view();
-       } else if (!strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-               _delete_popup(priv, &discard_handler, obj);
-       }
+       inputmgr_remove_callback(obj, &handler);
+       evas_object_del(priv->popup);
+       priv->popup = NULL;
 }
 
 static void _add_discard_popup(struct _priv *priv)
@@ -202,7 +165,8 @@ static void _add_discard_popup(struct _priv *priv)
                evas_object_del(popup);
                return;
        }
-       inputmgr_add_callback(discard_btn, 0, &discard_handler, priv);
+       inputmgr_add_callback(discard_btn, INPUT_HANDLER_TYPE_POPUP_BTN_DISCARD,
+                       &handler, priv);
 
        cancel_btn = utils_add_button(popup, MESSAGE_CANCEL,
                        PART_POPUP_BUTTON_2);
@@ -211,7 +175,8 @@ static void _add_discard_popup(struct _priv *priv)
                evas_object_del(popup);
                return;
        }
-       inputmgr_add_callback(cancel_btn, 0, &cancel_user_handler, priv);
+       inputmgr_add_callback(cancel_btn, INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL,
+                       &handler, priv);
        elm_object_focus_set(cancel_btn, EINA_TRUE);
 }
 
@@ -235,23 +200,6 @@ static bool _check_changed_input(struct _priv *priv)
        return true;
 }
 
-static void _cancel_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       if (!strcmp(ev->keyname, KEY_ENTER)) {
-               if (_check_changed_input(data)) {
-                       _add_discard_popup(data);
-                       return;
-               }
-
-               viewmgr_pop_view();
-       }
-}
-
-static input_handler cancel_handler = {
-       .key_down = _cancel_key_down
-};
-
 static bool _add_btns(struct _priv *priv)
 {
        Evas_Object *done, *cancel;
@@ -262,7 +210,8 @@ static bool _add_btns(struct _priv *priv)
                _ERR("failed to add done btn");
                return false;
        }
-       inputmgr_add_callback(done, 0, &done_handler, priv);
+       inputmgr_add_callback(done, INPUT_HANDLER_TYPE_BTN_DONE, &handler,
+                       priv);
 
        cancel = utils_add_button(priv->base, MESSAGE_CANCEL,
                        PART_USER_EDIT_BTN_CANCEL);
@@ -271,7 +220,8 @@ static bool _add_btns(struct _priv *priv)
                evas_object_del(done);
                return false;
        }
-       inputmgr_add_callback(cancel, 0, &cancel_handler, priv);
+       inputmgr_add_callback(cancel, INPUT_HANDLER_TYPE_BTN_CANCEL, &handler,
+                       priv);
 
        priv->cancel = cancel;
        priv->done = done;
@@ -279,18 +229,6 @@ static bool _add_btns(struct _priv *priv)
        return true;
 }
 
-static void _focused(int id, void *data, Evas_Object *obj,
-               Elm_Object_Item *item)
-{
-       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 void _load_user_icon(struct _priv *priv, const char *file,
                const char *focus_file)
 {
@@ -311,42 +249,6 @@ static void _load_user_icon(struct _priv *priv, const char *file,
        priv->focus_icon = focus_icon;
 }
 
-static void _eo_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       struct _priv *priv;
-       const char *file, *focus_file;
-
-       if (!data)
-               return;
-
-       priv = data;
-
-       if (!strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-               evas_object_del(priv->ctxpopup);
-               priv->ctxpopup = NULL;
-       } else if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
-               evas_object_del(priv->ctxpopup);
-               priv->ctxpopup = NULL;
-
-               file = evas_object_data_get(obj, KEY_ICON);
-               focus_file = utils_get_focus_photo_from_photo(file);
-
-               if (!strcmp(file, ICON_ADD) || !strcmp(focus_file, ICON_ADD))
-                       viewmgr_push_view(VIEW_PHOTO);
-               else
-                       _load_user_icon(priv, file, focus_file);
-       }
-}
-
-static input_handler icon_handler = {
-       .focused = _focused,
-       .unfocused = _unfocused,
-       .key_down = _eo_key_down
-};
-
 static Evas_Object *_pack_icon(Evas_Object *table, struct icon_info *_icon_info,
                int i)
 {
@@ -428,7 +330,8 @@ static void _add_icon_list(struct _priv *priv)
                if (!eo)
                        continue;
 
-               inputmgr_add_callback(eo, 0, &icon_handler, priv);
+               inputmgr_add_callback(eo, INPUT_HANDLER_TYPE_EO, &handler,
+                               priv);
                if (i == 0)
                        elm_object_focus_set(eo, EINA_TRUE);
        }
@@ -436,20 +339,6 @@ static void _add_icon_list(struct _priv *priv)
        priv->ctxpopup = ctxpopup;
 }
 
-static void _photo_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       if (!strcmp(ev->keyname, KEY_ENTER)) {
-               _add_icon_list(data);
-       }
-}
-
-static input_handler photo_handler = {
-       .focused = _focused,
-       .unfocused = _unfocused,
-       .key_down = _photo_key_down
-};
-
 static void _change_entry_status(Evas_Object *pin, Eina_Bool disable,
                const char *signal)
 {
@@ -492,19 +381,6 @@ static void _load_lock_icon(struct _priv *priv)
                        PART_USER_EDIT_SWITCH);
 }
 
-static void _lock_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       if (!strcmp(ev->keyname, KEY_ENTER))
-               _load_lock_icon(data);
-}
-
-static input_handler lock_handler = {
-       .focused = _focused,
-       .unfocused = _unfocused,
-       .key_down = _lock_key_down
-};
-
 static Evas_Object *_add_layout(struct _priv *priv)
 {
        Evas_Object *ly, *photo, *name, *pin, *lock;
@@ -536,8 +412,8 @@ static Evas_Object *_add_layout(struct _priv *priv)
        if (!lock)
                goto err;
 
-       inputmgr_add_callback(lock, 0, &lock_handler, priv);
-       inputmgr_add_callback(photo, 0, &photo_handler, priv);
+       inputmgr_add_callback(lock, INPUT_HANDLER_TYPE_LOCK, &handler, priv);
+       inputmgr_add_callback(photo, INPUT_HANDLER_TYPE_PHOTO, &handler, priv);
 
        priv->lock = lock;
        priv->photo = photo;
@@ -617,34 +493,6 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        return base;
 }
 
-static input_handler delete_user_handler = {
-       .key_down = _delete_user_key_down
-};
-
-static void _delete_user_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       struct _priv *priv;
-
-       if (!data) {
-               _ERR("Invalid argument");
-               return;
-       }
-
-       priv = data;
-
-       if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
-               _delete_popup(priv, &delete_user_handler, obj);
-               priv->di->action = ITEM_SELECT_ACTION_DELETE;
-               datamgr_select_item(priv->dm, priv->di);
-               viewmgr_pop_view();
-       } else if (!strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-               _delete_popup(priv, &delete_user_handler, obj);
-       }
-}
-
 static void _add_delete_popup(struct _priv *priv)
 {
        Evas_Object *popup, *delete_btn, *cancel_btn;
@@ -667,7 +515,9 @@ static void _add_delete_popup(struct _priv *priv)
                evas_object_del(popup);
                return;
        }
-       inputmgr_add_callback(delete_btn, 0, &delete_user_handler, priv);
+       inputmgr_add_callback(delete_btn,
+                       INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_DELETE,
+                       &handler, priv);
 
        cancel_btn = utils_add_button(popup, MESSAGE_CANCEL,
                        PART_POPUP_BUTTON_2);
@@ -676,24 +526,140 @@ static void _add_delete_popup(struct _priv *priv)
                evas_object_del(popup);
                return;
        }
-       inputmgr_add_callback(cancel_btn, 0, &cancel_user_handler, priv);
+       inputmgr_add_callback(cancel_btn,
+                       INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_CANCEL,
+                       &handler, priv);
        elm_object_focus_set(cancel_btn, EINA_TRUE);
 }
 
-static void _del_key_down(int id, void *data, Evas *e, Evas_Object *obj,
+static void _select_eo(struct _priv *priv, Evas_Object *obj)
+{
+       const char *file, *focus_file;
+
+       evas_object_del(priv->ctxpopup);
+       priv->ctxpopup = NULL;
+
+       file = evas_object_data_get(obj, KEY_ICON);
+       focus_file = utils_get_focus_photo_from_photo(file);
+
+       if (!strcmp(file, ICON_ADD) || !strcmp(focus_file, ICON_ADD))
+               viewmgr_push_view(VIEW_PHOTO);
+       else
+               _load_user_icon(priv, file, focus_file);
+}
+
+static void _select_btn_done(struct _priv *priv)
+{
+       const char *name, *pin, *photo;
+
+       _get_profile(priv, &name, &photo, &pin);
+       if (priv->di) {
+               priv->di->action = ITEM_SELECT_ACTION_UPDATE;
+               priv->di->title = strdup(name ? name : "");
+               priv->di->icon = strdup(photo ? photo :
+                               IMAGE_USER_DEFAULT);
+               priv->di->parameter = strdup(pin ? pin : "");
+               datamgr_select_item(priv->dm, priv->di);
+       } else
+               datamgr_add_item(priv->dm, name, photo, pin);
+
+       priv->di = NULL;
+       viewmgr_pop_view();
+}
+
+static void _select(struct _priv *priv, int id, Evas_Object *obj)
+{
+       switch (id) {
+       case INPUT_HANDLER_TYPE_PHOTO:
+               _add_icon_list(priv);
+               break;
+       case INPUT_HANDLER_TYPE_LOCK:
+               _load_lock_icon(priv);
+               break;
+       case INPUT_HANDLER_TYPE_DELETE:
+               _add_delete_popup(priv);
+               break;
+       case INPUT_HANDLER_TYPE_EO:
+               _select_eo(priv, obj);
+               break;
+       case INPUT_HANDLER_TYPE_BTN_DONE:
+               _select_btn_done(priv);
+               break;
+       case INPUT_HANDLER_TYPE_BTN_CANCEL:
+               if (_check_changed_input(priv)) {
+                       _add_discard_popup(priv);
+                       return;
+               }
+               viewmgr_pop_view();
+               break;
+       case INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_DELETE:
+               _delete_popup(priv, obj);
+               priv->di->action = ITEM_SELECT_ACTION_DELETE;
+               datamgr_select_item(priv->dm, priv->di);
+               viewmgr_pop_view();
+               break;
+       case INPUT_HANDLER_TYPE_POPUP_BTN_DISCARD:
+               _delete_popup(priv, obj);
+               viewmgr_pop_view();
+               break;
+       case INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_CANCEL:
+       case INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL:
+               _delete_popup(priv, obj);
+               break;
+       default:
+               return;
+       }
+}
+
+static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev)
 {
-       if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
-               _add_delete_popup(data);
+       struct _priv *priv;
+
+       if (!data) {
+               _ERR("Invalid argument");
+               return;
        }
+
+       priv = data;
+       if (!strcmp(ev->keyname, KEY_BACK) ||
+                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
+               switch (id) {
+               case INPUT_HANDLER_TYPE_EO:
+                       evas_object_del(priv->ctxpopup);
+                       priv->ctxpopup = NULL;
+                       break;
+               case INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_DELETE:
+                       _delete_popup(priv, obj);
+                       break;
+               case INPUT_HANDLER_TYPE_POPUP_BTN_DISCARD:
+                       _delete_popup(priv, obj);
+                       break;
+               case INPUT_HANDLER_TYPE_DELETE_POPUP_BTN_CANCEL:
+               case INPUT_HANDLER_TYPE_POPUP_BTN_CANCEL:
+                       _delete_popup(priv, obj);
+                       break;
+               default:
+                       return;
+               }
+       } else if(!strcmp(ev->keyname, KEY_ENTER) ||
+                       !strcmp(ev->keyname, KEY_ENTER_REMOTE))
+               _select(priv, id, obj);
 }
 
-static input_handler del_handler = {
-       .focused = _focused,
-       .unfocused = _unfocused,
-       .key_down = _del_key_down
-};
+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;
+       }
+
+       priv = data;
+       _select(priv, id, obj);
+}
 
 static void _load_del_btn(struct _priv *priv)
 {
@@ -717,7 +683,7 @@ static void _load_del_btn(struct _priv *priv)
                _ERR("failed to add delete button");
                return;
        }
-       inputmgr_add_callback(btn, 0, &del_handler, priv);
+       inputmgr_add_callback(btn, INPUT_HANDLER_TYPE_DELETE, &handler, priv);
 
        priv->del = btn;
 }
@@ -777,7 +743,7 @@ static void _hide(void *data)
 
        priv = data;
        if (priv->del) {
-               inputmgr_remove_callback(priv->del, &del_handler);
+               inputmgr_remove_callback(priv->del, &handler);
                evas_object_del(priv->del);
                priv->del = NULL;
        }
@@ -802,10 +768,10 @@ static void _destroy(void *data)
 
        priv = data;
 
-       inputmgr_remove_callback(priv->photo, &photo_handler);
-       inputmgr_remove_callback(priv->lock, &lock_handler);
-       inputmgr_remove_callback(priv->done, &done_handler);
-       inputmgr_remove_callback(priv->cancel, &cancel_handler);
+       inputmgr_remove_callback(priv->photo, &handler);
+       inputmgr_remove_callback(priv->lock, &handler);
+       inputmgr_remove_callback(priv->done, &handler);
+       inputmgr_remove_callback(priv->cancel, &handler);
        viewmgr_remove_view(VIEW_PHOTO);
        evas_object_del(priv->base);
        free(priv);