#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;
Evas_Object *btn[MAX_CONTROL_BTNS];
int btns;
struct _event_cb cb;
+ CControlHandler *handler;
};
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;
{
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]);
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);
if (!data)
return;
+ delete data->handler;
free(data);
}
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;
+}
#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)
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;
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;
struct playermgr *player)
{
Evas_Object *slider;
+ CSliderHandler *handler;
if (!data || !base) {
_ERR("invalid parameter");
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);
return;
ecore_timer_del(data->timer);
+ delete data->handler;
free(data);
}
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;
+}