2 * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved
4 * Licensed under the Apache License, Version 2.0 (the License);
5 * you may not use this file except in compliance with the License.
6 * You may obtain a copy of the License at
8 * http://www.apache.org/licenses/LICENSE-2.0
10 * Unless required by applicable law or agreed to in writing, software
11 * distributed under the License is distributed on an AS IS BASIS,
12 * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
13 * See the License for the specific language governing permissions and
14 * limitations under the License.
17 #include <Elementary.h>
20 #include <AppCommon.h>
23 #include <InputHandler.h>
25 #include "playermgr.h"
27 #include "view_player.h"
29 #define TIME_STR_START "00:00:00"
30 #define TIME_INTERVAL 0.1
31 #define SLIDER_DEFAULT 0.05
32 #define SLIDER_STEP 0.03
44 static void _get_timestr(char *str, int size, unsigned int ms)
50 snprintf(str, size, "%02d:%02d:%02d",
51 sec / 3600, (sec % 3600) / 60, sec % 60);
54 Eina_Bool CVideoSlider::sm_CbSeekSet(void *dt)
59 return ECORE_CALLBACK_CANCEL;
61 data = (SSliderData *)dt;
63 data->player->SetPosition(data->pos, sm_CbSeekComplete, data);
67 return ECORE_CALLBACK_CANCEL;
70 void CVideoSlider::sm_CbSeekComplete(void *dt)
81 data = (SSliderData *)dt;
83 if (data->pos != -1) {
85 data->seek = ecore_timer_add(TIME_INTERVAL,
91 r = data->player->GetPosition(&pos);
93 _ERR("Get Position Failed");
97 _get_timestr(str, sizeof(str), pos);
98 elm_object_part_text_set(data->base, PART_CURTIME_TEXT, str);
100 action = ACTION_RESUME;
101 CViewMgr::GetInstance()->UpdateView(VIEW_ID_PLAYER, (void *)&action);
104 data->seeking = false;
107 Eina_Bool CVideoSlider::sm_CbTimer(void *dt)
115 return ECORE_CALLBACK_CANCEL;
117 data = (SSliderData *)dt;
122 r = data->player->GetPosition(&pos);
126 elm_slider_value_set(data->slider, pos);
128 _get_timestr(str, sizeof(str), pos);
129 elm_object_part_text_set(data->base, PART_CURTIME_TEXT, str);
131 return ECORE_CALLBACK_RENEW;
136 return ECORE_CALLBACK_CANCEL;
139 void CVideoSlider::Pause(void)
144 ecore_timer_freeze(m->timer);
147 void CVideoSlider::Resume(void)
152 ecore_timer_thaw(m->timer);
155 void CVideoSlider::Reset(int duration, int position)
161 ecore_timer_del(m->seek);
162 ecore_timer_del(m->timer);
163 m->timer = ecore_timer_add(TIME_INTERVAL, sm_CbTimer, m);
165 elm_slider_value_set(m->slider, position);
166 elm_slider_min_max_set(m->slider, 0, duration);
167 elm_slider_step_set(m->slider, SLIDER_STEP);
169 _get_timestr(str, sizeof(str), duration);
170 elm_object_part_text_set(m->base, PART_CURTIME_TEXT, TIME_STR_START);
171 elm_object_part_text_set(m->base, PART_TOTALTIME_TEXT, str);
174 bool CVideoSlider::Create(Evas_Object *base, CPlayer *player)
184 _ERR("failed to add slider");
188 slider = elm_slider_add(base);
190 _ERR("failed to add slider");
194 elm_slider_indicator_show_set(slider, EINA_FALSE);
195 elm_slider_indicator_show_on_focus_set(slider, EINA_FALSE);
196 elm_object_style_set(slider, STYLE_SLIDER);
197 elm_slider_horizontal_set(slider, EINA_TRUE);
198 elm_slider_step_set(slider, SLIDER_DEFAULT);
200 Connect(slider, -1, TYPE_KEY_DOWN | TYPE_KEY_UP |
201 TYPE_MOUSE_MOVE | TYPE_MOUSE_DOWN | TYPE_MOUSE_UP |
202 TYPE_FOCUSED | TYPE_UNFOCUSED | TYPE_CHANGED);
204 elm_object_part_content_set(base, PART_SLIDER, slider);
217 void CVideoSlider::Destroy(void)
221 ecore_timer_del(m->timer);
222 ecore_timer_del(m->seek);
228 void CVideoSlider::m_SeekStart(Evas_Object *obj)
230 update_action action;
232 action = ACTION_PAUSE;
233 CViewMgr::GetInstance()->UpdateView(VIEW_ID_PLAYER, (void *)&action);
236 void CVideoSlider::m_SeekEnd(Evas_Object *obj)
240 v = elm_slider_value_get(obj);
245 m->player->SetPosition(v, sm_CbSeekComplete, m);
250 void CVideoSlider::OnKeyDown(int id, Evas *e, Evas_Object *obj,
251 Evas_Event_Key_Down *ev)
253 if (strcmp(ev->keyname, KEY_RIGHT) &&
254 strcmp(ev->keyname, KEY_LEFT))
260 void CVideoSlider::OnKeyUp(int id, Evas *e, Evas_Object *obj,
261 Evas_Event_Key_Up *ev)
263 if (strcmp(ev->keyname, KEY_RIGHT) &&
264 strcmp(ev->keyname, KEY_LEFT))
270 void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
271 Evas_Event_Mouse_Down *ev)
276 void CVideoSlider::OnMouseUp(int id, Evas *e, Evas_Object *obj,
277 Evas_Event_Mouse_Up *ev)
282 void CVideoSlider::OnMouseMove(int id, Evas *e, Evas_Object *obj,
283 Evas_Event_Mouse_Move *ev)
288 if (!elm_object_focus_get(obj))
289 elm_object_focus_set(obj, EINA_TRUE);
292 void CVideoSlider::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
294 elm_object_signal_emit(m->base, SIG_SLIDER_FOCUS, "");
297 void CVideoSlider::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
299 elm_object_signal_emit(m->base, SIG_SLIDER_UNFOCUS, "");
302 void CVideoSlider::OnChanged(int id, Evas_Object *obj)
307 v = elm_slider_value_get(obj);
308 _get_timestr(str, sizeof(str), v);
309 elm_object_part_text_set(m->base, PART_CURTIME_TEXT, str);