Apply CViewMgr and CBaseView 62/34962/3
authorMinkyu Kang <mk7.kang@samsung.com>
Thu, 5 Feb 2015 04:34:57 +0000 (13:34 +0900)
committerMinkyu Kang <mk7.kang@samsung.com>
Thu, 5 Feb 2015 06:14:18 +0000 (15:14 +0900)
view_player is converted to CPlayerView

Change-Id: If8f7688b3e0a27b188658bea2cf303bb0f088ec8
Signed-off-by: Minkyu Kang <mk7.kang@samsung.com>
include/dbg.h
include/define.h
include/playermgr.h
include/view_player.h
src/main.cpp
src/playermgr.cpp
src/view_player.cpp

index 34796ff..6cbeffa 100644 (file)
 #define LOG_TAG "org.tizen.video-player"
 
 #ifndef _ERR
-#define _ERR(fmt, args...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#define _ERR(fmt, args...) LOGE(fmt"\n", ##args)
 #endif
 
 #ifndef _DBG
-#define _DBG(fmt, args...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#define _DBG(fmt, args...) LOGD(fmt"\n", ##args)
 #endif
 
 #ifndef _INFO
-#define _INFO(fmt, args...) LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args)
+#define _INFO(fmt, args...) LOGI(fmt"\n", ##args)
 #endif
 
 #endif /* __DBG_H__ */
index 96262ff..7336fcd 100644 (file)
@@ -14,6 +14,9 @@
  * limitations under the License.
  */
 
+/* View definitions */
+#define VIEW_ID_PLAYER "VIEW_PLAYER"
+
 /* Part name definitions */
 #define PART_CONTENTAREA "content.area"
 #define PART_TITLETEXT "title.text"
index d5bf35f..4763961 100644 (file)
@@ -59,6 +59,14 @@ int playermgr_set_playback_rate(struct playermgr *mgr, float speed);
 
 int playermgr_get_playback_rate(struct playermgr *mgr, float *speed);
 
+int playermgr_set_ff(struct playermgr *mgr, int duration);
+
+int playermgr_set_rew(struct playermgr *mgr, int duration);
+
+bool playermgr_get_ffrew(struct playermgr *mgr);
+
+void playermgr_stop_ffrew(struct playermgr *mgr);
+
 int playermgr_set_looping(struct playermgr *mgr, bool value);
 
 int playermgr_set_audio_effect(struct playermgr *mgr, int value);
index b837456..838d249 100644 (file)
 #ifndef __VIEW_PLAYER_H__
 #define __VIEW_PLAYER_H__
 
-struct viewdata;
+struct SPlayerView;
 
-struct viewdata *view_player_init(Evas_Object *win,
-               char *path, char *playlist);
+struct SPlayerParam {
+       const char *id;
+       const char *filepath;
+       const char *playlist;
+};
 
-void view_player_fini(struct viewdata *mgr);
+class CPlayerView : public CBaseView {
+private:
+       SPlayerView *m;
 
-int view_player_create(struct viewdata *mgr);
+private:
+       void m_PlayerInit(SPlayerParam *param);
+       bool m_UiInit(void);
+       bool m_AddControls(void);
+       void m_UpdateInfoBar(void);
+       void m_UpdateInfoBar(struct mediadata *md);
+       bool m_PlayVideo(void);
+       void m_ShowBar(void);
+       void m_HideBar(void);
 
-int view_player_pause(struct viewdata *mgr);
+private:
+       static Eina_Bool sm_CbDrawAnimation(void *dt);
+       static void sm_CbPlayComplete(void *dt);
+       static void sm_CbShowViewFinish(void *dt, Evas_Object *obj,
+               const char *emission, const char *source);
+       static void sm_CbEcoreEvent(void *dt, int type, void *ei);
+       static void sm_CbTimeoutEvent(void *dt, int type, void *ev);
 
-int view_player_resume(struct viewdata *mgr);
+       static void sm_EvtBack(void *dt, Evas_Object *obj, void *ev);
+       static void sm_EvtVolume(SPlayerView *data, int val);
+       static void sm_EvtControlBtn(void *dt, const char *ev);
+
+       static void sm_EvtPrevBtn(void *dt);
+       static void sm_EvtRewindBtn(void *dt);
+       static void sm_EvtPlayBtn(void *dt);
+       static void sm_EvtForwardBtn(void *dt);
+       static void sm_EvtNextBtn(void *dt);
+       static void sm_EvtReapeatBtn(void *dt);
+       static void sm_EvtSettingBtn(void *dt);
+
+protected:
+       virtual void t_OnShow(void);
+       virtual void t_OnHide(void);
+       virtual void t_OnPause(void);
+       virtual void t_OnUpdate(void *dt);
+
+public:
+       CPlayerView(const char *szViewId) : CBaseView(szViewId), m(0) {}
+       virtual ~CPlayerView(void) {}
+
+       virtual bool Create(void *data);
+       virtual void Destroy(void);
+
+       virtual Evas_Object *Base(void);
+
+};
 
 #endif
index e1ae43b..708708e 100644 (file)
@@ -19,6 +19,8 @@
 #include <dbg.h>
 #include <AppCommon.h>
 #include <BaseApp.h>
+#include <BaseView.h>
+#include <ViewMgr.h>
 #include "define.h"
 #include "view_player.h"
 #include "i18n.h"
 struct SAppData {
        const char *name;
        Evas_Object *win;
-       viewdata *vdata;
 };
 
 class CVideoPlayerApp : public CBaseApp {
 private:
        SAppData *m_pApp;
+       CViewMgr *m_pVmgr;
+       CPlayerView *m_pPlayerView;
 
 private:
        static Evas_Object *sm_AddWin(const char *name);
@@ -43,11 +46,13 @@ private:
 public:
        CVideoPlayerApp(void);
        virtual ~CVideoPlayerApp(void);
+
        virtual bool OnCreate(void);
        virtual void OnPause(void);
        virtual void OnResume(void);
        virtual void OnTerminate(void);
        virtual void OnService(service_h service);
+
        virtual int Run(int argc, char **argv);
 };
 
@@ -107,6 +112,13 @@ bool CVideoPlayerApp::OnCreate(void)
        elm_win_focus_highlight_enabled_set(win, EINA_TRUE);
        elm_win_focus_highlight_style_set(win, STYLE_INVISIBLE);
 
+       CViewMgr::Initialize(win, NULL);
+       m_pVmgr = CViewMgr::GetInstance();
+       if (!m_pVmgr) {
+               _ERR("failed init view manager");
+               return false;
+       }
+
        m_pApp->win = win;
 
        return true;
@@ -116,8 +128,7 @@ void CVideoPlayerApp::OnTerminate(void)
 {
        ASSERT(m_pApp);
 
-       if (m_pApp->vdata)
-               view_player_fini(m_pApp->vdata);
+       CViewMgr::Finalize();
 
        if (m_pApp->win)
                evas_object_del(m_pApp->win);
@@ -127,51 +138,51 @@ void CVideoPlayerApp::OnPause(void)
 {
        ASSERT(m_pApp);
 
-       if (!m_pApp->vdata)
-               return;
-
-       view_player_pause(m_pApp->vdata);
+       m_pVmgr->Pause();
 }
 
 void CVideoPlayerApp::OnResume(void)
 {
        ASSERT(m_pApp);
 
-       if (!m_pApp->vdata)
-               return;
-
-       view_player_resume(m_pApp->vdata);
+       m_pVmgr->Resume();
 }
 
 void CVideoPlayerApp::OnService(service_h service)
 {
        ASSERT(m_pApp);
 
-       viewdata *vdata;
+       SPlayerParam param;
        char *uri;
-       char *playlist_id;
+       char *playlist;
        int r;
 
        r = service_get_extra_data(service, PARAM_URI, &uri);
        if (r != SERVICE_ERROR_NONE)
                uri = NULL;
 
-       r = service_get_extra_data(service, PARAM_PLAYLIST_ID, &playlist_id);
+       r = service_get_extra_data(service, PARAM_PLAYLIST_ID, &playlist);
        if (r != SERVICE_ERROR_NONE)
-               playlist_id = NULL;
+               playlist = NULL;
 
-       vdata = view_player_init(m_pApp->win, uri, playlist_id);
+       param.id = VIEW_ID_PLAYER;
+       param.filepath = uri;
+       param.playlist = playlist;
 
-       free(uri);
-       free(playlist_id);
+       m_pPlayerView = new CPlayerView(VIEW_ID_PLAYER);
+       m_pVmgr->AddView(m_pPlayerView);
 
-       if (!vdata)
-               elm_exit();
+       if (!m_pVmgr->PushView(VIEW_ID_PLAYER, &param)) {
+               _ERR("View push failed");
+               CViewMgr::Finalize();
+               free(uri);
+               free(playlist);
 
-       if (view_player_create(vdata) == -1)
                elm_exit();
+       }
 
-       m_pApp->vdata = vdata;
+       free(uri);
+       free(playlist);
 }
 
 int CVideoPlayerApp::Run(int argc, char **argv)
index fe9cee0..ab5f353 100644 (file)
 #include "define.h"
 #include "playermgr.h"
 
-#define SPEED_MAX 5.0
-#define SPEED_MIN -5.0
+#define RATE_MAX 5.0
+#define RATE_MIN -5.0
+
+#define SPEED_MIN 0
+#define SPEED_MAX 3
+
+#define TIME_INTERVAL 1.0
+
+static int _speed[] = {
+       0,
+       2000,
+       4000,
+       8000
+};
 
 struct playermgr {
        player_h player;
        Evas_Object *win;
        Eina_List *media_list;
+
        float speed;
        int display_mode;
        int audio_effect;
        int current;
        int total;
+       int rew_speed;
+       int ff_speed;
+       int duration;
+
+       Ecore_Timer *ffrew_timer;
 };
 
 static void _destroy_list(Eina_List *list)
@@ -105,6 +123,8 @@ struct playermgr *playermgr_init(Evas_Object *win,
        mgr->win = win;
        mgr->display_mode = E_FULL_SCREEN;
        mgr->audio_effect = 0;
+       mgr->rew_speed = 0;
+       mgr->ff_speed = 0;
 
        mgr->media_list = _create_list(playlist);
        if (!mgr->media_list) {
@@ -254,6 +274,9 @@ void playermgr_fini(struct playermgr *mgr)
        if (!mgr)
                return;
 
+       if (mgr->ffrew_timer)
+               ecore_timer_del(mgr->ffrew_timer);
+
        if (mgr->media_list)
                _destroy_list(mgr->media_list);
 
@@ -383,10 +406,10 @@ int playermgr_set_playback_rate(struct playermgr *mgr, float speed)
                return -1;
        }
 
-       if (speed > SPEED_MAX)
-               speed = SPEED_MAX;
-       else if (speed < SPEED_MIN)
-               speed = SPEED_MIN;
+       if (speed > RATE_MAX)
+               speed = RATE_MAX;
+       else if (speed < RATE_MIN)
+               speed = RATE_MIN;
 
        r = player_set_playback_rate(mgr->player, speed);
        if (r != PLAYER_ERROR_NONE) {
@@ -498,3 +521,142 @@ void playermgr_get_play_count(struct playermgr *mgr, char *str, int len)
 
        snprintf(str, len, "%d/%d", mgr->current + 1, mgr->total);
 }
+
+static Eina_Bool _ffrew_timer_cb(void *dt)
+{
+       struct playermgr *mgr;
+       int pos;
+       int r;
+
+       if (!dt)
+               return ECORE_CALLBACK_CANCEL;
+
+       mgr = (struct playermgr *)dt;
+
+       if (!mgr->player)
+               return ECORE_CALLBACK_CANCEL;
+
+       playermgr_get_position(mgr, &pos);
+
+       if (mgr->ff_speed) {
+               pos = pos + _speed[mgr->ff_speed];
+               if (pos > mgr->duration)
+                       pos = mgr->duration;
+       } else if (mgr->rew_speed) {
+               pos = pos - _speed[mgr->rew_speed];
+               if (pos < 0)
+                       pos = 0;
+       } else {
+               r = playermgr_resume(mgr);
+               if (r < 0)
+                       return ECORE_CALLBACK_RENEW;
+
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       playermgr_seek(mgr, pos, NULL, NULL);
+
+       if (mgr->rew_speed && pos <= 0) {
+               mgr->rew_speed = SPEED_MIN;
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       if (mgr->ff_speed && pos >= mgr->duration) {
+               mgr->ff_speed = SPEED_MIN;
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       if (ecore_timer_interval_get(mgr->ffrew_timer) != TIME_INTERVAL)
+               ecore_timer_interval_set(mgr->ffrew_timer, TIME_INTERVAL);
+
+       return ECORE_CALLBACK_RENEW;
+}
+
+static void _start_ffrew_timer(struct playermgr *mgr)
+{
+       playermgr_pause(mgr);
+
+       if (!mgr->ffrew_timer) {
+               mgr->ffrew_timer = ecore_timer_add(0.0,
+                               _ffrew_timer_cb, mgr);
+               if (!mgr->ffrew_timer)
+                       return;
+       } else {
+               ecore_timer_interval_set(mgr->ffrew_timer, 0.0);
+               ecore_timer_reset(mgr->ffrew_timer);
+       }
+}
+
+int playermgr_set_ff(struct playermgr *mgr, int duration)
+{
+       int r;
+
+       if (!mgr) {
+               _ERR("invalid parameter");
+               return -1;
+       }
+
+       r = 0;
+       mgr->duration = duration;
+       mgr->rew_speed = SPEED_MIN;
+
+       if (mgr->ff_speed == SPEED_MAX)
+               return r;
+
+       if (mgr->ff_speed == SPEED_MIN) {
+               _start_ffrew_timer(mgr);
+               r = 1;
+       }
+
+       mgr->ff_speed++;
+
+       return r;
+}
+
+int playermgr_set_rew(struct playermgr *mgr, int duration)
+{
+       int r;
+
+       if (!mgr) {
+               _ERR("invalid parameter");
+               return -1;
+       }
+
+       r = 0;
+       mgr->duration = duration;
+       mgr->ff_speed = SPEED_MIN;
+
+       if (mgr->rew_speed == SPEED_MAX)
+               return r;
+
+       if (mgr->rew_speed == SPEED_MIN) {
+               _start_ffrew_timer(mgr);
+               r = 1;
+       }
+
+       mgr->rew_speed++;
+
+       return r;
+}
+
+bool playermgr_get_ffrew(struct playermgr *mgr)
+{
+       if (mgr->ff_speed || mgr->rew_speed)
+               return true;
+
+       return false;
+}
+
+void playermgr_stop_ffrew(struct playermgr *mgr)
+{
+       if (!mgr)
+               _ERR("invalid parameter");
+
+       mgr->ff_speed = SPEED_MIN;
+       mgr->rew_speed = SPEED_MIN;
+
+       if (mgr->ffrew_timer) {
+               ecore_timer_del(mgr->ffrew_timer);
+               mgr->ffrew_timer = NULL;
+       }
+}
index cf12b86..0d97c56 100644 (file)
@@ -18,6 +18,9 @@
 #include <Eina.h>
 #include <utilX.h>
 #include <efl_extension.h>
+#include <AppCommon.h>
+#include <ViewMgr.h>
+#include <BaseView.h>
 #include <dbg.h>
 #include "define.h"
 #include "i18n.h"
 #include "control.h"
 #include "volume.h"
 #include "slider.h"
+#include "view_player.h"
 
 #define BTN_ID "BTN_ID"
-#define TIME_INTERVAL 1.0
 
 #define TEXT_NOVIDEO N_("No Video")
 #define TEXT_NORES N_("---- x ----")
 #define TEXT_NODATE N_("----.--.--")
 #define TEXT_NOSOURCE N_("-")
 
-#define SPEED_MIN 0
-#define SPEED_MAX 3
-
 #define CONTROL_BTNS 7
 
 static const char *_control_name[] = {
@@ -51,18 +51,18 @@ static const char *_control_name[] = {
        "settings"
 };
 
-static int _speed[] = {
-       0,
-       2000,
-       4000,
-       8000
+enum update_action {
+       ACTION_HIDE,
+       ACTION_SHOW,
+       ACTION_PLAY
 };
 
 typedef void (*btn_event_cb)(void *dt);
 
-struct viewdata {
+struct SPlayerView {
        Evas_Object *win;
        Evas_Object *base;
+       char *id;
 
        struct playermgr *player;
        struct control_data *control;
@@ -70,14 +70,11 @@ struct viewdata {
        struct slider_data *slider;
 
        struct timeout_handler *timeout_handle;
-       bool view_hidden;
+       bool bar_hidden;
        bool error;
 
        Ecore_Timer *drawanim_timer;
-       Ecore_Timer *ffrew_timer;
        int duration;
-       int rew_speed;
-       int ff_speed;
        int repeat;
 };
 
@@ -97,79 +94,11 @@ enum _repeat_option {
        E_REPEAT_NONE
 };
 
-static void _show_view(struct viewdata *data);
-
-struct viewdata *view_player_init(Evas_Object *win, char *path, char *playlist)
-{
-       struct viewdata *data;
-       int r;
-
-       if (!win) {
-               _ERR("invalid parameter");
-               return NULL;
-       }
-
-       data = (struct viewdata *)calloc(1, sizeof(*data));
-       if (!data) {
-               _ERR("alloc failed");
-               return NULL;
-       }
-
-       data->win = win;
-       data->error = false;
-
-       r = mediadata_init();
-       if (r < 0)
-               _ERR("mediadata init failed");
-
-       data->player = playermgr_init(win, path, playlist);
-       if (!data->player)
-               _ERR("player init failed");
-
-       data->control = control_init();
-       if (!data->control)
-               _ERR("control init failed");
-
-       data->volume = volume_init();
-       if (!data->volume)
-               _ERR("volume init failed");
-
-       data->slider = slider_init();
-       if (!data->slider)
-               _ERR("slider init failed");
-
-       return data;
-}
-
-void view_player_fini(struct viewdata *data)
-{
-       if (!data)
-               return;
-
-       if (data->ffrew_timer)
-               ecore_timer_del(data->ffrew_timer);
-
-       if (data->drawanim_timer)
-               ecore_timer_del(data->drawanim_timer);
-
-       mediadata_fini();
-
-       playermgr_fini(data->player);
-
-       volume_fini(data->volume);
-       slider_fini(data->slider);
-       control_fini(data->control);
-
-       timeout_handler_fini(data->timeout_handle);
-
-       free(data);
-}
-
-static void _update_info_bar_err(struct viewdata *data)
+void CPlayerView::m_UpdateInfoBar(void)
 {
        Evas_Object *obj;
 
-       obj = data->base;
+       obj = m->base;
 
        /* Title */
        elm_object_part_text_set(obj, PART_TITLETEXT, _(TEXT_NOVIDEO));
@@ -184,7 +113,7 @@ static void _update_info_bar_err(struct viewdata *data)
        elm_object_part_text_set(obj, PART_RESOLUTIONTEXT, _(TEXT_NORES));
 }
 
-static int _update_info_bar(struct viewdata *data, struct mediadata *md)
+void CPlayerView::m_UpdateInfoBar(struct mediadata *md)
 {
        const char *name;
        char buf[32];
@@ -192,15 +121,10 @@ static int _update_info_bar(struct viewdata *data, struct mediadata *md)
        struct tm tm;
        const struct videodata *vd;
 
-       if (!md) {
-               _ERR("invalid parameter");
-               return -1;
-       }
-
        /* Title */
        name = mediadata_get_displayname(md);
        if (name)
-               elm_object_part_text_set(data->base, PART_TITLETEXT, name);
+               elm_object_part_text_set(m->base, PART_TITLETEXT, name);
 
        /* Created Time */
        video_time = mediadata_get_modifiedtime(md);
@@ -212,15 +136,15 @@ static int _update_info_bar(struct viewdata *data, struct mediadata *md)
                snprintf(buf, sizeof(buf), "%s", _(TEXT_NODATE));
        }
 
-       elm_object_part_text_set(data->base, PART_DATETEXT, buf);
+       elm_object_part_text_set(m->base, PART_DATETEXT, buf);
 
        /* Source */
        /* TODO: temporary, get actual values and set */
-       elm_object_part_text_set(data->base, PART_SOURCETEXT, _("TV"));
+       elm_object_part_text_set(m->base, PART_SOURCETEXT, _("TV"));
 
        /* Playlist Count */
-       playermgr_get_play_count(data->player, buf, sizeof(buf));
-       elm_object_part_text_set(data->base, PART_CURRENTTEXT, buf);
+       playermgr_get_play_count(m->player, buf, sizeof(buf));
+       elm_object_part_text_set(m->base, PART_CURRENTTEXT, buf);
 
        /* Resolution */
        vd = mediadata_get_video_info(md);
@@ -229,210 +153,124 @@ static int _update_info_bar(struct viewdata *data, struct mediadata *md)
                                videodata_get_width(vd),
                                videodata_get_height(vd));
 
-               data->duration = videodata_get_duration(vd);
+               m->duration = videodata_get_duration(vd);
        } else {
                snprintf(buf, sizeof(buf), "%s", _(TEXT_NORES));
-               data->duration = 0;
+               m->duration = 0;
        }
 
-       elm_object_part_text_set(data->base, PART_RESOLUTIONTEXT, buf);
-
-       return 0;
+       elm_object_part_text_set(m->base, PART_RESOLUTIONTEXT, buf);
 }
 
-static int _play_video(struct viewdata *data)
+bool CPlayerView::m_PlayVideo(void)
 {
        struct mediadata *md;
        const char *path;
        int r;
 
-       r = playermgr_play_video(data->player);
+       r = playermgr_play_video(m->player);
        if (r < 0)
-               return r;
+               return false;
 
-       path = playermgr_get_video_path(data->player);
+       path = playermgr_get_video_path(m->player);
 
        md = mediadata_create(path);
        if (md) {
-               _update_info_bar(data, md);
+               m_UpdateInfoBar(md);
                mediadata_destroy(md);
        }
 
-       slider_reset(data->slider, data->duration);
-       control_signal_emit(data->control, E_PLAYPAUSE_BTN,
-                       SIG_SET_PAUSE, "");
+       slider_reset(m->slider, m->duration);
+       control_signal_emit(m->control, E_PLAYPAUSE_BTN, SIG_SET_PAUSE, "");
 
-       if (data->view_hidden) {
-               _show_view(data);
-               timeout_handler_reset(data->timeout_handle);
+       if (m->bar_hidden) {
+               m_ShowBar();
+               timeout_handler_reset(m->timeout_handle);
        }
 
-       return 0;
+       return true;
 }
 
-static Eina_Bool _ffrew_timer_cb(void *dt)
+void CPlayerView::sm_EvtRewindBtn(void *dt)
 {
-       struct viewdata *data;
-       int pos;
+       SPlayerView *data;
        int r;
 
        if (!dt)
-               return ECORE_CALLBACK_CANCEL;
-
-       data = (viewdata *)dt;
-
-       if (!data->player)
-               return ECORE_CALLBACK_CANCEL;
-
-       playermgr_get_position(data->player, &pos);
-
-       if (data->ff_speed) {
-               pos = pos + _speed[data->ff_speed];
-               if (pos > data->duration)
-                       pos = data->duration;
-       } else if (data->rew_speed) {
-               pos = pos - _speed[data->rew_speed];
-               if (pos < 0)
-                       pos = 0;
-       } else {
-               r = playermgr_resume(data->player);
-               if (r < 0)
-                       return ECORE_CALLBACK_RENEW;
-
-               slider_resume(data->slider);
-
-               return ECORE_CALLBACK_CANCEL;
-       }
-
-       playermgr_seek(data->player, pos, NULL, NULL);
-
-       if (data->rew_speed && pos <= 0) {
-               data->rew_speed = SPEED_MIN;
-               return ECORE_CALLBACK_CANCEL;
-       }
-
-       if (data->ff_speed && pos >= data->duration) {
-               data->ff_speed = SPEED_MIN;
-               return ECORE_CALLBACK_CANCEL;
-       }
-
-       if (ecore_timer_interval_get(data->ffrew_timer) != TIME_INTERVAL)
-               ecore_timer_interval_set(data->ffrew_timer, TIME_INTERVAL);
-
-       return ECORE_CALLBACK_RENEW;
-}
-
-static void _stop_ffrew_timer(struct viewdata *data)
-{
-       if (!data)
                return;
 
-       data->ff_speed = SPEED_MIN;
-       data->rew_speed = SPEED_MIN;
-
-       if (data->ffrew_timer) {
-               ecore_timer_del(data->ffrew_timer);
-               data->ffrew_timer = NULL;
-       }
-}
+       data = (SPlayerView *)dt;
 
-static void _start_ffrew_timer(struct viewdata *data)
-{
-       playermgr_pause(data->player);
-       slider_pause(data->slider);
+       r = playermgr_set_rew(data->player, data->duration);
 
-       if (!data->ffrew_timer) {
-               data->ffrew_timer = ecore_timer_add(0.0,
-                               _ffrew_timer_cb, data);
-               if (!data->ffrew_timer)
-                       return;
-       } else {
-               ecore_timer_interval_set(data->ffrew_timer, 0.0);
-               ecore_timer_reset(data->ffrew_timer);
+       if (r > 0) {
+               slider_pause(data->slider);
+               control_signal_emit(data->control, E_PLAYPAUSE_BTN,
+                               SIG_SET_PLAY, "");
        }
-
-       control_signal_emit(data->control, E_PLAYPAUSE_BTN,
-                       SIG_SET_PLAY, "");
-}
-
-static void _rewind_btn_clicked(void *dt)
-{
-       struct viewdata *data;
-
-       if (!dt)
-               return;
-
-       data = (viewdata *)dt;
-
-       data->ff_speed = SPEED_MIN;
-
-       if (data->rew_speed == SPEED_MAX)
-               return;
-
-       if (data->rew_speed == SPEED_MIN)
-               _start_ffrew_timer(data);
-
-       data->rew_speed++;
 }
 
-static void _forward_btn_clicked(void *dt)
+void CPlayerView::sm_EvtForwardBtn(void *dt)
 {
-       struct viewdata *data;
+       SPlayerView *data;
+       int r;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
-
-       data->rew_speed = SPEED_MIN;
-
-       if (data->ff_speed == SPEED_MAX)
-               return;
+       data = (SPlayerView *)dt;
 
-       if (data->ff_speed == SPEED_MIN)
-               _start_ffrew_timer(data);
+       r = playermgr_set_ff(data->player, data->duration);
 
-       data->ff_speed++;
+       if (r > 0) {
+               slider_pause(data->slider);
+               control_signal_emit(data->control, E_PLAYPAUSE_BTN,
+                               SIG_SET_PLAY, "");
+       }
 }
 
-static void _prev_btn_clicked(void *dt)
+void CPlayerView::sm_EvtPrevBtn(void *dt)
 {
-       struct viewdata *data;
+       SPlayerView *data;
+       update_action action;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
-
-       _stop_ffrew_timer(data);
+       data = (SPlayerView *)dt;
 
+       playermgr_stop_ffrew(data->player);
        playermgr_set_prev_video(data->player);
-       _play_video(data);
+
+       action = ACTION_PLAY;
+       CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
 }
 
-static void _next_btn_clicked(void *dt)
+void CPlayerView::sm_EvtNextBtn(void *dt)
 {
-       struct viewdata *data;
+       SPlayerView *data;
+       update_action action;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
-
-       _stop_ffrew_timer(data);
+       data = (SPlayerView *)dt;
 
+       playermgr_stop_ffrew(data->player);
        playermgr_set_next_video(data->player, EINA_TRUE);
-       _play_video(data);
+
+       action = ACTION_PLAY;
+       CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
 }
 
-static void _repeat_btn_clicked(void *dt)
+void CPlayerView::sm_EvtReapeatBtn(void *dt)
 {
-       struct viewdata *data;
+       SPlayerView *data;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
 
        switch (data->repeat) {
        case E_REPEAT_ALL:
@@ -449,24 +287,25 @@ static void _repeat_btn_clicked(void *dt)
        }
 }
 
-static void _settings_btn_clicked(void *dt)
+void CPlayerView::sm_EvtSettingBtn(void *dt)
 {
 }
 
-static void _playpause_btn_clicked(void *dt)
+void CPlayerView::sm_EvtPlayBtn(void *dt)
 {
-       struct viewdata *data;
+       SPlayerView *data;
        player_state_e state;
        int r;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
 
-       if (data->ff_speed || data->rew_speed) {
-               data->ff_speed = SPEED_MIN;
-               data->rew_speed = SPEED_MIN;
+       if (playermgr_get_ffrew(data->player)) {
+               playermgr_stop_ffrew(data->player);
+               playermgr_resume(data->player);
+               slider_resume(data->slider);
                return;
        }
 
@@ -489,24 +328,24 @@ static void _playpause_btn_clicked(void *dt)
        }
 }
 
-static void _control_event(void *dt, const char *ev)
+void CPlayerView::sm_EvtControlBtn(void *dt, const char *ev)
 {
-       struct viewdata *data;
+       SPlayerView *data;
        btn_event_cb cbs[] = {
-               _prev_btn_clicked,
-               _rewind_btn_clicked,
-               _playpause_btn_clicked,
-               _forward_btn_clicked,
-               _next_btn_clicked,
-               _repeat_btn_clicked,
-               _settings_btn_clicked,
+               sm_EvtPrevBtn,
+               sm_EvtRewindBtn,
+               sm_EvtPlayBtn,
+               sm_EvtForwardBtn,
+               sm_EvtNextBtn,
+               sm_EvtReapeatBtn,
+               sm_EvtSettingBtn,
        };
        int i;
 
        if (!dt || !ev)
                return;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
 
        for (i = 0; i < CONTROL_BTNS; i++) {
                if (!strcmp(_control_name[i], ev))
@@ -514,15 +353,16 @@ static void _control_event(void *dt, const char *ev)
        }
 }
 
-static void _player_completed(void *dt)
+void CPlayerView::sm_CbPlayComplete(void *dt)
 {
-       struct viewdata *data;
+       SPlayerView *data;
+       update_action action;
        Eina_Bool r;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
        r = EINA_TRUE;
 
        if (data->repeat == E_REPEAT_NONE)
@@ -533,86 +373,101 @@ static void _player_completed(void *dt)
        if (!r)
                elm_exit();
 
-       _play_video(data);
+       action = ACTION_PLAY;
+       CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
 }
 
-static void _show_view_finish_cb(void *dt, Evas_Object *obj,
+void CPlayerView::sm_CbShowViewFinish(void *dt, Evas_Object *obj,
                const char *emission, const char *source)
 {
-       struct viewdata *data;
+       SPlayerView *data;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
 
        control_show(data->control);
 }
 
-static void _show_view(struct viewdata *data)
+void CPlayerView::m_ShowBar(void)
 {
-       volume_hide_bar(data->volume);
+       volume_hide_bar(m->volume);
 
-       if (data->view_hidden) {
-               elm_object_signal_emit(data->base, SIG_SHOW_VIEW, "");
-               data->view_hidden = false;
-               slider_resume(data->slider);
+       if (m->bar_hidden) {
+               elm_object_signal_emit(m->base, SIG_SHOW_VIEW, "");
+               m->bar_hidden = false;
+               slider_resume(m->slider);
        }
 }
 
-static void _hide_view(struct viewdata *data)
+void CPlayerView::m_HideBar(void)
 {
-       elm_object_signal_emit(data->base, SIG_HIDE_VIEW, "");
-       data->view_hidden = true;
-       slider_pause(data->slider);
+       elm_object_signal_emit(m->base, SIG_HIDE_VIEW, "");
+       m->bar_hidden = true;
 
-       control_hide(data->control);
+       slider_pause(m->slider);
+       control_hide(m->control);
 }
 
-static void _timeout_event(void *dt, int type, void *ev)
+void CPlayerView::sm_CbTimeoutEvent(void *dt, int type, void *ev)
 {
-       struct viewdata *data;
+       SPlayerView *data;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
 
-       if (!data->error)
-               _hide_view(data);
+       if (!data->error) {
+               update_action action;
+
+               action = ACTION_HIDE;
+               CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
+       }
 }
 
-static void _back_event(void *dt, Evas_Object *obj, void *ev)
+void CPlayerView::sm_EvtBack(void *dt, Evas_Object *obj, void *ev)
 {
-       struct viewdata *data;
+       SPlayerView *data;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
 
-       if (data->view_hidden)
-               _show_view(data);
-       else
+       if (data->bar_hidden) {
+               update_action action;
+
+               action = ACTION_SHOW;
+               CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
+       } else {
                elm_exit();
+       }
 }
 
-static void _handle_volume_key(struct viewdata *data, enum volume_val val)
+void CPlayerView::sm_EvtVolume(SPlayerView *data, int val)
 {
-       if (!data->view_hidden)
-               _hide_view(data);
+       if (!data->bar_hidden) {
+               update_action action;
 
-       volume_handle_key(data->volume, val);
+               action = ACTION_HIDE;
+               CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
+       }
+
+       volume_handle_key(data->volume, (enum volume_val)val);
 }
 
-static void _ecore_event(void *dt, int type, void *ei)
+void CPlayerView::sm_CbEcoreEvent(void *dt, int type, void *ei)
 {
-       struct viewdata *data;
+       SPlayerView *data;
+       bool update;
 
        if (!dt)
                return;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
+       update = false;
 
        if (type == ECORE_EVENT_KEY_UP) {
                Evas_Event_Key_Up *ev;
@@ -622,56 +477,60 @@ static void _ecore_event(void *dt, int type, void *ei)
                        return;
 
                if (!strcmp(ev->keyname, KEY_VOLUMEUP))
-                       _handle_volume_key(data, E_VOLUME_UP);
+                       sm_EvtVolume(data, E_VOLUME_UP);
                else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN))
-                       _handle_volume_key(data, E_VOLUME_DOWN);
+                       sm_EvtVolume(data, E_VOLUME_DOWN);
                else if (!strcmp(ev->keyname, KEY_MUTE))
-                       _handle_volume_key(data, E_VOLUME_MUTE);
+                       sm_EvtVolume(data, E_VOLUME_MUTE);
                else
-                       _show_view(data);
+                       update = true;
        } else if (type == ECORE_EVENT_MOUSE_MOVE) {
-               _show_view(data);
+               update = true;
+       }
+
+       if (update) {
+               update_action action;
+
+               action = ACTION_SHOW;
+               CViewMgr::GetInstance()->UpdateView(data->id, (void *)&action);
        }
 }
 
-static int _add_controls(struct viewdata *data)
+bool CPlayerView::m_AddControls(void)
 {
-       if (!control_add_bar(data->control, data->base,
-                               _control_name, CONTROL_BTNS))
-               return -1;
+       if (!control_add_bar(m->control, m->base, _control_name, CONTROL_BTNS))
+               return false;
 
-       data->rew_speed = 0;
-       data->ff_speed = 0;
-       data->repeat = E_REPEAT_ALL;
+       m->repeat = E_REPEAT_ALL;
 
-       control_handler_init(data->control, _control_event, data);
+       control_handler_init(m->control, sm_EvtControlBtn, m);
 
-       if (!slider_add_bar(data->slider, data->base, data->player))
-               return -1;
+       if (!slider_add_bar(m->slider, m->base, m->player))
+               return false;
 
-       if (!volume_add_bar(data->volume, data->win))
-               return -1;
+       if (!volume_add_bar(m->volume, m->win))
+               return false;
 
-       data->timeout_handle = timeout_handler_init(TIMEOUT_VIDEOPLAYER,
-               _timeout_event, data, _ecore_event, data);
+       m->timeout_handle = timeout_handler_init(TIMEOUT_VIDEOPLAYER,
+               sm_CbTimeoutEvent, m, sm_CbEcoreEvent, m);
 
-       eext_object_event_callback_add(data->base,
-                       EEXT_CALLBACK_BACK, _back_event, data);
+       eext_object_event_callback_add(m->base,
+                       EEXT_CALLBACK_BACK, sm_EvtBack, m);
 
-       if (!data->timeout_handle)
-               return -1;
+       if (!m->timeout_handle)
+               return false;
 
-       return 0;
+       return true;
 }
 
-static Eina_Bool _drawanim_timer_cb(void *dt)
+Eina_Bool CPlayerView::sm_CbDrawAnimation(void *dt)
 {
-       struct viewdata *data;
+       SPlayerView *data;
 
        if (!dt)
                return ECORE_CALLBACK_CANCEL;
 
-       data = (viewdata *)dt;
+       data = (SPlayerView *)dt;
 
        elm_object_signal_emit(data->base, SIG_SHOW_VIEW, "");
        control_focus_set(data->control, E_PLAYPAUSE_BTN, EINA_TRUE);
@@ -681,71 +540,192 @@ static Eina_Bool _drawanim_timer_cb(void *dt)
        return ECORE_CALLBACK_CANCEL;
 }
 
-int view_player_create(struct viewdata *data)
+void CPlayerView::m_PlayerInit(SPlayerParam *param)
+{
+       int r;
+
+       r = mediadata_init();
+       if (r < 0)
+               _ERR("mediadata init failed");
+
+       if (param->id)
+               m->id = strdup(param->id);
+
+       m->player = playermgr_init(m->win, param->filepath, param->playlist);
+       if (!m->player)
+               _ERR("player init failed");
+
+       m->control = control_init();
+       if (!m->control)
+               _ERR("control init failed");
+
+       m->volume = volume_init();
+       if (!m->volume)
+               _ERR("volume init failed");
+
+       m->slider = slider_init();
+       if (!m->slider)
+               _ERR("slider init failed");
+}
+
+bool CPlayerView::m_UiInit(void)
 {
        Evas_Object *base;
 
-       if (!data) {
-               _ERR("invalid parameter");
-               return -1;
+       base = elm_layout_add(m->win);
+       if (!base) {
+               _ERR("failed to add layout");
+               return false;
        }
 
-       /* Create UI */
-       base = elm_layout_add(data->win);
-       if (!base)
-               goto error;
+       m->base = base;
 
-       data->base = base;
-
-       if (!elm_layout_file_set(base, EDJEFILE, GRP_VIDEO_PLAYER))
-               goto error;
+       if (!elm_layout_file_set(base, EDJEFILE, GRP_VIDEO_PLAYER)) {
+               _ERR("failed to layout file set");
+               return false;
+       }
 
-       if (_add_controls(data) < 0)
-               goto error;
+       if (!m_AddControls()) {
+               _ERR("failed to add controls");
+               return false;
+       }
 
        evas_object_size_hint_weight_set(base,
                        EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
 
-       elm_win_resize_object_add(data->win, base);
+       elm_win_resize_object_add(m->win, base);
 
        evas_object_show(base);
 
        elm_object_focus_allow_set(base, EINA_FALSE);
 
-       if (_play_video(data) < 0) {
+       return true;
+}
+
+bool CPlayerView::Create(void *data)
+{
+       ASSERT(!m);
+       ASSERT(data);
+
+       Evas_Object *win;
+       bool r;
+
+       win = CViewMgr::GetInstance()->Window();
+       ASSERT(win);
+
+       m = new SPlayerView;
+       if (!m) {
+               _ERR("alloc failed");
+               return false;
+       }
+
+       m->win = win;
+       m->error = false;
+
+       m_PlayerInit((SPlayerParam *)data);
+
+       r = m_UiInit();
+       if (!r) {
+               delete m;
+               m = NULL;
+               return false;
+       }
+
+       if (!m_PlayVideo()) {
                _ERR("failed to play video");
-               data->error = true;
+               m->error = true;
 
-               _update_info_bar_err(data);
-               control_hide(data->control);
-               elm_object_signal_emit(data->base, SIG_SHOW_VIEW, "");
-               return 0;
+               m_UpdateInfoBar();
+               control_hide(m->control);
+               elm_object_signal_emit(m->base, SIG_SHOW_VIEW, "");
+
+               CBaseView::Create(NULL);
+               return true;
        }
 
-       playermgr_set_completed_cb(data->player, _player_completed, data);
+       playermgr_set_completed_cb(m->player, sm_CbPlayComplete, m);
 
-       elm_object_signal_callback_add(base, "show,view,finish", "",
-                       _show_view_finish_cb, data);
+       elm_object_signal_callback_add(m->base, "show,view,finish", "",
+                       sm_CbShowViewFinish, m);
 
-       data->drawanim_timer = ecore_timer_add(0.8, _drawanim_timer_cb, data);
-       if (!data->drawanim_timer)
-               goto error;
+       m->drawanim_timer = ecore_timer_add(0.8, sm_CbDrawAnimation, m);
+       if (!m->drawanim_timer) {
+               _ERR("failed to add draw timer");
+               return false;
+       }
 
-       return 0;
+       CBaseView::Create(NULL);
 
-error:
-       _ERR("Error in view player create");
-       return -1;
+       return true;
 }
 
-int view_player_pause(struct viewdata *data)
+void CPlayerView::Destroy(void)
 {
-       elm_exit();
+       ASSERT(m);
+
+       CBaseView::Destory();
+
+       if (m->drawanim_timer)
+               ecore_timer_del(m->drawanim_timer);
+
+       mediadata_fini();
+
+       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);
+
+       delete m;
+       m = NULL;
+}
 
-       return 0;
+Evas_Object *CPlayerView::Base(void)
+{
+       ASSERT(m);
+
+       return m->base;
+}
+
+void CPlayerView::t_OnShow(void)
+{
+       ASSERT(m);
+
+       evas_object_show(m->base);
+}
+
+void CPlayerView::t_OnHide(void)
+{
+       evas_object_hide(m->base);
+}
+
+void CPlayerView::t_OnPause(void)
+{
+       elm_exit();
 }
 
-int view_player_resume(struct viewdata *data)
+void CPlayerView::t_OnUpdate(void *dt)
 {
-       return 0;
+       update_action *action;
+
+       if (!dt)
+               return;
+
+       action = (update_action *)dt;
+
+       switch (*action) {
+       case ACTION_HIDE:
+               m_HideBar();
+               break;
+       case ACTION_SHOW:
+               m_ShowBar();
+               break;
+       case ACTION_PLAY:
+               m_PlayVideo();
+               break;
+       }
 }