#ifndef __SLIDER_H__
#define __SLIDER_H__
-struct slider_data;
+struct SSliderData;
-/**
- * Init slider data
- *
- * @return the pointer of allocated slider_data struct
- */
-struct slider_data *slider_init(void);
+class CVideoSlider :
+ public CListenerMgr,
+ public IMouseMoveListener,
+ public IMouseDownListener,
+ public IMouseUpListener,
+ public IFocusedListener,
+ public IUnfocusedListener,
+ public IChangedListener {
+private:
+ SSliderData *m;
-/**
- * Fini slider data
- *
- * @param data the pointer of slider_data struct
- */
-void slider_fini(struct slider_data *data);
+private:
+ void m_SetTimer(void);
+ int m_GetEventTypes(void);
-/**
- * Add a slider bar
- *
- * @param data the pointer of slider_data struct
- * @param base the base object of slider layout
- * @param player the pointer of playermgr struct
- * @return if success EINA_TRUE is returned otherwise will return EINA_FALSE
- */
-Eina_Bool slider_add_bar(struct slider_data *data, Evas_Object *base,
- struct playermgr *player);
+private:
+ static Eina_Bool sm_CbTimer(void *dt);
-/**
- * Reset the slider data
- *
- * @param data the pointer of slider_data struct
- * @param duration duration time of video file
- */
-void slider_reset(struct slider_data *data, int duration);
+public:
+ CVideoSlider(void) :
+ IMouseMoveListener(this),
+ IMouseDownListener(this),
+ IMouseUpListener(this),
+ IFocusedListener(this),
+ IUnfocusedListener(this),
+ IChangedListener(this), m(0) {}
+ virtual ~CVideoSlider(void) {}
-/**
- * Resume the slider timer
- *
- * @param data the pointer of slider_data struct
- */
-void slider_resume(struct slider_data *data);
+ /**
+ * Create the slider
+ *
+ * @param base the base object of slider layout
+ * @param player the pointer of playermgr struct
+ * @return if success true is returned otherwise will return false
+ */
+ bool Create(Evas_Object *base, playermgr *player);
-/**
- * Pause the slider timer
- *
- * @param data the pointer of slider_data struct
- */
-void slider_pause(struct slider_data *data);
+ /**
+ * Destroy the slider
+ */
+ void Destroy(void);
+
+ /**
+ * Reset the slider
+ *
+ * @param duration duration time of video file
+ */
+ void Reset(int duration);
+
+ /**
+ * Resume the slider timer
+ */
+ void Resume(void);
+
+ /**
+ * Pause the slider timer
+ */
+ void Pause(void);
+
+ /* Listeners */
+ virtual void OnMouseMove(int id, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Move *ev);
+ virtual void OnMouseDown(int id, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Down *ev);
+ virtual void OnMouseUp(int id, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Up *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);
+};
#endif
#include <Elementary.h>
#include <Eina.h>
#include <dbg.h>
+#include <AppCommon.h>
+#include <ViewMgr.h>
+#include <BaseView.h>
#include <InputHandler.h>
#include "define.h"
#include "playermgr.h"
#include "slider.h"
+#include "view_player.h"
#define TIME_STR_START "00:00:00"
#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 {
+struct SSliderData {
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)
static void _slider_seek_completed(void *dt)
{
- struct slider_data *data;
+ SSliderData *data;
char str[32];
int pos, r;
+ update_action action;
if (!dt)
return;
- data = (slider_data *)dt;
+ data = (SSliderData *)dt;
r = playermgr_get_position(data->player, &pos);
if (r < 0) {
_ERR("Get Position Failed");
- slider_resume(data);
return;
}
_get_timestr(str, sizeof(str), pos);
elm_object_part_text_set(data->base, PART_CURTIME_TEXT, str);
- slider_resume(data);
+ action = ACTION_RESUME;
+ CViewMgr::GetInstance()->UpdateView(VIEW_ID_PLAYER, (void *)&action);
}
-static Eina_Bool _slider_timer_cb(void *dt)
+Eina_Bool CVideoSlider::sm_CbTimer(void *dt)
{
- struct slider_data *data;
+ SSliderData *data;
int pos, r;
char str[32];
if (!dt)
return ECORE_CALLBACK_CANCEL;
- data = (slider_data *)dt;
+ data = (SSliderData *)dt;
if (!data->player)
goto error;
return ECORE_CALLBACK_CANCEL;
}
-static void _slider_set_timer(struct slider_data *data)
+void CVideoSlider::m_SetTimer(void)
{
- if (data->timer)
- ecore_timer_reset(data->timer);
+ ASSERT(m);
+
+ if (m->timer)
+ ecore_timer_reset(m->timer);
else
- data->timer = ecore_timer_add(TIME_INTERVAL,
- _slider_timer_cb, data);
+ m->timer = ecore_timer_add(TIME_INTERVAL, sm_CbTimer, m);
}
-void slider_pause(struct slider_data *data)
+void CVideoSlider::Pause(void)
{
- if (!data)
- return;
+ ASSERT(m);
- if (data->timer)
- ecore_timer_freeze(data->timer);
+ if (m->timer)
+ ecore_timer_freeze(m->timer);
}
-void slider_resume(struct slider_data *data)
+void CVideoSlider::Resume(void)
{
- if (!data)
- return;
+ ASSERT(m);
- if (data->timer)
- ecore_timer_thaw(data->timer);
+ if (m->timer)
+ ecore_timer_thaw(m->timer);
}
-void slider_reset(struct slider_data *data, int duration)
+void CVideoSlider::Reset(int duration)
{
- char str[32];
+ ASSERT(m);
- if (!data)
- return;
+ char str[32];
- ecore_timer_del(data->timer);
- data->timer = ecore_timer_add(TIME_INTERVAL, _slider_timer_cb, data);
+ ecore_timer_del(m->timer);
+ m->timer = ecore_timer_add(TIME_INTERVAL, sm_CbTimer, m);
- elm_slider_value_set(data->slider, 0);
- elm_slider_min_max_set(data->slider, 0, duration);
+ elm_slider_value_set(m->slider, 0);
+ elm_slider_min_max_set(m->slider, 0, duration);
_get_timestr(str, sizeof(str), duration);
- elm_object_part_text_set(data->base, PART_CURTIME_TEXT, TIME_STR_START);
- elm_object_part_text_set(data->base, PART_TOTALTIME_TEXT, str);
+ elm_object_part_text_set(m->base, PART_CURTIME_TEXT, TIME_STR_START);
+ elm_object_part_text_set(m->base, PART_TOTALTIME_TEXT, str);
}
-Eina_Bool slider_add_bar(struct slider_data *data, Evas_Object *base,
- struct playermgr *player)
+bool CVideoSlider::Create(Evas_Object *base, playermgr *player)
{
+ ASSERT(!m);
+
Evas_Object *slider;
- CSliderHandler *handler;
- if (!data || !base) {
+ if (!base) {
_ERR("invalid parameter");
- return EINA_FALSE;
+ return false;
}
- if (data->slider) {
- _slider_set_timer(data);
- return EINA_TRUE;
+ m = new SSliderData;
+ if (!m) {
+ _ERR("failed to add slider");
+ return false;
}
slider = elm_slider_add(base);
if (!slider) {
_ERR("failed to add slider");
- return EINA_FALSE;
+ return true;
}
elm_slider_indicator_show_set(slider, EINA_FALSE);
elm_slider_horizontal_set(slider, EINA_TRUE);
elm_slider_step_set(slider, SLIDER_STEP);
- handler = data->handler;
- handler->Connect(slider, -1, handler->GetEventTypes());
+ Connect(slider, -1, m_GetEventTypes());
elm_object_part_content_set(base, PART_SLIDER, slider);
- data->base = base;
- data->slider = slider;
- data->player = player;
+ m->base = base;
+ m->slider = slider;
+ m->player = player;
if (player)
- _slider_set_timer(data);
+ m_SetTimer();
else
elm_object_focus_allow_set(slider, EINA_FALSE);
- return EINA_TRUE;
+ return true;
}
-void slider_fini(struct slider_data *data)
+void CVideoSlider::Destroy(void)
{
- if (!data)
- return;
+ ecore_timer_del(m->timer);
- ecore_timer_del(data->timer);
- delete data->handler;
- free(data);
+ delete m;
+ m = NULL;
}
-struct slider_data *slider_init(void)
+void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Down *ev)
{
- struct slider_data *data;
+ update_action action;
- data = (slider_data *)calloc(1, sizeof(*data));
- if (!data) {
- _ERR("allocation fail");
- return NULL;
- }
+ action = ACTION_PAUSE;
+ CViewMgr::GetInstance()->UpdateView(VIEW_ID_PLAYER, (void *)&action);
+}
- data->handler = new CSliderHandler(data);
+void CVideoSlider::OnMouseUp(int id, Evas *e, Evas_Object *obj,
+ Evas_Event_Mouse_Up *ev)
+{
+ int v;
- return data;
+ v = elm_slider_value_get(obj);
+ playermgr_set_position(m->player, v, _slider_seek_completed, m);
}
-void CSliderHandler::OnMouseMove(int id, Evas *e, Evas_Object *obj,
+void CVideoSlider::OnMouseMove(int id, Evas *e, Evas_Object *obj,
Evas_Event_Mouse_Move *ev)
{
if (!obj)
elm_object_focus_set(obj, EINA_TRUE);
}
-void CSliderHandler::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
+void CVideoSlider::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)
+void CVideoSlider::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)
+void CVideoSlider::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)
+int CVideoSlider::m_GetEventTypes(void)
{
- return TYPE_MOUSE_MOVE | TYPE_FOCUSED |
- TYPE_UNFOCUSED | TYPE_CHANGED;
+ return TYPE_MOUSE_MOVE | TYPE_MOUSE_DOWN | TYPE_MOUSE_UP |
+ TYPE_FOCUSED | TYPE_UNFOCUSED | TYPE_CHANGED;
}
#include <AppCommon.h>
#include <ViewMgr.h>
#include <BaseView.h>
+#include <InputHandler.h>
#include <dbg.h>
#include "define.h"
#include "i18n.h"
"settings"
};
-enum update_action {
- ACTION_HIDE,
- ACTION_SHOW,
- ACTION_PLAY
-};
-
typedef void (*btn_event_cb)(void *dt);
struct SPlayerView {
struct playermgr *player;
struct control_data *control;
struct volume_data *volume;
- struct slider_data *slider;
+
+ CVideoSlider *slider;
struct timeout_handler *timeout_handle;
bool bar_hidden;
elm_object_part_text_set(m->base, PART_RESOLUTIONTEXT, buf);
}
-bool CPlayerView::m_PlayVideo(void)
+bool CPlayerView::m_PlayerInit(void)
{
struct mediadata *md;
const char *path;
mediadata_destroy(md);
}
- slider_reset(m->slider, m->duration);
+ m->slider->Reset(m->duration);
control_signal_emit(m->control, E_PLAYPAUSE_BTN, SIG_SET_PAUSE, "");
if (m->bar_hidden) {
r = playermgr_set_rew(data->player, data->duration);
if (r > 0) {
- slider_pause(data->slider);
+ data->slider->Pause();
control_signal_emit(data->control, E_PLAYPAUSE_BTN,
SIG_SET_PLAY, "");
}
r = playermgr_set_ff(data->player, data->duration);
if (r > 0) {
- slider_pause(data->slider);
+ data->slider->Pause();
control_signal_emit(data->control, E_PLAYPAUSE_BTN,
SIG_SET_PLAY, "");
}
playermgr_stop_ffrew(data->player);
playermgr_set_prev_video(data->player);
- action = ACTION_PLAY;
+ action = ACTION_INIT;
CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
}
playermgr_stop_ffrew(data->player);
playermgr_set_next_video(data->player, EINA_TRUE);
- action = ACTION_PLAY;
+ action = ACTION_INIT;
CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
}
if (playermgr_get_ffrew(data->player)) {
playermgr_stop_ffrew(data->player);
playermgr_resume(data->player);
- slider_resume(data->slider);
+ data->slider->Resume();
return;
}
switch (state) {
case PLAYER_STATE_PLAYING:
playermgr_pause(data->player);
- slider_pause(data->slider);
+ data->slider->Pause();
break;
case PLAYER_STATE_PAUSED:
playermgr_resume(data->player);
- slider_resume(data->slider);
+ data->slider->Resume();
break;
default:
break;
if (!r)
elm_exit();
- action = ACTION_PLAY;
+ action = ACTION_INIT;
CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
}
if (m->bar_hidden) {
elm_object_signal_emit(m->base, SIG_SHOW_VIEW, "");
m->bar_hidden = false;
- slider_resume(m->slider);
+ m->slider->Resume();
}
}
elm_object_signal_emit(m->base, SIG_HIDE_VIEW, "");
m->bar_hidden = true;
- slider_pause(m->slider);
+ m->slider->Pause();
control_hide(m->control);
}
control_handler_init(m->control, sm_EvtControlBtn, m);
- if (!slider_add_bar(m->slider, m->base, m->player))
+ if (!m->slider->Create(m->base, m->player))
return false;
if (!volume_add_bar(m->volume, m->win))
return ECORE_CALLBACK_CANCEL;
}
-void CPlayerView::m_PlayerInit(SPlayerParam *param)
+void CPlayerView::m_ControlInit(SPlayerParam *param)
{
int r;
if (!m->volume)
_ERR("volume init failed");
- m->slider = slider_init();
+ m->slider = new CVideoSlider;
if (!m->slider)
_ERR("slider init failed");
}
m->win = win;
m->error = false;
- m_PlayerInit((SPlayerParam *)data);
+ m_ControlInit((SPlayerParam *)data);
r = m_UiInit();
if (!r) {
return false;
}
- if (!m_PlayVideo()) {
+ if (!m_PlayerInit()) {
_ERR("failed to play video");
m->error = true;
playermgr_fini(m->player);
volume_fini(m->volume);
- slider_fini(m->slider);
control_fini(m->control);
timeout_handler_fini(m->timeout_handle);
free(m->id);
+ m->slider->Destroy();
+ delete m->slider;
+
delete m;
m = NULL;
}
case ACTION_SHOW:
m_ShowBar();
break;
- case ACTION_PLAY:
- m_PlayVideo();
+ case ACTION_RESUME:
+ playermgr_resume(m->player);
+ m->slider->Resume();
+ break;
+ case ACTION_PAUSE:
+ playermgr_pause(m->player);
+ m->slider->Pause();
+ break;
+ case ACTION_INIT:
+ m_PlayerInit();
break;
}
}