slider: add key up/down handlers for seek from slider bar using keys 31/38131/1 accepted/tizen/tv/20150414.013002 submit/tizen_tv/20150413.233545
authorMinkyu Kang <mk7.kang@samsung.com>
Mon, 13 Apr 2015 12:23:14 +0000 (21:23 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Mon, 13 Apr 2015 12:23:14 +0000 (21:23 +0900)
Change-Id: Ic8840a595dd83738f467d3e0130660aeb44466f8
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
include/slider.h
src/playermgr.cpp
src/slider.cpp
src/view_player.cpp

index 7dc00fd..f338b0b 100644 (file)
@@ -21,6 +21,8 @@ struct SSliderData;
 
 class CVideoSlider :
        public CListenerMgr,
+       public IKeyDownListener,
+       public IKeyUpListener,
        public IMouseMoveListener,
        public IMouseDownListener,
        public IMouseUpListener,
@@ -31,10 +33,17 @@ private:
        SSliderData *m;
 
 private:
+       void m_SeekStart(Evas_Object *obj);
+       void m_SeekEnd(Evas_Object *obj);
+
+private:
        static Eina_Bool sm_CbTimer(void *dt);
+       static void sm_SeekCb(void *dt);
 
 public:
        CVideoSlider(void) :
+               IKeyDownListener(this),
+               IKeyUpListener(this),
                IMouseMoveListener(this),
                IMouseDownListener(this),
                IMouseUpListener(this),
@@ -76,6 +85,10 @@ public:
        void Pause(void);
 
        /* Listeners */
+       virtual void OnKeyDown(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Key_Down *ev);
+       virtual void OnKeyUp(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Key_Up *ev);
        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,
index 3609aad..b18aab2 100644 (file)
@@ -278,9 +278,15 @@ const char *CPlayer::GetPath(void)
 
 bool CPlayer::Pause(void)
 {
+       player_state_e state;
+
        ASSERT(m);
        ASSERT(m->player);
 
+       GetState(&state);
+       if (state == PLAYER_STATE_PAUSED)
+               return true;
+
        if (player_pause(m->player) != PLAYER_ERROR_NONE) {
                _ERR("Player pause error");
                return false;
@@ -291,9 +297,15 @@ bool CPlayer::Pause(void)
 
 bool CPlayer::Resume(void)
 {
+       player_state_e state;
+
        ASSERT(m);
        ASSERT(m->player);
 
+       GetState(&state);
+       if (state == PLAYER_STATE_PLAYING)
+               return true;
+
        if (player_start(m->player) != PLAYER_ERROR_NONE) {
                _ERR("Player resume error");
                return false;
index f74e554..c4f44d0 100644 (file)
@@ -28,7 +28,8 @@
 
 #define TIME_STR_START "00:00:00"
 #define TIME_INTERVAL 0.1
-#define SLIDER_STEP 0.05
+#define SLIDER_DEFAULT 0.05
+#define SLIDER_STEP 0.03
 
 struct SSliderData {
        Evas_Object *base;
@@ -47,7 +48,7 @@ static void _get_timestr(char *str, int size, unsigned int ms)
                        sec / 3600, (sec % 3600) / 60, sec % 60);
 }
 
-static void _slider_seek_completed(void *dt)
+void CVideoSlider::sm_SeekCb(void *dt)
 {
        SSliderData *data;
        char str[32];
@@ -132,6 +133,7 @@ void CVideoSlider::Reset(int duration, int position)
 
        elm_slider_value_set(m->slider, position);
        elm_slider_min_max_set(m->slider, 0, duration);
+       elm_slider_step_set(m->slider, SLIDER_STEP);
 
        _get_timestr(str, sizeof(str), duration);
        elm_object_part_text_set(m->base, PART_CURTIME_TEXT, TIME_STR_START);
@@ -162,9 +164,10 @@ bool CVideoSlider::Create(Evas_Object *base, CPlayer *player)
        elm_slider_indicator_show_on_focus_set(slider, EINA_FALSE);
        elm_object_style_set(slider, STYLE_SLIDER);
        elm_slider_horizontal_set(slider, EINA_TRUE);
-       elm_slider_step_set(slider, SLIDER_STEP);
+       elm_slider_step_set(slider, SLIDER_DEFAULT);
 
-       Connect(slider, -1, TYPE_MOUSE_MOVE | TYPE_MOUSE_DOWN | TYPE_MOUSE_UP |
+       Connect(slider, -1, TYPE_KEY_DOWN | TYPE_KEY_UP |
+                       TYPE_MOUSE_MOVE | TYPE_MOUSE_DOWN | TYPE_MOUSE_UP |
                        TYPE_FOCUSED | TYPE_UNFOCUSED | TYPE_CHANGED);
 
        elm_object_part_content_set(base, PART_SLIDER, slider);
@@ -186,8 +189,7 @@ void CVideoSlider::Destroy(void)
        m = NULL;
 }
 
-void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
-                       Evas_Event_Mouse_Down *ev)
+void CVideoSlider::m_SeekStart(Evas_Object *obj)
 {
        update_action action;
 
@@ -195,13 +197,44 @@ void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
        CViewMgr::GetInstance()->UpdateView(VIEW_ID_PLAYER, (void *)&action);
 }
 
-void CVideoSlider::OnMouseUp(int id, Evas *e, Evas_Object *obj,
-                       Evas_Event_Mouse_Up *ev)
+void CVideoSlider::m_SeekEnd(Evas_Object *obj)
 {
        int v;
 
        v = elm_slider_value_get(obj);
-       m->player->SetPosition(v, _slider_seek_completed, m);
+       m->player->SetPosition(v, sm_SeekCb, m);
+}
+
+void CVideoSlider::OnKeyDown(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Key_Down *ev)
+{
+       if (strcmp(ev->keyname, KEY_RIGHT) &&
+                       strcmp(ev->keyname, KEY_LEFT))
+               return;
+
+       m_SeekStart(obj);
+}
+
+void CVideoSlider::OnKeyUp(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Key_Up *ev)
+{
+       if (strcmp(ev->keyname, KEY_RIGHT) &&
+                       strcmp(ev->keyname, KEY_LEFT))
+               return;
+
+       m_SeekEnd(obj);
+}
+
+void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Mouse_Down *ev)
+{
+       m_SeekStart(obj);
+}
+
+void CVideoSlider::OnMouseUp(int id, Evas *e, Evas_Object *obj,
+                       Evas_Event_Mouse_Up *ev)
+{
+       m_SeekEnd(obj);
 }
 
 void CVideoSlider::OnMouseMove(int id, Evas *e, Evas_Object *obj,
@@ -226,4 +259,10 @@ void CVideoSlider::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
 
 void CVideoSlider::OnChanged(int id, Evas_Object *obj)
 {
+       char str[32];
+       int v;
+
+       v = elm_slider_value_get(obj);
+       _get_timestr(str, sizeof(str), v);
+       elm_object_part_text_set(m->base, PART_CURTIME_TEXT, str);
 }
index b371223..1537620 100644 (file)
@@ -711,10 +711,14 @@ void CPlayerView::t_OnUpdate(void *dt)
        case ACTION_RESUME:
                m->player->Resume();
                m->slider->Resume();
+               m->control->Signal(E_PLAYPAUSE_BTN, SIG_SET_PAUSE, "");
+               timeout_handler_reset(m->timeout_handle);
                break;
        case ACTION_PAUSE:
                m->player->Pause();
                m->slider->Pause();
+               m->control->Signal(E_PLAYPAUSE_BTN, SIG_SET_PLAY, "");
+               timeout_handler_reset(m->timeout_handle);
                break;
        case ACTION_INIT:
                m_PlayerInit();