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)
60 data = (SSliderData *)dt;
62 data->player->SetPosition(data->pos, sm_CbSeekComplete, data);
66 return ECORE_CALLBACK_CANCEL;
69 void CVideoSlider::sm_CbSeekComplete(void *dt)
79 data = (SSliderData *)dt;
81 if (data->pos != -1) {
83 data->seek = ecore_timer_add(TIME_INTERVAL,
89 r = data->player->GetPosition(&pos);
91 _ERR("Get Position Failed");
95 _get_timestr(str, sizeof(str), pos);
96 elm_object_part_text_set(data->base, PART_CURTIME_TEXT, str);
98 action = ACTION_RESUME;
99 CViewMgr::GetInstance()->UpdateView(VIEW_ID_PLAYER, (void *)&action);
102 data->seeking = false;
105 Eina_Bool CVideoSlider::sm_CbTimer(void *dt)
114 data = (SSliderData *)dt;
119 r = data->player->GetPosition(&pos);
123 elm_slider_value_set(data->slider, pos);
125 _get_timestr(str, sizeof(str), pos);
126 elm_object_part_text_set(data->base, PART_CURTIME_TEXT, str);
128 return ECORE_CALLBACK_RENEW;
133 return ECORE_CALLBACK_CANCEL;
136 void CVideoSlider::Pause(void)
141 ecore_timer_freeze(m->timer);
144 void CVideoSlider::Resume(void)
149 ecore_timer_thaw(m->timer);
152 void CVideoSlider::Reset(int duration, int position)
158 ecore_timer_del(m->seek);
159 ecore_timer_del(m->timer);
160 m->timer = ecore_timer_add(TIME_INTERVAL, sm_CbTimer, m);
162 elm_slider_value_set(m->slider, position);
163 elm_slider_min_max_set(m->slider, 0, duration);
164 elm_slider_step_set(m->slider, SLIDER_STEP);
166 _get_timestr(str, sizeof(str), duration);
167 elm_object_part_text_set(m->base, PART_CURTIME_TEXT, TIME_STR_START);
168 elm_object_part_text_set(m->base, PART_TOTALTIME_TEXT, str);
171 bool CVideoSlider::Create(Evas_Object *base, CPlayer *player)
181 _ERR("allocation fail");
185 slider = elm_slider_add(base);
187 _ERR("failed to add slider");
193 elm_slider_indicator_show_set(slider, EINA_FALSE);
194 elm_slider_indicator_show_on_focus_set(slider, EINA_FALSE);
195 elm_object_style_set(slider, STYLE_SLIDER);
196 elm_slider_horizontal_set(slider, EINA_TRUE);
197 elm_slider_step_set(slider, SLIDER_DEFAULT);
199 Connect(slider, -1, TYPE_KEY_DOWN | TYPE_KEY_UP |
200 TYPE_MOUSE_MOVE | TYPE_MOUSE_DOWN | TYPE_MOUSE_UP |
201 TYPE_FOCUSED | TYPE_UNFOCUSED | TYPE_CHANGED);
203 elm_object_part_content_set(base, PART_SLIDER, slider);
216 void CVideoSlider::Destroy(void)
220 ecore_timer_del(m->timer);
221 ecore_timer_del(m->seek);
227 void CVideoSlider::m_SeekStart(Evas_Object *obj)
229 update_action action;
231 action = ACTION_PAUSE;
232 CViewMgr::GetInstance()->UpdateView(VIEW_ID_PLAYER, (void *)&action);
235 void CVideoSlider::m_SeekEnd(Evas_Object *obj)
241 v = elm_slider_value_get(obj);
246 m->player->SetPosition(v, sm_CbSeekComplete, m);
251 void CVideoSlider::OnKeyDown(int id, Evas *e, Evas_Object *obj,
252 Evas_Event_Key_Down *ev)
256 if (strcmp(ev->keyname, KEY_RIGHT) &&
257 strcmp(ev->keyname, KEY_LEFT))
263 void CVideoSlider::OnKeyUp(int id, Evas *e, Evas_Object *obj,
264 Evas_Event_Key_Up *ev)
268 if (strcmp(ev->keyname, KEY_RIGHT) &&
269 strcmp(ev->keyname, KEY_LEFT))
275 void CVideoSlider::OnMouseDown(int id, Evas *e, Evas_Object *obj,
276 Evas_Event_Mouse_Down *ev)
283 void CVideoSlider::OnMouseUp(int id, Evas *e, Evas_Object *obj,
284 Evas_Event_Mouse_Up *ev)
291 void CVideoSlider::OnMouseMove(int id, Evas *e, Evas_Object *obj,
292 Evas_Event_Mouse_Move *ev)
296 if (!elm_object_focus_get(obj))
297 elm_object_focus_set(obj, EINA_TRUE);
300 void CVideoSlider::OnFocused(int id, Evas_Object *obj, Elm_Object_Item *item)
304 elm_object_signal_emit(m->base, SIG_SLIDER_FOCUS, "");
307 void CVideoSlider::OnUnfocused(int id, Evas_Object *obj, Elm_Object_Item *item)
311 elm_object_signal_emit(m->base, SIG_SLIDER_UNFOCUS, "");
314 void CVideoSlider::OnChanged(int id, Evas_Object *obj)
319 v = elm_slider_value_get(obj);
320 _get_timestr(str, sizeof(str), v);
321 elm_object_part_text_set(m->base, PART_CURTIME_TEXT, str);