From 25b318ade476d4af918b82a9fa94d32428448ee2 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Fri, 23 Jan 2015 17:03:59 +0900 Subject: [PATCH 2/5] Initial commit Change-Id: I372b888bf55bfe6c1cfac682a3d94f189c72585e Signed-off-by: Minkyu Kang --- CMakeLists.txt | 108 +++ include/control.h | 92 +++ include/dbg.h | 39 ++ include/define.h | 109 +++ include/i18n.h | 37 ++ include/mediadata.h | 37 ++ include/playermgr.h | 73 +++ include/slider.h | 69 ++ include/timeout_handler.h | 32 + include/videodata.h | 34 + include/view_player.h | 33 + include/volume.h | 66 ++ org.tizen.video-player-tv-ref.manifest | 10 + org.tizen.video-player-tv-ref.png | Bin 0 -> 38658 bytes org.tizen.video-player-tv-ref.xml.in | 10 + packaging/org.tizen.video-player-tv-ref.spec | 68 ++ res/edc/CMakeLists.txt | 17 + res/edc/images/btn_video_ff_foc.png | Bin 0 -> 19987 bytes res/edc/images/btn_video_ff_nor.png | Bin 0 -> 20907 bytes res/edc/images/btn_video_next_foc.png | Bin 0 -> 20048 bytes res/edc/images/btn_video_next_nor.png | Bin 0 -> 20977 bytes res/edc/images/btn_video_offrepeat_foc.png | Bin 0 -> 21148 bytes res/edc/images/btn_video_offrepeat_nor.png | Bin 0 -> 22030 bytes res/edc/images/btn_video_pause_foc.png | Bin 0 -> 19560 bytes res/edc/images/btn_video_pause_nor.png | Bin 0 -> 20438 bytes res/edc/images/btn_video_play_foc.png | Bin 0 -> 20148 bytes res/edc/images/btn_video_play_nor.png | Bin 0 -> 21010 bytes res/edc/images/btn_video_prev_foc.png | Bin 0 -> 20047 bytes res/edc/images/btn_video_prev_nor.png | Bin 0 -> 20996 bytes res/edc/images/btn_video_repeatall_foc.png | Bin 0 -> 20371 bytes res/edc/images/btn_video_repeatall_nor.png | Bin 0 -> 21337 bytes res/edc/images/btn_video_repeatone_foc.png | Bin 0 -> 20876 bytes res/edc/images/btn_video_repeatone_nor.png | Bin 0 -> 20832 bytes res/edc/images/btn_video_rew_foc.png | Bin 0 -> 19989 bytes res/edc/images/btn_video_rew_nor.png | Bin 0 -> 20934 bytes res/edc/images/btn_video_setting_foc.png | Bin 0 -> 20824 bytes res/edc/images/btn_video_setting_high.png | Bin 0 -> 21104 bytes res/edc/images/btn_video_setting_nor.png | Bin 0 -> 21934 bytes res/edc/images/ico_check_foc.png | Bin 0 -> 18262 bytes res/edc/images/ico_check_high.png | Bin 0 -> 17847 bytes res/edc/images/ico_mute.png | Bin 0 -> 18097 bytes res/edc/images/ico_vol.png | Bin 0 -> 18333 bytes res/edc/images/progressbar_thumb_foc.png | Bin 0 -> 18670 bytes res/edc/images/progressbar_thumb_nor.png | Bin 0 -> 18441 bytes res/edc/images/round_rectangle_9X9.png | Bin 0 -> 15130 bytes res/edc/images/tooltip_arrow.png | Bin 0 -> 18215 bytes res/edc/images/tooltip_center.png | Bin 0 -> 18116 bytes res/edc/images/tooltip_left.png | Bin 0 -> 18200 bytes res/edc/images/tooltip_right.png | Bin 0 -> 18187 bytes res/edc/images/videoplay_progress_foc_bg.png | Bin 0 -> 18294 bytes res/edc/video-player-tv-ref-theme.edc | 9 + res/edc/video-player-tv-ref.edc | 669 +++++++++++++++++++ res/edc/volume.edc | 195 ++++++ res/edc/widgets/button.edc | 949 +++++++++++++++++++++++++++ res/edc/widgets/ctxpopup.edc | 35 + res/edc/widgets/progressbar.edc | 372 +++++++++++ res/edc/widgets/slider.edc | 309 +++++++++ res/edc/widgets/style.edc | 4 + res/images/menubtn.png | Bin 0 -> 20787 bytes src/control.c | 228 +++++++ src/main.c | 184 ++++++ src/mediadata.c | 199 ++++++ src/playermgr.c | 491 ++++++++++++++ src/slider.c | 268 ++++++++ src/timeout_handler.c | 161 +++++ src/videodata.c | 120 ++++ src/view_player.c | 753 +++++++++++++++++++++ src/volume.c | 217 ++++++ 68 files changed, 5997 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 include/control.h create mode 100644 include/dbg.h create mode 100644 include/define.h create mode 100644 include/i18n.h create mode 100644 include/mediadata.h create mode 100644 include/playermgr.h create mode 100644 include/slider.h create mode 100644 include/timeout_handler.h create mode 100644 include/videodata.h create mode 100644 include/view_player.h create mode 100644 include/volume.h create mode 100644 org.tizen.video-player-tv-ref.manifest create mode 100644 org.tizen.video-player-tv-ref.png create mode 100644 org.tizen.video-player-tv-ref.xml.in create mode 100644 packaging/org.tizen.video-player-tv-ref.spec create mode 100644 res/edc/CMakeLists.txt create mode 100644 res/edc/images/btn_video_ff_foc.png create mode 100644 res/edc/images/btn_video_ff_nor.png create mode 100644 res/edc/images/btn_video_next_foc.png create mode 100644 res/edc/images/btn_video_next_nor.png create mode 100644 res/edc/images/btn_video_offrepeat_foc.png create mode 100644 res/edc/images/btn_video_offrepeat_nor.png create mode 100644 res/edc/images/btn_video_pause_foc.png create mode 100644 res/edc/images/btn_video_pause_nor.png create mode 100644 res/edc/images/btn_video_play_foc.png create mode 100644 res/edc/images/btn_video_play_nor.png create mode 100644 res/edc/images/btn_video_prev_foc.png create mode 100644 res/edc/images/btn_video_prev_nor.png create mode 100644 res/edc/images/btn_video_repeatall_foc.png create mode 100644 res/edc/images/btn_video_repeatall_nor.png create mode 100644 res/edc/images/btn_video_repeatone_foc.png create mode 100644 res/edc/images/btn_video_repeatone_nor.png create mode 100644 res/edc/images/btn_video_rew_foc.png create mode 100644 res/edc/images/btn_video_rew_nor.png create mode 100644 res/edc/images/btn_video_setting_foc.png create mode 100644 res/edc/images/btn_video_setting_high.png create mode 100644 res/edc/images/btn_video_setting_nor.png create mode 100644 res/edc/images/ico_check_foc.png create mode 100644 res/edc/images/ico_check_high.png create mode 100644 res/edc/images/ico_mute.png create mode 100644 res/edc/images/ico_vol.png create mode 100644 res/edc/images/progressbar_thumb_foc.png create mode 100644 res/edc/images/progressbar_thumb_nor.png create mode 100644 res/edc/images/round_rectangle_9X9.png create mode 100644 res/edc/images/tooltip_arrow.png create mode 100644 res/edc/images/tooltip_center.png create mode 100644 res/edc/images/tooltip_left.png create mode 100644 res/edc/images/tooltip_right.png create mode 100644 res/edc/images/videoplay_progress_foc_bg.png create mode 100644 res/edc/video-player-tv-ref-theme.edc create mode 100644 res/edc/video-player-tv-ref.edc create mode 100644 res/edc/volume.edc create mode 100644 res/edc/widgets/button.edc create mode 100644 res/edc/widgets/ctxpopup.edc create mode 100644 res/edc/widgets/progressbar.edc create mode 100644 res/edc/widgets/slider.edc create mode 100644 res/edc/widgets/style.edc create mode 100644 res/images/menubtn.png create mode 100644 src/control.c create mode 100644 src/main.c create mode 100644 src/mediadata.c create mode 100644 src/playermgr.c create mode 100644 src/slider.c create mode 100644 src/timeout_handler.c create mode 100644 src/videodata.c create mode 100644 src/view_player.c create mode 100644 src/volume.c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..13347fa --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,108 @@ +# Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT("video-player-tv-ref" C) + +INCLUDE(FindPkgConfig) +pkg_check_modules(PKGS REQUIRED + elementary + capi-appfw-application + dlog + ecore-x + efl-extension + edje + evas + utilX + x11 + vconf + mm-player + capi-media-player + capi-media-sound-manager + capi-content-media-content) + +IF(NOT DEFINED PACKAGE_NAME) + SET(PACKAGE_NAME "org.tizen.video-player-tv-ref") +ENDIF(NOT DEFINED PACKAGE_NAME) + +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +IF(NOT DEFINED BINDIR) + SET(BINDIR "${PREFIX}/bin") +ENDIF(NOT DEFINED BINDIR) +IF(NOT DEFINED RESDIR) + SET(RESDIR "${PREFIX}/res") +ENDIF(NOT DEFINED RESDIR) +IF(NOT DEFINED EDJEDIR) + SET(EDJEDIR "${PREFIX}/res/edje") +ENDIF(NOT DEFINED EDJEDIR) +IF(NOT DEFINED LOCALEDIR) + SET(LOCALEDIR "${PREFIX}/res/locale") +ENDIF(NOT DEFINED LOCALEDIR) +IF(NOT DEFINED IMAGEDIR) + SET(IMAGEDIR "${PREFIX}/res/images") +ENDIF(NOT DEFINED IMAGEDIR) +IF(NOT DEFINED MANIFESTDIR) + SET(MANIFESTDIR "/usr/share/packages") +ENDIF(NOT DEFINED MANIFESTDIR) +IF(NOT DEFINED DESKTOP_ICONDIR) + SET(DESKTOP_ICONDIR "/usr/share/icons/default/small") +ENDIF(NOT DEFINED DESKTOP_ICONDIR) +IF(NOT DEFINED DESKTOP_ICON) + SET(DESKTOP_ICON ${PACKAGE_NAME}.png) +ENDIF(NOT DEFINED DESKTOP_ICON) + +SET(SRCS + src/main.c + src/view_player.c + src/playermgr.c + src/videodata.c + src/mediadata.c + src/timeout_handler.c + src/volume.c + src/slider.c + src/control.c +) + +SET(TARGET_EDJ "${PROJECT_NAME}.edj") +SET(THEME_EDJ "${PROJECT_NAME}-theme.edj") + +ADD_DEFINITIONS("-DEDJEDIR=\"${EDJEDIR}\"") +ADD_DEFINITIONS("-DEDJEFILE=\"${EDJEDIR}/${TARGET_EDJ}\"") +ADD_DEFINITIONS("-DTHEMEFILE=\"${EDJEDIR}/${THEME_EDJ}\"") +ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE_NAME}\"") +ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") +ADD_DEFINITIONS("-DDOMAIN_NAME=\"${PROJECT_NAME}\"") +ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"") + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) + +ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) + +FOREACH(flag ${PKGS_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) +#SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS}) +CONFIGURE_FILE(${PACKAGE_NAME}.xml.in ${PACKAGE_NAME}.xml) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) +INSTALL(FILES ${PACKAGE_NAME}.xml DESTINATION ${MANIFESTDIR}) +INSTALL(FILES ${PACKAGE_NAME}.manifest DESTINATION ${MANIFESTDIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/${DESKTOP_ICON} DESTINATION ${DESKTOP_ICONDIR}) +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/res/images DESTINATION ${RESDIR}) + +ADD_SUBDIRECTORY(res/edc) diff --git a/include/control.h b/include/control.h new file mode 100644 index 0000000..14f4612 --- /dev/null +++ b/include/control.h @@ -0,0 +1,92 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __CONTROL_H__ +#define __CONTROL_H__ + +struct control_data; + +/** + * Init control data + * + * @return the pointer of allocated control_data struct + */ +struct control_data *control_init(void); + +/** + * Fini control data + * + * @param data the pointer of control_data struct + */ +void control_fini(struct control_data *data); + +/** + * Add a control buttons + * + * @param data the pointer of control_data struct + * @param base the base object of layout + * @param btns name of buttons + * @param count the number of buttons + * @return if success EINA_TRUE is returned otherwise will return EINA_FALSE + */ +Eina_Bool control_add_bar(struct control_data *data, + Evas_Object *base, const char **btns, int count); + +/** + * Show the control + * + * @return the pointer of allocated control_data struct + */ +void control_show(struct control_data *data); + +/** + * Hide the control + * + * @return the pointer of allocated control_data struct + */ +void control_hide(struct control_data *data); + +/** + * Init the event handler + * + * @param data the pointer of control_data struct + * @param func callback function + * @param param parameter of callback function + */ +void control_handler_init(struct control_data *data, + void (*func)(void *, const char *), void *param); + +/** + * Set the focus to button + * + * @param data the pointer of control_data struct + * @param id id of buttons + * @param foc EINA_TRUE to set or EINA_FALSE to unset + */ +void control_focus_set(struct control_data *data, int id, Eina_Bool foc); + +/** + * Emit the signal to button + * + * @param data the pointer of control_data struct + * @param id id of buttons + * @param emission name of signal + * @param source source name of signal + */ +void control_signal_emit(struct control_data *data, int id, + const char *emission, const char *source); + +#endif diff --git a/include/dbg.h b/include/dbg.h new file mode 100644 index 0000000..34796ff --- /dev/null +++ b/include/dbg.h @@ -0,0 +1,39 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __DBG_H__ +#define __DBG_H__ + +#include + +#ifdef LOG_TAG +#undef LOG_TAG +#endif +#define LOG_TAG "org.tizen.video-player" + +#ifndef _ERR +#define _ERR(fmt, args...) LOGE("[%s:%d] "fmt"\n", __func__, __LINE__, ##args) +#endif + +#ifndef _DBG +#define _DBG(fmt, args...) LOGD("[%s:%d] "fmt"\n", __func__, __LINE__, ##args) +#endif + +#ifndef _INFO +#define _INFO(fmt, args...) LOGI("[%s:%d] "fmt"\n", __func__, __LINE__, ##args) +#endif + +#endif /* __DBG_H__ */ diff --git a/include/define.h b/include/define.h new file mode 100644 index 0000000..96262ff --- /dev/null +++ b/include/define.h @@ -0,0 +1,109 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +/* Part name definitions */ +#define PART_CONTENTAREA "content.area" +#define PART_TITLETEXT "title.text" +#define PART_RESOLUTIONTEXT "resolution.text" +#define PART_SOURCETEXT "source.text" +#define PART_DATETEXT "date.text" +#define PART_SWALLOWAREA "swallow.area" +#define PART_ELM_SWALLOWICON "elm.swallow.icon" +#define PART_SLIDER "slider.area" +#define PART_CURTIME_TEXT "elapsed.time" +#define PART_COUNTTEXT "count.text" +#define PART_CURRENTTEXT "current.text" +#define PART_TOTALTIME_TEXT "total.time" +#define PART_VOLUME_VALUE "volume.value" +#define PART_VOLUME_BAR "swallow.volume.bar" + +/* Group name definitions */ +#define GRP_VIDEO_PLAYER "video_player" +#define GRP_VOLUME "volume" + +/* Signal definitions */ +#define SIG_SELECTED "selected" +#define SIG_CLICKED "clicked" +#define SIG_CHANGED "changed" +#define SIG_FOCUSED "focused" +#define SIG_UNFOCUSED "unfocused" +#define SIG_VOLUME_MUTE "volume,mute" +#define SIG_VOLUME_UNMUTE "volume,unmute" +#define SIG_SHOW_VIEW "show,view" +#define SIG_HIDE_VIEW "hide,view" +#define SIG_SET_PAUSE "set,pause,icon" +#define SIG_SET_PLAY "set,play,icon" +#define SIG_SLIDER_FOCUS "slider,focus,in" +#define SIG_SLIDER_UNFOCUS "slider,focus,out" +#define SIG_BTN_ANI_START "mouse,anim,start" +#define SIG_BTN_ANI_FIN "btn,anim,finish" + +/* Style definitions */ +#define STYLE_INVISIBLE "invisible" +#define STYLE_CTXPOPUP_VIEWER "viewer_popup" +#define STYLE_BTN_SHORTTEXT "shorttext" +#define STYLE_TOOLTIP "videobtn_tooltip" +#define STYLE_CTXPOPUP_VIEWER "viewer_popup" +#define STYLE_SLIDER "progress_slider" +#define STYLE_VOLUME_BAR "volume_bar" + +/* images */ +#define IMAGE_VIDEO_BTN_REW_NORMAL "btn_video_rew_nor.png" +#define IMAGE_VIDEO_BTN_REW_FOCUS "btn_video_rew_foc.png" +#define IMAGE_VIDEO_BTN_FF_NORMAL "btn_video_ff_nor.png" +#define IMAGE_VIDEO_BTN_FF_FOCUS "btn_video_ff_foc.png" +#define IMAGE_VIDEO_BTN_PREV_NORMAL "btn_video_prev_nor.png" +#define IMAGE_VIDEO_BTN_PREV_FOCUS "btn_video_prev_foc.png" +#define IMAGE_VIDEO_BTN_NEXT_NORMAL "btn_video_next_nor.png" +#define IMAGE_VIDEO_BTN_NEXT_FOCUS "btn_video_next_foc.png" +#define IMAGE_VIDEO_BTN_PAUSE_NORMAL "btn_video_pause_nor.png" +#define IMAGE_VIDEO_BTN_PAUSE_FOCUS "btn_video_pause_foc.png" +#define IMAGE_VIDEO_BTN_PLAY_NORMAL "btn_video_play_nor.png" +#define IMAGE_VIDEO_BTN_PLAY_FOCUS "btn_video_play_foc.png" +#define IMAGE_VIDEO_BTN_SETTING_NORMAL "btn_video_setting_nor.png" +#define IMAGE_VIDEO_BTN_SETTING_FOCUS "btn_video_setting_foc.png" +#define IMAGE_VIDEO_BTN_SETTING_HIGHLIGHT "btn_video_setting_high.png" +#define IMAGE_VIDEO_BTN_REPEATOFF_NORMAL "btn_video_offrepeat_nor.png" +#define IMAGE_VIDEO_BTN_REPEATOFF_FOCUS "btn_video_offrepeat_foc.png" +#define IMAGE_VIDEO_BTN_REPEATALL_NORMAL "btn_video_repeatall_nor.png" +#define IMAGE_VIDEO_BTN_REPEATALL_FOCUS "btn_video_repeatall_foc.png" +#define IMAGE_VIDEO_BTN_REPEATONE_NORMAL "btn_video_repeatone_nor.png" +#define IMAGE_VIDEO_BTN_REPEATONE_FOCUS "btn_video_repeatone_foc.png" + +#define IMAGE_TOOLTIP_ARROW "tooltip_arrow.png" + +#define IMAGE_ICON_CHECK_HIGH "ico_check_high.png" +#define IMAGE_ICON_CHECK_FOC "ico_check_foc.png" + +#define IMAGE_SLIDER_NOB_NORMAL "progressbar_thumb_nor.png" +#define IMAGE_SLIDER_NOB_FOCUS "progressbar_thumb_foc.png" +#define IMAGE_VIDEO_PROGRESS_BG "videoplay_progress_foc_bg.png" + +/* sizes */ +#define PADDING_BOX 50 + +#define POSITION_SETTING_POPUP_X 1285 +#define POSITION_SETTING_POPUP_Y 732 + +#define POSITION_SCREEN_POPUP_X 1285 +#define POSITION_SCREEN_POPUP_Y 732 + +#define POSITION_SOUND_POPUP_X 1285 +#define POSITION_SOUND_POPUP_Y 650 + +/* others */ +#define TIMEOUT_TOOLTIP 2.0 +#define TIMEOUT_VIDEOPLAYER 5.0 diff --git a/include/i18n.h b/include/i18n.h new file mode 100644 index 0000000..86e15ae --- /dev/null +++ b/include/i18n.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2013 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __I18N_H__ +#define __I18N_H__ + +#include + +#define i18n_init() bindtextdomain(DOMAIN_NAME, LOCALEDIR) + +#ifdef _ +#undef _ +#endif + +#define _(s) dgettext(DOMAIN_NAME, s) +#define dgettext_noop(s) (s) + +#ifdef N_ +#undef N_ +#endif + +#define N_(s) dgettext_noop(s) + +#endif /* __I18N_H__ */ diff --git a/include/mediadata.h b/include/mediadata.h new file mode 100644 index 0000000..d5b98f1 --- /dev/null +++ b/include/mediadata.h @@ -0,0 +1,37 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#ifndef __MEDIADATA_H__ +#define __MEDIADATA_H__ + +#include +#include "videodata.h" + +struct mediadata; + +int mediadata_init(); +int mediadata_fini(); + +struct mediadata *mediadata_create(const char *path); +void mediadata_destroy(struct mediadata *md); + +const char *mediadata_get_displayname(struct mediadata *md); +const char *mediadata_get_filepath(struct mediadata *md); +time_t mediadata_get_modifiedtime(struct mediadata *md); + +const struct videodata *mediadata_get_video_info(struct mediadata *md); + +#endif diff --git a/include/playermgr.h b/include/playermgr.h new file mode 100644 index 0000000..d5bf35f --- /dev/null +++ b/include/playermgr.h @@ -0,0 +1,73 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#ifndef __PLAYERMGR_H__ +#define __PLAYERMGR_H__ + +#include + +enum display_mode { + E_FULL_SCREEN = 0, + E_ORIGINAL +}; + +struct playermgr; + +struct playermgr *playermgr_init(Evas_Object *win, + const char *path, const char *playlist); + +int playermgr_play_video(struct playermgr *mgr); + +int playermgr_stop_video(struct playermgr *mgr); + +void playermgr_fini(struct playermgr *mgr); + +int playermgr_pause(struct playermgr *mgr); + +int playermgr_resume(struct playermgr *mgr); + +void playermgr_set_prev_video(struct playermgr *mgr); + +Eina_Bool playermgr_set_next_video(struct playermgr *mgr, Eina_Bool repeat); + +const char *playermgr_get_video_path(struct playermgr *mgr); + +int playermgr_get_state(struct playermgr *mgr, player_state_e *state); + +int playermgr_get_position(struct playermgr *mgr, int *position); + +int playermgr_set_position(struct playermgr *mgr, + int sec, player_seek_completed_cb cb, void *data); + +int playermgr_seek(struct playermgr *mgr, + int sec, player_seek_completed_cb cb, void *data); + +int playermgr_set_playback_rate(struct playermgr *mgr, float speed); + +int playermgr_get_playback_rate(struct playermgr *mgr, float *speed); + +int playermgr_set_looping(struct playermgr *mgr, bool value); + +int playermgr_set_audio_effect(struct playermgr *mgr, int value); + +int playermgr_set_display_mode(struct playermgr *mgr, int value); + +int playermgr_set_completed_cb(struct playermgr *mgr, + player_completed_cb cb, void *data); + +void playermgr_get_play_count(struct playermgr *mgr, char *str, int len); + +#endif diff --git a/include/slider.h b/include/slider.h new file mode 100644 index 0000000..c07bd83 --- /dev/null +++ b/include/slider.h @@ -0,0 +1,69 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __SLIDER_H__ +#define __SLIDER_H__ + +struct slider_data; + +/** + * Init slider data + * + * @return the pointer of allocated slider_data struct + */ +struct slider_data *slider_init(void); + +/** + * Fini slider data + * + * @param data the pointer of slider_data struct + */ +void slider_fini(struct slider_data *data); + +/** + * 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); + +/** + * 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); + +/** + * Resume the slider timer + * + * @param data the pointer of slider_data struct + */ +void slider_resume(struct slider_data *data); + +/** + * Pause the slider timer + * + * @param data the pointer of slider_data struct + */ +void slider_pause(struct slider_data *data); + +#endif diff --git a/include/timeout_handler.h b/include/timeout_handler.h new file mode 100644 index 0000000..aa80dfb --- /dev/null +++ b/include/timeout_handler.h @@ -0,0 +1,32 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#ifndef __TIMEOUT_HANDLER_H__ +#define __TIMEOUT_HANDLER_H__ + +struct timeout_handler; + +typedef void (*timeout_event_cb)(void *data, int type, void *ev); + +struct timeout_handler *timeout_handler_init(double timeout, + timeout_event_cb timeout_cb, void *timeout_data, + timeout_event_cb event_cb, void *event_data); + +void timeout_handler_fini(struct timeout_handler *handle); + +void timeout_handler_reset(struct timeout_handler *handle); + +#endif diff --git a/include/videodata.h b/include/videodata.h new file mode 100644 index 0000000..555fc29 --- /dev/null +++ b/include/videodata.h @@ -0,0 +1,34 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#ifndef __VIDEODATA_H__ +#define __VIDEODATA_H__ + +#include + +struct videodata; + +struct videodata *videodata_create(media_info_h media_h); + +void videodata_destroy(struct videodata *video_info); + +int videodata_get_duration(const struct videodata *video_info); +int videodata_get_played_position(const struct videodata *video_info); + +int videodata_get_width(const struct videodata *video_info); +int videodata_get_height(const struct videodata *video_info); + +#endif diff --git a/include/view_player.h b/include/view_player.h new file mode 100644 index 0000000..b837456 --- /dev/null +++ b/include/view_player.h @@ -0,0 +1,33 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#ifndef __VIEW_PLAYER_H__ +#define __VIEW_PLAYER_H__ + +struct viewdata; + +struct viewdata *view_player_init(Evas_Object *win, + char *path, char *playlist); + +void view_player_fini(struct viewdata *mgr); + +int view_player_create(struct viewdata *mgr); + +int view_player_pause(struct viewdata *mgr); + +int view_player_resume(struct viewdata *mgr); + +#endif diff --git a/include/volume.h b/include/volume.h new file mode 100644 index 0000000..e89af5c --- /dev/null +++ b/include/volume.h @@ -0,0 +1,66 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#ifndef __VOLUME_H__ +#define __VOLUME_H__ + +enum volume_val { + E_VOLUME_DOWN = -1, + E_VOLUME_MUTE = 0, + E_VOLUME_UP = 1 +}; + +struct volume_data; + +/** + * Init volume data + * + * @return the pointer of allocated volume_data struct + */ +struct volume_data *volume_init(void); + +/** + * Fini volume data + * + * @param data the pointer of volume_data struct + */ +void volume_fini(struct volume_data *data); + +/** + * Add a volume bar + * + * @param data the pointer of volume_data struct + * @param base the base object of volume layout + * @return if success EINA_TRUE is returned otherwise will return EINA_FALSE + */ +Eina_Bool volume_add_bar(struct volume_data *data, Evas_Object *base); + +/* + * hide the volume bar + * + * @param data the pointer of volume_data struct + */ +void volume_hide_bar(struct volume_data *data); + +/* + * Handle the volume key + * + * @param data the pointer of volume_data struct + * @param val value of volme key + */ +void volume_handle_key(struct volume_data *data, enum volume_val val); + +#endif diff --git a/org.tizen.video-player-tv-ref.manifest b/org.tizen.video-player-tv-ref.manifest new file mode 100644 index 0000000..f7f6493 --- /dev/null +++ b/org.tizen.video-player-tv-ref.manifest @@ -0,0 +1,10 @@ + + + + + + + + + + diff --git a/org.tizen.video-player-tv-ref.png b/org.tizen.video-player-tv-ref.png new file mode 100644 index 0000000000000000000000000000000000000000..affa43645cd9689ed9ea1d41404cfbb195a130ae GIT binary patch literal 38658 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�>=c|6It zB9{>TD4*!2)eY)(cou-Bc*u@7P{yUeRP_(RrcO{D);>waWxki8hxh`>13tVQlsZv- zPV53!S-lz|`xQHaS&eP#efVY1)x5PSOt%#q={PwhnJZ~<#kWy6E_bl^4@`SUf!C7% z?4{YykL|0xxu2N)tRq`X<+LC%fwRX=xe?MaC!8_7W0c zn4RZiy)Z0?2{R>}rFUEZOUw>?OM>xCVfKX31v>a= z;d}&HtXZJ>dzagM3`oS7a!j!B1%FhiPYL^2-}9!WLLCf4=AMmD$7hfOYQvZrMY)`k z3tcmF)u|w9~tGRgVtiwyrmd^^7~DvaT76IumC-JxlR7L6uf6 zN+(rmHd*7bsHQ1+9-%plE8p0K8NVo)*G~Unb1*pDL{N*JxM}J3jP?T-8*ij(V$o>l zH7tl%?&!w#HtN77=&|}-2<4ldAy>!JX$nzt9yYO-`W`LC^GFh6ppC4%O_zt|1w)n=}^FftB)F$xb7sG`!>$c zRRTUsWJ;fu3Le?ni_3TuG^nsgC8-mB;xr@+=iI;6Rb)s65q&{ftcg((RLmiD_7rxK z@6L2~%Wa^zmZvNt8$LBs=*D$5OrewRhDxUJ#T)I!c^sK2%{HM%m2TkyaK07$?H;bBA%<`lW;ZMhRy%oAFiSvGJo`otb335b2Q9}XQsBcaw zq!=Eo_5iR2n$v|W=M1CS*^i>2+O4fHb5Mtat{7X zwm2HWvhtVB8_^$R|L+Um?ehI2z9d@FP};sbkha`Ys41f<$-u@qaK(atJben`Nzcmj z#!`MlH!u#b+I>VLQH|AF)ivIMFgr=k(9a}a1UY%v*}OWas5gJhwWuM$;;s~#1FxZ> zm^rrZ8NEve#&^~>i9KR;TsqdPzN5YYkGE6VZtW3CaT52_=Hfk%lW?9Sp-Q@58&$>? z$0_6s368FK4lE(dZ_%I9_nbtujxSBtJRq{Ar3AO8v38ureZ437YQdYj)zOb^E@p+scaHSXN7|e*=`jdj zHHB!3|8#;CuNWscZTUn)HO~6}kR7^L&hI4s@BH^sA zj4&2M`$NK);M^^kRzyLsaT6@s7zzzV*I^NBwq;J4hL^(ta@O`-yk4;u1AOqSq&M!G zn5b=6Yx25$URd9_7Lmwf^6yk_4)*HoAz0$#4bXxe(p@ zrV6R~0~a_cv%94O=|K2?pi@qJyRCt8?l`(`a>NG=0{1(w0iJneW|qFY#%W|Ku#d1%eKwbY~aCmkkW#j(|A9HxkN3Of^E z$ZPaD;4(y&45^$N8e4kxQ~-iiQ>>&^9+;7yhtIm+S*EH&t-Znr?htA18yy{8tB+GP4Pky34Wh$Ab(&2kwjYrDM_J>#KS4N z1xOdsDASuBR#}poie_TlOK7G?33-V)y>;Yr!3Zk7rh7S7k?fJ0C>h-g6hs@@&>i%Y zPU3IdX6ari(Q~_#W#HbrlsK(Wvu4RVt#I=$voSgf(hTy&*ME~J*86V(}UmbFO-_4D&oDWD--o~ zxquW5{+x5J$yc>MO-7oy>w_gEgVvM_f@JXbK2)-R6<-^bU(ZTVpc(3;38h1?KNl@d z(4O>cm>kPy;K#hXZU|(z@U{W7w$R*EPgI9*Ims4LD6xZz&WhfZVlG?~*0BE?&N#D7 z!MZtJT!OuqN<<4(Su4J>wl+>#)~^(YJ5tU)Hzj6jPULF-lrFu?oeA`*mj_N({{VFv z&2$Av?(9x(sO)Z>Aw6?TJ6)y1{2Xdkw>`_*DQ@nM$@^880z)8qg3 z8)lwcB)E~|Yn@RTdc$cg)KQmJH>eF^iOSDBKTbb7V)ZO%^MR_>b#xK$vnJw8BOA-C z&ptYF;)FRrEaJGjSbJQs{oQa<>fgdYc>W*v-$Ryj|6}(b?!SgFUYt4};D5RQ9^U)< z$MFDv+x>_8U%;!bEdRIjzlZ-U_& + + + Minkyu Kang + video player app for playing videos + + + @DESKTOP_ICON@ + + diff --git a/packaging/org.tizen.video-player-tv-ref.spec b/packaging/org.tizen.video-player-tv-ref.spec new file mode 100644 index 0000000..1e472ac --- /dev/null +++ b/packaging/org.tizen.video-player-tv-ref.spec @@ -0,0 +1,68 @@ +Name: org.tizen.video-player-tv-ref +Summary: Video Player Application +Version: 0.2 +Release: 1 +Group: Applications/Core Applications +License: Apache-2.0 +Source0: %{name}-%{version}.tar.gz + +BuildRequires: cmake +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(ecore-x) +BuildRequires: pkgconfig(efl-extension) +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(edje) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(capi-media-player) +BuildRequires: pkgconfig(capi-media-sound-manager) +BuildRequires: pkgconfig(capi-content-media-content) +BuildRequires: pkgconfig(mm-player) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(x11) +BuildRequires: pkgconfig(vconf) +BuildRequires: gettext-devel +BuildRequires: edje-bin + +%define _pkgdir /usr/apps/%{name} +%define _bindir %{_pkgdir}/bin +%define _resdir %{_pkgdir}/res +%define _datadir %{_pkgdir}/data +%define _localedir %{_resdir}/locale +%define _manifestdir /usr/share/packages +%define _desktop_icondir /usr/share/icons/default/small + +%description +Video Player Reference Application + +%prep +%setup -q + +%build +cmake \ + -DCMAKE_INSTALL_PREFIX=%{_pkgdir} \ + -DPACKAGE_NAME=%{name} \ + -DBINDIR=%{_bindir} \ + -DLOCALEDIR=%{_localedir} \ + -DMANIFESTDIR=%{_manifestdir} \ + -DDESKTOP_ICONDIR=%{_desktop_icondir} \ + -DDESKTOP_ICON=%{name}.png \ + -DVERSION=%{version} + +make %{?jobs:-j%jobs} + +%install +%make_install +install --directory %{buildroot}/%{_datadir} + +%clean +rm -rf %{buildroot} + +%files +%defattr(-,root,root,-) +%manifest %{_manifestdir}/%{name}.manifest +%{_bindir}/* +%{_resdir}/* +%{_datadir} +%{_manifestdir}/%{name}.xml +%{_desktop_icondir}/%{name}.png diff --git a/res/edc/CMakeLists.txt b/res/edc/CMakeLists.txt new file mode 100644 index 0000000..0cd5335 --- /dev/null +++ b/res/edc/CMakeLists.txt @@ -0,0 +1,17 @@ +ADD_CUSTOM_TARGET(${TARGET_EDJ} + COMMAND edje_cc -id images + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.edc + ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_EDJ} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} ${TARGET_EDJ}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_EDJ} DESTINATION ${EDJEDIR}) + +ADD_CUSTOM_TARGET(${THEME_EDJ} + COMMAND edje_cc -id images + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}-theme.edc + ${CMAKE_CURRENT_BINARY_DIR}/${THEME_EDJ} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}-theme.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} ${THEME_EDJ}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${THEME_EDJ} DESTINATION ${EDJEDIR}) diff --git a/res/edc/images/btn_video_ff_foc.png b/res/edc/images/btn_video_ff_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..58c9459a2dfc887ddda40847c6b113b8b6eb3be0 GIT binary patch literal 19987 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_next_nor.png b/res/edc/images/btn_video_next_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..54f7dbb1e7c55dd1e4ffad87c83d5836b32c1d9f GIT binary patch literal 20977 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_offrepeat_foc.png b/res/edc/images/btn_video_offrepeat_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..c42caab5d2ae015bcee22576a19fa43901481dbb GIT binary patch literal 21148 zcmeI4cT`hZ^zSc4dM_eUq(~77A#@_W_g)o{03q~HLKg%PX-ZY;2r3{TU6CrG2%>Zq zse%+~0!k4qzzaH~PG%-=-g>|H$6JdmAlYZ1?>_f@&OZCzo3$=6272n0WXH(>0HD;= zP%*;1dmQ|d5Mlmyoa6n9c_a1Iu=D`{a{7Z`JRl?M7yyvzJ1Z+27&swONFOJpCx@o8 zGKZ%(($U!s4gdk8*~SPHh< zQ3I%W1fY9q$g2Pn3P9K}I`R}i7!24x<>n3mE~f(wYU}1QA5WLj%nM*hrB}(+os?D$ zKSu)cA~rV{V(0JGWID|t0mFx7C0Pq$SI5gWp_2`HuJ3l7V->Z+Lm+o? z)O^G9fQ@QiV%^Bd-0bYIR=d(U*faBxJw)qywE3>v=TMn%+gnqQr%#59Scj_DZn;6>A=}L+xl~Ai`EtRY%^%odPP78lyI4PmxQxbX@=V&yZ zU91InJPA{JbHsUs60&uDd6B{Ic3@@_q*tBqQNyZf3vtgX6MSCGzI`OPr`j6XcXTh0zPg zh(+7ogoQfVlq#hJNmJ~fS90B_DCsy}VRoOOA!f_IuhO58E?gB&DnaP4!~tVh)UeR8 z&>Pmc$H971jCPb%l9b@GVJjb3%02A|y!Eu7+mG3aK%y)(1i6Rk66nD+!O_a?k|*h6 zltuXJ67e-F@0twK4XO=#7;!HO7G;WQ9Oq8y8g+23B9^``$Z`5<ZuO%jT1j6=%QOht`nib!AHEHN$4Hdr=hF-8=fxffN8xQ8^6zZ+_~8$)E-rqiac zeAh6y^88F=2M4)5b9I0qrz>U272k02cHYXKkqdqT4Qab<4RNx?MS0T7qFSQn)kYiF z9p#B<(!6%EPQse{0+T#Ij}-n1yuC^0NiUv82pTPe&g zXi{yk{2ETB*r~;5#ix!)=sl7>Z#-f=QAk#JR96Ca`J#3u_2?*JRiIOW~F}g#}SH#Yv(uir!-~PsF{DGHl?^v5$tz)@=&P`LG+X z)VG(D>IP))yi&WSMt#+}!)oT_jC+TB#~ofGUQS+Z-6h@C3?tpTf>Q-&bk68>_H_5$ z?iorK&y7QCK@ZNajyx1A?%nCkDipZt)?`kgw%&z z+m$7zj2fXTVLQtf>hr*x0cr+)lhK>CDj)J>^X4KLVbMp^H!M0+L;w6#yK}a2<_mQM z6Qa&1Vk0^(M*Grpp;S4cOqPy`r%kh3s4Xw+w?Ttj*_qXutt;omZpAZ*_~^ zI+bH7>eJu$RC&s9Za|*=)(v6T$@`)D%KG7mhx6QEdvKC@>FbI|`ToV*ur(&RPjcS3 zX5?mMB;SaN#%>&`wsg-`vX8>7!MwTASPTf{2cz*ouCVx z&GGWkG5DvdkrlAMY7$aeM%hD(*ipuIw|Z@FKLwi001Th|cK4N88W)F>W!@`-4^ z;9T8hzM{lN9ZH>vOlZ#03_lKc5m{&xBqBK}(MzeAQ#Yjsv4nW%==c0SJhE!ihY%{?*Cq;HnwobFlau6{O_D4Df(Yk!5V zmF{hFP5u>aa}b-wyQcdt(p55Efn#Jdj7LsiF(bM!QyW_&;QmU#WW_wSEVPL?NY^#o zrsdhCmWOz*%jBkHbCDs-wF~-D}F^n;#GF}|!9}k#gi9$YW zP9MMips1w1&Y{n7&~fqI8&J+Us++~B?^3BeC`U#gP)?dXSlRldItEVd;U8;=s8O!F z(=1cl2rumF?KvZFa@SK>fppf*y|mSfmN2^#!q7JUyYq>+}@SzdOT)|XR7R#WpBwVw5m+dRd*S^Tgx5 z>@|N7r39tvwXBY5ZcmlK*~M+r$!&H@=&0Y-;QMchU!3q`L$HBelrq*c)H01TzMiu? zSFhhKH!!sHCg_{`*a_+^F&WE1tqqed=h4MWFH#WeeOI$@WQT+beIB2}x@4kdulG#gnq2Jk%)sRtEXXRSA z8r1YK*l~N2B}cM%VzVjmUwHQv-^eo-6ixgbNN_DYX|$| zt^iSp&8FGcl@|YTf3~$dlhpdN7dS5R?>l|2+%oPj{F=g?lCn=okhby7UKBJ208mC} z6AP4ut`5{5=`I9wK-$5D0^B_@7oq?lBOl-ivv-A~IPBmEXAfDfwT5Oc4rd2hE^~2R zVO>vUxRbL+kT={oNYBJR$kkrjflFSFOeO$|3E&P#!8iik-8_7t0kT}*<3cf?51PST z9N)X3TxGcw4+iA0&^6#tMtZ|J#D&B`_QE0%4oPVth`5+E1R}^GA`B4)LxjO1(jW)~ zDkceqNO1h|;*ul7e3J2YaD*DEsQob<#**c7LZLjNV6eZxzmUJE5Yig~hDb|GgM~%F zA|fD650Fow2MQJd^6=sQ5#-M}DsUfrZ)Z=GGtz_OATG=f>5G!(;yM`U=j)GoxqJQ` z$iwFkb{LA_0GKBjA|wp{7m=1IF(CYpH()f~&w#a5+pWih+bNKO!c=Vo+fSR0MKbSQ;uU{9BM8J+WfwV$$9L zhJyW=^i;qWtRl*BH9GP)!dX6wJdOuBjr2nY)m)vjY_3C@v}tlM)5N zr6eUmFkvwmNLoz79wZ786&G`q6qgpZm-s%(zsmm>S_NtEdyqqagmyRxZ6_iQ7q@o= zi8#W=KoT%95sbN+v@20k#q|H~ElPh05!_Z9e+yY@~n4+Pvn z4*X}@{@L)~7VXDU{&he7SqA>T|70BOp^ivzcNj{}*&T*}gFQVEGT>j0zs8jLc@}~y zBi)eRx=07OoTv==pPK(sh52&L;Kz4say~}tN*tQ1$`TN12?>yh5ajnTzxDeq&cS&M zim5S}e20DC+ZfH?+OYdu9MlRo-|zh;MT9Xg%mokT^@sF#H@4IgxAb>6w)B_M)WaDi zC-TQ=Sk1qw4oMn`y9nF!k4npb zRsQDrL-`}2e!G7AUL=0BVy+G`7pCB!SEhffA3rPX|Kx{XQ~IBbiWTc{5G)|L%|l$c z`CxeuabW?$Z64yn%?HbShzkn{Zu1ZqZa!GvLtI!uaGQs?aPz_P9^%3Rg4;aAg_{qS z_YfBr5ZvY=F5G;uyob23fZ#R{apC5J@|#Z z0U(G60Ky^w;PXD_eGveBg#lp67V`jU8UQdMlg~da z+g3u+H0uTiDhjH~M^p_JFNbxO=rtBI=Q^)}jLie;+t^r@D%BMxp9<3x7> zO$8S8*|y-}Fq$o;CiB4SKyVmn=^;D6Se20=QOFDwhzQf+psHA~+J{e(+kz@c_=RIi zSo6?LXjz2^Et@7lW1)>aiz3GpK;$Hz_A3aY3Qv>3iMWx1^~fG6swpXE+1Nve`Ch!T zS`_6md^ZA#BKtK;Wh?y~_r;gS-WAuXX1BW$(oLk-lGrjQ&QD*qj$=og+2ZwgXGd=U z9r(fFc(r_jXaiqaDJ|+IXu~BlGy*M#X4#Gc3tO|1Wi$wQwS{FX$Vjr&z4EoaXwFr} zF3gffJl=kd{GzS2Fu?~As23=_FI?XKHbnyd=lGmjeyUaW8hi+^`Eit4=a+ajZXxnv zfH0HQG}gdYG|`b^ny6@56q%Cg(gQWe3xU(8QVJ5v=<2zM1)d`t7mBMDw3QQ|WD(^& z{>6^N6gf@zGPXyu^wS5ks5FbF=s0{cE-Mn9mz0z=9iM~|^z(Ow1X$9c{>NHPvWI+l zz1Gr}#R^L|-k^?pafi1Q#Ajcz;^-V`e~4!T@m)qWDvJ9v7At2l?x3@-F5t^wR!)9G z+b-L3txlYq{1jT*mq!Rcp!a3|YFex(VVStsi*6yKv#HYgHSIjy6i<0)r*f7l4Ye4{ zOGpC^!kApOtcdz2US^{law!e!guMDPprRBxWkOytYJp>y2&OexzDXQ?PTAyhJwDo| zIJuVZDu;Vq0l~tgJ-vHo0tb&ry~mbXB&Cue1!IS8WoOsJ_DEX*Iin|;a7X`9e!%Dj z!0E&m2?V6RWaPi*5yzZdlah!giaEu-W~){?;l65f;|76&4K8 z2giH*H)U1Cy2PH<_X>GIq5-)gr_+}eoAMXtLH z(!ZNo;d%A7g1rCs`&;WRU$0aoTQKTZ5pQ+slUAKuU1RFn-Q7%h=gt-?*`p*fyuNkp z6I^moFMR%-z&DigXoE9U*56>QSYDCP#AZ<- zf_8**w%Z?MmOR?5;y5VMmO|7oc$djivjlFE9qlPxuVi(cZlVsh=nsIE?+f;f@c~XKm=zmQ?*X&FOvst4s)`zzhYVo!yn~U@|Ld{ zu^sEsyj~MmsM@RP@V|8+&UZmt>DB-p?6;DQ~_Po?u!6F zS!;y0mR>nc^Ik?@Y+RpckktujA!A}P9;faRXTUo6`udw>;+>^s_tCBMwiHeDsnXpX z)<)hjBR+-6qPGe11_JMHHE5k({?M>EvIw$l{|uBexGXlTl3XV8AGlEC`SD!)MAa>{ z+9$_biOGiT)!@y!g-Yd&^$#6Ij`D6%pb7zK$>A3y(=PMhm}!trmQt-PE;I z4r;xi^ez9a@#v{&3*gj;?bl!0-pe7Wa$Mj7|YFMTfYI`N98UxnApkc?~c4nx4`1IWr2zQ6hBGsqLst5unh zi)=bwb9B0aM(@QkqCS;a+q=}qp16mZugOkXVq86-JG&lBJ-s}zQz%@>bEAu zc#2HLTTNFurzYLl`t(C}j0^b9JeEb8&4?DCn%&kelUhB>><*_Z04T4WOfrh7Qw`AG znJgDge>6p@o1R(-w$ya}@X_NeB3u1JD<+1>>L~A4B~n7>)YUR!z#pJE@Pr)=%x}0f8EnfLwN11+f-!Ho%e!oK$}bT zVN+28p%WiuZ?4wd z?e&cmkD{M<-1u|`?8>xO^JP=d;!63W-RoyT8BR>Ak&*IUCs%`yc!g##xP5lx;bvcI zlRr9}DE=UE;gfko!S&kLU3wE*iOn+-3-;5nnNOq_vK}cJznf=Ka~yQJrU*SL9KPeX z?fSTRdyGvaW~>zWN<%!e7|(d(8V|>`{9S4qds+pR8955wN#!WBJL0rw;uY*%NMFoT z%w;w;h{0RJS2Wk^Kg3RIIkhoVC7Zz>x>$Srt?WG#91JC(x>1*VFgK4ZhwO&1i1!jX^ztX{pLO3OmB>};vt8U)<1@`j>ZRIl~{RL$9no(G!h5RP}QfrIo*>VJQ$) z{!RW<^ciq9J$2mW@V2<&2R`@&YfIfZ_#wL5d*S`}o~Y%di`{OWZ~o?uVIwLP^uB`P z;kS6Hj(VeMJ#M`ZiDc9)C-W7p63PPtbht3Zap_G!uce&rC#$5-AE)v{C|Gh7UPxqq z*hsCWJC&(BnwfPy?+$c`89zVYb2jY5;%k;$9u@tkf@ECfGoF-&^z|#mXFh|s=Y5(q zRb@p((Y|IKdTwH8HaKglUuwLhuJjplfxp|HhlD@D&o;iBY<8BJ=?3j~%$K3`#5ii& zn22Is*68lLsk#%IZ9G%y&&bNv$Enhnq4eGOWG>3AXk)acaa8@xN#Vty^Y>zFXV3x0 z3H39iQzq8Y1Zk9RBECf|L--rTUyOXCPpjVjCf=YkKf~a8(f6^1wPbM{x~;$_JKk!F zPo0jq0tgs;S^DC`aRYb%unee>9GRP>?|V--e3$EAD+}7K0ixThtr?yqR2=KD^WMB( z_wK?oQW&FhX%>`0b_}k|GfgZD~_DQFuQteVAj?Yl%o~S6T zk-X<>@&sxMZ1j}Kg_<^W_W0JtaJRySIH~T5b~YA!9j{buswM5HLM{*_*ARJ`8Rk?Ac=~;6w09|aex!FCxXj3< zXV#6cCsoZQJIH<$e~s&Q_?uQ)wnU+#K0ndc<>AGC(erbfQ?wlHq?G}BZr7jFbQZ|m zMwD}L4=kjTuvp`B8T2tuqMr-EK1NR@BR7vKI9?fEL9ZyBv!!}XD1M9q@!U6tAl$l& z5TfKVxr>fapx;_M8c~V|=9Yj)5$L`W`WWVxCqVus@tSb^yXlqajls=ck|1`NzSR-I z{ESczUN6SCaZ)x_nOb)0=sr^GDJBx13A3&8JbxJ(VYyIqJ_wwdSTH&w%Z`T6OO@-= zXvE9s)GM6FF5a8XGD19(2cl?Bo!I7R9JV6cKLL1Z^MsJwcynOx?f^|yJ(V&g+e`lo DRUYam literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_offrepeat_nor.png b/res/edc/images/btn_video_offrepeat_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..a344079a319d545b65f0e7375f0e75f5323d6225 GIT binary patch literal 22030 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 GoBs=LHJ_XS literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_pause_foc.png b/res/edc/images/btn_video_pause_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..acbc9190f4c1649fed13a630c225c655f7c83713 GIT binary patch literal 19560 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_pause_nor.png b/res/edc/images/btn_video_pause_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..6e5b9acc1bdea5682ff395ed092ee08c42d89fb6 GIT binary patch literal 20438 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_play_nor.png b/res/edc/images/btn_video_play_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..d5a4ab181984dc7c630145af2075b60837ed12aa GIT binary patch literal 21010 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 PT1Qjuq-wE>&H4WY{V}!) literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_prev_foc.png b/res/edc/images/btn_video_prev_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..23264bd6506dc892daf9b0f0d6778c16cbbfdf39 GIT binary patch literal 20047 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 TtDui?@S literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_prev_nor.png b/res/edc/images/btn_video_prev_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..dc94857afbb970f358a6414fd80432175e3efde8 GIT binary patch literal 20996 zcmeI4cT|%}`0oQKy(1vK3P?*rC(?VBE+8NT2oNa=5Tu9*A{{|QdJ$}N6p-GFfK(|K zdM~1Yf(U}Z4Z5ptb~ktLxxf3zJ%{%Yl4qWIzBBWgXC{-J^Cm+7ygC^%BQXE~Ak)-P zF+@MR9X$x~(f`{mc=pgwL`V&DPXK^~=IDU~NKHQt01)fJm6i4Noe(I5rxOCnuBoid zj`Tn{z+GSffX`@#k)yHEJ386z$=@Fm+~y99~1l_JhE$V=IR6I*LB;Ay$9uQ14;9gSgEFiJKEZ3=7kl4h`EsfO2RUG4$plq9KcS1jEn$h6F~z2$7hIy z5YVKX)&yb>JET}qO0mQVyou9jG_Y_LfYUiZVgH3lRe%`?aLPfuO&ai42msPF zb~DO@&$c`ZVbUPDwy4Z04&AB08biNk{|b z7!AjRd_2n`-w-UfQF;sj+lfX)isVG0H|uWG}reaH1HEl~e8j zH7%be5N&e-3AeW@l}HH^#oKk4a2Aplv@<@vP>5F>v1Qj^;(dZTNVSPb;)J&nJCs#X z!%WBQ{9BD&c4lrds!<|IBD|XhExerZx!TWoYN)=powgMLhnZ;za=oUGr2$f24OecH z;j!3^BME4^P=-i z^Bfx%#2K~jY9fL4e9}wP!R~kJ%Sp?4pS?-RLTQ6L!X5b- z(oPecc4Y8A{UllEF~d+4Lx(X)68t`SDTN{hVPeK#!S7ES*F~J5mB5q0#1Ayi%YU3d znNMP}Y0_;Rn|I0RTCtjmsL@;=(QsmcNq&a@dm|!%}ODl_NiJF!f zZr*i}Czwli-$_TECtBjmN!kpEoIJIDcJ?gOV=ZKYsr}n zmjW|&5IK{+^-H_V*MR%R`>wk=Tk51{_+_Nr_+zAfr)8dtyCY;+fE{C>43w=}6_g)A z6QD^mH{+@YWFEXyyQM}E4R5!cjgQMFL43wfN`cpZ=O~@^3LCeuG7nX zk@L7WCpRY}IVmz}Zrvlyp}B~|sq@3_B985)7vhU(0HGTA@*%yX>sHP4oD1yzg4#6XFb26!LRFg=R;hbxG(o} z(MN&{)i-(bZrACM=}e?SGU-yUu)B)LLh8Z6cj9ilE9Gd^&CJ?-EF1uZL(p-qRLh13c@kPEj`~;Ff6n zSE*a5XYN!y3e`3hVli8+FT5;WD&y`uMm$G*QXupKexXcNWCg$LE4_kM)1=~ndLBPr z=b%f?T{oJ`ah%_im=G_7TzfzMX4Oj13}`-84&4pSV3MPah%7!eMxR7`{Vm_P&jM2z zqN_1w{O+^7g0^b=euqJacZ-uknHJ=U`ALgO*V~MrFiE`+h9k+osrmJ;d#6G+lv#8tNmwVALW`bj) z`^w=JY)^BqY+JrKBLCe^;-0Hj(Ro+*)egKtynO;L@`^Xr!>?EdWsMDEUkkifC+}cu zILKJ{79x`%Gr5)CKFftv@tuFSO*FO5N(LFd5`DFBhG2;83X3BP@Ul|sMygtxQR<$B ztwoJqkKDlPl}W#E>SJsa>0&bGzFM2cFW{r^ZVbgcZuCcIBxGC*5dJ!DGj_k?>XKdG z)MX09dJQFNW>EDoYUy0vxjxH{D%3{l*aD4dm1*h|h_&kqYDMNCen_vQHoZ2rxZ2XW zdd;uC{HnwDJEly@zKPHEzMtq0U%$$fmYt~I^h0bv-`<*{n+WjW-S6wJ9r5N}E2`70 zv;M5GsyL!N5%x;n;$Zyk`uO$BP2O3X1LNx3_#wgl2XR}m6v`)KQ)0VA$wJ>}O36t} z&&qr3zx$S>+;88{lSzMY|Dd~=o(>qW^XmPZzJcU{?4*sP_(oU%NBb*H?-`zqwYRjh zHoWi=1z-AnVQ;nBd)%94{lOH4-n>8ib-qKVuO(YXFLUxamnIw~+vI}bP#1xL8CAL&AE5nd=+PR^r-eqMi!%N6;v zAve!I*r6!`eV|AnSQrHSmmpnT>|w61{}}0sQoVxi$sZ&8#|Ax(eUUJrAcU~=eG6cYlW|3r*IVh|7*A_@`!Nkc%O-$Z`Y#L&=1r@cKC z1^q87f2oV9gRqA?`2HuAUp4=#p{ongbn`?(-RxkRDst$t3&Y{|5SXZ~t%wLrTnH*I z2@nT#kT}fV;X6OH^l#yRlh*TqqcRhYdD@Gqsmy7e>ik1+V(C-A>f{-OU{_`kQ|?F4hfmheBMzSsJ95l@5z z${XqdQ*=b<#Q$a){t*0Y1g5eK@MuqVf&V|415fCc|GOFZZ%gR^_Zj$=yLL`cH%FMg z9PrPy{j=b|P1=vC{Ofx9a~t^k`jfG@gE$~OT%jmAxGU5V21L3!$^d^A{%TX^=erO@ z8R3HP&_&q8pp zk`wu(HH_llqK@8de?T=tp9^7f=%Ha2Vb<1%`@mexRN(0M1kaU$8T=N}`@ z|26VA&mWOL66&|}+xJc4M=APrh(4GCf1XVLwtxKGVgDyz{2J2#q$-BiaU&Q&u$#xY zu=Bz29^=9Qg55mEg`E$E_ZSxj5bWkLF6?|TyvMjOfM7R|abf3!;XTHM0R+2wj0-y- z4DT^63?SIeV_ewzV0e#lVF1By9^=B!2g7@e3j+vt^B5O)J{aC(To^#Go5#4Y^TF^Q z%nf~mr#JdePF?~d9rRtG>~a1!kD8Ecswf)!jDEHn z+aZrABO>9(x${x^M%F2nJdHN76VHrQ^>d8QfifyyUtwO=>0o~B&X611sfW08r$A(hwMOacRg_L%GB7kw7T^k z@|o4KGQ|4!q-VeE_PD3uSjAazTadH@nLe2@PJ#k%GS8FbIZ-(KNz%^7Ya3d)OM#bc z9^Pea=Es?J0Bkkk+BDpD`1*~dg7PgM3Xk{Ze7IC>?#V>lBwR1mod6~&JbzMuZY~kd zKA61~$CD8b=bTH^%D&fFsd7MURrqH2Q_@;O#gM0@2-7q3+pLHSsb=eDqkA;z0|UTf zBDZ3n%^jG9e!4?x_gE`BEtUDzr?XjPJNEgMm6SWF>Mb=3UMHlUaPU~SwJn<`LQnW| zd|XwEZBn8(B`PEk?%p`CvpxMyFFHht6W?Ez^x+xvfJMTm)?!T$*@f{f$;7%Cd&uYm z=kDLYR~C7qi&uP7n0{*|lw%t3k^$vNl3Hcn)GoMq+ejhoHl2edeqosRJ&vf4z~~t)#w2+G&0UZ9;<*Xp2fMb zoD=k%d|_G7Sbe^&^0eG_#vKclQTmHZs===#9HBvbT9)F-G{x)Nfc|c7W<@B#2dAE< z2DgeOnL*6`K|MG0G#se!6NWr%b9$#1I^TO&LWtx}6%(2AUbKuEWVSP$BW0)$KAA=` zPI<~*;CbZmyHBQ^TgkL?9UuHJadZ<}N2HO7F};S@aw)gb_&w?k6<@dNZ?jN0r*VwX zED%-uqBG-lQEr)T1J&N88$ear^^{y%WoNs;CHg_r)zFZ=F8_!EmDO|aqT}if#+GhL z8uWSdrs~f`O4Gb?(T{tg>bk}>3CitxY#Cu;^OTcw^`zEPirJ5^~ z)J3uf#S%=j#o*|Qc!OH}7~$4j3vnvzpk*bxq%P`ajd9}Ma&DZHUTQCG z8{1o==a32=V$KA-oP)#^R>)VhJhPYe)o-Ock$l9Ve{jQLcYf-*T=$a`tV*huA?A;1 zR#TllUl7Vfp8K3j)A7mYvV%?2P|7w-goRY@l!{0zwh)*G-!3mK?0MgM>#KqwUAH7zyOIq7vJCb$ z(SVCEWn`L<|KUV+dociCeW}W?ouK@S{zWji_uGnzpwZ7{Wj!u&w*K~Jq*dHQQYi>C zR1z+A6C$wjVxkF?ZA!I5NAnFGlRQs%ma{m67e*`g3t{G_VU`ZXQtdu^uWt-cnL3!^ ze-2H5w&ybDwpASzd^?2#wU=2QNUN@jd@jaD`2O1kyl<>;S00p5-qeu?-6X!AzWVWg zPh>U)QkLFuPy*czau>2{9eMXlp04Lf6BwE!NI0(UNPSFp9jg`UzIe(uMNy$c)r)z* zdGml$c87Yb;$DTIbA9Y(LBbS8MS2%YS`umZsdCraiPFL?jwA+dxgpCm>D2U|2wUEf zbfRxKKCep)%{day36}>2&&P({u5x}JSKFeOUE$g|SJ{K>r=Olor_S~fVp*8;%=PL$ zm^p1gw~)c0LgP76p-?;R@rA`3?1Y0_%r(&}C1%6I*&ni~US|GkwtOW=-4>su)TzyNvhJ&bsp%Wl#sz$iGKJ*FqO5kICokPM)2nvu z&twx96O)-59GrFD7+|-ji>os3dHVMJsZWX&+h4v+)_T2v&AZlkc(A>@w|C9l=t$t@ zqqw@$t-8xR!ghcDR=^9=})H|l6;Pe&U$jKudlB* zH8nMJvch%j6AI$GG{WJZV9vf=y1tbXUckQ?4-wh*$}!9fWA*>o+)?2&vf-wur`JVL z-S9$?+Wp1p-HEkSTlu2kI;!c|bKYxpl_e#g9$D31`5MP6iDs|BlufB@z40&Q_Fz9eC<8QtA?YRzM>KXNG#(BE~rAOe+ zOmVYX>os>!sM7H)N+b1hicTgQv0Q2^X=rG;H}1QX(b%w*d6k?eUQ=FV=Ol-y>9W-F z3+^?VTcfFZR94okAVQgvYkObz7@3&7D=R9#?7rmixWmxYa<#ZU3zDE|*#)}iYnas9 z+Iq>_jx-2OEoTUx{vUJ3G2!(F#x;Z+@Dx7u_@3<6uu%b> zuw}B;)h{2|{qC`Od3iN-4`)}r-W-WTh#r9YEOJHe*@dT_^w;CEAz&r0aTuw3urq<4 z%!V?*t(BE8U%t%aQOLZ+{q`2+X_1y=)NA@`c=+4wOc8xKTN zn+@sm6u!DGadS?lA-?L=F5Vs)&h}HMXV-|Vz!O|jN;;^6PG!g(NvyO6=Z44SV4n8O z5GHZ0_TER3*}klP-dARU1oyfg22DQqV(v8%7$R3lgANzn>LmFfDe0`17D2-0J`rkA znT~YZz6+UMj>2JU)lVI|brUao+qzG|ggHhnqp{ITc5c4~J_C5tb}dp)@1vHvl=}SF zO(q~t@v!A}wxk|_-JRv-?I7ktaFWIn{-Iz=0bt4rX0lc51bsT;~mfRF8D^Z!%oS0-oD1fktlV zFz4o*KoWdud_UYxW8@oa-yH0$jy}a3_h5VPrTa<{;^pR#8{KiRcesd~RPMa#%^?uU8(xX(JWZ?{-hME1l(a(my2E;8q$dgfD ztk7!RTQZ2#nux#qEQBwtvgY=5+u;20jHZ&AH2=d-==0in z+$Xbk7nB47pTkLM?+s3S^k-4-T#1N(EqF8KF(FgA?56N;SztD&@Q_nA!}c)KlK#S( z*o4zi-CSH%H%)S3+}azZ`9*;filPRewzkX*N#uotsH*5_Bg73ZL<-++-Pz1yZR5Yq zh6u?`h!}^SZHRucPC{f}7E}-f6XpjG(Ud0P8f%siF9+&&j(gLNWMr%*zG-H^S{xNu zt`%MQ)qMP(+G;v8-|(Fd{u@hmbYA5B+V-E}9G|4}i6f>MTmfzerxSJlJeB+^6%ZxZ;H5aL}q7vFu_a|P#4 zKBwH4N{Q%BSHAFqnfi<9QZR!jvNV~(HiXZ<*s{~&yoQLJeRQ$gbYm`YVm6Z5jN_J9 zdPF3<1t&Khv^Ct1E)bo_ON?p;S!)#bwg~pCp3Hpl)V`LeTDy;bV0o4w z%%8uot_7B%R(j?c1vl%|jG!6r#Bcn2Od%YrUQk~c=$zf9Q~M%rs{c>VkMg! F{|mieqC)@x literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_repeatall_foc.png b/res/edc/images/btn_video_repeatall_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..a9cff55f2faf874c21cf368d56f6adf3c252a03f GIT binary patch literal 20371 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_repeatall_nor.png b/res/edc/images/btn_video_repeatall_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..7f82251752ddca57347c1f117262b58ec643e766 GIT binary patch literal 21337 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_repeatone_nor.png b/res/edc/images/btn_video_repeatone_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..d64fa1fe9610c16f8846462b8e1bcbe1dea89509 GIT binary patch literal 20832 zcmeI4cT`hL)aVa_^d?oBQUn1BN$7-7q$5q56dNIgP?Hcqii&{JQA9cjA{Gz?6{JZq zNGM7dL8MC&5J3eLRLTo_uX=Ou&AV^C@BQ)C;w+ML_UzevW`470pE+6U5PjIpfQ6Bt z5dZ)dBST$F(iyY$p{FH%HyxGuMmjOz4DEdYfQfVKLj`19-3_ZePv`>+c+vD$rx+NO)qSz9UH=xAR#Tnz;6~Q+_#h5;X3(yL>qVI0k~X@iK;+9 z2!I&bx)=iYD*!?VJ5vcj&kR5;qQa#Bn$v(|i_mkJ}pfmm0kj` z+NY`)dXygIO=oK>yGOFai1z@O5@H7;LreBaU^<^%r~=#AQX2r|Byf{PyR;tA!CKtW zp>(O7^(5%+W7sU&<&K9M z(5#L6@^RGMoH{WZn z8{~)sAudK&yaC{Z?mk)TXQi6W^Z=ln6DocGpulqdZW#itVExXadZsl;r3>2oh)=ZH zwHcj51o4hicf+(LBiio^NjrjHXbCA0ELJ4c)V)qF@jpDKpHBL}8gj&W}3)>h9Evn;ps74;sf0Urs z0?37}MbsETlR`@@)L$@{=~U$_^Iy=?f!9^ABk&hcFTImS|KR_0Eof+4?H;?n_Vj}ki7BpKlYE#Z?{lMR#d zlLC_>i$@u=oV2`eu3C*tT0V0>#5cu0r7%T{N|QTib0foYIRCo!F2#5U?V{`DmiH_o z^Enm#GF02o^B5W5D#}gn;dkYAU2(fN&^9+~=F4 z(2{(ayXkhL`TTd^OEbC6*AvUvYzvW0;oAOI-?%8R2>_H7+G^Tfw9XiaO>|kdm5WS7=yhQD`t% zt5iInmvy^VuiE}wDC@!IL;H{IH$caC?97_BdSx}7$C$@sst)^9EL-4lOW=C7uK#09 z-a=Y--HDKF6Kvi{VD0o*!L#6X>vgZMd7liJ?PyDx_t6eAckG5YDtcq#Lg41Xj}|(| z8?R;4ni*su_HnDHQtI4bBh6JsIh=j4}ThoOMOVg^`Qn%Gi z)J&S&+uC#6`_dIN)uAutrZcBAUuKS0I64G4$du=oSE7tcCLM0uFO=6{!W~rYZ`s*6 z952-`$|@4?t1ha}+m%;kmS|R(-G^?t|FQgO`JD>B`&0e2gT>`ukc1K zex&e7vq{#)zOC0T%g)HtSWs0~x>yP0SvR^izZ5y1HO@3~nl}yHavT?Uz2nJpcplFk zSq>Rkik3-~nM%@!gY44zJaOWSoc`jM7z3XOJwc0tyOp}5`gM*;?=f36lr{~z@-Cr9 zF>qg_{4JTOstfz?T&^);F&WN;W%Fd5684f)ht)#QUrD&^tz95unplp0i+Og4;D;b-TDUd|skw*%XcmLa}IWC>_+N5>R%4f3XPpX-+# z3YZdz#6EkRK9uzEP9d?%xzpvj%j}yGQ1(&Ql!DYZsjL{5R|5}OMvpw4|MXdJ5S-dB zIaqzZT&L>BV|Zl^D(`7WyPBr;P3vXruhvQn&xgwpFIO?$3j(KWJ}bQI9XwjIvaa#8 zZqSCx#*%gM-l|3x5fm3m(@4lw%*?UR|Ed+Mg&RERQ z&$P<;cGT(UBl9+m?!LDpL2Cwsd)clk!0iJMEm=Qx8<-92NklJp#$_dEoeh@#GUPaz zTYh>P*)i(QhJF8t-S_o#z0KHZwHmdKV~dr(izS0ooVJy=8TVi(z25r1g>NMGm^W8n ztxXaP3kMcBOIU(Zl^z0TZPe@mF- zyEoYMq-jsx(*SwsiRB~T=Ii~3{Dt1%7-ch`JR^Kga?|z8gHKjndEXNG5)(IRsMD6# zkn*5G0Dy73S=;&AnVP_mST9+GGu80x0VEFLASD60rULgb*r%Br$ZMFmwTR7O}10+k0t zAz(RG5EKeiP=-O3g#S21H5f@(aJ;h%%u-kXkLE~{x~QwKFAfF<`}_OL`pe5=@n|qq zRaF%Xkps)gfk-t#K7kltL;wimBlg3|pMG>vK1jS9&esi#5#I8PaKifes*8$lHT3iN zV_aUipABJr{$NL<2o6Btz))ET_+N}nO(~msdHtiMkFVY-QcwOE**`YuV;zV?fh|!! zSU)@xrFRO2@fG{0PB-v6IA z@egkP)|8=}4=Hp4e+wy6V0}+BRw(bkmj0>mbo-tza0t8)YHJm$i~hL`f998;>0`_0 z`)YX}0Ps=~d-2Og+|Bdnw|G%04dmH|)C=8{5|KaL;t$%mo zgLU!sN8nKh(WIF8-z>u)4*zOF?imi=%E_K?{}1NC2XX5EZU+9_68isr27bjZ(iMS0 zqntIse}?U!1^;c*eoW-FVDVlEUkx`e1R4d#VbE~!ufkt#!hha{ zU^-Y&EZ!9BjM9*Yga4`cAFW6~t{wjI+nR=trGd7vk)DncR8>g{Bqs~~-OX?He)F?+ zAA^x{3@P3b-`6(D=5J->_3gHDg{R;5`pR+;(m~qrkd8l0e^-;6+EX_DT}^KK%hCqp z=Bq(U!rwbeR{WdQ*3I?@R4dZH5T!vH8hH_U?Za*XC{H_GH_|=9XDib|p`<~5HzL>k zqow`7TK=Z_!}3Q!{kDJmo+N&hl6HrrjVbu&&h&5j<7bBbpS<`rr2k2;WWKf=Ap=5L z+{Q(j51Dow7a0)B;x;bIe8{xhxX6G|7PoOx=0m34#zh8%vbc?lG9NPSHZC$Cl*Mga zl=+Zpw{ejHp)79WqRfX(yN!zs2xV~_7iB(V+HG89Kq!mbxG3`>({AG;143Ec#zmPA znRXi&84$|iHZID1$h6zI$be85w{cPCL#ExvMFxbjxQ&Z4A2RJWE;1mL#cf=a`H*S1 zaghO`EN^g>0N}-5IoYTW0L<=2x(BTT2Hs_P;H=Sn z&F55QM6@`BL-%pHx>ibMl#9~b{L0O!dul`KMP) zGkq2}I=>B#Ob3p{SWD|gi%^*WZ$lh%X!B_cLM-qBb?=v{jmBcu;9vt~9KQmxRPVhnY3-3<9NN)nVUX@olph2i}Asu z)3wYKw+_Xn^FuLj7rC07Lx%}!Q`$o;gfKydxugjIcSOV`{{wL*Jsm+ar9F1)rF@sT zcQ3)oF(~Dlrc6ZrCeaSZz?LRLYw43RstUYgXMo5=Erqb{SZbtWdZIcO6_t}M+U;>8 zgpEo$I)LSgjpP3Nnr~AJGN%he=s@fcohN_6PIc>X z2jbAZ`@4lR_3Bc^GD5_2SJr1z)BPW^6Ne=uqRpP zMS2{S^8Ol4_C=%9=5OKX1X#3;%!k9#g*%TpOs+7Dfpae)cORqbyFqvTK&TC&KR?>| zvA9i2dikCes@IlU;19N~Z2||7FwsNfDR#F{rNZsbwIy)d>g8n}DK_1KiI1tQa?*3h zuQl4iUBX-Y&v*I|FVZJhek6#-UMp8s(#1dF<10NeHQ>cu=bNPH&F%Euy{RQd?sHE> zn3;&V{E-F5*vccZdrRWSPih`;5!`X2RAs>@^3X9wmtiA${qjbnrgKdgL*2LT2qW9J z%t}3;T~&&EmbyNa=sA~986Qh*j2S`)8aqu!Ch{bx#)c%t3y&)_RU>!tF_a_v=GOEP zM~jK3$$WXk!uqQ-bR*9~=?-`=$w<8G4u}(LIJMmSG4K_~OGiYYExbGdnTqP`Me7W; zr@ZR3kT~zpRxcH9F`kd=D`V9ka$V;7Sc_WjyGOmjA|unaUY69zkJG{u zz3YYz^8-biX%qcWp_uS=0&mD?uF?8?PuSLT!_M5?c)6i)ZjJ;>9ZOW!#}TLT!%N@xZ99;89^i#A)#--g{pwvwfHl z4O*Bo<@Z*W-V2{ed)Vo81-(gs#)A3QGtrE*p9qNr{npq$608m`n|{QLeP?zKiI-dg zf@#7!4vLxIWOhpn|d*c&F}P zth_M8+s=aPHl5yMB4d{L{u-Cgt*!v3Ranp^!xt(j=w)fR32kcLnfmbHZ*lkqMv3Z* zuA85BXg0n$gFSNWe6t|D!N%n44b2!i+0g8i&nZq6Gv^5rv&reaEv=MymGFGwZ zRCOo`)=J>9=j2H1pbx(4vwS!MbGCqRbNHfE=-VZGA2vYqjl(;9$&Kmm%6!utIt#E$ zP`<^ps?R$(E9w`odT=#7+xgIWg8v?Y=q8!cq!7$hakw)7sz4^j>^2`gG-l-%pAe_* znxT8{ppJRK{Ke)%*Dj=3af$A-$#w61t(9IFN8pJzgFe@U3A)On!_WKZYjxY22?y(m z2E2|(Os}L#c+aP0A7i6_%yq5!u%Y+`i*vZLu*JfuJq$x^XKd+vx~SkW(b@2snW~2b z|7SX2sy+5DH_IF?7lS#q_|wXX9wF+Jhd-<7y6UZ;&29{n*+1?8ogFQT;oA_}m9JlH7BM+BsN5oZPA=5wKpdmPO6`);xVzx4R7`H| z5v~n~(NEz{^XfwNwY*0=&dIXXmJLC@hZ&Z87hnd&qUMJNXGZ+%90Z5xqA-uMAdN?p zs&d>Tw8K1(X0OiC!*e^;zNFwW$tsoYyGGSa{MeIE6kFdM?Ol$WYu-m^x_CBcPX)A! z)&w?EOJ#=NJ;U({r$j`@OB>{kEUvu=&0akm<>75Obd~_7?FJ!wq3}2ct_sc*AIIyW znoy7M#fi)xUE9+x?gph1ukII8DGAmY4`<(e(-f6$Gcl$s;r(86SD1b-+gWwvWz|*5 z6nC-PiC(+?=7k8?MDaE2miNJ4(RtCv4n(Ke^A($X&BQ>0GBmbvlc|yLRHEkWW3##5D8(G*Dq_-dLwFJTvBOYck~H zLzOXeN4B>S_We-)(g{df+!PB{?it>o&4g5lNU3BW$b--BVDhs`$;3*Z8FeL$p8``y zi?FO7HlB<73L!6KuN>s%ZSK|kf^N%>VLgSr`-Mbg9y-KbiRJgUqxGc4JlJXF`jK-8 zmH8>AID=(vNc1dg?6of%W2bco&pX5tYXY-YKh7^h8CN-|ZI3Hkq^)~nsP;4~s1@PP zybo$))Q+EVvVAqoG`0EJz_`z)PKH6xQ_y(~V^YBrRcQ-tH%sLm8_AP2IcWxZ;ZM+P zsFk?^a7LeMm!dyQ)zpB~5ui3Mu#^N=#85V5g5hEL2Is|3%Vol?=?uxle!;vVC)iix!z zALrhT7xUSxI+m1xO#qwksTS5HCr>wxHO~*^e&pY-C_{d4RUr_MM zD>#LpIg(T;zs~q|;gKJKarxPm-7n9Kaq}Q2Rc?F6=10vnzl$v3jxiz1$Tm&R-YnAX zJhYGkosYkwa^WEh5Aqh(s;-REJ)NSOE>2KWi_c`Yt;A^Mgqum-IV_>AFjf_r8)X1O zKQw5%uXauI-ASrWZmX&Khp;K8aedz;DL1Pf%n2tF9GaKbCv?PRO-Jy{ta`xa!T366 zwCgNgy1duKVMC@^6(YmQ=vr>aJh&%5jZ?|t#JGOzr<-jL6Lo4W?1&;}tJ3c>>9clj zTpA?WrdCpMLduh|eoSuH6}(vzD<8h9jvIsY&!q{!#knmjajepReQv@plx9-Z^@t_4~6J%+ckdK(#oj=eH*h19Q_3Mmd4ve!WsP0W{PcnrC<_XSMVqMf}tpd8a90$<3 zdrR>pJ;|*TS1J|WLTiP6p2lfN?b}m-Gdyy*zMO+I+r4Sudy}@;)sed9*SuAu!i8lo z(zd;s>}jdZnW$lYq55S#Eb7k9%WwS^Ike4^qvqUAK2-2{7gYd+>Lx4{4K4k5&TeT_o)?kD7@f; v>n4ZQy~~MQVsFA`@-a|+N9q8ub`HQgP{(6gCB3%(QH_zFnQpPRW7z)!k)%s` literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_rew_foc.png b/res/edc/images/btn_video_rew_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..3e810f2d44d054e7013ee29231dfa258944c3fbe GIT binary patch literal 19989 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 ZaN?tdm1!w^@!GFzm>OE5O7uMr{ukAdmZty! literal 0 HcmV?d00001 diff --git a/res/edc/images/btn_video_rew_nor.png b/res/edc/images/btn_video_rew_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..228fb8350892630abe49bdad7577997f1c129d30 GIT binary patch literal 20934 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 lz^AIXe8Qsq^VJD(y`DxNEZa9 zic~2oDj*;tAn=0TtKQsu^X^;kdw;yOIE#?%*|Yb|{ASNSbF$XtilM$14JA7z001;P z+Umx*cl6$ioD}!J&6IB=vRE0QESI_MgckuddD%9mub+;^fwvm>uQ-Fkf?+j*#V{mrwTvSG!yg{v7Q zy=0B#)QQ^SMv_6)d8$VbO@+3%w7s4cRSu@)a|7tfOB}d8w|R+xuYvONCwUsl>H#9( zekyXHQ7^3#%n`9m_g*!{hA8MVQ6n~1<}`T_BcSXbt$H6&)+7qbNai;IvJL=tU2yvu zz)%FRJ8|hvKM<7hHRS>kU>(oRM3fZ^a2-ZOssm1PKw+=>RSm!r3@|#LZh-5+;q zr#&a~zJYX?$KHNsXRf!vO&I`QV*_982!l%4gXBnqTzBpqUp(M+mMY6@J<9PhopKqF zHUG+D)oqWB#_bzbBO`OOvoBAzs9M9GS_JGMpPXy7*ml_nl>fHAHdQ~(7c6EQtaae) z)RXSdy7xGGZ&F;gAA1v{^{s+x_Zw$FPm7Lym8B5lj1hx-w0i2bRk3?KS5$8bwjS@> zb(o$M-Xc+)lms50S0uU+E0SvqC;4*v1idA;ae5s9R%$R!0|MkEK~ABsdwq77l(x09 zjsroCIyc<`;H)~IsOi%ZrFL=vP|pe$dZ=>ba}%p@BPmDI!LcT)Z+23bRry+;sM4!a zIs|ce*a;Sfs0xHXd&ntd2O3c3lxQ?^3XgN66@6k>Nvq&Sw+SQ9Y!avqrZ}L|L4Fv< z{VI~k{;DN!G&xI3*jMf*?E?%^d|aK8j7B`CV0(O zXj|%9>c7;^<>KIzIP{7_nu6rA(UTKAak-~U`Ku3Yw6NNXK_V=*g?Wb2+b%R*v(OuI%hCamEG@tHJKJLetP~C+Z_Fz#2hIiSxm(&JJonR_qORF$(S>$MYqe19~edC z9+vP*g+2>q);WEz=uSdEyAzAkI_kkYZ1th>groXN&n^18=C$4>y(9VTLroLT6xtq% z6ktnZC1XXh`LI4n*1gZxAH~*g3YLa^NPe3_mx3{~6e<_G$Q1jOGT~GLf5H(VkZE52 z{rri1DzjCyF4LI2vnBz>nr7lAGkFvPi3Mi)8HOKBj+h|xhOk+~RCrMrPv+gC`f znsu8E)b1K(Jvuj2+r~u&XDjg)=60qj2=@w>Y~g?OY~-T1P)+hSXHAqse%@`Un)oSk zixT72ct<6&nPm5`=~#V=w*omytAST17?%X61&`d9(5-?XY@G8GlM*cpv+D*8K~7gOS3b! zC7MMUMaPF~ifVEW74D>AZV3akNok;CTUsMWc{hT-tLR$9H_r4ULDL>pL*n-M1 zN$b}_vLLHGLsuiCuAC0(5=~MRO*_&y-cdJu3cKcR``W*6EhDWY?a4y!=z~S6Mbu)% z*sX4fTY{NZ;-1f&JJhC(=3XdK-AVvEPZkCms2Kz!%ii*W;GkHGqTz=X_k8l#VM{EE zUlcuV%_z>uOHYVRSe@&ZZmj62=rU-=WS$F~RJ+8x>#*y;`vS-bI!=Tnxe}}rY)!oN z)&C-QL$s3YDB{cGkp-1&Syd`bDls8NA#+Vd+)f=IZxnH_zfJCm?LpCo83w)^dQJv= z1B+@7q&^WA5oQst6zvvi$^HV8B{*`pK zM72_zsH0W)pk;=oj>~BdsHjk}6xyYJ^4r2{#B|0q)yxH!WKf5#o8Rr8C!fP|nDay# zgk=+zbtCm<;yaS=E>G|LM7+Wjp z$JZ);Pk65C@`=0~wYoIA<7u*)%&Fd7u3`$Zb&$}Tu{YdR^SSln%8~DpZyde53K3zC zcUsX=6`-RDWS!0>Hwq70iBOiS-hXF$MqpTo>@gBy;n?u(%2Q}!LFUP43*9A8M{h`{ zFWuT*V0gmt`eymP@Y5C|oR)9u3eQ6y%e(uHQqC|PJQ;3IS}0$6wOq(`(4b(!BB?mA zj^AI;IrwbT(~zbzBIgfOW|VVb0UySO7i_9)rZsJ1e$tyHS~Shbt5TXt^U{U2FB+quq-O%7 zHKFBdRoM;lm9>bR&Yov-N~U*BKbvlvN-g${m%)a=qF*c?xlsE>;^W|`b?y4LVrTuR z8IhUZpyME7OJ}QOU8(p={`}X(EmzwjeOLE|c9K4lZ8Bck^5Lq1LC!t}Q{$MSlOMEb z+mF@nWGwlJ&`8mkT~BYD=5|JvJ+q*pDbQ!4JbdFOpx}PFhKdYjC}IZ~J}Y2et>J zZBN>c)_3}fL(YCS-&$z$8S~*>%ATY%n7zn#NnqD$0--{9gR zqW~bwgfg|nTI%V_!ZEI*Fb9l1Le$sQ4Yv^m0C^=}HyGR*f#tGCAW>)qo~4=w9xjxF z0*{5H9$3#!4dH~+_V+-T`0Ja({hi@Z2OcFwN_k&doC8+`7RKf4>Vo!^^;O{c?pGG~ zd9N76!}Yxi)>(l^Wv@XlOFcs_HH-&>OHx!)1P&I1a7jZ&A(9eM2t=4m3=9zmLBJp} zs0aiiDdK};!&i;eUkTZaFjJx*ZiY7oTR|xgvGkafh`lCwC5k}a1=qlFgFlH6b$+oBRxIBX0ERPXz7X7@W%DzkCFXjgPx{-ZU~Su!V}}= z0Y_+fBhXmhf9iw-{HGr`FAtaRd>r5)gbTtIXX1(LJmep{;P&Se$WQaXbmOP`Uq_Ec zIsTfQzu4|+{?!cOi~1L{J>R-auN)c1%rQc@}nl64?SGi zJHW88|KjB@b@BaR98iva|H;d*nt%17rzfj}_Qb-_aDd4u->F_CE&sSM$HQR>#1-_G0J{*A6(>5(r7C0|X)| zVlM;1d6kh67m-0g#YCVm2m%2^ILb&MAm91nT>obNH`fLpC|nYPx%^gVulN6_P5gtK zzcr3#{*H#suO1*U~=~E~xM6!VTu(iP&3(3Os)Q!?C-A>f{^9>O^M7x{#|eQZ6!1S>eXsTJPCPM= zSRa@NLIsJ7iT}+q{NeDg7Wkg!L3=sb1@-@64m@Gr|93O+-LT@|19`#llEgO|GJ+3Oap&kfAS7+Sx1bAD-5fMa)lugAU8Bp9`vj5SDW%b??SR_ z7#EC(9>xKoC@v5Br{aIK!hN}B_~W}ZMNeZbRW2P3H7N*GN=igb6ql!dx%sW$Z+`af zW3sp$gNt|A_qC0)`CA!&eapRE;o|kZzO)z^ci}cXxa$wo-_`i0R)kG|SL2)hvNS`Z zu!>@Tw1!vwo7LXU_6JlG+`bT@h#MMy5q@n$lrO@?QXPf6CwT5X@Eehuk=(kq^?{YLPB5El1w z5$1!Z-N%Iogs`}ei!dKN?LIC%AcVzzT!i`HY4>sA0U<2z<08xlPrHu`4+vp#9~WUh zc-nnjct8k?`?v`6!PD;J!UIBB+{ZVAo^~G>9uUIfJ}$z1@U;85@PH5&_i+*CgQwlcg$IPN zxQ~l4A3W_oE<7NF#eH0a`QT~yap3_WEE2>;`RlAF0*yQ1>4Q7Ti5zwe#+?G?f@>S= z0f7H;00;^NfQ?<;`#b=6fdSyX9qs^WG61k(Zk}t^#Qms=zmB?!sqd?g8GeSQT1VR( zmg=CD37){gFd&mvgA{z~6t95&otsYGurViZ&%s5_l1p=i@o6rDXVO?DB5G7jj68&6 zTUa%o@u6vFGLm!E(L}LZH)7$*Gj-cDl80j19K)ghp8^WbqMm{KF`KK^ml}4w)*qy} z9{eQH2^=6MC#DA)j|CkAK)@-FN1=+%B=1PFcz4h8CNV3^1wv&0+4!3^Y${J?eKJ-Gu#`gKZDdMYkTP;6B5RB0!WRmrul) z7#T{iJ4;TPMiDc-qHp~yQXkeobZKX5{nMcgO| z*k&K(pt6$FoMm=3NWm_}x!wHYN41#}0vX}sBk z;?)hxM(pUKPn=wZQxI9K?t4W;NcM&Yv3SijHS7pA_LUIgZIj;Fmzel)=V)c24M z@5cM;crAiAZpzN3Q=sc5^gUn6U@}V@^^Tvt%lFoaA;?!N^avG~UcPmXvuMj)I4w~- zeZ@HsO`DlQVK>G~^|4eF@kL`9$Z1~Uw`A^b&fIiPAcmBqq$?%zqOjIUDfXaBx6UYR z!L&$uTbtHHM&_g_2ll5rfmULIq4X6UU9C; z^b`we&E~|XspHclJ{RkK?OXa>5)&rD7n)W{ZM~X<@7#eyBNRU8v=YmZDr1UU^+F=_ zqctygQ(e1alPS*14m>OzJIU|ir?1{ot4w$BL~|A(A=mPqhhFX~whN7r55~h>JsrLdT(L>HDY+bQao3sBFGyG%VWElrdb5>3u6W&Hxl8Vn zNN-VAsgOPJjS{f=l0SJ)w;3F)x2`-&uXMtFm9(n6Jq97;m$f@9*l&N-VEW(;6Djqr z*p;R}Ipmxo`_wT8@R-lWCaD0D-$gsd7_sT&ogm$!QFQf;7_#@48VNGbDm>0Jy$@;g z&Q_2VZsBLLb;bLXtF0ga=Igy89VD6Ml9xfgaI3dNrd2OZ>wroSFwr8GZhJ(?x5>f2 z(L*goBU=X}LjYbG@;j|G4{lV4*#eX?NP+^SMpm33tkk?#j2rCNFKn={^hPQMpru z$SYTqbxp~zM-chRm6ug-9rdo?^*$Lk6+#3SZeg++&^UcHy4L^U<9wT?;*|nXvv=#x zQk-`NN;sNB`VJP4tbfq2+k90r7s6Fp>!L#cY289P5&2*!<1SX7MIbbpEm*dbX{x<- z_`EKEziEoD;~@B6Rn-g2uNx;`Vd|j+wk9Ts13?sr?GaQgjvEt6tIEojmX&57kh=VF zV9|PWUW=d{MjIfhj*^1azCMDqsQXnJm`^})D3$r~_9UiU>5H$vmBvDnl4gr}pq#?J zZKv+|Fa7?vSEgfkIng7jHJp@H6=HtgsTE;2_}OS5>S7066__kmq681-B&gVgXl2Nl zcjku-coqhK>26b!Oouk8t+sf|%+FBGG_Gf3Ld`Rxt1}lD57+o8rEQM3Qn6W2c1Lm0 zW(vt5qOYxP3^={N{b+DQY?SihO=dZkLt-E>_h!@OhmEt9kU;miT1J)TXwc+%{k?_f zbiIpDZGst`pFaQCI$QWzdPs3?wheZHEu+3JucY8kY1NFbhSfqlf~H6d)oDG_?Q*h_ z-H<-pM%D*2)Y5@C$qF`)7(a6+^%|X0;-^VOj8j9!y~2PRlEv=cleVr!&qx5G5JTGr z%u?_%i|11)@5fmVO&=<6wEBz^(*Tr8y_n8QiwoUDkHr=Tk8ZgvMMxoP;Emu|?x@B4 zcUuLmA`2YHMZ=zSz4>Gwu-aJ?>Y6IKvK+R2s{cxf)NtaHv_xHhbR^788q#YH+5ta{0Gx^SG0 zWdyQEwat7ec3KJ+^sq&q49& zot5_2s%KpnirQueI&QU*9ubX+(HJjH$vtvxrq;AhDnE6^JZOWp^yN)bHfp<2-KF}K z2(3&GsgK9WiAANIuS%R4W?cJH#@g)_lajYFVgySWxyCf}jm{f`IsZ1(UqdvEJ-@KoO2g4^#Yt+?u}zX~nlfUP-~BN*zRR7X z*CiwB>9U`hsq6tCO}CW?(recNFtkq?>@AP z-}C{o&pe>?ve=Z+{o7EreJueaP`ulq}k>G6vFcK{Fh_a*vUcAmTtnm-It#;4bI(~ zlH_$yw6M00TE3EVwE83G7pCjafo0zk$EnR78D$&Rn$$LxuK8o&oe!WJ2(U7A&O80= zBT^)(sQH{9_;7&YMCr#&vM0g;z4ag^RPmzUCq!Z$nwi@F;f2-Mi^~?da~_`&!tLCr zZc_k?#LsEQDh+evDpLpM?wjUh>t{sEdoGm-U%q-8nNQR;B_x`WXRbcx)HO%>sbFY^ zv8A6GWp1KW8Z1?OZtjzz*|2kuRch~y-_gOfRL@T~3FDt0(k|ccJbWnu^Qr3Qa7FEq zSUgL9|Jup}j9*c!^jDiJ5vt2DrsUYLle{)+5|q@d;9Zp_#v zCtjX8IsCdbBBX|VD&loxn6f;N34?;Z4$-now|4>;?WqjYa|5}KUf)TcQq~lcbEYe5B2d_dTxD6eKSxi(BK`y|R^Ah_Ek7X!%mJlHNa`>m&Nw z*>{YZteEU`M2Kc~^kHA`P?DfYxG20=HK;*MyXQ&q0gR+h5 zWNjx8tA^UcN1=y*RpT|kqqjWM> zdJd2gFJ#RY%5<{{viGd{Fv=*8Vcf{$KRT`%&g*c#Dw}uYvtnT^K=7FNI1#h%ER7gdSHwXk^bzFq~V=iz? zrsGcX-=_6|UuVcpGc|aBzu)NGyLa)13cweVuNw9TmD3{?Nv47nL>rDndFQz4+=X(F zHrfKUXd@>DAo_;CTV;C6TZe*IhhSxN*$WYmRC8>6i5R)ZO%$SAu3;EonW>FE|CchntM zpIJCMlr@_w)K|tYo~&G%XgamM1YEM{E)nv5F zE}-|hlg{;NT4nf=6ETHQJaI1Zad#^=4JHS!FH1bYxyTdR`dsw38FJN1H7X*(gKF0O zNx}MFYBr(nnb=#0=nWF6BYbIZWScC0xKebU!_7!xhMQzt?8b=(??&ex`j`X?uHE%e z*4xWGS!BDSyutliwWFf;*`+NGND)DrND*mL6MFB2-XTbr8bYK)=+Z=*A_z#AVxbEPNbkK#ReJ9r zQltnytTNCknFS1cb|JcXP=#$taTHrt}1sC=PC{W0Jx|i57tCJ z+kJanz(oFUFp24exJ2I`Xn@2gR{#JUHMq32y1JD;!rs}+-hoCzTAIee z$=(uf0|fxwN0YT+5Umwb(Y?tXDWwp<$4d5^Bo}Bjr5^YZM>4Wp$0kq=x&Cy7M5CTi zM&=wvTUrQ4c(`8}i3S_qeVk#e`RmWZ1D=Q6?>Lz8dTu>fwYS)HTs$PU^m047s0XX= z0$!{xp~&L8^AQ~yVBbeXgq5}qs|JAP{tov7 zpiU*Jj)OAzfP^fXUvfO779i~$z@*dMY!0B# z4ludlyZ8>^m%N|gg$6Kqe4PX>EfPRO1PuWLtb_qCdv4yB0qAl7h%J?x1OdbB01gEm zOL@TSQb1id0d67S0v>=vBP5U+aLx;0(nd$;4!D;9AeP~%x8*jnkWHm@JJx%^5?lUz5NydNQ)#v&UX9Ay&FHjyPGe( z1mBqbLoMbBt(n=}@j_3og9HFDgYfA)W&;&n^%KVQvps&suzt?!7H*o$-UG|ROA^I^ zw3ShvZHI4cWS%}M9~oJgpC49ik}@#u(D6QoH5k|F9NB#F5jou3ovxXs_vbS5mpivV z-SBotIi0d63j3bf_+o_IVJYs(A=NwDCIz!{T^8awjmwVV;KZEigS0(orPddI10cr}?wImZaFJzrt3BNm+k>ydL+^gzugdeN%%JffSB~ zAElEC^UJ$ZOhH|*saQ-v?NKo^q8;#o4ccY+q7Ik7nqEk$XR7kYJ}23Bfyngw zXb76weOVz&BY$#h1DclC& zx_cN@CCB;LzfeQ;JzlYNc^3cGd$P}Pdo2*0i4mk}Nxe>Qu8M~7JzeU}wYoGKAtv3* zQMY^ri@V8&1K83iRUp8I9c|uOK>HFex8>^Vn=dgcLwC)43f#_J_Lr%{<~!#mMPo`W zDX*)nt2!*7MMFu?LpX}fkBxCpqu~Z^be7T^#tOnOO;^mgID>WN+2{r@M-YJsyh5a# z_~|c)N^{*Pe}t}3@B-3*xnH*5PLpnhEjx)v{wiH``>2I=A(r4{HX7Ep!1?6)#(C~} ziuvnX1~|!P5{@tSwPu+#J8mnIFAyy7EMP+8xg@opCu&Y)J%teRM(9iBJuT6Er4gJ( z#N(1E*cCvkpp>5XEau%+D>AD+_^V|^1>r;twQ5|iPJic$+;ZG9#*Q1_#UPS^)({vI zdD0cED=>1mE3e{}GsxdPAa8|m@N=%lFC|<`u-DdQDPg%o64`+hqZq>&L%{-qWanh$ zOy=NfZ)C3dFRV&b8F3IW518h)y_#)U)7?}f@KS51?RxB>>=VWeDsb&G4&di z8`Y#=XrvVw&sDY1;F^;cxwBojzL*>2;?LW}SkN_c$Cafr{)npbfoM+lQ$cBNMQ)uU z&F#mQ;#hO>j{8p#s@O|RnQ_}b_a})rm}i+OGI*5BIiZHuIk9oEy1DYX8o6?-)qMGD znaLT|GL?D<{`iuuiZ={z$iX7I&nGWwjc83|;$)JlhzjlI19Pm?DV|n>-D>SJ*W*)a zZuzAs+heX?#kimViw`iV~*is zc0KDFOyErtu2b#msHsW>I>?n>uT#870Ko$ z=P?Xc=2d1AW|pf)tLCN*!Wv(HDrqmtE+v1xFpN2tUt(M0Z3;6ZgOxVtH?BulM|)Rz zKRgn}x)?lypG&1r<>UOuiCE~S&}3rwlXY?L=AGCT5KOm+pl6tSu7s$Qxe1=EmGn*y zMg}W)4%iNP5UO;y6Bs83OrmI+Xse!AMC>{m&3N|jCMOjoHLPWgy;|p6hpz{Zr@rM$ zWlquKcJ6I#lb+UC=o80Hjp4AKdg-Gkt>zCaUZMk;gCceEhF+JZyXEYeZjgz67IR9S z6Ppv^pX8d2gvkeK!ag~`b+v7pdaje-nm{I zE-o|%{aiS*CK;AiE=eL8aX0VoLVezKtG17i@~-bK#dk+`!|?;veU=A%u}l|DA2j;l z-3Sa0)Cm#~cL>qF+Q%8k>()0e?K}nk3XTO&Cc!w>1YfZ$^0J8K0B?(o@>lRwh_?VO z_1+HXChIELC{YRmS@QYpY-*+s*S3RalV@?~yvX7~ZAK0rPrDm-0y9aoftT5YVkMMA zR0SSyN)oVSk%lpB5xFsh<9IYsHNa>=eSCc(!_tN<)T&$ZEGnK+A0w-HJ?NXc)7civ z@7>6LRHb}Tc_K+Dg*4HX#+FM|sG2h%D)Nz|RL*sk=n~im*rKIt=Syf{;c>IwgHjN6 z3|6~!(W95=_1JMrq%xKv`bD0e);w++rNQ-Nlj7Hy5XFzFFJ-EHeg*>tY(K3@DK1^kW=h(cza2mA@aL>KBD*Mhvp9%Hg+Ot2s{IaAUv7 zcTxM{la^UJ2e8Nd${zOA9`!|`QP(i9mor%JuDMdds6e-+61Ng%le7{K49pBF)ZU8q z4StyPJd_)|cIgR^h@OYyHl!Usx^nkjG;FIUEIB6G+Xwh%++^%oiPw^O_tfo6_8S!h zh?#zwlLt$}Rl?ndTV;r?!m$M+oid%oS3<_N9}pizj-%hHwN^fp5w^fh)dGvBN8GygDwWGrU-}$3eJi<9jzQ@ zO7~dwFs6_lKRfQsCnE*<><_FCb@#>hJ&oIni>|f3lYaD}Zk7DiSW80-bxpfFH|MRL zn+I$4ZsTrL8_%aMsm6U1PLy_|vX+(xZXrsm!>huf;vfyR zg3Eh4LA5+pA?BXe=7JWq;$k==?n1}_worsAjk~RlowJa;DDC&SLde(OnnAQQ-@72J zMQJ6!4M?M_qD~`i?*ygc1@f|+b8vCe@CyPtd3gjmIoW8qI5@dMoE#u7L3U0~As&7q zPClAH4q7oBMFI z*@NBL!wzBU&Ti*S_an%kallY#b0@e10&Z_d^DVBanY{}_l$Q3}KtGQ^=4I>fb09nC zKiDBDg4|6VK%77h(7%XOR8E)K+Ww=`86o3}Jd;0W_KyQPLp&UyAWf*Vy^E7MRK^u* zhoJkXldv%V8OOoJ$>uvB3v&?E25O6xI3rJ<^B+&a;m=PXKjnWpji2s+ojn3>`D=0h zqW$LiR~ghD{x7m`o*%OBsqkZkM3DI>B<%z>Mc6w*?CovDeq`CN&risYPfR*+I}3X^ zXJ!!)YVTi5{VNa@Y>I%2AybiuodfyD1>xWk;y`927b}OL5C_L^L4Nc^iJ^i_dka&9 z>3@mxm%gZR>@DDy9{(xIubzL6p`s$BVCRf5wKIn*fW?q=2g2bNLR?&Y+?Ik|mh2V+ z0zB+yTs&s%0+t+H>=x#xW@csr9Q*=2g5M|kSNY#UgYC^-zU9y#p)HW1`T5MaIk`DF z+4(r3yzGKpJQnPN=E%*=C& z3z?dKD>P!}-*OddAp-hK>#x)Lsr*9*|N8>|H_AWa|0e(UG2E=6cBdu$k5J!x{d*8+ zdrO3ysS{KZhRlio%{KfI@UIHg$ReO`HQ5IK|6mQAOZ`{~az@b~>EVqq?1Y42ofiV%a_n!=zU2RoPu=vU*fF-3m9 z3kgZv+t@p)*jqrwkOk(Sn*ULS{BlkG$9HRD&YE&kGzv1(e4K)OeC%96&fmlQ*6+7C z-`>ZBkTnLG@221PHd6DqHq`#Q-)e=8%lH2LTpY*)dBKA`{*eCeMwRNFF8$q&D*dI@ zwu2+Yxc(RorTI72w>R4#P_>ZPg-|i%)KHsHd#l6Up*Ff;IPyKg`CFyq3mSUXSh&+oNk`sI-L)S_Y4;bkkidGT&MFv@t)yA0dl%| zhU;`bDBd$%C_qj(&v2d22gQ4a3kAsO<{7Tj`Ji~uaG?M>-8{o}Iv*7887>qcr<-TE zPUnN-J;Q|pE;=()A^uy&v2mtIo&+Nbvhpu?-?!>Ag7yWxK8JT z;yuHK0_1e_4A<#=P`qcjP=K6np5Z#34~q8;7YdNm%~NsV{JPf@YKOeR(+zniXP+d6 zJn}A38gqF~6#&4K0RZp|006$6AfHzN02dAb;DZVB2GV!{fXqJ1xLFneAShD+OG4a7 zKPG!QK(td@#Y^9LAgBqV2+%_byzszs>Js&iy)K5u(RQcjyONoqjuf4tXwuB}m`;@wK6?-Qbo za&J5F_3Gqx{G+@IndJkar8^s6lBYJ@e3smJjE35|%KWh<&U4^1VJQ03rm0f{8%0fN z0C*j~2Mc{zhUb82jU(?b=#vuY;JruZt)o{+T-+2!C`=2c;qHqoIE9zdYhb(kQ~2fZ zR2gGc_;c4OjLDBQx4?l)qz%WLa1DxzCj$f>! zR4^=Djy2Z=ZN@-&Xk#K?&v@$G+tQ?uN#M#Jhv*Ww!u)FizSXxvlF-K!=uM5b1kiSv zLJDx>Af9&j)$c}K->kFRtLvlBCoZGNQrq-Qh2W_wKuvjO&}$e;Ucj*@ozeHz75z9R zpWv2}lu3`86!hXEh`%__)NIX$hjtAuHS?>v60hT&f32Dco**t|>ZE=?2X#xdqwuYXKC52&luoQIuv^l)OU6l~!Ytvl$K zj_iuRA>P}6W#|t69lu5(Z)PY3)*XYKVat8xD8ATDmFZQ^?o_NvCrwAksIuGB!hWsu zhv%n7;QTp@b=4(mEbQ5&83~*uDC&v^-t%>|Y4ih45AQI@Fp92~hSf+5P!OO`@~n6;6sl}%DvWzG z8dVyQvOSq=BbIhjuFMkPC)9n!GHVy9|3WdmHijqydj@B*dx^Y1%;9mF(=?DscrEz} zZ4@!Eoe!6}+dFz+OAebTQz7PNdRUbg)fn8hm!VyYnRUwPepv#eYa7hs_)w2=PH7sK zsPTxjvMGjkF&Wa)c2HhY`taz&QYGOw!OZ>G(8^9QxF*ipx%G7q*rK~g(ePm?>6e6d zou~lbeHE}J2B(ym8DXYb73c=7*4;hAZ5P>ehg*eB1MSqAo|5?8ba<3%cd@i)7vr;D zXFA(H;i8lf6&AapF`J{JD;94(_INH$;Z?5ky)r$<>OAhDeCAeo^eujFYDen#*Jp!^ zUd*Z~omb?i^xiV$lOQQvj$ypZ?8r@AyBql|O*L2}bM>p|`kXM!icgpOR;WTN| z(H%#%^X_<7BRfky?VWWW3X*!-Og97*z-RVJk_S&mcGAc_T&Cf^*~KOy00p7-Tv-r( zq@$tX2&)Q)Kp=1FJTuBA#I~dEwBE(b+5mhQ?xfIeQqeYa=fYrdR1=^)4uB+f`0rNa z``!<^ntwjg|DCqB_P{4F zKri^JL1DMg7jLjv;cZz@!<0~R6V{~ePEf6lmxJBy+ZBSzO|~P2&4Xq!#nwZk?00WZ z7G3T|)=5_X4Q9Jx_|n6<)`(JrWnU4*a&N}huV14Oj~2JT0H<8XY)|N8&^njb)`|@t zlYn9RqcgHp)1H0nW5`|~#byUwRtJwv4nD8p@~Tj1_als86BRDLA6Hk$QqU}sKlD+C zZ3nizmvyN*w8J2fo&{oPcsRbfx#>1;=O*>`%h7Qig?&|DF{~#=sWsx-wR2WhR!sVD ztorU@UAyx-qoP9SsU*zZT^9rd`rwlv#4o{ zz9fRhqGDrX!!uKTzRn#VAB%<<(k;>QEDCpabdZW3d@OR-d38&aJ(7C--Meimq=1OL zcg{}3-MOY0VRV88PRx*h6M6ilw94P#AD4lFVQwz6#Ih?9#Ai3YpIXP-f6U2kbVYh2XsZ364% z>R46!q?e?nrEf;~-e`v!3%jk0tn3~5#@LV_`JB9RT^o&g8Bov5!?R<5a}|b>Gm;?1 zf7>^8A^XYU;ho%4QU=?nsUqd9;qE*nNyzn>lKJ?8E2kp8@qA{7{Jc|i^YX@q?@~c4 z^@Fd~#l^dcC*oUebS#bgRMRj$brtWog#55>N~lxM;NVSa?;Q=mEzcE(qOl&RXJWRhfA?zGI)=4ei{Uj+@hx+`PgRX$gdxiD7R`g}RMuZ1l*ffIy(? zZ8R@9e8mm+HvW@k)#`c~ooBkPm)8L;u1nF&HzZ_a1|=|U+lAPxFU*^4C#yzoqp7_# zs&uW0y=PvSpKr&oN#CCNc<=q-;4uyJ$cxpli(N_V!A?B9yn5Bz(86=PMnko7h>&en zHeh<;48ift&dR%M#$^sO_s-*zhNX)8`h0nxtu^P9QE%elEh$-F%b0GA6;P`@pYkqK z%~;G~TB7Ip=)h}leZnidy81|Fnm-nkVfDCMp^odh%=49snk$4A1fl!|@iSc+H)^j& z3c1}xMp;AVx{-#41|dj963gd8RpPYpP4uzQqOQ*72V?=!H`FEx@i4_@z)sg1WHX#8 zng-~$(!dQ%Qupr4c--k%m#}E8Ixj+ohw0ltIJl@ZZxC5My%fLH0ZuvapnZY%rnvaa z-TG-Yza@)=L-=hX5;6=RIHbIzE6NVfe)J7oiHW$Mh<*cBkza~YEAb*Zo;IS=-*~yg zM|srNQ2{ql%G26<^(L2jFst_GYM)YUN2u%Mi`5EfB>5K?YOy=}R<~~5YPi(TlZQW} zc9=~?m=YJ4X*>LSX8Getk?kck{I?6)A*;^MQ`YidAMjz}Jelh4-8{7F@rii!et39a zaDKs-7(uS zPVKZuKGJleKsN1@&>&ovf=FH_$`UH2O5j9*k^rSo3%(kuA zHsiH6BZX>rkU#QKDn2)-`7UVov_v9=qyBk)yH(# zP%gOh#VHnK++E{+FuHRE)bC<6RcdcM*0!5{SK6goVRyoat{D%+0zT(^wYaR*(Zu%& zapfyUK7RfakFG@CU0HU7gM-6=V47$}_b)Fa0#p3_a<>$@FsIPokj8=%L!OWqVw5C^W&}b8Lm1Q5w?U z>vb*&*H3X}KP4rkx(c8A8>^M0nr z&aYN$VH8F?d^Nkr)pTo`A^Z4i@{=r;PxG(HJLus#&1`b=W(K7e4_A(|%$HdS$^~%V z^$AD8Kl0q4HXD&;fzGp;WnR*hF}zX$kSbPxfm6Wir0+x$ZpIX--B0=~TyZ_x_Npp_ zqkRA8cqZ0?x>?BmF199tFOoV5Omwx4Qc^UzKCKTz;3?{1DLRpJVJytl+JxIShK(iCPM zP2$5<34?hW$jnk=s+36iI9jl`+albf+Q0aHg!@#2`YGSPVQeeNdq02Y5^aR<&=m$- zoCZ^ylEhNAsKM2yPM%=xd9!IWv&#B#+9z30Ii+;PHZQ){;-*^$gOR`UrK+jqZ#yT| zlsQg4mzYMsDG?j(8b|-uCZw0}9e3)qLk1&zpe&rqLA;=7)(C6^TIu9!SiH{1bU$W( znrl-$yFaIx*o#P!z%j8HdpHnQn1(b$#jj0 zT^s?v!s)!#XO$qLf0go8OkHx;UM_clan!KCJkRuw<-PM4_TKY=H&wMS@A)vdt|&bp z3DLhQx;PNh)ow5U8cX(>F(2gB;Q=di26`0ac{XQMLz(>jRn2?bZj=p~`ib)gF4^kd zcNNCxbQyt8cnQp{kM3|$)Q51Efs)VnaWQe+Fpe6MxIe4QCKYG)^@>@xo~!`=8@z`w zHc9X!m1z13*)Kd+)yW*1uL}C7Ic0pS{mH-`Qu+nXEPO z%iJARmF6e`0HEsZWakB)HAlV*a?tPZ@j9x|Nm1bBCjtQF=_6kmAobuZ08sMaP$DOG^RaWxFF%GjV~D zuA;`$INigKwLB}Q+S^aozL6OxyK7hEPAyMkmF-H8NhvbeEed$HD@)Zgy`<+ZYO(RuuZRbsWw)Ohe>gR1J>nJ4y0idB!#MBiH>dOG{ zB1ojgdKL1Q0GZJH$_hY*TUrHXZtSpnm+gU7GLhS4D#VEvE((#FfOYsT+v9+>gG^+4 z$^vg7b26~*Hp9OaScU}FE&T1}eIPRZ-GNOqz{u%`lhXUIU0GbZHzN9}F z7ix4EL8K0xA(a>q?4wpHAcN(7eNpoaYn*2;)--qb)4z<_j3#VppxL@Er_#A3^#w z@b=lI7Y0$d)lrU<-#x3k)9;!!w|0->Hvi_A367u6D-VCtxvzKC*}sHlq}l2@EqIq* z>drn~mR`K=o<-N@*AFvav>1PsCAXLYr`D5YHYFl+Rx@P(a#^TB6IZ+#0D#_7e&rvA z3bK&_Tc6j448O4&bj+L&M6#Us1OvbtI|CH;R*}_p1pu(ij50c9qupOQ%eX>rZsnBb zO65=M%(mGYT&=RzuvKD4&K0g(bYhFGVa(lAI!5cze^~3_D?9^Yk_2j~DxV8#mICz; zbcKvc!?GyF$u>6>rqgvB<7E7|)AV;K%sdeNPPfu&^0XZWh?{Ymo_a2crcPL|?No%1 zlTNRta1tSQmBYovB{u-vmQOKdj@Z3XXFM(cP&r2_$uXa^&EbghJ*F6&nlK|X?Vj-L z9Lt?%hdb`&2dFnDkSW(O6|ZK=n_LaTpsKIfp0+SnOk&(Vt#?8tzk1H8-7D1n9<3w|%xj%BsLCiJ4Pi<5*SCrl6S+!6vDaYmPf{Rn%U!CQT z!^YB_jP)N(OPG$<*c3;(YHlzso`PFgvU`&A>0{LTY4r~EJTLuDg7(;WSzn~luC zGxCJJ#)!o?qTABjuC$r7X}9V2u2f3*w+=q`&ijR-*RAzSXSZv#@d`!Gsa~1#CpYM~GzU;NP zwl_O>Nlt7YJBLrTIu_wK7%%5{#r28@<(OyY>9wt8)d*$A?4nR(-9Xj+m<>^;R~MYV z`}o(5Mx`l(I;A@-^KuUpC?-oye2cvL_Oh(xTT_DH9TdAOb{J+S_eE@fs`+Noi$&VU z@vbFUa8+R5{^b3%e5ZWRe8<=2W`*6^>Br0MOZ`4Zso7j#x^UG(M|MKZl=Keo$KFq} zm9l5JSrXqCqVfW>v=5isg8Lb&&fZ`>mr2O|D4A zK(0xpW)|t1X)vFpgTCJMrzd6g6>CZseIGsf`L@K8I?~Ywhus`--3JFu(=4$MaUE$LX%Ev{&aYb$y27|P zr}zTse5P&1alfA8GG6owf?pQRXT|Cwhl2Ei`4379O0%bCm$)an=Vv@%Upe(>@y+7g z^RrL2Kay)IEanz(rnCKLvd>>Dywa0Yp0xSm=HCY`1Wf6Q8Em z9PF{$e64?fCz?&G)u?@B(po(I_M)qtbnmqLj_jH264BPaxE=8>TW+J0$*45#>L)kK z+m?#o2Cse|UjH^dtthRkJE!Snk690=C${;}9sHq18Ga_Bdsl8yo_V&{St%ddhY4&s z5#d4ch+?1X&_^@SiM|C7Po2*S$s3@*nMwYOEIiaoZY7yN#Xa>~d&j)u{EhRsJ+AOG z)<(Bbe$yXj4u=od0ojrBW!SRuQ8rO4Cw+Vu{;TfgT~@><@UJtEyKQ!6me^?7By1_z z(q37h8*t-ay9;y&I#Oy9YdC7r%OYMqxF=74N#AiLLSp?h)Txx1W&O@yyHJV?$}OYn;2q-v6-CFv^*+bAIpikomim z!m4zt*m~$Xv%0uPlvPIa+g49vb+b9adq^%%9E z`hjZJQ~%@~{oy-aU61yrvcK^EYG_(nHZVxOd8x@q#>cIJ)c}5U{#Z0%RT!Vw`ELJ5 z?&<<}ZgBT?*?QSQd409whb4bB=+s+My%HWQe(k7s{g+Ea>2E@is%EM_zaOlAp)art zYwH|PY#ErRN^IP?bJL0E^7nt)sKeGlueVL@O?61~PW`yjf8|AwJLI|tT~EV5IX3;G zeh^Rc3tQSpy~%0p+;TsO-CMgeeP8}UVd&9YoJp*!@TB6 ze|gxSGlm~DWDqQ$l=p@62d)jgZJF^TLb!0S=631hkcB-3WgcZ~`>nfe9#fvgHdw73 zYJT*l`M32IA(?%3&5i?d(OYYW65l4MQ>G*wNVpxN8uL2Cf=nR1uo4b-e#)lQGHVxP z%p5v0bh~io40Oc1hSv{k>Qd?sC-){NUFQCpHP}`0diKet>Z4ZC7~v1HIXp|fH>H>L5FDnZp0BAJ#!Wy012|6MLeM+h zoyrIgWDuBoR%9hoC=qhN1;unkC^v{FB8FP(jrt`**CWMfJ;Z1gaiFE1%}9d?n%go2 zg)amVrYKV+1B1gN%n2y0DV~7E8Y6HRtO**6LE{KWES88jCt}SIpAS8<5_ClpGFe0~ zJBQEBL6W6jfLJUbqR}BCA*c`&6ko_jV+jNT8iPaQa7d^IQWVA$(?gLwk^Y#IFMjMm z5ktrkh&g;7V#F`qpT9wDsi!y6(AVShxVVC^4e>;u*+CT1p>zQni^8CPV&vu~*^JBm zp`}P{zY*%m=aK!eK@l}f0HVD>5r2b_0orc_d1Cz^b%M$G>PN6a7&OX<$v}faAQv(b zL7m6`unU4OPat2-zv;$T^-o7H=CH;m=NsD*%}>q1P|i=xMl@q)qoFW1LnJ8vh!i16 z7xRTwK0k;&7G>klPtfC&p)ZHWz_z!OaINPiITkHnkeO_2UL6LTbJilx&*3lM7#nv4$e zTl4Q++wmD2Mq=o*YbNBHj%Asdv&`^FCUk`~W8rZ~e+%e}X=Z{aSTN}f0><=<>j~!H zx%Loppd>^Onowt?_y64{e&FW2rkpq;D0IRmgcKB5qiMz)4F0zCiz0|Knl1!%p$HsV zg_e3>mf_d@@-=;o*o>}bBAqdkXvmC_SOu9R^f#sB-TG?z*^Kl31pYnBWBwdx;+(|-k#vGT-INI}BOKG>%MAbf&cJx=G6Lv4HpnESzYOY2!N1d_ z{k^>RKVCN9XZZh@W%G|s+SvO0HVJ;o-QOoo5|cq>@r7Kvn9SkQ*&tfLW0TP1h2w!j z`nq)>Qusl9p&OqGlA#;UkBWb21^pwsZ0rwFvdGKP7U679F~btf%#b(~cA}dJ^(Ock z*?bV88v~T2=%Wc4viYtIUY|CS;Da`d);Gstpaa^aLdR#*iE6m1pJdaCYPjjRr4NrI zCgVQ01}mOmHL^n*gX#@!=0P$vGduK1y$-_Hyu zC_WpGh0}yB_h?=pD}^@n(6a>k>%+u%DgWzD@t?dHAJISQ73NFY2n>j1QHo14ADC8( z3kF28D8(h24@@h?1p^{kl;V=i2d0(cf&q~%N^wc%1Jg=z!GK5>rMM*XfoY|JxW=-dea z8!!OSwGIG?DF85&zh~_=2dHj=vz-k!w6U#0SFOrg!{NCvLcu+9vLYLiGcTs-*#$W@ z``xr@Ra(1e8GJZwhEL;hI*CKfJ2h=-!7Fpx?nK^suP#ts6{(N0@Al66(3`|Pr0ntx za5duBu1e1BX$W=?I=1Da7r)DIb${ig&;tA~UA?}>k=X$`YHsu^q1Z0ha`ViB)4-9M z>939}FQ4L_v-;GmPcaeKx+*jqm0Y5*jdKDg$zFWDC0DcLa^wJzRmvRbpuFgUIu1D7 LyW17ouG{jT#1{tD literal 0 HcmV?d00001 diff --git a/res/edc/images/ico_check_high.png b/res/edc/images/ico_check_high.png new file mode 100644 index 0000000000000000000000000000000000000000..3a16a9f0dc87fca04e1e41b7e53b4745f880218f GIT binary patch literal 17847 zcmeI3dpK0v|HrpO?zcpebjGDfX2y(LGmUW>*WAJg-N)QaE;G!OTM6Y>9g@l|j_Q=V zL@A-%q7tH`gs70zq3@v%r^0We(5~ipe$Vgw{p0&QvmayjXMNV^z4m&o&sux!d7d4+ z+1^q@bfqW&020<#W=`O@?94}45d8m3tda!yCBm|DX9IxPvY8Jbka}hX0Ejv;2!zd> zJ((OP+mp$HSrZ5_mOqom@TLMlU}w5Bo#;HY+;F_-ovBSs*hw3vlbkTj$@FNLY{FVi zWfAF3G0JD3$T?OoH8&SfyptKj9~T#POwLhD{D^3WP`~oIxI^b-j@TeR;9fvdRpqWY07rKu)};+oP-TF!eO$2ad4dJMZnmCFDyNI ztuv4*0PJogd-MUD;lOV7gD)QfVd)boA$-8Llge^@nF#=F88yZX@Z1RGw`@6L4!CIp zvNW4I4A21ww5?rfRzT4;psHC~tQZg$2echyBG&-|A;9iCs;Ys&;S@mDV$>D)=lVkF zK~0cUN-?fX4Pzd@O&IPcOurWV-yzI%7f&TuEO?9T*NcUV1Ownt0Rk==j{~e0^H2(hC z%@=Cn=pEsf0u#?_?!U9Wu&U*R$YGD}m+_XLu8B>5QhKOTXYEnurYYO!DB~ArmU?Uq zeL*GG^u)T`YuctMFM72;^5c8;fTBHkzK{fX_6{=tUpDH}Zk(zY;{Y&P&aD1jLzq9z z^U(8_fa$kJla`rlfH0c%2|obXX{LrC-YYR`5C#CV%y7*j6UBGcE3~QvS5+_Rt`_^W zTmP`BT3wB)w5cd1Y?c4+b@>sd8c|I}N}9WozZ)y*Ryle`C9)(DH7?gB4OvnjNWvM_ z8WrIp0w#Bamywh^WB5FdxT(eo%cn$6C|6qv$Q)IJ-HnlTRIy3WvqCu?A;Mg<vBx zf5Jp>x44n8@eY8F_!L!Pi8>ix>}dGA_*Ft#w!zB77U#qsP&la6_~n^t5B#sJG(4t% zcJM)-r&MP=p3tCO^=gHXPMx-pQCCUKwz;zQ#?rs*R(POM(QZ~+ zs*hyimm#G?VhD8xYBI3|w0ha`pR6zcMr@O5vuN{mQXSIDNz=7jshW7Vlj2n@ggL1N zTYo3AKfS-UU#DNOUwL$!Xu5~7-)|GnFEpI)?b)O-AU&WvAV^I{o4A}$b$Xh8mbg?e zeyeH0*;1!Vj?vl6boZuWnhq_uwz*Jn?$pDTp7NgKj7zULH}MLX(Yzy>~ua*XyKyc+?ONr`{_KF-1N(#Bj-1KDsKF#vv zNu~0mhPgRsF$A4WI<6&7V<%}wLVd}86K6Q~B7+)PNn@c$dSu_Od$CUOqONTjin`q^ z_jJ-}w>+yn$2`k7mHLIlS?L!m&CA_ChD(|>Y*OE@Zb^@CUXniO{KWZbmT1;;J45XI zLPW0D1;w-FW&yW+vqq9LZte`ruw`cT1XT`xSakq7Nu2cgkoDeD+)c1VTurb`ym2L_d}hSx!0mUZ zhmdr)7U`A_oxaj#jqBCR~nE$Q;~GWMadn4_^a5sio>JR(i8{^^~{{!N_semkBA zx4lnKD@m&v&hEN2qCdhIiSGXOzV5H6gYI$Pb>E=s+MR2S4zEP*BAS-MQADuro+$4P4Pah|O_bcCuGs1RJ|0;emY;r8K%tX#4KB6FEpt?ZW^Ufc~ z3zWwPlbaKo8IqBkLtj05AVhjeI$9elt{xd3=^AAe$BJ=V*@{Zi3ux^ouzSrun4LE3 zNu#42Fqhz)^fd9gh&{MYgB!XxjOr0I_xtT`>2B8EHmfiQ%|d-&@0-1!hR32`q`wgB z3z1Jo-r2zlI@?_HE;4I*4njr?d)nAG#(u-ef0;;YW-mXsW^`G=nmEy*8l@V#3bIwd zHKv2GU30blsFkK&@QFVXD)fTXZtGmo8Ynxgo^!myR>Jma8a88j>OPnc+7MfbI&>o8 zxSwgRvRz^+{Wbk1ZC_(PHL`f>w(rqv$knHW?s}CR&tKvW7cDit_=>nylM_jyUk4-jflSy-w{6$^+(#CUL`%A z@NFGY45|1__mB3jZ588__`5f|T=-n<+G*|7kJcYc#*GSNbB88QfArZ=VDIBM+`!+) zKPjXtS^Bu__jaW=L!wjsqxEkrB^!ReIhFo404|{~;quFw`WLD!v!MQ=agpBf)e_jw zeaAxbp9?+wd7lzp3Ax8Kbu`r?%{lesHjiyL9PZ;=AHD7g{$$zpv(y<~oO{rwG2&fD z=TOAMMEYpUvGh~v2SO2lckk{xR~j-%ZtmS9#e921n)AHPeER6%#)^&2+efc+MvJ=! zmbqScO}&KO<@1{J8aI{r(4nFHOnGWy*>JX!A++%!#SDYyr|&9*{#-u&s67K? z__T5?m^prX{C)58r=kAplg*9gPXg3O3Mw2bcD*wmHhDsL8r^QRZK}KDZTG=FRRNh} zt=*R6f{}+>rV`%AOA(gDr^Gi#NkqNL*nr1iUKsgL4t>fZv`|{sX2?&Sn`$hSUycl& zXn*s#xiz`~_;w_*37bag=ogZX_sj(iy&nDsRhgslXT%Llsv&J8e4_f$GVy3ihWu2ip_L!CqtxMa2j& ziVMVo0zOm@2^Q$%?aRgn8mi3dV!`v7Vx$UewhG6~P{m}XL71D}W*C9#Plf3r^x$M| zGzw;bL7?<>F({N446TjQL87#gXbc>M!s;4eQTnjYhYDU4Jj3}@XjmsRi_gu0mZ6F# zhr_}mkpTe#hyWb~)1Qt+VK5k^HX4aW!@(MGc91WJ6bScatImmh(J`a4$^Hx$hr#rP z&FGRmn0q;fDk?J#%^#op<-?k9$d~<@9Y_%wNMa#T2yNsKg6!kR%!UiuM_1#Ng zeR%?z5C7^i=G{N+J%>SC7@V(SXFNX)qXsg55H{nP3!6=axe>yF`G+O=Q%M}AKat7w z#?NKh!t)dO_@v>=@TD*V*z0geXzhieUJ#<1kvLR5n2Ne^ZSW68L}9QfJuF&py*37` zt-VNOt|mmo4orIri9`A)Dqq!w>M$t`TF^gIS*ZE7hMgVO+Lz5C`I4#DW_Ymg2nK_K z-9SU3v^^*!IA((`6|SqVi-vp9XjC`}<3ZA+phzS%Wy5SIzYhOK+KfrwJCj47r755^ z2}RR4py}(vDc~7gpEe`C0X(DV>*!)OP)KBqw%!-%Md9B_JNPreMTq3RsLssQ|6iN< zj?6brSuxmP>I5xHDKN2SmlXH#cpp`pr`X*j>W%r74^F|)H7 zOCrxKGxIgIh`0RA(|bNY+If80iZC)Jl*!p}*~*7~ssn@QsY zko>78bTB9WmuWaB_;mzS8Hb!%lf4=LfiYl{_Wl1x;Ga#Q|Mn4B$X&80$(K&0;E`X_ z_DjJ(8??Eh{CYlpSq8qHe>e&mOJn-`kT`gT4~b4ivV7?{o4EPA5SGC7X8PMP zDO9`;4*9*}??!8i86Yv#8!8otgU>7F=V%d?(G$ zZ7}AWGH89bnYF@u?`(Yov^IEv8y@iZ9J<&I4Rz-py4Vd3U5Iq?WpME5&#gg<7e&q7 zZ0DdlgZn}%9_$*l2wHnHBarItX2t;T3GA7b4h{BcHU{eWZlL>*0v9a`pxPwzrOxEPZoOg?^K0o@fv{u;coJ9apwc^@^C?ba5s6lxbuN{ zdAJ}zxSKp&-1$JfJX{bU+)W-X?tCC#9xezF?j{cxcRmm=4;KUocaw*UJ0FObhYJFP zyUD}Foe#vz!vz7t-Q?lo&IjV<;er6+Zt`$(=L7Nba6y1@H+i_Y^MQDIxFA5dn><|H z`9QopTo54KO&%`pd>~#PE(j3rCJz^PJ`gVt7X%1*lZT5tABdNS3j&0@$-~8+55&vE z1p&g{2s;D-e@}zoLjbT>8vtJK245dd z1^{{HiCwoXz`C{8W+ueI&in0`V}CM{6@11_`o+6yrEYN;VMCEf6QZpHD}Y&AD6Fcu zxiDgVwa#P7lX`xng!J2c)&E81uT8rDY1(EKC(m|D7@Vy3uC(r4Nzh`|yFQXpBpq#@ z#5t&XuBfpQvIO2#dX(`8+#&5WI~p7 a3j(AwMlX*wUQYtM16Z5en-!Ywj`$zTgOFVS literal 0 HcmV?d00001 diff --git a/res/edc/images/ico_mute.png b/res/edc/images/ico_mute.png new file mode 100644 index 0000000000000000000000000000000000000000..df63c4cef0d38b94a8f6c30cc361051e743e45f7 GIT binary patch literal 18097 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 LZB2@d-4Fa1Tm$$z literal 0 HcmV?d00001 diff --git a/res/edc/images/ico_vol.png b/res/edc/images/ico_vol.png new file mode 100644 index 0000000000000000000000000000000000000000..c77faf108f58c2eb28a8ea656a9959ead4a257dc GIT binary patch literal 18333 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 CJ$l^$ literal 0 HcmV?d00001 diff --git a/res/edc/images/progressbar_thumb_foc.png b/res/edc/images/progressbar_thumb_foc.png new file mode 100644 index 0000000000000000000000000000000000000000..1c5d31f23e1e1a7e35ffbe6cd61a275464ab05ad GIT binary patch literal 18670 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/progressbar_thumb_nor.png b/res/edc/images/progressbar_thumb_nor.png new file mode 100644 index 0000000000000000000000000000000000000000..a0b0d9c210f9f7bdd532ecd9d6edbd8e8fdb7ff2 GIT binary patch literal 18441 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 KNulws1OEl+HLu_R literal 0 HcmV?d00001 diff --git a/res/edc/images/round_rectangle_9X9.png b/res/edc/images/round_rectangle_9X9.png new file mode 100644 index 0000000000000000000000000000000000000000..c25f58f84e8ae38d16f942cea665dc309e74d189 GIT binary patch literal 15130 zcmeI3Ux*t;9LJ~j`Y)wLETzS#HD|G{Zgw~SvnJ`EM8to#d8FcDK8G zm)u$G_1}Y75l#^i5y6+DqJ6OVP|;dx6>JeImRf~UeX#{8RbPsr&gOsSlJUg)Ak4yD z@|*AczO(b0-%R#ppBo-}XpQG?4*+0IW-vX1KG(T_E0?4H)^PY7`dDQSj@baLM#AcK zOTcTdZv-Irm6jcKMx}>E#VGk?)yP3#rDUSs0K~UdOj((P4wHigO;31loczSgXllZ{ zCnWKbnSvAA;H(9A&kkjk*-0g)dbcG#@rsBHO3;y+N~x&ZVkP0N`ikhg+st{HY8PiR z;oad5$c#$EOvm`Nwm+iweO!3wc3hgZ^NQjfUkY z8_R{FN+=i#gz|EAlAY-btkZ@v<A-dQs7-~?nQR&RIl@uzh>M^q$?(J-C2t}=WT$r+D zLw6S@yp3(xJYSl}hnrK~&7!Qh2Tf9OYZW329j&d~YG&5cv@Q#{D9Sbew)Ea(lqaB0 zD)^dJwO4Nw+sHd**@8O?s3!hq8`cavGjQiP=bp($?LSxpTb}-xE3l|7^nYK0R_!Vi zvR;5{l53Q0qhWE2R$I!>{nR)H7Vf{es)%{RD#=b#E6D}OnR+44wHjMv#+$!FV#+8Q zmSm_f8HjV;n%lD6-yad34X94#>Yfzh+=4c||ERmii&NG95kHSE^q_*SdTP6jr;d?R z+hshpmHDWyIZ1zgG_1KT%l(n8!Pt$S=U_4%Lg#s$!<+GpVXXp-qiGGD=eB!F39)(( zE_6*C>y_9h)Dvr^(Dvk2-QKlU^jwD?DY@n|<$|5xJR5K4m)4AKrz_?~2f=`lLyC*c z2U9673F~iR{_{y%s+i*7wUT^lirc7 zT>jwYgy;13JC9t^uMQM{*wVM(I{dvfnK&}Abya1_YU#d<_gudBeBtWyqkTet-|;hR ze@*6>=lhQRcz$lZdB@f_-afs5*}0SZZX8%Scxy=e;>Ka=!2GjY552$a`MHBvvcdHp zbNg8y&e^ASUKsl9#BcL=eY<(@sj&-}z$*{FIUn@TeY5t|F=-|f>3{6!O;5fszJa?o z-uK-znJ4-$opqMJJ8l2+;X5}UmoL6`;-|0o7V{gIPBJU5kAJ-M^E+QmJ@w`98^M~F W&L8y;+&qpZ1Tq6d>GyVyAN&jTX>hIp literal 0 HcmV?d00001 diff --git a/res/edc/images/tooltip_arrow.png b/res/edc/images/tooltip_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..9bb8e3d61e601b72ef1b4011bec78bf3c19d2454 GIT binary patch literal 18215 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/tooltip_center.png b/res/edc/images/tooltip_center.png new file mode 100644 index 0000000000000000000000000000000000000000..d2b7b7af5e9f9d3b02f991d584a9ddb47884154f GIT binary patch literal 18116 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 literal 0 HcmV?d00001 diff --git a/res/edc/images/tooltip_left.png b/res/edc/images/tooltip_left.png new file mode 100644 index 0000000000000000000000000000000000000000..63852e39c79e1894df6dfa371b0ba07538024bd0 GIT binary patch literal 18200 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 G)_((@HrHJM literal 0 HcmV?d00001 diff --git a/res/edc/images/tooltip_right.png b/res/edc/images/tooltip_right.png new file mode 100644 index 0000000000000000000000000000000000000000..f66fa15199effc2798b8d8fbeeee658f5e733fad GIT binary patch literal 18187 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 iUZp(^4apAnn^QJ>4;O^}0RN}aN-G2kE7ShcC literal 0 HcmV?d00001 diff --git a/res/edc/images/videoplay_progress_foc_bg.png b/res/edc/images/videoplay_progress_foc_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..a03e7dc793a767df7574c94ba900e7382de4182b GIT binary patch literal 18294 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 literal 0 HcmV?d00001 diff --git a/res/edc/video-player-tv-ref-theme.edc b/res/edc/video-player-tv-ref-theme.edc new file mode 100644 index 0000000..e3900de --- /dev/null +++ b/res/edc/video-player-tv-ref-theme.edc @@ -0,0 +1,9 @@ +#include "../../include/define.h" + +collections { + #include "widgets/style.edc" + #include "widgets/button.edc" + #include "widgets/ctxpopup.edc" + #include "widgets/slider.edc" + #include "widgets/progressbar.edc" +} diff --git a/res/edc/video-player-tv-ref.edc b/res/edc/video-player-tv-ref.edc new file mode 100644 index 0000000..be5c5ec --- /dev/null +++ b/res/edc/video-player-tv-ref.edc @@ -0,0 +1,669 @@ +#include "../../include/define.h" + +collections { + #include "widgets/style.edc" + #include "volume.edc" + images { + image: IMAGE_VIDEO_PROGRESS_BG COMP; + } + group { + name: GRP_VIDEO_PLAYER; + parts { + part { + name: "bgarea"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 1920 1080; + rel2.relative: 0.0 0.0; + align: 0.0 0.0; + fixed: 1 1; + color: 0 0 0 0; + } + } + part { + name: "toparea"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 150; + rel1 { + to: "bgarea"; + } + rel2 { + to: "bgarea"; + relative: 1.0 0.0; + } + align: 0.5 1.0; + fixed: 0 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + align: 0.5 0.0; + } + } + part { + name: "toparea_bg"; + type: RECT; + scale: 1; + clip_to: "toparea"; + description { + state: "default" 0.0; + color: 18 22 34 204; + rel1 { + to: "toparea"; + } + rel2 { + to: "toparea"; + } + } + } + part { + name: "padding_title"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 71 31; + rel1 { + to: "toparea"; + } + rel2 { + to: "toparea"; + relative: 0.0 0.0; + } + fixed: 1 1; + visible: 0; + align: 0.0 0.0; + } + } + part { + name: PART_TITLETEXT; + type: TEXT; + clip_to: "toparea"; + scale: 1; + description { + state: "default" 0.0; + min: 807 52; + rel1 { + to: "padding_title"; + relative: 1.0 1.0; + } + rel2 { + to: "padding_title"; + } + text { + font: FONT_STYLE_SANS_MEDIUM; + size: 40; + align: 0.0 0.5; + } + color: 255 255 255 255; + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: PART_RESOLUTIONTEXT; + type: TEXT; + clip_to: "toparea"; + scale: 1; + description { + state: "default" 0.0; + min: 0 32; + rel1 { + to: PART_TITLETEXT; + relative: 0.0 1.0; + } + rel2 { + to: PART_TITLETEXT; + relative: 0.0 1.0; + } + text { + font: FONT_STYLE_SANS_REGULAR; + size: 26; + min: 1 0; + ellipsis: -1; + } + color: 188 188 188 255; + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "separator_area1"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 38 32; + rel1 { + to: PART_RESOLUTIONTEXT; + relative: 1.0 0.0; + } + rel2 { + to: PART_RESOLUTIONTEXT; + relative: 1.0 0.0; + } + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "separator1"; + type: RECT; + scale: 1; + clip_to: "toparea"; + description { + state: "default" 0.0; + min: 2 20; + max: 2 20; + rel1 { + to: "separator_area1"; + } + rel2 { + to: "separator_area1"; + } + } + } + part { + name: PART_SOURCETEXT; + type: TEXT; + scale: 1; + clip_to: "toparea"; + description { + state: "default" 0.0; + min: 0 32; + rel1 { + to: "separator_area1"; + relative: 1.0 0.0; + } + rel2 { + to: "separator_area1"; + relative: 1.0 0.0; + } + text { + font: FONT_STYLE_SANS_REGULAR; + size: 26; + min: 1 0; + ellipsis: -1; + } + color: 188 188 188 255; + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "separator_area2"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 38 32; + rel1 { + to: PART_SOURCETEXT; + relative: 1.0 0.0; + } + rel2 { + to: PART_SOURCETEXT; + relative: 1.0 0.0; + } + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "separator2"; + type: RECT; + scale: 1; + clip_to: "toparea"; + description { + state: "default" 0.0; + min: 2 20; + max: 2 20; + rel1 { + to: "separator_area2"; + } + rel2 { + to: "separator_area2"; + } + } + } + part { + name: PART_DATETEXT; + type: TEXT; + scale: 1; + clip_to: "toparea"; + description { + state: "default" 0.0; + min: 0 32; + rel1 { + to: "separator_area2"; + relative: 1.0 0.0; + } + rel2 { + to: "separator_area2"; + relative: 1.0 0.0; + } + text { + font: FONT_STYLE_SANS_REGULAR; + size: 26; + min: 1 0; + ellipsis: -1; + } + color: 188 188 188 255; + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "padding_counttext"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 71 31; + rel1 { + to: "toparea"; + relative: 1.0 0.0; + } + rel2 { + to: "toparea"; + relative: 1.0 0.0; + } + fixed: 1 1; + visible: 0; + align: 1.0 0.0; + } + } + part { + name: PART_COUNTTEXT; + type: TEXT; + clip_to: "toparea"; + scale: 1; + description { + state: "default" 0.0; + min: 0 50; + rel1 { + to: "padding_counttext"; + relative: 0.0 1.0; + } + rel2 { + to: "padding_counttext"; + relative: 0.0 1.0; + } + text { + font: FONT_STYLE_SANS_REGULAR; + size: 40; + align: 1.0 0.5; + min: 1 0; + ellipsis: -1; + } + color: 169 169 169 255; + fixed: 1 1; + align: 1.0 0.0; + } + } + part { + name: PART_CURRENTTEXT; + type: TEXT; + scale: 1; + clip_to: "toparea"; + description { + state: "default" 0.0; + min: 0 50; + rel1 { + to: PART_COUNTTEXT; + } + rel2 { + to: PART_COUNTTEXT; + relative: 0.0 0.0; + } + text { + font: FONT_STYLE_SANS_MEDIUM; + size: 40; + align: 1.0 0.5; + min: 1 0; + ellipsis: -1; + } + color: 255 255 255 255; + fixed: 1 1; + align: 1.0 0.0; + } + } + /* bottom area drawing */ + part { + name: "bottomarea"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 274; + rel1 { + to: "bgarea"; + relative: 0.0 1.0; + } + rel2 { + to: "bgarea"; + } + align: 0.5 0.0; + fixed: 0 1; + } + description { + state: "show" 0.0; + inherit: "default" 0.0; + align: 0.5 1.0; + } + } + part { + name: "bg_bottom"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 214; + rel1 { + to: "bottomarea"; + relative: 0.0 1.0; + } + rel2 { + to: "bottomarea"; + } + align: 0.5 1.0; + fixed: 0 1; + visible: 0; + } + } + part { + name: "slider_focus_bg"; + scale: 1; + clip_to: "bottomarea"; + description { + state: "default" 0.0; + min: 0 60; + rel1 { + to: "bg_bottom"; + } + rel2 { + to: "bg_bottom"; + relative: 1.0 0.0; + } + image.normal: IMAGE_VIDEO_PROGRESS_BG; + fixed: 0 1; + align: 0.5 1.0; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "bottomarea_bg"; + type: RECT; + scale: 1; + clip_to: "bottomarea"; + description { + state: "default" 0.0; + color: 18 22 34 204; + rel1.to: "bg_bottom"; + rel2.to: "bg_bottom"; + } + } + part { + name: "padding_slider"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 0 26; + rel1 { + to: "bg_bottom"; + } + rel2 { + to: "bg_bottom"; + relative: 1.0 0.0; + } + fixed: 1 1; + visible: 0; + align: 0.5 1.0; + } + } + part { + name: PART_SLIDER; + type: SWALLOW; + scale: 1; + clip_to: "bottomarea"; + description { + state: "default" 0.0; + min: 0 60; + rel1 { + to: "padding_slider"; + } + rel2 { + to: "padding_slider"; + relative: 1.0 0.0; + } + fixed: 0 1; + align: 0.5 0.0; + } + } + part { + name: "padding_elapsedtime"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 71 6; + rel1 { + to: PART_SLIDER; + relative: 0.0 1.0; + } + rel2 { + to: PART_SLIDER; + relative: 0.0 1.0; + } + fixed: 1 1; + visible: 0; + align: 0.0 0.0; + } + } + part { + name: PART_CURTIME_TEXT; + type: TEXT; + scale: 1; + clip_to: "bottomarea"; + description { + state: "default" 0.0; + min: 167 40; + rel1 { + to: "padding_elapsedtime"; + relative: 1.0 1.0; + } + rel2 { + to: "padding_elapsedtime"; + } + text { + font: FONT_STYLE_SANS_REGULAR; + size: 26; + align: 0.0 0.5; + } + color: 188 188 188 255; + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "padding_totaltime"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 71 6; + rel1 { + to: PART_SLIDER; + relative: 1.0 1.0; + } + rel2 { + to: PART_SLIDER; + } + fixed: 1 1; + visible: 0; + align: 1.0 0.0; + } + } + part { + name: PART_TOTALTIME_TEXT; + type: TEXT; + scale: 1; + clip_to: "bottomarea"; + description { + state: "default" 0.0; + min: 167 40; + rel1 { + to: "padding_totaltime"; + relative: 0.0 1.0; + } + rel2 { + to: "padding_totaltime"; + relative: 0.0 1.0; + } + text { + font: FONT_STYLE_SANS_REGULAR; + size: 26; + align: 1.0 0.5; + } + color: 188 188 188 255; + fixed: 1 1; + align: 1.0 0.0; + } + } + part { + name: "padding_btn0"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 425 52; + rel1 { + to: "bg_bottom"; + } + rel2 { + to: "bg_bottom"; + relative: 0.0 0.0; + } + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "part_btn0"; + type: SWALLOW; + scale: 1; + clip_to: "bottomarea"; + description { + state: "default" 0.0; + min: 110 110; + rel1 { + to: "padding_btn0"; + relative: 1.0 1.0; + } + rel2 { + to: "padding_btn0"; + } + fixed: 1 1; + align: 0.0 0.0; + } + } + +#define PART_BTN(nameno, padno) \ + part { \ + name: "padding_btn"nameno; \ + type: SPACER; \ + scale: 1; \ + description { \ + state: "default" 0.0; \ + min: 50 0; \ + rel1 { \ + to: "part_btn"padno; \ + relative: 1.0 0.0; \ + } \ + rel2 { \ + to: "part_btn"padno; \ + } \ + fixed: 1 1; \ + align: 0.0 0.0; \ + } \ + } \ + part { \ + name: "part_btn"nameno; \ + type: SWALLOW; \ + scale: 1; \ + clip_to: "bottomarea"; \ + description { \ + state: "default" 0.0; \ + min: 110 110; \ + rel1 { \ + to: "padding_btn"nameno; \ + relative: 1.0 0.0; \ + } \ + rel2 { \ + to: "padding_btn"nameno; \ + } \ + fixed: 1 1; \ + align: 0.0 0.0; \ + } \ + } + + PART_BTN(1, 0) + PART_BTN(2, 1) + PART_BTN(3, 2) + PART_BTN(4, 3) + PART_BTN(5, 4) + PART_BTN(6, 5) + + } + programs { + program { + name : "hide,view"; + signal: "hide,view"; + source: ""; + action: STATE_SET "default" 0.0; + target: "bottomarea"; + target: "toparea"; + transition: LINEAR 0.2; + } + program { + name : "show,view"; + signal: "show,view"; + source: ""; + action: STATE_SET "show" 0.0; + target: "bottomarea"; + target: "toparea"; + transition: LINEAR 0.2; + after: "emit,signal"; + } + program { + name: "emit,signal"; + action: SIGNAL_EMIT "show,view,finish" ""; + } + program { + name : "slider,focus,in"; + signal: "slider,focus,in"; + source: ""; + action: STATE_SET "visible" 0.0; + target: "slider_focus_bg"; + } + program { + name : "slider,focus,out"; + signal: "slider,focus,out"; + source: ""; + action: STATE_SET "default" 0.0; + target: "slider_focus_bg"; + } + } + } +} diff --git a/res/edc/volume.edc b/res/edc/volume.edc new file mode 100644 index 0000000..9db36f3 --- /dev/null +++ b/res/edc/volume.edc @@ -0,0 +1,195 @@ +group { + name: GRP_VOLUME; + images { + image: "ico_vol.png" COMP; + image: "ico_mute.png" COMP; + image: "round_rectangle_9X9.png" COMP; + } + styles { + style { + name: "volume_style"; + base: "align=center font=TizenSans font_size=34 color=#93AA00FF font_weight=Bold"; + } + } + parts { + part { + name: "padding.banner"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.5 1.0; + rel2.relative: 0.5 1.0; + min: 0 127; + align: 1.0 1.0; + fixed: 1 1; + visible: 0; + } + } + part { + name: "banner.volume"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding.banner"; + relative: 0.0 0.0; + } + rel2 { + to: "padding.banner"; + relative: 0.0 0.0; + } + min: 527 154; + align: 0.5 0.5; + fixed: 1 1; + image { + normal: "round_rectangle_9X9.png"; + border: 9 9 9 9; + } + color: 18 22 34 255; + } + } + part { + name: "padding.icon"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "banner.volume"; + relative: 0.0 0.0; + } + rel2 { + to: "banner.volume"; + relative: 0.0 0.0; + } + min: 57 52; + align: 0.0 0.0; + fixed: 1 1; + visible: 0; + + } + } + part { + name: "part.icon"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding.icon"; + relative: 1.0 1.0; + } + rel2 { + to: "padding.icon"; + relative: 1.0 1.0; + } + min: 50 50; + align: 0.0 0.0; + fixed: 1 1; + image.normal: "ico_vol.png"; + } + description { + state: "mute" 0.0; + inherit: "default" 0.0; + image.normal: "ico_mute.png"; + } + } + part { + name: "padding.progressbar"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "part.icon"; + relative: 1.0 0.0; + } + rel2 { + to: "part.icon"; + relative: 1.0 0.0; + } + min: 18 10; + align: 0.0 0.0; + fixed: 1 1; + visible: 0; + } + } + part { + name: PART_VOLUME_BAR; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding.progressbar"; + relative: 1.0 1.0; + } + rel2 { + to: "padding.progressbar"; + relative: 1.0 1.0; + } + min: 280 8; + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "padding.volume"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "banner.volume"; + relative: 1.0 0.0; + } + rel2 { + to: "banner.volume"; + relative: 1.0 0.0; + } + min: 51 0; + align: 1.0 0.0; + fixed: 1 1; + visible: 0; + } + } + part { + name: PART_VOLUME_VALUE; + type: TEXTBLOCK; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding.volume"; + relative: 0.0 0.0; + } + rel2 { + to: "padding.volume"; + relative: 0.0 0.0; + } + min: 60 154; + align: 1.0 0.0; + fixed: 1 1; + text.style: "volume_style"; + } + } + } + programs { + program { + name: "show.mute"; + signal: "volume,mute"; + source: "base"; + action: STATE_SET "mute" 0.0; + target: "part.icon"; + } + program { + name: "hide.mute"; + signal: "volume,unmute"; + source: "base"; + action: STATE_SET "default" 0.0; + target: "part.icon"; + } + } +} diff --git a/res/edc/widgets/button.edc b/res/edc/widgets/button.edc new file mode 100644 index 0000000..21b6e7c --- /dev/null +++ b/res/edc/widgets/button.edc @@ -0,0 +1,949 @@ +#define STATE_NORMAL 0 +#define STATE_HIGHLIGHT 1 +#define STATE_PAUSE 0 +#define STATE_PLAY 1 + +group { + name: "elm/button/base/video_btn_prev"; + images { + image: IMAGE_VIDEO_BTN_PREV_NORMAL COMP; + image: IMAGE_VIDEO_BTN_PREV_FOCUS COMP; + } + parts { + part { + name: "bg"; + scale: 1; + description { + state: "default" 0.0; + min: 110 110; + image.normal: IMAGE_VIDEO_BTN_PREV_NORMAL; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_PREV_FOCUS; + } + description { + state: "selected_in" 0.0; + min: 60 60; + max: 60 60; + image.normal: IMAGE_VIDEO_BTN_PREV_FOCUS; + } + } + } + programs { + program { + name: "button_down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,press" ""; + } + program { + name: "button_mouseup"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,unpress" ""; + } + program { + name: "button_clicked"; + signal: "mouse,clicked,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "mouse,anim,start"; + signal: "mouse,anim,start"; + source: ""; + action: STATE_SET "selected_in" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "mouse,anim,end"; + } + program { + name: "mouse,anim,end"; + action: STATE_SET "selected" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "emit,signal"; + } + program { + name: "emit,signal"; + action: SIGNAL_EMIT "btn,anim,finish" "prev"; + } + program { + name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "bg"; + } + program { + name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + } + } +} + +group { + inherit: "elm/button/base/video_btn_prev"; + name: "elm/button/base/video_btn_next"; + images { + image: IMAGE_VIDEO_BTN_NEXT_NORMAL COMP; + image: IMAGE_VIDEO_BTN_NEXT_FOCUS COMP; + } + parts { + part { + name: "bg"; + scale: 1; + description { + state: "default" 0.0; + min: 110 110; + image.normal: IMAGE_VIDEO_BTN_NEXT_NORMAL; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_NEXT_FOCUS; + } + description { + state: "selected_in" 0.0; + min: 60 60; + max: 60 60; + image.normal: IMAGE_VIDEO_BTN_NEXT_FOCUS; + } + } + } + programs { + program { + name: "emit,signal"; + action: SIGNAL_EMIT "btn,anim,finish" "next"; + } + } +} + +group { + inherit: "elm/button/base/video_btn_prev"; + name: "elm/button/base/video_btn_rew"; + images { + image: IMAGE_VIDEO_BTN_REW_NORMAL COMP; + image: IMAGE_VIDEO_BTN_REW_FOCUS COMP; + } + parts { + part { + name: "bg"; + scale: 1; + description { + state: "default" 0.0; + min: 110 110; + image.normal: IMAGE_VIDEO_BTN_REW_NORMAL; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_REW_FOCUS; + } + description { + state: "selected_in" 0.0; + min: 60 60; + max: 60 60; + image.normal: IMAGE_VIDEO_BTN_REW_FOCUS; + } + } + } + programs { + program { + name: "emit,signal"; + action: SIGNAL_EMIT "btn,anim,finish" "rew"; + } + } +} + +group { + inherit: "elm/button/base/video_btn_prev"; + name: "elm/button/base/video_btn_ff"; + images { + image: IMAGE_VIDEO_BTN_FF_NORMAL COMP; + image: IMAGE_VIDEO_BTN_FF_FOCUS COMP; + } + parts { + part { + name: "bg"; + scale: 1; + description { + state: "default" 0.0; + min: 110 110; + image.normal: IMAGE_VIDEO_BTN_FF_NORMAL; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_FF_FOCUS; + } + description { + state: "selected_in" 0.0; + min: 60 60; + max: 60 60; + image.normal: IMAGE_VIDEO_BTN_FF_FOCUS; + } + } + } + programs { + program { + name: "emit,signal"; + action: SIGNAL_EMIT "btn,anim,finish" "ff"; + } + } +} + +group { + name: "elm/button/base/video_btn_playpause"; + images { + image: IMAGE_VIDEO_BTN_PAUSE_NORMAL COMP; + image: IMAGE_VIDEO_BTN_PAUSE_FOCUS COMP; + image: IMAGE_VIDEO_BTN_PLAY_NORMAL COMP; + image: IMAGE_VIDEO_BTN_PLAY_FOCUS COMP; + } + script { + public cur_state; + } + parts { + part { + name: "bg"; + scale: 1; + description { + state: "default" 0.0; + min: 110 110; + image.normal: IMAGE_VIDEO_BTN_PAUSE_NORMAL; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_PAUSE_FOCUS; + } + description { + state: "selected_in" 0.0; + inherit: "selected" 0.0; + min: 60 60; + max: 60 60; + } + description { + state: "default_play" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_PLAY_NORMAL; + } + description { + state: "selected_play" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_PLAY_FOCUS; + } + description { + state: "selected_play_in" 0.0; + inherit: "selected_play" 0.0; + min: 60 60; + max: 60 60; + } + } + } + programs { + program { + name: "load"; + signal: "load"; + source: ""; + script { + set_int(cur_state, STATE_PAUSE); + } + } + program { + name: "button_down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,press" ""; + } + program { + name: "button_mouseup"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,unpress" ""; + } + program { + name: "button_clicked"; + signal: "mouse,clicked,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "mouse,anim,start"; + signal: "mouse,anim,start"; + source: ""; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_PAUSE) { + run_program(PROGRAM:"pause_to_play_anim_start"); + set_int(cur_state, STATE_PLAY); + } else { + run_program(PROGRAM:"play_to_pause_anim_start"); + set_int(cur_state, STATE_PAUSE); + } + } + } + program { + name: "pause_to_play_anim_start"; + action: STATE_SET "selected_in" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "pause_to_play_anim_end"; + } + program { + name: "pause_to_play_anim_end"; + action: STATE_SET "selected_play" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "emit,signal"; + } + program { + name: "play_to_pause_anim_start"; + action: STATE_SET "selected_play_in" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "play_to_pause_anim_end"; + } + program { + name: "play_to_pause_anim_end"; + action: STATE_SET "selected" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "emit,signal"; + } + program { + name: "emit,signal"; + action: SIGNAL_EMIT "btn,anim,finish" "playpause"; + } + program { + name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_PAUSE) + set_state(PART:"bg", "selected", 0.0); + else + set_state(PART:"bg", "selected_play", 0.0); + } + } + program { + name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_PAUSE) + set_state(PART:"bg", "default", 0.0); + else + set_state(PART:"bg", "default_play", 0.0); + } + } + program { + name: "set,play,icon"; + signal: "set,play,icon"; + source: ""; + script { + set_int(cur_state, STATE_PLAY); + set_state(PART:"bg", "default_play", 0.0); + } + } + program { + name: "set,pause,icon"; + signal: "set,pause,icon"; + source: ""; + script { + set_int(cur_state, STATE_PAUSE); + set_state(PART:"bg", "default", 0.0); + } + } + } +} + +#define STATE_REPEAT_ALL 0 +#define STATE_REPEAT_ONE 1 +#define STATE_REPEAT_OFF 2 +group { + name: "elm/button/base/video_btn_repeat"; + images { + image: IMAGE_VIDEO_BTN_REPEATOFF_NORMAL COMP; + image: IMAGE_VIDEO_BTN_REPEATOFF_FOCUS COMP; + image: IMAGE_VIDEO_BTN_REPEATALL_NORMAL COMP; + image: IMAGE_VIDEO_BTN_REPEATALL_FOCUS COMP; + image: IMAGE_VIDEO_BTN_REPEATONE_NORMAL COMP; + image: IMAGE_VIDEO_BTN_REPEATONE_FOCUS COMP; + } + script { + public cur_state; + } + parts { + part { + name: "bg"; + scale: 1; + description { + state: "default" 0.0; + min: 110 110; + image.normal: IMAGE_VIDEO_BTN_REPEATALL_NORMAL; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_REPEATALL_FOCUS; + } + description { + state: "selected_in" 0.0; + inherit: "selected" 0.0; + min: 60 60; + max: 60 60; + } + description { + state: "default_repeatone" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_REPEATONE_NORMAL; + } + description { + state: "selected_repeatone" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_REPEATONE_FOCUS; + } + description { + state: "selected_repeatone_in" 0.0; + inherit: "selected_repeatone" 0.0; + min: 60 60; + max: 60 60; + } + description { + state: "default_repeatoff" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_REPEATOFF_NORMAL; + } + description { + state: "selected_repeatoff" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_REPEATOFF_FOCUS; + } + description { + state: "selected_repeatoff_in" 0.0; + inherit: "selected_repeatoff" 0.0; + min: 60 60; + max: 60 60; + } + } + } + programs { + program { + name: "load"; + signal: "load"; + source: ""; + script { + set_int(cur_state, STATE_REPEAT_ALL); + } + } + program { + name: "button_down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,press" ""; + } + program { + name: "button_mouseup"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,unpress" ""; + } + program { + name: "button_clicked"; + signal: "mouse,clicked,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "mouse,anim,start"; + signal: "mouse,anim,start"; + source: ""; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_REPEAT_ALL) { + run_program(PROGRAM:"repeatall_to_repeatone_start"); + set_int(cur_state, STATE_REPEAT_ONE); + } else if (state == STATE_REPEAT_ONE) { + run_program(PROGRAM:"repeatone_to_repeatoff_start"); + set_int(cur_state, STATE_REPEAT_OFF); + } else { + run_program(PROGRAM:"repeatoff_to_repeatall_start"); + set_int(cur_state, STATE_REPEAT_ALL); + } + } + } + program { + name: "repeatall_to_repeatone_start"; + action: STATE_SET "selected_in" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "repeatall_to_repeatone_end"; + } + program { + name: "repeatall_to_repeatone_end"; + action: STATE_SET "selected_repeatone" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "emit,signal"; + } + program { + name: "repeatone_to_repeatoff_start"; + action: STATE_SET "selected_repeatone_in" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "repeatone_to_repeatoff_end"; + } + program { + name: "repeatone_to_repeatoff_end"; + action: STATE_SET "selected_repeatoff" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "emit,signal"; + } + program { + name: "repeatoff_to_repeatall_start"; + action: STATE_SET "selected_repeatoff_in" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "repeatoff_to_repeatall_end"; + } + program { + name: "repeatoff_to_repeatall_end"; + action: STATE_SET "selected" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "emit,signal"; + } + program { + name: "emit,signal"; + action: SIGNAL_EMIT "btn,anim,finish" "repeat"; + } + program { + name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_REPEAT_ALL) + set_state(PART:"bg", "selected", 0.0); + else if (state == STATE_REPEAT_ONE) + set_state(PART:"bg", "selected_repeatone", 0.0); + else + set_state(PART:"bg", "selected_repeatoff", 0.0); + } + } + program { + name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_REPEAT_ALL) + set_state(PART:"bg", "default", 0.0); + else if (state == STATE_REPEAT_ONE) + set_state(PART:"bg", "default_repeatone", 0.0); + else + set_state(PART:"bg", "default_repeatoff", 0.0); + } + } + } +} + +group { + name: "elm/button/base/video_btn_settings"; + images { + image: IMAGE_VIDEO_BTN_SETTING_NORMAL COMP; + image: IMAGE_VIDEO_BTN_SETTING_FOCUS COMP; + image: IMAGE_VIDEO_BTN_SETTING_HIGHLIGHT COMP; + } + script { + public cur_state; + } + parts { + part { + name: "bg"; + scale: 1; + description { + state: "default" 0.0; + min: 110 110; + image.normal: IMAGE_VIDEO_BTN_SETTING_NORMAL; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_SETTING_FOCUS; + } + description { + state: "selected_in" 0.0; + inherit: "selected" 0.0; + min: 60 60; + max: 60 60; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_VIDEO_BTN_SETTING_HIGHLIGHT; + } + } + } + programs { + program { + name: "load"; + signal: "load"; + source: ""; + script { + set_int(cur_state, STATE_NORMAL); + } + } + program { + name: "button_down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,press" ""; + } + program { + name: "button_mouseup"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,unpress" ""; + } + program { + name: "button_clicked"; + signal: "mouse,clicked,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + script { + set_int(cur_state, STATE_NORMAL); + set_state(PART:"bg", "selected", 0.0); + } + } + program { + name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + script { + new state; + state = get_int(cur_state); + if (state == STATE_HIGHLIGHT) + set_state(PART:"bg", "highlight", 0.0); + else + set_state(PART:"bg", "default", 0.0); + } + } + program { + name: "mouse,anim,start"; + signal: "mouse,anim,start"; + source: ""; + action: STATE_SET "selected_in" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "mouse,anim,end"; + } + program { + name: "mouse,anim,end"; + action: STATE_SET "highlight" 0.0; + target: "bg"; + transition: LINEAR 0.1; + after: "emit,signal"; + } + program { + name: "emit,signal"; + action: SIGNAL_EMIT "btn,anim,finish" "settings"; + } + program { + name: "highlight"; + signal: "elm,action,highlight"; + source: "elm"; + script { + set_int(cur_state, STATE_HIGHLIGHT); + set_state(PART:"bg", "highlight", 0.0); + } + } + } +} + +group { + name: "elm/button/base/shorttext"; + images { + image: IMAGE_ICON_CHECK_HIGH COMP; + image: IMAGE_ICON_CHECK_FOC COMP; + } + script { + public cur_state; + } + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 310 82; + color: 255 255 255 255; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + color: 147 170 0 255; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "division_line"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 310 2; + color: 89 89 89 51; + rel1 { + to: "bg"; + relative: 1.0 1.0; + } + rel2 { + to: "bg"; + } + align: 1.0 1.0; + fixed: 1 1; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + visible: 0; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + } + } + part { + name: "padding_text"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 40 0; + rel1 { + to: "bg"; + } + rel2 { + to: "bg"; + relative: 0.0 1.0; + } + fixed: 1 0; + visible: 0; + align: 0.0 0.0; + } + } + part { + name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 190 80; + rel1 { + to: "padding_text"; + relative: 1.0 0.0; + } + rel2 { + to: "padding_text"; + } + text { + font: FONT_STYLE_SANS_REGULAR; + size: 30; + align: 0.0 0.5; + } + color: 89 89 89 255; + fixed: 1 1; + align: 0.0 0.0; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + text { + font: FONT_STYLE_SANS_MEDIUM; + } + color: 255 255 255 255; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + text { + font: FONT_STYLE_SANS_MEDIUM; + } + color: 147 170 0 255; + } + } + part { + name: "padding_icon"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + min: 20 30; + rel1 { + to: "elm.text"; + relative: 1.0 0.0; + } + rel2 { + to: "elm.text"; + relative: 1.0 0.0; + } + fixed: 1 1; + visible: 0; + align: 0.0 0.0; + } + } + part { + name: PART_ELM_SWALLOWICON; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 20 20; + rel1 { + to: "padding_icon"; + relative: 1.0 1.0; + } + rel2 { + to: "padding_icon"; + } + image.normal: IMAGE_ICON_CHECK_FOC; + fixed: 1 1; + align: 0.0 0.0; + visible: 0; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { + state: "highlight" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_ICON_CHECK_HIGH; + visible: 1; + } + } + } + programs { + program { + name: "load"; + signal: "load"; + source: ""; + script { + set_int(cur_state, STATE_NORMAL); + } + } + program { + name: "button_down"; + signal: "mouse,down,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,press" ""; + } + program { + name: "button_mouseup"; + signal: "mouse,up,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,unpress" ""; + } + program { + name: "button_clicked"; + signal: "mouse,clicked,1"; + source: "bg"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + program { + name: "focused"; + signal: "elm,action,focus"; + source: "elm"; + script { + new state; + state = get_int(cur_state); + + if (state == STATE_HIGHLIGHT) + set_state(PART:PART_ELM_SWALLOWICON, "selected", 0.0); + + set_state(PART:"bg", "selected", 0.0); + set_state(PART:"division_line", "selected", 0.0); + set_state(PART:"elm.text", "selected", 0.0); + } + } + program { + name: "unfocused"; + signal: "elm,action,unfocus"; + source: "elm"; + script { + new state; + new buf[100]; + state = get_int(cur_state); + + if (state == STATE_HIGHLIGHT) + snprintf(buf, sizeof(buf), "highlight"); + else + snprintf(buf, sizeof(buf), "default"); + + set_state(PART:"bg", buf, 0.0); + set_state(PART:"division_line", buf, 0.0); + set_state(PART:"elm.text", buf, 0.0); + set_state(PART:PART_ELM_SWALLOWICON, buf, 0.0); + } + } + program { + name: "highlight"; + signal: "elm,action,highlight"; + source: "elm"; + script { + set_int(cur_state, STATE_HIGHLIGHT); + } + after: "highlight1"; + } + program { + name: "highlight1"; + action: STATE_SET "highlight" 0.0; + target: "bg"; + target: "elm.text"; + target: PART_ELM_SWALLOWICON; + target: "division_line"; + } + program { + name: "hide_line"; + signal: "elm,action,hideline"; + source: "elm"; + action: STATE_SET "selected" 0.0; + target: "division_line"; + } + } +} diff --git a/res/edc/widgets/ctxpopup.edc b/res/edc/widgets/ctxpopup.edc new file mode 100644 index 0000000..1401584 --- /dev/null +++ b/res/edc/widgets/ctxpopup.edc @@ -0,0 +1,35 @@ +group { + name: "elm/ctxpopup/base/viewer_popup"; + images { + image: IMAGE_TOOLTIP_ARROW COMP; + } + parts { + part { + name: "elm.swallow.content"; + type: SWALLOW; + description { + state: "default" 0.0; + } + } + part { + name: "ctxpopup_arrow"; + scale: 1; + description { + state: "default" 0.0; + min: 14 9; + fixed: 1 1; + rel1 { + to: "elm.swallow.content"; + relative: 0.5 1; + } + rel2 { + to: "elm.swallow.content"; + relative: 0.5 1; + } + align: 0.5 0.0; + image.normal: IMAGE_TOOLTIP_ARROW; + color: 255 255 255 255; + } + } + } +} diff --git a/res/edc/widgets/progressbar.edc b/res/edc/widgets/progressbar.edc new file mode 100644 index 0000000..ef101d4 --- /dev/null +++ b/res/edc/widgets/progressbar.edc @@ -0,0 +1,372 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +group { + name: "elm/progressbar/horizontal/volume_bar"; + parts { + part { + name: "elm.background.progressbar"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + } + } + part { + name: "elm.swallow.bar"; + type: SWALLOW; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: 0 28; + max: 99999 28; + rel1 { + to_x: "elm.text"; + to_y: "elm.background.progressbar"; + relative: 1.0 0.0; + } + rel2 { + to: "elm.background.progressbar"; + } + } + } + part { + name: "elm.swallow.content"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + align: 0.0 0.5; + rel1 { + to_y: "elm.background.progressbar"; + } + rel2 { + relative: 0.0 1.0; + to_y: "elm.background.progressbar"; + } + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + aspect: 1.0 1.0; + aspect_preference: VERTICAL; + } + } + part { + name: "elm.text"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + visible: 0; + fixed: 1 1; + align: 0.0 0.5; + rel1.to_x: "elm.swallow.content"; + rel1.relative: 1.0 0.0; + rel2.to_x: "elm.swallow.content"; + rel2.relative: 1.0 1.0; + color: 0 0 0 255; + text { + font: "Sans,Edje-Vera"; + size: 10; + min: 0 0; + align: 0.0 0.5; + } + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + text.min: 1 1; + text.ellipsis: -1; + } + } + part { + name: "background"; + type: RECT; + mouse_events: 0; + clip_to: "elm.background.progressbar"; + scale: 1; + description { + state: "default" 0.0; + min: 0 14; + max: 9999 14; + rel1.to: "elm.swallow.bar"; + rel2.to: "elm.swallow.bar"; + color, 255 255 255 25; + } + } + part { + name: "elm.text.status"; + type: TEXT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + fixed: 1 1; + visible: 0; + rel1 { + to: "background"; + relative: 0.5 0.5; + } + rel2 { + to: "background"; + relative: 0.5 0.5; + } + text { + font: "Sans:style=Bold,Edje-Vera-Bold"; + size: 10; + min: 1 1; + ellipsis: -1; + align: 0.5 0.0; + } + color: 0 0 0 255; + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + text.min: 0 0; + } + } + part { + name: "elm.progress.progressbar"; + type, RECT; + mouse_events: 0; + scale: 1; + clip_to: "elm.background.progressbar"; + description { + state: "default" 0.0; + min: 0 14; + max: 9999 14; + fixed: 1 1; + rel1.to: "elm.swallow.bar"; + rel2 { + to_y: "elm.swallow.bar"; + to_x: "elm.cur.progressbar"; + } + color, 147 170 0 255; + } + description { + state: "invert" 0.0; + inherit: "default" 0.0; + rel1 { + to_y: "elm.swallow.bar"; + to_x: "elm.cur.progressbar"; + } + rel2.to: "elm.swallow.bar"; + } + description { + state: "state_begin" 0.0; + inherit: "default" 0.0; + rel1.to: "elm.swallow.bar"; + rel2 { + to: "elm.swallow.bar"; + relative: 0.1 1.0; + } + } + description { + state: "state_end" 0.0; + inherit: "default" 0.0; + rel1 { + to: "elm.swallow.bar"; + relative: 0.9 0.0; + } + rel2.to: "elm.swallow.bar"; + } + } + part { + name: "text-bar"; + type: TEXT; + mouse_events: 0; + clip_to: "progress-rect"; + effect: SOFT_SHADOW; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 0.0; + fixed: 1 1; + visible: 0; + rel1.to: "elm.text.status"; + rel2.to: "elm.text.status"; + text { + text_source: "elm.text.status"; + font: "Sans:style=Bold,Edje-Vera-Bold"; + size: 10; + min: 1 1; + ellipsis: -1; + align: 0.0 0.0; + } + color: 224 224 224 255; + color3: 0 0 0 64; + } + description { + state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + text.min: 0 0; + } + } + part { + name: "elm.cur.progressbar"; + mouse_events: 0; + scale: 1; + dragable { + confine: "background"; + x: 1 1 1; + y: 0 0 0; + } + description { + state: "default" 0.0; + min: 0 28; + fixed: 1 1; + visible: 0; + rel1 { + to: "background"; + relative: 0 0; + } + rel2.to: "background"; + } + } + part { + name: "progress-rect"; + type: RECT; + mouse_events: 0; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "elm.progress.progressbar"; + rel2.to: "elm.progress.progressbar"; + } + } + } + programs { + program { + name: "label_show"; + signal: "elm,state,text,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.text"; + } + program { + name: "label_hide"; + signal: "elm,state,text,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.text"; + } + program { + name: "icon_show"; + signal: "elm,state,icon,visible"; + source: "elm"; + action: STATE_SET "visible" 0.0; + target: "elm.swallow.content"; + } + program { + name: "icon_hide"; + signal: "elm,state,icon,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.swallow.content"; + } + program { + name: "units_show"; + signal: "elm,state,units,visible"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "text-bar"; + target: "elm.text.status"; + } + program { + name: "units_hide"; + signal: "elm,state,units,hidden"; + source: "elm"; + action: STATE_SET "hidden" 0.0; + target: "text-bar"; + target: "elm.text.status"; + } + program { + name: "slide_to_end"; + action: STATE_SET "state_end" 0.0; + transition: LINEAR 0.5; + target: "elm.progress.progressbar"; + after: "slide_to_begin"; + } + program { + name: "slide_to_begin"; + signal: "elm,state,slide,begin"; + action: STATE_SET "state_begin" 0.0; + target: "elm.progress.progressbar"; + transition: LINEAR 0.5; + after: "slide_to_end"; + } + program { + name: "start_pulse"; + signal: "elm,state,pulse,start"; + source: "elm"; + after: "slide_to_end"; + } + program { + name: "stop_pulse"; + signal: "elm,state,pulse,stop"; + source: "elm"; + action: ACTION_STOP; + target: "slide_to_begin"; + target: "slide_to_end"; + target: "start_pulse"; + after: "state_pulse"; + } + program { + name: "state_pulse"; + signal: "elm,state,pulse"; source: "elm"; + action: STATE_SET "state_begin" 0.0; + target: "elm.progress.progressbar"; + after: "units_hide"; + } + program { + name: "state_fraction"; + signal: "elm,state,fraction"; + source: "elm"; + action: ACTION_STOP; + target: "slide_to_begin"; + target: "slide_to_end"; + target: "start_pulse"; + action: STATE_SET "default" 0.0; + target: "elm.progress.progressbar"; + } + program { + name: "set_invert_on"; + signal: "elm,state,inverted,on"; + source: "elm"; + action: STATE_SET "invert" 0.0; + target: "elm.progress.progressbar"; + } + program { + name: "set_invert_off"; + signal: "elm,state,inverted,off"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "elm.progress.progressbar"; + } + } +} + diff --git a/res/edc/widgets/slider.edc b/res/edc/widgets/slider.edc new file mode 100644 index 0000000..ddd9455 --- /dev/null +++ b/res/edc/widgets/slider.edc @@ -0,0 +1,309 @@ +group { name: "elm/slider/horizontal/progress_slider"; + parts { + part { name: "background"; type: RECT; + scale: 1; + description { state: "default" 0.0; + min: 0 8; + max: 1920 8; + color: 255 255 255 64; + } + } + part { name: "bg"; type: RECT; + description { state: "default" 0.0; + rel1 { + to: "pad.left"; + relative: 1 0.5; + } + rel2{ + to: "pad.right"; + relative: 0 0.5; + } + } + } + part { name: "pad.left"; type: SPACER; + scale: 1; + description { state: "default" 0.0; + min: 0 0; + max: 0 0; + align: 0 0.5; + } + } + part { name: "pad.right"; type: SPACER; + scale: 1; + description { state: "default" 0.0; + min: 0 0; + max: 0 0; + align: 1 0.5; + } + } + part { name: "base"; + type: RECT; + scale: 1; + description { state: "default" 0.0; + rel1.to: "background"; + rel2.to: "background"; + min: 0 8; + max: 99999 8; + fixed: 0 1; + color: 255 255 255 64; + } + } + part { name: "glow"; mouse_events: 0; + scale: 1; + type: RECT; + description { state: "default" 0.0; + rel1.to: "base"; + rel2 { + relative: 0.5 1.0; + to_x: "button"; + to_y: "base"; + } + min: 0 8; + max: 99999 8; + fixed: 0 1; + align: 0.0 0.5; + color: 255 255 255 255; + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + color: 147 170 0 255; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 32 9 21 64; + } + } + part { name: "pad.align"; type: SPACER; mouse_events: 0; + description { state: "default" 0.0; + fixed: 1 1; + rel1.to: "elm.dragable.slider"; + rel2.to: "elm.dragable.slider"; + align: 0.0 1.0; + min: 10 1; + max: 10 1; + } + } + part { name: "clip"; type: RECT; + scale: 1; + description { state: "default" 0.0; + color: 255 255 255 0; + min: 76 40; + max: 76 40; + fixed: 1 1; + rel1 { + to: "elm.dragable.slider"; + to_y: "bg"; + } + rel2{ + to: "elm.dragable.slider"; + to_y: "bg"; + } + } + } + part { name: "button"; type: GROUP; mouse_events: 1; + source: "elm/slider/horizontal/progress_indicator/default"; + description { state: "default" 0.0; + fixed: 1 1; + rel1 { + to: "elm.dragable.slider"; + to_y: "bg"; + } + rel2{ + to: "elm.dragable.slider"; + to_y: "bg"; + } + align: 0.0 0.5; + } + description { state: "hidden" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { name: "elm.swallow.bar"; type: SWALLOW; + repeat_events: 1; + description { state: "default" 0.0; + rel1.to_y: "bg"; + rel2.to_y: "bg"; + fixed: 1 1; + min: 30 30; + } + } + part { name: "elm.dragable.slider"; type: RECT; mouse_events: 0; + scale: 1; + dragable.x: 1 1 0; + dragable.y: 0 0 0; + dragable.confine: "bg"; + description { state: "default" 0.0; + min: 21 0; + max: 21 0; + rel1 { + to_x: "bg"; + relative: 0 0.5; + } + rel2 { + to_x: "bg"; + relative: 1 0.5; + } + color: 0 0 0 0; + fixed: 1 1; + } + } + part { name: "elm.track.slider"; type: SWALLOW; mouse_events: 0; + description { state: "default" 0.0; + max: 21 0; + rel1.to: "elm.dragable.slider"; + rel2.to: "elm.dragable.slider"; + } + } + part { name: "event"; type: RECT; + description { state: "default" 0.0; + color: 0 0 0 0; + visible: 0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + + programs { + program { name: "startup"; + signal: "load"; + source: ""; + script { + emit("highlight,hide", "elm"); + } + } + program { name: "focuse_in"; + signal: "elm,action,focus"; + source: "elm"; + script { + set_state(PART:"glow", "focused", 0.0); + emit("highlight,show", "elm"); + } + } + program { name: "focuse_out"; + signal: "elm,action,unfocus"; + source: "elm"; + script { + set_state(PART:"glow", "default", 0.0); + emit("highlight,hide", "elm"); + } + } + program { name: "text_visible"; + signal: "elm,state,text,visible"; + source: "elm"; + action: STATE_SET "active" 0.0; + target: "bg"; + } + program { name: "text_hidden"; + signal: "elm,state,text,hidden"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + } + program { name: "disable"; + signal: "elm,state,disabled"; + source: "elm"; + action: STATE_SET "disabled" 0.0; + target: "event"; + target: "glow"; + target: "base"; + after: "disable_ind"; + } + program { name: "enable"; + signal: "elm,state,enabled"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "event"; + target: "glow"; + target: "base"; + after: "enable_ind"; + } + program { name: "enable_ind"; + action: SIGNAL_EMIT "highlight,hide" "elm"; + } + program { name: "disable_ind"; + action: SIGNAL_EMIT "highlight,disabled" "elm"; + } + } +} + +group { name: "elm/slider/horizontal/progress_indicator/default"; + alias: "elm/slider/horizontal/popup/default"; + images{ + image: IMAGE_SLIDER_NOB_NORMAL COMP; + image: IMAGE_SLIDER_NOB_FOCUS COMP; + } + parts{ + part { name: "knob"; + repeat_events: 1; + scale: 1; + description { state: "default" 0.0; + image.normal: IMAGE_SLIDER_NOB_NORMAL; + min: 30 30; + max: 30 30; + align: 0.5 0.5; + fixed: 1 1; + visible: 0; + } + description { state: "unfocused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + min: 36 36; + max: 36 36; + image.normal: IMAGE_SLIDER_NOB_FOCUS; + visible: 1; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + image.normal: IMAGE_SLIDER_NOB_NORMAL; + visible: 1; + } + } + } + programs { + program { name: "highlight_show"; + signal: "highlight,show"; + source: "elm"; + script { + set_state(PART:"knob", "focused", 0.0); + } + } + program { name: "highlight_hide"; + signal: "highlight,hide"; + source: "elm"; + script { + set_state(PART:"knob", "unfocused", 0.0); + } + } + program { name: "enable"; + signal: "highlight,enabled"; + source: "elm"; + script { + set_state(PART:"knob", "default", 0.0); + } + } + program { name: "disable"; + signal: "highlight,disabled"; + source: "elm"; + script { + set_state(PART:"knob", "disabled", 0.0); + } + } + /* These events are coming from elementary if alias is popup, otherwise + default nob is popping up + program { name: "popup_show"; + signal: "popup,show"; + source: "elm"; + } + program { name: "popup_hide"; + signal: "popup,hide"; + source: "elm"; + }*/ + } +} diff --git a/res/edc/widgets/style.edc b/res/edc/widgets/style.edc new file mode 100644 index 0000000..f6c752e --- /dev/null +++ b/res/edc/widgets/style.edc @@ -0,0 +1,4 @@ + +#define FONT_STYLE_SANS_BOLD "TizenSans:style=Bold" +#define FONT_STYLE_SANS_REGULAR "TizenSans" +#define FONT_STYLE_SANS_MEDIUM "TizenSans:style=Medium" diff --git a/res/images/menubtn.png b/res/images/menubtn.png new file mode 100644 index 0000000000000000000000000000000000000000..9fb8bda1cdd8e4e9bcc33228ca0c556add4b4343 GIT binary patch literal 20787 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 +#include +#include +#include "define.h" +#include "i18n.h" +#include "control.h" + +#define MAX_CONTROL_BTNS 7 + +struct _event_cb { + void (*func)(void *data, const char *ev); + void *data; +}; + +struct control_data { + Evas_Object *base; + Evas_Object *focused; + Evas_Object *btn[MAX_CONTROL_BTNS]; + int btns; + struct _event_cb cb; +}; + +static void _event_callback(void *dt, Evas_Object *obj, + const char *emission, const char *source) +{ + struct control_data *data; + + if (!dt) + return; + + data = dt; + + data->cb.func(data->cb.data, source); +} + +static void _btn_mousemove(void *dt, Evas *e, Evas_Object *obj, void *ei) +{ + if (!elm_object_focus_get(obj)) + elm_object_focus_set(obj, EINA_TRUE); +} + +static void _btn_clicked(void *dt, Evas_Object *obj, void *ev) +{ + elm_object_signal_emit(obj, SIG_BTN_ANI_START, ""); +} + +static void _set_focus_directions(Evas_Object **btn, int count) +{ + Evas_Object *obj; + int i; + + for (i = 0; i < count; i++) { + if (i == count - 1) + obj = btn[0]; + else + obj = btn[i + 1]; + + elm_object_focus_next_object_set(btn[i], obj, ELM_FOCUS_RIGHT); + + if (i == 0) + obj = btn[count - 1]; + else + obj = btn[i - 1]; + + elm_object_focus_next_object_set(btn[i], obj, ELM_FOCUS_LEFT); + } +} + +static inline Evas_Object *_add_button(Evas_Object *base, const char *style) +{ + Evas_Object *btn; + + btn = elm_button_add(base); + if (!btn) + return NULL; + + elm_object_style_set(btn, style); + evas_object_show(btn); + + return btn; +} + +static int _add_controls(struct control_data *data, + const char **btns, int count) +{ + int i, j; + char buf[32]; + + for (i = 0; i < count; i++) { + snprintf(buf, sizeof(buf), "video_btn_%s", btns[i]); + data->btn[i] = _add_button(data->base, buf); + if (!data->btn[i]) { + for (j = 0; j < i; j++) + data->btn[j] = NULL; + return -1; + } + + snprintf(buf, sizeof(buf), "part_btn%d", i); + elm_object_part_content_set(data->base, + buf, data->btn[i]); + + /* FIXME: disable setting button temporary */ + if (i == count - 1) { + elm_object_focus_allow_set(data->btn[i], EINA_FALSE); + break; + } + + evas_object_smart_callback_add(data->btn[i], SIG_CLICKED, + _btn_clicked, data); + elm_object_signal_callback_add(data->btn[i], + SIG_BTN_ANI_FIN, btns[i], + _event_callback, data); + evas_object_event_callback_add(data->btn[i], + EVAS_CALLBACK_MOUSE_MOVE, + _btn_mousemove, data); + + elm_object_focus_next_object_set(data->btn[i], + data->btn[i], ELM_FOCUS_DOWN); + + data->btns++; + } + + return 0; +} + +Eina_Bool control_add_bar(struct control_data *data, + Evas_Object *base, const char **btns, int count) +{ + int r; + + if (!data || !base || !btns) + return EINA_FALSE; + + data->base = base; + data->btns = 0; + + r = _add_controls(data, btns, count); + if (r < 0) + return EINA_FALSE; + + _set_focus_directions(data->btn, data->btns); + + return EINA_TRUE; +} + +void control_handler_init(struct control_data *data, + void (*func)(void *, const char *), void *param) +{ + if (!data || !func) + return; + + data->cb.func = func; + data->cb.data = param; +} + +void control_focus_set(struct control_data *data, int id, Eina_Bool foc) +{ + if (!data) + return; + + elm_object_focus_set(data->btn[id], foc); +} + +void control_signal_emit(struct control_data *data, int id, + const char *emission, const char *source) +{ + if (!data) + return; + + elm_object_signal_emit(data->btn[id], emission, source); +} + +void control_hide(struct control_data *data) +{ + int i; + + for (i = 0; i < data->btns; i++) { + evas_object_freeze_events_set(data->btn[i], EINA_TRUE); + elm_object_focus_allow_set(data->btn[i], EINA_FALSE); + } +} + +void control_show(struct control_data *data) +{ + int i; + + for (i = 0; i < data->btns; i++) { + evas_object_freeze_events_set(data->btn[i], EINA_FALSE); + elm_object_focus_allow_set(data->btn[i], EINA_TRUE); + } +} + +void control_fini(struct control_data *data) +{ + if (!data) + return; + + free(data); +} + +struct control_data *control_init(void) +{ + struct control_data *data; + + data = calloc(1, sizeof(*data)); + if (!data) { + _ERR("allocation fail"); + return NULL; + } + + return data; +} diff --git a/src/main.c b/src/main.c new file mode 100644 index 0000000..cf58408 --- /dev/null +++ b/src/main.c @@ -0,0 +1,184 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include "define.h" +#include "view_player.h" +#include "i18n.h" + +#define PARAM_URI "uri" +#define PARAM_PLAYLIST_ID "playlist_id" + +struct _appdata { + const char *name; + Evas_Object *win; + + struct viewdata *vdata; +}; + +static Evas_Object *_add_win(const char *name) +{ + Evas_Object *win; + Evas_Object *obj; + Evas *evas; + + if (!name) + return NULL; + + win = elm_win_add(NULL, name, ELM_WIN_BASIC); + if (!win) + return NULL; + + elm_win_title_set(win, "Video player"); + + evas_object_show(win); + + evas = evas_object_evas_get(win); + obj = evas_object_rectangle_add(evas); + evas_object_color_set(obj, 0, 0, 0, 0); + evas_object_render_op_set(obj, EVAS_RENDER_COPY); + elm_win_resize_object_add(win, obj); + evas_object_show(obj); + + return win; +} + +static bool _create(void *user_data) +{ + struct _appdata *ad; + Evas_Object *win; + + if (!user_data) + return false; + + ad = user_data; + + elm_theme_overlay_add(NULL, THEMEFILE); + elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK); + + win = _add_win(ad->name); + if (!win) + return false; + + ad->win = win; + + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + elm_win_focus_highlight_style_set(win, STYLE_INVISIBLE); + + return true; +} + +static void _terminate(void *user_data) +{ + struct _appdata *ad; + + if (!user_data) + return; + + ad = user_data; + + view_player_fini(ad->vdata); +} + +static void _pause(void *user_data) +{ + struct _appdata *ad; + + if (!user_data) { + _ERR("App Data is NULL"); + return; + } + + ad = user_data; + if (!ad->vdata) + return; + + view_player_pause(ad->vdata); +} + +static void _resume(void *user_data) +{ + struct _appdata *ad; + + if (!user_data) { + _ERR("App Data is NULL"); + return; + } + + ad = user_data; + if (!ad->vdata) + return; + + view_player_resume(ad->vdata); +} + +static void _service(service_h service, void *user_data) +{ + struct _appdata *ad; + struct viewdata *vdata; + char *uri; + char *playlist_id; + int r; + + if (!user_data) + return; + + ad = user_data; + + 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); + if (r != SERVICE_ERROR_NONE) + playlist_id = NULL; + + vdata = view_player_init(ad->win, uri, playlist_id); + + free(uri); + free(playlist_id); + + if (!vdata) + elm_exit(); + + if (view_player_create(vdata) == -1) + elm_exit(); + + ad->vdata = vdata; +} + +int main(int argc, char **argv) +{ + struct _appdata ad; + app_event_callback_s cbs = { + .create = _create, + .terminate = _terminate, + .pause = _pause, + .resume = _resume, + .service = _service, + }; + + memset(&ad, 0x00, sizeof(ad)); + ad.name = PACKAGE; + + i18n_init(); + + app_efl_main(&argc, &argv, &cbs, &ad); + + return 0; +} diff --git a/src/mediadata.c b/src/mediadata.c new file mode 100644 index 0000000..3395a52 --- /dev/null +++ b/src/mediadata.c @@ -0,0 +1,199 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#include +#include +#include +#include "define.h" +#include "mediadata.h" + +struct mediadata { + char *name; + char *path; + time_t modified; + struct videodata *video_info; +}; + +static int g_ref_count; + +int mediadata_init(void) +{ + int r; + + if (g_ref_count > 0) { + g_ref_count++; + return -1; + } + + r = media_content_connect(); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("Media Content Connect Failed"); + return -1; + } + g_ref_count++; + + return 0; +} + +int mediadata_fini(void) +{ + int r; + + if (g_ref_count <= 0) + return -1; + + g_ref_count--; + + if (g_ref_count == 0) { + r = media_content_disconnect(); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("Media Content Connect Failed"); + return -1; + } + } + + return 0; +} + +static void _free_mediadata_item(struct mediadata *md) +{ + free(md->name); + free(md->path); + + videodata_destroy(md->video_info); + + free(md); +} + +static bool _get_each_media_info(media_info_h media_h, void *dt) +{ + struct mediadata *md; + int r; + + md = *((struct mediadata **)dt); + + r = media_info_get_display_name(media_h, &(md->name)); + if (r != MEDIA_CONTENT_ERROR_NONE) + goto error; + + r = media_info_get_file_path(media_h, &(md->path)); + if (r != MEDIA_CONTENT_ERROR_NONE) + goto error; + + r = media_info_get_modified_time(media_h, &(md->modified)); + if (r != MEDIA_CONTENT_ERROR_NONE) + goto error; + + md->video_info = videodata_create(media_h); + if (!md->video_info) + goto error; + + return true; + +error: + _free_mediadata_item(md); + return false; +} + +struct mediadata *mediadata_create(const char *path) +{ + filter_h filter; + struct mediadata *md; + char buf[1024]; + int r; + + r = media_filter_create(&filter); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("Media Filter Creation Failed"); + return NULL; + } + + snprintf(buf, sizeof(buf), "MEDIA_PATH = \"%s\"", path); + + r = media_filter_set_condition(filter, buf, + MEDIA_CONTENT_COLLATE_DEFAULT); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("Fail to set filter condition"); + media_filter_destroy(filter); + return NULL; + } + + md = calloc(1, sizeof(*md)); + if (!md) { + _ERR("allocation failed"); + return NULL; + } + + r = media_info_foreach_media_from_db(filter, + _get_each_media_info, &md); + if (r != MEDIA_CONTENT_ERROR_NONE) { + if (r == MEDIA_CONTENT_ERROR_DB_FAILED) + _ERR("MEDIA CONTENT ERROR DB FAILED"); + else if (r == MEDIA_CONTENT_ERROR_DB_BUSY) + _ERR("MEDIA CONTENT ERROR DB BUSY"); + else + _ERR("MEDIA CONTENT ERROR"); + + free(md); + media_filter_destroy(filter); + + return NULL; + } + + media_filter_destroy(filter); + + return md; +} + +void mediadata_destroy(struct mediadata *md) +{ + if (!md) + return; + + _free_mediadata_item(md); +} + +const char *mediadata_get_displayname(struct mediadata *md) +{ + if (!md) + return NULL; + + return md->name; +} + +const char *mediadata_get_filepath(struct mediadata *md) +{ + if (!md) + return NULL; + + return md->path; +} + +time_t mediadata_get_modifiedtime(struct mediadata *md) +{ + if (!md) + return -1; + + return md->modified; +} + +const struct videodata *mediadata_get_video_info(struct mediadata *md) +{ + if (!md) + return NULL; + + return md->video_info; +} diff --git a/src/playermgr.c b/src/playermgr.c new file mode 100644 index 0000000..f79b255 --- /dev/null +++ b/src/playermgr.c @@ -0,0 +1,491 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#include +#include +#include +#include "define.h" +#include "playermgr.h" + +#define SPEED_MAX 5.0 +#define SPEED_MIN -5.0 + +struct playermgr { + player_h player; + Evas_Object *win; + Eina_List *media_list; + float speed; + int display_mode; + int audio_effect; + int current; + int total; +}; + +static void _destroy_list(Eina_List *list) +{ + char *buf; + + if (!list) + return; + + EINA_LIST_FREE(list, buf) + free(buf); +} + +static Eina_List *_create_list(const char *playlist) +{ + Eina_List *list = NULL; + FILE *fp; + char buf[1024]; + + if (!playlist) + return NULL; + + fp = fopen(playlist, "r"); + if (!fp) + return NULL; + + while (fscanf(fp, "%s\n", buf) != EOF) + list = eina_list_append(list, strdup(buf)); + + fclose(fp); + + return list; +} + +static int _get_current(Eina_List *list, const char *path) +{ + Eina_List *l; + const char *filepath; + int cur; + + if (!list || !path) + return 0; + + cur = 0; + + EINA_LIST_FOREACH(list, l, filepath) { + if (!strcmp(filepath, path)) + break; + cur++; + } + + return cur; +} + +struct playermgr *playermgr_init(Evas_Object *win, + const char *path, const char *playlist) +{ + struct playermgr *mgr; + + mgr = calloc(1, sizeof(*mgr)); + if (!mgr) { + _ERR("Allocation fail"); + return NULL; + } + + mgr->win = win; + mgr->display_mode = E_FULL_SCREEN; + mgr->audio_effect = 0; + + mgr->media_list = _create_list(playlist); + if (!mgr->media_list) { + _ERR("play list is null"); + free(mgr); + return NULL; + } + + mgr->current = _get_current(mgr->media_list, path); + mgr->total = eina_list_count(mgr->media_list); + + if (player_create(&mgr->player) != PLAYER_ERROR_NONE) { + _ERR("PLAYER CREATION ERROR"); + free(mgr); + return NULL; + } + + + return mgr; +} + +static int _play_video(struct playermgr *mgr, const char *path) +{ + Ecore_X_Window xwin; + int r; + + if (player_set_uri(mgr->player, path) != PLAYER_ERROR_NONE) { + _ERR("PLAYER SET URI ERROR"); + return -1; + } + + xwin = elm_win_xwindow_get(mgr->win); + r = player_set_display(mgr->player, PLAYER_DISPLAY_TYPE_X11, + GET_DISPLAY(xwin)); + if (r != PLAYER_ERROR_NONE) { + _ERR("SETTING DISPLAY ERROR"); + return -1; + } + + playermgr_set_display_mode(mgr, mgr->display_mode); + + r = player_prepare(mgr->player); + if (r != PLAYER_ERROR_NONE) { + if (r == PLAYER_ERROR_NOT_SUPPORTED_FILE) + _ERR("PLAYER PREPARE ERROR NOT SUPPORTED FILE %d", r); + else if (r == PLAYER_ERROR_INVALID_URI) + _ERR("PLAYER PREPARE ERROR INVALID URI %d", r); + else + _ERR("PLAYER PREPARE ERROR"); + + return -1; + } + + r = player_start(mgr->player); + if (r != PLAYER_ERROR_NONE) { + _ERR("PLAYER START ERROR"); + return -1; + } + + playermgr_set_audio_effect(mgr, mgr->audio_effect); + + return 0; +} + +int playermgr_stop_video(struct playermgr *mgr) +{ + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + player_pause(mgr->player); + player_stop(mgr->player); + player_unprepare(mgr->player); + + return 0; +} + +int playermgr_play_video(struct playermgr *mgr) +{ + const char *path; + int r; + + if (!mgr || !mgr->media_list) { + _ERR("invalid parameter"); + return -1; + } + + r = playermgr_stop_video(mgr); + if (r < 0) + return r; + + path = playermgr_get_video_path(mgr); + r = _play_video(mgr, path); + + return r; +} + +void playermgr_set_prev_video(struct playermgr *mgr) +{ + if (!mgr) { + _ERR("invalid parameter"); + return; + } + + if (mgr->current == 0) + mgr->current = mgr->total - 1; + else + mgr->current--; +} + +Eina_Bool playermgr_set_next_video(struct playermgr *mgr, Eina_Bool repeat) +{ + if (!mgr) { + _ERR("invalid parameter"); + return EINA_FALSE; + } + + if (mgr->current == mgr->total - 1) { + mgr->current = 0; + + if (!repeat) + return EINA_FALSE; + } else { + mgr->current++; + } + + return EINA_TRUE; +} + +const char *playermgr_get_video_path(struct playermgr *mgr) +{ + if (!mgr || !mgr->media_list) { + _ERR("invalid parameter"); + return NULL; + } + + return eina_list_nth(mgr->media_list, mgr->current); +} + +void playermgr_fini(struct playermgr *mgr) +{ + if (!mgr) + return; + + if (mgr->media_list) + _destroy_list(mgr->media_list); + + if (mgr->player) { + player_pause(mgr->player); + player_stop(mgr->player); + player_unprepare(mgr->player); + player_destroy(mgr->player); + } + + free(mgr); +} + +int playermgr_pause(struct playermgr *mgr) +{ + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + if (player_pause(mgr->player) != PLAYER_ERROR_NONE) { + _ERR("Player pause error"); + return -1; + } + + return 0; +} + +int playermgr_resume(struct playermgr *mgr) +{ + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + if (player_start(mgr->player) != PLAYER_ERROR_NONE) { + _ERR("Player resume error"); + return -1; + } + + return 0; +} + +int playermgr_get_state(struct playermgr *mgr, player_state_e *state) +{ + int r; + + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + r = player_get_state(mgr->player, state); + if (r != PLAYER_ERROR_NONE) { + _ERR("Player get state error"); + return -1; + } + + return 0; +} + +int playermgr_get_position(struct playermgr *mgr, int *position) +{ + int r; + + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + /* deprecated */ + r = player_get_position(mgr->player, position); + if (r != PLAYER_ERROR_NONE) { + _ERR("Player get position error"); + return -1; + } + + return 0; +} + +int playermgr_seek(struct playermgr *mgr, + int sec, player_seek_completed_cb cb, void *data) +{ + int r; + + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + /* deprecated */ + r = player_seek(mgr->player, sec, false, cb, data); + if (r != PLAYER_ERROR_NONE) { + _ERR("Player seek error"); + return -1; + } + + return 0; +} + +int playermgr_set_position(struct playermgr *mgr, + int sec, player_seek_completed_cb cb, void *data) +{ + int r; + + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + /* deprecated */ + r = player_set_position(mgr->player, sec, cb, data); + if (r != PLAYER_ERROR_NONE) { + _ERR("Player set position error"); + return -1; + } + + return 0; +} + +int playermgr_set_playback_rate(struct playermgr *mgr, float speed) +{ + int r; + + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + if (speed > SPEED_MAX) + speed = SPEED_MAX; + else if (speed < SPEED_MIN) + speed = SPEED_MIN; + + r = player_set_playback_rate(mgr->player, speed); + if (r != PLAYER_ERROR_NONE) { + _ERR("Player set playback error"); + return -1; + } + + mgr->speed = speed; + + return 0; +} + +int playermgr_get_playback_rate(struct playermgr *mgr, float *speed) +{ + if (!mgr) { + _ERR("invalid parameter"); + return -1; + } + + *speed = mgr->speed; + + return 0; +} + +int playermgr_set_looping(struct playermgr *mgr, bool value) +{ + int r; + + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + r = player_set_looping(mgr->player, value); + if (r != PLAYER_ERROR_NONE) { + _ERR("Player set looping error"); + return -1; + } + + return 0; +} + +int playermgr_set_audio_effect(struct playermgr *mgr, int value) +{ + /* audio_effect not supported, just return 0 */ + mgr->audio_effect = value; + + return 0; +} + +int playermgr_set_display_mode(struct playermgr *mgr, int value) +{ + int r; + int mode; + + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + switch (value) { + case E_FULL_SCREEN: + mode = PLAYER_DISPLAY_MODE_FULL_SCREEN; + break; + case E_ORIGINAL: + mode = PLAYER_DISPLAY_MODE_ORIGIN_SIZE; + break; + default: + _ERR("Invalid value"); + return -1; + } + + r = player_set_display_mode(mgr->player, mode); + if (r != PLAYER_ERROR_NONE) { + _ERR("Player display mode set error"); + return -1; + } + + mgr->display_mode = value; + + return 0; +} + +int playermgr_set_completed_cb(struct playermgr *mgr, + player_completed_cb cb, void *data) +{ + int r; + + if (!mgr || !mgr->player) { + _ERR("invalid parameter"); + return -1; + } + + r = player_set_completed_cb(mgr->player, cb, data); + if (r != PLAYER_ERROR_NONE) { + _ERR("Player set completed cb error"); + return -1; + } + + return 0; +} + +void playermgr_get_play_count(struct playermgr *mgr, char *str, int len) +{ + if (!mgr) { + _ERR("invalid parameter"); + return; + } + + snprintf(str, len, "%d/%d", mgr->current + 1, mgr->total); +} diff --git a/src/slider.c b/src/slider.c new file mode 100644 index 0000000..f608ce1 --- /dev/null +++ b/src/slider.c @@ -0,0 +1,268 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include "define.h" +#include "playermgr.h" +#include "slider.h" + +#define TIME_STR_START "00:00:00" +#define TIME_INTERVAL 0.1 +#define SLIDER_STEP 0.05 + +struct slider_data { + Evas_Object *base; + Evas_Object *slider; + Ecore_Timer *timer; + struct playermgr *player; +}; + +static void _get_timestr(char *str, int size, unsigned int ms) +{ + int sec; + + sec = ms / 1000; + + snprintf(str, size, "%02d:%02d:%02d", + sec / 3600, (sec % 3600) / 60, sec % 60); +} + +static void _slider_btn_mousemove(void *dt, Evas *e, Evas_Object *obj, void *ei) +{ + if (!obj) + return; + + if (!elm_object_focus_get(obj)) + elm_object_focus_set(obj, EINA_TRUE); +} + +static void _slider_seek_completed(void *dt) +{ + struct slider_data *data; + char str[32]; + int pos, r; + + if (!dt) + return; + + data = 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); +} + +static void _slider_value_changed(void *dt, Evas_Object *obj, void *ev) +{ + struct slider_data *data; + int v, r; + + if (!dt) + return; + + data = dt; + + slider_pause(data); + + v = elm_slider_value_get(obj); + r = playermgr_set_position(data->player, + v, _slider_seek_completed, data); + if (r < 0) + slider_resume(data); +} + +static void _slider_focused(void *dt, Evas_Object *obj, void *ev) +{ + struct slider_data *data; + + if (!dt) + return; + + data = dt; + + elm_object_signal_emit(data->base, SIG_SLIDER_FOCUS, ""); +} + +static void _slider_unfocused(void *dt, Evas_Object *obj, void *ev) +{ + struct slider_data *data; + + if (!dt) + return; + + data = dt; + + elm_object_signal_emit(data->base, SIG_SLIDER_UNFOCUS, ""); +} + +static Eina_Bool _slider_timer_cb(void *dt) +{ + struct slider_data *data; + int pos, r; + char str[32]; + + if (!dt) + return ECORE_CALLBACK_CANCEL; + + data = dt; + + if (!data->player) + goto error; + + r = playermgr_get_position(data->player, &pos); + if (r < 0) + goto error; + + elm_slider_value_set(data->slider, pos); + + _get_timestr(str, sizeof(str), pos); + elm_object_part_text_set(data->base, PART_CURTIME_TEXT, str); + + return ECORE_CALLBACK_RENEW; + +error: + data->timer = NULL; + + return ECORE_CALLBACK_CANCEL; +} + +static void _slider_set_timer(struct slider_data *data) +{ + if (data->timer) + ecore_timer_reset(data->timer); + else + data->timer = ecore_timer_add(TIME_INTERVAL, + _slider_timer_cb, data); +} + +void slider_pause(struct slider_data *data) +{ + if (!data) + return; + + if (data->timer) + ecore_timer_freeze(data->timer); +} + +void slider_resume(struct slider_data *data) +{ + if (!data) + return; + + if (data->timer) + ecore_timer_thaw(data->timer); +} + +void slider_reset(struct slider_data *data, int duration) +{ + char str[32]; + + if (!data) + return; + + ecore_timer_del(data->timer); + data->timer = ecore_timer_add(TIME_INTERVAL, _slider_timer_cb, data); + + elm_slider_value_set(data->slider, 0); + elm_slider_min_max_set(data->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); +} + +Eina_Bool slider_add_bar(struct slider_data *data, Evas_Object *base, + struct playermgr *player) +{ + Evas_Object *slider; + + if (!data || !base) { + _ERR("invalid parameter"); + return EINA_FALSE; + } + + if (data->slider) { + _slider_set_timer(data); + return EINA_TRUE; + } + + slider = elm_slider_add(base); + if (!slider) { + _ERR("failed to add slider"); + return EINA_FALSE; + } + + elm_slider_indicator_show_set(slider, EINA_FALSE); + 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); + + evas_object_event_callback_add(slider, + EVAS_CALLBACK_MOUSE_MOVE, + _slider_btn_mousemove, data); + evas_object_smart_callback_add(slider, SIG_FOCUSED, + _slider_focused, data); + evas_object_smart_callback_add(slider, SIG_UNFOCUSED, + _slider_unfocused, data); + evas_object_smart_callback_add(slider, SIG_CHANGED, + _slider_value_changed, data); + + elm_object_part_content_set(base, PART_SLIDER, slider); + + data->base = base; + data->slider = slider; + data->player = player; + + if (player) + _slider_set_timer(data); + else + elm_object_focus_allow_set(slider, EINA_FALSE); + + return EINA_TRUE; +} + +void slider_fini(struct slider_data *data) +{ + if (!data) + return; + + ecore_timer_del(data->timer); + free(data); +} + +struct slider_data *slider_init(void) +{ + struct slider_data *data; + + data = calloc(1, sizeof(*data)); + if (!data) { + _ERR("allocation fail"); + return NULL; + } + + return data; +} diff --git a/src/timeout_handler.c b/src/timeout_handler.c new file mode 100644 index 0000000..65e5861 --- /dev/null +++ b/src/timeout_handler.c @@ -0,0 +1,161 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#include +#include +#include +#include +#include "timeout_handler.h" +#include "dbg.h" + +#define NUM_EVENT_HANDLERS 7 +#define VCONF_CURSOR_VISIBILITY_KEY "memory/window_system/input/cursor_visible" + +struct timeout_handler { + Eina_List *eventhandler_list; + Ecore_Timer *timer; + + timeout_event_cb event_cb; + void *event_data; + + timeout_event_cb timeout_cb; + void *timeout_data; + + double timeout; + int cursor; +}; + +static Eina_Bool _timer_cb(void *data) +{ + struct timeout_handler *handle; + + if (!data) + return EINA_FALSE; + + handle = data; + + handle->timeout_cb(handle->timeout_data, 0, NULL); + handle->timer = NULL; + + return EINA_FALSE; +} + +static Eina_Bool _event_occured(void *data, int type, void *event) +{ + struct timeout_handler *handle; + int visible; + + if (!data) + return ECORE_CALLBACK_PASS_ON; + + handle = data; + + vconf_get_int(VCONF_CURSOR_VISIBILITY_KEY, &visible); + if (handle->cursor && !visible) { + handle->cursor = visible; + return ECORE_CALLBACK_PASS_ON; + } + + handle->cursor = visible; + + if (type == ECORE_EVENT_KEY_UP || + type == ECORE_EVENT_MOUSE_MOVE) + handle->event_cb(handle->event_data, type, event); + + if (handle->timer) + ecore_timer_reset(handle->timer); + else + handle->timer = ecore_timer_add(handle->timeout, + _timer_cb, handle); + + return ECORE_CALLBACK_PASS_ON; +} + +void timeout_handler_reset(struct timeout_handler *handle) +{ + if (handle->timer) + ecore_timer_reset(handle->timer); + else + handle->timer = ecore_timer_add(handle->timeout, + _timer_cb, handle); +} + +struct timeout_handler *timeout_handler_init(double timeout, + timeout_event_cb timeout_cb, void *timeout_data, + timeout_event_cb event_cb, void *event_data) +{ + struct timeout_handler *handle; + Ecore_Event_Handler *event_handler; + int i; + int event_type[NUM_EVENT_HANDLERS] = { + ECORE_EVENT_KEY_UP, + ECORE_EVENT_MOUSE_BUTTON_DOWN, + ECORE_EVENT_MOUSE_BUTTON_UP, + ECORE_EVENT_MOUSE_MOVE, + ECORE_EVENT_MOUSE_WHEEL, + ECORE_EVENT_MOUSE_IN, + ECORE_EVENT_MOUSE_OUT + }; + + handle = calloc(1, sizeof(*handle)); + if (!handle) + return NULL; + + for (i = 0; i < NUM_EVENT_HANDLERS; i++) { + event_handler = ecore_event_handler_add( + event_type[i], _event_occured, handle); + if (!event_handler) + goto error; + + handle->eventhandler_list = eina_list_append( + handle->eventhandler_list, event_handler); + } + + handle->timer = ecore_timer_add(timeout, _timer_cb, handle); + if (!handle->timer) + goto error; + + handle->event_cb = event_cb; + handle->event_data = event_data; + handle->timeout_cb = timeout_cb; + handle->timeout_data = timeout_data; + handle->timeout = timeout; + + return handle; + +error: + timeout_handler_fini(handle); + + return NULL; +} + +void timeout_handler_fini(struct timeout_handler *handle) +{ + Ecore_Event_Handler *event_handler; + + if (!handle) + return; + + EINA_LIST_FREE(handle->eventhandler_list, event_handler) + ecore_event_handler_del(event_handler); + + if (handle->timer) { + ecore_timer_del(handle->timer); + handle->timer = NULL; + } + + free(handle); +} diff --git a/src/videodata.c b/src/videodata.c new file mode 100644 index 0000000..5e6c4dd --- /dev/null +++ b/src/videodata.c @@ -0,0 +1,120 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#include +#include +#include +#include "define.h" +#include "videodata.h" + +struct videodata { + int duration; + int position; + int width; + int height; +}; + +void videodata_destroy(struct videodata *video_info) +{ + free(video_info); + video_info = NULL; +} + +struct videodata *videodata_create(media_info_h media_h) +{ + int r; + struct videodata *video_info; + video_meta_h video_h; + + if (!media_h) + return NULL; + + r = media_info_get_video(media_h, &video_h); + if (r != MEDIA_CONTENT_ERROR_NONE || !video_h) { + _ERR("Media video handle fetch error"); + return NULL; + } + + video_info = calloc(1, sizeof(*video_info)); + if (!video_info) + goto error; + + r = video_meta_get_duration(video_h, &video_info->duration); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("video meta get duration error"); + goto error; + } + + r = video_meta_get_width(video_h, &video_info->width); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("video meta get width error"); + goto error; + } + + r = video_meta_get_height(video_h, &video_info->height); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("video meta get width error"); + goto error; + } + + r = video_meta_get_played_position(video_h, &video_info->position); + if (r != MEDIA_CONTENT_ERROR_NONE) { + _ERR("video meta get played position error"); + goto error; + } + + video_meta_destroy(video_h); + + return video_info; + +error: + video_meta_destroy(video_h); + videodata_destroy(video_info); + + return NULL; +} + +int videodata_get_duration(const struct videodata *video_info) +{ + if (!video_info) + return -1; + + return video_info->duration; +} + +int videodata_get_played_position(const struct videodata *video_info) +{ + if (!video_info) + return -1; + + return video_info->position; +} + +int videodata_get_width(const struct videodata *video_info) +{ + if (!video_info) + return -1; + + return video_info->width; +} + +int videodata_get_height(const struct videodata *video_info) +{ + if (!video_info) + return -1; + + return video_info->height; +} diff --git a/src/view_player.c b/src/view_player.c new file mode 100644 index 0000000..34f8663 --- /dev/null +++ b/src/view_player.c @@ -0,0 +1,753 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#include +#include +#include +#include +#include +#include "define.h" +#include "i18n.h" +#include "playermgr.h" +#include "timeout_handler.h" +#include "mediadata.h" +#include "control.h" +#include "volume.h" +#include "slider.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 const *_control_name[] = { + "prev", + "rew", + "playpause", + "ff", + "next", + "repeat", + "settings" +}; + +static int _speed[] = { + 0, + 2000, + 4000, + 8000 +}; + +typedef void (*btn_event_cb)(void *dt); + +struct viewdata { + Evas_Object *win; + Evas_Object *base; + + struct playermgr *player; + struct control_data *control; + struct volume_data *volume; + struct slider_data *slider; + + struct timeout_handler *timeout_handle; + bool view_hidden; + bool error; + + Ecore_Timer *drawanim_timer; + Ecore_Timer *ffrew_timer; + int duration; + int rew_speed; + int ff_speed; + int repeat; +}; + +enum _control_btn { + E_PREV_BTN = 0, + E_REW_BTN, + E_PLAYPAUSE_BTN, + E_FF_BTN, + E_NEXT_BTN, + E_REPEAT_BTN, + E_SETTINGS_BTN +}; + +enum _repeat_option { + E_REPEAT_ALL = 0, + E_REPEAT_ONE, + 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) +{ + Evas_Object *obj; + + obj = data->base; + + /* Title */ + elm_object_part_text_set(obj, PART_TITLETEXT, _(TEXT_NOVIDEO)); + + /* Created Time */ + elm_object_part_text_set(obj, PART_DATETEXT, _(TEXT_NODATE)); + + /* Source */ + elm_object_part_text_set(obj, PART_SOURCETEXT, _(TEXT_NOSOURCE)); + + /* Resolution */ + elm_object_part_text_set(obj, PART_RESOLUTIONTEXT, _(TEXT_NORES)); +} + +static int _update_info_bar(struct viewdata *data, struct mediadata *md) +{ + const char *name; + char buf[32]; + time_t video_time; + 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); + + /* Created Time */ + video_time = mediadata_get_modifiedtime(md); + + if (video_time > 0) { + localtime_r(&video_time, &tm); + strftime(buf, sizeof(buf), "%Y.%m.%d", &tm); + } else { + snprintf(buf, sizeof(buf), "%s", _(TEXT_NODATE)); + } + + elm_object_part_text_set(data->base, PART_DATETEXT, buf); + + /* Source */ + /* TODO: temporary, get actual values and set */ + elm_object_part_text_set(data->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); + + /* Resolution */ + vd = mediadata_get_video_info(md); + if (vd) { + snprintf(buf, sizeof(buf), "%dx%d", + videodata_get_width(vd), + videodata_get_height(vd)); + + data->duration = videodata_get_duration(vd); + } else { + snprintf(buf, sizeof(buf), "%s", _(TEXT_NORES)); + data->duration = 0; + } + + elm_object_part_text_set(data->base, PART_RESOLUTIONTEXT, buf); + + return 0; +} + +static int _play_video(struct viewdata *data) +{ + struct mediadata *md; + const char *path; + int r; + + r = playermgr_play_video(data->player); + if (r < 0) + return r; + + path = playermgr_get_video_path(data->player); + + md = mediadata_create(path); + if (md) { + _update_info_bar(data, md); + mediadata_destroy(md); + } + + slider_reset(data->slider, data->duration); + control_signal_emit(data->control, E_PLAYPAUSE_BTN, + SIG_SET_PAUSE, ""); + + if (data->view_hidden) { + _show_view(data); + timeout_handler_reset(data->timeout_handle); + } + + return 0; +} + +static Eina_Bool _ffrew_timer_cb(void *dt) +{ + struct viewdata *data; + int pos; + int r; + + if (!dt) + return ECORE_CALLBACK_CANCEL; + + data = 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; + } +} + +static void _start_ffrew_timer(struct viewdata *data) +{ + playermgr_pause(data->player); + slider_pause(data->slider); + + 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); + } + + 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 = 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) +{ + struct viewdata *data; + + if (!dt) + return; + + data = dt; + + data->rew_speed = SPEED_MIN; + + if (data->ff_speed == SPEED_MAX) + return; + + if (data->ff_speed == SPEED_MIN) + _start_ffrew_timer(data); + + data->ff_speed++; +} + +static void _prev_btn_clicked(void *dt) +{ + struct viewdata *data; + + if (!dt) + return; + + data = dt; + + _stop_ffrew_timer(data); + + playermgr_set_prev_video(data->player); + _play_video(data); +} + +static void _next_btn_clicked(void *dt) +{ + struct viewdata *data; + + if (!dt) + return; + + data = dt; + + _stop_ffrew_timer(data); + + playermgr_set_next_video(data->player, EINA_TRUE); + _play_video(data); +} + +static void _repeat_btn_clicked(void *dt) +{ + struct viewdata *data = dt; + + if (!data) + return; + + switch (data->repeat) { + case E_REPEAT_ALL: + data->repeat = E_REPEAT_ONE; + break; + case E_REPEAT_ONE: + data->repeat = E_REPEAT_NONE; + break; + case E_REPEAT_NONE: + data->repeat = E_REPEAT_ALL; + break; + default: + break; + } +} + +static void _settings_btn_clicked(void *dt) +{ + struct viewdata *data = dt; + + if (!data) + return; +} + +static void _playpause_btn_clicked(void *dt) +{ + struct viewdata *data; + player_state_e state; + int r; + + if (!dt) + return; + + data = dt; + + if (data->ff_speed || data->rew_speed) { + data->ff_speed = SPEED_MIN; + data->rew_speed = SPEED_MIN; + return; + } + + r = playermgr_get_state(data->player, &state); + if (r < 0) + return; + + switch (state) { + case PLAYER_STATE_PLAYING: + playermgr_pause(data->player); + slider_pause(data->slider); + break; + + case PLAYER_STATE_PAUSED: + playermgr_resume(data->player); + slider_resume(data->slider); + break; + default: + break; + } +} + +static void _control_event(void *dt, const char *ev) +{ + struct viewdata *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, + }; + int i; + + if (!dt || !ev) + return; + + data = dt; + + for (i = 0; i < CONTROL_BTNS; i++) { + if (!strcmp(_control_name[i], ev)) + cbs[i](data); + } +} + +static void _player_completed(void *dt) +{ + struct viewdata *data; + Eina_Bool r; + + if (!dt) + return; + + data = dt; + r = EINA_TRUE; + + if (data->repeat == E_REPEAT_NONE) + r = playermgr_set_next_video(data->player, EINA_FALSE); + else if (data->repeat == E_REPEAT_ALL) + r = playermgr_set_next_video(data->player, EINA_TRUE); + + if (!r) + elm_exit(); + + _play_video(data); +} + +static void _show_view_finish_cb(void *dt, Evas_Object *obj, + const char *emission, const char *source) +{ + struct viewdata *data; + + if (!dt) + return; + + data = dt; + + control_show(data->control); +} + +static void _show_view(struct viewdata *data) +{ + volume_hide_bar(data->volume); + + if (data->view_hidden) { + elm_object_signal_emit(data->base, SIG_SHOW_VIEW, ""); + data->view_hidden = false; + slider_resume(data->slider); + } +} + +static void _hide_view(struct viewdata *data) +{ + elm_object_signal_emit(data->base, SIG_HIDE_VIEW, ""); + data->view_hidden = true; + slider_pause(data->slider); + + control_hide(data->control); +} + +static void _timeout_event(void *dt, int type, void *ev) +{ + struct viewdata *data; + + if (!dt) + return; + + data = dt; + + if (!data->error) + _hide_view(data); +} + +static void _back_event(void *dt, Evas_Object *obj, void *ev) +{ + struct viewdata *data; + + if (!dt) + return; + + data = dt; + + if (data->view_hidden) + _show_view(data); + else + elm_exit(); +} + +static void _handle_volume_key(struct viewdata *data, enum volume_val val) +{ + if (!data->view_hidden) + _hide_view(data); + + volume_handle_key(data->volume, val); +} + +static void _ecore_event(void *dt, int type, void *ei) +{ + struct viewdata *data; + + if (!dt) + return; + + data = dt; + + if (type == ECORE_EVENT_KEY_UP) { + Evas_Event_Key_Up *ev; + + ev = ei; + if (!ev) + return; + + if (!strcmp(ev->keyname, KEY_VOLUMEUP)) + _handle_volume_key(data, E_VOLUME_UP); + else if (!strcmp(ev->keyname, KEY_VOLUMEDOWN)) + _handle_volume_key(data, E_VOLUME_DOWN); + else if (!strcmp(ev->keyname, KEY_MUTE)) + _handle_volume_key(data, E_VOLUME_MUTE); + else + _show_view(data); + } else if (type == ECORE_EVENT_MOUSE_MOVE) { + _show_view(data); + } +} + +static int _add_controls(struct viewdata *data) +{ + if (!control_add_bar(data->control, data->base, + _control_name, CONTROL_BTNS)) + return -1; + + data->rew_speed = 0; + data->ff_speed = 0; + data->repeat = E_REPEAT_ALL; + + control_handler_init(data->control, _control_event, data); + + if (!slider_add_bar(data->slider, data->base, data->player)) + return -1; + + if (!volume_add_bar(data->volume, data->win)) + return -1; + + data->timeout_handle = timeout_handler_init(TIMEOUT_VIDEOPLAYER, + _timeout_event, data, _ecore_event, data); + + eext_object_event_callback_add(data->base, + EEXT_CALLBACK_BACK, _back_event, data); + + if (!data->timeout_handle) + return -1; + + return 0; +} + +static Eina_Bool _drawanim_timer_cb(void *dt) +{ + struct viewdata *data; + + if (!dt) + return ECORE_CALLBACK_CANCEL; + + data = dt; + + elm_object_signal_emit(data->base, SIG_SHOW_VIEW, ""); + control_focus_set(data->control, E_PLAYPAUSE_BTN, EINA_TRUE); + + data->drawanim_timer = NULL; + + return ECORE_CALLBACK_CANCEL; +} + +int view_player_create(struct viewdata *data) +{ + Evas_Object *base; + + if (!data) { + _ERR("invalid parameter"); + return -1; + } + + /* Create UI */ + base = elm_layout_add(data->win); + if (!base) + goto error; + + data->base = base; + + if (!elm_layout_file_set(base, EDJEFILE, GRP_VIDEO_PLAYER)) + goto error; + + if (_add_controls(data) < 0) + goto error; + + evas_object_size_hint_weight_set(base, + EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + elm_win_resize_object_add(data->win, base); + + evas_object_show(base); + + elm_object_focus_allow_set(base, EINA_FALSE); + + if (_play_video(data) < 0) { + _ERR("failed to play video"); + data->error = true; + + _update_info_bar_err(data); + control_hide(data->control); + elm_object_signal_emit(data->base, SIG_SHOW_VIEW, ""); + return 0; + } + + playermgr_set_completed_cb(data->player, _player_completed, data); + + elm_object_signal_callback_add(base, "show,view,finish", "", + _show_view_finish_cb, data); + + data->drawanim_timer = ecore_timer_add(0.8, _drawanim_timer_cb, data); + if (!data->drawanim_timer) + goto error; + + return 0; + +error: + _ERR("Error in view player create"); + return -1; +} + +int view_player_pause(struct viewdata *data) +{ + elm_exit(); + + return 0; +} + +int view_player_resume(struct viewdata *data) +{ + return 0; +} diff --git a/src/volume.c b/src/volume.c new file mode 100644 index 0000000..fb21f81 --- /dev/null +++ b/src/volume.c @@ -0,0 +1,217 @@ +/* + * Copyright (c) 2014 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. +*/ + +#include +#include +#include +#include +#include "define.h" +#include "volume.h" + +#define TIME_INTERVAL 3.0 + +struct volume_data { + Evas_Object *ly; + Evas_Object *bar; + Ecore_Timer *timer; + int volume; + Eina_Bool mute; +}; + +static void _set_mute(struct volume_data *data, Eina_Bool mute) +{ + int r; + int vol; + + if (data->mute == mute) + return; + + if (mute) { + r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol); + if (r < 0) + return; + + data->volume = vol; + data->mute = EINA_TRUE; + } else { + sound_manager_set_volume(SOUND_TYPE_MEDIA, data->volume); + data->mute = EINA_FALSE; + } +} + +static void _handle_volume(struct volume_data *data, enum volume_val val) +{ + int vol; + int r; + + vol = 0; + + switch (val) { + case E_VOLUME_UP: + case E_VOLUME_DOWN: + _set_mute(data, EINA_FALSE); + + r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol); + if (r != SOUND_MANAGER_ERROR_NONE) { + _ERR("get volume error"); + return; + } + + vol += val; + + sound_manager_set_volume(SOUND_TYPE_MEDIA, vol); + break; + case E_VOLUME_MUTE: + _set_mute(data, !data->mute); + break; + default: + break; + } +} + +static void _update_volume_bar(struct volume_data *data) +{ + double val; + int vol; + char buf[8]; + int r; + + if (!data->bar) + return; + + r = sound_manager_get_volume(SOUND_TYPE_MEDIA, &vol); + if (r != SOUND_MANAGER_ERROR_NONE) { + _ERR("get volume error"); + vol = 0; + } + + if (vol == 0 || data->mute) { + elm_object_signal_emit(data->ly, SIG_VOLUME_MUTE, "base"); + val = 0; + } else { + elm_object_signal_emit(data->ly, SIG_VOLUME_UNMUTE, "base"); + val = vol * 0.01; + } + + elm_progressbar_value_set(data->bar, val); + + snprintf(buf, sizeof(buf), "%d", vol); + elm_object_part_text_set(data->ly, PART_VOLUME_VALUE, buf); +} + +static Eina_Bool _volume_timer_cb(void *dt) +{ + struct volume_data *data; + + if (!dt) + return ECORE_CALLBACK_CANCEL; + + data = dt; + + evas_object_hide(data->ly); + data->timer = NULL; + + return ECORE_CALLBACK_CANCEL; +} + +void volume_handle_key(struct volume_data *data, enum volume_val val) +{ + if (!data) + return; + + if (!data->timer) { + data->timer = ecore_timer_add(TIME_INTERVAL, + _volume_timer_cb, data); + evas_object_show(data->ly); + } else { + ecore_timer_reset(data->timer); + } + + _handle_volume(data, val); + _update_volume_bar(data); +} + +void volume_hide_bar(struct volume_data *data) +{ + if (!data->timer) + return; + + evas_object_hide(data->ly); + ecore_timer_del(data->timer); + data->timer = NULL; +} + +Eina_Bool volume_add_bar(struct volume_data *data, Evas_Object *base) +{ + Evas_Object *ly; + Evas_Object *bar; + + if (!base) { + _ERR("failed to get base object"); + return EINA_FALSE; + } + + ly = elm_layout_add(base); + if (!ly) { + free(data); + return EINA_FALSE; + } + + elm_layout_file_set(ly, EDJEFILE, GRP_VOLUME); + elm_win_resize_object_add(base, ly); + evas_object_hide(ly); + + bar = elm_progressbar_add(ly); + if (!bar) { + _ERR("failed to create progressbar"); + free(data); + evas_object_del(ly); + return EINA_FALSE; + } + + evas_object_size_hint_weight_set(bar, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_progressbar_horizontal_set(bar, EINA_TRUE); + elm_object_style_set(bar, STYLE_VOLUME_BAR); + elm_object_part_content_set(ly, PART_VOLUME_BAR, bar); + evas_object_show(bar); + + data->ly = ly; + data->bar = bar; + + return EINA_TRUE; +} + +void volume_fini(struct volume_data *data) +{ + ecore_timer_del(data->timer); + free(data); +} + +struct volume_data *volume_init(void) +{ + struct volume_data *data; + + data = calloc(1, sizeof(*data)); + if (!data) { + _ERR("allocation fail"); + return NULL; + } + + sound_manager_set_session_type(SOUND_SESSION_TYPE_EXCLUSIVE); + + return data; +} -- 2.7.4 From b2eae30caf04f1782e062fec29445b8506331cff Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Fri, 30 Jan 2015 10:31:02 +0900 Subject: [PATCH 3/5] add apache2 license file Change-Id: I9a0a1b97b98e38bca4e5c79011ae5dcf042a5687 Signed-off-by: Minkyu Kang --- LICENSE | 204 ++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 204 insertions(+) create mode 100644 LICENSE diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..54b213e --- /dev/null +++ b/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2015 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + -- 2.7.4 From 6c2a66ca60248a1e1545c466903bf5faeac1a602 Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Mon, 2 Feb 2015 13:43:45 +0900 Subject: [PATCH 4/5] convert c files to cpp Change-Id: I1054aeb406097c7e1b1ef11261c6843300cf7d07 Signed-off-by: Minkyu Kang --- CMakeLists.txt | 23 ++++++++------- packaging/org.tizen.video-player-tv-ref.spec | 2 +- src/{control.c => control.cpp} | 4 +-- src/{main.c => main.cpp} | 17 +++++++---- src/{mediadata.c => mediadata.cpp} | 2 +- src/{playermgr.c => playermgr.cpp} | 19 ++++++++---- src/{slider.c => slider.cpp} | 12 ++++---- src/{timeout_handler.c => timeout_handler.cpp} | 11 ++++--- src/{videodata.c => videodata.cpp} | 2 +- src/{view_player.c => view_player.cpp} | 40 ++++++++++++-------------- src/{volume.c => volume.cpp} | 4 +-- 11 files changed, 77 insertions(+), 59 deletions(-) rename src/{control.c => control.cpp} (98%) rename src/{main.c => main.cpp} (91%) rename src/{mediadata.c => mediadata.cpp} (98%) rename src/{playermgr.c => playermgr.cpp} (96%) rename src/{slider.c => slider.cpp} (96%) rename src/{timeout_handler.c => timeout_handler.cpp} (93%) rename src/{videodata.c => videodata.cpp} (97%) rename src/{view_player.c => view_player.cpp} (96%) rename src/{volume.c => volume.cpp} (98%) diff --git a/CMakeLists.txt b/CMakeLists.txt index 13347fa..db02d90 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -14,7 +14,7 @@ # CMAKE_MINIMUM_REQUIRED(VERSION 2.6) -PROJECT("video-player-tv-ref" C) +PROJECT("video-player-tv-ref" CXX C) INCLUDE(FindPkgConfig) pkg_check_modules(PKGS REQUIRED @@ -64,15 +64,15 @@ IF(NOT DEFINED DESKTOP_ICON) ENDIF(NOT DEFINED DESKTOP_ICON) SET(SRCS - src/main.c - src/view_player.c - src/playermgr.c - src/videodata.c - src/mediadata.c - src/timeout_handler.c - src/volume.c - src/slider.c - src/control.c + src/main.cpp + src/view_player.cpp + src/playermgr.cpp + src/videodata.cpp + src/mediadata.cpp + src/timeout_handler.cpp + src/volume.cpp + src/slider.cpp + src/control.cpp ) SET(TARGET_EDJ "${PROJECT_NAME}.edj") @@ -93,8 +93,9 @@ ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) FOREACH(flag ${PKGS_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) -#SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") + SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") +SET(CMAKE_CXX_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS}) CONFIGURE_FILE(${PACKAGE_NAME}.xml.in ${PACKAGE_NAME}.xml) diff --git a/packaging/org.tizen.video-player-tv-ref.spec b/packaging/org.tizen.video-player-tv-ref.spec index 1e472ac..41d5239 100644 --- a/packaging/org.tizen.video-player-tv-ref.spec +++ b/packaging/org.tizen.video-player-tv-ref.spec @@ -1,6 +1,6 @@ Name: org.tizen.video-player-tv-ref Summary: Video Player Application -Version: 0.2 +Version: 0.3 Release: 1 Group: Applications/Core Applications License: Apache-2.0 diff --git a/src/control.c b/src/control.cpp similarity index 98% rename from src/control.c rename to src/control.cpp index 51b3d37..a77f16d 100644 --- a/src/control.c +++ b/src/control.cpp @@ -44,7 +44,7 @@ static void _event_callback(void *dt, Evas_Object *obj, if (!dt) return; - data = dt; + data = (control_data *)dt; data->cb.func(data->cb.data, source); } @@ -218,7 +218,7 @@ struct control_data *control_init(void) { struct control_data *data; - data = calloc(1, sizeof(*data)); + data = (control_data *)calloc(1, sizeof(*data)); if (!data) { _ERR("allocation fail"); return NULL; diff --git a/src/main.c b/src/main.cpp similarity index 91% rename from src/main.c rename to src/main.cpp index cf58408..8e9c67c 100644 --- a/src/main.c +++ b/src/main.cpp @@ -66,7 +66,7 @@ static bool _create(void *user_data) if (!user_data) return false; - ad = user_data; + ad = (_appdata *)user_data; elm_theme_overlay_add(NULL, THEMEFILE); elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK); @@ -90,7 +90,7 @@ static void _terminate(void *user_data) if (!user_data) return; - ad = user_data; + ad = (_appdata *)user_data; view_player_fini(ad->vdata); } @@ -104,7 +104,7 @@ static void _pause(void *user_data) return; } - ad = user_data; + ad = (_appdata *)user_data; if (!ad->vdata) return; @@ -120,7 +120,7 @@ static void _resume(void *user_data) return; } - ad = user_data; + ad = (_appdata *)user_data; if (!ad->vdata) return; @@ -138,7 +138,7 @@ static void _service(service_h service, void *user_data) if (!user_data) return; - ad = user_data; + ad = (_appdata *)user_data; r = service_get_extra_data(service, PARAM_URI, &uri); if (r != SERVICE_ERROR_NONE) @@ -176,6 +176,13 @@ int main(int argc, char **argv) memset(&ad, 0x00, sizeof(ad)); ad.name = PACKAGE; + memset(&cbs, 0x00, sizeof(cbs)); + cbs.create = _create; + cbs.terminate = _terminate; + cbs.pause = _pause; + cbs.resume = _resume; + cbs.service = _service; + i18n_init(); app_efl_main(&argc, &argv, &cbs, &ad); diff --git a/src/mediadata.c b/src/mediadata.cpp similarity index 98% rename from src/mediadata.c rename to src/mediadata.cpp index 3395a52..2b5ed30 100644 --- a/src/mediadata.c +++ b/src/mediadata.cpp @@ -131,7 +131,7 @@ struct mediadata *mediadata_create(const char *path) return NULL; } - md = calloc(1, sizeof(*md)); + md = (mediadata *)calloc(1, sizeof(*md)); if (!md) { _ERR("allocation failed"); return NULL; diff --git a/src/playermgr.c b/src/playermgr.cpp similarity index 96% rename from src/playermgr.c rename to src/playermgr.cpp index f79b255..fe9cee0 100644 --- a/src/playermgr.c +++ b/src/playermgr.cpp @@ -37,12 +37,15 @@ struct playermgr { static void _destroy_list(Eina_List *list) { char *buf; + void *o; if (!list) return; - EINA_LIST_FREE(list, buf) + EINA_LIST_FREE(list, o) { + buf = (char *)o; free(buf); + } } static Eina_List *_create_list(const char *playlist) @@ -70,6 +73,7 @@ static int _get_current(Eina_List *list, const char *path) { Eina_List *l; const char *filepath; + void *o; int cur; if (!list || !path) @@ -77,7 +81,8 @@ static int _get_current(Eina_List *list, const char *path) cur = 0; - EINA_LIST_FOREACH(list, l, filepath) { + EINA_LIST_FOREACH(list, l, o) { + filepath = (const char *)o; if (!strcmp(filepath, path)) break; cur++; @@ -91,7 +96,7 @@ struct playermgr *playermgr_init(Evas_Object *win, { struct playermgr *mgr; - mgr = calloc(1, sizeof(*mgr)); + mgr = (playermgr *)calloc(1, sizeof(*mgr)); if (!mgr) { _ERR("Allocation fail"); return NULL; @@ -232,12 +237,16 @@ Eina_Bool playermgr_set_next_video(struct playermgr *mgr, Eina_Bool repeat) const char *playermgr_get_video_path(struct playermgr *mgr) { + const char *path; + if (!mgr || !mgr->media_list) { _ERR("invalid parameter"); return NULL; } - return eina_list_nth(mgr->media_list, mgr->current); + path = (const char *)eina_list_nth(mgr->media_list, mgr->current); + + return path; } void playermgr_fini(struct playermgr *mgr) @@ -431,7 +440,7 @@ int playermgr_set_audio_effect(struct playermgr *mgr, int value) int playermgr_set_display_mode(struct playermgr *mgr, int value) { int r; - int mode; + player_display_mode_e mode; if (!mgr || !mgr->player) { _ERR("invalid parameter"); diff --git a/src/slider.c b/src/slider.cpp similarity index 96% rename from src/slider.c rename to src/slider.cpp index f608ce1..e8cf124 100644 --- a/src/slider.c +++ b/src/slider.cpp @@ -60,7 +60,7 @@ static void _slider_seek_completed(void *dt) if (!dt) return; - data = dt; + data = (slider_data *)dt; r = playermgr_get_position(data->player, &pos); if (r < 0) { @@ -83,7 +83,7 @@ static void _slider_value_changed(void *dt, Evas_Object *obj, void *ev) if (!dt) return; - data = dt; + data = (slider_data *)dt; slider_pause(data); @@ -101,7 +101,7 @@ static void _slider_focused(void *dt, Evas_Object *obj, void *ev) if (!dt) return; - data = dt; + data = (slider_data *)dt; elm_object_signal_emit(data->base, SIG_SLIDER_FOCUS, ""); } @@ -113,7 +113,7 @@ static void _slider_unfocused(void *dt, Evas_Object *obj, void *ev) if (!dt) return; - data = dt; + data = (slider_data *)dt; elm_object_signal_emit(data->base, SIG_SLIDER_UNFOCUS, ""); } @@ -127,7 +127,7 @@ static Eina_Bool _slider_timer_cb(void *dt) if (!dt) return ECORE_CALLBACK_CANCEL; - data = dt; + data = (slider_data *)dt; if (!data->player) goto error; @@ -258,7 +258,7 @@ struct slider_data *slider_init(void) { struct slider_data *data; - data = calloc(1, sizeof(*data)); + data = (slider_data *)calloc(1, sizeof(*data)); if (!data) { _ERR("allocation fail"); return NULL; diff --git a/src/timeout_handler.c b/src/timeout_handler.cpp similarity index 93% rename from src/timeout_handler.c rename to src/timeout_handler.cpp index 65e5861..1112bfd 100644 --- a/src/timeout_handler.c +++ b/src/timeout_handler.cpp @@ -45,7 +45,7 @@ static Eina_Bool _timer_cb(void *data) if (!data) return EINA_FALSE; - handle = data; + handle = (timeout_handler *)data; handle->timeout_cb(handle->timeout_data, 0, NULL); handle->timer = NULL; @@ -61,7 +61,7 @@ static Eina_Bool _event_occured(void *data, int type, void *event) if (!data) return ECORE_CALLBACK_PASS_ON; - handle = data; + handle = (timeout_handler *)data; vconf_get_int(VCONF_CURSOR_VISIBILITY_KEY, &visible); if (handle->cursor && !visible) { @@ -110,7 +110,7 @@ struct timeout_handler *timeout_handler_init(double timeout, ECORE_EVENT_MOUSE_OUT }; - handle = calloc(1, sizeof(*handle)); + handle = (timeout_handler *)calloc(1, sizeof(*handle)); if (!handle) return NULL; @@ -145,12 +145,15 @@ error: void timeout_handler_fini(struct timeout_handler *handle) { Ecore_Event_Handler *event_handler; + void *o; if (!handle) return; - EINA_LIST_FREE(handle->eventhandler_list, event_handler) + EINA_LIST_FREE(handle->eventhandler_list, o) { + event_handler = (Ecore_Event_Handler *)o; ecore_event_handler_del(event_handler); + } if (handle->timer) { ecore_timer_del(handle->timer); diff --git a/src/videodata.c b/src/videodata.cpp similarity index 97% rename from src/videodata.c rename to src/videodata.cpp index 5e6c4dd..40543b3 100644 --- a/src/videodata.c +++ b/src/videodata.cpp @@ -48,7 +48,7 @@ struct videodata *videodata_create(media_info_h media_h) return NULL; } - video_info = calloc(1, sizeof(*video_info)); + video_info = (videodata *)calloc(1, sizeof(*video_info)); if (!video_info) goto error; diff --git a/src/view_player.c b/src/view_player.cpp similarity index 96% rename from src/view_player.c rename to src/view_player.cpp index 34f8663..cf12b86 100644 --- a/src/view_player.c +++ b/src/view_player.cpp @@ -41,7 +41,7 @@ #define CONTROL_BTNS 7 -static const char const *_control_name[] = { +static const char *_control_name[] = { "prev", "rew", "playpause", @@ -279,7 +279,7 @@ static Eina_Bool _ffrew_timer_cb(void *dt) if (!dt) return ECORE_CALLBACK_CANCEL; - data = dt; + data = (viewdata *)dt; if (!data->player) return ECORE_CALLBACK_CANCEL; @@ -362,7 +362,7 @@ static void _rewind_btn_clicked(void *dt) if (!dt) return; - data = dt; + data = (viewdata *)dt; data->ff_speed = SPEED_MIN; @@ -382,7 +382,7 @@ static void _forward_btn_clicked(void *dt) if (!dt) return; - data = dt; + data = (viewdata *)dt; data->rew_speed = SPEED_MIN; @@ -402,7 +402,7 @@ static void _prev_btn_clicked(void *dt) if (!dt) return; - data = dt; + data = (viewdata *)dt; _stop_ffrew_timer(data); @@ -417,7 +417,7 @@ static void _next_btn_clicked(void *dt) if (!dt) return; - data = dt; + data = (viewdata *)dt; _stop_ffrew_timer(data); @@ -427,11 +427,13 @@ static void _next_btn_clicked(void *dt) static void _repeat_btn_clicked(void *dt) { - struct viewdata *data = dt; + struct viewdata *data; - if (!data) + if (!dt) return; + data = (viewdata *)dt; + switch (data->repeat) { case E_REPEAT_ALL: data->repeat = E_REPEAT_ONE; @@ -449,10 +451,6 @@ static void _repeat_btn_clicked(void *dt) static void _settings_btn_clicked(void *dt) { - struct viewdata *data = dt; - - if (!data) - return; } static void _playpause_btn_clicked(void *dt) @@ -464,7 +462,7 @@ static void _playpause_btn_clicked(void *dt) if (!dt) return; - data = dt; + data = (viewdata *)dt; if (data->ff_speed || data->rew_speed) { data->ff_speed = SPEED_MIN; @@ -508,7 +506,7 @@ static void _control_event(void *dt, const char *ev) if (!dt || !ev) return; - data = dt; + data = (viewdata *)dt; for (i = 0; i < CONTROL_BTNS; i++) { if (!strcmp(_control_name[i], ev)) @@ -524,7 +522,7 @@ static void _player_completed(void *dt) if (!dt) return; - data = dt; + data = (viewdata *)dt; r = EINA_TRUE; if (data->repeat == E_REPEAT_NONE) @@ -546,7 +544,7 @@ static void _show_view_finish_cb(void *dt, Evas_Object *obj, if (!dt) return; - data = dt; + data = (viewdata *)dt; control_show(data->control); } @@ -578,7 +576,7 @@ static void _timeout_event(void *dt, int type, void *ev) if (!dt) return; - data = dt; + data = (viewdata *)dt; if (!data->error) _hide_view(data); @@ -591,7 +589,7 @@ static void _back_event(void *dt, Evas_Object *obj, void *ev) if (!dt) return; - data = dt; + data = (viewdata *)dt; if (data->view_hidden) _show_view(data); @@ -614,12 +612,12 @@ static void _ecore_event(void *dt, int type, void *ei) if (!dt) return; - data = dt; + data = (viewdata *)dt; if (type == ECORE_EVENT_KEY_UP) { Evas_Event_Key_Up *ev; - ev = ei; + ev = (Evas_Event_Key_Up *)ei; if (!ev) return; @@ -673,7 +671,7 @@ static Eina_Bool _drawanim_timer_cb(void *dt) if (!dt) return ECORE_CALLBACK_CANCEL; - data = dt; + data = (viewdata *)dt; elm_object_signal_emit(data->base, SIG_SHOW_VIEW, ""); control_focus_set(data->control, E_PLAYPAUSE_BTN, EINA_TRUE); diff --git a/src/volume.c b/src/volume.cpp similarity index 98% rename from src/volume.c rename to src/volume.cpp index fb21f81..1d0880b 100644 --- a/src/volume.c +++ b/src/volume.cpp @@ -119,7 +119,7 @@ static Eina_Bool _volume_timer_cb(void *dt) if (!dt) return ECORE_CALLBACK_CANCEL; - data = dt; + data = (volume_data *)dt; evas_object_hide(data->ly); data->timer = NULL; @@ -205,7 +205,7 @@ struct volume_data *volume_init(void) { struct volume_data *data; - data = calloc(1, sizeof(*data)); + data = (volume_data *)calloc(1, sizeof(*data)); if (!data) { _ERR("allocation fail"); return NULL; -- 2.7.4 From 87b8d90ad3e60d816e784373bb8978b1bc739d5f Mon Sep 17 00:00:00 2001 From: Minkyu Kang Date: Wed, 4 Feb 2015 09:57:27 +0900 Subject: [PATCH 5/5] apply the CBaseApp Change-Id: Ia016c97aab30647d7197a1a3cd576425aa45ad94 Signed-off-by: Minkyu Kang --- CMakeLists.txt | 1 + packaging/org.tizen.video-player-tv-ref.spec | 1 + src/main.cpp | 150 ++++++++++++++------------- 3 files changed, 78 insertions(+), 74 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index db02d90..b6d9520 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -28,6 +28,7 @@ pkg_check_modules(PKGS REQUIRED utilX x11 vconf + application-common mm-player capi-media-player capi-media-sound-manager diff --git a/packaging/org.tizen.video-player-tv-ref.spec b/packaging/org.tizen.video-player-tv-ref.spec index 41d5239..f63d2b4 100644 --- a/packaging/org.tizen.video-player-tv-ref.spec +++ b/packaging/org.tizen.video-player-tv-ref.spec @@ -21,6 +21,7 @@ BuildRequires: pkgconfig(mm-player) BuildRequires: pkgconfig(utilX) BuildRequires: pkgconfig(x11) BuildRequires: pkgconfig(vconf) +BuildRequires: pkgconfig(application-common) BuildRequires: gettext-devel BuildRequires: edje-bin diff --git a/src/main.cpp b/src/main.cpp index 8e9c67c..e1ae43b 100644 --- a/src/main.cpp +++ b/src/main.cpp @@ -17,21 +17,52 @@ #include #include #include +#include +#include #include "define.h" #include "view_player.h" #include "i18n.h" +#define WIN_TITLE "Video Player" #define PARAM_URI "uri" #define PARAM_PLAYLIST_ID "playlist_id" -struct _appdata { +struct SAppData { const char *name; Evas_Object *win; + viewdata *vdata; +}; - struct viewdata *vdata; +class CVideoPlayerApp : public CBaseApp { +private: + SAppData *m_pApp; + +private: + static Evas_Object *sm_AddWin(const char *name); + +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); }; -static Evas_Object *_add_win(const char *name) +CVideoPlayerApp::CVideoPlayerApp(void) +{ + m_pApp = new SAppData; +} + +CVideoPlayerApp::~CVideoPlayerApp(void) +{ + delete m_pApp; + m_pApp = NULL; +} + +Evas_Object *CVideoPlayerApp::sm_AddWin(const char *name) { Evas_Object *win; Evas_Object *obj; @@ -44,7 +75,7 @@ static Evas_Object *_add_win(const char *name) if (!win) return NULL; - elm_win_title_set(win, "Video player"); + elm_win_title_set(win, WIN_TITLE); evas_object_show(win); @@ -58,88 +89,69 @@ static Evas_Object *_add_win(const char *name) return win; } -static bool _create(void *user_data) +bool CVideoPlayerApp::OnCreate(void) { - struct _appdata *ad; - Evas_Object *win; + ASSERT(m_pApp); - if (!user_data) - return false; - - ad = (_appdata *)user_data; + Evas_Object *win; elm_theme_overlay_add(NULL, THEMEFILE); elm_config_focus_move_policy_set(ELM_FOCUS_MOVE_POLICY_CLICK); - win = _add_win(ad->name); - if (!win) + win = sm_AddWin(m_pApp->name); + if (!win) { + _ERR("failed to add window"); return false; - - ad->win = win; + } elm_win_focus_highlight_enabled_set(win, EINA_TRUE); elm_win_focus_highlight_style_set(win, STYLE_INVISIBLE); + m_pApp->win = win; + return true; } -static void _terminate(void *user_data) +void CVideoPlayerApp::OnTerminate(void) { - struct _appdata *ad; - - if (!user_data) - return; + ASSERT(m_pApp); - ad = (_appdata *)user_data; + if (m_pApp->vdata) + view_player_fini(m_pApp->vdata); - view_player_fini(ad->vdata); + if (m_pApp->win) + evas_object_del(m_pApp->win); } -static void _pause(void *user_data) +void CVideoPlayerApp::OnPause(void) { - struct _appdata *ad; + ASSERT(m_pApp); - if (!user_data) { - _ERR("App Data is NULL"); - return; - } - - ad = (_appdata *)user_data; - if (!ad->vdata) + if (!m_pApp->vdata) return; - view_player_pause(ad->vdata); + view_player_pause(m_pApp->vdata); } -static void _resume(void *user_data) +void CVideoPlayerApp::OnResume(void) { - struct _appdata *ad; - - if (!user_data) { - _ERR("App Data is NULL"); - return; - } + ASSERT(m_pApp); - ad = (_appdata *)user_data; - if (!ad->vdata) + if (!m_pApp->vdata) return; - view_player_resume(ad->vdata); + view_player_resume(m_pApp->vdata); } -static void _service(service_h service, void *user_data) +void CVideoPlayerApp::OnService(service_h service) { - struct _appdata *ad; - struct viewdata *vdata; + ASSERT(m_pApp); + + viewdata *vdata; char *uri; char *playlist_id; int r; - if (!user_data) - return; - - ad = (_appdata *)user_data; - r = service_get_extra_data(service, PARAM_URI, &uri); if (r != SERVICE_ERROR_NONE) uri = NULL; @@ -148,7 +160,7 @@ static void _service(service_h service, void *user_data) if (r != SERVICE_ERROR_NONE) playlist_id = NULL; - vdata = view_player_init(ad->win, uri, playlist_id); + vdata = view_player_init(m_pApp->win, uri, playlist_id); free(uri); free(playlist_id); @@ -159,33 +171,23 @@ static void _service(service_h service, void *user_data) if (view_player_create(vdata) == -1) elm_exit(); - ad->vdata = vdata; + m_pApp->vdata = vdata; +} + +int CVideoPlayerApp::Run(int argc, char **argv) +{ + ASSERT(m_pApp); + + m_pApp->name = PACKAGE; + + return CBaseApp::Run(argc, argv); } int main(int argc, char **argv) { - struct _appdata ad; - app_event_callback_s cbs = { - .create = _create, - .terminate = _terminate, - .pause = _pause, - .resume = _resume, - .service = _service, - }; - - memset(&ad, 0x00, sizeof(ad)); - ad.name = PACKAGE; - - memset(&cbs, 0x00, sizeof(cbs)); - cbs.create = _create; - cbs.terminate = _terminate; - cbs.pause = _pause; - cbs.resume = _resume; - cbs.service = _service; - - i18n_init(); - - app_efl_main(&argc, &argv, &cbs, &ad); + CVideoPlayerApp app; + + app.Run(argc, argv); return 0; } -- 2.7.4