support mouse handling in view_photo 38/43938/3
authorSoohye Shin <soohye.shin@samsung.com>
Wed, 15 Jul 2015 12:04:49 +0000 (21:04 +0900)
committerSoohye Shin <soohye.shin@samsung.com>
Wed, 15 Jul 2015 12:22:50 +0000 (21:22 +0900)
- select gengrid item
- select photo from popup

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

index 845fc3f..e8d4b6d 100644 (file)
 
 #define GENGRID_ITEM_SIZE 200
 
+enum input_handler_type {
+       INPUT_HANDLER_TYPE_GRID,
+       INPUT_HANDLER_TYPE_NO_CONTENTS,
+       INPUT_HANDLER_TYPE_DONE,
+       INPUT_HANDLER_TYPE_CANCEL
+};
+
 struct _priv {
        Evas_Object *win;
        Evas_Object *base;
@@ -40,11 +47,111 @@ struct _priv {
        struct datamgr *dm;
 };
 
-static void _cancel_key_down(int id, void *data, Evas *e, Evas_Object *obj,
+static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
                Evas_Event_Key_Down *ev);
 
-static void _done_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev);
+static void _mouse_up(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Up *ev);
+
+static input_handler handler = {
+       .key_down = _key_down,
+       .mouse_up = _mouse_up
+};
+
+static void _delete_popup(struct _priv *priv, Evas_Object *obj)
+{
+       inputmgr_remove_callback(obj, &handler);
+       evas_object_del(priv->popup);
+       priv->popup = NULL;
+}
+
+static void _select_done(struct _priv *priv, Evas_Object *obj)
+{
+       char *thumb;
+
+       _delete_popup(priv, obj);
+       elm_object_focus_allow_set(priv->grid, EINA_TRUE);
+       thumb = elm_object_item_data_get(priv->cur);
+       if (thumb) {
+               viewmgr_update_view(VIEW_USER_EDIT,
+                               UPDATE_TYPE_PHOTO, thumb);
+                               viewmgr_pop_view();
+       }
+}
+
+static void _key_down(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Key_Down *ev)
+{
+       struct _priv *priv = data;
+
+       switch (id) {
+       case INPUT_HANDLER_TYPE_GRID:
+               /* fallthrough */
+       case INPUT_HANDLER_TYPE_NO_CONTENTS:
+               if (!strcmp(ev->keyname, KEY_BACK) ||
+                               !strcmp(ev->keyname, KEY_BACK_REMOTE))
+                       viewmgr_pop_view();
+               break;
+       case INPUT_HANDLER_TYPE_DONE:
+               if (!data)
+                       return;
+
+               priv = data;
+               if (!strcmp(ev->keyname, KEY_ENTER) ||
+                               !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
+                       _select_done(priv, obj);
+               } else if (!strcmp(ev->keyname, KEY_BACK) ||
+                               !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
+                       _delete_popup(priv, obj);
+                       elm_object_focus_allow_set(priv->grid, EINA_TRUE);
+                       elm_object_focus_set(priv->grid, EINA_TRUE);
+               }
+               break;
+       case INPUT_HANDLER_TYPE_CANCEL:
+               if (!data)
+                       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, obj);
+                       elm_object_focus_allow_set(priv->grid, EINA_TRUE);
+                       elm_object_focus_set(priv->grid, EINA_TRUE);
+               }
+               break;
+       default:
+               return;
+       }
+}
+
+static void _mouse_up(int id, void *data, Evas *e, Evas_Object *obj,
+               Evas_Event_Mouse_Up *ev)
+{
+       struct _priv *priv;
+
+       switch (id) {
+       case INPUT_HANDLER_TYPE_DONE:
+               if (!data)
+                       return;
+
+               priv = data;
+               _select_done(priv, obj);
+               break;
+       case INPUT_HANDLER_TYPE_CANCEL:
+               if (!data)
+                       return;
+
+               priv = data;
+               _delete_popup(priv, obj);
+               elm_object_focus_allow_set(priv->grid, EINA_TRUE);
+               elm_object_focus_set(priv->grid, EINA_TRUE);
+               break;
+       default:
+               return;
+       }
+}
 
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
@@ -90,18 +197,6 @@ static Evas_Object *_create(Evas_Object *win, void *data)
        return base;
 }
 
-static void _ly_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       if (!strcmp(ev->keyname, KEY_BACK)) {
-               viewmgr_pop_view();
-       }
-}
-
-static input_handler ly_handler = {
-       .key_down = _ly_key_down
-};
-
 static void _load_no_content(struct _priv *priv)
 {
        Evas_Object *ly;
@@ -113,21 +208,11 @@ static void _load_no_content(struct _priv *priv)
                return;
        }
        evas_object_show(ly);
-       inputmgr_add_callback(ly, 0, &ly_handler, NULL);
+       inputmgr_add_callback(ly, INPUT_HANDLER_TYPE_NO_CONTENTS, &handler,
+                       NULL);
 
        priv->ly = ly;
 }
-static void _grid_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       if (!strcmp(ev->keyname, KEY_BACK)) {
-               viewmgr_pop_view();
-       }
-}
-
-static input_handler grid_handler = {
-       .key_down = _grid_key_down
-};
 
 static Evas_Object *_add_photo_grid(struct _priv *priv)
 {
@@ -152,7 +237,7 @@ static Evas_Object *_add_photo_grid(struct _priv *priv)
        elm_gengrid_align_set(grid, 0.0, 0.5);
        evas_object_show(grid);
 
-       inputmgr_add_callback(grid, 0, &grid_handler, priv);
+       inputmgr_add_callback(grid, INPUT_HANDLER_TYPE_GRID, &handler, priv);
 
        return grid;
 }
@@ -174,61 +259,6 @@ static Evas_Object *_get_grid_content(void *data, Evas_Object *obj,
        return img;
 }
 
-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 input_handler cancel_handler = {
-       .key_down = _cancel_key_down
-};
-
-static void _cancel_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       struct _priv *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_handler, obj);
-               elm_object_focus_allow_set(priv->grid, EINA_TRUE);
-               elm_object_focus_set(priv->grid, EINA_TRUE);
-       }
-}
-
-static input_handler done_handler = {
-       .key_down = _done_key_down
-};
-
-static void _done_key_down(int id, void *data, Evas *e, Evas_Object *obj,
-               Evas_Event_Key_Down *ev)
-{
-       struct _priv *priv = data;
-       char *thumb;
-
-       if (!strcmp(ev->keyname, KEY_ENTER) ||
-                       !strcmp(ev->keyname, KEY_ENTER_REMOTE)) {
-               _delete_popup(priv, &done_handler, obj);
-               elm_object_focus_allow_set(priv->grid, EINA_TRUE);
-               thumb = elm_object_item_data_get(priv->cur);
-               if (thumb) {
-                       viewmgr_update_view(VIEW_USER_EDIT, UPDATE_TYPE_PHOTO,
-                                       thumb);
-                       viewmgr_pop_view();
-               }
-       } else if (!strcmp(ev->keyname, KEY_BACK) ||
-                       !strcmp(ev->keyname, KEY_BACK_REMOTE)) {
-               _delete_popup(priv, &done_handler, obj);
-               elm_object_focus_allow_set(priv->grid, EINA_TRUE);
-               elm_object_focus_set(priv->grid, EINA_TRUE);
-       }
-}
-
 static void _add_viewer_popup(struct _priv *priv, char *file)
 {
        Evas_Object *popup, *ly, *cancel_btn, *done_btn, *img;
@@ -254,7 +284,8 @@ static void _add_viewer_popup(struct _priv *priv, char *file)
                evas_object_del(popup);
                return;
        }
-       inputmgr_add_callback(cancel_btn, 0, &cancel_handler, priv);
+       inputmgr_add_callback(cancel_btn, INPUT_HANDLER_TYPE_CANCEL, &handler,
+                       priv);
 
        done_btn = utils_add_button(ly, MESSAGE_DONE, PART_PHOTO_VIEWER_DONE);
        if (!done_btn) {
@@ -262,7 +293,8 @@ static void _add_viewer_popup(struct _priv *priv, char *file)
                evas_object_del(popup);
                return;
        }
-       inputmgr_add_callback(done_btn, 0, &done_handler, priv);
+       inputmgr_add_callback(done_btn, INPUT_HANDLER_TYPE_DONE, &handler,
+                       priv);
 
        elm_object_focus_set(cancel_btn, EINA_TRUE);
 
@@ -393,12 +425,12 @@ static void _hide(void *data)
 
        priv = data;
        if (priv->ly) {
-               inputmgr_remove_callback(priv->ly, &ly_handler);
+               inputmgr_remove_callback(priv->ly, &handler);
                evas_object_del(priv->ly);
                priv->ly = NULL;
        } else {
                elm_gengrid_item_class_free(priv->grid_ic);
-               inputmgr_remove_callback(priv->grid, &grid_handler);
+               inputmgr_remove_callback(priv->grid, &handler);
                evas_object_del(priv->grid);
                priv->grid = NULL;
        }