Apply the Listener 39/35239/1 submit/tizen_tv/20150212.000322 submit/tizen_tv/20150212.080449
authorMinkyu Kang <mk7.kang@samsung.com>
Wed, 11 Feb 2015 05:45:25 +0000 (14:45 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Wed, 11 Feb 2015 05:45:25 +0000 (14:45 +0900)
Change-Id: I49505ae2bf2a01a26bf776cb864748dce7ce43b9
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
src/control.cpp
src/slider.cpp

index a77f16d..adad5ad 100644 (file)
 #include <Elementary.h>
 #include <Eina.h>
 #include <dbg.h>
+#include <InputHandler.h>
 #include "define.h"
 #include "i18n.h"
 #include "control.h"
 
 #define MAX_CONTROL_BTNS 7
 
+struct control_data;
+
+class CControlHandler :
+       public CListenerMgr,
+       public IMouseMoveListener,
+       public IMouseClickedListener {
+
+private:
+       control_data *m;
+
+public:
+       CControlHandler(control_data *dt) :
+               IMouseMoveListener(this),
+               IMouseClickedListener(this) {
+               m = dt;
+       }
+       virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Mouse_Move *ev);
+       virtual void OnMouseClicked(int id, Evas_Object *obj);
+       int GetEventTypes(void);
+};
+
 struct _event_cb {
        void (*func)(void *data, const char *ev);
        void *data;
@@ -34,6 +57,7 @@ struct control_data {
        Evas_Object *btn[MAX_CONTROL_BTNS];
        int btns;
        struct _event_cb cb;
+       CControlHandler *handler;
 };
 
 static void _event_callback(void *dt, Evas_Object *obj,
@@ -49,17 +73,6 @@ static void _event_callback(void *dt, Evas_Object *obj,
        data->cb.func(data->cb.data, source);
 }
 
-static void _btn_mousemove(void *dt, Evas *e, Evas_Object *obj, void *ei)
-{
-       if (!elm_object_focus_get(obj))
-               elm_object_focus_set(obj, EINA_TRUE);
-}
-
-static void _btn_clicked(void *dt, Evas_Object *obj, void *ev)
-{
-       elm_object_signal_emit(obj, SIG_BTN_ANI_START, "");
-}
-
 static void _set_focus_directions(Evas_Object **btn, int count)
 {
        Evas_Object *obj;
@@ -101,6 +114,9 @@ static int _add_controls(struct control_data *data,
 {
        int i, j;
        char buf[32];
+       CControlHandler *handler;
+
+       handler = data->handler;
 
        for (i = 0; i < count; i++) {
                snprintf(buf, sizeof(buf), "video_btn_%s", btns[i]);
@@ -121,14 +137,11 @@ static int _add_controls(struct control_data *data,
                        break;
                }
 
-               evas_object_smart_callback_add(data->btn[i], SIG_CLICKED,
-                               _btn_clicked, data);
+               handler->Connect(data->btn[i], -1, handler->GetEventTypes());
+
                elm_object_signal_callback_add(data->btn[i],
                                SIG_BTN_ANI_FIN, btns[i],
                                _event_callback, data);
-               evas_object_event_callback_add(data->btn[i],
-                               EVAS_CALLBACK_MOUSE_MOVE,
-                               _btn_mousemove, data);
 
                elm_object_focus_next_object_set(data->btn[i],
                                data->btn[i], ELM_FOCUS_DOWN);
@@ -211,6 +224,7 @@ void control_fini(struct control_data *data)
        if (!data)
                return;
 
+       delete data->handler;
        free(data);
 }
 
@@ -224,5 +238,27 @@ struct control_data *control_init(void)
                return NULL;
        }
 
+       data->handler = new CControlHandler(data);
+
        return data;
 }
+
+void CControlHandler::OnMouseMove(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Mouse_Move *ev)
+{
+       if (!obj)
+               return;
+
+       if (!elm_object_focus_get(obj))
+               elm_object_focus_set(obj, EINA_TRUE);
+}
+
+void CControlHandler::OnMouseClicked(int id, Evas_Object *obj)
+{
+       elm_object_signal_emit(obj, SIG_BTN_ANI_START, "");
+}
+
+int CControlHandler::GetEventTypes(void)
+{
+       return TYPE_MOUSE_MOVE | TYPE_CLICKED;
+}
index e8cf124..e6e74b5 100644 (file)
@@ -17,6 +17,7 @@
 #include <Elementary.h>
 #include <Eina.h>
 #include <dbg.h>
+#include <InputHandler.h>
 #include "define.h"
 #include "playermgr.h"
 #include "slider.h"
 #define TIME_INTERVAL 0.1
 #define SLIDER_STEP 0.05
 
+struct slider_data;
+
+class CSliderHandler :
+       public CListenerMgr,
+       public IMouseMoveListener,
+       public IFocusedListener,
+       public IUnfocusedListener,
+       public IChangedListener {
+
+private:
+       slider_data *m;
+
+public:
+       CSliderHandler(slider_data *dt) :
+               IMouseMoveListener(this),
+               IFocusedListener(this),
+               IUnfocusedListener(this),
+               IChangedListener(this) {
+               m = dt;
+       }
+       virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Mouse_Move *ev);
+       virtual void OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item);
+       virtual void OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item);
+       virtual void OnChanged(int id, Evas_Object *obj);
+       int GetEventTypes(void);
+};
+
 struct slider_data {
        Evas_Object *base;
        Evas_Object *slider;
        Ecore_Timer *timer;
        struct playermgr *player;
+       CSliderHandler *handler;
 };
 
 static void _get_timestr(char *str, int size, unsigned int ms)
@@ -42,15 +72,6 @@ static void _get_timestr(char *str, int size, unsigned int ms)
                        sec / 3600, (sec % 3600) / 60, sec % 60);
 }
 
-static void _slider_btn_mousemove(void *dt, Evas *e, Evas_Object *obj, void *ei)
-{
-       if (!obj)
-               return;
-
-       if (!elm_object_focus_get(obj))
-               elm_object_focus_set(obj, EINA_TRUE);
-}
-
 static void _slider_seek_completed(void *dt)
 {
        struct slider_data *data;
@@ -75,49 +96,6 @@ static void _slider_seek_completed(void *dt)
        slider_resume(data);
 }
 
-static void _slider_value_changed(void *dt, Evas_Object *obj, void *ev)
-{
-       struct slider_data *data;
-       int v, r;
-
-       if (!dt)
-               return;
-
-       data = (slider_data *)dt;
-
-       slider_pause(data);
-
-       v = elm_slider_value_get(obj);
-       r = playermgr_set_position(data->player,
-                       v, _slider_seek_completed, data);
-       if (r < 0)
-               slider_resume(data);
-}
-
-static void _slider_focused(void *dt, Evas_Object *obj, void *ev)
-{
-       struct slider_data *data;
-
-       if (!dt)
-               return;
-
-       data = (slider_data *)dt;
-
-       elm_object_signal_emit(data->base, SIG_SLIDER_FOCUS, "");
-}
-
-static void _slider_unfocused(void *dt, Evas_Object *obj, void *ev)
-{
-       struct slider_data *data;
-
-       if (!dt)
-               return;
-
-       data = (slider_data *)dt;
-
-       elm_object_signal_emit(data->base, SIG_SLIDER_UNFOCUS, "");
-}
-
 static Eina_Bool _slider_timer_cb(void *dt)
 {
        struct slider_data *data;
@@ -198,6 +176,7 @@ Eina_Bool slider_add_bar(struct slider_data *data, Evas_Object *base,
                struct playermgr *player)
 {
        Evas_Object *slider;
+       CSliderHandler *handler;
 
        if (!data || !base) {
                _ERR("invalid parameter");
@@ -221,15 +200,8 @@ Eina_Bool slider_add_bar(struct slider_data *data, Evas_Object *base,
        elm_slider_horizontal_set(slider, EINA_TRUE);
        elm_slider_step_set(slider, SLIDER_STEP);
 
-       evas_object_event_callback_add(slider,
-                       EVAS_CALLBACK_MOUSE_MOVE,
-                       _slider_btn_mousemove, data);
-       evas_object_smart_callback_add(slider, SIG_FOCUSED,
-                       _slider_focused, data);
-       evas_object_smart_callback_add(slider, SIG_UNFOCUSED,
-                       _slider_unfocused, data);
-       evas_object_smart_callback_add(slider, SIG_CHANGED,
-                       _slider_value_changed, data);
+       handler = data->handler;
+       handler->Connect(slider, -1, handler->GetEventTypes());
 
        elm_object_part_content_set(base, PART_SLIDER, slider);
 
@@ -251,6 +223,7 @@ void slider_fini(struct slider_data *data)
                return;
 
        ecore_timer_del(data->timer);
+       delete data->handler;
        free(data);
 }
 
@@ -264,5 +237,45 @@ struct slider_data *slider_init(void)
                return NULL;
        }
 
+       data->handler = new CSliderHandler(data);
+
        return data;
 }
+
+void CSliderHandler::OnMouseMove(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Mouse_Move *ev)
+{
+       if (!obj)
+               return;
+
+       if (!elm_object_focus_get(obj))
+               elm_object_focus_set(obj, EINA_TRUE);
+}
+
+void CSliderHandler::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       elm_object_signal_emit(m->base, SIG_SLIDER_FOCUS, "");
+}
+
+void CSliderHandler::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+{
+       elm_object_signal_emit(m->base, SIG_SLIDER_UNFOCUS, "");
+}
+
+void CSliderHandler::OnChanged(int id, Evas_Object *obj)
+{
+       int v, r;
+
+       slider_pause(m);
+
+       v = elm_slider_value_get(obj);
+       r = playermgr_set_position(m->player, v, _slider_seek_completed, m);
+       if (r < 0)
+               slider_resume(m);
+}
+
+int CSliderHandler::GetEventTypes(void)
+{
+       return TYPE_MOUSE_MOVE | TYPE_FOCUSED |
+               TYPE_UNFOCUSED | TYPE_CHANGED;
+}