viewer: add callback functions 59/42359/1
authorMinkyu Kang <mk7.kang@samsung.com>
Fri, 26 Jun 2015 10:55:15 +0000 (19:55 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Fri, 26 Jun 2015 10:55:15 +0000 (19:55 +0900)
Change-Id: I97773d360e04cd352b4995f8cf07f04b6fe32304
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
include/view/viewer.h
res/edc/widgets/button.edc
src/util/controller.c
src/view/viewer.c

index c9e5f3246b777c7ea92c35fe8fb85f7b75353294..33cdc146f6694bafd6b86fe2f88fd106cabf9997 100644 (file)
 #define SIG_BTN_CLICKED "btn,clicked"
 #define SIG_BTN_CALLBACK "btn,callback"
 
+/* source */
+#define SRC_BTN_PREV "prev"
+#define SRC_BTN_REW "rew"
+#define SRC_BTN_PLAY "play"
+#define SRC_BTN_FF "ff"
+#define SRC_BTN_NEXT "next"
+#define SRC_BTN_PHOTO_PREV "prev_photo"
+#define SRC_BTN_PHOTO_NEXT "next_photo"
+
 /* images */
 #define IMAGE_VIEWER_FAVORITE IMAGEDIR"/ic_title_favorite.png"
 
index 92b60467acec816a4fcebc6fdb5fcaf3acd16c15..b049524b39e3698b477f142b13767a7ff580525f 100644 (file)
@@ -179,7 +179,7 @@ group {
                }
                program {
                        name: "emit,signal";
-                       action: SIGNAL_EMIT SIG_BTN_CALLBACK "prev";
+                       action: SIGNAL_EMIT SIG_BTN_CALLBACK SRC_BTN_PREV;
                }
                program {
                        name: "focused";
@@ -231,7 +231,7 @@ group {
        programs {
                program {
                        name: "emit,signal";
-                       action: SIGNAL_EMIT SIG_BTN_CALLBACK "rew";
+                       action: SIGNAL_EMIT SIG_BTN_CALLBACK SRC_BTN_REW;
                }
        }
 }
@@ -265,7 +265,7 @@ group {
        programs {
                program {
                        name: "emit,signal";
-                       action: SIGNAL_EMIT SIG_BTN_CALLBACK "ff";
+                       action: SIGNAL_EMIT SIG_BTN_CALLBACK SRC_BTN_FF;
                }
        }
 }
@@ -299,7 +299,7 @@ group {
        programs {
                program {
                        name: "emit,signal";
-                       action: SIGNAL_EMIT SIG_BTN_CALLBACK "next";
+                       action: SIGNAL_EMIT SIG_BTN_CALLBACK SRC_BTN_NEXT;
                }
        }
 }
@@ -333,7 +333,7 @@ group {
        programs {
                program {
                        name: "emit,signal";
-                       action: SIGNAL_EMIT SIG_BTN_CALLBACK "prev";
+                       action: SIGNAL_EMIT SIG_BTN_CALLBACK SRC_BTN_PHOTO_PREV;
                }
        }
 }
@@ -367,7 +367,7 @@ group {
        programs {
                program {
                        name: "emit,signal";
-                       action: SIGNAL_EMIT SIG_BTN_CALLBACK "next";
+                       action: SIGNAL_EMIT SIG_BTN_CALLBACK SRC_BTN_PHOTO_NEXT;
                }
        }
 }
@@ -482,7 +482,7 @@ group {
                }
                program {
                        name: "emit,signal";
-                       action: SIGNAL_EMIT SIG_BTN_CALLBACK "play";
+                       action: SIGNAL_EMIT SIG_BTN_CALLBACK SRC_BTN_PLAY;
                }
                program {
                        name: "focused";
index f4b3799ada6d1dce5305cd320de0eff5e042c1b5..1be6e8c5a519bb9e7600c305e38d59a29bce9a49 100644 (file)
@@ -80,7 +80,6 @@ static Evas_Object *_add_btn(Evas_Object *base, const char *style)
                return NULL;
 
        elm_object_style_set(btn, style);
-       evas_object_show(btn);
 
        return btn;
 }
@@ -218,6 +217,7 @@ static void _hide(void *handle)
                        continue;
 
                evas_object_freeze_events_set(ctl->obj, EINA_TRUE);
+               elm_object_focus_set(ctl->obj, false);
                elm_object_focus_allow_set(ctl->obj, EINA_FALSE);
 
                evas_object_hide(ctl->obj);
index 4202bac0cde3c6900b6fcb16a162de6b0ae7a123..c306ab6af4d30463b183b26b94404ab73f7861a8 100644 (file)
@@ -37,6 +37,12 @@ enum {
        VIEWER_MAX
 };
 
+enum {
+       DIR_NONE,
+       DIR_PREV,
+       DIR_NEXT
+};
+
 struct _viewer {
        struct controller *ctl[VIEWER_MAX];
        int cur;
@@ -62,57 +68,57 @@ struct _btn_info {
 
 static struct _btn_info btn_movie[] = {
        {
-               .name = "prev",
+               .name = SRC_BTN_PREV,
                .loc = 0,
        },
        {
-               .name = "rew",
+               .name = SRC_BTN_REW,
                .loc = 1,
        },
        {
-               .name = "play",
+               .name = SRC_BTN_PLAY,
                .loc = 2,
        },
        {
-               .name = "ff",
+               .name = SRC_BTN_FF,
                .loc = 3,
        },
        {
-               .name = "next",
+               .name = SRC_BTN_NEXT,
                .loc = 4,
        },
 };
 
 static struct _btn_info btn_photo[] = {
        {
-               .name = "prev_photo",
+               .name = SRC_BTN_PHOTO_PREV,
                .loc = 0,
        },
        {
-               .name = "next_photo",
+               .name = SRC_BTN_PHOTO_NEXT,
                .loc = 4,
        },
 };
 
 static struct _btn_info btn_video[] = {
        {
-               .name = "prev",
+               .name = SRC_BTN_PREV,
                .loc = 0,
        },
        {
-               .name = "rew",
+               .name = SRC_BTN_REW,
                .loc = 1,
        },
        {
-               .name = "play",
+               .name = SRC_BTN_PLAY,
                .loc = 2,
        },
        {
-               .name = "ff",
+               .name = SRC_BTN_FF,
                .loc = 3,
        },
        {
-               .name = "next",
+               .name = SRC_BTN_NEXT,
                .loc = 4,
        },
 };
@@ -121,23 +127,31 @@ struct _viewer_info {
        struct _btn_info *btns;
        int btn_count;
        int focus_loc;
+       void (*callback)(void *, const char *);
 };
 
+static void _callback_movie(void *data, const char *ev);
+static void _callback_photo(void *data, const char *ev);
+static void _callback_video(void *data, const char *ev);
+
 static struct _viewer_info viewer_info[] = {
        {
                .btns = btn_movie,
                .btn_count = 5,
                .focus_loc = 2,
+               .callback = _callback_movie,
        },
        {
                .btns = btn_photo,
                .btn_count = 2,
                .focus_loc = 1,
+               .callback = _callback_photo,
        },
        {
                .btns = btn_video,
                .btn_count = 5,
                .focus_loc = 4,
+               .callback = _callback_video,
        },
 };
 
@@ -269,11 +283,12 @@ static void _draw_favorite_icon(struct _priv *priv, int id, app_media_info *mi)
        elm_object_part_content_set(priv->base, PART_VIEWER_FAVORITE, img);
 }
 
-static bool _viewer_show(struct _priv *priv, int cur)
+static bool _viewer_show(struct _priv *priv, int cur, int foc)
 {
        struct _viewer_info *info;
        struct controller *ctl;
        int id;
+       int loc;
        app_media *am;
        app_media_info *mi;
 
@@ -310,7 +325,20 @@ static bool _viewer_show(struct _priv *priv, int cur)
        priv->viewer.cur = id;
 
        ctl->ops->show(ctl->handle);
-       ctl->ops->focus(ctl->handle, info->focus_loc, true);
+
+       switch (foc) {
+       case DIR_PREV:
+               loc = 0;
+               break;
+       case DIR_NEXT:
+               loc = info->btn_count - 1;
+               break;
+       case DIR_NONE:
+       default:
+               loc = info->focus_loc;
+               break;
+       }
+       ctl->ops->focus(ctl->handle, loc, true);
 
        _draw_title_bar(priv, id, mi);
        _draw_time_info(priv, id, mi);
@@ -349,6 +377,8 @@ static bool _viewer_add(struct _priv *priv, int id)
                                STYLE_VIEWER_BTN, PART_VIEWER_BTN);
        }
 
+       ctl->ops->add_callback(ctl->handle, info->callback, priv);
+
        priv->viewer.ctl[id] = ctl;
 
        return true;
@@ -366,6 +396,44 @@ static void _viewer_delete(struct _priv *priv)
        }
 }
 
+static bool _viewer_prev(struct _priv *priv)
+{
+       int total;
+       bool r;
+
+       _viewer_hide(priv);
+
+       total = eina_list_count(priv->playlist.list);
+
+       if (priv->playlist.cur == 0)
+               priv->playlist.cur = total - 1;
+       else
+               priv->playlist.cur--;
+
+       r = _viewer_show(priv, priv->playlist.cur, DIR_PREV);
+
+       return r;
+}
+
+static bool _viewer_next(struct _priv *priv)
+{
+       int total;
+       bool r;
+
+       _viewer_hide(priv);
+
+       total = eina_list_count(priv->playlist.list);
+
+       if (priv->playlist.cur == total - 1)
+               priv->playlist.cur = 0;
+       else
+               priv->playlist.cur++;
+
+       r = _viewer_show(priv, priv->playlist.cur, DIR_NEXT);
+
+       return r;
+}
+
 static bool _ui_init(struct _priv *priv)
 {
        bool r;
@@ -384,6 +452,42 @@ err:
        return false;
 }
 
+static void _callback_movie(void *data, const char *ev)
+{
+}
+
+static void _callback_photo(void *data, const char *ev)
+{
+       struct _priv *priv;
+
+       if (!data || !ev)
+               return;
+
+       priv = data;
+
+       if (!strcmp(ev, SRC_BTN_PHOTO_PREV)) {
+               _viewer_prev(priv);
+       } else if (!strcmp(ev, SRC_BTN_PHOTO_NEXT)) {
+               _viewer_next(priv);
+       }
+}
+
+static void _callback_video(void *data, const char *ev)
+{
+       struct _priv *priv;
+
+       if (!data || !ev)
+               return;
+
+       priv = data;
+
+       if (!strcmp(ev, SRC_BTN_PREV)) {
+               _viewer_prev(priv);
+       } else if (!strcmp(ev, SRC_BTN_NEXT)) {
+               _viewer_next(priv);
+       }
+}
+
 static Evas_Object *_create(Evas_Object *win, void *data)
 {
        struct _priv *priv;
@@ -446,7 +550,7 @@ static void _show(void *view_data)
        priv = view_data;
 
        /* FIXME: test code */
-       _viewer_show(priv, 1);
+       _viewer_show(priv, priv->playlist.cur, DIR_NONE);
 
        evas_object_show(priv->base);
 }