summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorKim Kibum <kb0929.kim@samsung.com>2012-06-08 14:54:08 +0900
committerKim Kibum <kb0929.kim@samsung.com>2012-06-08 14:54:08 +0900
commit0501a73d203bb543e7018bc4d25a64c4b2d4ebba (patch)
treef121d105c15be6a90f6aa1808b578f4f9387818e
parentd0edc70d8dea66919521e9d3bbb637014624ee63 (diff)
downloadmusic-player-0501a73d203bb543e7018bc4d25a64c4b2d4ebba.tar.gz
music-player-0501a73d203bb543e7018bc4d25a64c4b2d4ebba.tar.bz2
music-player-0501a73d203bb543e7018bc4d25a64c4b2d4ebba.zip
apply FSL(Flora Software License)
-rwxr-xr-xCMakeLists.txt157
-rwxr-xr-xLICENSE75
-rwxr-xr-xNOTICE1
-rwxr-xr-xdata/music-player.uri2
-rwxr-xr-xdata/org.tizen.music-player.desktop.in28
-rwxr-xr-xdata/org.tizen.music-player.pngbin0 -> 18297 bytes
-rwxr-xr-xdebian/changelog9
-rwxr-xr-xdebian/compat1
-rwxr-xr-xdebian/control44
-rw-r--r--debian/debhelper.log2
-rwxr-xr-xdebian/org.tizen.music-player-dbg.install.in7
-rwxr-xr-xdebian/org.tizen.music-player.install.in7
-rwxr-xr-xdebian/org.tizen.music-player.postinst79
-rwxr-xr-xdebian/rules134
-rwxr-xr-ximages/music_player/00_EditField_clear.pngbin0 -> 3272 bytes
-rwxr-xr-ximages/music_player/00_Option_header_bt.pngbin0 -> 2997 bytes
-rwxr-xr-ximages/music_player/00_Option_header_bt_dim.pngbin0 -> 2973 bytes
-rwxr-xr-ximages/music_player/00_Option_header_bt_press.pngbin0 -> 2977 bytes
-rwxr-xr-ximages/music_player/00_list_bar_press_1x80.pngbin0 -> 2872 bytes
-rwxr-xr-ximages/music_player/00_winset_Back_btn_normal.pngbin0 -> 3166 bytes
-rwxr-xr-ximages/music_player/00_winset_Back_btn_press.pngbin0 -> 3192 bytes
-rwxr-xr-ximages/music_player/00_winset_control_toolbar_bg.pngbin0 -> 2798 bytes
-rwxr-xr-ximages/music_player/00_winset_control_top_arrow.pngbin0 -> 3200 bytes
-rwxr-xr-ximages/music_player/00_winset_control_top_bg.pngbin0 -> 2817 bytes
-rwxr-xr-ximages/music_player/00_winset_tabbar_focus.pngbin0 -> 156 bytes
-rwxr-xr-ximages/music_player/00_winset_tabbar_focus_left.pngbin0 -> 156 bytes
-rwxr-xr-ximages/music_player/00_winset_tabbar_focus_right.pngbin0 -> 154 bytes
-rwxr-xr-ximages/music_player/00_winset_tabbar_press.pngbin0 -> 2792 bytes
-rwxr-xr-ximages/music_player/00_winset_tabbar_press_left.pngbin0 -> 2794 bytes
-rwxr-xr-ximages/music_player/00_winset_tabbar_press_right.pngbin0 -> 2791 bytes
-rwxr-xr-ximages/music_player/00_winset_toolbar_press.pngbin0 -> 157 bytes
-rwxr-xr-ximages/music_player/01_list_reorder_bg_above.pngbin0 -> 300 bytes
-rwxr-xr-ximages/music_player/01_list_reorder_bg_below.pngbin0 -> 304 bytes
-rwxr-xr-ximages/music_player/01_list_selectall_bg.pngbin0 -> 2579 bytes
-rwxr-xr-ximages/music_player/01_search_button.pngbin0 -> 2999 bytes
-rwxr-xr-ximages/music_player/01_search_input_bg.pngbin0 -> 671 bytes
-rwxr-xr-ximages/music_player/01_search_input_field_bg_c.pngbin0 -> 118 bytes
-rwxr-xr-ximages/music_player/01_search_input_field_bg_l.pngbin0 -> 380 bytes
-rwxr-xr-ximages/music_player/01_search_input_field_bg_r.pngbin0 -> 284 bytes
-rwxr-xr-ximages/music_player/12_music_player_bg_01.PNGbin0 -> 5384 bytes
-rwxr-xr-ximages/music_player/34_header_thumb_bg.pngbin0 -> 5077 bytes
-rwxr-xr-ximages/music_player/T02_OptionHeader_btn_press.pngbin0 -> 2931 bytes
-rwxr-xr-ximages/music_player/T02_Option_header_bt.pngbin0 -> 3111 bytes
-rwxr-xr-ximages/music_player/T02_Option_header_bt_press.pngbin0 -> 3250 bytes
-rwxr-xr-ximages/music_player/T02_Page_bg.pngbin0 -> 2899 bytes
-rwxr-xr-ximages/music_player/T02_Play_btn__play.pngbin0 -> 4080 bytes
-rwxr-xr-ximages/music_player/T02_Play_btn__play_press.pngbin0 -> 4377 bytes
-rwxr-xr-ximages/music_player/T02_Play_btn_next.pngbin0 -> 4415 bytes
-rwxr-xr-ximages/music_player/T02_Play_btn_next_press.pngbin0 -> 4585 bytes
-rwxr-xr-ximages/music_player/T02_Play_btn_pause.pngbin0 -> 3287 bytes
-rwxr-xr-ximages/music_player/T02_Play_btn_pause_press.pngbin0 -> 3472 bytes
-rwxr-xr-ximages/music_player/T02_Play_btn_previou_press.pngbin0 -> 4475 bytes
-rwxr-xr-ximages/music_player/T02_Play_btn_previous.pngbin0 -> 4356 bytes
-rwxr-xr-ximages/music_player/T02_Video_play.pngbin0 -> 7095 bytes
-rwxr-xr-ximages/music_player/T02_btn_Back.pngbin0 -> 3259 bytes
-rwxr-xr-ximages/music_player/T02_control_top_arrow.pngbin0 -> 3123 bytes
-rwxr-xr-ximages/music_player/T02_control_top_bg.pngbin0 -> 2817 bytes
-rwxr-xr-ximages/music_player/T02_controller_btn.pngbin0 -> 2994 bytes
-rwxr-xr-ximages/music_player/T02_controller_btn_press.pngbin0 -> 3008 bytes
-rwxr-xr-ximages/music_player/T02_controls_bg_shadow.pngbin0 -> 35150 bytes
-rwxr-xr-ximages/music_player/T02_navigation_tabbar_bg.pngbin0 -> 60479 bytes
-rwxr-xr-ximages/music_player/T02_navigation_tabbar_focus.pngbin0 -> 30326 bytes
-rwxr-xr-ximages/music_player/T02_nocomposers.pngbin0 -> 11167 bytes
-rwxr-xr-ximages/music_player/T02_now_playing_bar.pngbin0 -> 2819 bytes
-rwxr-xr-ximages/music_player/T02_now_playing_icon_pause.pngbin0 -> 2834 bytes
-rwxr-xr-ximages/music_player/T02_now_playing_icon_play.pngbin0 -> 2877 bytes
-rwxr-xr-ximages/music_player/T02_now_playing_progress_bar.pngbin0 -> 2802 bytes
-rwxr-xr-ximages/music_player/T02_now_playing_progress_bg.pngbin0 -> 2820 bytes
-rwxr-xr-ximages/music_player/T02_option_bg.pngbin0 -> 2822 bytes
-rwxr-xr-ximages/music_player/T02_option_favorite_off.pngbin0 -> 3787 bytes
-rwxr-xr-ximages/music_player/T02_option_favorite_on.pngbin0 -> 3667 bytes
-rwxr-xr-ximages/music_player/T02_option_rep_1.pngbin0 -> 4122 bytes
-rwxr-xr-ximages/music_player/T02_option_rep_A.pngbin0 -> 3869 bytes
-rwxr-xr-ximages/music_player/T02_option_rep_all.pngbin0 -> 4360 bytes
-rwxr-xr-ximages/music_player/T02_option_shuffle_off.pngbin0 -> 4201 bytes
-rwxr-xr-ximages/music_player/T02_option_shuffle_on.pngbin0 -> 3919 bytes
-rwxr-xr-ximages/music_player/T02_player_progress_bar.pngbin0 -> 2802 bytes
-rwxr-xr-ximages/music_player/T02_player_progress_bg.pngbin0 -> 2839 bytes
-rwxr-xr-ximages/music_player/T02_player_progress_point.pngbin0 -> 2794 bytes
-rwxr-xr-ximages/music_player/T02_title_bg.pngbin0 -> 54035 bytes
-rwxr-xr-ximages/music_player/T02_toolbar_press.pngbin0 -> 2878 bytes
-rwxr-xr-ximages/music_player/T02_volume.pngbin0 -> 3426 bytes
-rwxr-xr-ximages/music_player/T02_winset_btn_Back.pngbin0 -> 3259 bytes
-rwxr-xr-ximages/music_player/copy&paste_Icon_left.pngbin0 -> 3313 bytes
-rwxr-xr-ximages/music_player/copy&paste_Icon_left_press.pngbin0 -> 3514 bytes
-rwxr-xr-ximages/music_player/copy&paste_Icon_left_top.pngbin0 -> 3342 bytes
-rwxr-xr-ximages/music_player/copy&paste_Icon_left_top_press.pngbin0 -> 3568 bytes
-rwxr-xr-ximages/music_player/copy&paste_Icon_right.pngbin0 -> 3417 bytes
-rwxr-xr-ximages/music_player/copy&paste_Icon_right_press.pngbin0 -> 3611 bytes
-rwxr-xr-ximages/music_player/copy&paste_Icon_right_top.pngbin0 -> 3396 bytes
-rwxr-xr-ximages/music_player/copy&paste_Icon_right_top_press.pngbin0 -> 3591 bytes
-rwxr-xr-ximages/music_player/music_icon_mute.pngbin0 -> 3154 bytes
-rwxr-xr-ximages/music_player/music_player_bg.PNGbin0 -> 3468 bytes
-rwxr-xr-ximages/music_player/music_popup_mute.pngbin0 -> 4136 bytes
-rw-r--r--images/music_player/separator_h.pngbin0 -> 151 bytes
-rw-r--r--images/music_player/separator_v.pngbin0 -> 96 bytes
-rwxr-xr-xlayout/mp-button.edc1774
-rwxr-xr-xlayout/mp-custom-winset-style.edc30
-rwxr-xr-xlayout/mp-defines.h220
-rwxr-xr-xlayout/mp-editfield.edc1274
-rwxr-xr-xlayout/mp-genlist-edit.edc158
-rwxr-xr-xlayout/mp-genlist-theme.edc1827
-rwxr-xr-xlayout/mp-library.edc1301
-rwxr-xr-xlayout/mp-naviframe.edc904
-rwxr-xr-xlayout/mp-no-contents.edc113
-rwxr-xr-xlayout/mp-play-control.edc644
-rwxr-xr-xlayout/mp-play-current-playing.edc228
-rwxr-xr-xlayout/mp-play-info.edc974
-rwxr-xr-xlayout/mp-play-menu.edc385
-rwxr-xr-xlayout/mp-play-progress.edc314
-rwxr-xr-xlayout/mp-play-view.edc820
-rwxr-xr-xlayout/mp-progressbar.edc410
-rwxr-xr-xlayout/mp-rich-info.edc475
-rwxr-xr-xlayout/mp-selection-info.edc89
-rwxr-xr-xlayout/mp-toolbar.edc1730
-rwxr-xr-xlayout/mp_genlist_define.edc131
-rwxr-xr-xlayout/mp_genlist_macro.edc1030
-rwxr-xr-xlayout/music.edc28
-rw-r--r--packaging/org.tizen.music-player.spec99
-rwxr-xr-xpo/CMakeLists.txt39
-rwxr-xr-xpo/POTFILES.in23
-rwxr-xr-xpo/de_DE.po330
-rwxr-xr-xpo/el_GR.po330
-rwxr-xr-xpo/en.po330
-rwxr-xr-xpo/es_ES.po330
-rwxr-xr-xpo/fr_FR.po330
-rwxr-xr-xpo/it_IT.po330
-rwxr-xr-xpo/ja_JP.po330
-rwxr-xr-xpo/ko_KR.po330
-rwxr-xr-xpo/nl_NL.po330
-rwxr-xr-xpo/pt_PT.po330
-rwxr-xr-xpo/ru_RU.po330
-rwxr-xr-xpo/tr_TR.po330
-rwxr-xr-xpo/update-po.sh57
-rwxr-xr-xpo/zh_CN.po330
-rwxr-xr-xpo/zh_HK.po330
-rwxr-xr-xpo/zh_TW.po330
-rwxr-xr-xsrc/common/include/mp-app.h48
-rwxr-xr-xsrc/common/include/mp-common.h56
-rwxr-xr-xsrc/common/include/mp-item.h26
-rwxr-xr-xsrc/common/include/mp-menu.h29
-rwxr-xr-xsrc/common/include/mp-play.h36
-rwxr-xr-xsrc/common/include/mp-util.h107
-rwxr-xr-xsrc/common/include/mp-view-manager.h78
-rwxr-xr-xsrc/common/include/mp-widget.h36
-rwxr-xr-xsrc/common/mp-app.c811
-rwxr-xr-xsrc/common/mp-common.c747
-rwxr-xr-xsrc/common/mp-item.c58
-rwxr-xr-xsrc/common/mp-menu.c723
-rwxr-xr-xsrc/common/mp-play.c439
-rwxr-xr-xsrc/common/mp-util.c1660
-rwxr-xr-xsrc/common/mp-view-manager.c1235
-rwxr-xr-xsrc/common/mp-widget.c370
-rwxr-xr-xsrc/core/include/mp-file-tag-info.h45
-rwxr-xr-xsrc/core/include/mp-http-mgr.h91
-rwxr-xr-xsrc/core/include/mp-play-list.h116
-rwxr-xr-xsrc/core/include/mp-player-control.h40
-rwxr-xr-xsrc/core/include/mp-player-drm.h45
-rwxr-xr-xsrc/core/include/mp-player-mgr.h49
-rwxr-xr-xsrc/core/include/mp-setting-ctrl.h58
-rwxr-xr-xsrc/core/include/mp-streaming-mgr.h28
-rwxr-xr-xsrc/core/mp-file-tag-info.c250
-rwxr-xr-xsrc/core/mp-http-mgr.c280
-rwxr-xr-xsrc/core/mp-play-list.c1173
-rwxr-xr-xsrc/core/mp-player-control.c645
-rwxr-xr-xsrc/core/mp-player-drm.c108
-rwxr-xr-xsrc/core/mp-player-mgr.c591
-rwxr-xr-xsrc/core/mp-setting-ctrl.c339
-rwxr-xr-xsrc/core/mp-streaming-mgr.c250
-rwxr-xr-xsrc/include/mp-define.h282
-rwxr-xr-xsrc/include/mp-player-debug.h143
-rwxr-xr-xsrc/include/mp-setting-keys.h36
-rwxr-xr-xsrc/include/music.h346
-rwxr-xr-xsrc/mp-main.c578
-rwxr-xr-xsrc/view/include/mp-edit-view.h29
-rwxr-xr-xsrc/view/include/mp-group-view.h33
-rwxr-xr-xsrc/view/include/mp-library.h50
-rwxr-xr-xsrc/view/include/mp-play-view.h55
-rwxr-xr-xsrc/view/include/mp-playlist-view.h39
-rwxr-xr-xsrc/view/include/mp-track-view.h30
-rwxr-xr-xsrc/view/mp-edit-view.c1006
-rwxr-xr-xsrc/view/mp-group-view.c467
-rwxr-xr-xsrc/view/mp-library.c639
-rwxr-xr-xsrc/view/mp-play-view.c2516
-rwxr-xr-xsrc/view/mp-playlist-view.c736
-rwxr-xr-xsrc/view/mp-track-view.c170
-rwxr-xr-xsrc/widget/include/mp-popup.h60
-rwxr-xr-xsrc/widget/include/mp-search.h29
-rwxr-xr-xsrc/widget/include/mp-smart-event-box.h24
-rwxr-xr-xsrc/widget/include/mp-view-layout.h201
-rwxr-xr-xsrc/widget/mp-popup.c437
-rwxr-xr-xsrc/widget/mp-search.c153
-rwxr-xr-xsrc/widget/mp-smart-event-box.c260
-rwxr-xr-xsrc/widget/mp-view-layout.c2247
-rwxr-xr-xtarget_images/music_player/01_controlbar_icon_albums.pngbin0 -> 2967 bytes
-rwxr-xr-xtarget_images/music_player/01_controlbar_icon_artist.pngbin0 -> 402 bytes
-rwxr-xr-xtarget_images/music_player/01_controlbar_icon_composer.pngbin0 -> 328 bytes
-rwxr-xr-xtarget_images/music_player/01_controlbar_icon_genre.pngbin0 -> 323 bytes
-rwxr-xr-xtarget_images/music_player/01_controlbar_icon_music_albums.pngbin0 -> 344 bytes
-rwxr-xr-xtarget_images/music_player/01_controlbar_icon_playlists.pngbin0 -> 254 bytes
-rw-r--r--target_images/music_player/01_controlbar_icon_songs.pngbin0 -> 3143 bytes
-rwxr-xr-xtarget_images/music_player/01_controlbar_icon_year.pngbin0 -> 391 bytes
-rwxr-xr-xtarget_images/music_player/34_mostplayed.pngbin0 -> 16212 bytes
-rwxr-xr-xtarget_images/music_player/34_player_list_thum_noitems.pngbin0 -> 106098 bytes
-rwxr-xr-xtarget_images/music_player/34_quicklist.pngbin0 -> 16067 bytes
-rwxr-xr-xtarget_images/music_player/34_rating_00.pngbin0 -> 828 bytes
-rwxr-xr-xtarget_images/music_player/34_rating_01.pngbin0 -> 999 bytes
-rwxr-xr-xtarget_images/music_player/34_rating_02.pngbin0 -> 961 bytes
-rwxr-xr-xtarget_images/music_player/34_rating_03.pngbin0 -> 912 bytes
-rwxr-xr-xtarget_images/music_player/34_rating_04.pngbin0 -> 868 bytes
-rwxr-xr-xtarget_images/music_player/34_rating_05.pngbin0 -> 600 bytes
-rwxr-xr-xtarget_images/music_player/34_recentlyadded.pngbin0 -> 15251 bytes
-rwxr-xr-xtarget_images/music_player/34_recentlyplayed.pngbin0 -> 17078 bytes
-rwxr-xr-xtarget_images/music_player/34_thumb_07.pngbin0 -> 136235 bytes
-rwxr-xr-xtarget_images/music_player/T02_Video_play.pngbin0 -> 7095 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_add.pngbin0 -> 3009 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_add_to_playlist.pngbin0 -> 3461 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_artist.pngbin0 -> 3827 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_cancel.pngbin0 -> 3426 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_delete.pngbin0 -> 3095 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_edit.pngbin0 -> 3305 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_playlists.pngbin0 -> 3145 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_search.pngbin0 -> 3515 bytes
-rwxr-xr-xtarget_images/music_player/T02_controlbar_icon_songs.pngbin0 -> 3428 bytes
-rwxr-xr-xtarget_images/music_player/T02_icon_soundPath.pngbin0 -> 4527 bytes
225 files changed, 41706 insertions, 0 deletions
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755
index 0000000..21e1f8c
--- /dev/null
+++ b/CMakeLists.txt
@@ -0,0 +1,157 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(music-player C)
+
+EXEC_PROGRAM(uname ARGS -m OUTPUT_VARIABLE CMAKE_SYSTEM_VERSION)
+message("Building by ${CMAKE_SYSTEM_VERSION} machine")
+
+SET(COMMON_SRCS
+ src/mp-main.c
+
+ src/core/mp-file-tag-info.c
+ src/core/mp-player-control.c
+ src/core/mp-player-mgr.c
+ src/core/mp-player-drm.c
+ src/core/mp-setting-ctrl.c
+ src/core/mp-play-list.c
+ src/core/mp-streaming-mgr.c
+
+ src/common/mp-common.c
+ src/common/mp-item.c
+ src/common/mp-menu.c
+ src/common/mp-widget.c
+ src/common/mp-util.c
+ src/common/mp-play.c
+ src/common/mp-app.c
+ src/common/mp-view-manager.c
+
+ src/view/mp-library.c
+ src/view/mp-track-view.c
+ src/view/mp-group-view.c
+ src/view/mp-playlist-view.c
+ src/view/mp-play-view.c
+ src/view/mp-edit-view.c
+
+ src/widget/mp-search.c
+ src/widget/mp-smart-event-box.c
+ src/widget/mp-popup.c
+ src/widget/mp-view-layout.c
+ src/core/mp-http-mgr.c
+)
+
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include
+ src/include
+ src/common/include
+ src/core/include
+ src/list/include
+ src/view/include
+ src/widget/include
+)
+
+SET(SRCS ${COMMON_SRCS} ${RICH_INFO_SRCS})
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+ appcore-efl
+ elementary
+ ecore
+ utilX
+ mm-player
+ mm-sound
+ libmedia-service
+ dlog
+ ui-gadget
+ mm-session
+ mm-fileinfo
+ syspopup-caller
+ pmapi
+ vconf
+ libxml-2.0
+ eina
+ ecore-imf
+ ecore-x
+ ecore-file
+ ecore-input
+ edje
+ appsvc
+ evas
+ devman_haptic
+ svi
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+ SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -DMACHINE_$ENV{MACHINE}")
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}")
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{FACTORYFS}\"")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+
+if("${CMAKE_SYSTEM_VERSION}" STREQUAL "arm")
+ADD_DEFINITIONS("-D__ARM__")
+endif()
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS})
+
+ADD_CUSTOM_TARGET(mp-custom-winset-style.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images/music_player
+ ${CMAKE_SOURCE_DIR}/layout/mp-custom-winset-style.edc ${CMAKE_BINARY_DIR}/layout/mp-custom-winset-style.edj
+ DEPENDS ${CMAKE_SOURCE_DIR}/layout/mp-custom-winset-style.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} mp-custom-winset-style.edj)
+
+ADD_CUSTOM_TARGET(mp-library.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images/music_player
+ ${CMAKE_SOURCE_DIR}/layout/mp-library.edc ${CMAKE_BINARY_DIR}/layout/mp-library.edj
+ DEPENDS ${CMAKE_SOURCE_DIR}/layout/mp-library.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} mp-library.edj)
+
+ADD_CUSTOM_TARGET(music.edj
+ COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/images/music_player
+ ${CMAKE_SOURCE_DIR}/layout/music.edc ${CMAKE_BINARY_DIR}/layout/music.edj
+ DEPENDS ${CMAKE_SOURCE_DIR}/layout/music.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} music.edj)
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+SET(RESDIR "${PREFIX}/res")
+SET(DATADIR "${PREFIX}/data")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(ICONDIR "${RESDIR}/icons/default/small")
+SET(EDJDIR "${RESDIR}/edje")
+
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+INSTALL(FILES ${CMAKE_BINARY_DIR}/layout/mp-custom-winset-style.edj DESTINATION ${EDJDIR})
+INSTALL(FILES ${CMAKE_BINARY_DIR}/layout/music.edj DESTINATION ${EDJDIR})
+INSTALL(FILES ${CMAKE_BINARY_DIR}/layout/mp-library.edj DESTINATION ${EDJDIR})
+INSTALL(FILES ${CMAKE_BINARY_DIR}/layout/mp-library.edj DESTINATION ${EDJDIR})
+INSTALL(FILES ${CMAKE_BINARY_DIR}/layout/music.edj DESTINATION ${EDJDIR})
+INSTALL(DIRECTORY DESTINATION ${DATADIR})
+
+# install desktop file & icon
+CONFIGURE_FILE(data/org.tizen.music-player.desktop.in org.tizen.music-player.desktop)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/org.tizen.music-player.desktop DESTINATION /opt/share/applications)
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/org.tizen.music-player.png DESTINATION ${ICONDIR})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/target_images/music_player DESTINATION ${RESDIR}/icons)
+
+# install menu icon
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/data/music-player.uri DESTINATION /opt/share/miregex)
+
+
+# i18n
+ADD_SUBDIRECTORY(po)
+#ADD_SUBDIRECTORY(data)
+
diff --git a/LICENSE b/LICENSE
new file mode 100755
index 0000000..7ccb5b5
--- /dev/null
+++ b/LICENSE
@@ -0,0 +1,75 @@
+Flora License
+
+Version 1.0, May, 2012
+
+http://www.tizenopensource.org/license
+
+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.
+
+"Tizen Certified Platform" shall mean a software platform that complies with the standards set forth in the Compatibility Definition Document and passes the Compatibility Test Suite as defined from time to time by the Tizen Technical Steering Group and certified by the Tizen Association or its designated agent.
+
+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 solely as incorporated into a Tizen Certified Platform, 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 solely as incorporated into a Tizen Certified Platform 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 pursuant to the copyright license above, in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+ 1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+ 2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+ 3. 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
+
+ 4. 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 Flora License to your work
+
+To apply the Flora 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 Flora License, Version 1.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.tizenopensource.org/license
+
+ 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.
diff --git a/NOTICE b/NOTICE
new file mode 100755
index 0000000..8b13789
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1 @@
+
diff --git a/data/music-player.uri b/data/music-player.uri
new file mode 100755
index 0000000..0c3707b
--- /dev/null
+++ b/data/music-player.uri
@@ -0,0 +1,2 @@
+(^( )*music-player:).*
+music player Shortcut Internal \ No newline at end of file
diff --git a/data/org.tizen.music-player.desktop.in b/data/org.tizen.music-player.desktop.in
new file mode 100755
index 0000000..f87bc8e
--- /dev/null
+++ b/data/org.tizen.music-player.desktop.in
@@ -0,0 +1,28 @@
+Name=Music
+Name[en_US]=Music
+Name[nl_NL]=Muziek
+Name[de_DE]=Musik
+Name[zh_HK]=音樂
+Name[zh_CN]=音乐
+Name[ru_RU]=Музыка
+Name[zh_TW]=音樂
+Name[ja_JP]=ミュージック
+Name[es_ES]=Música
+Name[el_GR]=Μουσική
+Name[it_IT]=Musica
+Name[tr_TR]=Müzik
+Name[pt_PT]=Música
+Name[fr_FR]=Musique
+Name[ko_KR]=음악
+Type=Application
+Exec=${PREFIX}/bin/music-player
+Icon=org.tizen.music-player.png
+Network=False
+Version=0.1.0
+Comment=music
+X-Tizen-TaskManage=True
+X-Tizen-Multiple=False
+X-Tizen-Removable=False
+MimeType=audio/x-flac; music-player.uri; audio/mpeg; audio/aac; audio/AMR; audio/AMR-WB; audio/ac3; audio/x-ms-wma; audio/ogg; audio/vorbis; audio/x-wav; audio/imelody; audio/iMelody; audio/rmf; audio/x-rmf; application/x-smaf; application/vnd.smaf; audio/x-xmf; audio/mobile-xmf; audio/mid; audio/vnd.ms-playready.media.pya; audio/imy; audio/m4a; audio/melody; audio/midi; audio/mmf; audio/mp3; audio/mp4; audio/MP4A-LATM; audio/mpeg3; audio/mpeg4; audio/mpg; audio/mpg3; audio/smaf; audio/sp-midi; audio/wav; audio/wave; audio/wma; audio/xmf; audio/amr; audio/amr-wb; audio/x-amr; audio/x-mid; audio/x-midi; audio/x-mp3; audio/-mpeg; audio/x-mpeg3; audio/x-mpegaudio; audio/x-mpg; audio/x-ms-asf; audio/x-wave; application/ogg;
+X-Tizen-SVC=http://tizen.org/appsvc/operation/view|NULL|audio/*;http://tizen.org/appsvc/operation/view|http|audio/*;http://tizen.org/appsvc/operation/view|https|audio/*
+Nodisplay=False
diff --git a/data/org.tizen.music-player.png b/data/org.tizen.music-player.png
new file mode 100755
index 0000000..0ea172e
--- /dev/null
+++ b/data/org.tizen.music-player.png
Binary files differ
diff --git a/debian/changelog b/debian/changelog
new file mode 100755
index 0000000..d73ab16
--- /dev/null
+++ b/debian/changelog
@@ -0,0 +1,9 @@
+music-player (0.1.3) unstable; urgency=low
+
+ * Git init
+ * Git: pkgs/m/music-player
+ * Tag: music-player_0.1.3
+
+ -- Hyungmin Kim <hm2007.kim@samsung.com> Thu, 22 Dec 2011 17:17:40 +0900
+
+
diff --git a/debian/compat b/debian/compat
new file mode 100755
index 0000000..7ed6ff8
--- /dev/null
+++ b/debian/compat
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100755
index 0000000..51f2d25
--- /dev/null
+++ b/debian/control
@@ -0,0 +1,44 @@
+Source: music-player
+Section: base
+Priority: extra
+Maintainer: Hyungmin Kim <hm2007.kim@samsung.com>, A-Ram Kim <aramie.kim@samsung.com>, He Jian <rocket.he@samsung.com>, Xie RongHua <ronghua.xie>, Tang Feng <feng.tang@samsung.com>, Byeongin Oh <quddls.oh@samsung.com>
+Uploaders:
+Build-Depends: libappcore-efl-dev,
+ libelm-dev,
+ libecore-dev,
+ libslp-utilx-dev,
+ libmm-player-dev,
+ libmm-sound-dev,
+ libmedia-service-dev,
+ libslp-setting-dev,
+ dlog-dev,
+ libui-gadget-dev,
+ libmm-session-sdk-dev,
+ libmm-fileinfo-dev,
+ syspopup-caller-dev,
+ libslp-pm-dev,
+ libeina-dev,
+ execstack,
+ libappsvc-dev,
+ libevas-dev,
+ libslp-utilx-dev,
+ libdevman-haptic-dev,
+ libsvi-dev,
+Standards-Version: 0.1.0
+Homepage: N/A
+
+Package: org.tizen.music-player
+Section: base
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: music player application
+Version: 0.1.0
+
+Package: org.tizen.music-player-dbg
+Section: debug
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}
+Description: music player application(unstripped)
+Version: 0.1.0
+
+
diff --git a/debian/debhelper.log b/debian/debhelper.log
new file mode 100644
index 0000000..4d88c32
--- /dev/null
+++ b/debian/debhelper.log
@@ -0,0 +1,2 @@
+dh_installdirs
+dh_installexamples
diff --git a/debian/org.tizen.music-player-dbg.install.in b/debian/org.tizen.music-player-dbg.install.in
new file mode 100755
index 0000000..2e079ba
--- /dev/null
+++ b/debian/org.tizen.music-player-dbg.install.in
@@ -0,0 +1,7 @@
+/opt/share/miregex/*
+/opt/share/applications/*
+@PREFIX@/bin/*
+@PREFIX@/res/locale/*
+@PREFIX@/res/icons/*
+@PREFIX@/res/edje/*
+@PREFIX@/data
diff --git a/debian/org.tizen.music-player.install.in b/debian/org.tizen.music-player.install.in
new file mode 100755
index 0000000..2e079ba
--- /dev/null
+++ b/debian/org.tizen.music-player.install.in
@@ -0,0 +1,7 @@
+/opt/share/miregex/*
+/opt/share/applications/*
+@PREFIX@/bin/*
+@PREFIX@/res/locale/*
+@PREFIX@/res/icons/*
+@PREFIX@/res/edje/*
+@PREFIX@/data
diff --git a/debian/org.tizen.music-player.postinst b/debian/org.tizen.music-player.postinst
new file mode 100755
index 0000000..2bece33
--- /dev/null
+++ b/debian/org.tizen.music-player.postinst
@@ -0,0 +1,79 @@
+#!/bin/sh
+
+if [ ${USER} = "root" ]
+then
+
+# 5000 is inhouse user id 5
+# do not use relative path 6 /usr/bin/vconftool set -t int db/setting/music-player/menu 7 -g 6514
+chown -R 5000:5000 /opt/apps/org.tizen.music-player/data
+
+/usr/bin/vconftool set -t int db/setting/music-player/menu 7 -g 6514
+
+/usr/bin/vconftool set -t bool db/setting/music-player/se_change 1 -g 6518
+/usr/bin/vconftool set -t bool db/setting/music-player/menu_change 1 -g 6518
+/usr/bin/vconftool set -t bool db/setting/music-player/surround_ch_state 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_val 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/effect_val 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_1 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_2 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_3 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_4 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_5 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_6 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_7 0 -g 6518
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_8 0 -g 6518
+
+/usr/bin/vconftool set -t int memory/music/state 0 -i -g 6518
+/usr/bin/vconftool set -t int memory/music/process_state 0 -i -g 6518
+/usr/bin/vconftool set -t int memory/music/album_art 0 -i -g 6518
+
+/usr/bin/vconftool set -t string memory/music/pos "00:00" -i -g 6518
+/usr/bin/vconftool set -t double memory/music/progress_pos 0.0 -i -g 6518
+/usr/bin/vconftool set -t bool memory/music/play_clicked 1 -i -g 6518
+/usr/bin/vconftool set -t bool memory/music/pause_clicked 1 -i -g 6518
+/usr/bin/vconftool set -t bool memory/music/prev_pressed 1 -i -g 6518
+/usr/bin/vconftool set -t bool memory/music/prev_released 1 -i -g 6518
+/usr/bin/vconftool set -t bool memory/music/next_pressed 1 -i -g 6518
+/usr/bin/vconftool set -t bool memory/music/next_released 1 -i -g 6518
+
+/usr/bin/vconftool set -t bool db/music/menu/shuffle 1 -i -g 6518
+/usr/bin/vconftool set -t int db/music/menu/repeat 0 -i -g 6518
+
+
+else
+
+/usr/bin/vconftool set -t int db/setting/music-player/menu 7
+
+/usr/bin/vconftool set -t bool db/setting/music-player/se_change 1
+/usr/bin/vconftool set -t bool db/setting/music-player/menu_change 1
+/usr/bin/vconftool set -t bool db/setting/music-player/surround_ch_state 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_val 0
+/usr/bin/vconftool set -t int db/setting/music-player/effect_val 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_1 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_2 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_3 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_4 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_5 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_6 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_7 0
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_8 0
+
+/usr/bin/vconftool set -t int memory/music/state 0
+/usr/bin/vconftool set -t int memory/music/process_state 0
+/usr/bin/vconftool set -t int memory/music/album_art 0
+
+/usr/bin/vconftool set -t string memory/music/pos "00:00"
+/usr/bin/vconftool set -t double memory/music/progress_pos 0.0
+/usr/bin/vconftool set -t bool memory/music/play_clicked 1
+/usr/bin/vconftool set -t bool memory/music/pause_clicked 1
+/usr/bin/vconftool set -t bool memory/music/prev_pressed 1
+/usr/bin/vconftool set -t bool memory/music/prev_released 1
+/usr/bin/vconftool set -t bool memory/music/next_pressed 1
+/usr/bin/vconftool set -t bool memory/music/next_released 1
+
+/usr/bin/vconftool set -t bool db/music/menu/shuffle 1
+/usr/bin/vconftool set -t int db/music/menu/repeat 0
+
+fi
+
+
diff --git a/debian/rules b/debian/rules
new file mode 100755
index 0000000..72eea56
--- /dev/null
+++ b/debian/rules
@@ -0,0 +1,134 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+CFLAGS += -Wall -g
+CXXFLAGS += -Wall -g
+LDFLAGS +=
+
+PREFIX ?= /opt/apps/org.tizen.music-player
+RESDIR ?= /opt/apps/org.tizen.music-player/res
+DATADIR ?= /opt/apps/org.tizen.music-player/data
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+ CFLAGS += -O0
+ CXXFLAGS += -O0
+else
+ CFLAGS += -O2
+ CXXFLAGS += -O2
+endif
+
+CFLAGS += -fpie
+LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed -pie
+
+configure: configure-stamp
+configure-stamp:
+ dh_testdir
+ # Add here commands to configure the package.
+ CFLAGS="$(CFLAGS)" CXXFLAGS="$(CXXFLAGS)" LDFLAGS="$(LDFLAGS)" cmake . -DCMAKE_INSTALL_PREFIX=$(PREFIX)
+
+ touch configure-stamp
+
+build: build-stamp
+
+build-stamp: configure-stamp
+ dh_testdir
+
+ # Add here commands to compile the package.
+ $(MAKE)
+ #docbook-to-man debian/wavplayer.sgml > wavplayer.1
+
+ for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+ cat $$f > $${f%.in}; \
+ sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
+ sed -i -e "s#@RESDIR@#$(RESDIR)#g" $${f%.in}; \
+ sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
+ done
+
+
+ touch $@
+
+clean:
+ dh_testdir
+ dh_testroot
+ rm -f build-stamp configure-stamp
+
+ # Add here commands to clean up after the build process.
+ -$(MAKE) clean
+ rm -rf CMakeCache.txt
+ rm -rf CMakeFiles
+ rm -rf cmake_install.cmake
+ rm -rf Makefile
+ rm -rf install_manifest.txt
+
+ rm -rf *.so
+ rm -rf *.edj
+ rm -rf SettingData/*.edj
+ rm -rf layout/*.edj
+ rm -rf po/CMakeFiles po/Makefile po/cmake_install.cmake
+ rm -rf po/*.mo
+ rm -rf data/CMakeFiles data/Makefile data/cmake_install.cmake
+ rm -rf org.tizen.music-player.desktop
+
+ for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+ rm -f $${f%.in}; \
+ done
+
+ dh_clean
+
+install: build
+ dh_testdir
+ dh_testroot
+ dh_clean -k
+ dh_installdirs
+
+ # Add here commands to install the package into debian/wavplayer.
+ $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
+ execstack -c $(CURDIR)/debian/tmp/opt/apps/org.tizen.music-player/bin/music-player
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+ dh_testdir
+ dh_testroot
+# dh_installchangelogs
+# dh_installdocs
+ dh_installexamples
+ dh_install --sourcedir=debian/tmp
+# dh_installmenu
+# dh_installdebconf
+# dh_installlogrotate
+# dh_installemacsen
+# dh_installpam
+# dh_installmime
+# dh_python
+# dh_installinit
+# dh_installcron
+# dh_installinfo
+ dh_installman
+ dh_link
+# dh_strip
+ dh_strip --dbg-package=org.tizen.music-player-dbg
+ dh_compress
+ dh_fixperms
+# dh_perl
+ dh_makeshlibs
+ dh_installdeb
+ dh_shlibdeps
+ dh_gencontrol
+ dh_md5sums
+ dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/images/music_player/00_EditField_clear.png b/images/music_player/00_EditField_clear.png
new file mode 100755
index 0000000..79b89f1
--- /dev/null
+++ b/images/music_player/00_EditField_clear.png
Binary files differ
diff --git a/images/music_player/00_Option_header_bt.png b/images/music_player/00_Option_header_bt.png
new file mode 100755
index 0000000..98cc843
--- /dev/null
+++ b/images/music_player/00_Option_header_bt.png
Binary files differ
diff --git a/images/music_player/00_Option_header_bt_dim.png b/images/music_player/00_Option_header_bt_dim.png
new file mode 100755
index 0000000..6de8b93
--- /dev/null
+++ b/images/music_player/00_Option_header_bt_dim.png
Binary files differ
diff --git a/images/music_player/00_Option_header_bt_press.png b/images/music_player/00_Option_header_bt_press.png
new file mode 100755
index 0000000..843ee7a
--- /dev/null
+++ b/images/music_player/00_Option_header_bt_press.png
Binary files differ
diff --git a/images/music_player/00_list_bar_press_1x80.png b/images/music_player/00_list_bar_press_1x80.png
new file mode 100755
index 0000000..1dc6e15
--- /dev/null
+++ b/images/music_player/00_list_bar_press_1x80.png
Binary files differ
diff --git a/images/music_player/00_winset_Back_btn_normal.png b/images/music_player/00_winset_Back_btn_normal.png
new file mode 100755
index 0000000..cb7ca0b
--- /dev/null
+++ b/images/music_player/00_winset_Back_btn_normal.png
Binary files differ
diff --git a/images/music_player/00_winset_Back_btn_press.png b/images/music_player/00_winset_Back_btn_press.png
new file mode 100755
index 0000000..7032b70
--- /dev/null
+++ b/images/music_player/00_winset_Back_btn_press.png
Binary files differ
diff --git a/images/music_player/00_winset_control_toolbar_bg.png b/images/music_player/00_winset_control_toolbar_bg.png
new file mode 100755
index 0000000..c9a05aa
--- /dev/null
+++ b/images/music_player/00_winset_control_toolbar_bg.png
Binary files differ
diff --git a/images/music_player/00_winset_control_top_arrow.png b/images/music_player/00_winset_control_top_arrow.png
new file mode 100755
index 0000000..2d0503d
--- /dev/null
+++ b/images/music_player/00_winset_control_top_arrow.png
Binary files differ
diff --git a/images/music_player/00_winset_control_top_bg.png b/images/music_player/00_winset_control_top_bg.png
new file mode 100755
index 0000000..187516e
--- /dev/null
+++ b/images/music_player/00_winset_control_top_bg.png
Binary files differ
diff --git a/images/music_player/00_winset_tabbar_focus.png b/images/music_player/00_winset_tabbar_focus.png
new file mode 100755
index 0000000..edcb394
--- /dev/null
+++ b/images/music_player/00_winset_tabbar_focus.png
Binary files differ
diff --git a/images/music_player/00_winset_tabbar_focus_left.png b/images/music_player/00_winset_tabbar_focus_left.png
new file mode 100755
index 0000000..28b7d8d
--- /dev/null
+++ b/images/music_player/00_winset_tabbar_focus_left.png
Binary files differ
diff --git a/images/music_player/00_winset_tabbar_focus_right.png b/images/music_player/00_winset_tabbar_focus_right.png
new file mode 100755
index 0000000..7e1163d
--- /dev/null
+++ b/images/music_player/00_winset_tabbar_focus_right.png
Binary files differ
diff --git a/images/music_player/00_winset_tabbar_press.png b/images/music_player/00_winset_tabbar_press.png
new file mode 100755
index 0000000..3156216
--- /dev/null
+++ b/images/music_player/00_winset_tabbar_press.png
Binary files differ
diff --git a/images/music_player/00_winset_tabbar_press_left.png b/images/music_player/00_winset_tabbar_press_left.png
new file mode 100755
index 0000000..bbbd3dd
--- /dev/null
+++ b/images/music_player/00_winset_tabbar_press_left.png
Binary files differ
diff --git a/images/music_player/00_winset_tabbar_press_right.png b/images/music_player/00_winset_tabbar_press_right.png
new file mode 100755
index 0000000..a1e1d7a
--- /dev/null
+++ b/images/music_player/00_winset_tabbar_press_right.png
Binary files differ
diff --git a/images/music_player/00_winset_toolbar_press.png b/images/music_player/00_winset_toolbar_press.png
new file mode 100755
index 0000000..172f666
--- /dev/null
+++ b/images/music_player/00_winset_toolbar_press.png
Binary files differ
diff --git a/images/music_player/01_list_reorder_bg_above.png b/images/music_player/01_list_reorder_bg_above.png
new file mode 100755
index 0000000..e28d15b
--- /dev/null
+++ b/images/music_player/01_list_reorder_bg_above.png
Binary files differ
diff --git a/images/music_player/01_list_reorder_bg_below.png b/images/music_player/01_list_reorder_bg_below.png
new file mode 100755
index 0000000..7c59977
--- /dev/null
+++ b/images/music_player/01_list_reorder_bg_below.png
Binary files differ
diff --git a/images/music_player/01_list_selectall_bg.png b/images/music_player/01_list_selectall_bg.png
new file mode 100755
index 0000000..7f21fd9
--- /dev/null
+++ b/images/music_player/01_list_selectall_bg.png
Binary files differ
diff --git a/images/music_player/01_search_button.png b/images/music_player/01_search_button.png
new file mode 100755
index 0000000..4367026
--- /dev/null
+++ b/images/music_player/01_search_button.png
Binary files differ
diff --git a/images/music_player/01_search_input_bg.png b/images/music_player/01_search_input_bg.png
new file mode 100755
index 0000000..f0cd0ef
--- /dev/null
+++ b/images/music_player/01_search_input_bg.png
Binary files differ
diff --git a/images/music_player/01_search_input_field_bg_c.png b/images/music_player/01_search_input_field_bg_c.png
new file mode 100755
index 0000000..f26921e
--- /dev/null
+++ b/images/music_player/01_search_input_field_bg_c.png
Binary files differ
diff --git a/images/music_player/01_search_input_field_bg_l.png b/images/music_player/01_search_input_field_bg_l.png
new file mode 100755
index 0000000..5071e4a
--- /dev/null
+++ b/images/music_player/01_search_input_field_bg_l.png
Binary files differ
diff --git a/images/music_player/01_search_input_field_bg_r.png b/images/music_player/01_search_input_field_bg_r.png
new file mode 100755
index 0000000..f26914e
--- /dev/null
+++ b/images/music_player/01_search_input_field_bg_r.png
Binary files differ
diff --git a/images/music_player/12_music_player_bg_01.PNG b/images/music_player/12_music_player_bg_01.PNG
new file mode 100755
index 0000000..8a2e8d0
--- /dev/null
+++ b/images/music_player/12_music_player_bg_01.PNG
Binary files differ
diff --git a/images/music_player/34_header_thumb_bg.png b/images/music_player/34_header_thumb_bg.png
new file mode 100755
index 0000000..61614c5
--- /dev/null
+++ b/images/music_player/34_header_thumb_bg.png
Binary files differ
diff --git a/images/music_player/T02_OptionHeader_btn_press.png b/images/music_player/T02_OptionHeader_btn_press.png
new file mode 100755
index 0000000..6fce607
--- /dev/null
+++ b/images/music_player/T02_OptionHeader_btn_press.png
Binary files differ
diff --git a/images/music_player/T02_Option_header_bt.png b/images/music_player/T02_Option_header_bt.png
new file mode 100755
index 0000000..35ccb75
--- /dev/null
+++ b/images/music_player/T02_Option_header_bt.png
Binary files differ
diff --git a/images/music_player/T02_Option_header_bt_press.png b/images/music_player/T02_Option_header_bt_press.png
new file mode 100755
index 0000000..f7d2779
--- /dev/null
+++ b/images/music_player/T02_Option_header_bt_press.png
Binary files differ
diff --git a/images/music_player/T02_Page_bg.png b/images/music_player/T02_Page_bg.png
new file mode 100755
index 0000000..74c4621
--- /dev/null
+++ b/images/music_player/T02_Page_bg.png
Binary files differ
diff --git a/images/music_player/T02_Play_btn__play.png b/images/music_player/T02_Play_btn__play.png
new file mode 100755
index 0000000..a48d818
--- /dev/null
+++ b/images/music_player/T02_Play_btn__play.png
Binary files differ
diff --git a/images/music_player/T02_Play_btn__play_press.png b/images/music_player/T02_Play_btn__play_press.png
new file mode 100755
index 0000000..f60e1d9
--- /dev/null
+++ b/images/music_player/T02_Play_btn__play_press.png
Binary files differ
diff --git a/images/music_player/T02_Play_btn_next.png b/images/music_player/T02_Play_btn_next.png
new file mode 100755
index 0000000..be1b9f3
--- /dev/null
+++ b/images/music_player/T02_Play_btn_next.png
Binary files differ
diff --git a/images/music_player/T02_Play_btn_next_press.png b/images/music_player/T02_Play_btn_next_press.png
new file mode 100755
index 0000000..453e823
--- /dev/null
+++ b/images/music_player/T02_Play_btn_next_press.png
Binary files differ
diff --git a/images/music_player/T02_Play_btn_pause.png b/images/music_player/T02_Play_btn_pause.png
new file mode 100755
index 0000000..c1baadd
--- /dev/null
+++ b/images/music_player/T02_Play_btn_pause.png
Binary files differ
diff --git a/images/music_player/T02_Play_btn_pause_press.png b/images/music_player/T02_Play_btn_pause_press.png
new file mode 100755
index 0000000..9302981
--- /dev/null
+++ b/images/music_player/T02_Play_btn_pause_press.png
Binary files differ
diff --git a/images/music_player/T02_Play_btn_previou_press.png b/images/music_player/T02_Play_btn_previou_press.png
new file mode 100755
index 0000000..ea1b859
--- /dev/null
+++ b/images/music_player/T02_Play_btn_previou_press.png
Binary files differ
diff --git a/images/music_player/T02_Play_btn_previous.png b/images/music_player/T02_Play_btn_previous.png
new file mode 100755
index 0000000..656e92d
--- /dev/null
+++ b/images/music_player/T02_Play_btn_previous.png
Binary files differ
diff --git a/images/music_player/T02_Video_play.png b/images/music_player/T02_Video_play.png
new file mode 100755
index 0000000..d302435
--- /dev/null
+++ b/images/music_player/T02_Video_play.png
Binary files differ
diff --git a/images/music_player/T02_btn_Back.png b/images/music_player/T02_btn_Back.png
new file mode 100755
index 0000000..d708747
--- /dev/null
+++ b/images/music_player/T02_btn_Back.png
Binary files differ
diff --git a/images/music_player/T02_control_top_arrow.png b/images/music_player/T02_control_top_arrow.png
new file mode 100755
index 0000000..c98a745
--- /dev/null
+++ b/images/music_player/T02_control_top_arrow.png
Binary files differ
diff --git a/images/music_player/T02_control_top_bg.png b/images/music_player/T02_control_top_bg.png
new file mode 100755
index 0000000..187516e
--- /dev/null
+++ b/images/music_player/T02_control_top_bg.png
Binary files differ
diff --git a/images/music_player/T02_controller_btn.png b/images/music_player/T02_controller_btn.png
new file mode 100755
index 0000000..4db7a11
--- /dev/null
+++ b/images/music_player/T02_controller_btn.png
Binary files differ
diff --git a/images/music_player/T02_controller_btn_press.png b/images/music_player/T02_controller_btn_press.png
new file mode 100755
index 0000000..4069b0f
--- /dev/null
+++ b/images/music_player/T02_controller_btn_press.png
Binary files differ
diff --git a/images/music_player/T02_controls_bg_shadow.png b/images/music_player/T02_controls_bg_shadow.png
new file mode 100755
index 0000000..154ef27
--- /dev/null
+++ b/images/music_player/T02_controls_bg_shadow.png
Binary files differ
diff --git a/images/music_player/T02_navigation_tabbar_bg.png b/images/music_player/T02_navigation_tabbar_bg.png
new file mode 100755
index 0000000..2a438eb
--- /dev/null
+++ b/images/music_player/T02_navigation_tabbar_bg.png
Binary files differ
diff --git a/images/music_player/T02_navigation_tabbar_focus.png b/images/music_player/T02_navigation_tabbar_focus.png
new file mode 100755
index 0000000..83acab7
--- /dev/null
+++ b/images/music_player/T02_navigation_tabbar_focus.png
Binary files differ
diff --git a/images/music_player/T02_nocomposers.png b/images/music_player/T02_nocomposers.png
new file mode 100755
index 0000000..e070abc
--- /dev/null
+++ b/images/music_player/T02_nocomposers.png
Binary files differ
diff --git a/images/music_player/T02_now_playing_bar.png b/images/music_player/T02_now_playing_bar.png
new file mode 100755
index 0000000..d9360d5
--- /dev/null
+++ b/images/music_player/T02_now_playing_bar.png
Binary files differ
diff --git a/images/music_player/T02_now_playing_icon_pause.png b/images/music_player/T02_now_playing_icon_pause.png
new file mode 100755
index 0000000..7e7fbb7
--- /dev/null
+++ b/images/music_player/T02_now_playing_icon_pause.png
Binary files differ
diff --git a/images/music_player/T02_now_playing_icon_play.png b/images/music_player/T02_now_playing_icon_play.png
new file mode 100755
index 0000000..df51d77
--- /dev/null
+++ b/images/music_player/T02_now_playing_icon_play.png
Binary files differ
diff --git a/images/music_player/T02_now_playing_progress_bar.png b/images/music_player/T02_now_playing_progress_bar.png
new file mode 100755
index 0000000..2e874b0
--- /dev/null
+++ b/images/music_player/T02_now_playing_progress_bar.png
Binary files differ
diff --git a/images/music_player/T02_now_playing_progress_bg.png b/images/music_player/T02_now_playing_progress_bg.png
new file mode 100755
index 0000000..d319590
--- /dev/null
+++ b/images/music_player/T02_now_playing_progress_bg.png
Binary files differ
diff --git a/images/music_player/T02_option_bg.png b/images/music_player/T02_option_bg.png
new file mode 100755
index 0000000..324d748
--- /dev/null
+++ b/images/music_player/T02_option_bg.png
Binary files differ
diff --git a/images/music_player/T02_option_favorite_off.png b/images/music_player/T02_option_favorite_off.png
new file mode 100755
index 0000000..31be2bd
--- /dev/null
+++ b/images/music_player/T02_option_favorite_off.png
Binary files differ
diff --git a/images/music_player/T02_option_favorite_on.png b/images/music_player/T02_option_favorite_on.png
new file mode 100755
index 0000000..6db11a2
--- /dev/null
+++ b/images/music_player/T02_option_favorite_on.png
Binary files differ
diff --git a/images/music_player/T02_option_rep_1.png b/images/music_player/T02_option_rep_1.png
new file mode 100755
index 0000000..98223ea
--- /dev/null
+++ b/images/music_player/T02_option_rep_1.png
Binary files differ
diff --git a/images/music_player/T02_option_rep_A.png b/images/music_player/T02_option_rep_A.png
new file mode 100755
index 0000000..7e8d7e2
--- /dev/null
+++ b/images/music_player/T02_option_rep_A.png
Binary files differ
diff --git a/images/music_player/T02_option_rep_all.png b/images/music_player/T02_option_rep_all.png
new file mode 100755
index 0000000..f24be63
--- /dev/null
+++ b/images/music_player/T02_option_rep_all.png
Binary files differ
diff --git a/images/music_player/T02_option_shuffle_off.png b/images/music_player/T02_option_shuffle_off.png
new file mode 100755
index 0000000..0053b4c
--- /dev/null
+++ b/images/music_player/T02_option_shuffle_off.png
Binary files differ
diff --git a/images/music_player/T02_option_shuffle_on.png b/images/music_player/T02_option_shuffle_on.png
new file mode 100755
index 0000000..b8c9015
--- /dev/null
+++ b/images/music_player/T02_option_shuffle_on.png
Binary files differ
diff --git a/images/music_player/T02_player_progress_bar.png b/images/music_player/T02_player_progress_bar.png
new file mode 100755
index 0000000..2f25452
--- /dev/null
+++ b/images/music_player/T02_player_progress_bar.png
Binary files differ
diff --git a/images/music_player/T02_player_progress_bg.png b/images/music_player/T02_player_progress_bg.png
new file mode 100755
index 0000000..58d94cc
--- /dev/null
+++ b/images/music_player/T02_player_progress_bg.png
Binary files differ
diff --git a/images/music_player/T02_player_progress_point.png b/images/music_player/T02_player_progress_point.png
new file mode 100755
index 0000000..f169c5d
--- /dev/null
+++ b/images/music_player/T02_player_progress_point.png
Binary files differ
diff --git a/images/music_player/T02_title_bg.png b/images/music_player/T02_title_bg.png
new file mode 100755
index 0000000..9ad357f
--- /dev/null
+++ b/images/music_player/T02_title_bg.png
Binary files differ
diff --git a/images/music_player/T02_toolbar_press.png b/images/music_player/T02_toolbar_press.png
new file mode 100755
index 0000000..98698f3
--- /dev/null
+++ b/images/music_player/T02_toolbar_press.png
Binary files differ
diff --git a/images/music_player/T02_volume.png b/images/music_player/T02_volume.png
new file mode 100755
index 0000000..7014c1b
--- /dev/null
+++ b/images/music_player/T02_volume.png
Binary files differ
diff --git a/images/music_player/T02_winset_btn_Back.png b/images/music_player/T02_winset_btn_Back.png
new file mode 100755
index 0000000..d708747
--- /dev/null
+++ b/images/music_player/T02_winset_btn_Back.png
Binary files differ
diff --git a/images/music_player/copy&paste_Icon_left.png b/images/music_player/copy&paste_Icon_left.png
new file mode 100755
index 0000000..ccb6b09
--- /dev/null
+++ b/images/music_player/copy&paste_Icon_left.png
Binary files differ
diff --git a/images/music_player/copy&paste_Icon_left_press.png b/images/music_player/copy&paste_Icon_left_press.png
new file mode 100755
index 0000000..0661a0b
--- /dev/null
+++ b/images/music_player/copy&paste_Icon_left_press.png
Binary files differ
diff --git a/images/music_player/copy&paste_Icon_left_top.png b/images/music_player/copy&paste_Icon_left_top.png
new file mode 100755
index 0000000..ebe24a4
--- /dev/null
+++ b/images/music_player/copy&paste_Icon_left_top.png
Binary files differ
diff --git a/images/music_player/copy&paste_Icon_left_top_press.png b/images/music_player/copy&paste_Icon_left_top_press.png
new file mode 100755
index 0000000..b715059
--- /dev/null
+++ b/images/music_player/copy&paste_Icon_left_top_press.png
Binary files differ
diff --git a/images/music_player/copy&paste_Icon_right.png b/images/music_player/copy&paste_Icon_right.png
new file mode 100755
index 0000000..c658e9e
--- /dev/null
+++ b/images/music_player/copy&paste_Icon_right.png
Binary files differ
diff --git a/images/music_player/copy&paste_Icon_right_press.png b/images/music_player/copy&paste_Icon_right_press.png
new file mode 100755
index 0000000..3e33af7
--- /dev/null
+++ b/images/music_player/copy&paste_Icon_right_press.png
Binary files differ
diff --git a/images/music_player/copy&paste_Icon_right_top.png b/images/music_player/copy&paste_Icon_right_top.png
new file mode 100755
index 0000000..300eebc
--- /dev/null
+++ b/images/music_player/copy&paste_Icon_right_top.png
Binary files differ
diff --git a/images/music_player/copy&paste_Icon_right_top_press.png b/images/music_player/copy&paste_Icon_right_top_press.png
new file mode 100755
index 0000000..1dc1ad1
--- /dev/null
+++ b/images/music_player/copy&paste_Icon_right_top_press.png
Binary files differ
diff --git a/images/music_player/music_icon_mute.png b/images/music_player/music_icon_mute.png
new file mode 100755
index 0000000..e92f376
--- /dev/null
+++ b/images/music_player/music_icon_mute.png
Binary files differ
diff --git a/images/music_player/music_player_bg.PNG b/images/music_player/music_player_bg.PNG
new file mode 100755
index 0000000..611a7b7
--- /dev/null
+++ b/images/music_player/music_player_bg.PNG
Binary files differ
diff --git a/images/music_player/music_popup_mute.png b/images/music_player/music_popup_mute.png
new file mode 100755
index 0000000..32f447c
--- /dev/null
+++ b/images/music_player/music_popup_mute.png
Binary files differ
diff --git a/images/music_player/separator_h.png b/images/music_player/separator_h.png
new file mode 100644
index 0000000..0823fbc
--- /dev/null
+++ b/images/music_player/separator_h.png
Binary files differ
diff --git a/images/music_player/separator_v.png b/images/music_player/separator_v.png
new file mode 100644
index 0000000..cd1b018
--- /dev/null
+++ b/images/music_player/separator_v.png
Binary files differ
diff --git a/layout/mp-button.edc b/layout/mp-button.edc
new file mode 100755
index 0000000..55c2f32
--- /dev/null
+++ b/layout/mp-button.edc
@@ -0,0 +1,1774 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+#define BUTTON_STATE_ENABLED 0
+#define BUTTON_STATE_DISABLED 1
+
+#define BUTTON_NAVIBAR_FUNCTION_BUTTON_TEXT_NORMAL_COLOR_INC 146 124 98 255
+#define BUTTON_NAVIBAR_FUNCTION_BUTTON_TEXT_PRESSED_COLOR_INC 217 147 26 255
+#define BUTTON_NAVIBAR_FUNCTION_BUTTON_TEXT_FOCUSED_COLOR_INC 217 147 26 255
+#define BUTTON_NAVIBAR_FUNCTION_BUTTON_TEXT_DISABLED_COLOR_INC 160 151 145 255
+
+#define BUTTON_NAVIBAR_CENTER_BG_NORMAL_MIN_W_INC 36
+#define BUTTON_NAVIBAR_CENTER_BG_NORMAL_MIN_H_INC 74
+#define BUTTON_NAVIBAR_CENTER_BG_NORMAL_BORDER_INC 4 4 4 4 /*if boder is 5 5 5 5, button is not preperly displayed... */
+#define BUTTON_NAVIBAR_CENTER_PADDING_MIN_MAX_INC 16 2
+#define BUTTON_NAVIBAR_CENTER_ICON_RECT_VISIBLE_MIN_SIZE 36 36
+#define BUTTON_NAVIBAR_CENTER_PADDING_AFTER_ICON_VISIBLE_MIN_INC 6 0
+#define BUTTON_NAVIBAR_CENTER_PADDING_BEFORE_TEXT_DEFAULT_MIN_INC 6 0
+#define BUTTON_NAVIBAR_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC 36 36
+#define BUTTON_NAVIBAR_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC 38 38
+#define BUTTON_NAVIBAR_CENTER_TEXT_FONT_SIZE_INC 32
+#define BUTTON_NAVIBAR_MULTILINE_TEXT_FONT_SIZE_INC 24
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC 106 74
+#define BUTTON_NAVIFRAME_BACK_BUTTON_BG_BORDER_INC 5 5 5 5
+#define BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC 56 56
+
+ //2 define custom style here..
+
+#define MP_TITLE_RIGHT_SEPARATOR_COLOR_INC 52 52 52 255
+#define MP_TITLE_LEFT_SEPARATOR_COLOR_INC 3 3 3 255
+
+///////////////////////////////////////////////////////////////////////////////////////
+ group { name: "elm/button/base/music/navigationbar_next_btn/default";
+ //TODO: remove alias later.
+ alias: "elm/button/base/navigationbar_functionbutton/default";
+ script {
+ public button_state = BUTTON_STATE_ENABLED;
+ }
+ parts {
+ part { name: "button_image";
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 16 50;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part {
+ name: "padding_left";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 0.0 1.0;
+ min: 2 2;
+ fixed: 1 0;
+ color: 0 0 0 0;
+ }
+ }
+ part {name: "padding_after_right";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1 0;
+ min: 1 0;
+ rel1 { relative: 1 0.2; }
+ rel2 { relative: 1 0.8; }
+ fixed: 1 0;
+ color: MP_TITLE_RIGHT_SEPARATOR_COLOR_INC;
+ }
+ }
+ part {name: "padding_right";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1 0;
+ min: 1 0;
+ rel1 { relative: 0 0; to: "padding_after_right"; }
+ rel2 { relative: 0 1; to: "padding_after_right"; }
+ fixed: 1 0;
+ color: MP_TITLE_LEFT_SEPARATOR_COLOR_INC;
+ }
+ }
+ part {
+ name: "padding_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 0.0;
+ min: 2 2;
+ fixed: 0 1;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 0.0 1.0;
+ rel2.relative: 1.0 1.0;
+ min: 2 2;
+ fixed: 0 1;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 40;
+ fixed: 1 0;
+ rel1 { relative: 0.0 1.0; to_x: "elm.swallow.content"; to_y: "padding_top"; }
+ rel2 { relative: 1.0 0.0; to_x: "elm.swallow.content"; to_y: "padding_bottom"; }
+ align: 0.0 0.5;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "padding_icon_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.0 0.0;
+ rel1 { relative: 1.0 0.0; to: "icon_rect"; }
+ rel2 { relative: 1.0 1.0; to: "icon_rect"; }
+ fixed: 1 0;
+ min: 0 0;
+ color: 0 0 0 0;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "visible" 0.0; //when icon is visible
+ align: 0.0 0.0;
+ rel1 { relative: 1.0 0.0; to: "icon_rect"; }
+ rel2 { relative: 1.0 1.0; to: "icon_rect"; }
+ fixed: 1 0;
+ min: 5 0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 { relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 { relative: 1.0 0.0; to_x: "padding_left"; to_y: "padding_bottom"; }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ visible: 1;
+ align: 0.0 0.5;
+ rel1 { relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 { relative: 1.0 0.0; to_x: "padding_left"; to_y: "padding_bottom"; }
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ }
+ description { state: "icononly" 0.0;
+ visible: 1;
+ min: 40 40;
+ rel1 { relative: 1.0 1.0; to_x: "padding_left"; to_y: "padding_top"; }
+ rel2 { relative: 0.0 0.0; to_x: "padding_right"; to_y: "padding_bottom"; }
+ align: 0.5 0.5;
+ 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;
+ rel1 { relative: 1.0 1.0; to_x: "padding_icon_text"; to_y: "padding_top"; }
+ rel2 { relative: 0.0 0.0; to_x: "padding_right"; to_y:"padding_bottom"; }
+ align: 0.5 0.5;
+ color: BUTTON_NAVIBAR_FUNCTION_BUTTON_TEXT_NORMAL_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: 20;
+ min: 0 0;
+ align: 0.5 0.5;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 80 40;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: BUTTON_NAVIBAR_FUNCTION_BUTTON_TEXT_PRESSED_COLOR_INC;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 128;
+ }
+ description { state: "disabled_visible" 0.0;
+ inherit: "default" 0.0;
+ color: BUTTON_NAVIBAR_FUNCTION_BUTTON_TEXT_DISABLED_COLOR_INC;
+ visible: 1;
+ min: 80 40;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: BUTTON_NAVIBAR_FUNCTION_BUTTON_TEXT_FOCUSED_COLOR_INC;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "disabler";
+ 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: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if(get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "button_click2";
+ signal: "mouse,down,1";
+ source: "over3";
+ action: STATE_SET "clicked" 0.0;
+ target: "over3";
+ }
+ program { name: "button_unclick2";
+ signal: "mouse,clicked,1";
+ source: "over3";
+ action: STATE_SET "default" 0.0;
+ target: "over3";
+ }
+ program { name: "button_unclick3";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ if(get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "over2";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "disabled_visible", 0.0);
+ else
+ set_state(PART:"elm.text", "disabled", 0.0);
+ set_int(button_state, BUTTON_STATE_DISABLED);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "over2";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "disabled_visible"))
+ set_state(PART:"elm.text", "visible", 0.0);
+ else
+ set_state(PART:"elm.text", "default", 0.0);
+ set_int(button_state, BUTTON_STATE_ENABLED);
+ }
+ }
+ program { name: "focused";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
+ group { name: "elm/button/base/music/navigationbar_control/multiline";
+ script {
+ public button_state = BUTTON_STATE_ENABLED;
+ }
+ images.image: "T02_Option_header_bt.png" COMP;
+ images.image: "T02_Option_header_bt_press.png" COMP;
+ styles{
+ style { name: "btn_multiline_navigationbar_controlbar_style";
+ base: "font=SLP:style=Medium font_size="BUTTON_NAVIBAR_MULTILINE_TEXT_FONT_SIZE_INC" align=center color=#ffffff wrap=mixed";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ }
+ }
+ parts {
+ part { name: "button_image";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: BUTTON_NAVIBAR_CENTER_BG_NORMAL_MIN_W_INC BUTTON_NAVIBAR_CENTER_BG_NORMAL_MIN_H_INC;
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ image.normal: "T02_Option_header_bt.png";
+ image.border: BUTTON_NAVIBAR_CENTER_BG_NORMAL_BORDER_INC;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 51;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "T02_Option_header_bt_press.png";
+ }
+ }
+ part {
+ name: "padding_left_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ }
+ min: BUTTON_NAVIBAR_CENTER_PADDING_MIN_MAX_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part {
+ name: "padding_right_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ min: BUTTON_NAVIBAR_CENTER_PADDING_MIN_MAX_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part {
+ name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.swallow.content";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "elm.swallow.content";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ }
+ part {
+ name: "padding_icon_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ visible: 0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "icon_rect";
+ }
+ fixed: 1 0;
+ min: 0 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_NAVIBAR_CENTER_PADDING_AFTER_ICON_VISIBLE_MIN_INC;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "icon_rect";
+ }
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ visible: 1;
+ min: BUTTON_NAVIBAR_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC;
+ max: BUTTON_NAVIBAR_CENTER_SWALLOW_VISIBLE_MIN_MAX_INC;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ }
+ description { state: "icononly" 0.0;
+ visible: 1;
+ min: BUTTON_NAVIBAR_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC;
+ max: BUTTON_NAVIBAR_CENTER_SWALLOW_ICONONLY_MIN_MAX_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ align: 0.5 0.5;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_icon_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ align: 0.5 0.5;
+ color: 255 255 255 255;
+ text {
+ style: "btn_multiline_navigationbar_controlbar_style";
+ min: 0 0;
+ max: 0 1;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 80 0;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 127;
+ }
+ }
+ part { name: "disabler";
+ 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: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if(get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "button_unclick3";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ target: "padding_icon_text";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "clipper";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ set_int(button_state, BUTTON_STATE_DISABLED);
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "clipper";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ set_int(button_state, BUTTON_STATE_ENABLED);
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "focused";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
+ group { name: "elm/button/base/naviframe/back_btn/music/default";
+ alias: "elm/button/base/naviframe/prev_btn/music/default";
+ alias: "elm/button/base/naviframe/end_btn/music/default";
+ images {
+ image: "00_winset_Back_btn_normal.png" COMP;
+ image: "00_winset_Back_btn_press.png" COMP;
+ image: "T02_winset_btn_Back.png" COMP;
+ }
+ script {
+ public button_state = BUTTON_STATE_ENABLED;
+ }
+ parts {
+ part { name: "button_image";
+ scale: 1;
+ description { state: "default" 0.0;
+ min: BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC;
+ max: BUTTON_NAVIFRAME_BACK_BUTTON_BG_MIN_MAX_INC;
+ image {
+ normal: "00_winset_Back_btn_normal.png";
+ border: BUTTON_NAVIFRAME_BACK_BUTTON_BG_BORDER_INC;
+ border_scale: 1;
+ }
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_winset_Back_btn_press.png";
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "00_winset_Back_btn_press.png";
+ }
+ }
+ part { name: "back_button";
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC;
+ max: BUTTON_NAVIFRAME_BACK_BUTTON_MIN_MAX_INC;
+ rel1.to: "button_image";
+ rel2.to: "button_image";
+ image.normal: "T02_winset_btn_Back.png";
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "disabler";
+ 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: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ if (get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "button_unclick3";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "disabler";
+ after: "disable_button";
+ }
+ program { name: "disable_button";
+ script {
+ set_int(button_state, BUTTON_STATE_DISABLED);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "disabler";
+ after: "enable_button";
+ }
+ program { name: "enable_button";
+ script {
+ set_int(button_state, BUTTON_STATE_ENABLED);
+ }
+ }
+ }
+ }
+
+ group { name: "elm/button/base/music/bottom_control";
+ script {
+ public button_state = BUTTON_STATE_ENABLED;
+ }
+ parts {
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ visible: 1;
+ min: 56 56;
+ max: 56 56;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ }
+ description { state: "icononly" 0.0;
+ visible: 1;
+ min: 56 56;
+ max: 56 56;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ align: 0.5 0.5;
+ }
+ }
+
+ part { name: "button_image";
+ type: RECT;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 144 MP_NAVIFRAME_CONTROLBAR_H;
+ rel1.offset: 0 0;
+ rel2.offset: 0 0;
+ color: 0 0 0 0;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 51;
+ }
+ }
+ part {
+ name: "padding_left_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ }
+ min: 44 29;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part {
+ name: "padding_right_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ min: 44 29;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part {
+ name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.swallow.content";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "elm.swallow.content";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ }
+ part {
+ name: "padding_icon_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ visible: 0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "icon_rect";
+ }
+ fixed: 1 0;
+ min: 0 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_NAVIBAR_CENTER_PADDING_AFTER_ICON_VISIBLE_MIN_INC;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "icon_rect";
+ }
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_icon_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ align: 0.5 0.5;
+ color: 255 255 255 255;
+ text {
+ style: "btn_multiline_navigationbar_controlbar_style";
+ min: 0 0;
+ max: 0 1;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 80 0;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 127;
+ }
+ }
+ part { name: "disabler";
+ 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: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if(get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "button_unclick3";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ target: "padding_icon_text";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "clipper";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ set_int(button_state, BUTTON_STATE_DISABLED);
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "clipper";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ set_int(button_state, BUTTON_STATE_ENABLED);
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "focused";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+ }
+
+ group { name: "elm/button/base/music/title_button";
+ script {
+ public button_state = BUTTON_STATE_ENABLED;
+ }
+ images.image: "T02_Option_header_bt.png" COMP;
+ images.image: "T02_Option_header_bt_press.png" COMP;
+ parts {
+ part { name: "button_image";
+ type: IMAGE;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: BUTTON_NAVIBAR_CENTER_BG_NORMAL_MIN_W_INC BUTTON_NAVIBAR_CENTER_BG_NORMAL_MIN_H_INC;
+ rel1.offset: 0 0;
+ rel2.offset: -1 -1;
+ image.normal: "T02_Option_header_bt.png";
+ image.border: BUTTON_NAVIBAR_CENTER_BG_NORMAL_BORDER_INC;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "T02_Option_header_bt.png";
+ color: 255 255 255 255;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image.normal: "T02_Option_header_bt_press.png";
+ color: 255 255 255 255;
+ }
+ }
+ part {
+ name: "padding_left_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ }
+ min: BUTTON_NAVIBAR_CENTER_PADDING_MIN_MAX_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part {
+ name: "padding_right_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 1.0 1.0;
+ rel2.relative: 1.0 1.0;
+ min: BUTTON_NAVIBAR_CENTER_PADDING_MIN_MAX_INC;
+ fixed: 1 1;
+ visible: 0;
+ }
+ }
+ part {
+ name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.swallow.content";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "elm.swallow.content";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ }
+ part {
+ name: "padding_icon_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ visible: 0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "icon_rect";
+ }
+ fixed: 1 0;
+ min: 0 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: BUTTON_NAVIBAR_CENTER_PADDING_AFTER_ICON_VISIBLE_MIN_INC;
+ rel1 {
+ relative: 1.0 0.0;
+ to: "icon_rect";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to: "icon_rect";
+ }
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.5 0.5;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ fixed: 1 1;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ visible: 1;
+ min: 70 70;
+ max: 70 70;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ align: 0.5 0.5;
+ }
+ description { state: "icononly" 0.0;
+ visible: 1;
+ min: 70 70;
+ max: 70 70;
+ rel1 {
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ }
+ align: 0.5 0.5;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_icon_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ align: 0.5 0.5;
+ color: 255 255 255 255;
+ text {
+ style: "btn_multiline_navigationbar_controlbar_style";
+ min: 0 0;
+ max: 0 1;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 80 0;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "over2";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "over3";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 127;
+ }
+ }
+ part { name: "disabler";
+ 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: "button_click";
+ signal: "mouse,down,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,press" "";
+ after: "button_click_anim";
+ }
+ program { name: "button_click_anim";
+ action: STATE_SET "clicked" 0.0;
+ target: "button_image";
+ after: "text_clicked";
+ }
+ program { name: "text_clicked";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ set_state(PART:"elm.text", "clicked", 0.0);
+ }
+ }
+ program { name: "button_unpress";
+ action: SIGNAL_EMIT "elm,action,unpress" "";
+ }
+ program { name: "button_mouseout_clicked";
+ signal: "mouse,up,1";
+ source: "over3";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (strcmp(st, "icononly"))
+ {
+ emit("elm,action,default,text,set", "");
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ if(get_int(button_state) != BUTTON_STATE_DISABLED)
+ set_state(PART:"button_image", "default", 0.0);
+ }
+ after: button_unpress;
+ }
+ program { name: "button_unclick3";
+ signal: "mouse,clicked,1";
+ source: "over2";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.content", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.content", "visible", 0.0);
+ set_state(PART:"padding_icon_text", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.content", "icononly", 0.0);
+ set_state(PART:"padding_icon_text", "icononly", 0.0);
+ }
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,icon,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.swallow.content";
+ target: "padding_icon_text";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "button_image";
+ target: "clipper";
+ target: "disabler";
+ after: "disable_text";
+ }
+ program { name: "disable_text";
+ script {
+ set_int(button_state, BUTTON_STATE_DISABLED);
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ target: "clipper";
+ target: "disabler";
+ after: "enable_text";
+ }
+ program { name: "enable_text";
+ script {
+ set_int(button_state, BUTTON_STATE_ENABLED);
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "focused";
+ action: STATE_SET "focused" 0.0;
+ target: "button_image";
+ target: "elm.text";
+ }
+ program { name: "unfocused";
+ action: STATE_SET "default" 0.0;
+ target: "button_image";
+ after: "unfocus_text";
+ }
+ program { name: "unfocus_text";
+ action: STATE_SET "visible" 0.0;
+ target: "elm.text";
+ }
+ }
+ } \ No newline at end of file
diff --git a/layout/mp-custom-winset-style.edc b/layout/mp-custom-winset-style.edc
new file mode 100755
index 0000000..11da2b5
--- /dev/null
+++ b/layout/mp-custom-winset-style.edc
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-defines.h"
+
+collections {
+ #include "mp-genlist-theme.edc"
+ #include "mp-naviframe.edc"
+ #include "mp-toolbar.edc"
+ #include "mp-progressbar.edc"
+ #include "mp-button.edc"
+ #include "mp-genlist-edit.edc"
+ #include "mp-editfield.edc"
+ #include "mp-selection-info.edc"
+}
+
diff --git a/layout/mp-defines.h b/layout/mp-defines.h
new file mode 100755
index 0000000..53933db
--- /dev/null
+++ b/layout/mp-defines.h
@@ -0,0 +1,220 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_DEFINES_H__
+#define __MP_DEFINES_H__
+
+
+/* main size */
+#define MAIN_W 480
+#define MAIN_H 800
+#define PLAYVIEW_H 620
+#define MENUBOX_H 56
+#define PROGRESSBOX_H 67
+
+
+/* font name*/
+#define FONT_STYLE_ROMAN "SLP:style=Roman"
+#define FONT_STYLE_MEDIUM "SLP:style=Medium"
+#define FONT_STYLE_BOLD "SLP:style=Bold"
+
+#define FONT_NAME "system_content"
+#define FONT_TITLE_NAME "system_title"
+#define FONT_CONTENT_NAME "system_content"
+#define FONT_SUBCONTENT_NAME "system_subcontent"
+
+/* soft key*/
+#define SOFTKEY_SY (722/MAIN_H)
+
+#define MP_NAVI_BAR_H (35)
+/* player info box*/
+#define INFO_BOX_SY ((634 - MP_NAVI_BAR_H)/MAIN_H)
+/* play control box*/
+#define CTL_BOX_HEIGHT 120
+#define CTL_BOX_SY 705/MAIN_H
+#define CTL_REW_SX (115/MAIN_W)
+#define CTL_REW_EX (165/MAIN_W)
+#define CTL_REW_SY (20/CTL_BOX_HEIGHT)
+#define CTL_REW_EY (70/CTL_BOX_HEIGHT)
+#define CTL_PAUSE_SX (215/MAIN_W)
+#define CTL_PAUSE_EX (265/MAIN_W)
+#define CTL_FF_SX (315/MAIN_W)
+#define CTL_FF_EX (365/MAIN_W)
+
+
+/* play menu box*/
+#define HD_MENU_BOX_H 96
+#define HD_MENU_BOX_W 720
+#define HD_MENU_H 80
+#define HD_MENU_W 80
+#define HD_MENU_PAD_MENU 112
+#define HD_MENU_PAD_TOP 10
+#define HD_MENU_PAA_LEFT 32
+
+#define MENU_SY HD_MENU_PAD_TOP/HD_MENU_BOX_H
+#define MENU_EY (HD_MENU_PAD_TOP+HD_MENU_H)/HD_MENU_BOX_H
+#define MENU_SHUFFLE_SX HD_MENU_PAA_LEFT/HD_MENU_BOX_W
+#define MENU_SHUFFLE_EX (HD_MENU_PAA_LEFT+HD_MENU_W)/HD_MENU_BOX_W
+#define MENU_REP_ALL_SX (HD_MENU_BOX_W-HD_MENU_W)/2/HD_MENU_BOX_W
+#define MENU_REP_ALL_EX (HD_MENU_BOX_W+HD_MENU_W)/2/HD_MENU_BOX_W
+#define MENU_FAVORITE_SX (HD_MENU_PAA_LEFT+HD_MENU_W*3+HD_MENU_PAD_MENU*3)/HD_MENU_BOX_W
+#define MENU_FAVORITE_EX (HD_MENU_PAA_LEFT+HD_MENU_W*4+HD_MENU_PAD_MENU*3)/HD_MENU_BOX_W
+
+
+/* play progress box*/
+
+#define PROGRESS_BOX_HEIGHT 67
+#define PROGRESS_BOX_SY (414/PLAYVIEW_H)
+#define PROGRESS_BOX_EY (507/PLAYVIEW_H)
+#define PROGRESS_BG_SX (80/MAIN_W)
+#define PROGRESS_BG_SY (27/PROGRESS_BOX_HEIGHT)
+#define PROGRESS_BG_EX (400/MAIN_W)
+#define PROGRESS_BG_EY (41/PROGRESS_BOX_HEIGHT)
+#define PROGRESS_BAR_L_EX (36/MAIN_W)
+#define PROGRESS_BAR_R_EX (45/MAIN_W)
+#define PROGRESS_PLAYING_SX (10/MAIN_W)
+#define PROGRESS_PLAYING_SY (376/MAIN_H)
+#define PROGRESS_PLAYING_EX (60/MAIN_W)
+#define PROGRESS_PLAYING_EY (426/MAIN_H)
+#define PROGRESS_TEXT_PLAYING_SX (30/MAIN_W)
+#define PROGRESS_TEXT_PLAYING_SY (460/MAIN_H)
+#define PROGRESS_TEXT_PLAYING_EX (130/MAIN_W)
+#define PROGRESS_TEXT_PLAYING_EY (500/MAIN_H)
+#define PROGRESS_TEXT_TOTAL_SX (350/MAIN_W)
+#define PROGRESS_TEXT_TOTAL_EX (450/MAIN_W)
+#define AUTO_REP_SX (205/MAIN_W)
+#define AUTO_REP_SY (452/MAIN_H)
+#define AUTO_REP_EX (275/MAIN_W)
+#define AUTO_REP_EY (488/MAIN_H)
+
+/* play Title*/
+#define PLAY_INFO_HEIGHT 189
+#define TRACK_TITLE_SX (15/MAIN_W)
+#define TRACK_TITLE_SY (18/PLAY_INFO_HEIGHT)
+#define ALBUM_TITLE_SY ((18+40)/PLAY_INFO_HEIGHT)
+#define ARTIST_TITLE_SY ((18+40+36)/PLAY_INFO_HEIGHT)
+#define ARTIST_TITLE_EY ((18+40+36+34)/PLAY_INFO_HEIGHT)
+
+/* favorite */
+#define FAVORITE_SX (420/MAIN_W)
+#define FAVORITE_EX (470/MAIN_W)
+#define FAVORITE_SY (10/PLAY_INFO_HEIGHT)
+#define FAVORITE_EY (60/PLAY_INFO_HEIGHT)
+
+/* volume*/
+#define VOLUME_BTN_SX (12/MAIN_W)
+#define VOLUME_BTN_SY (19/CTL_BOX_HEIGHT)
+#define VOLUME_BTN_EX (65/MAIN_W)
+#define VOLUME_BTN_EY CTL_REW_EY
+#define VOLUME_POPUP_WIDTH 262
+#define VOLUME_POPUP_HEIGHT 424
+#define VOLUME_POPUP_SX (108/MAIN_W)
+#define VOLUME_POPUP_EX (370/MAIN_W)
+#define VOLUME_POPUP_SY (94/PLAYVIEW_H)
+#define VOLUME_POPUP_EY (568/PLAYVIEW_H)
+
+#define VOLUME_POPUP_TITLE_SY (16 / VOLUME_POPUP_HEIGHT)
+#define VOLUME_POPUP_TITLE_EY (56 / VOLUME_POPUP_HEIGHT)
+#define VOLUME_POPUP_ICON_SX (107 / VOLUME_POPUP_WIDTH)
+#define VOLUME_POPUP_ICON_EX (157 / VOLUME_POPUP_WIDTH)
+#define VOLUME_POPUP_ICON_SY (62 / VOLUME_POPUP_HEIGHT)
+#define VOLUME_POPUP_ICON_EY (112 / VOLUME_POPUP_HEIGHT)
+#define VOLUME_POPUP_SLIDER_SX (68/ VOLUME_POPUP_WIDTH)
+#define VOLUME_POPUP_SLIDER_EX (194/ VOLUME_POPUP_WIDTH)
+#define VOLUME_POPUP_SLIDER_SY (130/ VOLUME_POPUP_HEIGHT)
+#define VOLUME_POPUP_SLIDER_EY (400/ VOLUME_POPUP_HEIGHT)
+
+#define VOLUME_PROGRESS_BOX_SX (400/MAIN_W)
+#define VOLUME_PROGRESS_BOX_SY (25/MAIN_H)
+#define VOLUME_PROGRESS_BOX_EY (507/MAIN_H)
+#define VOLUME_PROGRESS_BG_SX (433/MAIN_W)
+#define VOLUME_PROGRESS_BG_SY (59/MAIN_H)
+#define VOLUME_PROGRESS_BG_EX (447/MAIN_W)
+#define VOLUME_PROGRESS_BG_EY (479/MAIN_H)
+
+#define VOLUME_PROGRESS_TOP (62/MAIN_H)
+#define VOLUME_PROGRESS_BOTTOM (482/MAIN_H)
+#define VOLUME_PROGRESS_LEFT (433/MAIN_W)
+#define VOLUME_PROGRESS_RIGHT (447/MAIN_W)
+
+/*auto repeat*/
+#define REPEAT_BG_SX (150/MAIN_W)
+#define REPEAT_BG_SY (158/MAIN_H)
+#define REPEAT_BG_EX (330/MAIN_W)
+#define REPEAT_BG_EY (258/MAIN_H)
+
+#define REPEAT_A_BG_SY (307/MAIN_H)
+#define REPEAT_A_BG_EY (392/MAIN_H)
+#define REPEAT_B_BG_SY (410/MAIN_H)
+#define REPEAT_B_BG_EY (507/MAIN_H)
+
+/*information*/
+#define INFO_TITLEBG_SY (18/MAIN_H)
+#define INFO_TITLEBG_EY (147/MAIN_H)
+#define INFO_MAINALBUMIMAGE_SX (10/MAIN_W)
+#define INFO_MAINALBUMIMAGE_SY (44/MAIN_H)
+#define INFO_MAINALBUMIMAGE_EX (90/MAIN_W)
+#define INFO_MAINALBUMIMAGE_EY (124/MAIN_H)
+#define INFO_MAINTITLE_SX (100/MAIN_W)
+#define INFO_MAINTITLE_SY (53/MAIN_H)
+#define INFO_MAINARTIST_SY (89/MAIN_H)
+
+#define INFO_TITLE_SX (20/MAIN_W)
+#define INFO_TITLE_SY (154/MAIN_H)
+#define INFO_TITLE_EY (190/MAIN_H)
+#define INFO_ALBUMART_SY (239/MAIN_H)
+#define INFO_ALBUMART_EY (269/MAIN_H)
+
+#define INFO_BTN_SX (415/MAIN_W)
+#define INFO_BTN_SY VOLUME_BTN_SY
+#define INFO_BTN_EX (468/MAIN_W)
+#define INFO_BTN_EY VOLUME_BTN_EY
+
+#define MAX_W_LEFT MAIN_H-197
+#define OFFSET_TITLE -13
+#define OFFSET_TITLE_BOTTOM -14
+
+#define NAVIFRAME_TITLE_H_INC 100
+#define NAVIFRAME_SEGMENT_TITLE_H_INC 136
+#define NAVIFRAME_OH_OPENED_H_INC 106
+#define NAVIFRAME_OH_CONTENT_H_INC 74
+#define NAVIFRAME_OH_PADDING_INC 16
+#define NAVIFRAME_OH_ARROW_SIZE_INC 19 14
+#define NAVIFRAME_OH_OPENED_DOUBLE_H_INC 196
+#define NAVIFRAME_PREV_BTN_W_INC 124
+#define NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 10
+#define NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC 124 80
+#define NAVIFRAME_TEXT_PADDING_INC 144
+#define NAVIFRAME_TEXT_PADDING_MORE_BUTTON_INC 278
+#define NAVIFRAME_TEXT_PADDING_ICON_VISIBLE_INC 186
+#define NAVIFRAME_TITLE_SEGMENT_H_INC 74
+#define NAVIFRAME_TITLE_SEGMENT_FONT_SIZE_INC 28
+#define NAVIFRAME_TITLE_SEGMENT_TEXT_H_INC 50
+#define NAVIFRAME_TITLE_FONT_SIZE_INC 36
+#define NAVIFRAME_ICON_SIZE_INC 32 32
+#define NAVIFRAME_ICON_PADDING_INC 16 0
+#define NAVIFRAME_CONTROLBAR_PADDING_INC 5
+
+#define CONTROLBAR_LARGE_HEIGHT_INC 122
+#define CONTROLBAR_SMALL_HEIGHT_INC 102
+#define CONTROLBAR_WIDTH_INC 122
+
+#define MP_NAVIFRAME_CONTROLBAR_H 114
+
+#endif /* __MP_DEFINES_H__ */
diff --git a/layout/mp-editfield.edc b/layout/mp-editfield.edc
new file mode 100755
index 0000000..4698f5a
--- /dev/null
+++ b/layout/mp-editfield.edc
@@ -0,0 +1,1274 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+
+#define ENTRY_TEXT_SIZE_INC 44
+#define ENTRY_TEXT_COLOR_INC "#FFFFFF"
+#define ENTRY_CURSOR_COLOR_INC 42 109 140 255
+#define ENTRY_PREEDIT_BACKGROUND_COLOR_INC "#000000"
+#define ENTRY_PREEDIT_TEXT_COLOR_INC "#FFFFFFFF"
+#define ENTRY_SELECTION_BG_COLOR 90 123 138 127
+#define ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE 48 67
+#define MAGNIFIER_HEIGHT_FILL 182
+#define MAGNIFIER_HEIGHT_FIXED 108
+#define MAGNIFIER_WIDTH_FIXED 358
+
+#define EDITFIELD_TITLE_SIZE_INC 32
+#define EDITFIELD_TITLE_COLOR_INC 255 255 255 255// 73 73 73 255
+#define EDITFIELD_GUIDE_TEXT_COLOR_INC 250 250 250 255//189 189 189 255
+#define EDITFIELD_DEFAULT_ERASER_MINW_INC 48
+#define EDITFIELD_DEFAULT_ERASER_MINH_INC 48
+#define EDITFIELD_SEARCHBAR_ERASER_MINW_INC 38
+#define EDITFIELD_SEARCHBAR_ERASER_MINH_INC 38
+#define EDITFIELD_DEFAULT_MINH_INC 112
+#define EDITFIELD_SEARCHBAR_MINH_INC 50
+#define EDITFIELD_DEFAULT_TOP1_SINGLE_INC 20
+#define EDITFIELD_DEFAULT_TOP1_MULTI_INC 45
+#define EDITFIELD_DEFAULT_TOP2_INC 6
+#define EDITFIELD_DEFAULT_LEFT1_INC 0
+#define EDITFIELD_DEFAULT_LEFT2_INC 0
+#define EDITFIELD_DEFAULT_LEFT3_INC 2
+#define EDITFIELD_DEFAULT_RIGHT1_ERASER_HIDE_INC 0
+#define EDITFIELD_DEFAULT_RIGHT1_ERASER_SHOW_INC 60
+#define EDITFIELD_DEFAULT_RIGHT2_INC 0
+#define EDITFIELD_DEFAULT_BOTTOM1_SINGLE_INC 20
+#define EDITFIELD_DEFAULT_BOTTOM1_MULTI_INC 5
+#define EDITFIELD_DEFAULT_BOTTOM2_SINGLE_INC 32
+#define EDITFIELD_DEFAULT_BOTTOM2_MULTI_INC 6
+#define EDITFIELD_DEFAULT_BOTTOM3_SINGLE_INC 85
+#define EDITFIELD_DEFAULT_BOTTOM3_MULTI_INC 60
+#define EDITFIELD_SEARCHBAR_TOP1_SINGLE_INC 6
+#define EDITFIELD_SEARCHBAR_TOP1_MULTI_INC 10
+#define EDITFIELD_SEARCHBAR_TOP2_INC 10
+#define EDITFIELD_SEARCHBAR_LEFT1_INC 0
+#define EDITFIELD_SEARCHBAR_LEFT2_INC 0
+#define EDITFIELD_SEARCHBAR_LEFT3_INC 2
+#define EDITFIELD_SEARCHBAR_RIGHT1_ERASER_HIDE_INC 15
+#define EDITFIELD_SEARCHBAR_RIGHT1_ERASER_SHOW_INC 55
+#define EDITFIELD_SEARCHBAR_RIGHT2_INC 5
+#define EDITFIELD_SEARCHBAR_BOTTOM1_SINGLE_INC 8
+#define EDITFIELD_SEARCHBAR_BOTTOM1_MULTI_INC 2
+#define EDITFIELD_SEARCHBAR_BOTTOM2_SINGLE_INC 16
+#define EDITFIELD_SEARCHBAR_BOTTOM2_MULTI_INC 2
+#define EDITFIELD_SEARCHBAR_BOTTOM3_SINGLE_INC 50
+#define EDITFIELD_SEARCHBAR_BOTTOM3_MULTI_INC 50
+
+#define ENTRY_BLOCK_HANDLE_SOURCE2 "elm/entry/selection/block_handle_right"
+#define ENTRY_BLOCK_HANDLE_SOURCE3 "elm/entry/selection/block_handle_left"
+/////////////////////////////////////////////////////////////////////////
+group { name: "elm/entry/selection/block_handle_left";
+ data.item: "position" "BOTTOM";
+ data.item: "height" "40";
+ images {
+ image: "copy&paste_Icon_left.png" COMP;
+ image: "copy&paste_Icon_left_press.png" COMP;
+ image: "copy&paste_Icon_left_top.png" COMP;
+ image: "copy&paste_Icon_left_top_press.png" COMP;
+ }
+ parts {
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ fixed: 1 1;
+ align: 1 0;
+ min: ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE;
+ color: 0 0 0 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "handle";
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ fixed: 1 1;
+ align: 1 0;
+ min: ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE;
+ rel1 {
+ relative: 1.1 0.0;
+ offset: 0 -2;
+ to: "bg";
+ }
+ rel2 {
+ relative: 1.1 0.0;
+ offset: 0 -2;
+ to: "bg";
+ }
+ image {
+ normal: "copy&paste_Icon_left.png";
+ border: 0 0 0 0;
+ }
+ image.middle: SOLID;
+ fill.smooth: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "top" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ align: 1 1;
+ image {
+ normal: "copy&paste_Icon_left_top.png";
+ }
+ }
+ description { state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "copy&paste_Icon_left_press.png";
+ }
+ }
+ description { state: "top_press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ align: 1 1;
+ image {
+ normal: "copy&paste_Icon_left_top_press.png";
+ }
+ }
+ }
+ }
+ script {
+ public handler_ontop;
+ public handler_pressed;
+ public handler_focused;
+ }
+ programs {
+ program { name: "focused";
+ signal: "elm,action,focus";
+ source: "elm";
+ script {
+ set_int(handler_focused, 1);
+ }
+ }
+ program { name: "unfocused";
+ signal: "elm,action,unfocus";
+ source: "elm";
+ script {
+ set_int(handler_focused, 0);
+ set_state(PART:"handle", "default", 0.0);
+ }
+ }
+ program { name: "top";
+ signal: "elm,state,top";
+ source: "elm";
+ script {
+ new pressed;
+ new focused;
+ pressed = get_int(handler_pressed);
+ focused = get_int(handler_focused);
+ set_int(handler_ontop, 1);
+ if (focused)
+ {
+ if (pressed)
+ set_state(PART:"handle", "top_press", 0.0);
+ else
+ set_state(PART:"handle", "top", 0.0);
+ }
+ else
+ {
+ set_state(PART:"handle", "default", 0.0);
+ }
+ }
+ }
+ program { name: "bottom";
+ signal: "elm,state,bottom";
+ source: "elm";
+ script {
+ new pressed;
+ new focused;
+ pressed = get_int(handler_pressed);
+ focused = get_int(handler_focused);
+ set_int(handler_ontop, 0);
+ if (focused)
+ {
+ if (pressed)
+ set_state(PART:"handle", "press", 0.0);
+ else
+ set_state(PART:"handle", "show", 0.0);
+ }
+ else
+ {
+ set_state(PART:"handle", "default", 0.0);
+ }
+ }
+ }
+ program { name: "pressed";
+ signal: "mouse,down,1";
+ source: "handle";
+ script {
+ new pos;
+ pos = get_int(handler_ontop);
+ set_int(handler_pressed, 1);
+ if (pos)
+ set_state(PART:"handle", "top_press", 0.0);
+ else
+ set_state(PART:"handle", "press", 0.0);
+ }
+ }
+ program { name: "unpressed";
+ signal: "mouse,up,1";
+ source: "handle";
+ script {
+ new pos;
+ pos = get_int(handler_ontop);
+ set_int(handler_pressed, 0);
+ if (pos)
+ set_state(PART:"handle", "top", 0.0);
+ else
+ set_state(PART:"handle", "show", 0.0);
+ }
+ }
+ }
+}
+
+group { name: "elm/entry/selection/block_handle_right";
+ data.item: "position" "BOTH";
+ data.item: "height" "40";
+ images {
+ image: "copy&paste_Icon_right.png" COMP;
+ image: "copy&paste_Icon_right_press.png" COMP;
+ image: "copy&paste_Icon_right_top.png" COMP;
+ image: "copy&paste_Icon_right_top_press.png" COMP;
+ }
+ parts {
+ part { name: "handle";
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ fixed: 1 1;
+ align: 0 0;
+ min: ENTRY_SELECTION_BLOCK_HANDLE_MIN_SIZE;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 -2;
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 0 -2;
+ }
+ image {
+ normal: "copy&paste_Icon_right.png";
+ border: 0 0 0 0;
+ }
+ image.middle: SOLID;
+ fill.smooth: 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "top" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ align: 0 1;
+ image {
+ normal: "copy&paste_Icon_right_top.png";
+ }
+ }
+ description { state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image {
+ normal: "copy&paste_Icon_right_press.png";
+ }
+ }
+ description { state: "top_press" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ align: 0 1;
+ image {
+ normal: "copy&paste_Icon_right_top_press.png";
+ }
+ }
+ }
+ }
+ script {
+ public handler_ontop;
+ public handler_pressed;
+ public handler_focused;
+ }
+ programs {
+ program { name: "focused";
+ signal: "elm,action,focus";
+ source: "elm";
+ script {
+ set_int(handler_focused, 1);
+ }
+ }
+ program { name: "unfocused";
+ signal: "elm,action,unfocus";
+ source: "elm";
+ script {
+ set_int(handler_focused, 0);
+ set_state(PART:"handle", "default", 0.0);
+ }
+ }
+ program { name: "top";
+ signal: "elm,state,top";
+ source: "elm";
+ script {
+ new pressed;
+ new focused;
+ pressed = get_int(handler_pressed);
+ focused = get_int(handler_focused);
+ set_int(handler_ontop, 1);
+ if (focused)
+ {
+ if (pressed)
+ set_state(PART:"handle", "top_press", 0.0);
+ else
+ set_state(PART:"handle", "top", 0.0);
+ }
+ else
+ {
+ set_state(PART:"handle", "default", 0.0);
+ }
+ }
+ }
+ program { name: "bottom";
+ signal: "elm,state,bottom";
+ source: "elm";
+ script {
+ new pressed;
+ new focused;
+ pressed = get_int(handler_pressed);
+ focused = get_int(handler_focused);
+ set_int(handler_ontop, 0);
+ if (focused)
+ {
+ if (pressed)
+ set_state(PART:"handle", "press", 0.0);
+ else
+ set_state(PART:"handle", "show", 0.0);
+ }
+ else
+ {
+ set_state(PART:"handle", "default", 0.0);
+ }
+ }
+ }
+ program { name: "pressed";
+ signal: "mouse,down,1";
+ source: "handle";
+ script {
+ new pos;
+ pos = get_int(handler_ontop);
+ set_int(handler_pressed, 1);
+ if (pos)
+ set_state(PART:"handle", "top_press", 0.0);
+ else
+ set_state(PART:"handle", "press", 0.0);
+ }
+ }
+ program { name: "unpressed";
+ signal: "mouse,up,1";
+ source: "handle";
+ script {
+ new pos;
+ pos = get_int(handler_ontop);
+ set_int(handler_pressed, 0);
+ if (pos)
+ set_state(PART:"handle", "top", 0.0);
+ else
+ set_state(PART:"handle", "show", 0.0);
+ }
+ }
+ }
+}
+
+group { name: "elm/entry/anchor/default";
+ parts {
+ part { name: "bg";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: 128 0 0 64;
+ }
+ }
+ }
+}
+/////////////////////////////////////////////////////////////////////////
+
+/* This file is copied at 10/17/2011 */
+
+group { name: "elm/editfield/base/music/default";
+ images {
+ image: "00_EditField_clear.png" COMP;
+ }
+ styles {
+ style { name: "editfield_content_singleline_style";
+ base: "font=SLP:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=mixed ellipsis=1";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "em" "+ font=SLP:style=Oblique";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "link" "+ color=#800 underline=on underline_color=#8008";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ }
+ style { name: "editfield_content_multiline_style";
+ base: "font=SLP:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=mixed";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "em" "+ font=SLP:style=Oblique";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "link" "+ color=#800 underline=on underline_color=#8008";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ }
+ style { name: "editfield_content_password_style";
+ base: "font=SLP:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=none ellipsis=1";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "em" "+ font=SLP:style=Oblique";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "link" "+ color=#800 underline=on underline_color=#8008";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ }
+ }
+ script {
+ public single_line = 0;
+ public password_mode = 0;
+
+ public set_multi_line() {
+ set_int(single_line, 0);
+ }
+ public set_single_line() {
+ set_int(single_line, 1);
+ }
+ public set_password() {
+ set_int(password_mode, 1);
+ }
+ public unset_password() {
+ set_int(password_mode, 0);
+ }
+ public no_edit() {
+ if(get_int(single_line) == 1) {
+ if(get_int(password_mode) == 0) {
+ set_state(PART:"elm.content.single", "no_edit", 0.0);
+ set_state(PART:"elm.content.multi", "default", 0.0);
+ set_state(PART:"elm.content.password", "default", 0.0);
+ }
+ else {
+ set_state(PART:"elm.content.single", "default", 0.0);
+ set_state(PART:"elm.content.multi", "default", 0.0);
+ set_state(PART:"elm.content.password", "no_edit", 0.0);
+ }
+ }
+ else if(get_int(single_line) == 0) {
+ set_state(PART:"elm.content.single", "default", 0.0);
+ set_state(PART:"elm.content.multi", "no_edit", 0.0);
+ set_state(PART:"elm.content.password", "default", 0.0);
+ }
+ set_state(PART:"elm.swallow.content", "no_edit", 0.0);
+ set_state(PART:"over", "default", 0.0);
+ set_state(PART:"top2", "default", 0.0);
+ }
+ }
+ parts {
+ part {
+ name: "base";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ min: 0 EDITFIELD_DEFAULT_MINH_INC;
+ color: MP_GENLIST_BG_COLOR;
+ }
+ }
+ part {
+ name: "top1";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 EDITFIELD_DEFAULT_TOP1_SINGLE_INC;
+ fixed: 1 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 0.0;
+ align: 0.5 0;
+ }
+ description {
+ state: "elm.text.show" 0.0;
+ inherit: "default" 0.0;
+ min: 0 EDITFIELD_DEFAULT_TOP1_MULTI_INC;
+ }
+ }
+ part {
+ name: "top2";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 EDITFIELD_DEFAULT_TOP2_INC;
+ fixed: 1 1;
+ rel1.relative: 0.0 0.0;
+ rel2.relative: 1.0 0.0;
+ align: 0.5 0;
+ }
+ description {
+ state: "edit" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part {
+ name: "left1";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: EDITFIELD_DEFAULT_LEFT1_INC 0;
+ fixed: 1 1;
+ align: 0 0;
+ rel1.relative : 0.0 0.0;
+ rel2.relative : 0.0 1.0;
+ }
+ }
+ part {
+ name: "left2";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: EDITFIELD_DEFAULT_LEFT2_INC 0;
+ fixed: 1 1;
+ align: 0 0;
+ rel1.relative : 0.0 0.0;
+ rel2.relative : 0.0 1.0;
+ }
+ }
+ part {
+ name: "left3";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: EDITFIELD_DEFAULT_LEFT3_INC 0;
+ fixed: 1 1;
+ align: 0 0;
+ rel1 {
+ to: "elm.swallow.content";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "elm.swallow.content";
+ relative: 0.0 1.0;
+ }
+ }
+ }
+ part {
+ name: "right1";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: EDITFIELD_DEFAULT_RIGHT1_ERASER_HIDE_INC 0;
+ fixed: 1 1;
+ align: 1 0;
+ rel1.relative : 1.0 0.0;
+ rel2.relative : 1.0 1.0;
+ }
+ description {
+ state: "elm.eraser.show" 0.0;
+ inherit: "default" 0.0;
+ min: EDITFIELD_DEFAULT_RIGHT1_ERASER_SHOW_INC 0;
+ }
+ }
+ part {
+ name: "right2";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: EDITFIELD_DEFAULT_RIGHT2_INC 0;
+ fixed: 1 1;
+ align: 1 0;
+ rel1.relative : 1.0 0.0;
+ rel2.relative : 1.0 1.0;
+ }
+ }
+ part {
+ name: "bottom1";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 EDITFIELD_DEFAULT_BOTTOM1_SINGLE_INC;
+ fixed: 1 1;
+ align: 0 1;
+ rel1.relative: 0.0 1.0;
+ }
+ description {
+ state: "elm.text.show" 0.0;
+ inherit: "default" 0.0;
+ min: 0 EDITFIELD_DEFAULT_BOTTOM1_MULTI_INC;
+ }
+ }
+ part {
+ name: "bottom2";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 EDITFIELD_DEFAULT_BOTTOM2_SINGLE_INC;
+ fixed: 0 1;
+ rel1.relative: 0.0 1.0;
+ align: 0 1;
+ }
+ description {
+ state: "elm.text.show" 0.0;
+ inherit: "default" 0.0;
+ min: 0 EDITFIELD_DEFAULT_BOTTOM2_MULTI_INC;
+ }
+ }
+ part {
+ name: "bottom3";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 EDITFIELD_DEFAULT_BOTTOM3_SINGLE_INC;
+ fixed: 0 1;
+ rel1.relative: 0.0 1.0;
+ align: 0 1;
+ }
+ description {
+ state: "elm.text.show" 0.0;
+ inherit: "default" 0.0;
+ min: 0 EDITFIELD_DEFAULT_BOTTOM3_MULTI_INC;
+ }
+ }
+ part {
+ name: "elm.text";
+ type: TEXT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.0;
+ min: 0 34;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "left2";
+ to_y: "top2";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ to_x: "left2";
+ to_y: "top2";
+ }
+ color: EDITFIELD_TITLE_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: EDITFIELD_TITLE_SIZE_INC;
+ min: 1 1;
+ align: 0.0 0.0;
+ }
+ }
+ description {
+ state: "elm.text.show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part {
+ name: "elm.guidetext";
+ type: TEXT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ color: EDITFIELD_GUIDE_TEXT_COLOR_INC;
+ text {
+ font: "SLP:style=Roman";
+ size: ENTRY_TEXT_SIZE_INC;
+ min: 0 0;
+ align: 0.0 0.5;
+ }
+ }
+ description {
+ state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "elm.content.single";
+ type: TEXTBLOCK;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ fixed: 1 1;
+ rel1 {
+ to_x: "left3";
+ to_y: "elm.swallow.content";
+ relative: 1.0 0.0;
+ }
+ rel2.to: "elm.swallow.content";
+ text {
+ style: "editfield_content_singleline_style";
+ min: 0 0;
+ max: 0 1;
+ }
+ }
+ description {
+ state: "no_edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "elm.content.multi";
+ type: TEXTBLOCK;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ fixed: 1 1;
+ rel1 {
+ to_x: "left3";
+ to_y: "elm.swallow.content";
+ relative: 1.0 0.0;
+ }
+ rel2.to: "elm.swallow.content";
+ text {
+ style: "editfield_content_multiline_style";
+ min: 0 1;
+ }
+ }
+ description {
+ state: "no_edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "elm.content.password";
+ type: TEXTBLOCK;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ entry_mode: PASSWORD;
+ multiline: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ fixed: 1 1;
+ rel1 {
+ to_x: "left3";
+ to_y: "elm.swallow.content";
+ relative: 1.0 0.0;
+ }
+ rel2.to: "elm.swallow.content";
+ text {
+ style: "editfield_content_password_style";
+ repch: "*";
+ min: 0 0;
+ max: 0 1;
+ }
+ }
+ description {
+ state: "no_edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ min: 0 40;
+ rel1 {
+ relative : 1.0 1.0;
+ to_x: "left1";
+ to_y: "top1";
+ }
+ rel2 {
+ relative : 0.0 0.0;
+ to_x: "right1";
+ to_y: "bottom1";
+ }
+ align: 0.0 0.5;
+ }
+ description {
+ state: "no_edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part {
+ name: "over";
+ type: RECT;
+ scale: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ rel1.to: "base";
+ rel2.to: "base";
+ color: 0 0 0 0;
+ }
+ description {
+ state: "edit" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "eraser_image";
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: EDITFIELD_DEFAULT_ERASER_MINW_INC EDITFIELD_DEFAULT_ERASER_MINH_INC;
+ fixed: 1 1;
+ align: 1 1;
+ rel1 {
+ relative: 0.0 0.0;
+ to_x : "right2";
+ to_y : "bottom2";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x : "right2";
+ to_y : "bottom2";
+ }
+ image {
+ normal: "00_EditField_clear.png";
+ border: 10 10 10 10;
+ border_scale: 1;
+ }
+ }
+ description {
+ state: "elm.eraser.show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part {
+ name: "eraser";
+ mouse_events: 1;
+ ignore_flags: ON_HOLD;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ color: 0 0 0 0;
+ rel1 {
+ relative: 0.0 0.0;
+ to_x : "eraser_image";
+ to_y : "bottom3";
+ }
+ }
+ description {
+ state: "elm.eraser.show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+ programs {
+ program {
+ name: "guidetext_show";
+ signal: "elm,state,guidetext,visible";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.guidetext";
+ }
+ program {
+ name: "guidetext_hide";
+ signal: "elm,state,guidetext,hidden";
+ source: "elm";
+ action: STATE_SET "hidden" 0.0;
+ target: "elm.guidetext";
+ }
+ program {
+ name: "eraser_show";
+ signal: "elm,state,eraser,show";
+ source: "elm";
+ action: STATE_SET "elm.eraser.show" 0.0;
+ target: "right1";
+ target: "eraser_image";
+ target: "eraser";
+ }
+ program {
+ name: "eraser_hide";
+ signal: "elm,state,eraser,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "right1";
+ target: "eraser_image";
+ target: "eraser";
+ }
+ program {
+ name: "multiline_set";
+ signal: "elm,state,text,multiline";
+ source: "elm";
+ script {
+ set_multi_line();
+ }
+ }
+ program {
+ name: "singleline_set";
+ signal: "elm,state,text,singleline";
+ source: "elm";
+ script {
+ set_single_line();
+ }
+ }
+ program {
+ name: "password_set";
+ signal: "elm,state,password,set";
+ source: "elm";
+ script {
+ set_password();
+ }
+ }
+ program {
+ name: "password_unset";
+ signal: "elm,state,password,unset";
+ source: "elm";
+ script {
+ unset_password();
+ }
+ }
+ program {
+ name: "editing";
+ signal: "elm,state,over,hide";
+ source: "elm";
+ action: STATE_SET "edit" 0.0;
+ target: "elm.swallow.content";
+ target: "elm.content.password";
+ target: "elm.content.multi";
+ target: "elm.content.single";
+ target: "over";
+ target: "top2";
+ }
+ program {
+ name: "no_editing";
+ signal: "elm,state,over,show";
+ source: "elm";
+ script {
+ no_edit();
+ }
+ }
+ program {
+ name: "label_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ action: STATE_SET "elm.text.show" 0.0;
+ target: "elm.text";
+ target: "top1";
+ target: "bottom1";
+ target: "bottom2";
+ target: "bottom3";
+ }
+ program {
+ name: "label_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ target: "top1";
+ target: "bottom1";
+ target: "bottom2";
+ target: "bottom3";
+ }
+ program {
+ name: "entry_show";
+ signal: "elm,state,entry,show";
+ source: "elm";
+ action: STATE_SET "edit" 0.0;
+ target: "elm.swallow.content";
+ target: "elm.content.multi";
+ }
+ }
+}
+
+group { name: "elm/entry/cursor/music/default";
+ parts {
+ part { name: "clip2";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1.to: "clip";
+ rel2.to: "clip";
+ visible: 0;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "clip";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clip2";
+ description { state: "default" 0.0;
+ rel1.offset: -10 0;
+ rel2.offset: 9 9;
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "base";
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clip";
+ description { state: "default" 0.0;
+ min: 2 2;
+ align: 0.5 1.0;
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "glow";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "clip2";
+ description { state: "default" 0.0;
+ min: 3 0;
+ fixed: 1 0;
+ align: 0.5 0.5;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 2;
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ offset: 0 -2;
+ }
+ color: ENTRY_CURSOR_COLOR_INC;
+ }
+ description { state: "hidden" 0.0;
+ inherit: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ }
+ programs {
+ program { name: "show";
+ action: STATE_SET "hidden" 0.0;
+ in: 0.6 0.0;
+ target: "glow";
+ after: "show4";
+ }
+ program { name: "show4";
+ action: STATE_SET "default" 0.0;
+ in: 0.6 0.0;
+ target: "glow";
+ after: "show";
+ }
+ program { name: "focused";
+ signal: "elm,action,focus";
+ source: "elm";
+ action: STATE_SET "focused" 0.0;
+ target: "clip2";
+ after: "show4";
+ }
+ program { name: "unfocused";
+ signal: "elm,action,unfocus";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "clip2";
+ after: "stop_glow";
+ }
+ program { name: "stop_glow";
+ action: ACTION_STOP;
+ target: "show";
+ target: "show4";
+ }
+ }
+}
+
+group { name: "elm/entry/base-single/music/default";
+ data.item: "default_font_size" "24";
+ data.item: "min_font_size" "8";
+ data.item: "max_font_size" "60";
+ styles
+ {
+ style { name: "entry_single_textblock_style";
+ base: "font=SLP:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color="ENTRY_TEXT_COLOR_INC" wrap=none left_margin=2 right_margin=3";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "em" "+ font=SLP:style=Oblique";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "link" "+ color=#800 underline=on underline_color=#8008";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+ tag: "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+ }
+ style { name: "entry_single_textblock_disabled_style";
+ base: "font=SLP:style=Roman font_size="ENTRY_TEXT_SIZE_INC" color=#00000080 wrap=none left_margin=2 right_margin=3";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "em" "+ font=SLP:style=Oblique";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "link" "+ color=#00000080 underline=on underline_color=#00000080";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "preedit" "+ underline=on underline_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC"";
+ tag: "preedit_sel" "+ backing=on backing_color="ENTRY_PREEDIT_BACKGROUND_COLOR_INC" color="ENTRY_PREEDIT_TEXT_COLOR_INC"";
+ }
+ }
+ data {
+ item: context_menu_orientation "horizontal";
+ }
+ parts {
+ part { name: "entry.swallow.background";
+ type: SWALLOW;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0 0; to: "elm.text"; }
+ rel2 { relative: 1 1; to: "elm.text"; }
+ }
+ }
+ }
+
+ parts {
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 1;
+ scale: 1;
+ entry_mode: EDITABLE;
+ select_mode: BLOCK_HANDLE;
+ //cursor_mode: BEFORE;
+ multiline: 0;
+ source: "elm/entry/selection/music/default"; // selection under
+ source2: ENTRY_BLOCK_HANDLE_SOURCE2; // block handle
+ source3: ENTRY_BLOCK_HANDLE_SOURCE3; // block handle
+ source4: "elm/entry/cursor/music/default"; // cursorover
+ source5: "elm/entry/anchor/default"; // anchor under
+ description { state: "default" 0.0;
+ text {
+ style: "entry_single_textblock_style";
+ min: 1 1;
+ max: 0 0;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ text {
+ style: "entry_single_textblock_disabled_style";
+ }
+ }
+ }
+ }
+
+ programs {
+ program { name: "focus";
+ signal: "load";
+ source: "";
+ action: FOCUS_SET;
+ target: "elm.text";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "elm.text";
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.text";
+ }
+ }
+}
+
+group { name: "elm/entry/selection/music/default";
+ parts {
+ part { name: "bg";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: ENTRY_SELECTION_BG_COLOR;
+ }
+ }
+ }
+}
+
diff --git a/layout/mp-genlist-edit.edc b/layout/mp-genlist-edit.edc
new file mode 100755
index 0000000..0ff784b
--- /dev/null
+++ b/layout/mp-genlist-edit.edc
@@ -0,0 +1,158 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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/genlist/item/select_all/music/default";
+ alias: "elm/genlist/item_odd/select_all/music/default";
+ alias: "elm/genlist/item_compress/select_all/music/default";
+ alias: "elm/genlist/item_compress_odd/select_all/music/default";
+
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text";
+ data.item: "contents" "elm.icon";
+ images {
+ image: "00_list_bar_press_1x80.png" COMP;
+ }
+ parts {
+ part { name: "base";
+ type: RECT;
+ repeat_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_HEIGHT_113_INC;
+ color: GENLIST_EDIT_SELECT_ALL_BG_COLOR_INC;
+ }
+ }
+ part { name: "bg";
+ type: RECT;
+ clip_to: "disclip";
+ repeat_events: 0;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ color: GENLIST_EDIT_SELECT_ALL_BG_COLOR_INC;
+ }
+ }
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_BOTTOM_LINE
+ GENLIST_PART_PADDING_TOP( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_BOTTOM( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_16_INC )
+
+ part { name: "elm.padding.icon.right";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_10_INC 0;
+ fixed: 1 0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.icon";
+ }
+ rel2.to_x: "elm.icon";
+ align: 0.0 0.0;
+ }
+ }
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_80_INC GENLIST_SIZE_80_INC;
+ max: GENLIST_SIZE_80_INC GENLIST_SIZE_80_INC;
+ fixed: 1 1;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ offset: 0 0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.bottom";
+ }
+ }
+ }
+ part { name: "elm.text";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ to_x: "elm.padding.icon.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.bottom";
+ }
+ color: GENLIST_PART_TEXT_COLOR_INC;
+ text {
+ font: "SLP:style=Roman";
+ size: GENLIST_FONT_44_INC;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_SELECTED_COLOR_INC;
+ }
+ }
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ }
+ }
+
diff --git a/layout/mp-genlist-theme.edc b/layout/mp-genlist-theme.edc
new file mode 100755
index 0000000..8657b1f
--- /dev/null
+++ b/layout/mp-genlist-theme.edc
@@ -0,0 +1,1827 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp_genlist_macro.edc"
+#include "mp_genlist_define.edc"
+
+#define TEST_RECT(test)\
+ part { name: "test_rect";\
+ type: RECT; \
+ description { state: "default" 0.0; \
+ color: 255 0 0 255; \
+ rel1 {relative: 0.0 0.0; to, test;}\
+ rel2 {relative: 1.0 1.0; to, test;}\
+ }\
+ }
+
+#define TEST_RECT2(test)\
+ part { name: "test_rect2";\
+ type: RECT; \
+ description { state: "default" 0.0; \
+ color: 255 255 0 255; \
+ rel1 {relative: 0.0 0.0; to, test;}\
+ rel2 {relative: 1.0 1.0; to, test;}\
+ }\
+ }
+
+#define TEST_RECT3(test)\
+ part { name: "test_rect3";\
+ type: RECT; \
+ description { state: "default" 0.0; \
+ color: 255 0 255 255; \
+ rel1 {relative: 0.0 0.0; to, test;}\
+ rel2 {relative: 1.0 1.0; to, test;}\
+ }\
+ }
+
+#define GENLIST_PART_LIST_LINE_COLOR_INC MP_BOTTOM_LINE_COLOR
+
+#define GENLIST_SIZE_60_INC 60
+
+#define GENLIST_FONT_35_INC 35
+
+#define GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC 166 166 166 255
+#define GENLIST_PART_TEXT_PRESS_COLOR_INC 249 249 249 255
+
+#define MP_MAIN_TEXT_SIZE 36
+#define MP_MAIN_TEXT_COLOR 255 255 255 255
+
+#define MP_SUB_TEXT_SIZE 32
+#define MP_SUB_TEXT_COLOR 166 166 166 255
+
+#define MP_MAIN_TEXT_01_SIZE 36
+#define MP_MAIN_TEXT_01_COLOR 166 166 166 255
+
+#define MP_INDEX_LIST_TEXT_FONT FONT_STYLE_BOLD
+#define MP_INDEX_LIST_TEXT_SIZE 32
+#define MP_INDEX_LIST_TEXT_COLOR 218 216 212 255
+
+#define MP_LIST_THUMBNAIL_INNER_LINE \
+ part { name: "innerline.top";\
+ type: RECT;\
+ scale: 1;\
+ mouse_events: 0;\
+ description { state: "default" 0.0;\
+ visible: 1;\
+ fixed: 1 1;\
+ align: 0 0;\
+ min: 1 1;\
+ rel1 {relative: 0.0 0.0; to, "elm.icon";}\
+ rel2 {relative: 1.0 0.0; to, "elm.icon";}\
+ color: 0 0 0 255;\
+ }\
+ GENLIST_DESCRIPTION_FLIP_ENABLED \
+ }\
+ part { name: "innerline.bottom";\
+ type: RECT;\
+ scale: 1;\
+ mouse_events: 0;\
+ description { state: "default" 0.0;\
+ visible: 1;\
+ fixed: 1 1;\
+ align: 0 0;\
+ min: 1 1;\
+ rel1 {relative: 0.0 1.0; to, "elm.icon";}\
+ rel2 {relative: 1.0 1.0; to, "elm.icon";}\
+ color: 0 0 0 255;\
+ }\
+ GENLIST_DESCRIPTION_FLIP_ENABLED \
+ }\
+ part { name: "innerline.left";\
+ type: RECT;\
+ scale: 1;\
+ mouse_events: 0;\
+ description { state: "default" 0.0;\
+ visible: 1;\
+ fixed: 1 1;\
+ align: 0 0;\
+ min: 1 1;\
+ rel1 {relative: 0.0 0.0; to, "elm.icon";}\
+ rel2 {relative: 0.0 1.0; to, "elm.icon";}\
+ color: 0 0 0 255;\
+ }\
+ GENLIST_DESCRIPTION_FLIP_ENABLED \
+ }\
+ part { name: "innerline.right";\
+ type: RECT;\
+ scale: 1;\
+ mouse_events: 0;\
+ description { state: "default" 0.0;\
+ visible: 1;\
+ fixed: 1 1;\
+ align: 0 0;\
+ min: 1 1;\
+ rel1 {relative: 1.0 0.0; to, "elm.icon";}\
+ rel2 {relative: 1.0 1.0; to, "elm.icon";}\
+ color: 0 0 0 255;\
+ }\
+ GENLIST_DESCRIPTION_FLIP_ENABLED \
+ }\
+
+#define GENLIST_PART_MATCH_TAG_COLOR_INC "+ color=#31A1FF"
+
+#define TEXTBLOCK_TAG \
+ tag: "br" "\n";\
+ tag: "ps" "ps";\
+ tag: "tab" "\t";\
+ tag: "b" "+ font=SLP:style=Bold";\
+ tag: "match" GENLIST_PART_MATCH_TAG_COLOR_INC;
+
+styles {
+ style { name: "genlist_textblock_style";
+ base: "font=SLP:style=Roman font_size="MP_MAIN_TEXT_SIZE" color=#FFFFFFFF text_class=list_item ellipsis=1.0";
+ TEXTBLOCK_TAG
+ }
+}
+
+
+group { name: "elm/genlist/item/music/1icon/default";
+ alias: "elm/genlist/item_odd/music/1icon/default";
+ alias: "elm/genlist/item_compress/music/1icon/default";
+ alias: "elm/genlist/item_compress_odd/music/1icon/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "contents" "elm.icon";
+ parts {
+ part { name: "base";
+ type: RECT;
+ repeat_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ color: MP_GENLIST_BG_COLOR;
+ }
+ }
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_16_INC )
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ }
+ }
+ }
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ // signal: elm,state,%s,active
+ // a "check" item named %s went active
+ // signal: elm,state,%s,passive
+ // a "check" item named %s went passive
+ // default is passive
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ }
+ }
+
+group { name: "elm/genlist/item/music_player/1icon.3text/default";
+ alias: "elm/genlist/item_odd/music_player/1icon.3text/default";
+ alias: "elm/genlist/item_compress/music_player/1icon.3text/default";
+ alias: "elm/genlist/item_compress_odd/music_player/1icon.3text/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.1 elm.text.2 elm.text.3";
+ data.item: "contents" "elm.icon";
+ data.item: "flips" "elm.flip.content";
+ images {
+ image: "00_list_bar_press_1x80.png" COMP;
+ }
+ parts {
+ GENLIST_PART_BASE( GENLIST_HEIGHT_129_INC )
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_BOTTOM_LINE
+ GENLIST_PART_PADDING_TOP( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_BOTTOM( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_16_INC )
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_112_INC GENLIST_SIZE_112_INC;
+ max: GENLIST_SIZE_112_INC GENLIST_SIZE_112_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.bottom";
+ }
+ align: 0.0 0.5;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ MP_LIST_THUMBNAIL_INNER_LINE
+
+ part { name: "elm.padding.icon.right";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_16_INC 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.icon";
+ }
+ rel2.to_x: "elm.icon";
+ align: 0.0 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text.3";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_154_INC GENLIST_SIZE_48_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 0.0 0.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.text.2";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.text.2";
+ }
+ align: 1.0 0.0;
+ color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: GENLIST_FONT_32_INC;
+ min: 0 1;
+ align: 1.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ part { name: "elm.padding.text3.left";
+ clip_to: "disclip";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_32_INC 0;
+ fixed: 1 0;
+ rel1.to_x: "elm.text.3";
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.text.3";
+ }
+ align: 1.0 0.5;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text.1";
+ clip_to: "disclip";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_SIZE_60_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.icon.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.top";
+ }
+ align: 0.0 0.0;
+ text {
+ style: "genlist_textblock_style";
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ part { name: "elm.text.2";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ max: 720 GENLIST_SIZE_48_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.icon.right";
+ to_y: "elm.text.1";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.text.3";
+ to_y: "elm.padding.bottom";
+ }
+ color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: GENLIST_FONT_32_INC;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ GENLIST_PART_FLIP
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ // signal: elm,state,%s,active
+ // a "check" item named %s went active
+ // signal: elm,state,%s,passive
+ // a "check" item named %s went passive
+ // default is passive
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_3TEXT
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text.1";
+ target: "elm.text.2";
+ target: "elm.text.3";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ GENLIST_PROGRAM_FLIP_3TEXT_1ICON
+ }
+ }
+
+group { name: "elm/genlist/item/music_player/1icon.2text/default";
+ alias: "elm/genlist/item_odd/music_player/1icon.2text/default";
+ alias: "elm/genlist/item_compress/music_player/1icon.2text/default";
+ alias: "elm/genlist/item_compress_odd/music_player/1icon.2text/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.1 elm.text.2";
+ data.item: "contents" "elm.icon";
+ data.item: "flips" "elm.flip.content";
+ images {
+ image: "00_list_bar_press_1x80.png" COMP;
+ }
+ parts {
+ GENLIST_PART_BASE( GENLIST_HEIGHT_129_INC )
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_BOTTOM_LINE
+ GENLIST_PART_PADDING_TOP( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_BOTTOM( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_16_INC )
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_112_INC GENLIST_SIZE_112_INC;
+ max: GENLIST_SIZE_112_INC GENLIST_SIZE_112_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.bottom";
+ }
+ align: 0.0 0.5;
+ }
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ MP_LIST_THUMBNAIL_INNER_LINE
+
+ part { name: "elm.padding.icon.right";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_16_INC 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.icon";
+ }
+ rel2.to_x: "elm.icon";
+ align: 0.0 0.0;
+ visible: 0;
+ }
+ }
+
+ part { name: "elm.text.1";
+ clip_to: "disclip";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_SIZE_60_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.icon.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.padding.text2.left";
+ to_y: "elm.padding.bottom";
+ }
+ align: 0.0 0.0;
+ text {
+ style: "genlist_textblock_style";
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ part { name: "elm.padding.text2.left";
+ clip_to: "disclip";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_16_INC 0;
+ fixed: 1 0;
+ rel1.to_x: "elm.text.2";
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.text.2";
+ }
+ align: 1.0 0.5;
+ visible: 0;
+ }
+ }
+
+ part { name: "elm.text.2";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_112_INC 0;
+ fixed: 1 1;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.bottom";
+ }
+ align: 1.0 0.0;
+ color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: GENLIST_FONT_32_INC;
+ min: 0 1;
+ align: 1.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ GENLIST_PART_FLIP
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ // signal: elm,state,%s,active
+ // a "check" item named %s went active
+ // signal: elm,state,%s,passive
+ // a "check" item named %s went passive
+ // default is passive
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_2TEXT
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text.1";
+ target: "elm.text.2";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ GENLIST_PROGRAM_FLIP_2TEXT_1ICON
+ }
+ }
+
+ group { name: "elm/genlist/item/music_player/2text/default";
+ alias: "elm/genlist/item_odd/music_player/2text/default";
+ alias: "elm/genlist/item_compress/music_player/2text/default";
+ alias: "elm/genlist/item_compress_odd/music_player/2text/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.1 elm.text.3";
+ data.item: "flips" "elm.flip.content";
+ images {
+ image: "00_list_bar_press_1x80.png" COMP;
+ }
+ parts {
+ GENLIST_PART_BASE( GENLIST_HEIGHT_113_INC )
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_BOTTOM_LINE
+ GENLIST_PART_PADDING_TOP( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_BOTTOM( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_16_INC )
+
+ part { name: "elm.text.3";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_154_INC GENLIST_SIZE_48_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 0.0 0.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.text.1";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.text.1";
+ }
+ align: 1.0 0.0;
+ color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: GENLIST_FONT_32_INC;
+ min: 0 1;
+ align: 1.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ part { name: "elm.padding.text3.left";
+ clip_to: "disclip";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_32_INC 0;
+ fixed: 1 0;
+ rel1.to_x: "elm.text.3";
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.text.3";
+ }
+ align: 1.0 0.5;
+ visible: 0;
+ }
+ }
+ part { name: "elm.text.1";
+ clip_to: "disclip";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_SIZE_60_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.text3.left";
+ to_y: "elm.padding.bottom";
+ }
+ align: 0.0 0.0;
+ text {
+ style: "genlist_textblock_style";
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ part { name: "elm.text.2";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.bottom";
+ to_y: "elm.text.1";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.text.3";
+ to_y: "elm.padding.bottom";
+ }
+ color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: GENLIST_FONT_32_INC;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ GENLIST_PART_FLIP
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ // signal: elm,state,%s,active
+ // a "check" item named %s went active
+ // signal: elm,state,%s,passive
+ // a "check" item named %s went passive
+ // default is passive
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_3TEXT
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text.1";
+ target: "elm.text.2";
+ target: "elm.text.3";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ GENLIST_PROGRAM_FLIP_3TEXT
+ }
+ }
+ group { name: "elm/genlist/item/music_player/2text.2/default";
+ alias: "elm/genlist/item_odd/music_player/2text.2/default";
+ alias: "elm/genlist/item_compress/music_player/2text.2/default";
+ alias: "elm/genlist/item_compress_odd/music_player/2text.2/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.1 elm.text.2";
+ data.item: "flips" "elm.flip.content";
+ images {
+ image: "00_list_bar_press_1x80.png" COMP;
+ }
+ parts {
+ GENLIST_PART_BASE( GENLIST_HEIGHT_129_INC )
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_BOTTOM_LINE
+ GENLIST_PART_PADDING_TOP( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_BOTTOM( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_16_INC )
+
+ part { name: "elm.text.1";
+ clip_to: "disclip";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_SIZE_60_INC;
+ fixed: 1 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.top";
+ }
+ align: 0.0 0.0;
+ text {
+ style: "genlist_textblock_style";
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+
+ part { name: "elm.text.2";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.text.1";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.bottom";
+ }
+ color: GENLIST_PART_FONT_LIST_SUB_TEXT_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: GENLIST_FONT_32_INC;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_PRESS_COLOR_INC;
+ }
+ GENLIST_DESCRIPTION_INVISIBLE_SELECTED
+ GENLIST_DESCRIPTION_FLIP_ENABLED
+ }
+ GENLIST_PART_FLIP
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ // signal: elm,state,%s,active
+ // a "check" item named %s went active
+ // signal: elm,state,%s,passive
+ // a "check" item named %s went passive
+ // default is passive
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_2TEXT
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text.1";
+ target: "elm.text.2";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ GENLIST_PROGRAM_FLIP_2TEXT
+ }
+ }
+
+ group { name: "elm/genlist/item/music_edit_default/default";
+ alias: "elm/genlist/item_odd/music_edit_default/default";
+ alias: "elm/genlist/item_compress/music_edit_default/default";
+ alias: "elm/genlist/item_compress_odd/music_edit_default/default";
+ data.item: "stacking" "above";
+ data.item: "decorate_contents" "elm.edit.icon.1 elm.edit.icon.2";
+
+ images {
+ image: "01_list_reorder_bg_above.png" COMP;
+ image: "01_list_reorder_bg_below.png" COMP;
+ }
+ parts {
+ part { name: "base";
+ type: RECT;
+ repeat_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ color: MP_GENLIST_BG_COLOR;
+ }
+ }
+ GENLIST_PART_PADDING_TOP( 0 )
+ GENLIST_PART_PADDING_BOTTOM( 0 )
+ GENLIST_PART_PADDING_RIGHT( 0 )
+
+ part { name: "elm.padding.reorder";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_16_INC 0;
+ fixed: 1 0;
+ visible: 0;
+ rel2.relative: 0.0 1.0;
+ align: 1.0 0.0;
+ }
+ description { state: "reorder" 0.0;
+ inherit: "default" 0.0;
+ align: 0.0 0.0;
+ }
+ }
+ part { name: "elm.decorate_bg";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.reorder";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ to_y: "elm.padding.bottom";
+ }
+ color: MP_GENLIST_BG_COLOR;
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: GENLIST_PART_LIST_PRESS_COLOR_INC;
+ }
+ }
+
+ part { name: "elm.padding.left";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_16_INC 0;
+ fixed: 1 0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.reorder";
+ }
+ rel2.to_x: "elm.padding.reorder";
+ rel2.relative: 0.0 1.0;
+ align: 0.0 0.0;
+ }
+ }
+
+ part { name: "elm.edit.icon.1";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 1.0 0.0;
+ offset: 0 0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.bottom";
+ }
+ }
+ description { state: "enabled" 0.0;
+ inherit: "default" 0.0;
+ align: 0.0 0.5;
+ }
+ }
+
+ part { name: "elm.padding.icon1.right";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_16_INC 0;
+ fixed: 1 0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.edit.icon.1";
+ }
+ rel2.to_x: "elm.edit.icon.1";
+ align: 0.0 0.0;
+ }
+ }
+
+ part { name: "elm.swallow.decorate.content";
+ clip_to: "disclip";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.icon1.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.2 0.0;
+ to_x: "elm.edit.icon.2";
+ to_y: "elm.padding.bottom";
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ description { state: "flipped" 0.0;
+ inherit: "default" 0.0;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 1.3 0.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.bottom";
+ }
+ }
+ }
+ part { name: "elm.padding.icon2.left";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_16_INC 0;
+ fixed: 1 0;
+ visible: 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.swallow.decorate.content";
+ }
+ rel2.to_x: "elm.swallow.decorate.content";
+ align: 0.0 0.0;
+ }
+ }
+
+ part { name: "elm.edit.icon.2";
+ clip_to: "disclip";
+ type: SWALLOW;
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ visible: 1;
+ rel1 {
+ relative: 1.0 0.0;
+ offset: -GENLIST_SIZE_16_INC GENLIST_SIZE_6_INC;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ offset: -GENLIST_SIZE_16_INC -GENLIST_SIZE_8_INC;
+ }
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ description { state: "enabled" 0.0;
+ inherit: "default" 0.0;
+ align: 1.0 0.5;
+ }
+ }
+
+ part { name: "bottom_line";
+ type: RECT;
+ clip_to: "disclip";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 0;
+ fixed: 0 1;
+ visible: 1;
+ color: GENLIST_PART_LIST_LINE_COLOR_INC;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.decorate_bg";
+ offset: 0 -1;
+ }
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "enabled" 0.0;
+ inherit: "default" 0.0;
+ min: 0 GENLIST_SIZE_8_INC;
+ fixed: 0 1;
+ }
+ }
+ part { name: "reorder_glow_above";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1.relative: 0.0 -0.3;
+ rel2.relative: 1.0 0.0;
+ image {
+ normal: "01_list_reorder_bg_above.png";
+ }
+ fill.smooth: 0;
+ }
+ description { state: "reorder" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part { name: "reorder_glow_below";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ rel1.relative: 0.0 1.0;
+ rel2.relative: 1.0 1.3;
+ image {
+ normal: "01_list_reorder_bg_below.png";
+ }
+ fill.smooth: 0;
+ }
+ description { state: "reorder" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "elm.decorate_bg";
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ transition: LINEAR 0.1;
+ target: "elm.decorate_bg";
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ // decorate mode enable signal
+ program { name: "decorate_mode_enabled_effect";
+ signal: "elm,state,decorate,enabled,effect";
+ source: "elm";
+ action: STATE_SET "enabled" 0.0;
+ transition: DECELERATE 0.7;
+ target: "elm.edit.icon.1";
+ target: "elm.edit.icon.2";
+ target: "bottom_line";
+ }
+ program { name: "decorate_mode_disabled_effect";
+ signal: "elm,state,decorate,disabled,effect";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.7;
+ target: "elm.edit.icon.1";
+ target: "elm.edit.icon.2";
+ target: "bottom_line";
+ }
+ program { name: "decorate_mode_enabled";
+ signal: "elm,state,decorate,enabled";
+ source: "elm";
+ action: STATE_SET "enabled" 0.0;
+ target: "elm.edit.icon.1";
+ target: "elm.edit.icon.2";
+ target: "bottom_line";
+ }
+ program { name: "decorate_mode_disabled";
+ signal: "elm,state,decorate,disabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.edit.icon.1";
+ target: "elm.edit.icon.2";
+ target: "bottom_line";
+ }
+
+ // reorder signal
+ program { name: "reorder_enabled";
+ signal: "elm,state,reorder,enabled";
+ source: "elm";
+ action: STATE_SET "reorder" 0.0;
+ target: "elm.padding.reorder";
+ }
+ program { name: "reorder_disabled";
+ signal: "elm,state,reorder,disabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "elm.padding.reorder";
+ }
+
+ program { name: "reorder_enabled_effect";
+ signal: "elm,state,reorder_enabled_effect";
+ source: "elm";
+ action: STATE_SET "reorder" 0.0;
+ transition: DECELERATE 0.7;
+ target: "elm.padding.reorder";
+ }
+ program { name: "reorder_disabled_effect";
+ signal: "elm,state,reorder_disabled_effect";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.7;
+ target: "elm.padding.reorder";
+ }
+ // reorder glow
+ program {
+ name: "show_reorder_glow";
+ signal: "elm,action,item,reorder_start";
+ source: "elm";
+ action: STATE_SET "reorder" 0.0;
+ target: "reorder_glow_above";
+ target: "reorder_glow_below";
+ }
+ program {
+ name: "hide_reorder_glow";
+ signal: "elm,action,item,reorder_end";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "reorder_glow_above";
+ target: "reorder_glow_below";
+ }
+ // flip
+ program {
+ name: "enable_flip_mode";
+ signal: "elm,state,flip,enabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "elm.edit.icon.1";
+ target: "elm.edit.icon.2";
+ after: "enable_flip_mode_next";
+ }
+ program {
+ name: "enable_flip_mode_next";
+ action: STATE_SET "flipped" 0.0;
+ transition: DECELERATE 0.5;
+ target: "elm.swallow.decorate.content";
+ }
+ program {
+ name: "disable_flip_mode";
+ signal: "elm,state,flip,disabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ transition: DECELERATE 0.5;
+ target: "elm.swallow.decorate.content";
+ target: "elm.edit.icon.1";
+ target: "elm.edit.icon.2";
+ }
+ }
+ }
+
+group { name: "elm/genlist/item_compress/multiline/music_player/info/default";
+ alias: "elm/genlist/item_compress_odd/multiline/music_player/info/default";
+ alias: "elm/genlist/item_compress/multiline.music_player/info/default";
+ alias: "elm/genlist/item_compress_odd/multiline.music_player/info/default";
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.1 elm.text.2";
+
+ styles {
+ style { name: "name_style";
+ base: "font=SLP:style=Roman font_size=36 color=#A6A6A6FF wrap=char text_class=list_item";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "tab" "\t";
+ tag: "b" "+ font=SLP:style=Bold";
+ }
+ }
+
+ parts {
+ part { name: "base";
+ type: RECT;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: MP_GENLIST_BG_COLOR;
+ }
+ }
+ GENLIST_PART_BG_IMAGE
+ GENLIST_PART_PADDING_TOP( 0 )
+ GENLIST_PART_PADDING_BOTTOM( GENLIST_PADDING_32_INC )
+ GENLIST_PART_PADDING_LEFT( 0 )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_10_INC )
+ part { name: "elm.text.1";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_SIZE_42_INC;
+ fixed: 0 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.top";
+ }
+ align: 0.0 0.0;
+ color: GENLIST_PART_TEXT_COLOR_INC;
+ text {
+ font: FONT_STYLE_ROMAN;
+ size: 32;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: GENLIST_PART_TEXT_SELECTED_COLOR_INC;
+ }
+ }
+ part { name: "elm.text.2";
+ clip_to: "disclip";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.left";
+ to_y: "elm.text.1";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.bottom";
+ }
+ text {
+ style: "name_style";
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ }
+ GENLIST_PART_DISCLIP
+ }
+ programs {
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "bg_image";
+ target: "elm.text.1";
+ target: "elm.text.2";
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg_image";
+ target: "elm.text.1";
+ target: "elm.text.2";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go_disabled";
+ signal: "elm,state,disabled";
+ source: "elm";
+ action: STATE_SET "disabled" 0.0;
+ target: "disclip";
+ }
+ program { name: "go_enabled";
+ signal: "elm,state,enabled";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "disclip";
+ }
+ }
+ }
+
+#define GENLIST_PART_INDEX_LIST_BASE_EVENT_INC \
+ part { name: "base_event";\
+ type: RECT;\
+ repeat_events: 0;\
+ description { state: "default" 0.0;\
+ color: 0 0 0 0;\
+ }\
+ }
+#define GENLIST_PART_FONT_INDEX_LIST_COLOR_INC 195 195 195 255
+#define GENLIST_DIALOGUE_GROUP_BG_COLOR_INC 121 121 121 255
+
+ group { name: "elm/genlist/item/music_player/grouptitle/default";
+ alias: "elm/genlist/item_odd/music_player/grouptitle/default";
+ alias: "elm/genlist/item_compress/music_player/grouptitle/default";
+ alias: "elm/genlist/item_compress_odd/music_player/grouptitle/default";
+
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text";
+ data.item: "treesize" "GENLIST_TREESIZE_32_INC";
+
+ parts {
+ GENLIST_PART_INDEX_LIST_BASE_EVENT_INC
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_16_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_16_INC )
+ part { name: "rect";
+ type: RECT;
+ repeat_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_HEIGHT_49_INC;
+ color: GENLIST_DIALOGUE_GROUP_BG_COLOR_INC;
+ }
+ description { state: "alpha_off" 0.0;
+ min: 0 GENLIST_SIZE_48_INC;
+ color: GENLIST_DIALOGUE_GROUP_BG_COLOR_INC;
+ }
+ }
+
+ part { name: "elm.text";
+ type: TEXT;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ offset: 0 0;
+ to_x: "elm.padding.right";
+ }
+ color: GENLIST_PART_FONT_INDEX_LIST_COLOR_INC;
+ text {
+ font: "SLP:style=Medium";
+ size: GENLIST_FONT_32_INC;
+ min: 1 1;
+ align: 0.0 0.5;
+ }
+ }
+ }
+ }
+ program {
+ name: "enable_alpha";
+ signal: "elm,state,alpha,enable";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "rect";
+ }
+ program {
+ name: "disable_alpha";
+ signal: "elm,state,alpha,disable";
+ source: "elm";
+ action: STATE_SET "alpha_off" 0.0;
+ target: "rect";
+ }
+ program {
+ name: "selected";
+ source: "rect";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "elm,title_action,item,click" "elm";
+ }
+ }
+
+ group { name : "elm/genlist/item/music_player/dialogue_title/default";
+ alias: "elm/genlist/item_odd/music_player/dialogue_title/default";
+ alias: "elm/genlist/item_compress/music_player/dialogue_title/default";
+ alias: "elm/genlist/item_compress_odd/music_player/dialogue_title/default";
+
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.1 elm.text.2 elm.text.3";
+ data.item: "contents" "elm.icon";
+ data.item: "treesize" "34";
+ images {
+ image: "00_list_bar_press_1x80.png" COMP;
+ }
+ parts {
+ part { name: "base";
+ type: RECT;
+ repeat_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 108;
+ color: 80 80 80 255;
+ }
+ }
+
+ GENLIST_PART_PADDING_TOP( 9 )
+ GENLIST_PART_PADDING_BOTTOM( 9 )
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_10_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_10_INC )
+ GENLIST_PART_BOTTOM_LINE
+
+ part { name: "elm.padding.icon.right";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_10_INC 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.icon";
+ }
+ rel2.to_x: "elm.icon";
+ visible: 0;
+ }
+ }
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 76 76;
+ max: 76 76;
+ fixed: 1 1;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ to_x: "elm.padding.left";
+ }
+ }
+ }
+
+ part { name: "elm.text.1";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 26;
+ fixed: 0 1;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.icon.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ offset: 0 0;
+ to_x: "elm.text.3";
+ to_y: "elm.padding.top";
+ }
+ color: MP_SUB_TEXT_COLOR;
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: MP_SUB_TEXT_SIZE;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ }
+ part { name: "elm.text.2";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_SIZE_42_INC;
+ fixed: 0 1;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.icon.right";
+ to_y: "elm.text.1";
+ }
+ rel2 {
+ relative: 0 1;
+ offset: 0 0;
+ to_x: "elm.text.3";
+ to_y: "elm.text.1";
+ }
+ color: MP_MAIN_TEXT_COLOR;
+ text {
+ font: FONT_STYLE_ROMAN ;
+ size: MP_MAIN_TEXT_SIZE;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ }
+ part { name: "elm.text.3";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_56_INC GENLIST_SIZE_48_INC;
+ fixed: 0 1;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.bottom";
+ }
+ color: MP_MAIN_TEXT_01_COLOR;
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: MP_MAIN_TEXT_01_SIZE;
+ min: 1 1;
+ align: 1.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: 225 225 225 255;
+ }
+ }
+
+ GENLIST_PART_DISCLIP
+ }
+ }
+
+ group { name : "elm/genlist/item/music_player/album_title/default";
+ alias: "elm/genlist/item_odd/music_player/album_title/default";
+ alias: "elm/genlist/item_compress/music_player/album_title/default";
+ alias: "elm/genlist/item_compress_odd/music_player/album_title/default";
+
+ data.item: "stacking" "above";
+ data.item: "selectraise" "on";
+ data.item: "texts" "elm.text.1 elm.text.3";
+ data.item: "contents" "elm.icon elm.text.swallow";
+ data.item: "treesize" "34";
+ images {
+ image: "00_list_bar_press_1x80.png" COMP;
+ }
+ parts {
+ part { name: "base";
+ type: RECT;
+ repeat_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 108;
+ color: 80 80 80 255;
+ }
+ }
+
+ GENLIST_PART_PADDING_TOP( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_BOTTOM( GENLIST_PADDING_8_INC )
+ GENLIST_PART_PADDING_LEFT( GENLIST_PADDING_10_INC )
+ GENLIST_PART_PADDING_RIGHT( GENLIST_PADDING_10_INC )
+ GENLIST_PART_BOTTOM_LINE
+
+ part { name: "elm.padding.icon.right";
+ clip_to: "disclip";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_PADDING_10_INC 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.icon";
+ }
+ rel2.to_x: "elm.icon";
+ visible: 0;
+ }
+ }
+ part { name: "elm.icon";
+ clip_to: "disclip";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 76 76;
+ max: 76 76;
+ fixed: 1 1;
+ align: 0.0 0.5;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "elm.padding.left";
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ to_x: "elm.padding.left";
+ }
+ }
+ }
+
+ part { name: "elm.text.1";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 26;
+ fixed: 0 1;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.icon.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ offset: 0 0;
+ to_x: "elm.text.3";
+ to_y: "elm.padding.top";
+ }
+ color: MP_SUB_TEXT_COLOR;
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: MP_SUB_TEXT_SIZE;
+ min: 0 1;
+ align: 0.0 0.5;
+ }
+ }
+ }
+ part { name: "elm.text.swallow";
+ clip_to: "disclip";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 GENLIST_SIZE_42_INC;
+ fixed: 0 1;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "elm.padding.icon.right";
+ to_y: "elm.text.1";
+ }
+ rel2 {
+ relative: 0 1;
+ offset: 0 0;
+ to_x: "elm.text.3";
+ to_y: "elm.text.1";
+ }
+ }
+ }
+ part { name: "elm.text.3";
+ clip_to: "disclip";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: GENLIST_SIZE_56_INC GENLIST_SIZE_48_INC;
+ fixed: 0 1;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ offset: -40 0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ to_x: "elm.padding.right";
+ to_y: "elm.padding.bottom";
+ }
+ color: MP_MAIN_TEXT_01_COLOR;
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: MP_MAIN_TEXT_01_SIZE;
+ min: 1 1;
+ align: 1.0 0.5;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ color: 225 225 225 255;
+ }
+ }
+
+ GENLIST_PART_DISCLIP
+ }
+ }
+
diff --git a/layout/mp-library.edc b/layout/mp-library.edc
new file mode 100755
index 0000000..3d4ba95
--- /dev/null
+++ b/layout/mp-library.edc
@@ -0,0 +1,1301 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+/* main size */
+#define MAIN_W 480
+#define MAIN_H 800
+
+#define TITLEBAR_H_R (96/MAIN_H)
+#define SELALL_BG_H_R (188/MAIN_H)
+#define SELALL_TAB_H_R (217/MAIN_H)
+#define SELALL_ALBUM_H_R (231/MAIN_H)
+#define SELALL_TITLE_H_R (188/MAIN_H)
+/* font name*/
+#define FONT_NAME "system_content"
+
+#define FONT_STYLE_ROMAN "SLP:style=Roman"
+#define FONT_STYLE_MEDIUM "SLP:style=Medium"
+#define FONT_STYLE_BOLD "SLP:style=Bold"
+
+/* indicator */
+#define IND_H_R (38.0/MAIN_H)
+
+/* tab */
+#define TAB_H_R (125/MAIN_H)
+
+/* soft key*/
+#define SOFTKEY_SY (722/MAIN_H)
+
+#define HEAD_SY (38/MAIN_H)
+#define HEAD_EY (139/MAIN_H)
+
+#define ICON_X (108/MAIN_W)
+#define ICON_Y (108/MAIN_H)
+
+
+
+
+/* cover image in header */
+#define HEAD_COVER_SX (10/MAIN_W)
+#define HEAD_COVER_SY (48/MAIN_H)
+
+#define HEAD_COVER_EX (90/MAIN_W)
+#define HEAD_COVER_EY (128/MAIN_H)
+
+/* title in header */
+#define HEAD_TITLE_SX (100/MAIN_W)
+#define HEAD_TITLE_SY (73/MAIN_H)
+
+#define ALBUM_TITLE_EY (88/MAIN_H)
+
+#define ALBUM_SUB_TITLE_SY (98/MAIN_H)
+#define COLOR_CHK_TEXT 35 190 255
+#define ITEM_CHK_L (404/MAIN_W)
+#define ITEM_CHK_T (10/MAIN_H)
+#define ITEM_CHK_R (478/MAIN_W)
+#define SELALL_H 92
+#define NEW_INDICATOR 52/MAIN_H
+
+#define NOW_PLAYING_H 100
+#define BG_COLOR 37 37 37 255
+
+#define SEARCHBAR_H_INC 107
+
+images {
+ image: "34_header_thumb_bg.png" COMP;
+ image: "01_list_selectall_bg.png" COMP;
+}
+
+#define TEST_COLOR 255 0 0 255
+#define CONTROLBAR_LARGE_HEIGHT_INC 122;
+
+collections {
+ #include "mp-no-contents.edc"
+ group {
+ name: "control_layout";
+ parts {
+ part { name: "background";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: BG_COLOR;
+ }
+ }
+ part {
+ name : "elm.swallow.controlbar";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0 0;
+ min: 0 CONTROLBAR_LARGE_HEIGHT_INC;
+ fixed: 0 1;
+ visible: 0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 0.0;}
+
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+
+ part {
+ name : "elm.swallow.content";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ description {
+ state: "show" 0.0;
+ rel1 { relative: 0.0 1.0; to_y: "elm.swallow.controlbar";}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+ }
+
+ programs {
+ program {
+ name : "show_control";
+ signal : "show.control";
+ source : "music_app";
+ action : STATE_SET "show" 0.0;
+ target : "elm.swallow.content";
+ target : "elm.swallow.controlbar";
+ transition: LINEAR 0.3;
+ }
+ program {
+ name : "hide_control";
+ signal : "hide.control";
+ source : "music_app";
+ action : STATE_SET "default" 0.0;
+ target : "elm.swallow.content";
+ target : "elm.swallow.controlbar";
+ }
+ }
+ }
+
+ group {
+ name: "main_layout";
+ parts {
+ part { name: "background";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: BG_COLOR;
+ }
+ }
+ part {
+ name : "now_playing";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0 0;
+ min: 0 NOW_PLAYING_H;
+ fixed: 0 1;
+ visible: 0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 0.0;}
+
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+
+ part {
+ name : "list_content";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ description {
+ state: "show" 0.0;
+ rel1 { relative: 0.0 1.0; to_y: "now_playing"; offset: 0 1;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+
+ part {
+ name: "elm.swallow.content.index";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "list_content"; }
+ rel2 { to: "list_content"; }
+ }
+ }
+ }
+
+ programs {
+ program {
+ name : "show_now_playng";
+ signal : "SHOW_NOW_PLAING";
+ source : "music_app";
+ action : STATE_SET "show" 0.0;
+ target : "now_playing";
+ target : "list_content";
+ }
+ program {
+ name : "hide_now_playng";
+ signal : "HIDE_NOW_PLAING";
+ source : "music_app";
+ action : STATE_SET "default" 0.0;
+ target : "now_playing";
+ target : "list_content";
+ }
+ }
+ }
+
+ group {
+ name: "main_layout_with_searchbar";
+
+ parts {
+
+ part {
+ name: "search_bar";
+ type: SWALLOW;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.0 0.0;
+ fixed: 0 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 0.0;}
+ min: 0 SEARCHBAR_H_INC;
+ }
+ description {
+ state: "hide" 0.0;
+ align: 0.0 0.0;
+ fixed: 0 0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 0.0;}
+ }
+ }
+
+ part {
+ name : "now_playing";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0 0;
+ min: 0 60;
+ fixed: 0 1;
+ visible: 0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 0.0;}
+
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 1.0; to_y: "search_bar"; offset: 0 1;}
+ rel2 { relative: 1.0 0.0;}
+ }
+ }
+
+ part {
+ name : "list_content";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 1.0; to: "search_bar"; offset: 0 1;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ description {
+ state: "show" 0.0;
+ rel1 { relative: 0.0 1.0; to_y: "now_playing"; offset: 0 1;}
+ rel2 { relative: 1.0 1.0;}
+ }
+ }
+
+ part {
+ name: "elm.swallow.content.index";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "list_content"; }
+ rel2 { to: "list_content"; }
+ }
+ }
+
+ part {
+ name: "elm.rect.screen";
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ rel1 {relative: 0.0 0.0; to: "list_content"; }
+ rel2 {relative: 1.0 1.0; to: "list_content"; }
+ color: 0 0 0 128;
+ }
+ description {
+ state: "hide" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name : "show_now_playng";
+ signal : "SHOW_NOW_PLAING";
+ source : "music_app";
+ action : STATE_SET "show" 0.0;
+ target : "now_playing";
+ target : "list_content";
+ }
+ program {
+ name : "hide_now_playng";
+ signal : "HIDE_NOW_PLAING";
+ source : "music_app";
+ action : STATE_SET "default" 0.0;
+ target : "now_playing";
+ target : "list_content";
+ }
+ program {
+ name : "hide_search";
+ signal : "hide.search";
+ source : "music_app";
+ action : STATE_SET "hide" 0.0;
+ target : "search_bar";
+ }
+ program {
+ name : "show_search";
+ signal : "show.search";
+ source : "music_app";
+ action : STATE_SET "default" 0.0;
+ target : "search_bar";
+ }
+ program {
+ name : "show_screen";
+ signal : "show.screen";
+ source : "music_app";
+ action : STATE_SET "default" 0.0;
+ target : "elm.rect.screen";
+ }
+ program {
+ name : "hide_screen";
+ signal : "hide.screen";
+ source : "music_app";
+ action : STATE_SET "hide" 0.0;
+ target : "elm.rect.screen";
+ }
+ }
+ }
+
+ group {
+ name: "main";
+ min: MAIN_W MAIN_H;
+
+ parts {
+ part { name: "background";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; }
+ rel2 { relative: 1.0 1.0; offset: -1 -1; }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "img_selall";
+ mouse_events: 0;
+
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 0.0 TITLEBAR_H_R;}
+ rel2 { relative: 1.0 SELALL_BG_H_R;}
+ image { normal: "01_list_selectall_bg.png"; }
+ }
+
+ description {
+ state: "delete" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 TITLEBAR_H_R;}
+ rel2 { relative: 1.0 SELALL_BG_H_R;}
+ image { normal: "01_list_selectall_bg.png"; }
+ }
+ description {
+ state: "add_to_plst" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 TITLEBAR_H_R;}
+ rel2 { relative: 1.0 SELALL_BG_H_R;}
+ image { normal: "01_list_selectall_bg.png"; }
+ }
+ description {
+ state: "sel_tab" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 TAB_H_R;}
+ rel2 { relative: 1.0 SELALL_TAB_H_R;}
+ image { normal: "01_list_selectall_bg.png"; }
+ }
+ description {
+ state: "sel_title" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 TITLEBAR_H_R;}
+ rel2 { relative: 1.0 SELALL_TITLE_H_R;}
+ image { normal: "01_list_selectall_bg.png"; }
+ }
+ description {
+ state: "sel_album" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 HEAD_EY;}
+ rel2 { relative: 1.0 SELALL_ALBUM_H_R;}
+ image { normal: "01_list_selectall_bg.png"; }
+ }
+ }
+
+ part {
+ name: "txt_selall";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 1 1;
+ visible: 0;
+ color: 0 145 255 255;
+ rel1 { to: "img_selall"; relative: 0.0 0.0; }
+ rel2 { to: "img_selall"; relative: 0.6 1.0; }
+ text {
+ font: FONT_NAME;
+ size: 34;
+ min: 0 1;
+ align: 0.1 0.6;
+ text: "Select all";
+ }
+ }
+
+ description {
+ state: "delete" 0.0;
+ fixed: 1 1;
+ visible: 1;
+ color: 0 145 255 255;
+ rel1 { to: "img_selall"; relative: 0.0 0.0; }
+ rel2 { to: "img_selall"; relative: 0.6 1.0; }
+ text {
+ font: FONT_NAME;
+ size: 34;
+ min: 0 1;
+ align: 0.1 0.6;
+ text: "Select all";
+ }
+ }
+
+ description {
+ state: "add_to_plst" 0.0;
+ fixed: 1 1;
+ visible: 1;
+ color: 0 145 255 255;
+ rel1 { to: "img_selall"; relative: 0.0 0.0; }
+ rel2 { to: "img_selall"; relative: 0.6 1.0; }
+ text {
+ font: FONT_NAME;
+ size: 34;
+ min: 0 1;
+ align: 0.1 0.6;
+ text: "Select all";
+ }
+ }
+ description {
+ state: "sel_tab" 0.0;
+ inherit: "add_to_plst" 0.0;
+ }
+ description {
+ state: "sel_title" 0.0;
+ inherit: "add_to_plst" 0.0;
+ }
+ description {
+ state: "sel_album" 0.0;
+ inherit: "add_to_plst" 0.0;
+ }
+ }
+
+ part {
+ name: "swl_chk";
+ type: SWALLOW;
+ mouse_events: 1;
+
+ description {
+ fixed: 1 1;
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { to: "img_selall"; relative: ITEM_CHK_L ITEM_CHK_T; }
+ rel2 { to: "img_selall"; relative: ITEM_CHK_R 0.0; offset: 0.0 SELALL_H; }
+ }
+
+ description {
+ fixed: 1 1;
+ state: "delete" 0.0;
+ rel1 { to: "img_selall"; relative: ITEM_CHK_L ITEM_CHK_T; }
+ rel2 { to: "img_selall"; relative: ITEM_CHK_R 0.0; offset: 0.0 SELALL_H; }
+ }
+
+ description {
+ fixed: 1 1;
+ state: "add_to_plst" 0.0;
+ rel1 { to: "img_selall"; relative: ITEM_CHK_L ITEM_CHK_T; }
+ rel2 { to: "img_selall"; relative: ITEM_CHK_R 0.0; offset: 0.0 SELALL_H; }
+ }
+ description {
+ state: "sel_tab" 0.0;
+ inherit: "add_to_plst" 0.0;
+ }
+ description {
+ state: "sel_title" 0.0;
+ inherit: "add_to_plst" 0.0;
+ }
+ description {
+ state: "sel_album" 0.0;
+ inherit: "add_to_plst" 0.0;
+ }
+ }
+
+ /* list part */
+ part {
+ name: "list";
+ type: SWALLOW;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 TAB_H_R; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "title" 0.0;
+ rel1 { relative: 0.0 TITLEBAR_H_R; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "header" 0.0;
+ rel1 { relative: 0.0 HEAD_EY; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "delete" 0.0;
+ rel1 { relative: 0.0 SELALL_BG_H_R; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "album_tracks" 0.0;
+ rel1 { relative: 0.0 HEAD_EY; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "artist_tracks" 0.0;
+ rel1 { relative: 0.0 TITLEBAR_H_R; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "add_to_plst" 0.0;
+ rel1 { relative: 0.0 SELALL_BG_H_R; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "plst_tracks" 0.0;
+ rel1 { relative: 0.0 HEAD_EY; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "sel_tab" 0.0;
+ rel1 { relative: 0.0 SELALL_TAB_H_R; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "sel_title" 0.0;
+ rel1 { relative: 0.0 SELALL_TITLE_H_R; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ description {
+ state: "sel_album" 0.0;
+ rel1 { relative: 0.0 SELALL_ALBUM_H_R; offset: 1 1;}
+ rel2 { relative: 1.0 1.0; offset: -1 -1;}
+ }
+ }
+ part {
+ name: "plst_header";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "delete" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "album_tracks" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "artist_tracks" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "add_to_plst" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "plst_tracks" 0.0;
+ visible: 1;
+ }
+ }
+
+ part {
+ name: "album_header";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "delete" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "album_tracks" 0.0;
+ visible: 1;
+ }
+ description {
+ state: "artist_tracks" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "add_to_plst" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "plst_tracks" 0.0;
+ visible: 0;
+ }
+ }
+
+ part{
+ name: "title_bar";
+ type : SWALLOW;
+ mouse_events: 0;
+ description{
+ state: "default" 0.0;
+ visible: 0;
+ rel1{relative: 0.0 0.0;}
+ rel2{relative: 1.0 TITLEBAR_H_R; offset: -1 -1; to: background;}
+ }
+ description {
+ state: "delete" 0.0;
+ visible: 1;
+ rel1{relative: 0.0 0.0;}
+ rel2{relative: 1.0 TITLEBAR_H_R; offset: -1 -1; to: background;}
+ }
+ description {
+ state: "album_tracks" 0.0;
+ visible: 0;
+ }
+ description {
+ state: "artist_tracks" 0.0;
+ visible: 1;
+ rel1{relative: 0.0 0.0;}
+ rel2{relative: 1.0 TITLEBAR_H_R; offset: -1 -1; to: background;}
+ }
+ description {
+ state: "add_to_plst" 0.0;
+ visible: 1;
+ rel1{relative: 0.0 0.0;}
+ rel2{relative: 1.0 TITLEBAR_H_R; offset: -1 -1; to: background;}
+ }
+ description {
+ state: "plst_tracks" 0.0;
+ visible: 0;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "click_exit";
+ source: "background";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "EXIT" "EDJ";
+ }
+ program {
+ name: "del_tracks";
+ signal: "DELETE";
+ source: "LIBRARY";
+ action: STATE_SET "delete" 0.0;
+ target: "list";
+ target: "plst_header";
+ target: "album_header";
+ target: "title_bar";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+ program {
+ name: "add_tracks";
+ signal: "ADD_TO_PLST";
+ source: "LIBRARY";
+ action: STATE_SET "add_to_plst" 0.0;
+ target: "list";
+ target: "plst_header";
+ target: "album_header";
+ target: "title_bar";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+ program {
+ name: "album_tracks";
+ signal: "GO_TO_ALBUM";
+ source: "LIBRARY";
+ action: STATE_SET "album_tracks" 0.0;
+ target: "list";
+ target: "plst_header";
+ target: "album_header";
+ target: "title_bar";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+
+ program {
+ name: "cluster_tracks";
+ signal: "GO_TO_CLUSTER";
+ source: "LIBRARY";
+ action: STATE_SET "album_tracks" 0.0;
+ target: "list";
+ target: "plst_header";
+ target: "album_header";
+ target: "title_bar";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+
+ program {
+ name: "artist_tracks";
+ signal: "GO_TO_ARTIST";
+ source: "LIBRARY";
+ action: STATE_SET "artist_tracks" 0.0;
+ target: "list";
+ target: "plst_header";
+ target: "album_header";
+ target: "title_bar";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+
+ program {
+ name: "plst_tracks";
+ signal: "GO_TO_PLST";
+ source: "LIBRARY";
+ action: STATE_SET "plst_tracks" 0.0;
+ target: "list";
+ target: "plst_header";
+ target: "album_header";
+ target: "title_bar";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+
+ program {
+ name: "default";
+ signal: "NORMAL";
+ source: "LIBRARY";
+ action: STATE_SET "default" 0.0;
+ target: "list";
+ target: "plst_header";
+ target: "album_header";
+ target: "title_bar";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+ program {
+ name: "sel_track_tab";
+ signal: "SEL_TAB";
+ source: "LIBRARY";
+ action: STATE_SET "sel_tab" 0.0;
+ target: "list";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+ program {
+ name: "sel_track_title";
+ signal: "SEL_TITLE";
+ source: "LIBRARY";
+ action: STATE_SET "sel_title" 0.0;
+ target: "list";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+ program {
+ name: "sel_track_album";
+ signal: "SEL_ALBUM";
+ source: "LIBRARY";
+ action: STATE_SET "sel_album" 0.0;
+ target: "list";
+ target: "img_selall";
+ target: "txt_selall";
+ target: "swl_chk";
+ }
+ }
+ }
+
+images
+{
+ image: "01_search_input_bg.png" COMP;
+ image: "01_search_input_field_bg_l.png" COMP;
+ image: "01_search_input_field_bg_c.png" COMP;
+ image: "01_search_input_field_bg_r.png" COMP;
+ image: "01_search_button.png" COMP;
+}
+
+ group {
+ name: "plst_items";
+ parts {
+ part {
+ name: "header";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 HEAD_SY; offset: 0 0;}
+ rel2 { relative: 1.0 HEAD_EY; offset: 0 0;}
+ image { normal: "34_header_thumb_bg.png"; }
+ }
+ }
+ part {
+ name: "plst-cover";
+ type: SWALLOW;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: HEAD_COVER_SX HEAD_COVER_SY; offset:0 0;}
+ rel2 { relative: HEAD_COVER_EX HEAD_COVER_EY; offset:0 0;}
+ }
+ }
+ part {
+ name: "plst-entry";
+ type: IMAGE;
+ mouse_events: 1;
+ description {
+ fixed: 1 1;
+ state: "default" 0.0;
+ rel1 { relative, HEAD_TITLE_SX HEAD_TITLE_SY; offset, 0 0;}
+ rel2 { relative, 1.0 HEAD_EY; offset, -10 -10;}
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name, "plst-title";
+ type, TEXT;
+ mouse_events, 0;
+ description {
+ state, "default" 0.0;
+ color, 203 203 203 255;
+ rel1 { relative, HEAD_TITLE_SX HEAD_TITLE_SY; offset, 0 0;}
+ rel2 { relative, 1.0 HEAD_EY; offset, 0 0;}
+ text {
+ font: FONT_NAME;
+ size: 34;
+ min: 0 1;
+ align: 0.0 0.0;
+ text: "Touch the Light";
+ }
+ }
+ }
+ }
+ programs {
+ program {
+ name: "plst_entry_clicked";
+ source: "plst-entry";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "plst_text_clicked" "plst-entry";
+ }
+ program {
+ name: "plst_cover_clicked";
+ source: "plst-cover";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "plst_cover_clicked" "plst-cover";
+ }
+
+ program {
+ name: "plst-entry_visible" ;
+ signal: "plst-entry_visible";
+ source: "plst-entry";
+ action: STATE_SET "default" 0.0;
+ target: "plst-entry";
+ }
+
+ program {
+ name: "plst-entry_invisible" ;
+ signal: "plst-entry_invisible";
+ source: "plst-entry";
+ action: STATE_SET "invisible" 0.0;
+ target: "plst-entry";
+ }
+ }
+ }
+
+ group{
+ name: "coverflow";
+ parts{
+ part {
+ name: "cover_title";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 { relative: 0.0 0.0; offset: 0 0;}
+ rel2 { relative: 1.0 0.5; offset: 0 0;}
+ text {
+ font: FONT_NAME;
+ size: 34;
+ min: 0 1;
+ align: 0.5 0.5;
+ text: "";
+ }
+ }
+ }
+ part {
+ name: "cover_artist";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 0 145 255 255;
+ rel1 { relative: 0.0 0.5; offset: 0 0;}
+ rel2 { relative: 1.0 1.0; offset: 0 0;}
+ text {
+ font: FONT_NAME;
+ size: 24;
+ min: 0 1;
+ align: 0.5 0.5;
+ text: "";
+ }
+ }
+ }
+ }
+ }
+
+ group{
+ name: "coverflow_index_view";
+ parts{
+ part {
+ name: "focused_index";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 { relative: 0.0 0.0; offset: 0 0;}
+ rel2 { relative: 1.0 0.3; offset: 0 0;}
+ text {
+ font: FONT_NAME;
+ size: 24;
+ min: 0 1;
+ align: 0.5 0.5;
+ text: "";
+ }
+ }
+ }
+ part {
+ name: "cover_title";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 0 145 255 255;
+ rel1 { relative: 0.0 0.5; offset: 0 0;}
+ rel2 { relative: 1.0 0.75; offset: 0 0;}
+ text {
+ font: FONT_NAME;
+ size: 24;
+ min: 0 1;
+ align: 0.5 0.5;
+ text: "";
+ }
+ }
+ }
+ part {
+ name: "cover_artist";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 201 201 201 255;
+ rel1 { relative: 0.0 0.75; offset: 0 0;}
+ rel2 { relative: 1.0 1.0; offset: 0 0;}
+ text {
+ font: FONT_NAME;
+ size: 24;
+ min: 0 1;
+ align: 0.5 0.5;
+ text: "";
+ }
+ }
+ }
+ }
+ }
+
+ group {
+ name: "album_items";
+ parts {
+ part {
+ name: "header";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 HEAD_SY; offset: 0 0;}
+ rel2 { relative: 1.0 HEAD_EY; offset: 0 0;}
+ image { normal: "34_header_thumb_bg.png"; }
+ }
+ }
+ part {
+ name: "album-cover";
+ type: SWALLOW;
+
+ description {
+ state: "default" 0.0;
+ rel1 { relative: HEAD_COVER_SX HEAD_COVER_SY; offset:0 0;}
+ rel2 { relative: HEAD_COVER_EX HEAD_COVER_EY; offset:0 0;}
+ }
+ }
+ part {
+ name, "album-title";
+ type, TEXT;
+ mouse_events, 0;
+ description {
+ fixed: 1 1;
+ state, "default" 0.0;
+ color, 255 255 255 255;
+ rel1 { relative, HEAD_TITLE_SX HEAD_TITLE_SY; offset, 0 0;}
+ rel2 { relative, 1.0 ALBUM_TITLE_EY; offset, 0 0;}
+ text {
+ font: FONT_NAME;
+ size: 34;
+ min: 0 1;
+ align: 0.0 0.5;
+ text: "Touch the Light";
+ }
+ }
+ }
+ part {
+ name, "album-subtitle";
+ type, TEXT;
+ mouse_events, 0;
+ description {
+ fixed: 1 1;
+ state, "default" 0.0;
+ color, 203 203 203 255;
+ rel1 { relative, HEAD_TITLE_SX ALBUM_SUB_TITLE_SY; }
+ rel2 { relative, 1.0 1.0; offset, 0 0;}
+ text {
+ font: FONT_NAME;
+ size: 24;
+ min: 0 1;
+ align: 0.0 0.0;
+ text: "Samsung";
+ }
+ }
+ }
+ }
+ }
+
+
+
+#define SEARCHVIEW_H 114
+#define SEARCHVIEW_H_R (SEARCHVIEW_H/MAIN_H)
+#define SEARCHVIEW_Y 38
+
+#define SEARCH_BUTTON_W 60
+#define SEARCH_BUTTON_H 60
+#define SEARCH_ENTRY_L_W 1
+#define SEARCH_ENTRY_R_W 3
+#define SEARCH_ENTRY_H 51
+
+#define SEARCH_ENTRY_L_R1_X 12
+#define SEARCH_ENTRY_L_R1_Y 48
+#define SEARCH_ENTRY_L_R2_Y (SEARCH_ENTRY_L_R1_Y+SEARCH_ENTRY_H)
+
+#define SEARCH_ENTRY_C_R1_X (SEARCH_ENTRY_L_R1_X+1)
+#define SEARCH_ENTRY_C_R1_Y SEARCH_ENTRY_L_R1_Y
+#define SEARCH_ENTRY_C_LENGTH 392
+#define SEARCH_ENTRY_C_R2_X (SEARCH_ENTRY_L_R1_X+SEARCH_ENTRY_C_LENGTH+1)
+#define SEARCH_ENTRY_C_R2_Y SEARCH_ENTRY_L_R2_Y
+
+#define SEARCH_ENTRY_R_R1_X (SEARCH_ENTRY_C_R1_X+SEARCH_ENTRY_C_LENGTH)
+#define SEARCH_ENTRY_R_R1_Y SEARCH_ENTRY_L_R1_Y
+#define SEARCH_ENTRY_R_R2_X SEARCH_ENTRY_R_R1_X
+#define SEARCH_ENTRY_R_R2_Y SEARCH_ENTRY_L_R2_Y
+
+#define SEARCH_BUTTON_R1_X 412
+#define SEARCH_BUTTON_R1_Y 44
+#define SEARCH_BUTTON_R2_X 472
+#define SEARCH_BUTTON_R2_Y (SEARCH_BUTTON_R1_Y+60)
+
+#define SEARCH_CONTENT_X 24
+#define SEARCH_TEXT_NAME "search_txt"
+ group {
+ name: "search_entry";
+
+ parts {
+ part {
+ name: "search_input_bg";
+ type: IMAGE;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; offset: 0 0;}
+ rel2 { relative: 1.0 0; offset: 0 SEARCHVIEW_H;}
+ image { normal: "01_search_input_bg.png"; }
+ }
+ }
+ /* Image bg */
+ part {
+ name: "search_entry_bgl";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ fixed: 1 1;
+ state: "default" 0.0;
+ min: SEARCH_ENTRY_L_W SEARCH_ENTRY_H;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; offset: (SEARCH_ENTRY_L_R1_X) (SEARCH_ENTRY_L_R1_Y); to:"search_input_bg"; }
+ rel2 { relative: 0.0 0.0; offset: (SEARCH_ENTRY_L_R1_X) (SEARCH_ENTRY_L_R2_Y); to:"search_input_bg";}
+ image { normal: "01_search_input_field_bg_l.png"; }
+ }
+ }
+ part {
+ name: "search_entry_bgc";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: SEARCH_ENTRY_C_LENGTH SEARCH_ENTRY_H;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; offset: (SEARCH_ENTRY_C_R1_X) (SEARCH_ENTRY_C_R1_Y);to: "search_input_bg";}
+ rel2 { relative: 0.0 0.0; offset: (SEARCH_ENTRY_C_R2_X) (SEARCH_ENTRY_C_R2_Y);to: "search_input_bg";}
+ image { normal: "01_search_input_field_bg_c.png"; }
+ }
+ }
+ part {
+ name: "search_entry_bgr";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ fixed: 1 1;
+ state: "default" 0.0;
+ min: SEARCH_ENTRY_R_W SEARCH_ENTRY_H;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; offset: (SEARCH_ENTRY_R_R1_X) (SEARCH_ENTRY_R_R1_Y); to: "search_input_bg";}
+ rel2 { relative: 0.0 0.0; offset: (SEARCH_ENTRY_R_R2_X) (SEARCH_ENTRY_R_R2_Y); to: "search_input_bg";}
+ image { normal: "01_search_input_field_bg_r.png"; }
+ }
+ }
+ part {
+ name: "search_button_bg";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: SEARCH_BUTTON_W SEARCH_BUTTON_H;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; offset: (SEARCH_BUTTON_R1_X) (SEARCH_BUTTON_R1_Y);}
+ rel2 { relative: 0.0 0.0; offset: (SEARCH_BUTTON_R2_X) (SEARCH_BUTTON_R2_Y);}
+ image { normal: "01_search_button.png"; }
+ }
+ }
+ part {
+ name: SEARCH_TEXT_NAME;
+ type: TEXT;
+ scale: 1;
+ mouse_events: 1;
+ description
+ {
+ min: (SEARCH_ENTRY_C_LENGTH - SEARCH_CONTENT_X) SEARCH_ENTRY_H;
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: SEARCH_CONTENT_X 0;to: "search_entry_bgc";}
+ rel2 { relative: 1.0 1.0; offset: 0 0;to: "search_entry_bgc";}
+ align: 0.5 0.5;
+ color: 203 203 203 255;
+ text {
+ font: CONTACT_FONT_NAME;
+ size: 34;
+ text: "Tap to search";
+ align: 0.0 0.5;
+ }
+ }
+ }
+ }
+ programs {
+ program {
+ name: "search_entry_clicked";
+ source: "search_entry_bgc";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "search_text_clicked" 0.0;
+ }
+ program {
+ name: "search_text_clicked";
+ source: SEARCH_TEXT_NAME;
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "search_text_clicked" 0.0;
+ }
+ }
+ }
+group {
+ name: "popup";
+ parts {
+ part { name: "background";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.45 0.3; offset: 0 0; }
+ rel2 { relative: 0.55 0.7; offset: -1 -1; }
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "progress";
+ type: SWALLOW;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.3 0.3; offset: 0 0; }
+ rel2 { relative: 0.7 0.7; offset: -1 -1; }
+
+ }
+ }
+ }
+}
+group {
+ name: "library_controlbar";
+
+ parts {
+ part {
+ name: "elm.swallow.tabbar";
+ type: SWALLOW;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ }
+ }
+ }
+}
+
+}
diff --git a/layout/mp-naviframe.edc b/layout/mp-naviframe.edc
new file mode 100755
index 0000000..2b2cae7
--- /dev/null
+++ b/layout/mp-naviframe.edc
@@ -0,0 +1,904 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+
+#define NAVIFRAME_VIEW_TRANS_TIME 0.3
+
+//2 define custom style here..
+#define NAVIFRAME_TITLE_TEXT_COLOR_INC 255 255 255 255
+#define NAVIFRAME_TITLE_BG_COLOR_INC 0 0 0 255
+#define NAVIFRAME_TITLE_LEFT_SEPARATOR_COLOR_INC 3 3 3 255
+#define NAVIFRAME_TITLE_RIGHT_SEPARATOR_COLOR_INC 52 52 52 255
+#define NAVIFRAME_CONTROLBAR_BG_COLOR_INC 31 31 31 255
+#define NAVIFRAME_OH_BORDER_INC 0 0 4 0
+#define NAVIFRAME_NO_BUTTON_ICON_PADDING_INC 52
+#define NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 144
+
+#define MP_NAVIFRAME_BG_IMAGE "T02_title_bg.png"
+
+
+ group { name:"elm/naviframe/item/basic/music/default";
+ alias:"elm/naviframe/item/1line/music/default";
+ images {
+ image: "00_winset_control_top_bg.png" COMP;
+ image: "00_winset_control_top_arrow.png" COMP;
+ image: MP_NAVIFRAME_BG_IMAGE COMP;
+ }
+ script {
+ public oh_show = 0; //optionheader show/hide
+ public oh_close = 0; //optionheader close/open
+ public cbar_bg = 0; //Controlbar BG Show call count
+ public left_btn_visible = 0; //whether left btn is shown
+ public icon_visible = 0; //whether icon is shown
+ public right_btn_visible = 0; //whether right btn is shown
+ public more_btn_visible = 0; //whether more btn is shown
+ public large_padded_center_align = 0; //large padding based on button size for center align for 1/2 buttons.
+ }
+ parts {
+ part { name: "base";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ }
+ description { state: "left" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: -1.0 0.0;
+ rel2.relative: 0.0 1.0;
+ }
+ description { state: "right" 0.0;
+ inherit: "default" 0.0;
+ rel1.relative: 1.0 0.0;
+ rel2.relative: 2.0 1.0;
+ }
+ }
+ part { name: "title_bg";
+ //type: RECT;
+ type: IMAGE;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 1 NAVIFRAME_TITLE_H_INC;
+ align: 0.0 0.0;
+ fixed: 0 1;
+ rel1 { relative: 0.0 0.0; to: "base"; }
+ rel2 { relative: 1.0 0.0; to: "base"; }
+ //color: NAVIFRAME_TITLE_BG_COLOR_INC;
+ image.normal: MP_NAVIFRAME_BG_IMAGE;
+ }
+ description { state: "hide" 0.0;
+ inherit: "default" 0.0;
+ min: 0 0;
+ max: 0 0;
+ fixed: 1 1;
+ }
+ }
+ part { name: "title_clip";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1 { to: "title_bg"; }
+ rel2 { to: "title_bg"; }
+ }
+ }
+ part { name: "optionheader_bg";
+ type: IMAGE;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 1 0;
+ align: 0.5 0;
+ fixed: 1 1;
+ rel1.to: "title_bg";
+ rel1.relative: 0 1;
+ rel2.to: "title_bg";
+ visible: 0;
+ image { normal: "00_winset_control_top_bg.png";
+ border: NAVIFRAME_OH_BORDER_INC;
+ }
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ min: 1 NAVIFRAME_OH_OPENED_H_INC;
+ visible: 1;
+ }
+ description { state: "hide" 0.0;
+ inherit: "default" 0.0;
+ min: 0 0;
+ max: 0 0;
+ fixed: 1 1;
+ }
+ }
+ part { name: "optionheader_clip";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1 { to: "optionheader_bg"; }
+ rel2 { to: "optionheader_bg"; }
+ }
+ }
+ part { name: "optionheader_top_padding";
+ type: RECT;
+ scale: 1;
+ clip_to: "optionheader_clip";
+ description { state: "default" 0.0;
+ min: 0 NAVIFRAME_OH_PADDING_INC;
+ rel1 { relative: 0.0 0.0; to: "optionheader_bg"; }
+ rel2 { relative: 1.0 0.0; to: "optionheader_bg"; }
+ fixed: 0 1;
+ align: 0.0 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "optionheader";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "optionheader_clip";
+ description { state: "default" 0.0;
+ min: 0 NAVIFRAME_OH_CONTENT_H_INC;
+ rel1 { relative: 0.0 1.0; to: "optionheader_top_padding"; }
+ rel2 { relative: 1.0 1.0; to: "optionheader_top_padding"; }
+ fixed: 0 1;
+ align: 0.0 0.0;
+ }
+ }
+ part { name: "optionheader_bottom_padding";
+ type: RECT;
+ scale: 1;
+ clip_to: "optionheader_clip";
+ description { state: "default" 0.0;
+ min: 0 NAVIFRAME_OH_PADDING_INC;
+ rel1 { relative: 0.0 1.0; to: "optionheader"; }
+ rel2 { relative: 1.0 1.0; to: "optionheader"; }
+ fixed: 0 1;
+ align: 0.0 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ repeat_events: 0;
+ clip_to: "content_clip";
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel1.relative: 0.0 1.0;
+ rel1.to_x: "base";
+ rel1.to_y: "optionheader_bg";
+ rel2.relative: 1.0 0.0;
+ rel2.to_x: "base";
+ rel2.to_y: "controlbar_bg";
+ }
+ }
+ part { name: "content_clip";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "elm.swallow.content";
+ rel2.to: "elm.swallow.content";
+ }
+ }
+ part { name: "padding_before_left_btn";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ rel1 { relative: 0.0 0.0; to: "title_bg"; }
+ rel2 { relative: 0.0 1.0; to: "title_bg"; }
+ visible: 0;
+ }
+ }
+ part { name: "padding_after_left_btn";
+ type: RECT;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+ fixed: 1 0;
+ align: 0 0.5;
+ rel1 { relative: 1.0 0.0; to: "title_left_btn"; }
+ rel2 { relative: 1.0 1.0; to: "title_left_btn"; }
+ visible: 0;
+ }
+ }
+ part { name: "padding_before_more_btn";
+ type: RECT;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 { relative: 0.0 0.0; to: "title_more_btn"; }
+ rel2 { relative: 0.0 1.0; to: "title_more_btn"; }
+ visible: 0;
+ }
+ }
+ part { name: "padding_after_right_btn";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 { relative: 1.0 0.0; to: "title_bg"; }
+ rel2 { relative: 1.0 1.0; to: "title_bg"; }
+ visible: 0;
+ }
+ }
+ part { name: "padding_before_right_btn";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 { relative: 0.0 0.0; to: "title_right_btn"; }
+ rel2 { relative: 0.0 1.0; to: "title_right_btn"; }
+ visible: 0;
+ }
+ description { state: "right_and_more_button" 0.0;
+ inherit: "default" 0.0;
+ min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+ }
+ }
+ part { name: "padding_before_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ align: 1.0 0.5;
+ rel1 { relative: 0.0 0.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+ rel2 { relative: 0.0 1.0; to_x: "elm.text.title"; to_y: "title_bg"; }
+ fixed: 1 0;
+ min: NAVIFRAME_ICON_PADDING_INC;
+ visible: 0;
+ }
+ }
+ part { name: "padding_center_text1";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+ fixed: 1 0;
+ align: 0.0 0.0;
+ rel1 { relative: 0.0 0.0; to: "title_bg"; }
+ rel2 { relative: 0.0 1.0; to: "title_bg"; }
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: NAVIFRAME_TEXT_PADDING_INC 0;
+ }
+ description { state: "icon" 0.0;
+ inherit: "default" 0.0;
+ min: NAVIFRAME_NO_BUTTON_ICON_PADDING_INC 0;
+ }
+ description { state: "icon_left_button" 0.0;
+ inherit: "default" 0.0;
+ min: NAVIFRAME_TEXT_PADDING_ICON_VISIBLE_INC 0;
+ }
+ }
+ part { name: "padding_center_text2";
+ type: RECT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ min: NAVIFRAME_TITLE_FUNC_BTN_PADDING_W_INC 0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 { relative: 1.0 0.0; to: "title_bg"; }
+ rel2 { relative: 1.0 1.0; to: "title_bg"; }
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: NAVIFRAME_TEXT_PADDING_INC 0;
+ }
+ }
+ part { name: "elm.text.title";
+ type: TEXT;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ text { font: "SLP:style=Medium";
+ size: NAVIFRAME_TITLE_FONT_SIZE_INC;
+ min: 0 0;
+ max: 1 0;
+ align: 0.5 0.5;
+ }
+ color: NAVIFRAME_TITLE_TEXT_COLOR_INC;
+ align: 0.5 0.5;
+ fixed: 1 0;
+ rel1 { relative: 1.0 0.0; to: "padding_center_text1"; }
+ rel2 { relative: 0.0 1.0; to: "padding_center_text2"; }
+ }
+ description { state: "right_and_more_button" 0.0;
+ inherit: "default" 0.0;
+ rel1 { relative: 1.0 0.0; to: "padding_after_left_btn"; }
+ rel2 { relative: 0.0 1.0; to: "padding_before_more_btn"; }
+ }
+ }
+ part { name: "elm.swallow.icon";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ max: NAVIFRAME_ICON_SIZE_INC;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0; to: "padding_before_text"; }
+ rel2 { relative: 0.0 1.0; to: "padding_before_text"; }
+ aspect: 1.0 1.0;
+ aspect_preference: VERTICAL;
+ align: 1.0 0.5;
+ }
+ }
+ part { name: "click_event_area";
+ ignore_flags: ON_HOLD;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ rel1 { to: "title_bg"; }
+ rel2 { to: "title_bg"; }
+ }
+ }
+ part { name: "title_left_btn";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+ fixed: 1 1;
+ align: 0 0.5;
+ rel1 { relative: 1.0 0.0; to: "padding_before_left_btn"; }
+ rel2 { relative: 1.0 1.0; to: "padding_before_left_btn"; }
+ }
+ }
+ part { name: "title_right_btn";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+ align: 1 0.5;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0; to: "padding_after_right_btn"; }
+ rel2 { relative: 0.0 1.0; to: "padding_after_right_btn"; }
+ }
+ }
+ part { name: "title_more_btn";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "title_clip";
+ description { state: "default" 0.0;
+ max: NAVIFRAME_TITLE_FUNC_BTN_SIZE_INC;
+ fixed: 1 1;
+ align: 1 0.5;
+ rel1 { relative: 0.0 0.0; to: "padding_before_right_btn"; }
+ rel2 { relative: 0.0 1.0; to: "padding_before_right_btn"; }
+ }
+ }
+ part { name: "optionheader_arrow";
+ type: IMAGE;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: NAVIFRAME_OH_ARROW_SIZE_INC;
+ max: NAVIFRAME_OH_ARROW_SIZE_INC;
+ fixed: 1 1;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 1.025; to: "title_more_btn"; }
+ rel2 { relative: 1.0 1.025; to: "title_more_btn"; }
+ image.normal: "00_winset_control_top_arrow.png";
+ color: 255 255 255 0;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ }
+ part { name: "controlbar_bg";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 0 0;
+ max: 999999 0;
+ fixed: 0 1;
+ align: 0.0 1.0;
+ visible: 0;
+ rel1 { to: "base"; }
+ rel2 { to: "base"; }
+ color: NAVIFRAME_CONTROLBAR_BG_COLOR_INC;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ min: 0 CONTROLBAR_SMALL_HEIGHT_INC;
+ max: 999999 CONTROLBAR_SMALL_HEIGHT_INC;
+ visible: 1;
+ }
+ }
+ part { name: "controlbar_clip";
+ type: RECT;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ rel1.to: "controlbar_bg";
+ rel2.to: "controlbar_bg";
+ }
+ }
+ part { name: "elm.prev_btn_bg";
+ type: RECT;
+ scale: 1;
+ clip_to: "controlbar_clip";
+ description { state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 0;
+ align: 1.0 0.0;
+ rel1 { relative: 1.0 0.0; to: "controlbar_bg"; }
+ rel2.to: "controlbar_bg";
+ visible: 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: NAVIFRAME_TITLE_PREV_BTN_BG_SIZE_INC 0;
+ }
+ }
+ part { name: "elm.swallow.prev_btn";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "controlbar_clip";
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1.to: "elm.prev_btn_bg";
+ rel2.to: "elm.prev_btn_bg";
+ }
+ }
+ part { name: "controlbar";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "controlbar_clip";
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ rel1.to: "controlbar_bg";
+ rel2 { relative: 0.0 1.0; to: "elm.prev_btn_bg"; }
+ }
+ }
+ }
+ programs {
+ program { name: "content_new_pushed";
+ signal: "elm,state,new,pushed,internal";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ target: "base";
+ transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+ after: "show_finished";
+ }
+ program { name: "content_cur_pushed";
+ signal: "elm,state,cur,pushed,internal";
+ source: "";
+ action: STATE_SET "left" 0.0;
+ target: "base";
+ transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+ after: "pushed_finished";
+ }
+ program { name: "content_prev_popped";
+ signal: "elm,state,prev,popped,internal";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ target: "base";
+ transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+ after: "show_finished";
+ }
+ program { name: "content_cur_popped";
+ signal: "elm,state,cur,popped,internal";
+ source: "";
+ action: STATE_SET "right" 0.0;
+ target: "base";
+ transition: DECELERATE NAVIFRAME_VIEW_TRANS_TIME;
+ after: "popped_finished";
+ }
+ program { name: "cur_pushed";
+ signal: "elm,state,cur,pushed";
+ source: "elm";
+ script {
+ set_state(PART:"base", "default", 0.0);
+ emit("elm,state,cur,pushed,internal", "");
+ }
+ }
+ program { name: "new_pushed";
+ signal: "elm,state,new,pushed";
+ source: "elm";
+ script {
+ set_state(PART:"base", "right", 0.0);
+ emit("elm,state,new,pushed,internal", "");
+ }
+ }
+ program { name: "prev_popped";
+ signal: "elm,state,prev,popped";
+ source: "elm";
+ script {
+ set_state(PART:"base", "left", 0.0);
+ emit("elm,state,prev,popped,internal", "");
+ }
+ }
+ program { name: "cur_popped";
+ signal: "elm,state,cur,popped";
+ source: "elm";
+ script {
+ set_state(PART:"base", "default", 0.0);
+ emit("elm,state,cur,popped,internal", "");
+ }
+ }
+ program { name: "visible";
+ signal: "elm,state,visible";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "base";
+ }
+ program { name: "title_show";
+ signal: "elm,state,title,show";
+ source: "elm";
+ script {
+ set_state(PART:"title_bg", "default", 0.0);
+ if (get_int(oh_show) == 1) {
+ if (get_int(oh_close) == 1) {
+ emit("elm,state,optionheader,instant_close", "");
+ }else {
+ emit("elm,state,optionheader,instant_open", "");
+ }
+ }
+ else
+ set_state(PART:"optionheader_bg", "default", 0.0);
+ }
+ }
+ program { name: "title_hide";
+ signal: "elm,state,title,hide";
+ source: "elm";
+ action: STATE_SET "hide" 0.0;
+ target: "title_bg";
+ target: "optionheader_bg";
+ }
+ program { name: "prev_btn_show";
+ signal: "elm,state,prev_btn,show";
+ source: "elm";
+ script {
+ emit("elm,state,controlbar_bg,show", "elm");
+ set_state(PART:"elm.prev_btn_bg", "visible", 0.0);
+ }
+ }
+ program { name: "prev_btn_hide";
+ signal: "elm,state,prev_btn,hide";
+ source: "elm";
+ script {
+ emit("elm,state,controlbar_bg,hide", "elm");
+ set_state(PART:"elm.prev_btn_bg", "default", 0.0);
+ }
+ }
+ program { name: "left_btn_show";
+ signal: "elm,state,title_left_btn,show";
+ source: "elm";
+ script {
+ set_int(left_btn_visible, 1);
+ if (get_int(icon_visible) == 1)
+ set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+ else
+ set_state(PART:"padding_center_text1", "visible", 0.0);
+ if ((get_int(more_btn_visible) == 1) && (get_int(right_btn_visible) == 1)) {
+ set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+ set_int(large_padded_center_align, 0);
+ }
+ else {
+ set_state(PART:"padding_center_text2", "visible", 0.0);
+ set_int(large_padded_center_align, 1);
+ }
+ }
+ }
+ program { name: "left_btn_hide";
+ signal: "elm,state,title_left_btn,hide";
+ source: "elm";
+ script {
+ set_int(left_btn_visible, 0);
+ if ((get_int(more_btn_visible) == 0) && (get_int(right_btn_visible) == 0)) {
+ set_state(PART:"padding_center_text2", "default", 0.0);
+ set_int(large_padded_center_align, 0);
+ }
+ else {
+ set_state(PART:"padding_center_text2", "visible", 0.0);
+ set_int(large_padded_center_align, 1);
+ }
+ if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+ set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+ else if (get_int(large_padded_center_align) == 1)
+ set_state(PART:"padding_center_text1", "visible", 0.0);
+ else if (get_int(icon_visible) == 1)
+ set_state(PART:"padding_center_text1", "icon", 0.0);
+ else
+ set_state(PART:"padding_center_text1", "default", 0.0);
+ }
+ }
+ program { name: "right_btn_show";
+ signal: "elm,state,title_right_btn,show";
+ source: "elm";
+ script {
+ set_int(right_btn_visible, 1);
+ if (get_int(more_btn_visible) == 1) {
+ set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+ set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+ set_int(large_padded_center_align, 0);
+ }
+ else {
+ set_state(PART:"padding_center_text2", "visible", 0.0);
+ set_int(large_padded_center_align, 1);
+ }
+ if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+ (get_int(large_padded_center_align) == 1)))
+ set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+ else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+ set_state(PART:"padding_center_text1", "visible", 0.0);
+ else if (get_int(icon_visible) == 1)
+ set_state(PART:"padding_center_text1", "icon", 0.0);
+ else
+ set_state(PART:"padding_center_text1", "default", 0.0);
+ }
+ }
+ program { name: "right_btn_hide";
+ signal: "elm,state,title_right_btn,hide";
+ source: "elm";
+ script {
+ set_int(right_btn_visible, 0);
+ set_state(PART:"padding_before_right_btn", "default", 0.0);
+ if ((get_int(more_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+ set_state(PART:"padding_center_text2", "default", 0.0);
+ set_int(large_padded_center_align, 0);
+ }
+ else {
+ set_state(PART:"padding_center_text2", "visible", 0.0);
+ set_int(large_padded_center_align, 1);
+ }
+ if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+ set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+ else if (get_int(large_padded_center_align) == 1)
+ set_state(PART:"padding_center_text1", "visible", 0.0);
+ else if (get_int(icon_visible) == 1)
+ set_state(PART:"padding_center_text1", "icon", 0.0);
+ else
+ set_state(PART:"padding_center_text1", "default", 0.0);
+ }
+ }
+ program { name: "more_btn_show";
+ signal: "elm,state,title_more_btn,show";
+ source: "elm";
+ script {
+ set_int(more_btn_visible, 1);
+ if (get_int(right_btn_visible) == 1) {
+ set_state(PART:"elm.text.title", "right_and_more_button", 0.0);
+ set_state(PART:"padding_before_right_btn", "right_and_more_button", 0.0);
+ set_int(large_padded_center_align, 0);
+ }
+ else {
+ set_state(PART:"padding_center_text2", "visible", 0.0);
+ set_int(large_padded_center_align, 1);
+ }
+ if ((get_int(icon_visible) == 1) && ((get_int(left_btn_visible) == 1) ||
+ (get_int(large_padded_center_align) == 1)))
+ set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+ else if ((get_int(left_btn_visible) == 1) || (get_int(large_padded_center_align) == 1))
+ set_state(PART:"padding_center_text1", "visible", 0.0);
+ else if (get_int(icon_visible) == 1)
+ set_state(PART:"padding_center_text1", "icon", 0.0);
+ else
+ set_state(PART:"padding_center_text1", "default", 0.0);
+ }
+ }
+ program { name: "more_btn_hide";
+ signal: "elm,state,title_more_btn,hide";
+ source: "elm";
+ script {
+ set_int(more_btn_visible, 0);
+ set_state(PART:"padding_before_right_btn", "default", 0.0);
+ if ((get_int(right_btn_visible) == 0) && (get_int(left_btn_visible) == 0)) {
+ set_state(PART:"padding_center_text2", "default", 0.0);
+ set_int(large_padded_center_align, 0);
+ }
+ else {
+ set_state(PART:"padding_center_text2", "visible", 0.0);
+ set_int(large_padded_center_align, 1);
+ }
+ if ((get_int(large_padded_center_align) == 1) && (get_int(icon_visible) == 1))
+ set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+ else if (get_int(large_padded_center_align) == 1)
+ set_state(PART:"padding_center_text1", "visible", 0.0);
+ else if (get_int(icon_visible) == 1)
+ set_state(PART:"padding_center_text1", "icon", 0.0);
+ else
+ set_state(PART:"padding_center_text1", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,elm.swallow.icon,show";
+ source: "elm";
+ script {
+ set_int(icon_visible, 1);
+ if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+ set_state(PART:"padding_center_text1", "icon_left_button", 0.0);
+ else
+ set_state(PART:"padding_center_text1", "icon", 0.0);
+ }
+ }
+ program { name: "icon_hide";
+ signal: "elm,state,elm.swallow.icon,hide";
+ source: "elm";
+ script {
+ set_int(icon_visible, 0);
+ if ((get_int(large_padded_center_align) == 1) || (get_int(left_btn_visible) == 1))
+ set_state(PART:"padding_center_text1", "visible", 0.0);
+ else
+ set_state(PART:"padding_center_text1", "default", 0.0);
+ }
+ }
+ program { name: "controlbar_show";
+ signal: "elm,state,controlbar,show";
+ source: "elm";
+ script {
+ emit("elm,state,controlbar_bg,show", "elm");
+ }
+ }
+ program { name: "controlbar_hide";
+ signal: "elm,state,controlbar,hide";
+ source: "elm";
+ script {
+ emit("elm,state,controlbar_bg,hide", "elm");
+ }
+ }
+ program { name: "controlbar_bg_show";
+ signal: "elm,state,controlbar_bg,show";
+ source: "elm";
+ script {
+ set_state(PART:"controlbar_bg", "show", 0.0);
+ set_int(cbar_bg, get_int(cbar_bg) + 1);
+ }
+ }
+ program { name: "controlbar_bg_hide";
+ signal: "elm,state,controlbar_bg,hide";
+ source: "elm";
+ script {
+ set_int(cbar_bg, get_int(cbar_bg) - 1);
+ if (get_int(cbar_bg) <= 0)
+ set_state(PART:"controlbar_bg", "default", 0.0);
+ }
+ }
+ program { name: "optionheader_show";
+ signal: "elm,state,optionheader,show";
+ source: "elm";
+ script {
+ set_state(PART:"optionheader_bg", "show", 0.0);
+ set_state(PART:"optionheader_arrow", "show", 0.0);
+ set_int(oh_show, 1);
+ }
+ }
+ program { name: "optionheader_hide";
+ signal: "elm,state,optionheader,hide";
+ source: "elm";
+ script {
+ set_state(PART:"optionheader_bg", "default", 0.0);
+ set_state(PART:"optionheader_arrow", "default", 0.0);
+ set_int(oh_show, 0);
+ }
+ }
+ program { name: "optionheader_open";
+ signal: "elm,state,optionheader,open";
+ source: "";
+ action: STATE_SET "show" 0.0;
+ target: "optionheader_bg";
+ target: "optionheader_arrow";
+ transition: LINEAR 0.2;
+ after: "optionheader_open_set";
+ }
+ program { name: "optionheader_close";
+ signal: "elm,state,optionheader,close";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ target: "optionheader_bg";
+ target: "optionheader_arrow";
+ transition: LINEAR 0.2;
+ after: "optionheader_close_set";
+ }
+ program { name: "optionheader_instant_open";
+ signal: "elm,state,optionheader,instant_open";
+ source: "";
+ action: STATE_SET "show" 0.0;
+ target: "optionheader_bg";
+ target: "optionheader_arrow";
+ after: "optionheader_open_set";
+ }
+ program { name: "optionheader_instant_close";
+ signal: "elm,state,optionheader,instant_close";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ target: "optionheader_bg";
+ target: "optionheader_arrow";
+ after: "optionheader_close_set";
+ }
+ program { name: "optionheader_close_set";
+ signal: "elm,state,optionheader,close_set";
+ source: "";
+ script {
+ set_int(oh_close, 1);
+ }
+ }
+ program { name: "optionheader_open_set";
+ signal: "elm,state,optionheader,open_set";
+ source: "";
+ script {
+ set_int(oh_close, 0);
+ }
+ }
+ program { name: "controlbar_open";
+ signal: "elm,state,controlbar,open";
+ source: "";
+ action: STATE_SET "show" 0.0;
+ target: "controlbar_bg";
+ transition: LINEAR 0.2;
+ }
+ program { name: "controlbar_close";
+ signal: "elm,state,controlbar,close";
+ source: "";
+ action: STATE_SET "default" 0.0;
+ target: "controlbar_bg";
+ transition: LINEAR 0.2;
+ }
+ program { name: "controlbar_instant_open";
+ signal: "elm,state,controlbar,instant_open";
+ source: "";
+ script {
+ emit("elm,state,prev_btn,show", "elm");
+ emit("elm,state,controlbar,show", "elm");
+ }
+ }
+ program { name: "controlbar_instant_close";
+ signal: "elm,state,controlbar,instant_close";
+ source: "";
+ script {
+ emit("elm,state,prev_btn,hide", "elm");
+ emit("elm,state,controlbar,hide", "elm");
+ }
+ }
+ program { name: "show_finished";
+ action: SIGNAL_EMIT "elm,action,show,finished" "";
+ }
+ program { name: "pushed_finished";
+ action: SIGNAL_EMIT "elm,action,pushed,finished" "";
+ }
+ program { name: "popped_finished";
+ action: SIGNAL_EMIT "elm,action,popped,finished" "";
+ }
+ program {
+ name: "title_clicked";
+ signal: "mouse,clicked,1";
+ source: "click_event_area";
+ action: SIGNAL_EMIT "elm,action,title,clicked" "";
+ }
+ }
+ } \ No newline at end of file
diff --git a/layout/mp-no-contents.edc b/layout/mp-no-contents.edc
new file mode 100755
index 0000000..b5848df
--- /dev/null
+++ b/layout/mp-no-contents.edc
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+
+/*********** no_content ***********************/
+#define IMAGE_NO_CONTENT "T02_nocomposers.png"
+
+#define FONT_NO_CONTENT "Helvetica Neue:style=Roman"
+#define FONT_NO_CONTENT_SIZE 42
+#define FONT_NO_CONTENT_COLOR 121 121 121 255
+
+ group {
+ images {
+ image: IMAGE_NO_CONTENT COMP;
+ }
+
+ name: "no_content";
+ parts {
+ part { name: "bg";
+ mouse_events: 0;
+ type: RECT;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "image";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.5;
+ min: 314 310;
+ fixed: 1 1;
+ rel1 { relative: 0.5 (290/1034); to:bg;}
+ rel2 { relative: 0.5 (290/1034); to:bg;}
+ image.normal: IMAGE_NO_CONTENT;
+ }
+ }
+
+ part {
+ name: "elm.text";
+ type: TEXT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 1.0; to_y: "image"; offset: 0 54;}
+ rel2 { relative: 1.0 1.0; to_y: "image"; offset: 0 54;}
+ color: FONT_NO_CONTENT_COLOR;
+ min: 0 46;
+ text {
+ font: FONT_NO_CONTENT;
+ size: FONT_NO_CONTENT_SIZE;
+ align: 0.5 0.5;
+ }
+ }
+
+ }
+ }
+ }
+
+ group {
+ name: "no_result";
+ parts {
+ part { name: "bg";
+ mouse_events: 0;
+ type: RECT;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "elm.text";
+ type: TEXT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 (290/1034); to:bg;}
+ rel2 { relative: 1.0 (290/1034); to:bg;}
+ color: FONT_NO_CONTENT_COLOR;
+ min: 0 46;
+ text {
+ font: FONT_NO_CONTENT;
+ size: FONT_NO_CONTENT_SIZE;
+ align: 0.5 0.5;
+ }
+ }
+
+ }
+ }
+ }
+
diff --git a/layout/mp-play-control.edc b/layout/mp-play-control.edc
new file mode 100755
index 0000000..bf87e8c
--- /dev/null
+++ b/layout/mp-play-control.edc
@@ -0,0 +1,644 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+
+#define CONTROL_PAD_T 17
+#define CONTROL_PAD_D 18
+#define CONTROL_BUTTON 50
+#define CONTROL_H (CONTROL_PAD_T+CONTROL_PAD_D+CONTROL_BUTTON)
+
+group { name : "music/playing/main/control";
+ parts {
+ part { name: "bg";
+ type : SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: 35 35 35 0;
+ }
+ }
+
+ part { name: "pad.top";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; to, "bg";}
+ rel2 { relative: 1.0 CONTROL_PAD_T/CONTROL_H; to, "bg";}
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "buttons";
+ type : SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ align: 0 0;
+ rel1 { relative: 0.0 CONTROL_PAD_T/CONTROL_H; to, "bg"; }
+ rel2 { relative: 1.0 (CONTROL_PAD_T+CONTROL_BUTTON)/CONTROL_H; to, "bg"; }
+ }
+ }
+
+ part { name: "pad.down";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+
+ align: 0 0;
+ rel1 { relative: 0.0 (CONTROL_PAD_T+CONTROL_BUTTON)/CONTROL_H; to, "bg";}
+ rel2 { relative: 1.0 1.0; to, "bg";}
+ color: 0 0 0 0;
+ }
+ }
+ }
+}
+
+#define MAIN_W 480
+
+#define CONTROL_BUTTON_VOLUME_W 46
+#define CONTROL_BUTTON_REWIND_W 50
+#define CONTROL_BUTTON_FOWARD_W 50
+#define CONTROL_BUTTON_PLAY_W 50
+#define CONTROL_BUTTON_INFO_W 46
+#define CONTROL_BUTTON_PAD 52
+
+#define CONTROL_BUTTON_VOLUME_X 15
+#define CONTROL_BUTTON_REWIND_X (CONTROL_BUTTON_VOLUME_X+CONTROL_BUTTON_VOLUME_W+CONTROL_BUTTON_PAD)
+#define CONTROL_BUTTON_PLAY_X (CONTROL_BUTTON_REWIND_X+CONTROL_BUTTON_REWIND_W+CONTROL_BUTTON_PAD)
+#define CONTROL_BUTTON_FOWARD_X (CONTROL_BUTTON_PLAY_X+CONTROL_BUTTON_PLAY_W+CONTROL_BUTTON_PAD)
+#define CONTROL_BUTTON_INFO_X (CONTROL_BUTTON_FOWARD_X+CONTROL_BUTTON_FOWARD_W+CONTROL_BUTTON_PAD)
+
+#define REW_BTN "T02_Play_btn_previous.png"
+#define REW_BTN_PRESS "T02_Play_btn_previou_press.png"
+#define PLAY_BTN "T02_Play_btn__play.png"
+#define PLAY_BTN_PRESS "T02_Play_btn__play_press.png"
+#define PAUSE_BTN "T02_Play_btn_pause.png"
+#define PAUSE_BTN_PRESS "T02_Play_btn_pause_press.png"
+#define FF_BTN "T02_Play_btn_next.png"
+#define FF_BTN_PRESS "T02_Play_btn_next_press.png"
+#define VOLUME_BTN "T02_volume.png"
+#define BACK_BTN "T02_btn_Back.png"
+#define MUTE_BTN "music_icon_mute.png"
+#define BTN_BG "T02_controller_btn.png"
+#define BTN_PRESS "T02_controller_btn_press.png"
+
+#define TOUCH_EXPAND_SIZE 15
+
+group { name : "music/playing/main/control/buttons";
+
+ images {
+ image: REW_BTN COMP;
+ image: PLAY_BTN COMP;
+ image: PAUSE_BTN COMP;
+ image: FF_BTN COMP;
+ image: REW_BTN_PRESS COMP;
+ image: PLAY_BTN_PRESS COMP;
+ image: PAUSE_BTN_PRESS COMP;
+ image: FF_BTN_PRESS COMP;
+ image: VOLUME_BTN COMP;
+ image: BACK_BTN COMP;
+ image: BTN_BG COMP;
+ image: BTN_PRESS COMP;
+ image: MUTE_BTN COMP;
+ }
+
+ parts {
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "pad.top";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 1;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; to_y, "bg";}
+ rel2 { relative: 1.0 0.0; to_y, "bg";}
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "pad.center";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 50;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 1.0; to_y, "pad.top";}
+ rel2 { relative: 1.0 1.0; to_y, "pad.top";}
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "pad.down";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 1;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 1.0; to_y, "pad.center";}
+ rel2 { relative: 1.0 1.0; to_y, "pad.center";}
+ color: 0 0 0 0;
+ }
+ }
+
+ part{ name: "volume_touch_area";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description{ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: -TOUCH_EXPAND_SIZE -TOUCH_EXPAND_SIZE; to: "volume_bg";}
+ rel2 { relative: 1.0 1.0; offset: TOUCH_EXPAND_SIZE TOUCH_EXPAND_SIZE;to: "volume_bg";}
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "volume_bg";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 52 0;
+ align: 0.5 0.5;
+ rel1 { relative: CONTROL_BUTTON_VOLUME_X/MAIN_W 0.0; to_x, "bg";}
+ rel2 { relative: (CONTROL_BUTTON_VOLUME_X+CONTROL_BUTTON_VOLUME_W)/MAIN_W 1.0; to_x, "bg";}
+ image {
+ normal: BTN_BG;
+ border : 4 4 0 0;
+ border_scale: 1;
+ }
+ }
+ description { state: "press" 0.0;
+ inherit: "default" 0.0;
+ image {
+ normal: BTN_PRESS;
+ }
+ }
+ }
+
+ part { name: "volume";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 52 0;
+ fixed: 1 0;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; to, "volume_bg";}
+ rel2 { relative: 1.0 1.0; to, "volume_bg";}
+ image { normal: VOLUME_BTN; }
+ }
+ description { state: "mute" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ min: 52 0;
+ fixed: 1 0;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; to, "volume_bg";}
+ rel2 { relative: 1.0 1.0; to, "volume_bg";}
+ image { normal: MUTE_BTN; }
+ }
+ }
+ part{ name: "info_touch_area";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description{ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: -TOUCH_EXPAND_SIZE -TOUCH_EXPAND_SIZE; to: "info_bg";}
+ rel2 { relative: 1.0 1.0; offset: TOUCH_EXPAND_SIZE TOUCH_EXPAND_SIZE;to: "info_bg";}
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "info_bg";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 52 0;
+ fixed: 1 0;
+ align: 0.5 0.5;
+ rel1 { relative: CONTROL_BUTTON_INFO_X/MAIN_W 0.0; to_x, "bg";}
+ rel2 { relative: (CONTROL_BUTTON_INFO_X+CONTROL_BUTTON_INFO_W)/MAIN_W 1.0; to_x, "bg";}
+ image {
+ normal: BTN_BG;
+ border : 4 4 0 0;
+ border_scale: 1;
+ }
+ }
+ description { state: "press" 0.0;
+ inherit: "default" 0.0;
+ image {
+ normal: BTN_PRESS;
+ }
+ }
+ }
+
+ part { name: "info";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 52 52;
+ max: 52 52;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0; to, "info_bg";}
+ rel2 { relative: 1.0 1.0; to, "info_bg";}
+ image { normal: BACK_BTN; }
+ }
+ description { state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ image { normal: BACK_BTN; }
+ }
+ }
+
+ part { name: "info_screen";
+ type : RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ min: 52 0;
+ fixed: 1 0;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; to, "info_bg";}
+ rel2 { relative: 1.0 1.0; to, "info_bg";}
+ color: 0 0 0 0;
+ }
+ description { state: "dim" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+
+ part { name: "control_area";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 250 0;
+ fixed: 1 0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.5 0.0; to_y, "pad.center";}
+ rel2 { relative: 0.5 1.0; to_y, "pad.center";}
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "rewind";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 50 0;
+ fixed: 1 0;
+ rel1 { relative: CONTROL_BUTTON_REWIND_X/MAIN_W 0.0; to, "bg";}
+ rel2 { relative: (CONTROL_BUTTON_REWIND_X+CONTROL_BUTTON_REWIND_W)/MAIN_W 1.0; to, "bg";}
+ image { normal: REW_BTN; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image { normal: REW_BTN_PRESS; }
+ }
+ }
+
+ part { name: "rewind_touch_area";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0 0; to: "rewind"; offset: -TOUCH_EXPAND_SIZE -TOUCH_EXPAND_SIZE; }
+ rel2 { relative: 1 1; to: "rewind"; offset: TOUCH_EXPAND_SIZE TOUCH_EXPAND_SIZE; }
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "foward";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 50 0;
+ fixed: 1 0;
+ align: 0.5 0.5;
+ rel1 { relative: CONTROL_BUTTON_FOWARD_X/MAIN_W 0.0; to, "bg";}
+ rel2 { relative: (CONTROL_BUTTON_FOWARD_X+CONTROL_BUTTON_FOWARD_W)/MAIN_W 1.0; to, "bg";}
+ image { normal: FF_BTN; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image { normal: FF_BTN_PRESS; }
+ }
+ }
+
+ part { name: "forward_touch_area";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0 0; to: "foward"; offset: -TOUCH_EXPAND_SIZE -TOUCH_EXPAND_SIZE; }
+ rel2 { relative: 1 1; to: "foward"; offset: TOUCH_EXPAND_SIZE TOUCH_EXPAND_SIZE; }
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "play_pause_btn";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 50 0;
+ fixed: 1 0;
+ align: 0.5 0.5;
+ rel1 { relative: CONTROL_BUTTON_PLAY_X/MAIN_W 0.0; to, "bg";}
+ rel2 { relative: (CONTROL_BUTTON_PLAY_X+CONTROL_BUTTON_PLAY_W)/MAIN_W 1.0; to, "bg";}
+ image { normal: PLAY_BTN; }
+ }
+ description { state: "default" 1.0;
+ inherit: "default" 0.0;
+ image { normal: PAUSE_BTN; }
+ }
+ description { state: "pressed" 0.0;
+ inherit: "default" 0.0;
+ image { normal: PLAY_BTN_PRESS; }
+ }
+ description { state: "pressed" 1.0;
+ inherit: "default" 0.0;
+ image { normal: PAUSE_BTN_PRESS; }
+ }
+ }
+
+ part { name: "play_pause_btn_touch_area";
+ type: RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ rel1 { relative: 0 0; to: "play_pause_btn"; offset: -TOUCH_EXPAND_SIZE -TOUCH_EXPAND_SIZE; }
+ rel2 { relative: 1 1; to: "play_pause_btn"; offset: TOUCH_EXPAND_SIZE TOUCH_EXPAND_SIZE; }
+ color: 0 0 0 0;
+ }
+ }
+
+ }
+
+ programs {
+
+ //volum button
+ program { name: "vol_btn_down";
+ source: "volume_touch_area";
+ signal: "mouse,down,1";
+ action: STATE_SET "press" 0.0;
+ target: "volume_bg";
+ }
+ program { name: "vol_btn_up";
+ source: "volume_touch_area";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ target: "volume_bg";
+ }
+ program { name: "vol_btn_down_sig";
+ source: "volume_touch_area";
+ signal: "mouse,down,1";
+ script {
+ emit ("vol_btn_down", "ctrl_edj");
+ }
+ }
+ program { name: "vol_btn_up_sig";
+ source: "volume_touch_area";
+ signal: "mouse,up,1";
+ script {
+ emit ("vol_btn_up", "ctrl_edj");
+ }
+ }
+ program { name: "vol_btn_click";
+ source: "volume_touch_area";
+ signal: "mouse,clicked,1";
+ script {
+ emit ("volume_clicked", "ctrl_edj");
+ }
+ }
+
+ //info button
+ program { name: "info_btn_down";
+ source: "info_touch_area";
+ signal: "mouse,down,1";
+ action: STATE_SET "press" 0.0;
+ target: "info_bg";
+ }
+ program { name: "info_btn_up";
+ source: "info_touch_area";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ target: "info_bg";
+ }
+ program { name: "info_btn_click";
+ source: "info_touch_area";
+ signal: "mouse,clicked,1";
+ script {
+ emit ("info_clicked", "ctrl_edj");
+ }
+ }
+ program { name: "info_btn_default";
+ source: "ctrl_prog";
+ signal: "info_default";
+ script {
+ set_state(PART:"info_bg", "default", 0.0);
+ set_state(PART:"info", "default", 0.0);
+ set_state(PART:"info_screen", "default", 0.0);
+ }
+ }
+ program { name: "info_btn_highlight";
+ source: "ctrl_prog";
+ signal: "info_highlight";
+ script {
+ set_state(PART:"info_bg", "press", 0.0);
+ set_state(PART:"info", "default", 0.0);
+ }
+ }
+ program { name: "info_btn_dim";
+ source: "ctrl_prog";
+ signal: "info_dim";
+ script {
+ set_state(PART:"info_bg", "default", 0.0);
+ set_state(PART:"info", "dim", 0.0);
+ set_state(PART:"info_screen", "dim", 0.0);
+ }
+ }
+
+ //play,pause
+ program { name: "play_btn_click";
+ source: "play_pause_btn_touch_area";
+ signal: "mouse,clicked,1";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"play_pause_btn", st, 30, vl)
+ if(vl == 0.0)
+ emit ("play_clicked", "ctrl_edj");
+ else
+ emit ("pause_clicked", "ctrl_edj");
+ }
+ }
+ program { name: "play_btn_down";
+ source: "play_pause_btn_touch_area";
+ signal: "mouse,down,1";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"play_pause_btn", st, 30, vl)
+ if(vl == 0.0)
+ set_state(PART:"play_pause_btn", "pressed", 0.0);
+ else
+ set_state(PART:"play_pause_btn", "pressed", 1.0);
+ }
+ }
+ program { name: "play_btn_up";
+ source: "play_pause_btn_touch_area";
+ signal: "mouse,up,1";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"play_pause_btn", st, 30, vl)
+ if(vl == 0.0)
+ set_state(PART:"play_pause_btn", "default", 0.0);
+ else
+ set_state(PART:"play_pause_btn", "default", 1.0);
+ }
+ }
+ program { name: "play_btn_play";
+ source: "ctrl_prog";
+ signal: "play";
+ script {
+ set_state(PART:"play_pause_btn", "default", 0.0);
+ }
+ }
+ program { name: "play_btn_pause";
+ source: "ctrl_prog";
+ signal: "pause";
+ script {
+ set_state(PART:"play_pause_btn", "default", 1.0);
+ }
+ }
+
+ //ff
+ program { name: "ff_btn_down";
+ source: "forward_touch_area";
+ signal: "mouse,down,1";
+ script {
+ emit ("ff_btn_down", "ctrl_edj");
+ set_state(PART:"foward", "pressed", 0.0);
+ }
+ }
+ program { name: "ff_btn_up";
+ source: "forward_touch_area";
+ signal: "mouse,up,1";
+ script {
+ emit ("ff_btn_up", "ctrl_edj");
+ set_state(PART:"foward", "default", 0.0);
+ }
+ }
+ program { name: "ff_btn_press";
+ source: "ctrl_prog";
+ signal: "ff_btn_press";
+ script {
+ emit ("ff_btn_down", "ctrl_edj");
+ }
+ }
+ program { name: "ff_btn_release";
+ source: "ctrl_prog";
+ signal: "ff_btn_release";
+ script {
+ emit ("ff_btn_up", "ctrl_edj");
+ }
+ }
+
+ //rewind
+ program { name: "rew_btn_down";
+ source: "rewind_touch_area";
+ signal: "mouse,down,1";
+ script {
+ emit ("rew_btn_down", "ctrl_edj");
+ set_state(PART:"rewind", "pressed", 0.0);
+ }
+ }
+ program { name: "rew_btn_up";
+ source: "rewind_touch_area";
+ signal: "mouse,up,1";
+ script {
+ emit ("rew_btn_up", "ctrl_edj");
+ set_state(PART:"rewind", "default", 0.0);
+ }
+ }
+ program { name: "rew_btn_press";
+ source: "ctrl_prog";
+ signal: "rew_btn_press";
+ script {
+ emit ("rew_btn_down", "ctrl_edj");
+ }
+ }
+ program { name: "rew_btn_release";
+ source: "ctrl_prog";
+ signal: "rew_btn_release";
+ script {
+ emit ("rew_btn_up", "ctrl_edj");
+ }
+ }
+
+ program { name: "go_active";
+ signal: "mute";
+ source: "volume";
+ action: STATE_SET "mute" 0.0;
+ target: "volume";
+ }
+ program { name: "go_passive";
+ signal: "unmute";
+ source: "volume";
+ action: STATE_SET "default" 0.0;
+ target: "volume";
+ }
+ }
+}
+
diff --git a/layout/mp-play-current-playing.edc b/layout/mp-play-current-playing.edc
new file mode 100755
index 0000000..aa35411
--- /dev/null
+++ b/layout/mp-play-current-playing.edc
@@ -0,0 +1,228 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+
+#define MP_NOW_PLAYING
+
+#define MP_NOW_PLAYING_W 720.
+#define MP_NOW_PLAYING_H 100.
+
+#define MP_NOW_PLAYING_THUMB_SX 32
+#define MP_NOW_PLAYING_THUMB_SY 12
+#define MP_NOW_PLAYING_THUMB_SIZE 72
+#define MP_NOW_PLAYING_THUMB_EX (MP_NOW_PLAYING_THUMB_SX+MP_NOW_PLAYING_THUMB_SIZE)
+#define MP_NOW_PLAYING_THUMB_EY (MP_NOW_PLAYING_THUMB_SY+MP_NOW_PLAYING_THUMB_SIZE)
+
+#define MP_NOW_PLAYING_LABEL_SX 140
+#define MP_NOW_PLAYING_LABEL_SY 14
+#define MP_NOW_PLAYING_LABEL_EX (686)
+#define MP_NOW_PLAYING_LABEL_EY (MP_NOW_PLAYING_LABEL_SY+38)
+
+#define MP_NOW_PLAYING_PROGRESS_SX MP_NOW_PLAYING_LABEL_SX
+#define MP_NOW_PLAYING_PROGRESS_SY 70
+#define MP_NOW_PLAYING_PROGRESS_EX (MP_NOW_PLAYING_PROGRESS_SX+490)
+#define MP_NOW_PLAYING_PROGRESS_EY (MP_NOW_PLAYING_PROGRESS_SY+10)
+
+#define MP_NOW_PLAYING_PLAYING_ICON_SX (670)
+#define MP_NOW_PLAYING_PLAYING_ICON_SY (65)
+#define MP_NOW_PLAYING_PLAYING_ICON_EX (MP_NOW_PLAYING_PLAYING_ICON_SX+20)
+#define MP_NOW_PLAYING_PLAYING_ICON_EY (MP_NOW_PLAYING_PLAYING_ICON_SY+20)
+
+#define MP_NOW_PLAYING_FONT_SIZE 32
+
+
+group {
+ name: "mp_now_playing";
+
+ images {
+ image : "T02_now_playing_bar.png" COMP;
+ image: "T02_now_playing_icon_play.png" COMP;
+ image: "T02_now_playing_icon_pause.png" COMP;
+ }
+
+ parts {
+ part {
+ name: "now_playing_bg";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 MP_NOW_PLAYING_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ image { normal: "T02_now_playing_bar.png"; }
+ }
+ } //now_playing_bg
+
+ part { name: "thumb_image";
+ type : SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 1;
+ align: 0 0;
+ rel1 { relative: MP_NOW_PLAYING_THUMB_SX/MP_NOW_PLAYING_W MP_NOW_PLAYING_THUMB_SY/MP_NOW_PLAYING_H; }
+ rel2 { relative: MP_NOW_PLAYING_THUMB_EX/MP_NOW_PLAYING_W MP_NOW_PLAYING_THUMB_EY/MP_NOW_PLAYING_H; }
+ }
+ }
+
+ part { name: "innerline.top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 1;
+ align: 0 0;
+ min: 1 1;
+ rel1 {relative: 0.0 0.0; to, "thumb_image";}
+ rel2 {relative: 1.0 0.0; to, "thumb_image";}
+ color: 0 0 0 255;
+ }
+ }
+
+ part { name: "innerline.bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 1;
+ align: 0 0;
+ min: 1 1;
+ rel1 {relative: 0.0 1.0; to, "thumb_image";}
+ rel2 {relative: 1.0 1.0; to, "thumb_image";}
+ color: 0 0 0 255;
+ }
+ }
+
+ part { name: "innerline.left";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 1;
+ align: 0 0;
+ min: 1 1;
+ rel1 {relative: 0.0 0.0; to, "thumb_image";}
+ rel2 {relative: 0.0 1.0; to, "thumb_image";}
+ color: 0 0 0 255;
+ }
+ }
+
+ part { name: "innerline.right";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 1;
+ align: 0 0;
+ min: 1 1;
+ rel1 {relative: 1.0 0.0; to, "thumb_image";}
+ rel2 {relative: 1.0 1.0; to, "thumb_image";}
+ color: 0 0 0 255;
+ }
+ }
+
+ part {
+ name: "now_playing_label";
+ type : TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ color: 255 255 255 255;
+ rel1 { relative: MP_NOW_PLAYING_LABEL_SX/MP_NOW_PLAYING_W MP_NOW_PLAYING_LABEL_SY/MP_NOW_PLAYING_H; }
+ rel2 { relative: MP_NOW_PLAYING_LABEL_EX/MP_NOW_PLAYING_W MP_NOW_PLAYING_LABEL_EY/MP_NOW_PLAYING_H; }
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: MP_NOW_PLAYING_FONT_SIZE;
+ align: 0 0.5;
+ text: "Title / Artist";
+ }
+ }
+ }
+
+ part { name: "progress_bar";
+ type : SWALLOW;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 1;
+ align: 0 0;
+ rel1 { relative: MP_NOW_PLAYING_PROGRESS_SX/MP_NOW_PLAYING_W MP_NOW_PLAYING_PROGRESS_SY/MP_NOW_PLAYING_H; }
+ rel2 { relative: MP_NOW_PLAYING_PROGRESS_EX/MP_NOW_PLAYING_W MP_NOW_PLAYING_PROGRESS_EY/MP_NOW_PLAYING_H; }
+ }
+ }
+
+ part { name: "playing_icon";
+ type : IMAGE;
+ scale: 1;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: MP_NOW_PLAYING_PLAYING_ICON_SX/MP_NOW_PLAYING_W MP_NOW_PLAYING_PLAYING_ICON_SY/MP_NOW_PLAYING_H; }
+ rel2 { relative: MP_NOW_PLAYING_PLAYING_ICON_EX/MP_NOW_PLAYING_W MP_NOW_PLAYING_PLAYING_ICON_EY/MP_NOW_PLAYING_H; }
+ image { normal: "T02_now_playing_icon_play.png"; }
+ }
+ description {
+ state: "pause" 0.0;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: MP_NOW_PLAYING_PLAYING_ICON_SX/MP_NOW_PLAYING_W MP_NOW_PLAYING_PLAYING_ICON_SY/MP_NOW_PLAYING_H; }
+ rel2 { relative: MP_NOW_PLAYING_PLAYING_ICON_EX/MP_NOW_PLAYING_W MP_NOW_PLAYING_PLAYING_ICON_EY/MP_NOW_PLAYING_H; }
+ image { normal: "T02_now_playing_icon_pause.png"; }
+ }
+ }
+
+ } //parts
+
+ programs {
+ program {
+ name: "now_playing_clicked";
+ source: "now_playing_bg";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "now_playing_clicked" 0.0;
+ }
+ program {
+ name: "pause";
+ source: "playing_icon";
+ signal: "pause";
+ action: STATE_SET "pause" 0.0;
+ target: "playing_icon";
+ }
+ program {
+ name: "play";
+ source: "playing_icon";
+ signal: "play";
+ action: STATE_SET "default" 0.0;
+ target: "playing_icon";
+ }
+ }
+
+}
+
+
diff --git a/layout/mp-play-info.edc b/layout/mp-play-info.edc
new file mode 100755
index 0000000..53ec6f1
--- /dev/null
+++ b/layout/mp-play-info.edc
@@ -0,0 +1,974 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+
+/* font name*/
+#define FONT_TITLE_NAME "system_title" //"system_title"
+#define FONT_CONTENT_NAME "system_content" //"system_content"
+#define FONT_SUBCONTENT_NAME "system_subcontent" //"system_subcontent"
+
+group
+{
+ name : "music/playing/play_ctrl";
+ parts {
+ part {
+ name: "player_info_bg";
+ type: SWALLOW;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0 ; }
+ color: 35 35 35 0;
+ }
+ }
+
+ part {
+ name: "track_title";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 TRACK_TITLE_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: TRACK_TITLE_SX TRACK_TITLE_SY; to: "player_info_bg";}
+ rel2 { relative: FAVORITE_SX TRACK_TITLE_SY; to: "player_info_bg";}
+ color: 255 255 255 255;
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: 26;
+ align: 0 0.5;
+ text: "Track title";
+ }
+ }
+ }
+
+ part {
+ name: "album_title";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 ALBUM_TITLE_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: TRACK_TITLE_SX ALBUM_TITLE_SY; to: "player_info_bg";}
+ rel2 { relative: FAVORITE_SX ALBUM_TITLE_SY; to: "player_info_bg";}
+ color: 189 188 188 255 ;
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: 22;
+ align: 0 0.5;
+ text: "Album title";
+ }
+ }
+ }
+
+ part {
+ name: "artist_title";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 ARTIST_TITLE_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: TRACK_TITLE_SX ARTIST_TITLE_SY; to: "player_info_bg";}
+ rel2 { relative: FAVORITE_SX ARTIST_TITLE_SY; to: "player_info_bg";}
+ color: 189 188 188 255 ;
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: 22;
+ align: 0 0.5;
+ text: "Artist";
+ }
+ }
+ }
+
+ part {
+ name: "track_index";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 0 ARTIST_TITLE_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 350/MAIN_W ARTIST_TITLE_SY; to: "player_info_bg";}
+ rel2 { relative: 475/MAIN_W ARTIST_TITLE_SY; to: "player_info_bg";}
+ color: 255 255 255 255;
+ text {
+ font: FONT_STYLE_ROMAN;
+ size: 22;
+ align: 1 0.5;
+ text: "/";
+ }
+ }
+ }
+
+ part {
+ name: "player_menu";
+ type: SWALLOW;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0); to: "player_info_bg";}
+ rel2 { relative: 1.0 MENUBOX_H/120; to: "player_info_bg";}
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+
+ part {
+ name: "player_progress";
+ type: SWALLOW;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 56/120; to: "player_info_bg";}
+ rel2 { relative: 1.0 1.0; to: "player_info_bg";}
+ }
+ description {
+ state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "progressbar_invisible" ;
+ signal: "progressbar_invisible";
+ source: "player_progress";
+ action: STATE_SET "invisible" 0.0;
+ target: "player_progress";
+ }
+ program {
+ name: "progressbar_visible" ;
+ signal: "progressbar_visible";
+ source: "player_progress";
+ action: STATE_SET "default" 0.0;
+ target: "player_progress";
+ }
+ }
+
+}
+
+#define INFO_BASE_SC_H 620
+#define INFO_ITEM_TEXT_H 30
+#define INFO_ITEM_GAP_H 10
+#define INFO_ITEM_H (INFO_ITEM_TEXT_H+INFO_ITEM_GAP_H)
+#define INFO_ITEM_CENTER_H (INFO_ITEM_H*12)
+#define INFO_BASE_H (INFO_ITEM_CENTER_H+60)
+#define INFO_VIEW_H (BASE_SC_H)
+
+group { name : "music/playing/info";
+ parts {
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_VIEW_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 0.0; }
+ color: 0 0 0 0;
+ }
+ }
+
+ part { name: "contents";
+ type : SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_BASE_SC_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; to_y, "bg"; }
+ rel2 { relative: 1.0 0.0; to_y, "bg"; }
+ }
+ }
+ }
+}
+
+group {
+ name: "music/playing/info/contents";
+ images {
+ image: "12_music_player_bg_01.PNG" COMP;
+ }
+
+ styles
+ {
+ style {
+ name: "info_contents";
+ base: "font=system_content font_size=28 align=left color=#ffffff wrap=word";
+ tag: "br" "\n";
+ tag: "tab" "\t";
+ tag: "em" "+ font=system_content:style=Oblique";
+ tag: "b" "+ font=system_content:style=Bold";
+ tag: "link" "+ color=#800 underline=on underline_color=#8008";
+ tag: "hilight" "+ font=system_content:style=Bold";
+ }
+ }
+
+ parts {
+ part { name: "bg";
+ type : IMAGE;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_BASE_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 0.0; }
+ image { normal: "12_music_player_bg_01.PNG"; }
+ }
+ }
+ part {
+ name: "pad.top";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 30;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; to_y, "bg"; }
+ rel2 { relative: 1.0 0.0; to_y, "bg"; }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "pad.bottom";
+ type: RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 30;
+ fixed: 0 1;
+ align: 1 1;
+ rel1 { relative: 0.0 1.0; to_y, "bg"; }
+ rel2 { relative: 1.0 1.0;to_y, "bg"; }
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "pad.1";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 20 0;
+ fixed: 1 0;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; to_x, "bg";}
+ rel2 { relative: 0.0 1.0; to_x, "bg";}
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "pad.2";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ min: 20 0;
+ fixed: 1 0;
+ align: 1 1;
+ rel1 { relative: 1.0 0.0; to_x, "bg";}
+ rel2 { relative: 1.0 1.0; to_x, "bg";}
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "albumart";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.top";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.top";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ }
+ part { name: "pad.albumart";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "albumart";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "albumart";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "artist";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.albumart";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.albumart";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ }
+ part { name: "pad.artist";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "artist";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "artist";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "title";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.artist";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.artist";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ }
+
+ part { name: "pad.title";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "title";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "title";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "album";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.title";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.title";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ }
+
+ part { name: "pad.album";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "album";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "album";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "tracklength";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.album";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.album";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ }
+
+ part { name: "pad.tracklength";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "tracklength";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "tracklength";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "genres";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.tracklength";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.tracklength";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ }
+
+ part { name: "pad.genres";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "genres";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "genres";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "author";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.genres";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.genres";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ }
+
+ part { name: "pad.author";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "author";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "author";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "desc";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.author";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.author";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ }
+ part { name: "pad.desc";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "desc";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "desc";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "forwarding";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.desc";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.desc";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "pad.forwarding";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "forwarding";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "forwarding";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+
+ part {
+ name: "available";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.forwarding";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.forwarding";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "pad.available";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "available";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "available";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "type";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.available";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.available";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part { name: "pad.type";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 INFO_ITEM_GAP_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "type";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "type";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+
+ part {
+ name: "validity";
+ type: TEXTBLOCK;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 INFO_ITEM_TEXT_H;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "pad.type";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "pad.type";
+ relative: 0.0 1.0;
+ }
+ text {
+ style: "info_contents";
+ min: 0 1;
+ }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part { name: "pad.validity";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ rel1 {
+ to_x, "pad.1";
+ to_y, "validity";
+ relative: 1.0 1.0;
+ }
+ rel2 {
+ to_x, "pad.2";
+ to_y, "validity";
+ relative: 0.0 1.0;
+ }
+ color: 0 0 0 0;
+ }
+ }
+
+ }
+
+ programs {
+ program {
+ name: "desc_visible" ;
+ signal: "desc_visible";
+ source: "desc";
+ action: STATE_SET "default" 0.0;
+ target: "desc";
+ }
+
+ program {
+ name: "desc_invisible" ;
+ signal: "desc_invisible";
+ source: "desc";
+ action: STATE_SET "invisible" 0.0;
+ target: "desc";
+ }
+
+ program {
+ name: "forwarding_visible" ;
+ signal: "forwarding_visible";
+ source: "forwarding";
+ action: STATE_SET "default" 0.0;
+ target: "forwarding";
+ }
+
+ program {
+ name: "forwarding_invisible" ;
+ signal: "forwarding_invisible";
+ source: "desc";
+ action: STATE_SET "invisible" 0.0;
+ target: "forwarding";
+ }
+
+ program {
+ name: "available_visible" ;
+ signal: "available_visible";
+ source: "available";
+ action: STATE_SET "default" 0.0;
+ target: "available";
+ }
+
+ program {
+ name: "available_invisible" ;
+ signal: "available_invisible";
+ source: "available";
+ action: STATE_SET "invisible" 0.0;
+ target: "available";
+ }
+
+ program {
+ name: "type_visible" ;
+ signal: "type_visible";
+ source: "type";
+ action: STATE_SET "default" 0.0;
+ target: "type";
+ }
+
+ program {
+ name: "type_invisible" ;
+ signal: "type_invisible";
+ source: "type";
+ action: STATE_SET "invisible" 0.0;
+ target: "type";
+ }
+
+ program {
+ name: "validity_visible" ;
+ signal: "validity_visible";
+ source: "validity";
+ action: STATE_SET "default" 0.0;
+ target: "validity";
+ }
+
+ program {
+ name: "validity_invisible" ;
+ signal: "validity_invisible";
+ source: "validity";
+ action: STATE_SET "invisible" 0.0;
+ target: "validity";
+ }
+ }
+}
+
+
diff --git a/layout/mp-play-menu.edc b/layout/mp-play-menu.edc
new file mode 100755
index 0000000..d87850b
--- /dev/null
+++ b/layout/mp-play-menu.edc
@@ -0,0 +1,385 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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: "mp_play_menu";
+
+ images {
+ image: "T02_option_shuffle_on.png" COMP;
+ image: "T02_option_shuffle_off.png" COMP;
+ image: "T02_option_rep_1.png" COMP;
+ image: "T02_option_rep_all.png" COMP;
+ image: "T02_option_rep_A.png" COMP;
+ image: "T02_option_favorite_off.png" COMP;
+ image: "T02_option_favorite_on.png" COMP;
+ image: "T02_option_bg.png" COMP;
+ }
+
+ parts {
+ /* Menu Box **********************************************************************/
+ part {
+ name: "menu_box_bg";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ image { normal: "T02_option_bg.png"; }
+ }
+ }
+ part {
+ name: "shuffle";
+ type: IMAGE;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ image { normal: "T02_option_shuffle_on.png"; }
+ rel1 { relative: MENU_SHUFFLE_SX MENU_SY; offset: 0 0; to: "menu_box_bg"; }
+ rel2 { relative: MENU_SHUFFLE_EX MENU_EY; offset: -1 0; to: "menu_box_bg"; }
+ }
+ description {
+ state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image { normal: "T02_option_shuffle_on.png"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: "shuffle_non";
+ type: IMAGE;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ image { normal: "T02_option_shuffle_off.png"; }
+ rel1 { relative: MENU_SHUFFLE_SX MENU_SY; offset: 0 0; to: "menu_box_bg"; }
+ rel2 { relative: MENU_SHUFFLE_EX MENU_EY; offset: 0 0; to: "menu_box_bg"; }
+ }
+ description {
+ state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ image { normal: "T02_option_shuffle_off.png"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: "rep_all";
+ type: IMAGE;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ image { normal: "T02_option_rep_all.png"; }
+ rel1 { relative: MENU_REP_ALL_SX MENU_SY; offset: 0 0; to: "menu_box_bg"; }
+ rel2 { relative: MENU_REP_ALL_EX MENU_EY; offset: 0 0; to: "menu_box_bg"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: "rep_non";
+ type: IMAGE;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ image { normal: "T02_option_rep_A.png"; }
+ rel1 { relative: MENU_REP_ALL_SX MENU_SY; offset: 0 0; to: "menu_box_bg"; }
+ rel2 { relative: MENU_REP_ALL_EX MENU_EY; offset: 0 0; to: "menu_box_bg"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: "rep_1";
+ type: IMAGE;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ image { normal: "T02_option_rep_1.png"; }
+ rel1 { relative: MENU_REP_ALL_SX MENU_SY; offset: 0 0; to: "menu_box_bg"; }
+ rel2 { relative: MENU_REP_ALL_EX MENU_EY; offset: 0 0; to: "menu_box_bg"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "player_favorite";
+ type: IMAGE;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ image { normal: "T02_option_favorite_off.png"; }
+ rel1 { relative: MENU_FAVORITE_SX MENU_SY; offset: 0 0; to: "menu_box_bg"; }
+ rel2 { relative: MENU_FAVORITE_EX MENU_EY; offset: 0 0; to: "menu_box_bg"; }
+ }
+ description {
+ state: "on" 0.0;
+ inherit: "default" 0.0;
+ image { normal: "T02_option_favorite_on.png"; }
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ }
+
+ programs {
+
+ program {
+ name: "shuffle_clicked";
+ source: "shuffle";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "shuffle_clicked" 0.0;
+ }
+
+ program {
+ name: "shuffle_visible" ;
+ signal: "shuffle_visible";
+ source: "shuffle";
+ action: STATE_SET "default" 0.0;
+ target: "shuffle";
+ }
+
+ program {
+ name: "shuffle_invisible" ;
+ signal: "shuffle_invisible";
+ source: "shuffle";
+ action: STATE_SET "invisible" 0.0;
+ target: "shuffle";
+ }
+
+ program {
+ name: "shuffle_non_down";
+ source: "shuffle_non";
+ signal: "mouse,down,1";
+ action: STATE_SET "clicked" 0.0;
+ target: "shuffle_non";
+ }
+
+ program {
+ name: "shuffle_non_up";
+ source: "shuffle_non";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ target: "shuffle_non";
+ }
+
+ program {
+ name: "shuffle_non_clicked";
+ source: "shuffle_non";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "shuffle_non_clicked" 0.0;
+ }
+
+ program {
+ name: "shuffle_non_visible" ;
+ signal: "shuffle_non_visible";
+ source: "shuffle_non";
+ action: STATE_SET "default" 0.0;
+ target: "shuffle_non";
+ }
+
+ program {
+ name: "shuffle_non_invisible" ;
+ signal: "shuffle_non_invisible";
+ source: "shuffle_non";
+ action: STATE_SET "invisible" 0.0;
+ target: "shuffle_non";
+ }
+
+ program {
+ name: "rep_all_down";
+ source: "rep_all";
+ signal: "mouse,down,1";
+ action: STATE_SET "clicked" 0.0;
+ target: "rep_all";
+ }
+
+ program {
+ name: "rep_all_up";
+ source: "rep_all";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ target: "rep_all";
+ }
+
+ program {
+ name: "rep_all_clicked";
+ source: "rep_all";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "rep_all_clicked" 0.0;
+ }
+
+ program {
+ name: "rep_all_visible" ;
+ signal: "rep_all_visible";
+ source: "rep_all";
+ action: STATE_SET "default" 0.0;
+ target: "rep_all";
+ }
+
+ program {
+ name: "rep_all_invisible" ;
+ signal: "rep_all_invisible";
+ source: "rep_all";
+ action: STATE_SET "invisible" 0.0;
+ target: "rep_all";
+ }
+
+ program {
+ name: "rep_non_down";
+ source: "rep_non";
+ signal: "mouse,down,1";
+ action: STATE_SET "clicked" 0.0;
+ target: "rep_non";
+ }
+
+ program {
+ name: "rep_non_up";
+ source: "rep_non";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ target: "rep_non";
+ }
+
+ program {
+ name: "rep_non_clicked";
+ source: "rep_non";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "rep_non_clicked" 0.0;
+ }
+
+ program {
+ name: "rep_non_visible" ;
+ signal: "rep_non_visible";
+ source: "rep_non";
+ action: STATE_SET "default" 0.0;
+ target: "rep_non";
+ }
+
+ program {
+ name: "rep_non_invisible" ;
+ signal: "rep_non_invisible";
+ source: "rep_non";
+ action: STATE_SET "invisible" 0.0;
+ target: "rep_non";
+ }
+
+ program {
+ name: "rep_1_down";
+ source: "rep_1";
+ signal: "mouse,down,1";
+ action: STATE_SET "clicked" 0.0;
+ target: "rep_1";
+ }
+
+ program {
+ name: "rep_1_up";
+ source: "rep_1";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ target: "rep_1";
+ }
+
+ program {
+ name: "rep_1_clicked";
+ source: "rep_1";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "rep_1_clicked" 0.0;
+ }
+
+ program {
+ name: "rep_1_visible" ;
+ signal: "rep_1_visible";
+ source: "rep_1";
+ action: STATE_SET "default" 0.0;
+ target: "rep_1";
+ }
+
+ program {
+ name: "rep_1_invisible" ;
+ signal: "rep_1_invisible";
+ source: "rep_1";
+ action: STATE_SET "invisible" 0.0;
+ target: "rep_1";
+ }
+ program {
+ name: "favorite_clicked";
+ source: "player_favorite";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "favorite_clicked" 0.0;
+ }
+ program {
+ name: "favorite_down";
+ source: "player_favorite";
+ signal: "mouse,down,1";
+ action: SIGNAL_EMIT "favorite_down" 0.0;
+ }
+ program {
+ name: "favorite_up";
+ source: "player_favorite";
+ signal: "mouse,up,1";
+ action: SIGNAL_EMIT "favorite_up" 0.0;
+ }
+ program {
+ name: "favorite_on";
+ source: "play_view";
+ signal: "favorite_on";
+ action: STATE_SET "on" 0.0;
+ target: "player_favorite";
+ }
+ program {
+ name: "favorite_off";
+ source: "play_view";
+ signal: "favorite_off";
+ action: STATE_SET "default" 0.0;
+ target: "player_favorite";
+ }
+ program {
+ name: "favorite_invisible";
+ source: "play_view";
+ signal: "favorite_invisible";
+ action: STATE_SET "invisible" 0.0;
+ target: "player_favorite";
+ }
+
+ }
+}
diff --git a/layout/mp-play-progress.edc b/layout/mp-play-progress.edc
new file mode 100755
index 0000000..527bb4f
--- /dev/null
+++ b/layout/mp-play-progress.edc
@@ -0,0 +1,314 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+
+#define PROGRESS_PAD_TOP_1 21
+#define PROGRESS_PAD_TOP_2 6
+#define PROGRESS_PAD_BOTTOM 26
+#define PROGRESS_BG_ALPHA 230
+
+
+#define PROGRESS_PAD_CENTER 14
+
+#define PROGRESS_BAR_PAD_TOP 32
+#define PROGRESS_BAR_H 16
+#define PROGRESS_BAR_PAD_TIME 16
+#define PROGRESS_TIME_H 28
+#define PROGRESS_TIME_PAD_BOTTOM 21
+#define PROGRESS_BAR_PAD_LEFT 32
+#define PROGRESS_BAR_PAD_RIGHT 32
+
+#define PROGRESS_BOX_H (PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_H+PROGRESS_BAR_PAD_TIME+PROGRESS_TIME_H+PROGRESS_TIME_PAD_BOTTOM)
+#define PROGRESS_BOX_W 720
+
+#define PROGRESS_BAR_SY PROGRESS_BAR_PAD_TOP/PROGRESS_BOX_H
+#define PROGRESS_BAR_EY (PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_H)/PROGRESS_BOX_H
+#define PROGRESS_BAR_SX PROGRESS_BAR_PAD_LEFT/PROGRESS_BOX_W
+#define PROGRESS_BAR_EX (PROGRESS_BOX_W-PROGRESS_BAR_PAD_RIGHT)/PROGRESS_BOX_W
+
+#define PROGRESS_TIME_PLAYING_SY (PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_H + PROGRESS_BAR_PAD_TIME)/PROGRESS_BOX_H
+#define PROGRESS_TIME_PLAYING_EY (PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_H + PROGRESS_BAR_PAD_TIME + PROGRESS_TIME_H)/PROGRESS_BOX_H
+#define PROGRESS_TIME_PLAYING_SX PROGRESS_BAR_SX
+#define PROGRESS_TIME_PLAYING_EX 0.5*PROGRESS_BAR_EX
+
+#define PROGRESS_TIME_TOTAL_SY PROGRESS_TIME_PLAYING_SY
+#define PROGRESS_TIME_TOTAL_EY PROGRESS_TIME_PLAYING_EY
+#define PROGRESS_TIME_TOTAL_SX 0.5*PROGRESS_BAR_EX
+#define PROGRESS_TIME_TOTAL_EX PROGRESS_BAR_EX
+
+group {
+ name: "music/playing/progress_box";
+ min: MAIN_W PROGRESS_BOX_H;
+ parts {
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color : 0 0 0 0;//PROGRESS_BG_ALPHA;
+ }
+ }
+
+
+ part { name: "progress_bar_area";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ fixed: 1 0;
+ align: 0.5 0;
+ rel1 { relative: PROGRESS_BAR_SX 0.0; offset: 0 0; to: "bg"; }
+ rel2 { relative: PROGRESS_BAR_EX (PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_H+PROGRESS_BAR_PAD_TIME)/PROGRESS_BOX_H; offset: -1 0; to: "bg"; }
+
+ color: 0 0 0 0;
+ }
+ }
+
+
+ part { name: "progress_bar";
+ type : SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ fixed: 1 0;
+ align: 0.5 0;
+ rel1 { relative: 0.0 0.0; to, "progress_bar_area";}
+ rel2 { relative: 1.0 1.0; to, "progress_bar_area";}
+ }
+ }
+
+ part { name: "progress_text_playing";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 80 0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ rel1 { relative: PROGRESS_TIME_PLAYING_SX PROGRESS_TIME_PLAYING_SY; offset: 0 0; to: "bg"; }
+ rel2 { relative: PROGRESS_TIME_PLAYING_EX PROGRESS_TIME_PLAYING_EY; offset: -1 0; to: "bg"; }
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: 25;
+ text: "00:00";
+ align: 0.0 0.5;
+ }
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: "progress_text_total";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 80 0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 { relative: PROGRESS_TIME_TOTAL_SX PROGRESS_TIME_TOTAL_SY; offset: 0 0; to: "bg"; }
+ rel2 { relative: PROGRESS_TIME_TOTAL_EX PROGRESS_TIME_TOTAL_EY; offset: -1 0; to: "bg"; }
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: 25;
+ text: "00:00";
+ align: 1.0 0.5;
+ }
+ color: 255 255 255 255;
+
+ }
+ }
+ }
+}
+
+group {
+ name: "music/playing/progress_box_ls";
+ min: MAIN_W PROGRESS_BOX_H;
+ parts {
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color : 0 0 0 0;//PROGRESS_BG_ALPHA;
+ }
+ }
+
+
+ part { name: "progress_bar_area";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ fixed: 1 0;
+ align: 0.5 0;
+ rel1 { relative: PROGRESS_BAR_SX 0.0; offset: 0 0; to: "bg"; }
+ rel2 { relative: PROGRESS_BAR_EX (PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_H+PROGRESS_BAR_PAD_TIME)/PROGRESS_BOX_H; offset: -1 0; to: "bg"; }
+
+
+ color: 0 0 0 0;
+ }
+ }
+
+
+ part { name: "progress_bar";
+ type : SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 0;
+ fixed: 1 0;
+ align: 0.5 0;
+ rel1 { relative: 0.0 0.0; to, "progress_bar_area";}
+ rel2 { relative: 1.0 1.0; to, "progress_bar_area";}
+ }
+ }
+
+ part { name: "progress_text_playing";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 80 0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ rel1 { relative: PROGRESS_TIME_PLAYING_SX PROGRESS_TIME_PLAYING_SY; offset: 0 0; to: "bg"; }
+ rel2 { relative: PROGRESS_TIME_PLAYING_EX PROGRESS_TIME_PLAYING_EY; offset: -1 0; to: "bg"; }
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: 25;
+ text: "00:00";
+ align: 0.0 0.5;
+ }
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name: "progress_text_total";
+ type: TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 80 0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 { relative: PROGRESS_TIME_TOTAL_SX PROGRESS_TIME_TOTAL_SY; offset: 0 0; to: "bg"; }
+ rel2 { relative: PROGRESS_TIME_TOTAL_EX PROGRESS_TIME_TOTAL_EY; offset: -1 0; to: "bg"; }
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: 25;
+ text: "00:00";
+ align: 1.0 0.5;
+ }
+ color: 255 255 255 255;
+
+ }
+ }
+ }
+}
+
+group {
+ name: "music/playing/progress_box/progress_bar";
+ images {
+ image: "T02_player_progress_bg.png" COMP;
+ image: "T02_player_progress_bar.png" COMP;
+ image: "T02_player_progress_point.png" COMP;
+ }
+
+ parts {
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: 0 0 0 0;
+ }
+ }
+
+ part {
+ name: "progress_bg_img";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 PROGRESS_BAR_PAD_TOP/(PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_PAD_TIME+PROGRESS_BAR_H); to, "bg"; }
+ rel2 { relative: 1.0 (PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_H)/(PROGRESS_BAR_PAD_TOP+PROGRESS_BAR_PAD_TIME+PROGRESS_BAR_H); to, "bg"; }
+ image {
+ normal : "T02_player_progress_bg.png";
+ }
+ }
+ }
+
+ part {
+ name: "progress_bar";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 10 10;
+ fixed: 1 1;
+ image {
+ normal: "T02_player_progress_bar.png";
+ }
+ rel1 { relative: 0.0 0.0; to: "progress_bg_img"; }
+ rel2 { relative: 1.0 1.0; to_x: "progressbar_control"; to_y: "progress_bg_img";}
+ }
+ }
+ part {
+ name: "progressbar_control";
+ type: IMAGE;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ min: PROGRESS_BAR_H PROGRESS_BAR_H;
+ fixed: 1 1;
+ align: 0 0;
+ rel1 { relative : 0.5 0.0; to:"progress_bg_img";}
+ rel2 { relative : 0.5 1.0; to:"progress_bg_img";}
+ image.normal : "T02_player_progress_point.png";
+ }
+ dragable {
+ confine: "bg";
+ x: 1 1 0;
+ y: 0 0 0;
+ }
+ }
+ }
+}
+
diff --git a/layout/mp-play-view.edc b/layout/mp-play-view.edc
new file mode 100755
index 0000000..89f5583
--- /dev/null
+++ b/layout/mp-play-view.edc
@@ -0,0 +1,820 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+
+/* font name*/
+#define FONT_TITLE_NAME "system_title"
+#define FONT_CONTENT_NAME "system_content"
+#define FONT_SUBCONTENT_NAME "system_subcontent"
+#define ALBUMART_IMAGE_SHADOW_RGBA 0 0 0 0
+
+
+#define ALBUM_IMG_H 481
+#define TRACK_INFO_H 139
+#define TRACK_TITLE_H 40
+#define ALBUM_TITLE_H 36
+#define ARTIST_TITLE_H 34
+#define FAVOUR_ICON_H 34
+
+/* main size */
+#define HD_MAIN_W 720
+#define HD_MAIN_H 1280
+
+#define HD_STATUSBAR_H 50
+#define HD_NAVIGATIONBAR_H 100
+
+#define HD_PLAYVIEW_H (HD_MAIN_H-HD_STATUSBAR_H-HD_NAVIGATIONBAR_H)
+#define HD_PLAYVIEW_W HD_MAIN_W
+
+#define PLAYVIEW_TOP_LINE_H 2
+#define PLAYVIEW_TOP_LINE_W 688
+#define PLAYVIEW_TITLE_H 86
+#define PLAYVIEW_OPTION_H 80
+#define PLAYVIEW_ALBUM_H 720
+#define PLAYVIEW_PROGRESSBAR_H 113
+#define PLAYVIEW_BOTTOM_LINE_H 2
+#define PLAYVIEW_BOTTOM_LINE_W 688
+#define PLAYVIEW_CONTROLBAR_H 129
+
+#define PLAYVIEW_MENU_H 96
+#define PLAYVIEW_REFLECTION_H 244
+#define PLAYVIEW_TOP_LINE_1_SX (0.5*(HD_PLAYVIEW_W-PLAYVIEW_TOP_LINE_W))/HD_PLAYVIEW_W
+#define PLAYVIEW_TOP_LINE_1_EX (0.5*(HD_PLAYVIEW_W+PLAYVIEW_TOP_LINE_W))/HD_PLAYVIEW_W
+#define PLAYVIEW_TOP_LINE_1_SY 0.0
+#define PLAYVIEW_TOP_LINE_1_EY (0.5*PLAYVIEW_TOP_LINE_H/HD_PLAYVIEW_H)
+#define PLAYVIEW_TOP_LINE_2_SX PLAYVIEW_TOP_LINE_1_SX
+#define PLAYVIEW_TOP_LINE_2_EX PLAYVIEW_TOP_LINE_1_EX
+#define PLAYVIEW_TOP_LINE_2_SY PLAYVIEW_TOP_LINE_1_EY
+#define PLAYVIEW_TOP_LINE_2_EY (PLAYVIEW_TOP_LINE_2_SY+0.5*PLAYVIEW_TOP_LINE_H/HD_PLAYVIEW_H)
+#define PLAYVIEW_TITLE_SX 0.0
+#define PLAYVIEW_TITLE_EX 1.0
+#define PLAYVIEW_TITLE_SY PLAYVIEW_TOP_LINE_2_EY
+#define PLAYVIEW_TITLE_EY (PLAYVIEW_TITLE_SY+PLAYVIEW_TITLE_H/HD_PLAYVIEW_H)
+
+#define PLAYVIEW_OPTION_SX 0.0
+#define PLAYVIEW_OPTION_EX 1.0
+#define PLAYVIEW_OPTION_SY PLAYVIEW_TITLE_EY
+#define PLAYVIEW_OPTION_EY (PLAYVIEW_OPTION_SY+PLAYVIEW_OPTION_H/HD_PLAYVIEW_H)
+
+#define PLAYVIEW_ALBUM_SX 0.0
+#define PLAYVIEW_ALBUM_EX 1.0
+#define PLAYVIEW_ALBUM_SY PLAYVIEW_OPTION_EY
+#define PLAYVIEW_ALBUM_EY (PLAYVIEW_ALBUM_SY+PLAYVIEW_ALBUM_H/HD_PLAYVIEW_H)
+
+#define PLAYVIEW_MENU_SX 0.0
+#define PLAYVIEW_MENU_EX 1.0
+#define PLAYVIEW_MENU_SY (PLAYVIEW_OPTION_EY+(PLAYVIEW_ALBUM_H-PLAYVIEW_MENU_H)/HD_PLAYVIEW_H)
+#define PLAYVIEW_MENU_EY (PLAYVIEW_MENU_SY+PLAYVIEW_MENU_H/HD_PLAYVIEW_H)
+#define PLAYVIEW_REFLECTION_SX 0.0
+#define PLAYVIEW_REFLECTION_EX 1.0
+#define PLAYVIEW_REFLECTION_SY PLAYVIEW_MENU_EY
+#define PLAYVIEW_REFLECTION_EY 1.0
+#define PLAYVIEW_PROGRESSBAR_SX 0.0
+#define PLAYVIEW_PROGRESSBAR_EX 1.0
+#define PLAYVIEW_PROGRESSBAR_SY PLAYVIEW_ALBUM_EY
+#define PLAYVIEW_PROGRESSBAR_EY (PLAYVIEW_PROGRESSBAR_SY+PLAYVIEW_PROGRESSBAR_H/HD_PLAYVIEW_H)
+#define PLAYVIEW_BOTTOM_LINE_1_SX 0.0
+#define PLAYVIEW_BOTTOM_LINE_1_EX 1.0
+#define PLAYVIEW_BOTTOM_LINE_1_SY PLAYVIEW_PROGRESSBAR_EY
+#define PLAYVIEW_BOTTOM_LINE_1_EY (PLAYVIEW_BOTTOM_LINE_1_SY+0.5*PLAYVIEW_BOTTOM_LINE_H/HD_PLAYVIEW_H)
+#define PLAYVIEW_BOTTOM_LINE_2_SX PLAYVIEW_BOTTOM_LINE_1_SX
+#define PLAYVIEW_BOTTOM_LINE_2_EX PLAYVIEW_BOTTOM_LINE_1_EX
+#define PLAYVIEW_BOTTOM_LINE_2_SY PLAYVIEW_BOTTOM_LINE_1_EY
+#define PLAYVIEW_BOTTOM_LINE_2_EY (PLAYVIEW_BOTTOM_LINE_2_SY+0.5*PLAYVIEW_BOTTOM_LINE_H/HD_PLAYVIEW_H)
+#define PLAYVIEW_CONTROLBAR_SX 0.0
+#define PLAYVIEW_CONTROLBAR_EX 1.0
+#define PLAYVIEW_CONTROLBAR_SY PLAYVIEW_BOTTOM_LINE_2_EY
+#define PLAYVIEW_CONTROLBAR_EY 1.0
+/* sub layout option */
+#define OPTION_H PLAYVIEW_OPTION_H
+#define OPTION_W HD_PLAYVIEW_W
+#define OPTION_BUTTON_H 70
+#define OPTION_BUTTON_W 220
+#define OPTION_BUTTON_PAD_TOP 4
+#define OPTION_BUTTON_PAD_LEFT 12
+#define OPTION_BUTTON_PAD_BUTTON 18
+#define OPTION_SY OPTION_BUTTON_PAD_TOP/OPTION_H
+#define OPTION_EY (OPTION_BUTTON_PAD_TOP+OPTION_BUTTON_H)/OPTION_H
+#define OPTION_1_SX OPTION_BUTTON_PAD_LEFT/OPTION_W
+#define OPTION_1_EX (OPTION_BUTTON_PAD_LEFT+OPTION_BUTTON_W)/OPTION_W
+#define OPTION_2_SX (OPTION_BUTTON_PAD_LEFT+OPTION_BUTTON_W+OPTION_BUTTON_PAD_BUTTON)/OPTION_W
+#define OPTION_2_EX (OPTION_BUTTON_PAD_LEFT+OPTION_BUTTON_W*2+OPTION_BUTTON_PAD_BUTTON)/OPTION_W
+#define OPTION_3_SX (OPTION_BUTTON_PAD_LEFT+OPTION_BUTTON_W*2+OPTION_BUTTON_PAD_BUTTON*2)/OPTION_W
+#define OPTION_3_EX (OPTION_BUTTON_PAD_LEFT+OPTION_BUTTON_W*3+OPTION_BUTTON_PAD_BUTTON*2)/OPTION_W
+/* landscape mode layout */
+
+#define NAVIGATIONBAR_H 100
+
+#define OPT_PROG \
+ program {\
+ name: "option_menu_invisible" ;\
+ signal: "option_menu_invisible";\
+ source: "player_option_menu";\
+ action: STATE_SET "invisible" 0.0;\
+ target: "player_option_menu";\
+ transition: LINEAR 0.3;\
+ after :"option_hide_done";\
+ }\
+ program {\
+ name: "option_hide_done";\
+ signal: "option_hide";\
+ source: "player_option_menu";\
+ action: STATE_SET "invisible" 1.0;\
+ target: "player_option_menu";\
+ }\
+ program {\
+ name: "option_menu_visible" ;\
+ signal: "option_menu_visible";\
+ source: "player_option_menu";\
+ action: STATE_SET "default" 0.0;\
+ target: "player_option_menu";\
+ transition: LINEAR 0.3;\
+ }
+
+group {
+ name: "mp_play_view_layout";
+
+ parts {
+ part {
+ name: "bg";
+ mouse_events: 0;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ color: 0 0 0 0;
+ }
+ }
+
+ part{
+ name: "top_line1";
+ type: RECT;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: PLAYVIEW_TOP_LINE_1_SX PLAYVIEW_TOP_LINE_1_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_TOP_LINE_1_EX PLAYVIEW_TOP_LINE_1_EY; offset: 0 1; to: "bg";}
+ color: 8 8 8 102;
+ }
+ }
+ part {
+ name: "top_line2";
+ type: RECT;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: PLAYVIEW_TOP_LINE_2_SX PLAYVIEW_TOP_LINE_2_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_TOP_LINE_2_EX PLAYVIEW_TOP_LINE_2_EY; offset: 0 1; to: "bg";}
+ color: 173 173 173 102;
+ }
+ }
+ part{
+ name : "player_info";
+ type: SWALLOW;
+ mouse_events:1;
+ scale : 1;
+ description {
+ visible:1;
+ color: 0 0 0 255;
+ state: "default" 0.0;
+ rel1 { relative: PLAYVIEW_TITLE_SX PLAYVIEW_TITLE_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_TITLE_EX PLAYVIEW_TITLE_EY; to: "bg";}
+ }
+ }
+
+ part{
+ name : "player_options";
+ type: SWALLOW;
+ mouse_events:1;
+ scale : 1;
+ description {
+ visible:1;
+ color: 49 49 49 255;
+ state: "default" 0.0;
+ rel1 { relative: PLAYVIEW_OPTION_SX PLAYVIEW_OPTION_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_OPTION_EX PLAYVIEW_OPTION_EY; to: "bg";}
+ }
+ }
+
+
+ part{
+ name : "base";
+ type: RECT;
+ mouse_events:1;
+ scale : 1;
+ description {
+ visible:1;
+ color: 0 0 0 0;
+ state: "default" 0.0;
+ rel1 { relative: 0.0 1.0; to: "player_options";}
+ rel2 { relative: 1.0 1.0; to: "bg";}
+ }
+ }
+
+ part {
+ name: "clipper";
+ mouse_events: 0;
+ type: RECT;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0;
+ offset : 0 0; to: "base";}
+ rel2 { relative: 1.0 1.0; to: "base";}
+ color: 255 255 255 255;
+ }
+ }
+
+ part {
+ name : "list_content";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ clip_to : "clipper";
+ description {
+ visible:1;
+ fixed: 1 1;
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;to: "base";}
+ rel2 { relative: 1.0 1.0;to: "base";}
+ }
+ description {
+ visible:0;
+ fixed: 1 1;
+ state: "invisible" 0.0;
+ rel1 { relative: 0.0 0.0;to: "base";}
+ rel2 { relative: 1.0 1.0;to: "base";}
+ }
+ description {
+ visible:1;
+ fixed: 1 1;
+ state: "left" 0.0;
+ rel1 { relative: -1.0 0.0;to: "base";}
+ rel2 { relative: 0.0 1.0;to: "base";}
+ }
+ description {
+ visible:1;
+ fixed: 1 1;
+ state: "right" 0.0;
+ rel1 { relative: 1.0.0 0.0;to: "base";}
+ rel2 { relative: 2.0 1.0;to: "base";}
+ }
+ }
+
+ part {
+ name : "list_content_temp";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ clip_to : "clipper";
+ description {
+ visible:1;
+ fixed: 1 1;
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;to: "base";}
+ rel2 { relative: 1.0 1.0;to: "base";}
+ }
+ description {
+ visible:0;
+ fixed: 1 1;
+ state: "invisible" 0.0;
+ rel1 { relative: 0.0 0.0;to: "base";}
+ rel2 { relative: 1.0 1.0;to: "base";}
+ }
+ description {
+ visible:1;
+ fixed: 1 1;
+ state: "left" 0.0;
+ rel1 { relative: -1.0 0.0;to: "base";}
+ rel2 { relative: 0.0 1.0;to: "base";}
+ }
+ description {
+ visible:1;
+ fixed: 1 1;
+ state: "right" 0.0;
+ rel1 { relative: 1.0.0 0.0;to: "base";}
+ rel2 { relative: 2.0 1.0;to: "base";}
+ }
+ }
+
+ part {
+ name: "elm.swallow.content.index";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1 { to: "list_content"; }
+ rel2 { to: "list_content"; }
+ }
+ }
+
+ part {
+ name: "main.mute.bg";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 266 266;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.5 0.5;}
+ rel2 { relative: 0.5 0.5;}
+ image { normal: "music_player_bg.PNG"; border: 7 7 0 0; }
+ color: 128 128 128 128;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+ part {
+ name: "main.mute.image";
+ type: IMAGE;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ min: 96 96;
+ fixed: 1 1;
+ align: 0.5 0.5;
+ rel1 { relative: 0.5 0.5;}
+ rel2 { relative: 0.5 0.5;}
+ image { normal: "music_popup_mute.png"; }
+ color: 255 255 255 255;
+ }
+ description {
+ state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+
+ part {
+ name: "player_option_menu";
+ type: SWALLOW;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ rel1 { relative: PLAYVIEW_MENU_SX PLAYVIEW_MENU_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_MENU_EX PLAYVIEW_MENU_EY; to: "bg";}
+ color: 35 35 35 255;
+ }
+ description {
+ state: "invisible" 0.0;
+ inherit: "default" 0.0;
+ rel1 { relative: PLAYVIEW_MENU_SX PLAYVIEW_MENU_EY; to: "bg";}
+ rel2 { relative: PLAYVIEW_MENU_EX PLAYVIEW_MENU_EY; to: "bg";}
+ }
+ description {
+ state: "invisible" 1.0;
+ inherit: "invisible" 0.0;
+ visible: 0;
+ }
+ }
+
+ part {
+ name: "player_progress";
+ type: SWALLOW;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: PLAYVIEW_PROGRESSBAR_SX PLAYVIEW_PROGRESSBAR_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_PROGRESSBAR_EX PLAYVIEW_PROGRESSBAR_EY; to: "bg";}
+ color: ALBUMART_IMAGE_SHADOW_RGBA;
+ }
+ }
+
+ part {
+ name: "line1";
+ type: RECT;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: PLAYVIEW_BOTTOM_LINE_1_SX PLAYVIEW_BOTTOM_LINE_1_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_BOTTOM_LINE_1_EX PLAYVIEW_BOTTOM_LINE_1_EY; offset: 0 1; to: "bg";}
+ color: 8 8 8 102;
+ }
+ }
+
+ part {
+ name: "line2";
+ type: RECT;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: PLAYVIEW_BOTTOM_LINE_2_SX PLAYVIEW_BOTTOM_LINE_2_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_BOTTOM_LINE_2_EX PLAYVIEW_BOTTOM_LINE_2_EY; offset: 0 1; to: "bg";}
+ color: 130 130 130 102;
+ }
+ }
+
+ part {
+ name : "elm.swallow.controlbar";
+ type: SWALLOW;
+ mouse_events:1;
+ scale : 1;
+ description {
+ visible:1;
+ state: "default" 0.0;
+ rel1 { relative: PLAYVIEW_CONTROLBAR_SX PLAYVIEW_CONTROLBAR_SY; to: "bg";}
+ rel2 { relative: PLAYVIEW_CONTROLBAR_EX PLAYVIEW_CONTROLBAR_EY; to: "bg";}
+ color: 35 35 35 0;
+ }
+ }
+ }
+
+ programs {
+ OPT_PROG
+ program { name: "flick_left";
+ signal: "flick_left";
+ source: "list_content";
+ action: STATE_SET "left" 0.0;
+ target: "list_content";
+ transition: LINEAR 0.5;
+ }
+ program { name: "flick_right";
+ signal: "flick_right";
+ source: "list_content";
+ action: STATE_SET "right" 0.0;
+ target: "list_content";
+ transition: LINEAR 0.5;
+ }
+ program { name: "set_right";
+ signal: "set_right";
+ source: "list_content_temp";
+ action: STATE_SET "right" 0.0;
+ target: "list_content_temp";
+ }
+ program { name: "set_left";
+ signal: "set_left";
+ source: "list_content_temp";
+ action: STATE_SET "left" 0.0;
+ target: "list_content_temp";
+ }
+ program { name: "set_default";
+ signal: "set_default";
+ source: "list_content_temp";
+ action: STATE_SET "default" 0.0;
+ target: "list_content_temp";
+ transition: LINEAR 0.5;
+ after :"list_content_transit_done";
+ }
+ program { name: "set_default_list";
+ signal: "set_default";
+ source: "list_content";
+ action: STATE_SET "default" 0.0;
+ target: "list_content";
+ }
+ program { name : "list_content_transit_done";
+ signal: "transit_done";
+ source: "list_content";
+ script {
+ emit("transit_done", "list");
+ }
+ }
+ program { name : "list_temp_transit_done";
+ signal: "transit_done";
+ source: "list_content_temp";
+ script {
+ emit("transit_done", "temp");
+ }
+ }
+
+ program {
+ signal: "signal.main.mute.show";
+ source: "*";
+ action: STATE_SET "show" 0.0;
+ target: "main.mute.image";
+ target: "main.mute.bg";
+ }
+
+ program {
+ signal: "signal.main.mute.hide";
+ source: "*";
+ action: STATE_SET "default" 0.0;
+ target: "main.mute.image";
+ target: "main.mute.bg";
+ }
+ }
+ }
+
+
+
+ group { name : "mp_play_view";
+
+ images {
+ image: "T02_controls_bg_shadow.png" COMP;
+ image: "music_player_bg.PNG" COMP;
+ image: "music_popup_mute.png" COMP;
+ }
+
+ parts {
+
+ part {
+ name: "bg";
+ type: SWALLOW;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0; }
+ }
+ }
+
+ part {
+ name: "album_bg";
+ type: SWALLOW;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to: "bg";}
+ rel2 { relative: 1.0 PLAYVIEW_ALBUM_H/964; offset: 0 -2; to: "bg";}
+ }
+ }
+
+ part {
+ name: "album_art";
+ type: SWALLOW;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to: "album_bg"; }
+ rel2 { relative: 1.0 PLAYVIEW_ALBUM_H/964; offset: 0 -2; to: "bg";}
+ }
+ }
+
+ part { name: "event_box";
+ type : SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to: "album_bg"; }
+ rel2 { relative: 1.0 1.0; to: "album_bg"; }
+ }
+ }
+
+ /* streaming buffering area */
+ part {
+ name: "buffering_area";
+ type: SWALLOW;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ min: 100 100;
+ align: 1.0 1.0;
+ fixed: 1 1;
+ rel1 { relative: 1.0 1.0; to: "album_art"; }
+ rel2 { relative: 1.0 1.0; to: "album_art"; }
+ }
+ }
+ }
+
+ programs {
+ }
+}
+
+
+#define SEARCH_H 60
+
+#define FREQ_PAD_T (5)
+#define FREQ_PAD_D (5)
+#define FREQ_ICON (90)
+#define FREQ_H (FREQ_PAD_T+FREQ_PAD_D+FREQ_ICON)
+
+#define ALBUM_OPTION 90
+#define ALBUM_PROGRESS 67
+#define ALBUM_CENTER 324
+#define ALBUM_ART_H 481
+
+#define TITLE_PAD_T 14
+#define TITLE_PAD_D 15
+#define TITLE_NAME 40
+#define TITLE_ARTIST 36
+#define TITLE_ALBUM 34
+#define TITLE_H (TITLE_PAD_T+TITLE_PAD_D+TITLE_NAME+TITLE_ARTIST+TITLE_ALBUM)
+
+#define BASE_SC_H (ALBUM_ART_H+TITLE_H)
+
+ group {
+ name: "empty_layout";
+ parts {
+
+ part { name: "bg";
+ mouse_events: 0;
+ type: RECT;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0;
+ offset : 0 0;}
+ rel2 { relative: 1.0 1.0;}
+ color: 0 0 0 255;
+ }
+ }
+ }
+ }
+
+ group {
+ name: "player_view_info";
+ min: 54 MAIN_W;
+ parts {
+
+ part { name: "bg";
+ mouse_events: 0;
+ type : RECT;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0;}
+ rel2 { relative: 1.0 1.0;}
+ color: 0 0 0 255;
+ }
+ }
+ part {
+ name : "artist";
+ type: TEXT;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ visible:1;
+ state: "default" 0.0;
+ rel1 { relative: 0.0 0.0;to: "bg";}
+ rel2 { relative: 1.0 20/54;to: "bg";}
+ text {
+ font: FONT_STYLE_ROMAN;
+ size: 32;
+ align: 0.5 0.5;
+ }
+ color: 18 131 183 255;
+ }
+ }
+ part {
+ name : "album";
+ type: TEXT;
+ mouse_events: 1;
+ scale: 1;
+ description {
+ visible:1;
+ state: "default" 0.0;
+ rel1 { relative: 0.0 24/50;to: "bg";}
+ rel2 { relative: 1.0 48/50;to: "bg";}
+ text {
+ font: FONT_STYLE_ROMAN;
+ size: 32;
+ align: 0.5 0.5;
+ }
+ color: 18 131 183 255;
+ }
+ }
+ }
+ }
+
+
+ group {
+ name: "player_view_options";
+ min: 50 MAIN_W;
+
+ images {
+ image: "T02_OptionHeader_btn_press.png" COMP;
+ }
+ parts {
+
+ part { name: "bg";
+ mouse_events: 1;
+ type: RECT;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0;
+ offset : 0 0;}
+ rel2 { relative: 1.0 1.0;}
+ color: 53 53 53 255;
+ }
+ }
+
+ part { name: "bottom_line";
+ mouse_events: 1;
+ type: RECT;
+ description { state: "default" 0.0;
+ visible: 1;
+ min: 0 1;
+ fixed: 1 1;
+ rel1 { relative: 0.0 1.0;}
+ rel2 { relative: 1.0 1.0;}
+ color: 49 49 49 255;
+ }
+ }
+
+ part {
+ name: "option_3_bg";
+ type: RECT;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: OPTION_3_SX OPTION_SY; to: "bg";}
+ rel2 { relative: OPTION_3_EX OPTION_EY; to: "bg";}
+ color: 53 53 53 255;
+ }description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ }
+ }
+ part {
+ name: "option_3_press_bg";
+ type: IMAGE;
+ mouse_events: 1;
+ description {
+ state: "default" 0.0;
+ visible: 0;
+ image { normal: "T02_OptionHeader_btn_press.png"; }
+ rel1 { relative: 0.0 0.0; to: "option_3_bg";}
+ rel2 { relative: 1.0 1.0; to: "option_3_bg";}
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ image { normal: "T02_OptionHeader_btn_press.png"; }
+ visible: 1;
+ }
+ }
+ part {
+ name: "option_3";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to, "option_3_bg";}
+ rel2 { relative: 1.0 1.0; to, "option_3_bg";}
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: 32;
+ align: 0.5 0.5;
+ text: "Details";
+ }
+ color: 249 249 249 255;
+ }
+ description {
+ state: "press" 0.0;
+ inherit: "default" 0.0;
+ color: 188 187 187 255;
+ }
+ }
+ }
+
+ programs {
+ program {
+ name: "option_3_down";
+ source: "option_3_bg";
+ signal: "mouse,down,1";
+ action: STATE_SET "press" 0.0;
+ target: "option_3";
+ target: "option_3_press_bg";
+ }
+
+ program {
+ name: "option_3_up";
+ source: "option_3_bg";
+ signal: "mouse,up,1";
+ action: STATE_SET "default" 0.0;
+ target: "option_3";
+ target: "option_3_press_bg";
+ }
+
+ program {
+ name: "option_3_clicked";
+ source: "option_3_bg";
+ signal: "mouse,clicked,1";
+ action: SIGNAL_EMIT "option_3_clicked" 0.0;
+ }
+ }
+ }
+
diff --git a/layout/mp-progressbar.edc b/layout/mp-progressbar.edc
new file mode 100755
index 0000000..f710262
--- /dev/null
+++ b/layout/mp-progressbar.edc
@@ -0,0 +1,410 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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/music/list_progress";
+ images {
+ image: "T02_now_playing_progress_bg.png" COMP;
+ image: "T02_now_playing_progress_bar.png" COMP;
+ }
+ parts {
+ part { name: "elm.padding.left";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 0.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ offset: 0 0;
+ }
+ color: 0 0 0 0;
+ align: 0.0 0.0;
+ }
+ }
+ part { name: "elm.padding.right";
+ type: RECT;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 0;
+ rel1 {
+ relative: 1.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ relative: 1.0 1.0;
+ offset: 0 0;
+ }
+ color: 0 0 0 0;
+ align: 1.0 0.0;
+ }
+ }
+ part { name: "elm.background.progressbar";
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to_x: "elm.padding.left";
+ relative: 1.0 0.0;
+ offset: 0 0;
+ }
+ rel2 {
+ to_x: "elm.padding.right";
+ relative: 0.0 1.0;
+ offset: 0 0;
+ }
+ }
+ }
+ part { name: "elm.swallow.bar";
+ mouse_events: 0;
+ scale: 1;
+ type: SWALLOW;
+ description {
+ min: 48 10;
+ max: 99999 10;
+ state: "default" 0.0;
+ rel1 {
+ to: "elm.background.progressbar";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "elm.background.progressbar";
+ relative: 1.0 1.0;
+ }
+ }
+ }
+ part { name: "elm.swallow.content";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.0 0.5;
+ rel1 {
+ offset: 0 0;
+ to_y: "elm.background.progressbar";
+ }
+ rel2 {
+ offset: 0 -1;
+ 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;
+ rel2.offset: 4 -1;
+ }
+ }
+ 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: "SLP:style=Medium";
+ size: 10;
+ min: 0 0;
+ align: 0.0 0.5;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ text.min: 1 1;
+ }
+ }
+ part { name: "background";
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "elm.background.progressbar";
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "elm.swallow.bar";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to: "elm.swallow.bar";
+ relative: 1.0 1.0;
+ }
+ image {
+ normal: "T02_now_playing_progress_bg.png";
+ border: 0 0 1 1;
+ }
+ }
+ }
+ 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: "SLP:style=Medium";
+ size: 10;
+ min: 0 0;
+ align: 0.5 0.0;
+ }
+ color: 0 0 0 255;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ text.min: 1 1;
+ }
+ }
+ part { name: "elm.progress.progressbar";
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "elm.background.progressbar";
+ description {
+ state: "default" 0.0;
+ min: 0 0;
+ fixed: 1 1;
+ rel1 {
+ to: "elm.swallow.bar";
+ relative: 0.0 0.0;
+ }
+ rel2 {
+ to_y: "elm.swallow.bar";
+ to_x: "elm.cur.progressbar";
+ offset: -1 -1;
+ }
+ image {
+ normal: "T02_now_playing_progress_bar.png";
+ border: 0 0 1 1;
+ }
+ }
+ 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";
+ relative: 1.0 1.0;
+ }
+ }
+ description {
+ state: "state_begin" 0.0;
+ inherit: "default" 0.0;
+ rel1 {
+ to: "elm.swallow.bar";
+ relative: 0.0 0.0;
+ }
+ 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";
+ relative: 1.0 1.0;
+ }
+ }
+ }
+ part { name: "text-bar";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "progress-rect";
+ scale: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ fixed: 1 1;
+ visible: 0;
+ rel1.to: "elm.text.status";
+ rel1.offset: -1 -1;
+ rel2.to: "elm.text.status";
+ text {
+ text_source: "elm.text.status";
+ font: "SLP:style=Medium";
+ size: 10;
+ min: 0 0;
+ align: 0.0 0.0;
+ }
+ color: 224 224 224 255;
+ color3: 0 0 0 64;
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ text.min: 1 1;
+ }
+ }
+ 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";
+ 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 "show" 0.0;
+ target: "text-bar";
+ target: "elm.text.status";
+ }
+ program { name: "units_hide";
+ signal: "elm,state,units,hidden";
+ source: "elm";
+ action: STATE_SET "default" 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";
+ }
+ 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";
+ }
+ 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/layout/mp-rich-info.edc b/layout/mp-rich-info.edc
new file mode 100755
index 0000000..6aa5f98
--- /dev/null
+++ b/layout/mp-rich-info.edc
@@ -0,0 +1,475 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 FONT_NAME
+#define FONT_NAME "system_content"
+#endif
+
+#ifndef MAIN_W
+#define MAIN_W 720.
+#endif
+
+#ifndef MAIN_H
+#define MAIN_H 1280
+#endif
+
+#ifndef FONT_NAME
+#define FONT_NAME "system_content"
+#endif
+
+#define TITLE_TEXT_01_SIZE 38
+#define TITLE_TEXT_01_COLOR 255 255 255 255
+
+#define MAIN_TEXT_01_SIZE 32
+#define MAIN_TEXT_01_COLOR 255 255 255 255
+
+#define SUB_TEXT_01_SIZE 36
+#define SUB_TEXT_01_COLOR 166 166 166 255
+
+#define RICH_INFO_WIDTH 720.0
+#define RICH_INFO_HEIGHT 1130.0
+
+#define RICH_INFO_ALBUM_WIDTH 138.0
+#define RICH_INFO_ALBUM_HEIGHT 138.0
+#define RICH_INFO_GAB 16.0
+#define RICH_INFO_LEFT_WIDTH 170
+#define RICH_INFO_RIGHT_WIDTH 550
+
+#define RICH_INFO_BASE_BOX_DETAIL_TITLE 60
+#define RICH_INFO_SEQ_TEXT_SIZE 24
+#define RICH_INFO_NO_XML_FIND_TAG_HEIGHT 112
+
+#define RICH_INFO_BIO_ALBUM_WIDTH 528
+#define RICH_INFO_BIO_ALBUM_HEIGHT 370
+
+#define MP_INFO_BG_COLOR 37 37 37 255;
+#define RICH_INFO_TITLE_FONT_SIZE 38
+#define BOTTOM_LINE_COLOR 82 82 82 255
+
+#define RICH_INFO_PART_TRANSITION(sval, ssource) \
+ program { \
+ name: ssource"."sval; \
+ signal: sval; \
+ source: ssource; \
+ action: STATE_SET sval 0.0; \
+ target: ssource; \
+ }
+
+#define RICH_INFO_ADD_BASE_BOX_STATUS(part_name, status_name) \
+ description { state: status_name 0.0;\
+ visible: 1;\
+ fixed: 0 0;\
+ rel1 { relative: ((RICH_INFO_GAB*2+ RICH_INFO_ALBUM_WIDTH)/RICH_INFO_WIDTH) 0.0; offset: 0 0; to: "bg";}\
+ rel2 { relative: 1 1; offset: 0 0; to: "bg";}\
+ align: 0.5 0.5;\
+ }\
+ RICH_INFO_PART_TRANSITION(status_name, part_name)
+
+#define RICH_INFO_ADD_BASE_BOX_OUTSIDE_STATUS(part_name, status_name) \
+ description { state: status_name 0.0;\
+ visible: 1;\
+ fixed: 0 0;\
+ rel1 { relative: 1.0 0.0; offset: 0 0; to: "bg";}\
+ rel2 { relative: (1+(RICH_INFO_WIDTH-RICH_INFO_GAB*2-RICH_INFO_ALBUM_WIDTH)/RICH_INFO_WIDTH) 1.2; offset: 0 0; to: "bg";}\
+ align: 0.5 0.5;\
+ }\
+ RICH_INFO_PART_TRANSITION(status_name, part_name)
+
+#define BASE_BOX_DETAIL_PART( part_name ) \
+ part { name: part_name; \
+ type: SWALLOW;\
+ RICH_INFO_ADD_BASE_BOX_STATUS(part_name, "inside")\
+ RICH_INFO_ADD_BASE_BOX_OUTSIDE_STATUS(part_name, "default")\
+ }
+
+#define BASE_BOX_PART( part_name ) \
+ part { name: part_name; \
+ type: SWALLOW;\
+ RICH_INFO_ADD_BASE_BOX_STATUS(part_name, "default")\
+ RICH_INFO_ADD_BASE_BOX_OUTSIDE_STATUS(part_name, "outside")\
+ }
+
+#define RICH_INFO_ADD_DETAIL_SCROLLER_STATUS(part_name, status_name, start_y) \
+ description { state: status_name 0.0;\
+ visible: 1;\
+ min: 0 0;\
+ fixed: 0 1;\
+ align: 0 0;\
+ rel1 { relative: ((RICH_INFO_GAB*2+ RICH_INFO_ALBUM_WIDTH)/RICH_INFO_WIDTH) (start_y/RICH_INFO_HEIGHT); offset: 0 0; to: "bg";}\
+ rel2 { relative: 1.0 1.0; offset: 0 0; to: "bg";}\
+ }\
+ RICH_INFO_PART_TRANSITION(status_name, part_name)
+
+#define RICH_INFO_ADD_DETAIL_SCROLLER_OUTSIDE_STATUS(part_name, status_name, start_y) \
+ description { state: status_name 0.0;\
+ visible: 1;\
+ min: 0 0;\
+ fixed: 0 1;\
+ align: 0 0;\
+ rel1 { relative: 1.0 (start_y/RICH_INFO_HEIGHT); offset: 0 0; to: "bg";}\
+ rel2 { relative: (1.0+(RICH_INFO_WIDTH-RICH_INFO_GAB*2-RICH_INFO_ALBUM_WIDTH)/RICH_INFO_WIDTH) 1.0; to: "bg";}\
+ }\
+ RICH_INFO_PART_TRANSITION(status_name, part_name)
+
+#define DETAIL_SCROLLER_PART( part_name , start_y) \
+ part {name: part_name;\
+ type: SWALLOW;\
+ mouse_events: 1;\
+ scale: 1;\
+ RICH_INFO_ADD_DETAIL_SCROLLER_STATUS(part_name, "inside", start_y)\
+ RICH_INFO_ADD_DETAIL_SCROLLER_OUTSIDE_STATUS(part_name, "default", start_y)\
+ }
+
+#define BASE_BOX_SCROLLER_PART( part_name , start_y) \
+ part {name: part_name;\
+ type: SWALLOW;\
+ mouse_events: 1;\
+ scale: 1;\
+ RICH_INFO_ADD_DETAIL_SCROLLER_STATUS(part_name, "default", start_y)\
+ RICH_INFO_ADD_DETAIL_SCROLLER_OUTSIDE_STATUS(part_name, "outside", start_y)\
+ }
+
+group{
+ name: "richinfo/base";
+
+ parts {
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 0;
+ min: MAIN_W 1;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "swallow";
+ type: SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ fixed: 1 1;
+ visible: 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: 0 0 0 0;
+ }
+ }
+ }
+}
+
+group{
+ name: "richinfo/base_layout";
+
+ parts {
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: MP_INFO_BG_COLOR
+ }
+ }
+
+ part { name: "detail_event_box";
+ type : SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to, "bg"; }
+ rel2 { relative: 1.0 1.0; to, "bg"; }
+ }
+ }
+
+ part {
+ name: "left_area";
+ type : SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 1;
+ rel1 { relative: 0.0 0.0; offset: 0 0; to: "bg";}
+ rel2 { relative: ((RICH_INFO_GAB*2+ RICH_INFO_ALBUM_WIDTH)/RICH_INFO_WIDTH) 1.0; offset: 0 0; to: "bg";}
+ align: 0.5 0.5;
+ }
+ }
+
+ BASE_BOX_PART("base_box")
+ BASE_BOX_DETAIL_PART("mi_base_box_detail")
+ DETAIL_SCROLLER_PART("mi_detail_scroller", RICH_INFO_BASE_BOX_DETAIL_TITLE)
+ BASE_BOX_SCROLLER_PART("no_xml_detail_scroller", RICH_INFO_NO_XML_FIND_TAG_HEIGHT)
+ BASE_BOX_SCROLLER_PART("no_xml_no_sim_detail_scroller", RICH_INFO_GAB)
+ BASE_BOX_SCROLLER_PART("contents", 0)
+ }
+}
+
+group{
+ name: "info_view_left_area";
+
+ images {
+ image: "T02_Video_play.png" COMP;
+ image: "T02_Page_bg.png" COMP;
+ }
+
+ parts{
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: MP_INFO_BG_COLOR
+ }
+ }
+
+ part {
+ name: "left_album_bg";
+ type : SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 1;
+ rel1 { relative: (RICH_INFO_GAB/RICH_INFO_LEFT_WIDTH) (RICH_INFO_GAB/RICH_INFO_HEIGHT);
+ offset: 0 0;
+ to: "bg";
+ }
+ rel2 { relative: ((RICH_INFO_GAB+ RICH_INFO_ALBUM_WIDTH)/RICH_INFO_LEFT_WIDTH) ((RICH_INFO_GAB+ RICH_INFO_ALBUM_HEIGHT)/RICH_INFO_HEIGHT);
+ offset: 0 0;
+ to: "bg";
+ }
+ align: 0.5 0.5;
+ }
+ }
+
+ part {
+ name: "video_play_img";
+ type : SWALLOW;
+ scale: 1;
+ description { state: "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0; to: "left_album_bg";}
+ rel2 { relative: 1.0 1.0; to: "left_album_bg";}
+ }
+ }
+
+ part { name: "seq_text";
+ mouse_events: 1;
+ type, IMAGE;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 0;
+ image { normal: "T02_Page_bg.png"; }
+ align: 0.5 0.5;
+ rel1 { relative: 22/RICH_INFO_LEFT_WIDTH 178/RICH_INFO_HEIGHT;
+ offset: 0 0;
+ to: "bg";
+ }
+ rel2 { relative: 138/RICH_INFO_LEFT_WIDTH 220/RICH_INFO_HEIGHT;
+ offset: 0 0;
+ to: "bg";
+ }
+ }
+ description { state: "show" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ }
+
+ part{ name, "seq_text_content";
+ type, TEXT;
+ scale: 1;
+ description {
+ state, "default" 0.0;
+ align: 0.5 0.5;
+ rel1 { relative: 0.0 0.0; to: "seq_text";}
+ rel2 { relative: 1.0 1.0; to: "seq_text";}
+ color, 255 255 255 255;
+
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: RICH_INFO_SEQ_TEXT_SIZE;
+ align: 0.5 0.5;
+ }
+ }
+ }
+ }
+
+ programs {
+ program { name: "show_text";
+ signal: "show";
+ source: "seq_text";
+ action: STATE_SET "show" 0.0;
+ target: "seq_text";
+ }
+ program { name: "hide_text";
+ signal: "hide";
+ source: "seq_text";
+ action: STATE_SET "default" 0.0;
+ target: "seq_text";
+ }
+ }
+}
+
+group{
+ name: "base_box_no_xml";
+
+ parts{
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: 0 0 0 0;
+ }
+ }
+
+ part {
+ name: "find_tag_bt";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 0 1;
+ align: 0 0;
+ rel1 { relative: 0.0 0.0; offset:0 0; to: "bg";}
+ rel2 { relative: 1.0 (RICH_INFO_NO_XML_FIND_TAG_HEIGHT/RICH_INFO_HEIGHT); offset:0 0; to: "bg";}
+ }
+ }
+
+ part{name,"media_content";
+ type,SWALLOW;
+ scale:1;
+ mouse_events: 0;
+ description{
+ state, "default" 0.0;
+ rel1 { relative: 0.0 1.0; offset: 0 0; to, "find_tag_bt"; }
+ rel2 { relative: 1.0 1.0; offset: 0 0; to, "bg"; }
+ align: 0 0;
+ fixed: 0 0;
+ }
+ }
+
+ part{name,"no_sim_media_content";
+ type,SWALLOW;
+ scale:1;
+ mouse_events: 0;
+ description{
+ state, "default" 0.0;
+ rel1 { relative: 0.0 0.0; offset: 0 0; to, "bg"; }
+ rel2 { relative: 1.0 1.0; offset: 0 0; to, "bg"; }
+ align: 0 0;
+ fixed: 0 0;
+ }
+ }
+ }
+}
+
+/******************for media info detail view start****************************************/
+group{
+ name: "mi_base_box_detail";
+ parts{
+ part { name: "bg";
+ type : RECT;
+ scale: 1;
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ fixed: 1 0;
+ rel1 { relative: 0.0 0.0; }
+ rel2 { relative: 1.0 1.0; }
+ color: MP_INFO_BG_COLOR
+ }
+ }
+
+ part { name: "detail_event_box";
+ type : SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 { relative: 0.0 0.0; to, "bg"; }
+ rel2 { relative: 1.0 1.0; to, "bg"; }
+ }
+ }
+
+ part{ name, "title";
+ type, TEXT;
+ scale: 1;
+ mouse_events: 0;
+ description {
+ state, "default" 0.0;
+ fixed: 1 1;
+ align: 0 0;
+ rel1 { relative: 0 0; offset: 0 0; to: "bg";}
+ rel2 { relative: 1 (RICH_INFO_BASE_BOX_DETAIL_TITLE/RICH_INFO_HEIGHT); offset: 0 0; to: "bg";}
+ color, TITLE_TEXT_01_COLOR;
+
+ text {
+ font: FONT_STYLE_MEDIUM;
+ size: TITLE_TEXT_01_SIZE;
+ align: 0 0.5;
+ text: "Media info";
+ }
+ }
+ }
+
+ part{name,"mi_content";
+ type,SWALLOW;
+ scale:1;
+ mouse_events: 0;
+ description{
+ state, "default" 0.0;
+ rel1 { relative: 0.0 1.0; offset: 0 0; to, "title"; }
+ rel2 { relative: 1.0 1.0; offset: 0 0; to, "bg"; }
+ align: 0 0;
+ fixed: 0 0;
+ }
+ }
+
+ part {
+ name: "mi_scroller";
+ type: SWALLOW;
+ mouse_events: 1;
+ scale: 1;
+ description { state: "default" 0.0;
+ visible: 1;
+ align: 0 0;
+ rel1 { relative: 0.0 1.0; offset: 0 0; to, "title"; }
+ rel2 { relative: 1.0 1.0; offset: 0 0; to, "bg"; }
+ }
+ }
+ }
+}
+/******************for media info detail view end****************************************/
+
+
diff --git a/layout/mp-selection-info.edc b/layout/mp-selection-info.edc
new file mode 100755
index 0000000..92a04de
--- /dev/null
+++ b/layout/mp-selection-info.edc
@@ -0,0 +1,89 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+#define SELECTION_INFO_BACKGROUND_COLOR_INC 69 90 131 255
+#define SELECTION_INFO_TEXT_COLOR_INC 255 255 255 255
+
+#define SELECTION_INFO_MIN_VER_W_INC 720
+#define SELECTION_INFO_MIN_HORZ_W_INC 1280
+#define SELECTION_INFO_VER_PADDING_INC 48
+#define SELECTION_INFO_LEFT_PADDING_INC 16
+#define SELECTION_INFO_TEXT_FONT_SIZE_INC 32
+#define SELECTION_INFO_MIN_VER_BOTTOM_64_H_INC 150
+#define SELECTION_INFO_MIN_VER_BOTTOM_86_H_INC 186
+
+group { name: "elm/standard/selectioninfo/music/vertical/bottom_64";
+ parts {
+ part {
+ name: "bg";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ scale : 1;
+ description {
+ state: "default" 0.0;
+ min: SELECTION_INFO_MIN_VER_W_INC SELECTION_INFO_MIN_VER_BOTTOM_64_H_INC;
+ fixed: 1 1;
+ align: 0.5 1.0;
+ rel1.relative: 0.5 1.0;
+ rel2.relative: 0.5 1.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "base";
+ type: RECT;
+ mouse_events: 1;
+ scale : 1;
+ description {
+ state: "default" 0.0;
+ min: 0 SELECTION_INFO_VER_PADDING_INC;
+ fixed: 0 1;
+ align: 0.5 0.0;
+ rel1 { relative: 0.0 0.0; to: "bg"; }
+ rel2 { relative: 1.0 0.32; to: "bg"; }
+ color: SELECTION_INFO_BACKGROUND_COLOR_INC;
+ }
+ }
+ part {
+ name: "elm.text";
+ type: TEXT;
+ mouse_events: 0;
+ scale: 1;
+ description {
+ state: "default" 0.0;
+ align: 0.5 0.0;
+ rel1 { to: "base"; }
+ rel2 { to: "base"; }
+ color: SELECTION_INFO_TEXT_COLOR_INC;
+ text {
+ font: "SLP";
+ size: SELECTION_INFO_TEXT_FONT_SIZE_INC;
+ text: "";
+ }
+ }
+ }
+ }
+ programs {
+ program {
+ name: "clicked";
+ signal: "mouse,clicked,1";
+ source: "base";
+ action: SIGNAL_EMIT "elm,action,click" "";
+ }
+ }
+}
+
diff --git a/layout/mp-toolbar.edc b/layout/mp-toolbar.edc
new file mode 100755
index 0000000..3b6aabc
--- /dev/null
+++ b/layout/mp-toolbar.edc
@@ -0,0 +1,1730 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_TEXT_SIZE_INC 28
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_TEXTBLOCK_COLOR_INC "#f9f9f9"
+#define BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC 56 56
+#define BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC 249 249 249 255
+#define BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC 249 249 249 255
+
+#define ITEM_STATE_ENABLED 0
+#define ITEM_STATE_DISABLED 1
+
+group { name: "elm/toolbar/base/music/default";
+ images {
+ image: "00_winset_control_toolbar_bg.png" COMP;
+ }
+ parts {
+ part { name: "base";
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ image.normal: "00_winset_control_toolbar_bg.png";
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "base";
+ offset: 2 2;
+ }
+ rel2 {
+ to: "base";
+ offset: -3 -3;
+ }
+ }
+ }
+ part { name: "elm.swallow.content";
+ clip_to: "clipper";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.to: "clipper";
+ rel2.to: "clipper";
+ }
+ }
+ part { name: "event";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/item/music/default";
+ images {
+ image: "T02_toolbar_press.png" COMP;
+ }
+ styles{
+ style { name: "toolbar_style";
+ base: "font=SLP:style=Medium font_size="BUTTON_CONTROLBAR_ITEM_BUTTON_TEXT_SIZE_INC" align=center color="BUTTON_CONTROLBAR_ITEM_BUTTON_TEXTBLOCK_COLOR_INC" wrap=mixed ellipsis=1";
+ tag: "br" "\n";
+ tag: "ps" "ps";
+ tag: "hilight" "+ font=SLP:style=Bold";
+ tag: "b" "+ font=SLP:style=Bold";
+ tag: "tab" "\t";
+ }
+ }
+
+ data.item: "transition_animation_on" "1";
+ script {
+ public item_state = ITEM_STATE_ENABLED;
+ }
+ parts {
+ part { name: "bg";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ image {
+ normal: "T02_toolbar_press.png";
+ border: 3 3 3 3;
+ }
+ image.middle: SOLID;
+ fill.smooth: 0;
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "padding_left_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel2.relative: 0.0 0.0;
+ min: 10 8;
+ fixed: 1 1;
+ visible: 1;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "padding_right_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 1.0 1.0;
+ min: 10 5;
+ fixed: 1 1;
+ visible: 1;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 0;
+ fixed: 0 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_left_top";
+ }
+ align: 0.5 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "visible" 0.0;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ fixed: 0 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_left_top";
+ }
+ align: 0.5 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_after_icon";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.0 0.0;
+ rel1 {
+ relative: 0.0 1.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 0 1;
+ min: 0 0;
+ color: 0 0 0 0;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_before_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.5 1.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "elm.text";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_right_bottom";
+ to_y: "elm.text";
+ }
+ fixed: 0 1;
+ min: 0 0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "elm.swallow.icon";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "elm.icon.clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.5 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_left_top";
+ }
+ fixed: 0 1;
+ }
+ description { state: "visible" 0.0;
+ fixed: 0 1;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_before_text";
+ }
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ }
+ description { state: "icononly" 0.0;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ }
+ }
+ part { name: "elm.swallow.icon_new";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "elm.icon_new.clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.5 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_left_top";
+ }
+ fixed: 0 1;
+ }
+ description { state: "visible" 0.0;
+ fixed: 0 1;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_before_text";
+ }
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ }
+ description { state: "icononly" 0.0;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "elm.text.clipper";
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_left_top";
+ to_y: "padding_after_icon";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+ fixed: 1 1;
+ text {
+ style: "toolbar_style";
+ min: 0 1;
+ max: 0 1;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ }
+ part { name: "elm.text_new";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "elm.text_new.clipper";
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_left_top";
+ to_y: "padding_after_icon";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+ fixed: 1 1;
+ text {
+ style: "toolbar_style";
+ min: 0 1;
+ max: 0 1;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ }
+ part { name: "elm.text.clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "animation" 0.0;
+ color: 255 255 255 0;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 153;
+ }
+ }
+ part { name: "elm.text_new.clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 0;
+ }
+ description { state: "animation" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 153;
+ }
+ }
+ part { name: "elm.icon.clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "animation" 0.0;
+ color: 255 255 255 0;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 153;
+ }
+ }
+ part { name: "elm.icon_new.clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 0;
+ }
+ description { state: "animation" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 153;
+ }
+ }
+ part { name: "event";
+ type: RECT;
+ mouse_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "event2";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ }
+ programs {
+ program { name: "pressed";
+ signal: "mouse,down,1";
+ source: "event";
+ script {
+ if (get_int(item_state) != ITEM_STATE_DISABLED)
+ set_state(PART:"bg", "selected", 0.0);
+ }
+ transition: LINEAR 0.2;
+ }
+ program { name: "unpressed";
+ signal: "mouse,up,1";
+ source: "event2";
+ action: STATE_SET "default" 0.0;
+ target: "bg";
+ transition: LINEAR 0.1;
+ }
+ program { name: "go";
+ signal: "mouse,up,1";
+ source: "event";
+ action: SIGNAL_EMIT "elm,action,click" "elm";
+ }
+ program { name: "mouse,in";
+ signal: "mouse,in";
+ source: "event";
+ action: SIGNAL_EMIT "elm,mouse,in" "elm";
+ }
+ program { name: "mouse,out";
+ signal: "mouse,out";
+ source: "event";
+ action: SIGNAL_EMIT "elm,mouse,out" "elm";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ script {
+ set_int(item_state, ITEM_STATE_DISABLED);
+ set_state(PART:"bg", "disabled", 0.0);
+ set_state(PART:"elm.text.clipper", "disabled", 0.0);
+ set_state(PART:"elm.icon.clipper", "disabled", 0.0);
+ run_program(PROGRAM:"label_set,animation,done");
+ run_program(PROGRAM:"icon_set,animation,done");
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ script {
+ set_int(item_state, ITEM_STATE_ENABLED);
+ set_state(PART:"bg", "default", 0.0);
+ set_state(PART:"elm.text.clipper", "default", 0.0);
+ set_state(PART:"elm.icon.clipper", "default", 0.0);
+ run_program(PROGRAM:"label_set,animation,done");
+ run_program(PROGRAM:"icon_set,animation,done");
+ }
+ }
+ program { name: "label_set,animation,forward";
+ signal: "elm,state,label_set,forward";
+ source: "elm";
+ after: "label_set,animation";
+ }
+ program { name: "label_set,animation,backward";
+ signal: "elm,state,label_set,backward";
+ source: "elm";
+ after: "label_set,animation";
+ }
+ program { name: "label_set,animation";
+ signal: "elm,state,label_set";
+ source: "elm";
+ action: STATE_SET "animation" 0.0;
+ target: "elm.text.clipper";
+ target: "elm.text_new.clipper";
+ transition: LINEAR 0.2;
+ after: "label_set,animation,done";
+ }
+ program { name: "label_set,animation,done";
+ action: SIGNAL_EMIT "elm,state,label_set,done" "elm";
+ }
+ program { name: "label,reset";
+ signal: "elm,state,label,reset";
+ source: "elm";
+ script {
+ set_state(PART:"elm.text_new.clipper", "default", 0.0);
+ if (get_int(item_state) != ITEM_STATE_DISABLED)
+ set_state(PART:"elm.text.clipper", "default", 0.0);
+ else
+ set_state(PART:"elm.text.clipper", "disabled", 0.0);
+ }
+ }
+ program { name: "icon_set,animation,forward";
+ signal: "elm,state,icon_set,forward";
+ source: "elm";
+ after: "icon_set,animation";
+ }
+ program { name: "icon_set,animation,backward";
+ signal: "elm,state,icon_set,backward";
+ source: "elm";
+ after: "icon_set,animation";
+ }
+ program { name: "icon_set,animation";
+ signal: "elm,state,icon_set";
+ source: "elm";
+ action: STATE_SET "animation" 0.0;
+ target: "elm.icon.clipper";
+ target: "elm.icon_new.clipper";
+ transition: LINEAR 0.2;
+ after: "icon_set,animation,done";
+ }
+ program { name: "icon_set,animation,done";
+ action: SIGNAL_EMIT "elm,state,icon_set,done" "elm";
+ }
+ program { name: "icon,reset";
+ signal: "elm,state,icon,reset";
+ source: "elm";
+ script {
+ set_state(PART:"elm.icon_new.clipper", "default", 0.0);
+ if (get_int(item_state) != ITEM_STATE_DISABLED)
+ set_state(PART:"elm.icon.clipper", "default", 0.0);
+ else
+ set_state(PART:"elm.icon.clipper", "disabled", 0.0);
+ }
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.icon", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.icon", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ }
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.icon", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.icon", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ }
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/item/music/item_horizontal";
+ inherit: "elm/toolbar/item/music/default";
+ script {
+ public item_state = ITEM_STATE_ENABLED;
+ }
+ parts {
+ part { name: "icon_rect";
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ }
+ part { name: "padding_after_icon";
+ description { state: "default" 0.0; //when only icon or no icon is there
+ rel1.relative: 1.0 0.0;
+ fixed: 1 1;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: 6 0;
+ }
+ }
+ part { name: "padding_before_text";
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ to_x: "elm.text";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ min: 6 0;
+ }
+ }
+ part { name: "elm.swallow.icon";
+ description { state: "default" 0.0;
+ align: 0.0 0.5;
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "padding_before_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_before_text";
+ to_y: "padding_right_bottom";
+ }
+ aspect_preference: VERTICAL;
+ }
+ description { state: "icononly" 0.0;
+ aspect_preference: VERTICAL;
+ }
+ }
+ part { name: "elm.swallow.icon_new";
+ description { state: "default" 0.0;
+ align: 0.0 0.5;
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "padding_before_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_before_text";
+ to_y: "padding_right_bottom";
+ }
+ aspect_preference: VERTICAL;
+ }
+ description { state: "icononly" 0.0;
+ aspect_preference: VERTICAL;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_after_icon";
+ to_y: "padding_left_top";
+ }
+ text {
+ style: "toolbar_style";
+ min: 1 0;
+ max: 1 0;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ }
+ part { name: "elm.text_new";
+ type: TEXTBLOCK;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_after_icon";
+ to_y: "padding_left_top";
+ }
+ text {
+ style: "toolbar_style";
+ min: 1 0;
+ max: 1 0;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/separator/music/default";
+ images {
+ image: "separator_v.png" COMP;
+ }
+ parts {
+ part { name: "separator"; // separator group
+ description { state: "default" 0.0;
+ min: 2 2;
+ max: 2 9999;
+ rel1.offset: 4 4;
+ rel2.offset: -5 -5;
+ image {
+ normal: "separator_v.png";
+ }
+ fill {
+ smooth: 0;
+ }
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/object/music/default";
+ parts {
+ part { name: "elm.swallow.object"; // object group
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/base/music/tabbar";
+ images {
+ image: "T02_navigation_tabbar_bg.png" COMP;
+ }
+
+ parts {
+ part { name: "base";
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ image.normal: "T02_navigation_tabbar_bg.png";
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "base";
+ offset: 2 2;
+ }
+ rel2 {
+ to: "base";
+ offset: -3 -3;
+ }
+ }
+ }
+ part { name: "elm.swallow.content";
+ clip_to: "clipper";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.to: "clipper";
+ rel2.to: "clipper";
+ }
+ }
+ part { name: "event";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/item/music/tabbar";
+ alias: "elm/toolbar/item/music/tabbar/item_horizontal";
+ images {
+ image: "T02_navigation_tabbar_focus.png" COMP;
+ }
+
+ data.item: "transition_animation_on" "1";
+ script {
+ public item_state = ITEM_STATE_ENABLED;
+ }
+ parts {
+ part { name: "bg";
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ image {
+ normal: "T02_navigation_tabbar_focus.png";
+ }
+ image.middle: SOLID;
+ fill.smooth: 0;
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ inherit: "default" 0.0;
+ visible: 0;
+ color: 255 255 255 0;
+ }
+ }
+ part { name: "padding_left_top";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 0.0 0.0;
+ rel2.relative: 0.0 0.0;
+ min: 10 8;
+ fixed: 1 1;
+ visible: 1;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "padding_right_bottom";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ align: 1.0 1.0;
+ rel1.relative: 1.0 1.0;
+ min: 10 5;
+ fixed: 1 1;
+ visible: 1;
+ color: 0 0 0 0;
+ }
+ }
+ part {
+ name: "icon_rect";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0;
+ min: 0 0;
+ fixed: 0 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_left_top";
+ }
+ align: 0.5 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "visible" 0.0;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ fixed: 0 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_left_top";
+ }
+ align: 0.5 0.0;
+ color: 0 0 0 0;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_after_icon";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.0 0.0;
+ rel1 {
+ relative: 0.0 1.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 0 1;
+ min: 0 0;
+ color: 0 0 0 0;
+ }
+ description { state: "visible" 0.0;
+ align: 0.0 0.0;
+ rel1 {
+ relative: 0.0 1.0;
+ to: "icon_rect";
+ }
+ rel2.to: "icon_rect";
+ fixed: 0 1;
+ min: 0 0;
+ color: 0 0 0 0;
+ }
+ description { state: "icononly" 0.0;
+ inherit: "default" 0.0;
+ }
+ }
+ part { name: "padding_before_text";
+ type: RECT;
+ scale: 1;
+ mouse_events: 0;
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 0.5 1.0;
+ rel1 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "elm.text";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_right_bottom";
+ to_y: "elm.text";
+ }
+ fixed: 0 1;
+ min: 0 0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "elm.swallow.icon";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "elm.icon.clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.5 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_left_top";
+ }
+ fixed: 0 1;
+ }
+ description { state: "visible" 0.0;
+ fixed: 0 1;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_before_text";
+ }
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ }
+ description { state: "icononly" 0.0;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ }
+ }
+ part { name: "elm.swallow.icon_new";
+ type: SWALLOW;
+ scale: 1;
+ clip_to: "elm.icon_new.clipper";
+ description { state: "default" 0.0;
+ visible: 0;
+ align: 0.5 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 1.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_left_top";
+ }
+ fixed: 0 1;
+ }
+ description { state: "visible" 0.0;
+ fixed: 0 1;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_right_bottom";
+ to_y: "padding_before_text";
+ }
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ }
+ description { state: "icononly" 0.0;
+ min: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ max: BUTTON_CONTROLBAR_ITEM_BUTTON_ICON_SIZE_INC;
+ rel1 {
+ relative: 1.0 1.0;
+ to: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ aspect: 1.0 1.0;
+ aspect_preference: HORIZONTAL;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "elm.text.clipper";
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_left_top";
+ to_y: "padding_after_icon";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+ fixed: 1 1;
+ text {
+ style: "toolbar_style";
+ min: 0 1;
+ max: 0 1;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ }
+ part { name: "elm.text_new";
+ type: TEXTBLOCK;
+ mouse_events: 0;
+ scale: 1;
+ clip_to: "elm.text_new.clipper";
+ description { state: "default" 0.0;
+ visible: 1;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_left_top";
+ to_y: "padding_after_icon";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to: "padding_right_bottom";
+ }
+ color: BUTTON_NAVIFRAME_DEFAULT_TEXT_COLOR_INC;
+ fixed: 1 1;
+ text {
+ style: "toolbar_style";
+ min: 0 1;
+ max: 0 1;
+ }
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ }
+ part { name: "elm.text.clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "animation" 0.0;
+ color: 255 255 255 0;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 153;
+ }
+ }
+ part { name: "elm.text_new.clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 0;
+ }
+ description { state: "animation" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 153;
+ }
+ }
+ part { name: "elm.icon.clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "animation" 0.0;
+ color: 255 255 255 0;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 153;
+ }
+ }
+ part { name: "elm.icon_new.clipper";
+ type: RECT;
+ description { state: "default" 0.0;
+ color: 255 255 255 0;
+ }
+ description { state: "animation" 0.0;
+ color: 255 255 255 255;
+ }
+ description { state: "disabled" 0.0;
+ color: 255 255 255 153;
+ }
+ }
+ part { name: "event";
+ type: RECT;
+ mouse_events: 1;
+ ignore_flags: ON_HOLD;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ }
+ programs {
+ program { name: "go_active";
+ signal: "elm,state,selected";
+ source: "elm";
+ action: STATE_SET "selected" 0.0;
+ target: "bg";
+ transition: LINEAR 0.2;
+ }
+ program { name: "go_passive";
+ signal: "elm,state,unselected";
+ source: "elm";
+ action: STATE_SET "default" 0.0;
+ target: "bg";
+ transition: LINEAR 0.1;
+ }/*
+ program { name: "pressed";
+ signal: "mouse,down,1";
+ source: "event";
+ action: STATE_SET "selected" 0.0;
+ target: "bg";
+ target: "elm.text";
+ target: "elm.text_new";
+ transition: LINEAR 0.2;
+ }
+ program { name: "unpressed";
+ signal: "mouse,up,1";
+ source: "event";
+ action: STATE_SET "default" 0.0;
+ target: "bg";
+ target: "elm.text";
+ target: "elm.text_new";
+ transition: LINEAR 0.1;
+ }*/
+ program { name: "go";
+ signal: "mouse,up,1";
+ source: "event";
+ action: SIGNAL_EMIT "elm,action,click" "elm";
+ }
+ program { name: "mouse,in";
+ signal: "mouse,in";
+ source: "event";
+ action: SIGNAL_EMIT "elm,mouse,in" "elm";
+ }
+ program { name: "mouse,out";
+ signal: "mouse,out";
+ source: "event";
+ action: SIGNAL_EMIT "elm,mouse,out" "elm";
+ }
+ program { name: "disable";
+ signal: "elm,state,disabled";
+ source: "elm";
+ script {
+ set_int(item_state, ITEM_STATE_DISABLED);
+ set_state(PART:"bg", "disabled", 0.0);
+ set_state(PART:"elm.text.clipper", "disabled", 0.0);
+ set_state(PART:"elm.icon.clipper", "disabled", 0.0);
+ run_program(PROGRAM:"label_set,animation,done");
+ run_program(PROGRAM:"icon_set,animation,done");
+ }
+ }
+ program { name: "enable";
+ signal: "elm,state,enabled";
+ source: "elm";
+ script {
+ set_int(item_state, ITEM_STATE_ENABLED);
+ set_state(PART:"bg", "default", 0.0);
+ set_state(PART:"elm.text.clipper", "default", 0.0);
+ set_state(PART:"elm.icon.clipper", "default", 0.0);
+ run_program(PROGRAM:"label_set,animation,done");
+ run_program(PROGRAM:"icon_set,animation,done");
+ }
+ }
+ program { name: "label_set,animation,forward";
+ signal: "elm,state,label_set,forward";
+ source: "elm";
+ after: "label_set,animation";
+ }
+ program { name: "label_set,animation,backward";
+ signal: "elm,state,label_set,backward";
+ source: "elm";
+ after: "label_set,animation";
+ }
+ program { name: "label_set,animation";
+ signal: "elm,state,label_set";
+ source: "elm";
+ action: STATE_SET "animation" 0.0;
+ target: "elm.text.clipper";
+ target: "elm.text_new.clipper";
+ transition: LINEAR 0.2;
+ after: "label_set,animation,done";
+ }
+ program { name: "label_set,animation,done";
+ action: SIGNAL_EMIT "elm,state,label_set,done" "elm";
+ }
+ program { name: "label,reset";
+ signal: "elm,state,label,reset";
+ source: "elm";
+ script {
+ set_state(PART:"elm.text_new.clipper", "default", 0.0);
+ if (get_int(item_state) != ITEM_STATE_DISABLED)
+ set_state(PART:"elm.text.clipper", "default", 0.0);
+ else
+ set_state(PART:"elm.text.clipper", "disabled", 0.0);
+ }
+ }
+ program { name: "icon_set,animation,forward";
+ signal: "elm,state,icon_set,forward";
+ source: "elm";
+ after: "icon_set,animation";
+ }
+ program { name: "icon_set,animation,backward";
+ signal: "elm,state,icon_set,backward";
+ source: "elm";
+ after: "icon_set,animation";
+ }
+ program { name: "icon_set,animation";
+ signal: "elm,state,icon_set";
+ source: "elm";
+ action: STATE_SET "animation" 0.0;
+ target: "elm.icon.clipper";
+ target: "elm.icon_new.clipper";
+ transition: LINEAR 0.2;
+ after: "icon_set,animation,done";
+ }
+ program { name: "icon_set,animation,done";
+ action: SIGNAL_EMIT "elm,state,icon_set,done" "elm";
+ }
+ program { name: "icon,reset";
+ signal: "elm,state,icon,reset";
+ source: "elm";
+ script {
+ set_state(PART:"elm.icon_new.clipper", "default", 0.0);
+ if (get_int(item_state) != ITEM_STATE_DISABLED)
+ set_state(PART:"elm.icon.clipper", "default", 0.0);
+ else
+ set_state(PART:"elm.icon.clipper", "disabled", 0.0);
+ }
+ }
+ program { name: "text_show";
+ signal: "elm,state,text,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.icon", st, 30, vl);
+ if (!strcmp(st, "icononly"))
+ {
+ set_state(PART:"elm.swallow.icon", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ }
+ set_state(PART:"elm.text", "visible", 0.0);
+ }
+ }
+ program { name: "text_hide";
+ signal: "elm,state,text,hidden";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.swallow.icon", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ }
+ set_state(PART:"elm.text", "default", 0.0);
+ }
+ }
+ program { name: "icon_show";
+ signal: "elm,state,icon,visible";
+ source: "elm";
+ script {
+ new st[31];
+ new Float:vl;
+ get_state(PART:"elm.text", st, 30, vl);
+ if (!strcmp(st, "visible"))
+ {
+ set_state(PART:"elm.swallow.icon", "visible", 0.0);
+ set_state(PART:"icon_rect", "visible", 0.0);
+ set_state(PART:"padding_after_icon", "visible", 0.0);
+ }
+ else
+ {
+ set_state(PART:"elm.swallow.icon", "icononly", 0.0);
+ set_state(PART:"icon_rect", "icononly", 0.0);
+ set_state(PART:"padding_after_icon", "icononly", 0.0);
+ }
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/item/music/tabbar/item_horizontal";
+ inherit: "elm/toolbar/item/music/tabbar";
+ script {
+ public item_state = ITEM_STATE_ENABLED;
+ }
+ parts {
+ part { name: "icon_rect";
+ description { state: "default" 0.0;
+ fixed: 1 0;
+ align: 0.0 0.5;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ align: 0.0 0.5;
+ }
+ }
+ part { name: "padding_after_icon";
+ description { state: "default" 0.0; //when only icon or no icon is there
+ rel1.relative: 1.0 0.0;
+ fixed: 1 1;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ min: 6 0;
+ }
+ }
+ part { name: "padding_before_text";
+ description { state: "default" 0.0; //when only icon or no icon is there
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "elm.text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ to_x: "elm.text";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ min: 6 0;
+ }
+ }
+ part { name: "elm.swallow.icon";
+ description { state: "default" 0.0;
+ align: 0.0 0.5;
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "padding_before_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_before_text";
+ to_y: "padding_right_bottom";
+ }
+ aspect_preference: VERTICAL;
+ }
+ description { state: "icononly" 0.0;
+ aspect_preference: VERTICAL;
+ }
+ }
+ part { name: "elm.swallow.icon_new";
+ description { state: "default" 0.0;
+ align: 0.0 0.5;
+ rel2 {
+ relative: 1.0 0.0;
+ to_x: "padding_left_top";
+ to_y: "padding_right_bottom";
+ }
+ fixed: 1 0;
+ }
+ description { state: "visible" 0.0;
+ fixed: 1 0;
+ align: 1.0 0.5;
+ rel1 {
+ relative: 0.0 1.0;
+ to_x: "padding_before_text";
+ to_y: "padding_left_top";
+ }
+ rel2 {
+ relative: 0.0 0.0;
+ to_x: "padding_before_text";
+ to_y: "padding_right_bottom";
+ }
+ aspect_preference: VERTICAL;
+ }
+ description { state: "icononly" 0.0;
+ aspect_preference: VERTICAL;
+ }
+ }
+ part { name: "elm.text";
+ type: TEXTBLOCK;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_after_icon";
+ to_y: "padding_left_top";
+ }
+ text {
+ style: "toolbar_style";
+ min: 1 0;
+ max: 1 0;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ }
+ part { name: "elm.text_new";
+ type: TEXTBLOCK;
+ description { state: "default" 0.0;
+ rel1 {
+ relative: 1.0 1.0;
+ to_x: "padding_after_icon";
+ to_y: "padding_left_top";
+ }
+ text {
+ style: "toolbar_style";
+ min: 1 0;
+ max: 1 0;
+ }
+ }
+ description { state: "selected" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "visible" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ }
+ description { state: "clicked" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ description { state: "focused" 0.0;
+ inherit: "default" 0.0;
+ visible: 1;
+ color: BUTTON_NAVIFRAME_FOCUSED_TEXT_COLOR_INC;
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/base/music/naviframe";
+ parts {
+ part { name: "base";
+ mouse_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ part { name: "clipper";
+ type: RECT;
+ mouse_events: 0;
+ description {
+ state: "default" 0.0;
+ rel1 {
+ to: "base";
+ offset: 2 2;
+ }
+ rel2 {
+ to: "base";
+ offset: -3 -3;
+ }
+ }
+ }
+ part { name: "elm.swallow.content";
+ clip_to: "clipper";
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.to: "clipper";
+ rel2.to: "clipper";
+ }
+ }
+ part { name: "event";
+ type: RECT;
+ mouse_events: 1;
+ repeat_events: 1;
+ description { state: "default" 0.0;
+ color: 0 0 0 0;
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/object/music/naviframe";
+ parts {
+ part { name: "elm.swallow.object"; // object group
+ type: SWALLOW;
+ description {
+ state: "default" 0.0;
+ rel1.offset: 5 0;
+ rel2.offset: -6 -1;
+ }
+ }
+ }
+}
+
+group { name: "elm/toolbar/item/music/naviframe";
+ inherit: "elm/toolbar/item/music/default";
+ images {
+ image: "00_winset_toolbar_press.png" COMP;
+ }
+
+ script {
+ public item_state = ITEM_STATE_ENABLED;
+ }
+}
+
+
diff --git a/layout/mp_genlist_define.edc b/layout/mp_genlist_define.edc
new file mode 100755
index 0000000..70cb48f
--- /dev/null
+++ b/layout/mp_genlist_define.edc
@@ -0,0 +1,131 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+
+#define GENLIST_HEIGHT_1_INC 1
+#define GENLIST_HEIGHT_16_INC 16
+#define GENLIST_HEIGHT_33_INC 33
+#define GENLIST_HEIGHT_49_INC 49
+#define GENLIST_HEIGHT_62_INC 62
+#define GENLIST_HEIGHT_65_INC 65
+#define GENLIST_HEIGHT_73_INC 73
+#define GENLIST_HEIGHT_77_INC 77
+#define GENLIST_HEIGHT_89_INC 89
+#define GENLIST_HEIGHT_93_INC 93
+#define GENLIST_HEIGHT_97_INC 97
+#define GENLIST_HEIGHT_113_INC 113
+#define GENLIST_HEIGHT_129_INC 129
+#define GENLIST_HEIGHT_177_INC 177
+#define GENLIST_HEIGHT_182_INC 182
+#define GENLIST_HEIGHT_190_INC 190
+#define GENLIST_HEIGHT_207_INC 207
+#define GENLIST_HEIGHT_260_INC 260
+#define GENLIST_HEIGHT_291_INC 291
+#define GENLIST_HEIGHT_454_INC 454
+#define GENLIST_HEIGHT_566_INC 566
+
+#define GENLIST_PADDING_4_INC 4
+#define GENLIST_PADDING_5_INC 5
+#define GENLIST_PADDING_6_INC 6
+#define GENLIST_PADDING_8_INC 8
+#define GENLIST_PADDING_10_INC 10
+#define GENLIST_PADDING_11_INC 11
+#define GENLIST_PADDING_12_INC 12
+#define GENLIST_PADDING_13_INC 13
+#define GENLIST_PADDING_14_INC 14
+#define GENLIST_PADDING_16_INC 16
+#define GENLIST_PADDING_18_INC 18
+#define GENLIST_PADDING_21_INC 21
+#define GENLIST_PADDING_22_INC 22
+#define GENLIST_PADDING_24_INC 24
+#define GENLIST_PADDING_27_INC 27
+#define GENLIST_PADDING_32_INC 32
+#define GENLIST_PADDING_34_INC 34
+#define GENLIST_PADDING_46_INC 46
+#define GENLIST_PADDING_48_INC 48
+#define GENLIST_PADDING_64_INC 64
+#define GENLIST_PADDING_74_INC 74
+#define GENLIST_PADDING_88_INC 88
+#define GENLIST_PADDING_124_INC 124
+
+#define GENLIST_FONT_27_INC 27
+#define GENLIST_FONT_28_INC 28
+#define GENLIST_FONT_30_INC 30
+#define GENLIST_FONT_32_INC 32
+#define GENLIST_FONT_STYLE_32_INC "32"
+#define GENLIST_FONT_36_INC 36
+#define GENLIST_FONT_STYLE_36_INC "36"
+#define GENLIST_FONT_40_INC 40
+#define GENLIST_FONT_STYLE_40_INC "40"
+#define GENLIST_FONT_42_INC 42
+#define GENLIST_FONT_STYLE_42_INC "42"
+#define GENLIST_FONT_44_INC 44
+#define GENLIST_FONT_STYLE_44_INC "44"
+#define GENLIST_FONT_48_INC 48
+#define GENLIST_FONT_STYLE_48_INC "48"
+
+#define GENLIST_SIZE_6_INC 6
+#define GENLIST_SIZE_8_INC 8
+#define GENLIST_SIZE_10_INC 10
+#define GENLIST_SIZE_13_INC 13
+#define GENLIST_SIZE_16_INC 16
+#define GENLIST_SIZE_18_INC 18
+#define GENLIST_SIZE_21_INC 21
+#define GENLIST_SIZE_32_INC 32
+#define GENLIST_SIZE_35_INC 35
+#define GENLIST_SIZE_38_INC 38
+#define GENLIST_SIZE_40_INC 40
+#define GENLIST_SIZE_42_INC 42
+#define GENLIST_SIZE_45_INC 45
+#define GENLIST_SIZE_48_INC 48
+#define GENLIST_SIZE_54_INC 54
+#define GENLIST_SIZE_56_INC 56
+#define GENLIST_SIZE_57_INC 57
+#define GENLIST_SIZE_61_INC 61
+#define GENLIST_SIZE_SLIDE_60_INC 60
+#define GENLIST_SIZE_64_INC 64
+#define GENLIST_SIZE_80_INC 80
+#define GENLIST_SIZE_90_INC 90
+#define GENLIST_SIZE_96_INC 96
+#define GENLIST_SIZE_112_INC 112
+#define GENLIST_SIZE_116_INC 116
+#define GENLIST_SIZE_128_INC 128
+#define GENLIST_SIZE_133_INC 133
+#define GENLIST_SIZE_141_INC 141
+#define GENLIST_SIZE_144_INC 144
+#define GENLIST_SIZE_154_INC 154
+#define GENLIST_SIZE_160_INC 160
+#define GENLIST_SIZE_163_INC 163
+#define GENLIST_SIZE_168_INC 168
+#define GENLIST_SIZE_174_INC 174
+#define GENLIST_SIZE_SLIDE_165_INC 165
+#define GENLIST_SIZE_176_INC 176
+#define GENLIST_SIZE_177_INC 177
+#define GENLIST_SIZE_192_INC 192
+#define GENLIST_SIZE_195_INC 195
+#define GENLIST_SIZE_206_INC 206
+#define GENLIST_SIZE_234_INC 234
+#define GENLIST_SIZE_235_INC 235
+#define GENLIST_SIZE_SLIDE_220_INC 220
+#define GENLIST_SIZE_390_INC 390
+#define GENLIST_SIZE_448_INC 448
+#define GENLIST_SIZE_560_INC 560
+#define GENLIST_SIZE_576_INC 576
+#define GENLIST_SIZE_672_INC 672
+
+#define GENLIST_PART_LIST_PRESS_COLOR_INC 0 140 210 255
+#define GENLIST_PART_LIST_BG_COLOR_INC 0 0 0 255
+
diff --git a/layout/mp_genlist_macro.edc b/layout/mp_genlist_macro.edc
new file mode 100755
index 0000000..ae04a42
--- /dev/null
+++ b/layout/mp_genlist_macro.edc
@@ -0,0 +1,1030 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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.
+ */
+
+#define FONT_STYLE_ROMAN "SLP:style=Roman"
+#define FONT_STYLE_MEDIUM "SLP:style=Medium"
+#define FONT_STYLE_BOLD "SLP:style=Bold"
+
+#define GENLIST_PART_EXPANDABLE2_NOSHADOW_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: 230 228 215 255; \
+ } \
+ }
+
+#define GENLIST_PART_EXPANDABLE3_NOSHADOW_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: 213 212 195 255; \
+ } \
+ }
+
+#define GENLIST_PART_BG_EXPANDABLE_IMAGE \
+ part { name: "bg_image"; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ image { \
+ normal: "00_list_expandable_bg.png"; \
+ border: 0 0 12 6; \
+ border_scale: 1; \
+ } \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: "00_list_bar_press_1x80.png"; \
+ } \
+ }
+
+#define GENLIST_PART_BG_EXPANDABLE2_IMAGE \
+ part { name: "bg_image"; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ image { \
+ normal: "00_list_expandable_2_bg.png"; \
+ border: 0 0 12 6; \
+ border_scale: 1; \
+ } \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: "00_list_bar_press_1x80.png"; \
+ } \
+ }
+
+#define GENLIST_PART_BG_EXPANDABLE3_NOSHADOW_IMAGE \
+ part { name: "bg_image"; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ image { \
+ normal: "00_list_expandable_2_noshadow_bg.png"; \
+ border: 0 0 0 6; \
+ border_scale: 1; \
+ } \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ image.normal: "00_list_bar_press_1x80.png"; \
+ } \
+ }
+#define MP_GENLIST_BG_COLOR 37 37 37 255;
+#define GENLIST_PART_BASE( param_item_height ) \
+ part { name: "base"; \
+ type: RECT; \
+ repeat_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_item_height; \
+ color: MP_GENLIST_BG_COLOR;\
+ } \
+ }
+
+#define GENLIST_PART_BG_SELECTED_COLOR_INC 50 65 74 255
+#define GENLIST_PART_BG_UNSELECTED_COLOR_INC 0 0 0 0
+
+#define GENLIST_PART_BG_IMAGE \
+ part { name: "bg_image"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ color: GENLIST_PART_BG_UNSELECTED_COLOR_INC; \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ color: GENLIST_PART_BG_SELECTED_COLOR_INC; \
+ } \
+ }
+#define MP_BOTTOM_LINE_COLOR 82 82 82 255;
+#define GENLIST_PART_BOTTOM_LINE \
+ part { name: "bottom_line"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ min: 0 1; \
+ fixed: 0 1; \
+ visible: 1; \
+ color: MP_BOTTOM_LINE_COLOR; \
+ rel1 { \
+ relative: 0.0 1.0; \
+ offset: 0 -1; \
+ } \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_TOP( param_padding_size ) \
+ part { name: "elm.padding.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 1.0 0.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_TEXT_TOP( param_padding_size ) \
+ part { name: "elm.padding.text.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 1.0 0.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \
+ part { name: "elm.padding.bottom"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel1.relative: 0.0 1.0; \
+ align: 0.0 1.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_LEFT( param_padding_size ) \
+ part { name: "elm.padding.left"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_RIGHT( param_padding_size ) \
+ part { name: "elm.padding.right"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1.relative: 1.0 0.0; \
+ align: 1.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_LEFT_RENAME( param_padding_size ) \
+ part { name: "elm.padding.left.rename"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_RIGHT_RENAME( param_padding_size ) \
+ part { name: "elm.padding.right.rename"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1.relative: 1.0 0.0; \
+ align: 1.0 0.0; \
+ } \
+ }
+
+#define BEAT_GENLIST_PART_DISCLIP \
+ part { name: "disclip"; \
+ type: RECT; \
+ description { state: "default" 0.0; \
+ rel1.to: "base"; \
+ rel2.to: "base"; \
+ } \
+ description { state: "disabled" 0.0; \
+ inherit: "default" 0.0; \
+ color: 255 255 255 64; \
+ } \
+ }
+
+#define SWEEP_PROGRAMS \
+ program { name: "go_slide_right";\
+ signal: "elm,state,slide,right";\
+ source: "elm";\
+ action: STATE_SET "hide" 0.0;\
+ target: "slide_base";\
+ target: "base.disclip";\
+ after: "slide_right_step1";\
+ }\
+ program { name: "slide_right_step1";\
+ action: STATE_SET "hide" 0.1;\
+ target: "slide_base";\
+ target: "base.disclip";\
+ transition: LINEAR 0.3;\
+ after: "slide_right_step2";\
+ }\
+ program { name: "slide_right_step2";\
+ action: STATE_SET "hide" 0.2;\
+ target: "slide_base";\
+ target: "base.disclip";\
+ transition: LINEAR 0.3;\
+ after: "slide_right_step3";\
+ }\
+ program { name: "slide_right_step3";\
+ action: STATE_SET "hide" 0.3;\
+ target: "slide_base";\
+ target: "base.disclip";\
+ transition: LINEAR 0.3;\
+ after: "slide_right_step4";\
+ }\
+ program { name: "slide_right_step4";\
+ action: STATE_SET "repeat_events" 0.0;\
+ target: "elm.between.layer";\
+ }\
+ program { name: "go_slide_left";\
+ signal: "elm,state,slide,left";\
+ source: "elm";\
+ action: STATE_SET "hide" 0.3;\
+ target: "slide_base";\
+ target: "base.disclip";\
+ after: "slide_left_step1";\
+ }\
+ program { name: "slide_left_step1";\
+ action: STATE_SET "default" 0.0;\
+ target: "elm.between.layer";\
+ after: "slide_left_step2";\
+ }\
+ program { name: "slide_left_step2";\
+ action: STATE_SET "hide" 0.2;\
+ target: "slide_base";\
+ target: "base.disclip";\
+ transition: LINEAR 0.3;\
+ after: "slide_left_step3";\
+ }\
+ program { name: "slide_left_step3";\
+ action: STATE_SET "hide" 0.1;\
+ target: "slide_base";\
+ target: "base.disclip";\
+ transition: LINEAR 0.3;\
+ after: "slide_left_step4";\
+ }\
+ program { name: "slide_left_step4";\
+ action: STATE_SET "hide" 0.0;\
+ target: "slide_base";\
+ target: "base.disclip";\
+ transition: LINEAR 0.3;\
+ after: "slide_left_step5";\
+ }\
+ program { name: "slide_left_step5";\
+ action: STATE_SET "default" 0.0;\
+ target: "slide_base";\
+ transition: LINEAR 0.3;\
+ after: "slide_left_finish";\
+ }\
+ program { name: "slide_left_finish";\
+ action: SIGNAL_EMIT "elm,action,sweep,left,finish" "elm";\
+ }\
+
+#define SWEEP_DISCLIP \
+ part { name: "base.disclip";\
+ type: RECT;\
+ description { state: "default" 0.0;\
+ rel1.to: "base";\
+ rel2.to: "base";\
+ color: 255 255 255 0;\
+ }\
+ description { state: "base_show" 0.0;\
+ inherit: "default" 0.0;\
+ color: 255 255 255 255;\
+ }\
+ description { state: "hide" 0.0;\
+ inherit: "default" 0.0;\
+ color: 255 255 255 0; \
+ }\
+ description { state: "hide" 0.1; \
+ inherit: "default" 0.0;\
+ color: 255 255 255 70;\
+ }\
+ description { state: "hide" 0.2;\
+ inherit: "default" 0.0;\
+ color: 255 255 255 160; \
+ }\
+ description { state: "hide" 0.3;\
+ inherit: "default" 0.0;\
+ color: 255 255 255 255;\
+ }\
+ }
+
+#define SWEEP_TEXT \
+ part { name: "elm.base.text";\
+ type: TEXT;\
+ clip_to: "base.disclip";\
+ mouse_events: 0;\
+ scale: 1;\
+ description { state: "default" 0.0;\
+ min: 0 36;\
+ fixed: 0 1;\
+ align: 0.5 0;\
+ rel1 {\
+ relative: 1 0;\
+ to_x: "elm.padding.left";\
+ to_y: "base";\
+ }\
+ rel2 {\
+ relative: 0 0;\
+ to_x: "elm.padding.right";\
+ to_y: "base";\
+ }\
+ color: 255 255 255 255;\
+ text {\
+ font: "SLP:style=Roman";\
+ size: 22;\
+ min: 0 1;\
+ align: 0.5 0.5;\
+ }\
+ }\
+ }
+
+#define SWEEP_TRANSPARENT \
+ part { name: "elm.between.layer";\
+ type: RECT;\
+ clip_to: "disclip";\
+ mouse_events: 1;\
+ description { state: "default" 0.0;\
+ rel1.to: "base";\
+ rel2.to: "base";\
+ color: 0 0 0 0;\
+ }\
+ description { state: "repeat_events" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 0;\
+ }\
+ }
+
+#define SWEEP_SLIDABLE_BASE_PARTS \
+ part { name: "slide_base";\
+ type: RECT;\
+ clip_to: "disclip";\
+ scale: 1;\
+ description { state: "default" 0.0;\
+ color: 0 0 0 0;\
+ rel1.to: "base";\
+ rel2.to: "base";\
+ }\
+ description { state: "hide" 0.0;\
+ inherit: "default" 0.0;\
+ rel1 { relative: 0.025 0.0; }\
+ rel2 { relative: 1.025 1.0; }\
+ }\
+ description { state: "hide" 0.1; \
+ inherit: "default" 0.0;\
+ rel1 { relative: 0.13 0.0; }\
+ rel2 { relative: 1.13 1.0; }\
+ }\
+ description { state: "hide" 0.2;\
+ inherit: "default" 0.0;\
+ rel1 { relative: 0.5 0.0; }\
+ rel2 { relative: 1.5 1.0; }\
+ }\
+ description { state: "hide" 0.3;\
+ inherit: "default" 0.0;\
+ rel1 { relative: 1.0 0.0; }\
+ rel2 { relative: 2.0 1.0; }\
+ }\
+ }\
+ part { name: "slide_base.bg_image";\
+ clip_to: "disclip";\
+ description { state: "default" 0.0;\
+ visible: 0;\
+ image.normal: "00_list_bar_press_1x80.png";\
+ rel1.to: "slide_base";\
+ rel2.to: "slide_base";\
+ }\
+ description { state: "selected" 0.0;\
+ inherit: "default" 0.0;\
+ visible: 1;\
+ }\
+ }\
+ part { name: "slide_base.padding.left";\
+ type: RECT;\
+ clip_to: "disclip";\
+ mouse_events: 0;\
+ scale: 1;\
+ description { state: "default" 0.0;\
+ min: 15 0;\
+ fixed: 1 0;\
+ visible: 0;\
+ rel1.to: "slide_base";\
+ rel2 {\
+ relative: 0 1;\
+ to: "slide_base";\
+ }\
+ }\
+ }\
+ part { name: "slide_base.padding.right";\
+ type: RECT;\
+ clip_to: "disclip";\
+ mouse_events: 0;\
+ scale: 1;\
+ description { state: "default" 0.0;\
+ min: 15 0;\
+ fixed: 1 0;\
+ visible: 0;\
+ rel1 {\
+ relative: 1 0;\
+ to: "slide_base";\
+ }\
+ rel2.to: "slide_base";\
+ }\
+ }\
+
+#define GENLIST_PART_RENAME \
+ part { name: "elm.edit.rename"; \
+ clip_to: "disclip"; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ visible: 0; \
+ fixed: 1 1; \
+ rel1 { \
+ relative: 1.0 0.5; \
+ to_x: "elm.padding.left"; \
+ } \
+ rel2 { \
+ relative: 0.0 0.5; \
+ to_x: "elm.padding.right"; \
+ } \
+ } \
+ description { state: "rename_enabled" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ }
+
+#define GENLIST_DESCRIPTION_RENAME_ENABLED \
+ description { state: "rename_enabled" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ }
+
+#define GENLIST_PROGRAM_RENAME_1TEXT \
+ program { name: "rename_enabled"; \
+ signal: "elm,state,rename,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "rename_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.edit.rename"; \
+ } \
+ program { name: "rename_disabled"; \
+ signal: "elm,state,rename,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.edit.rename"; \
+ }
+
+#define GENLIST_PART_PADDING_TOP( param_padding_size ) \
+ part { name: "elm.padding.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 1.0 0.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \
+ part { name: "elm.padding.bottom"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel1.relative: 0.0 1.0; \
+ align: 0.0 1.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_LEFT( param_padding_size ) \
+ part { name: "elm.padding.left"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_RIGHT( param_padding_size ) \
+ part { name: "elm.padding.right"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1.relative: 1.0 0.0; \
+ align: 1.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_BG_IMAGE \
+ part { name: "bg_image"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ color: MP_GENLIST_BG_COLOR; \
+ } \
+ description { state: "selected" 0.0; \
+ inherit: "default" 0.0; \
+ color: GENLIST_PART_LIST_PRESS_COLOR_INC; \
+ } \
+ }
+
+#define GENLIST_EDIT_SELECT_ALL_BG_COLOR_INC 0 0 0 255
+#define GENLIST_PART_TEXT_COLOR_INC 249 249 249 255
+#define GENLIST_PART_TEXT_SELECTED_COLOR_INC 249 249 249 255
+#define GENLIST_PART_DISCLIP_COLOR_INC 255 255 255 64
+
+#define GENLIST_PART_BOTTOM_LINE \
+ part { name: "bottom_line"; \
+ type: RECT; \
+ clip_to: "disclip"; \
+ mouse_events: 0; \
+ description { state: "default" 0.0; \
+ min: 0 1; \
+ fixed: 0 1; \
+ visible: 1; \
+ color: MP_BOTTOM_LINE_COLOR; \
+ rel1 { \
+ relative: 0.0 1.0; \
+ offset: 0 -1; \
+ } \
+ } \
+ }
+#define GENLIST_PART_PADDING_TOP( param_padding_size ) \
+ part { name: "elm.padding.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 1.0 0.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_TEXT_TOP( param_padding_size ) \
+ part { name: "elm.padding.text.top"; \
+ type: RECT; \
+ scale: 1; \
+ description { \
+ state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel2.relative: 1.0 0.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_BOTTOM( param_padding_size ) \
+ part { name: "elm.padding.bottom"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: 0 param_padding_size; \
+ fixed: 0 1; \
+ visible: 0; \
+ rel1.relative: 0.0 1.0; \
+ align: 0.0 1.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_LEFT( param_padding_size ) \
+ part { name: "elm.padding.left"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel2.relative: 0.0 1.0; \
+ align: 0.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_PADDING_RIGHT( param_padding_size ) \
+ part { name: "elm.padding.right"; \
+ type: RECT; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ min: param_padding_size 0; \
+ fixed: 1 0; \
+ visible: 0; \
+ rel1.relative: 1.0 0.0; \
+ align: 1.0 0.0; \
+ } \
+ }
+
+#define GENLIST_PART_DISCLIP \
+ part { name: "disclip"; \
+ type: RECT; \
+ description { state: "default" 0.0; \
+ } \
+ description { state: "disabled" 0.0; \
+ inherit: "default" 0.0; \
+ color: GENLIST_PART_DISCLIP_COLOR_INC; \
+ } \
+ }
+
+#define GENLIST_DESCRIPTION_FLIP_ENABLED \
+ description { state: "flip_enabled" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ }
+#define GENLIST_DESCRIPTION_INVISIBLE_SELECTED \
+ description { state: "selected" 1.0; \
+ inherit: "default" 0.0; \
+ visible: 0; \
+ }
+#define GENLIST_PART_FLIP \
+ part { name: "elm.flip.content"; \
+ clip_to: "disclip"; \
+ type: SWALLOW; \
+ mouse_events: 1; \
+ scale: 1; \
+ description { state: "default" 0.0; \
+ visible: 0; \
+ fixed: 1 1; \
+ rel1 { \
+ relative: 1.0 0.5; \
+ to_x: "elm.padding.left"; \
+ } \
+ rel2 { \
+ relative: 0.0 0.5; \
+ to_x: "elm.padding.right"; \
+ } \
+ } \
+ description { state: "flip_enabled" 0.0; \
+ inherit: "default" 0.0; \
+ visible: 1; \
+ } \
+ }
+ #define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_1TEXT \
+ script { \
+ new st[31]; \
+ new Float:vl; \
+ get_state(PART:"elm.text", st, 30, vl); \
+ set_state(PART:"bg_image", "selected", 0.0); \
+ if (!strcmp(st, "flip_enabled")) \
+ set_state(PART:"elm.text", "selected", 1.0); \
+ else \
+ set_state(PART:"elm.text", "selected", 0.0); \
+ }
+
+#define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_2TEXT \
+ script { \
+ new st[31]; \
+ new Float:vl; \
+ get_state(PART:"elm.text.1", st, 30, vl); \
+ set_state(PART:"bg_image", "selected", 0.0); \
+ if (!strcmp(st, "flip_enabled")) { \
+ set_state(PART:"elm.text.1", "selected", 1.0); \
+ set_state(PART:"elm.text.2", "selected", 1.0); \
+ } \
+ else { \
+ set_state(PART:"elm.text.1", "selected", 0.0); \
+ set_state(PART:"elm.text.2", "selected", 0.0); \
+ } \
+ }
+
+#define GENLIST_PROGRAM_SCRIPT_FLIP_SELECT_3TEXT \
+ script { \
+ new st[31]; \
+ new Float:vl; \
+ get_state(PART:"elm.text.1", st, 30, vl); \
+ set_state(PART:"bg_image", "selected", 0.0); \
+ if (!strcmp(st, "flip_enabled")) { \
+ set_state(PART:"elm.text.1", "selected", 1.0); \
+ set_state(PART:"elm.text.2", "selected", 1.0); \
+ set_state(PART:"elm.text.3", "selected", 1.0); \
+ } \
+ else { \
+ set_state(PART:"elm.text.1", "selected", 0.0); \
+ set_state(PART:"elm.text.2", "selected", 0.0); \
+ set_state(PART:"elm.text.3", "selected", 0.0); \
+ } \
+ }
+
+#define GENLIST_PROGRAM_FLIP_1TEXT \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_1TEXT_1ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_1TEXT_2ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_1TEXT_3ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_2TEXT \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_2TEXT_1ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon"; \
+ target: "innerline.top"; \
+ target: "innerline.bottom"; \
+ target: "innerline.left"; \
+ target: "innerline.right"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon"; \
+ target: "innerline.top"; \
+ target: "innerline.bottom"; \
+ target: "innerline.left"; \
+ target: "innerline.right"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_2TEXT_2ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_2TEXT_3ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_3TEXT \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_3TEXT_1ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_3TEXT_2ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.flip.content"; \
+ }
+
+#define GENLIST_PROGRAM_FLIP_3TEXT_3ICON \
+ program { name: "flip_enabled"; \
+ signal: "elm,state,flip,enabled"; \
+ source: "elm"; \
+ action: STATE_SET "flip_enabled" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ } \
+ program { name: "flip_disabled"; \
+ signal: "elm,state,flip,disabled"; \
+ source: "elm"; \
+ action: STATE_SET "default" 0.0; \
+ target: "elm.text.1"; \
+ target: "elm.text.2"; \
+ target: "elm.text.3"; \
+ target: "elm.icon.1"; \
+ target: "elm.icon.2"; \
+ target: "elm.icon.3"; \
+ target: "elm.flip.content"; \
+ }
+
+
diff --git a/layout/music.edc b/layout/music.edc
new file mode 100755
index 0000000..f11b17f
--- /dev/null
+++ b/layout/music.edc
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-defines.h"
+
+collections {
+ #include "mp-play-view.edc"
+ #include "mp-play-control.edc"
+ #include "mp-play-menu.edc"
+ #include "mp-play-progress.edc"
+ #include "mp-play-info.edc"
+ #include "mp-play-current-playing.edc"
+ #include "mp-rich-info.edc"
+}
diff --git a/packaging/org.tizen.music-player.spec b/packaging/org.tizen.music-player.spec
new file mode 100644
index 0000000..60adcf7
--- /dev/null
+++ b/packaging/org.tizen.music-player.spec
@@ -0,0 +1,99 @@
+Name: org.tizen.music-player
+Summary: music player application
+Version: 0.1.3
+Release: 1
+Group: TO_BE/FILLED_IN
+License: Flora Software License
+Source0: %{name}-%{version}.tar.gz
+BuildRequires: pkgconfig(appcore-efl)
+BuildRequires: pkgconfig(appsvc)
+BuildRequires: pkgconfig(devman_haptic)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(ecore-file)
+BuildRequires: pkgconfig(ecore-imf)
+BuildRequires: pkgconfig(ecore-input)
+BuildRequires: pkgconfig(ecore-x)
+BuildRequires: pkgconfig(edje)
+BuildRequires: pkgconfig(eina)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(libmedia-service)
+BuildRequires: pkgconfig(libxml-2.0)
+BuildRequires: pkgconfig(mm-fileinfo)
+BuildRequires: pkgconfig(mm-player)
+BuildRequires: pkgconfig(mm-session)
+BuildRequires: pkgconfig(mm-sound)
+BuildRequires: pkgconfig(pmapi)
+BuildRequires: pkgconfig(svi)
+BuildRequires: pkgconfig(syspopup-caller)
+BuildRequires: pkgconfig(ui-gadget)
+BuildRequires: pkgconfig(utilX)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: libug-contacts-devel
+BuildRequires: cmake
+BuildRequires: prelink
+BuildRequires: edje-tools
+BuildRequires: gettext-tools
+
+%description
+music player application.
+
+
+
+%prep
+%setup -q
+
+
+%define PREFIX /opt/apps/org.tizen.music-player
+
+%build
+cmake . -DCMAKE_INSTALL_PREFIX="%{PREFIX}"
+make %{?jobs:-j%jobs}
+
+%install
+%make_install
+
+execstack -c %{buildroot}%{PREFIX}/bin/music-player
+
+%find_lang music-player
+
+
+%post
+/usr/bin/vconftool set -t int db/setting/music-player/menu 7 -g 6514 2> /dev/null
+/usr/bin/vconftool set -t bool db/setting/music-player/se_change 1 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool db/setting/music-player/menu_change 1 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool db/setting/music-player/surround_ch_state 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_val 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/effect_val 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_1 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_2 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_3 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_4 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_5 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_6 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_7 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/setting/music-player/eq_custom_8 0 -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int memory/music/state 0 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int memory/music/process_state 0 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int memory/music/album_art 0 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t string memory/music/pos "00:00" -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t double memory/music/progress_pos 0.0 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool memory/music/play_clicked 1 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool memory/music/pause_clicked 1 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool memory/music/prev_pressed 1 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool memory/music/prev_released 1 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool memory/music/next_pressed 1 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool memory/music/next_released 1 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t bool db/music/menu/shuffle 1 -i -g 6518 2> /dev/null
+/usr/bin/vconftool set -t int db/music/menu/repeat 0 -i -g 6518 2> /dev/null
+chown -R 5000:5000 %{PREFIX}/data
+
+%files -f music-player.lang
+/opt/share/applications/org.tizen.music-player.desktop
+%{PREFIX}/data
+/opt/share/miregex/music-player.uri
+%{PREFIX}/bin/music-player
+%{PREFIX}/res/icons/*
+%{PREFIX}/res/edje/*.edj
+
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
new file mode 100755
index 0000000..42e0d75
--- /dev/null
+++ b/po/CMakeLists.txt
@@ -0,0 +1,39 @@
+# for i18n
+
+SET(POFILES
+ de_DE.po
+ el_GR.po
+ en.po
+ es_ES.po
+ fr_FR.po
+ it_IT.po
+ ko_KR.po
+ nl_NL.po
+ pt_PT.po
+ ru_RU.po
+ tr_TR.po
+ zh_CN.po
+ zh_HK.po
+ zh_TW.po
+ ja_JP.po
+)
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+ SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+ MESSAGE("PO: ${pofile}")
+ GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+ GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+ SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+ ADD_CUSTOM_COMMAND(
+ OUTPUT ${moFile}
+ COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+ DEPENDS ${absPofile}
+ )
+ INSTALL(FILES ${moFile}
+ DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+ SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/po/POTFILES.in b/po/POTFILES.in
new file mode 100755
index 0000000..9ac2c98
--- /dev/null
+++ b/po/POTFILES.in
@@ -0,0 +1,23 @@
+# List of source files containing translatable strings.
+src/main.c
+src/mp-library.c
+src/mp-track-view.c
+src/mp-group-view.c
+src/mp-playlist-view.c
+src/mp-cache-list.c
+src/mp-library-util.c
+#file-search-view.c
+src/mp-player-mgr.c
+src/mp-player-control.c
+src/mp-play-view.c
+#mp-setting-view.c
+src/mp-setting-ctrl.c
+#src/mp-player-setting.c
+src/mp-player-util.c
+src/mp-bluetooth-ctrl.c
+src/mp-play-list.c
+src/mp-player-drm.c
+src/mp-edit-view.c
+src/mp-ctxpopup.c
+include/music-library.h
+src/rich-info/mp-rich-info.c
diff --git a/po/de_DE.po b/po/de_DE.po
new file mode 100755
index 0000000..696784d
--- /dev/null
+++ b/po/de_DE.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Element kann nicht entfernt werden"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "Mehr als %d Musikdateien können nicht hinzugefügt werden"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Wiedergabe während Anruf nicht möglich"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Album"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Alben"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Autor"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Urheberrecht"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Wiedergabeliste erstellen"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Beschreibung"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Favoriten"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Format"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Nicht möglich"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Ort"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Keine Wiedergabelisten"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Nummer des Titels"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Typ"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Unbekannt"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Löschen"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Hinzugefügt"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Löschen?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s entfernt"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Entfernt"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Entfernen?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Als Anruferklingelton festlegen"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Wiedergabeliste kann nicht umbenannt werden"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Festlegen als Klingelton nicht möglich."
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "DRM-Datei kann nicht freigegeben werden"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Alben"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Zum Startb. hzfg."
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biographie"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Danksagungen"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Medien-Info"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Diskografie"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Liedtext"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Name zu lang"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Altersbeschränkung"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Möglich"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Überprüfen"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Wiedergabeliste"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Bereits hinzugefügt"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1-Kanal"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Zu Wiedergabeliste hinzufügen"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Künstler"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Interpreten"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Verfügbare Nutzungen"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Bassverstärkung"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Chor"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Klassik"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Komponist"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Komponisten"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Konzertsaal"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Benutzerdefiniert"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Dance"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Medien-Info"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Dynamisch"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Effekt"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Equalizer"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Externalisierung"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Weiterleitung"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Genre"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Genres"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Jazz"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Live"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Am häufigsten wiedergegeben"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Musikklarheit"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Musik-Menü"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Musik-Einstellungen"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Bild für Album"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Wiedergabelisten"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Pop"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Zuletzt hinzugefügt"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Kürzlich wiedergegeben"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Rock"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Länge des Titels"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Tremolo"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Gültigkeit"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Weit"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Jahre"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Aus"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Keine Lieder"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Lieder"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Wiedergabeliste hinzufügen"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Anruf-Klingelton"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Wiedergabeliste erstellen"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Titel bearbeiten"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Verlauf"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Entfernen"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Umbenennen"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Neu sortieren"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Als Wiedergabeliste speichern"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Alarmton"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Anruferklingelton"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Hinzugefügt zu %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Bluetooth getrennt"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Maximale Anzahl an Elementen (%d) ausgewählt"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Nichts ausgewählt"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Löschen nicht möglich. Ausgewählte Musik wird wiedergegeben."
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Datei kann nicht wiedergegeben werden. Fehler aufgetreten."
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Wiedergabe nicht möglich. Nicht unterstützter Dateityp"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Hzfg."
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Senden"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Alle"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Interpreten"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Kompo\n-nisten"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Diri\n-genten"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Genres"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcasts"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Jahre"
+
diff --git a/po/el_GR.po b/po/el_GR.po
new file mode 100755
index 0000000..ac57305
--- /dev/null
+++ b/po/el_GR.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Δεν είναι δυνατή η αφαίρεση του στοιχείου"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "Δεν είναι δυνατή η προσθήκη περισσότερων από %d αρχείων μουσικής"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Δεν είναι δυνατή η αναπαραγωγή παιχνιδιού κατά την κλήση"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Άλμπουμ"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Άλμπουμ"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Συντάκτης"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Πνευματικά δικαιώματα"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Δημιουργία λίστας αναπαραγωγής"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Περιγραφή"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Αγαπημένα"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Μορφή"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Αδύνατο"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Θέση"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Καμία λίστα αναπαραγωγής"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Αριθμός κομματιού"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Τύπος"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Άγνωστο"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Διαγραφή"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Προστέθηκε"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Διαγραφή;"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "Το %s αφαιρέθηκε"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Αφαιρέθηκε"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Αφαίρεση;"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Ρύθμιση ως ήχου κλήσης καλούντος"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Δεν είναι δυνατή η μετονομασία της λίστας αναπαραγωγής"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Δεν είναι δυνατός ο ορισμός ως ήχου κλήσης"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "Δεν είναι δυνατή η κοινή χρήση του αρχείου DRM"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Άλμπουμ"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biography"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Συντελεστές"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Πληροφορίες πολυμέσων"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Δισκογραφία"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Στίχοι"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Πολύ μεγάλο όνομα"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Γονική αξιολόγηση"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Δυνατό"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Εξέταση"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Λίστα κομματιών"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Προστέθηκε ήδη"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "Κανάλι 5.1"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Προσθήκη στη λίστα αναπαραγωγής"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Καλλιτέχνης"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Καλλιτέχνες"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Αυτόματο"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Διαθέσιμες χρήσεις"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Βελτίωση μπάσων"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Χορωδία"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Κλασική"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Συνθέτης"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Συνθέτες"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Αίθουσα συναυλιών"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Προσαρμοσμένη"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Χορός"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Πληροφορίες πολυμέσων"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Δυναμικό"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Εφέ"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Ισοσταθμιστής"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Εξωτερίκευση"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Προώθηση"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Είδος"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Είδη"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Τζαζ"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Πραγματικός χρόνος"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Επιλέχθηκε πρόσφατα"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Καθαρότητα μουσικής"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Μενού μουσικής"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Ρυθμίσεις μουσικής"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Είδος άλμπουμ"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Λίστες αναπαραγωγής"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Ποπ"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Προστέθηκε πρόσφατα"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Αναπ/χθηκε πρόσφατα"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Ροκ"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Διάρκεια κομματιού"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Τρέμολο"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Ισχύς"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Ευρύς"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Έτη"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Ανενεργό"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Δεν βρέθηκαν τραγούδια"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Τραγούδια"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Προσθήκη λίστας αναπαραγωγής"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "'Ηχος κλήσης"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Δημιουργία λίστας αναπαραγωγής"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Επεξεργασία τίτλου"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Ιστορικό"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Κατάργηση"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Μετονομασία"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Επανάληψη παραγγελίας"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Αποθήκευση ως λίστα αναπαραγωγής"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Ήχος ειδοποίησης"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Ήχος κλήσης καλούντος"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Προσθήκη σε %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Αποσυνδεδεμένο Bluetooth"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Επιλέχθηκε ο μέγιστος αριθμός στοιχείων (%d)"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Δεν έχει γίνει καμία επιλογή"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Δεν είναι δυνατή η διαγραφή. Γίνεται αναπαραγωγή της επιλεγμένης μουσικής"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Δεν είναι δυνατή η αναπαραγωγή. Προέκυψε σφάλμα"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Δεν είναι δυνατή η αναπαραγωγή. Ο τύπος αρχείου δεν υποστηρίζεται"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Προσθ."
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Κοινή χρήση"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Όλα"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Καλλιτέχνες"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Συνθέτες"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Αρχιμ."
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Είδη"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcasts"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Έτη"
+
diff --git a/po/en.po b/po/en.po
new file mode 100755
index 0000000..eae3f90
--- /dev/null
+++ b/po/en.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Unable to remove item"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "Unable to add more than %d music file"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Unable to play during call"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Album"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Albums"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Author"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Copyright"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Create playlist"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Description"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Favourites"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Format"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Impossible"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Location"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "No playlists"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Track number"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Type"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Unknown"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Delete"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Added"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Delete?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s removed"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Removed"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Remove?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Set as caller ringtone"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Unable to rename playlist"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Unable to set as ringtone"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "Unable to share DRM file"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Albums"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biography"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Credits"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Media info"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Discography"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Lyric"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Name too long"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Parent rating"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Possible"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Review"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Track list"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Already added"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1 channel"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Add to playlist"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Artist"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Artists"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Available uses"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Bass enhancement"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Chorus"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Classic"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Composer"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Composers"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Concert hall"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Custom"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Dance"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Media info"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Dynamic"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Effect"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Equaliser"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Externalisation"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Forwarding"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Genre"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Genres"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Jazz"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Live"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Most played"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Music clarity"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Music menu"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Music settings"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Album art"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Playlists"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Pop"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Recently added"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Recently played"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Rock"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Track length"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Tremolo"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Validity"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Wide"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Years"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Off"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "No songs"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Songs"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Add playlist"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Call ringtone"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Create playlist"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Edit title"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "History"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Remove"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Rename"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Reorder"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Save as playlist"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Alarm tone"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Caller ringtone"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Added to %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Bluetooth disconnected"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Maximum number of items (%d) selected"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Nothing selected"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Unable to delete. Selected music is playing"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Unable to play. Error occurred"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Unable to play. Unsupported file type"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Add"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Share"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "All"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Artists"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Composers"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Conductors"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Genres"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcasts"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Years"
+
diff --git a/po/es_ES.po b/po/es_ES.po
new file mode 100755
index 0000000..99a6189
--- /dev/null
+++ b/po/es_ES.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "No se puede quitar elemento"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "No se pueden añadir más de %d archivos de música"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "No se puede reproducir durante la llamada"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Álbum"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Álbumes"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Autor"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Copyright"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Crear lista de reproducción"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Descripción"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Favoritos"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Formato"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Imposible"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Ubicación"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Sin listas de reproducción"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Número de pista"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Tipo"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Desconocido"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Añadido"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "¿Eliminar?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s eliminado"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Elimininado"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "¿Eliminar?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Establecer como melodía de llamante"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "No se puede cambiar el nombre de la lista de reproducción"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "No se puede definir como melodía"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "No se puede compartir el archivo DRM"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Álbumes"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Añadir a inicio"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biografía"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Créditos"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Info multimedia"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Discografía"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Letra"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Nombre demasiado largo"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Clasificación parental"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Posible"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Revisar"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Lista de pistas"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Ya se ha añadido"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "Canal 5.1"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Añadir a lista de reproducción"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Artista"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Artistas"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Usos disponibles"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Mejora de bajos"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Coros"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Clásica"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Compositor"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Compositores"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Auditorio"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Personalizar"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Dance"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Info multimedia"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Dinámico"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Efecto"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Ecualizador"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Externalización"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Reenviando"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Género"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Géneros"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Jazz"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Live"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Las más escuchadas"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Claridad de la música"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Menú de música"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Configuración de música"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Álbum artístico"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Listas de reproducción"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Pop"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Añadidas recientemente"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Reproducidas recientemente"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Rock"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Duración de pista"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Trémolo"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Validez"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Amplio"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Años"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Desactivado"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Ninguna canción"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Canciones"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Añadir lista reproducción"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Melodía de llamada"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Crear lista de reproducción"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Editar título"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Historial"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Eliminar"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Cambiar nombre"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Reordenar"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Guardar como lista de reproducción"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Tono de alarma"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Melodía del llamante"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Añadido a %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Bluetooth desconectado"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Número máximo de elementos (%d) seleccionados"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "No se ha seleccionado nada"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Imposible eliminar. La canción seleccionada se está reproduciendo"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "No se puede reproducir. Se ha producido un error"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "No se puede reproducir. Tipo de archivo no admitido"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Añadir"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Compartir"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Todos"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Artistas"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Compositores"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Directores"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Géneros"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcasts"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Años"
+
diff --git a/po/fr_FR.po b/po/fr_FR.po
new file mode 100755
index 0000000..62ce42f
--- /dev/null
+++ b/po/fr_FR.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Impossible de retirer l'élément"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "Impossible d'ajouter plus de %d fichier(s) musical/aux"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Lecture impossible pendant un appel"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Album"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Albums"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Auteur"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Copyright"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Créer une liste de lecture"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Description"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Favoris"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Format"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Impossible"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Emplacement"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Aucune liste de lecture"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Numéro de la piste"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Type"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Inconnu"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Ajouté"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Supprimer ?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s supprimé"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Supprimé"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Supprimer ?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Définir comme sonnerie d'appelant"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Impossible de renommer la liste de lecture"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Impossible de définir en tant que sonnerie"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "Impossible de partager le fichier DRM"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Albums"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Ajouter à l'accueil"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biographie"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Remerciements"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Infos sur le média"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Discographie"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Paroles"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Nom trop long"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Classement parental"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Possible"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Compte-rendu"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Liste des pistes"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Déjà ajouté"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "Canal 5.1"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Ajouter à liste de lecture"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Artiste"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Artistes"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Utilisations disponibles"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Optimisation des basses"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Chorale"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Classique"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Compositeur"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Compositeurs"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Salle de concert"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Personnaliser"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Dance"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Infos sur le média"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Dynamique"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Effets"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Egaliseur"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Externalisation"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Transfert"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Genre"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Genres"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Jazz"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Live"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Les plus écoutés"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Clarté musicale"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Menu musique"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Paramètres audio"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Illustration de l'album"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Listes de lecture"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Pop"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Ajoutés récemment"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Ecoutés récemment"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Rock"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Durée de la piste"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Trémolo"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Validité"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha Wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Espace ouvert"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Années"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Désactiver"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Aucun titre"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Chansons"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Ajouter liste de lecture"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Sonnerie d'appel"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Créer une liste de lecture"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Modifier le titre"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Historique"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Supprimer"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Renommer"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Réorganiser"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Enregistrer comme liste de lecture"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Tonalité alarme"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Sonnerie personnalisée"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Ajouté à %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Bluetooth déconnecté"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Nombre maximum d'éléments (%d) sélectionnés"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Aucune sélection"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Suppression impossible. La musique sélectionnée est en cours de lecture"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Lecture impossible. Une erreur s'est produite"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Lecture impossible. Type de fichier non pris en charge"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Ajouter"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Partager"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Tout"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Artistes"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Compositeurs"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Chefs d'orch."
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Genres"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcasts"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Années"
+
diff --git a/po/it_IT.po b/po/it_IT.po
new file mode 100755
index 0000000..e8376af
--- /dev/null
+++ b/po/it_IT.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Impossibile rimuovere elemento"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "Impossibile aggiungere più di %d file musicali"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Impossibile riprodurre durante una chiamata"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Album"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Album"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Autore"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Copyright"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Crea playlist"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Descrizione"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Preferiti"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Formato"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Impossibile"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Posizione"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Nessuna playlist"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Numero traccia"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Tipo"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Sconosciuto"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Elimina"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Aggiunto"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Eliminare?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s rimosso"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Rimosso"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Rimuovere?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Imposta come suoneria chiamante"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Impossibile rinominare playlist"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Impossibile impostare come suoneria"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "Impossibile condividere file DRM"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Album"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Agg a schermata iniz"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biografia"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Ringraziamenti"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Info multimedia"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Discografia"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Testo"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Nome troppo lungo"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Valutazione genitori"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Possibile"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Verifica"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Elenco brani"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Già aggiunto"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1 canali"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Aggiungi a playlist"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Artista"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Artista"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Usi disponibili"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Potenziamento bassi"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Coro"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Classica"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Compositore"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Compositori"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Sala concerti"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Personale"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Danza"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Info multimedia"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Dinamico"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Effetto"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Equalizzatore"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Esternalizzazione"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Inoltro"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Genere"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Generi"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Jazz"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Live"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Più ascoltati"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Riduzione rumore musica"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Menu musicale"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Impostazioni musica"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Album Art"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Playlist"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Pop"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Ultimi aggiunti"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Ultimi riprodotti"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Rock"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Durata traccia"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Tremolo"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Validità"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Spazio ampio"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Anni"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "No"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Nessuna canzone"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Canzoni"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Aggiungi playlist"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Suoneria chiamata"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Crea playlist"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Modifica titolo"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Cronologia"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Rimuovi"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Rinomina"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Riordina"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Salva come playlist"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Tono sveglia"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Suoneria chiamante"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Aggiunto a %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Bluetooth disconnesso"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Selezionare numero max. di elementi (%d)"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Nessun elemento selezionato"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Impossibile eliminare. La musica selezionata è in riproduzione"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Impossibile riprodurre. Si è verificato un errore"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Impossibile riprodurre. Tipo file non supportato"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Aggiungi"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Condividi"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Tutto"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Artista"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Compos."
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Condutt."
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Generi"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcast"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Anni"
+
diff --git a/po/ja_JP.po b/po/ja_JP.po
new file mode 100755
index 0000000..ce0308c
--- /dev/null
+++ b/po/ja_JP.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "アイテム​を​消去​できません"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "ミュージック​ファイル​は​%d​以上​追加​できません"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "通話中​は​再生​できません"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "アルバム"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "アルバム"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "著者"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "著作権情報"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "プレイリストを作成"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "詳細"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "お気に入り"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "ファイル形式"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "不可"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "保存先"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "プレイリスト​がありません"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "トラック​番号"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "種類"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "不明"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "削除"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "追加しました。"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "削除しますか?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%sを​削除​しました"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "削除しました。"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "削除しますか?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "着信音​として​設定​します"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "プレイリスト​名​を​変更​できません"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "着信音​に​設定​できません"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "DRMファイル​を​共有​でき​ません"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "アルバム"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "バイオグラフィー"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "クレジット"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "メディア​情報"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "ディスコグラフィー"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "歌詞"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "名前​が​長すぎ​ます"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "親​レーティング"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "可能"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "プレビュー表示設定"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "トラック​リスト"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "既に登録されています。"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1​チャンネル"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "プレイリストに追加"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "アーティスト"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "アーティスト"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "使用​可能"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "低音強調"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "コーラス"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "クラシック"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "作曲者"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "作曲家"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "コンサート​ホール"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "カスタム"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "ダンス"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "メディア​情報"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "ダイナミック"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "効果"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "イコライザー"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "野外"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "転送"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "ジャンル"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "ジャンル"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "ジャズ"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "ライブ"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "よく聴く曲"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "クリア"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "音楽メニュー設定"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "ミュージック設定"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "アルバム​アート"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "プレイリスト"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "ポップ"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "最近​追加​した曲"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "最近​再生した曲"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "ロック"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "再生時間"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "トレモロ"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "有効性"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "ワイド"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "年"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "OFF"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "曲​が​ありません。"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "曲"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "プレイリスト​に​追加"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "着信音"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "プレイリストを作成"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "タイトル​を​編集​"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "履歴"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "クイックリストから削除"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "名前を変更"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "並べ替え"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "プレイリストとして​保存"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "アラーム​音"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "個別​着信音"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "%sに追加しました。"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Bluetooth​が​切断​され​ました"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "アイテム​の​最大​選択​数​(​%d​)​を選択しました"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "何も​選択​されて​いません"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "選択した曲は​再生中のため削除​できません"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "再生​​​​​できません。​​​エラー​​​が​​​発生しました​​"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "再生​でき​ません。​未対応​の​ファイル​です"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "追加"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "共有"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "全て"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "アーティスト"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Composers"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "指揮者"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "ジャンル"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcast"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "年"
+
diff --git a/po/ko_KR.po b/po/ko_KR.po
new file mode 100755
index 0000000..675a3c5
--- /dev/null
+++ b/po/ko_KR.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "항목을 삭제할 수 없습니다"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "%d개 이상 추가할 수 없습니다"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "통화 중에는 재생할 수 없습니다"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "앨범"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "앨범"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "저자"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "저작권"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "재생 목록 추가"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "설명"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "즐겨찾기"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "형식"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "불가능"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "저장위치"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "재생 목록이 없습니다"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "트랙 번호"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "형식"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "알 수 없음"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "삭제"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "추가되었습니다"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "삭제할까요?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s이(가) 삭제되었습니다"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "제거되었습니다"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "제거할까요?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "발신자 벨소리로 설정"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "이름을 변경할 수 없습니다"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "벨소리로 설정할 수 없습니다"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "DRM 파일을 공유할 수 없습니다"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "앨범"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "홈에 추가"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "약력"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "크레디트"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "미디어 정보"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "전체 앨범"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "가사"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "이름이 너무 깁니다"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "부모의 시청 지도가 필요한 등급"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "가능"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "리뷰"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "트랙 목록"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "이미 추가되었습니다"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1 채널"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "재생 목록에 추가"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "아티스트"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "아티스트"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "자동"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "사용 가능"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "중저음 강화"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "코러스"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "클래식"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "작곡가"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "작곡가"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "콘서트 홀"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "사용자 설정"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "댄스"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "미디어 정보"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "다이내믹"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "효과"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "이퀄라이저"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "부드러운 음질"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "전송"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "장르"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "장르"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "재즈"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "라이브"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "많이 재생된 음악"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "선명한 음질"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "음악 라이브러리"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "음악 설정"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "앨범 아트"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "재생 목록"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "팝"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "최근 추가 목록"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "최근 재생된 음악"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "락"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "재생 시간"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "트레몰로"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "유효 횟수"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "와-와"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "와이드"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "연도"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "끄기"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "음악이 없습니다"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "노래"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "재생 목록 추가"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "수신벨"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "재생 목록 추가"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "제목 편집"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "히스토리"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "제거"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "이름 변경"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "순서 변경"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "재생 목록으로 저장"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "알람음"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "개인 벨소리"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "%s에 추가되었습니다"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "블루투스가 해제되었습니다"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "최대 항목 수(%d개)를 선택하였습니다"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "선택된 것이 없습니다"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "삭제할 수 없습니다. 선택한 음악이 재생 중입니다"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "재생할 수 없습니다. 오류가 발생하였습니다"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "사용할 수 없는 파일 형식이므로 재생할 수 없습니다"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "추가"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "공유"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "전체"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "아티스트"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "작곡가"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "지휘자"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "장르"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "팟캐스트"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "연도"
+
diff --git a/po/nl_NL.po b/po/nl_NL.po
new file mode 100755
index 0000000..a6aa9e0
--- /dev/null
+++ b/po/nl_NL.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Kan het item niet wissen"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "Kan niet meer dan %d muziekbestanden toevoegen"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Niet mogelijk tijdens gesprek"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Album"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Albums"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Auteur"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Copyright"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Afspeellijst maken"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Beschrijving"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Favorieten"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Formaat"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Niet mogelijk"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Locatie"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Geen afspeellijsten"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Tracknummer"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Type"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Onbekend"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Wissen"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Toegevoegd"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Wissen?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s verwijderd"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Verwijderd"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Verwijderen?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Instellen als beltoon"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Kan de naam van de afspeellijst niet wijzigen"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Kan niet ingesteld worden als beltoon"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "Kan DRM-bestand niet delen"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Albums"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biografie"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Credits"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Media-info"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Discografie"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Songtekst"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Naam te lang"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Leeftijdsclassificatie"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Mogelijk"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Overzicht"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Afspeellijst"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Al toegevoegd"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1-kanaals"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Naar afspeellijst"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Artiest"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Artiesten"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Automa-\ntisch"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Aantal keer dat het gebruikt mag worden"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Lage tonen versterken"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Koor"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Klassiek"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Componist"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Componisten"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Concertzaal"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Aangepast"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Dance"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Media-info"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Dynamisch"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Effect"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Equalizer"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Weergeven als extern geluid"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Doorsturen"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Genre"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Genres"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Jazz"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Live"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Meest afgespeeld"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Helderheid muziek"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Muziekmenu"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Muziekinstellingen"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Album art"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Afspeellijsten"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Pop"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Onlangs toegevoegd"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Onlangs afgespeeld"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Rock"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Lengte track"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Vibrato"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Geldigheid"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Ruimtelijk"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Jaar"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Uit"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Geen nummers"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Nummers"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Afspeellijst toevoegen"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Beltoon voor oproep"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Afspeellijst maken"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Titel wijzigen"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Geschiedenis"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Wissen"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Naam wijzigen"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Indeling wijzigen"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Opslaan als afspeellijst"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Alarmtoon"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Beltoon beller"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Toegevoegd aan %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Verbinding met Bluetooth verbroken"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Maximumaantal items (%d) geselecteerd"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Niets geselecteerd"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Kan niet verwijderen. Geselecteerde muziek wordt afgespeeld"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Kan niet afspelen. Fout opgetreden"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Kan niet afspelen. Niet-ondersteund bestandstype"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Voeg toe"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Delen"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Alles"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Artiest"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Componisten"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Dirigent"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Genres"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcasts"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Jaren"
+
diff --git a/po/pt_PT.po b/po/pt_PT.po
new file mode 100755
index 0000000..21411cb
--- /dev/null
+++ b/po/pt_PT.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Impossível remover item"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "Impossível adicionar mais de %d ficheiros de música"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Impossível jogar durante chamada"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Álbum"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Álbuns"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Autor"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Direitos de autor"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Criar lista de reprodução"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Descrição"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Favoritos"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Formato"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Impossível"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Localização"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Nenhuma lista de reprodução"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Número da faixa"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Tipo"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Desconhecido"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Adicionado"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Eliminar?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s removida"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Removido"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Remover?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Definir como tom de toque de chamador"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Impossível mudar o nome da lista de reprodução"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Impossível definir como tom de toque"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "Impossível partilhar ficheiro DRM"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Álbuns"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biografia"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Créditos"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Info multimédia"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Discografia"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Letra"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Nome demasiado comprido"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Classificação parental"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Possível"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Rever"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Lista de faixas"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Já adicionado"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "Canal 5.1"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Adic. á lista de reprod."
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Artista"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Artistas"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Utilizações disponíveis"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Melhoramento de graves"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Coro"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Clássica"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Compositor"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Compositores"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Sala de concertos"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Personalizar"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Dança"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Info multimédia"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Dinâmico"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Efeito"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Equalizador"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Externalização"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Reencaminhar"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Género"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Géneros"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Jazz"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Em directo"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Mais reproduzidas"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Nitidez da música"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Menu Música"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Definições de música"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Capa do álbum"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Listas de reprod."
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Pop"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Adicionadas recentemente"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Reprod. recentem."
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Rock"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Duração da faixa"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Tremolo"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Validade"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Amplo"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Anos"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Desligar"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Nenhumas músicas"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Músicas"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Adicionar lista de reprodução"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Tom de toque de chamada"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Criar lista de reprodução"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Editar título"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Histórico"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Remover"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Mudar nome"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Reordenar"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Guardar como lista de reprodução"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Tom do alarme"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Toque do chamador"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Adicionada a %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Bluetooth desligado"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Número máximo de itens (%d) seleccionados"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Nada seleccionado"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Impossível eliminar. A música seleccionada está a ser reproduzida"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Impossível reproduzir. Ocorreu um erro"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Impossível reproduzir. Tipo de ficheiro não suportado"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Adicion."
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Partilhar"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Tudo"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Artistas"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Compos."
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Maestros"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Géneros"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcasts"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Anos"
+
diff --git a/po/ru_RU.po b/po/ru_RU.po
new file mode 100755
index 0000000..e428013
--- /dev/null
+++ b/po/ru_RU.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Невозможно удалить элемент"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "Невозможно добавить больше %d музыкальных файлов"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Воспроизведение во время вызова невозможно"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Альбом"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Альбомы"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Автор"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Авторские права"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Создать список воспроизведения"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Описание"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Избранное"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Формат"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "Невозможно"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Ячейка"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Нет списков воспроизведения"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Номер трека"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Тип"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Неизвестно"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Удалить"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Добавлено"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Удалить?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "Удалено: %s"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Удалено"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Удалить?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Установить как мелодия контакта"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Невозможно переименовать список воспроизведения"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Не удалось установить как мелодию"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "Невозможно предоставить общий доступ к файлу DRM"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Альбомы"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Биография"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Исполнители"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Информация"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Дискография"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Слова"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Слишком длинное имя"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Родительский контроль"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Возможно"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "Просмотр"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Список файлов"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Уже добавлено"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1-канальный звук"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Добавить в список"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Исполнитель"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Исполнители"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Доступно"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Усиление басов"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Хор"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Классика"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Композитор"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Композиторы"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Концертный зал"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Другое"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Танец"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Информация"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Динамический"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Эффект"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Эквалайзер"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Экстернализация"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "Пересылка"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Жанр"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Жанры"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Джаз"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Живой звук"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "Популярные файлы"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Четкость музыки"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Музыкальное меню"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Настройки музыки"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Обложка альбома"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Списки воспроизведения"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Поп"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Последние добавления"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Последние файлы"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Рок"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Длительность"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Тремоло"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Период действия"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Вау-вау"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Широкий диапазон"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Годы"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Выключено"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Нет композиций"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Песни"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Добавить список воспроизведения"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Мелодия звонка"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Создать список воспроизведения"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Изменить заголовок"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Журнал"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Удалить"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Переименовать"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Изменить порядок"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Сохранить как список воспроизведения"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Мелодия сигнала"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Мелодия контакта"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "Добавлено в %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Устройство Bluetooth отключено"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Выбрано максимальное количество элементов (%d)"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Ничего не выбрано"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Невозможно удалить. Выбранная музыка воспроизводится"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Сбой воспроизведения. Произошла ошибка"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Невозможно воспроизвести. Неподдерживаемый тип файла"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Добав."
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Отправить"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Все"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Исполнители"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Редакторы"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Дирижеры"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Жанры"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Подкасты"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Годы"
+
diff --git a/po/tr_TR.po b/po/tr_TR.po
new file mode 100755
index 0000000..1a87672
--- /dev/null
+++ b/po/tr_TR.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "Öğe kaldırılamıyor"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr " %d müzik dosyasından fazlası eklenemiyor"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "Görüşme sırasında çalınamaz"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "Albüm"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "Albümler"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "Yazar"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "Telif hakkı"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "Çalma listesi oluştur"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "Açıklama"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "Favorilerim"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "Biçim"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "İmkansız"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "Konum"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "Çalma listesi yok"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "Parça numarası"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "Tür"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "Bilinmeyen"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "Sil"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "Eklendi"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "Sil?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s kaldırıldı"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "Kaldırıldı"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "Kaldır?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "Arayan zil sesi olarak ayarla"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "Parça listesi yeniden adlandırılamıyor"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "Zil sesi olarak ayarlanamadı"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "DRM dosyası paylaşılamıyor"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "Albümler"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "Biyografi"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "Krediler"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "Medya bilgisi"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "Diskografi"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "Lirik"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "Ad çok uzun"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "Ebeveyn sıralaması"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "Mümkün"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "İzleme"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "Parça listesi"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "Zaten eklenmiş"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1 kanal"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "Çalma listesine ekle"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "Sanatçı"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "Sanatçılar"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "Otomatik"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "Mevcut kullanımlar"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "Bas iyileştirme"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "Koro"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "Klasik"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "Bestekar"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "Sanatçılar"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "Konser salonu"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "Özel"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "Dans"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "Medya bilgisi"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "Dinamik"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "Efekt"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "Ekolayzer"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "Dışsallaştırma"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "İletme"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "Tarz"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "Tarzlar"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "Jazz"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "Canlı"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "En sık çalınanlar"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "Müzik netliği"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "Müzik menüsü"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "Müzik ayarları"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "Albüm kapağı"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "Parça listeleri"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "Pop"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "Son eklenenler"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "Son çalınanlar"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "Rock"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "Parça uzunluğu"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "Titreklik"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "Geçerlilik"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "Wha-wha"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "Geniş"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "Yıl"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "Kapalı"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "Hiç şarkı yok"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "Şarkılar"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "Parça listesi ekle"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "Arayan zil sesi"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "Çalma listesi oluştur"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "Başlığı düzenle"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "Geçmiş"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "Kaldır"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "Yeniden adlandır"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "Yeniden düzenle"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "Parça listesi olarak kaydet"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "Alarm sesi"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "Arayan zil sesi tonu"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "%s öğesine eklendi"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "Bluetooth bağlantısı kesildi"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "Maksimum seçilen öğe sayısı (%d)"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "Bir şey seçilmedi"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "Silinemiyor. Seçilen müzik çalıyor"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "Çalınamıyor. Hata meydana geldi"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "Çalınamıyor. Desteklenmeyen dosya türü"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "Ekle"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "Paylaş"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "Hepsi"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "Sanatçılar"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "Besteci"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "Kondüktor"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "Tarzlar"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Pod cast’ler"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "Yıl"
+
diff --git a/po/update-po.sh b/po/update-po.sh
new file mode 100755
index 0000000..b44c850
--- /dev/null
+++ b/po/update-po.sh
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+PACKAGE=music-player
+SRCROOT=..
+POTFILES=POTFILES.in
+
+#ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW
+ALL_LINGUAS="en_US en_GB ja ko zh_CN"
+
+XGETTEXT=/usr/bin/xgettext
+MSGMERGE=/usr/bin/msgmerge
+
+echo -n "Make ${PACKAGE}.pot "
+if [ ! -e $POTFILES ] ; then
+ echo "$POTFILES not found"
+ exit 1
+fi
+
+$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \
+ --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES \
+&& test ! -f ${PACKAGE}.po \
+ || (rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot)
+
+if [ $? -ne 0 ]; then
+ echo "error"
+ exit 1
+else
+ echo "done"
+fi
+
+for LANG in $ALL_LINGUAS; do
+ echo "$LANG : "
+
+ if [ ! -e $LANG.po ] ; then
+ sed 's/CHARSET/UTF-8/g' ${PACKAGE}.pot > ${LANG}.po
+ echo "${LANG}.po created"
+ else
+ if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then
+ if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then
+ rm -f ${LANG}.new.po
+ else
+ if mv -f ${LANG}.new.po ${LANG}.po; then
+ echo ""
+ else
+ echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2
+ rm -f ${LANG}.new.po
+ exit 1
+ fi
+ fi
+ else
+ echo "msgmerge for $LANG failed!"
+ rm -f ${LANG}.new.po
+ fi
+ fi
+ echo ""
+done
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100755
index 0000000..505cefe
--- /dev/null
+++ b/po/zh_CN.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "无法移除项目"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "不能添加超过 %d 的音乐文件"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "通话中无法播放"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "专辑"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "唱片"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "作者"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "版权"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "新建播放列表"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "说明"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "我的最爱"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "格式"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "不可以"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "位置"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "无播放列表"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "曲目号"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "类型"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "未知"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "删除"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "已添加"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "删除?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "%s 已移除"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "已移除"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "移除?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "设置为来电铃声"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "无法重命名播放列表"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "无法设置为铃声"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "无法共享DRM文件"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "唱片"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "传记"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "制作"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "媒体信息"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "唱片目录"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "抒情"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "姓名太长"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "父速率"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "可以"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "查看"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "曲目列表"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "已添加"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1 声道"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "添加到播放列表"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "艺术家"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "艺术家"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "自动"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "可用于"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "低音增加"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "合唱"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "古典"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "作曲者"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "作曲家"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "音乐厅"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "自定义"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "舞曲"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "媒体信息"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "动态"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "效果"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "均衡器"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "具体化"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "转发"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "流派"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "流派"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "爵士"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "直播"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "多次播放的"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "音乐清晰"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "音乐菜单"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "音乐设定"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "专辑艺术"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "播放列表"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "流行"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "最近添加的"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "最近播放的"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "摇滚"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "曲目长度"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "颤音"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "有效"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "哇哇音"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "宽广"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "年"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "关"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "无歌曲"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "音乐"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "添加播放列表"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "来电铃声"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "新建播放列表"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "编辑标题"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "历史记录"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "移除"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "重命名"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "重新排序"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "另存为播放列表"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "闹钟铃声"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "来电铃声"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "已添加到 %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "蓝牙连接已断开"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "已达到项目最大数量上限(%d)"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "未选择"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "无法删除。选择的音乐正在播放"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "无法播放。出错"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "无法播放。不支持的文件类型"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "添加"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "共享"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "全部"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "艺术家"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "作曲家"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "乐队指挥"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "流派"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "播客"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "年"
+
diff --git a/po/zh_HK.po b/po/zh_HK.po
new file mode 100755
index 0000000..14c1736
--- /dev/null
+++ b/po/zh_HK.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "無法移除項目"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "無法加入超過 %d 個音樂檔案"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "通話期間無法播放"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "專輯"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "專輯"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "作家"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "版權"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "建立播放清單"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "描述"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "我的最愛"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "格式化"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "不可以"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "位置"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "無播放清單"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "曲目編號"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "類型"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "不明"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "刪除"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "已加入"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "刪除嗎?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "已移除 %s"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "已移除"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "要移除嗎?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "設定為來電者鈴聲"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "無法重新命名播放清單"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "無法設定為鈴聲"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "無法共享DRM檔案"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "專輯"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "簡介"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "製作"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "媒體資料"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "專輯目錄"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "歌詞"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "名稱太長"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "家長評分"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "可以"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "檢視"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "曲目清單"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "已加入"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1 聲道"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "加到播放清單"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "演出者"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "演出者"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "可供使用"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "重低音"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "合唱"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "古典"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "作曲者"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "作曲者"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "演奏廳"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "自訂"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "跳舞"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "媒體資料"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "動態"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "效果"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "均衡器"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "外化"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "轉寄中"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "類型"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "類型"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "爵士"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "現場"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "最常播放"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "清晰音樂"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "音樂目錄"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "音樂設定"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "專輯封面"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "播放清單"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "流行"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "最近加入"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "最近播放"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "搖滾"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "曲目長度"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "震音"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "有效期"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "嘩嘩聲"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "狂放"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "年份"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "關"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "沒有歌曲"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "歌曲"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "加入播放清單"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "來電鈴聲"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "建立播放清單"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "編輯標題"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "歷程記錄"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "移除"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "重新命名"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "重新排序"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "另存為播放清單"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "鬧鐘鈴聲"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "聯絡人來電鈴聲"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "已加到 %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "藍牙連接已中斷"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "已選擇項目數目上限 (%d)"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "無已選擇項目"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "無法刪除。所選音樂正在播放"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "無法播放。發生錯誤"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "無法播放。不支援的檔案類型"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "新增"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "分享"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "全部"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "演出者"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "作曲者"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "指揮者"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "類型"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "Podcasts"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "年"
+
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100755
index 0000000..3f6e297
--- /dev/null
+++ b/po/zh_TW.po
@@ -0,0 +1,330 @@
+msgid "IDS_MUSIC_POP_ITEM_NOT_REMOVE"
+msgstr "無法移除項目"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE"
+msgstr "無法加入超過 %d 個音樂檔案"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"
+msgstr "通話期間無法播放"
+
+msgid "IDS_MUSIC_BODY_ALBUM"
+msgstr "專輯"
+
+msgid "IDS_MUSIC_BODY_ALBUMS"
+msgstr "專輯"
+
+msgid "IDS_MUSIC_BODY_AUTHOR"
+msgstr "作者"
+
+msgid "IDS_MUSIC_BODY_COPYRIGHT"
+msgstr "版權"
+
+msgid "IDS_MUSIC_BODY_CREATE_PLAYLIST"
+msgstr "建立播放清單"
+
+msgid "IDS_MUSIC_BODY_DESCRIPTION"
+msgstr "說明"
+
+msgid "IDS_MUSIC_BODY_FAVOURITES"
+msgstr "我的最愛"
+
+msgid "IDS_MUSIC_BODY_FORMAT"
+msgstr "格式"
+
+msgid "IDS_MUSIC_BODY_IMPOSSIBLE"
+msgstr "不可能"
+
+msgid "IDS_MUSIC_BODY_MUSIC_LOCATION"
+msgstr "位置"
+
+msgid "IDS_MUSIC_BODY_NO_PLAYLISTS"
+msgstr "無播放清單"
+
+msgid "IDS_MUSIC_BODY_TRACK_NUMBER"
+msgstr "曲目編號"
+
+msgid "IDS_MUSIC_BODY_TYPE_CNOUN"
+msgstr "類型"
+
+msgid "IDS_MUSIC_BODY_UNKNOWN"
+msgstr "未知"
+
+msgid "IDS_MUSIC_OPT_DELETE"
+msgstr "刪除"
+
+msgid "IDS_MUSIC_POP_ADDED"
+msgstr "已新增"
+
+msgid "IDS_MUSIC_POP_DELETE_Q"
+msgstr "要刪除嗎?"
+
+msgid "IDS_MUSIC_POP_PS_REMOVED"
+msgstr "已移除 %s"
+
+msgid "IDS_MUSIC_POP_REMOVED"
+msgstr "已移除"
+
+msgid "IDS_MUSIC_POP_REMOVE_Q"
+msgstr "要移除嗎?"
+
+msgid "IDS_MUSIC_POP_SET_AS_CALLER_RINGTONE"
+msgstr "設定為來電者鈴聲"
+
+msgid "IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"
+msgstr "無法重新命名播放清單"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SET_AS_RINGTONE"
+msgstr "無法設定為鈴聲"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_SHARE_DRM_FILE"
+msgstr "無法共享 DRM 文件"
+
+msgid "IDS_MUSIC_TAB4_ALBUMS"
+msgstr "專輯"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_HOME"
+msgstr "Add to home"
+
+msgid "IDS_MUSIC_BODY_BIOGRAPHY"
+msgstr "傳記"
+
+msgid "IDS_MUSIC_BODY_CREDITS"
+msgstr "製作人員名單"
+
+msgid "IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"
+msgstr "媒體資訊"
+
+msgid "IDS_MUSIC_BODY_DISCOGRAPHY"
+msgstr "唱片分類目錄"
+
+msgid "IDS_MUSIC_BODY_LYRIC"
+msgstr "歌詞"
+
+msgid "IDS_MUSIC_BODY_NAME_TOO_LONG"
+msgstr "名稱太長"
+
+msgid "IDS_MUSIC_BODY_PARENT_RATING"
+msgstr "父級評分"
+
+msgid "IDS_MUSIC_BODY_POSSIBLE"
+msgstr "可能"
+
+msgid "IDS_MUSIC_BODY_REVIEW"
+msgstr "查看"
+
+msgid "IDS_MUSIC_HEADER_TRACK_LIST"
+msgstr "曲目清單"
+
+msgid "IDS_MUSIC_ALREADY_ADDED"
+msgstr "已新增"
+
+msgid "IDS_MUSIC_BODY_51_CHANNEL"
+msgstr "5.1 聲道"
+
+msgid "IDS_MUSIC_BODY_ADD_TO_PLAYLIST"
+msgstr "加到播放清單"
+
+msgid "IDS_MUSIC_BODY_ARTIST"
+msgstr "演出者"
+
+msgid "IDS_MUSIC_BODY_ARTISTS"
+msgstr "演出者"
+
+msgid "IDS_MUSIC_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_MUSIC_BODY_AVAILABLE_USES"
+msgstr "可供使用"
+
+msgid "IDS_MUSIC_BODY_BASS_ENHANCEMENT"
+msgstr "低音增強"
+
+msgid "IDS_MUSIC_BODY_CHOROUS"
+msgstr "合音"
+
+msgid "IDS_MUSIC_BODY_CLASSIC"
+msgstr "古典"
+
+msgid "IDS_MUSIC_BODY_COMPOSER"
+msgstr "撰寫器"
+
+msgid "IDS_MUSIC_BODY_COMPOSERS"
+msgstr "作曲者"
+
+msgid "IDS_MUSIC_BODY_CONCERT_HALL"
+msgstr "演奏廳"
+
+msgid "IDS_MUSIC_BODY_CUSTOM"
+msgstr "自訂"
+
+msgid "IDS_MUSIC_BODY_DANCE"
+msgstr "舞曲"
+
+msgid "IDS_MUSIC_BODY_DETAILSMEADIAINFO"
+msgstr "媒體資訊"
+
+msgid "IDS_MUSIC_BODY_DYNAMIC"
+msgstr "動態"
+
+msgid "IDS_MUSIC_BODY_EFFECT"
+msgstr "效果"
+
+msgid "IDS_MUSIC_BODY_EQUALISER"
+msgstr "等化器"
+
+msgid "IDS_MUSIC_BODY_EXTERNALISATION"
+msgstr "立體聲"
+
+msgid "IDS_MUSIC_BODY_FORWARDING"
+msgstr "正在轉寄"
+
+msgid "IDS_MUSIC_BODY_GENRE"
+msgstr "類型"
+
+msgid "IDS_MUSIC_BODY_GENRES"
+msgstr "類型"
+
+msgid "IDS_MUSIC_BODY_JAZZ"
+msgstr "爵士樂"
+
+msgid "IDS_MUSIC_BODY_LIVE"
+msgstr "現場"
+
+msgid "IDS_MUSIC_BODY_MOST_PLAYED"
+msgstr "最常播放"
+
+msgid "IDS_MUSIC_BODY_MUSIC_CLARITY"
+msgstr "音樂清晰度"
+
+msgid "IDS_MUSIC_BODY_MUSIC_MENU"
+msgstr "音樂選單"
+
+msgid "IDS_MUSIC_BODY_MUSIC_SETTINGS"
+msgstr "音樂設定"
+
+msgid "IDS_MUSIC_BODY_PLAYINGDETAILS_ALBUM_ART"
+msgstr "專輯封面"
+
+msgid "IDS_MUSIC_BODY_PLAYLISTS"
+msgstr "播放清單"
+
+msgid "IDS_MUSIC_BODY_POP"
+msgstr "流行音樂"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_ADDED"
+msgstr "最近加入"
+
+msgid "IDS_MUSIC_BODY_RECENTLY_PLAYED"
+msgstr "最近播放"
+
+msgid "IDS_MUSIC_BODY_ROCK"
+msgstr "搖滾"
+
+msgid "IDS_MUSIC_BODY_TRACK_LENGTH"
+msgstr "曲目長度"
+
+msgid "IDS_MUSIC_BODY_TREMOLO"
+msgstr "顫音"
+
+msgid "IDS_MUSIC_BODY_VALIDITY"
+msgstr "有效期"
+
+msgid "IDS_MUSIC_BODY_WHA_WHA"
+msgstr "嘩嘩"
+
+msgid "IDS_MUSIC_BODY_WIDE"
+msgstr "狂放"
+
+msgid "IDS_MUSIC_BODY_YEARS"
+msgstr "年"
+
+msgid "IDS_MUSIC_BUTTON_OFF"
+msgstr "關"
+
+msgid "IDS_MUSIC_HEADER_NO_SONGS"
+msgstr "無歌曲"
+
+msgid "IDS_MUSIC_HEADER_SONGS"
+msgstr "歌曲"
+
+msgid "IDS_MUSIC_OPT_ADD_PLAYLIST"
+msgstr "加入播放清單"
+
+msgid "IDS_MUSIC_OPT_CALL_RINGTONE"
+msgstr "來電鈴聲"
+
+msgid "IDS_MUSIC_OPT_CREATE_PLAYLIST"
+msgstr "建立播放清單"
+
+msgid "IDS_MUSIC_OPT_EDIT_TITLE"
+msgstr "編輯標題"
+
+msgid "IDS_MUSIC_OPT_HISTORY"
+msgstr "歷程記錄"
+
+msgid "IDS_MUSIC_OPT_REMOVE"
+msgstr "移除"
+
+msgid "IDS_MUSIC_OPT_RENAME"
+msgstr "重新命名"
+
+msgid "IDS_MUSIC_OPT_REORDER"
+msgstr "重新排序"
+
+msgid "IDS_MUSIC_OPT_SAVE_AS_PLAYLIST"
+msgstr "另存為播放清單"
+
+msgid "IDS_MUSIC_OPT_SETAS_ALARM_TONE"
+msgstr "鬧鐘鈴聲"
+
+msgid "IDS_MUSIC_OPT_SETAS_CALLER_RINGTONE"
+msgstr "來電者鈴聲"
+
+msgid "IDS_MUSIC_POP_ADDED_TO_PS"
+msgstr "已加到 %s"
+
+msgid "IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"
+msgstr "藍牙已中斷"
+
+msgid "IDS_MUSIC_POP_MAXIMUM_NUMBER_OF_ITEMS_HPD_SELECTED"
+msgstr "達到最大選擇數量(%)"
+
+msgid "IDS_MUSIC_POP_NOTHING_SELECTED"
+msgstr "未選擇任何項目"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"
+msgstr "無法刪除。選擇的音樂正在播放"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"
+msgstr "無法播放。發生錯誤"
+
+msgid "IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"
+msgstr "無法播放。不支援的檔案類型"
+
+msgid "IDS_MUSIC_SK_ADD_LITE"
+msgstr "加入"
+
+msgid "IDS_MUSIC_SK_SHARE"
+msgstr "分享"
+
+msgid "IDS_MUSIC_TAB4_ALL"
+msgstr "全部"
+
+msgid "IDS_MUSIC_TAB4_ARTISTS"
+msgstr "演出者"
+
+msgid "IDS_MUSIC_TAB4_COMPOSERS"
+msgstr "作曲家"
+
+msgid "IDS_MUSIC_TAB4_CONDUCTORS"
+msgstr "導體"
+
+msgid "IDS_MUSIC_TAB4_GENRES"
+msgstr "類型"
+
+msgid "IDS_MUSIC_TAB4_PODCASTS"
+msgstr "播客"
+
+msgid "IDS_MUSIC_TAB4_YEARS"
+msgstr "年"
+
diff --git a/src/common/include/mp-app.h b/src/common/include/mp-app.h
new file mode 100755
index 0000000..34c7e29
--- /dev/null
+++ b/src/common/include/mp-app.h
@@ -0,0 +1,48 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_APP_H__
+#define __MP_APP_H__
+
+#include <sys/inotify.h>
+
+typedef enum _mp_inotify_event
+{
+ MP_INOTI_NONE = 0,
+ MP_INOTI_CREATE, // IN_CREATE
+ MP_INOTI_DELETE, // IN_DELETE
+ MP_INOTI_MODIFY, // IN_MODIFY
+ MP_INOTI_MOVE_OUT, // IN_MOVED_FROM
+ MP_INOTI_MOVE_IN, // IN_MOVED_TO
+ MP_INOTI_MAX,
+} mp_inotify_event;
+
+typedef void (*mp_inotify_cb) (mp_inotify_event event, char *name, void *data);
+
+void mp_app_exit(void *data);
+bool mp_app_noti_init(void *data);
+bool mp_app_noti_ignore(void);
+
+int mp_app_inotify_init(void *data);
+void mp_app_inotify_finalize(struct appdata *ad);
+int mp_app_inotify_add_watch(const char *path, mp_inotify_cb callback, void *user_data);
+int mp_app_inotify_rm_watch(int index);
+
+Eina_Bool mp_app_hard_key_down_cb(void *data, int type, void *event_info);
+Eina_Bool mp_app_hard_key_up_cb(void *data, int type, void *event_info);
+
+#endif // __MP_APP_H__
diff --git a/src/common/include/mp-common.h b/src/common/include/mp-common.h
new file mode 100755
index 0000000..f48473e
--- /dev/null
+++ b/src/common/include/mp-common.h
@@ -0,0 +1,56 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __mp_common_H__
+#define __mp_common_H__
+
+#include <Elementary.h>
+#include "music.h"
+#include "mp-view-layout.h"
+
+#define _EDJ(obj) elm_layout_edje_get(obj) /**< get evas object from elm layout */
+
+struct text_part
+{
+ char *part;
+ char *msgid;
+};
+
+Evas_Object *mp_create_win(const char *name);
+Evas_Object *mp_get_main_win(void);
+int mp_check_battery_available(void);
+
+inline Evas_Object *mp_common_load_edj(Evas_Object * parent, const char *file, const char *group);
+
+char *mp_common_track_list_label_get(void *data, Evas_Object * obj, const char *part);
+Evas_Object *mp_common_track_list_icon_get(void *data, Evas_Object * obj, const char *part);
+Evas_Object *mp_common_create_editfield_layout(Evas_Object * parent, struct appdata *ad, char *text);
+void mp_common_track_genlist_sel_cb(void *data, Evas_Object * obj, void *event_info);
+int mp_check_mass_storage_mode(void);
+int mp_check_db_initializing(void);
+int mp_commmon_check_rotate_lock(void);
+void mp_common_hide_search_ise_context(view_data_t * view_data);
+void mp_common_search_button_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_common_edit_button_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_common_back_button_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_common_item_check_changed_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_common_set_title_button_sensitivity(mp_layout_data_t * layout_data, int selected_count);
+void mp_common_change_item_class(Evas_Object * genlist, Elm_Genlist_Item_Class * itc);
+bool mp_common_track_get_aa_index(int index, mp_layout_data_t *layout_data, Elm_Object_Item *gli, bool is_item_del);
+void mp_common_navigationbar_finish_effect(void *data, Evas_Object * obj, void *event_info);
+
+#endif // __mp_common_H__
diff --git a/src/common/include/mp-item.h b/src/common/include/mp-item.h
new file mode 100755
index 0000000..82edba1
--- /dev/null
+++ b/src/common/include/mp-item.h
@@ -0,0 +1,26 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_ITEM_H_
+#define __MP_ITEM_H_
+
+#include <Elementary.h>
+#include <mp-define.h>
+bool mp_item_update_db(MediaSvcHandle *media_svc_handle, char *fid);
+
+#endif
diff --git a/src/common/include/mp-menu.h b/src/common/include/mp-menu.h
new file mode 100755
index 0000000..d765666
--- /dev/null
+++ b/src/common/include/mp-menu.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_MENU_H_
+#define __MP_MENU_H_
+
+void mp_menu_delete_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_menu_add_to_playlist_cb(void *data, Evas_Object * obj, void *event_info);
+audio_svc_track_type_e mp_menu_get_track_type_by_group(audio_svc_group_type_e group_type);
+void mp_menu_add_to_play_list_cancel_create_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_menu_add_to_play_list_done_create_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_util_create_notify(void *data, const char *noti_msg);
+
+#endif // __MP_MENU_H_
diff --git a/src/common/include/mp-play.h b/src/common/include/mp-play.h
new file mode 100755
index 0000000..47ed31d
--- /dev/null
+++ b/src/common/include/mp-play.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_PLAY_H_
+#define __MP_PLAY_H_
+
+#include <Elementary.h>
+#include "mp-define.h"
+bool mp_play_item_play(void *data, char *fid);
+bool mp_play_current_file(void *data);
+bool mp_play_ready(void *data);
+bool mp_play_new_file(void *data, bool check_drm);
+bool mp_play_new_file_real(void *data, bool check_drm);
+void mp_play_prev_file(void *data);
+void mp_play_next_file(void *data, bool forced);
+void mp_play_start(void *data);
+void mp_play_pause(void *data);
+void mp_play_stop(void *data);
+void mp_play_resume(void *data);
+bool mp_play_destory(void *data);
+#endif /*__DEF_music_player_contro_H_*/
diff --git a/src/common/include/mp-util.h b/src/common/include/mp-util.h
new file mode 100755
index 0000000..121751f
--- /dev/null
+++ b/src/common/include/mp-util.h
@@ -0,0 +1,107 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_UTIL_H_
+#define __MP_UTIL_H_
+
+#include "music.h"
+#include "mp-view-layout.h"
+
+typedef enum
+{
+ MP_FILE_DELETE_ERR_USING = -2,
+ MP_FILE_DELETE_ERR_REMOVE_FAIL = -1,
+ MP_FILE_DELETE_ERR_INVALID_FID = 0,
+ MP_FILE_DELETE_ERR_NONE,
+}mp_file_delete_err_t;
+
+bool mp_util_check_uri_available(const char *uri);
+bool mp_check_file_exist (const char *path);
+void mp_util_format_duration(char *time, int ms);
+bool mp_util_add_to_playlist_by_key(MediaSvcHandle *handle, int plst_id, char *key_id);
+Evas_Object * mp_util_create_thumb_icon(Evas_Object *obj, const char *path, int w, int h);
+const char* mp_util_get_index(const char *p);
+const char* mp_util_get_second_index(const char *p);
+void mp_util_create_selectioninfo_with_count(void* data, int count);
+char * mp_util_get_new_playlist_name (MediaSvcHandle *handle);
+bool mp_util_add_selected_items_to_playlist(Evas_Object *genlist, int playlist_id);
+mp_file_delete_err_t mp_util_delete_track(void *data, char *fid, char *file_path, bool show_popup);
+Eina_Bool mp_util_is_item_in_playlist (MediaSvcHandle *handle, gint plst_id, char *key_id);
+bool mp_util_check_item_exist_in_playlist (MediaSvcHandle *handle, gint plst_id, char *key_id);
+
+int mp_util_file_is_in_phone_memory(const char *path);
+
+char* mp_util_get_playlist_thumbpath(MediaSvcHandle *handle, AudioHandleType *plst);
+char *mp_util_get_fid_by_handle(mp_layout_data_t *layout_data, AudioHandleType *record);
+char* mp_util_get_path_by_handle(mp_layout_data_t *layout_data , AudioHandleType *record);
+Elm_Object_Item * mp_util_get_genlist_item_by_item_handle(Evas_Object *genlist, AudioHandleType *handle);
+ char* mp_util_isf_get_edited_str(Evas_Object *isf_entry, bool permit_first_blank);
+ int mp_util_create_playlist(struct appdata *ad, char *name);
+
+bool mp_util_launch_browser(const char *url, struct appdata *ad);
+
+
+#define mp_object_free(obj) \
+do { \
+ if(obj != NULL) { \
+ g_free(obj); \
+ obj = NULL; \
+ } \
+}while(0)
+
+#define MMC_PATH MP_MMC_ROOT_PATH
+
+gchar *mp_util_get_utf8_initial(const char *name);
+gchar * mp_get_new_playlist_name (void);
+gchar *mp_parse_get_title_from_path (const gchar *path);
+char *mp_util_item_get_value_by_type(audio_svc_track_data_type_e item_type,struct music_list_item *item);
+char *mp_util_get_title_from_path (const char *path);
+bool mp_util_is_playlist_name_valid(char *name);
+bool mp_util_get_recent_play_data(mp_layout_data_t *layout_data, int *index, char **path);
+bool mp_util_get_playlist_data(mp_layout_data_t *layout_data, int *index, const char *playlist_name);
+bool mp_util_get_list_data(mp_layout_data_t *layout_data);
+void mp_util_set_library_controlbar_items(void *data);
+
+bool mp_util_get_uri_from_app_svc(bundle * b, struct appdata *ad, char **path);
+void mp_util_reset_genlist_mode_item(Evas_Object *genlist);
+view_data_t * mp_util_get_view_data(struct appdata *ad);
+mp_layout_data_t* mp_util_get_layout_data(Evas_Object* obj);
+
+bool mp_util_is_image_valid(Evas *evas, const char *path);
+char *mp_util_shorten_path(char *path_info);
+
+void mp_util_grab_mm_keys(struct appdata *ad);
+void mp_util_ungrab_mm_keys(struct appdata *ad);
+
+void mp_util_unset_rename(mp_layout_data_t * layout_data);
+bool mp_util_is_db_updating(void);
+void mp_util_stop_vibration(struct appdata *ad);
+bool mp_util_play_vibration(struct appdata *ad, float duration);
+
+bool mp_util_is_bt_connected(void);
+bool mp_util_is_earjack_inserted(void);
+void mp_util_get_sound_path(mp_snd_path *snd_path);
+
+const char * mp_util_search_markup_keyword(const char *string, char *searchword, bool *result);
+
+inline Elm_Object_Item *mp_util_toolbar_append_object(Evas_Object *toolbar, Evas_Object *obj, int sel);
+bool mp_util_toolbar_item_valid_check(Elm_Object_Item *item);
+
+
+ #endif //__MP_UTIL_H_
+
diff --git a/src/common/include/mp-view-manager.h b/src/common/include/mp-view-manager.h
new file mode 100755
index 0000000..7096f24
--- /dev/null
+++ b/src/common/include/mp-view-manager.h
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_VIEW_MANAGER_H_
+#define __MP_VIEW_MANAGER_H_
+
+#include "music.h"
+#include "mp-view-layout.h"
+
+typedef enum
+{
+ MP_VIEW_CONTENT_LIST,
+ MP_VIEW_CONTENT_EDIT,
+ MP_VIEW_CONTENT_PLAY,
+ MP_VIEW_CONTENT_NEW_PLAYLIST,
+ MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP,
+ MP_VIEW_CONTENT_NEW_PLAYLIST_BY_EDIT,
+ MP_VIEW_CONTENT_INFO,
+ MP_VIEW_CONTENT_SEARCH,
+ MP_VIEW_CONTENT_MAX,
+} mp_view_content_t;
+
+typedef enum
+{
+ MP_NAVI_CONTROL_BUTTON1,
+ MP_NAVI_CONTROL_BUTTON2,
+ MP_NAVI_CONTROL_BUTTON3,
+ MP_NAVI_CONTROL_BUTTON4,
+ MP_NAVI_CONTROL_BUTTON5,
+ MP_NAVI_CONTROL_SEARCH,
+ MP_NAVI_CONTROL_BUTTON_MAX,
+} mp_navi_control_button_type;
+
+void mp_view_manager_push_view_content(view_data_t * view_data, Evas_Object * content, mp_view_content_t type);
+void mp_view_manager_pop_view_content(view_data_t * view_data, bool pop_to_first, bool pop_content);
+Evas_Object *mp_view_manager_get_last_view_layout(struct appdata *ad);
+Evas_Object *mp_view_manager_get_first_view_layout(struct appdata *ad);
+Evas_Object *mp_view_manager_get_edit_view_layout(struct appdata *ad);
+Evas_Object *mp_view_manager_get_view_layout(struct appdata *ad, mp_view_content_t type);
+
+int mp_view_manager_count_view_content(view_data_t * view_data);
+bool mp_view_manager_is_play_view(struct appdata *ad);
+void mp_view_manager_update_list_contents(view_data_t * view_data, bool update_edit_list);
+void mp_view_manager_set_title_and_buttons(view_data_t * view_data, char *title, void *data);
+
+void mp_view_manager_set_now_playing(view_data_t * view_data, bool show);
+void mp_view_manager_freeze_progress_timer(struct appdata *ad);
+void mp_view_manager_thaw_progress_timer(struct appdata *ad);
+
+Elm_Object_Item *mp_view_manager_get_edit_controlbar_item(struct appdata *ad);
+Elm_Object_Item *mp_view_manager_get_search_controlbar_item(struct appdata *ad);
+Elm_Object_Item *mp_view_manager_get_cancel_controlbar_item(struct appdata * ad);
+Elm_Object_Item *mp_view_manager_get_controlbar_item(struct appdata *ad, mp_navi_control_button_type type);
+void mp_view_manager_play_view_title_label_set(struct appdata *ad, const char *title);
+
+void mp_view_manager_pop_info_view(struct appdata *ad);
+void mp_view_manager_pop_play_view(struct appdata *ad);
+
+void mp_view_manager_unswallow_info_ug_layout(struct appdata *ad);
+
+void mp_view_manager_set_option_header_visible(Elm_Object_Item *navi_item, mp_view_content_t content_type);
+Elm_Object_Item * mp_view_manager_get_play_view_navi_item(struct appdata *ad);
+
+#endif //__MP_VIEW_MANAGER_H_
diff --git a/src/common/include/mp-widget.h b/src/common/include/mp-widget.h
new file mode 100755
index 0000000..57e7540
--- /dev/null
+++ b/src/common/include/mp-widget.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_WIDGET_H_
+#define __MP_WIDGET_H_
+
+#include "music.h"
+
+Evas_Object *mp_widget_navigation_new(Evas_Object * parent, struct appdata *ad);
+Evas_Object *mp_widget_genlist_create(struct appdata *ad, Evas_Object * parent, bool homogeneous);
+bool mp_widget_check_lowbattery(void *data, Evas_Object * parent);
+bool mp_widget_load_fastscroller(Evas_Object * index, struct music_list_item *item, char **latest_string);
+int mp_widget_text_popup(void *data, const char *message);
+Evas_Object *mp_widget_create_icon(Evas_Object * obj, const char *path, int w, int h);
+Evas_Object *mp_widget_create_bgimg(Evas_Object * parent);
+Evas_Object *mp_widget_create_button(Evas_Object * parent, char *style, char *caption, Evas_Object * icon,
+ void (*func) (void *, Evas_Object *, void *), void *data);
+Evas_Object * mp_widget_create_editfield(Evas_Object * parent, int limit_size, char *guide_txt, struct appdata *ad);
+Evas_Object * mp_widget_editfield_entry_get(Evas_Object *editfield);
+Evas_Object * mp_widget_create_title_btn(Evas_Object *parent, const char *text, const char * icon_path, Evas_Smart_Cb func, void *data);
+#endif
diff --git a/src/common/mp-app.c b/src/common/mp-app.c
new file mode 100755
index 0000000..81f8a97
--- /dev/null
+++ b/src/common/mp-app.c
@@ -0,0 +1,811 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include "mp-library.h"
+#include "mp-setting-ctrl.h"
+#include "mp-item.h"
+#include "mp-player-control.h"
+#include "mp-play-view.h"
+#include "mp-common.h"
+#include "mp-play-list.h"
+#include "mp-group-view.h"
+
+#include <signal.h>
+#include <aul.h>
+#include <glib.h>
+#include <glib-object.h>
+#include "mp-player-mgr.h"
+#include "mp-player-debug.h"
+#include <utilX.h>
+#include <syspopup_caller.h>
+#include <pthread.h>
+
+#include "mp-play.h"
+#include "mp-app.h"
+#include "ui-gadget.h"
+#include "mp-widget.h"
+#include "mp-util.h"
+
+static void _mp_add_inofity_refresh_watch(struct appdata *ad);
+
+static Eina_Bool
+_mp_app_ear_key_timer_cb(void *data)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)data;
+ if (ad->ear_key_press_cnt == 1)
+ {
+ DEBUG_TRACE("play/pause ctrl");
+ if (ad->player_state == PLAY_STATE_PLAYING)
+ {
+ ad->paused_by_user = TRUE;
+ mp_player_mgr_pause(ad);
+ }
+ else if (ad->player_state == PLAY_STATE_PAUSED)
+ {
+ ad->paused_by_user = FALSE;
+ mp_player_mgr_resume(ad);
+ }
+ else if (ad->player_state == PLAY_STATE_READY)
+ {
+ ad->paused_by_user = FALSE;
+ mp_play_current_file(ad);
+ }
+ else
+ {
+ ad->paused_by_user = FALSE;
+ mp_play_new_file(ad, TRUE);
+ }
+ }
+ else if (ad->ear_key_press_cnt == 2)
+ {
+ DEBUG_TRACE("next ctrl");
+ mp_play_next_file(data, TRUE);
+ }
+ else
+ {
+ DEBUG_TRACE("prev ctrl");
+ mp_play_prev_file(data);
+ }
+
+ ad->ear_key_press_cnt = 0;
+ ecore_timer_del(ad->ear_key_timer);
+ ad->ear_key_timer = NULL;
+ return EINA_FALSE;
+}
+
+void
+_mp_app_noti_changed_cb(keynode_t * node, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ char *keyname = vconf_keynode_get_name(node);
+
+ DEBUG_TRACE("key changed: %s", keyname);
+
+ if (strcmp(keyname, VCONFKEY_FILEMANAGER_DB_STATUS) == 0)
+ {
+ int db_state = vconf_keynode_get_int(node);
+ if(db_state == VCONFKEY_FILEMANAGER_DB_UPDATED)
+ {
+ if (mp_play_list_get_current_item(ad->playing_list)
+ && strstr(mp_play_list_get_current_item(ad->playing_list)->filename, MP_MMC_ROOT_PATH))
+ mp_play_stop_and_updateview(ad, TRUE);
+ else
+ mp_library_update_view(ad);
+ _mp_add_inofity_refresh_watch(ad);
+ }
+ }
+ else if (strcmp(keyname, VCONFKEY_SETAPPL_SOUND_STATUS_BOOL) == 0)
+ {
+ bool profile = vconf_keynode_get_bool(node);
+ DEBUG_TRACE("profile changed: %d", profile);
+ if (profile == false)
+ mp_player_mgr_pause(ad);
+ }
+ else if (strcmp(keyname, VCONFKEY_SYSMAN_EARJACKKEY) == 0)
+ {
+ if (vconf_keynode_get_int(node))
+ {
+ DEBUG_TRACE("Key pressed");
+ if (ad->ear_key_press_cnt > 3)
+ {
+ DEBUG_TRACE("pressed more than 3times");
+ return;
+ }
+ if (ad->ear_key_timer)
+ {
+ ecore_timer_del(ad->ear_key_timer);
+ ad->ear_key_timer = NULL;
+ }
+ ad->ear_key_timer = ecore_timer_add(0.4, _mp_app_ear_key_timer_cb, ad);
+
+ ad->ear_key_press_cnt++;
+ }
+
+ }
+ else if (strcmp(keyname, VCONFKEY_USB_STORAGE_STATUS) == 0)
+ {
+ int usb_mode = vconf_keynode_get_int(node);
+ DEBUG_TRACE("usb_mode changed: %d", usb_mode);
+ if (usb_mode != VCONFKEY_USB_STORAGE_STATUS_OFF)
+ {
+ mp_play_stop_and_updateview(ad, FALSE);
+ }
+ }
+ else if (strcmp(keyname, VCONFKEY_SYSMAN_EARJACK) == 0)
+ {
+ mp_play_view_update_snd_path(ad);
+ }
+}
+
+bool
+mp_app_noti_init(void *data)
+{
+ struct appdata *ad = data;
+ bool res = TRUE;
+ if (vconf_notify_key_changed(VCONFKEY_FILEMANAGER_DB_STATUS, _mp_app_noti_changed_cb, ad) < 0)
+ {
+ ERROR_TRACE("Error when register callback\n");
+ res = FALSE;
+ }
+ if (vconf_notify_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, _mp_app_noti_changed_cb, ad) < 0)
+ {
+ ERROR_TRACE("Fail to register VCONFKEY_MUSIC_MENU_CHANGE key callback");
+ res = FALSE;
+ }
+ if (vconf_notify_key_changed(VCONFKEY_SYSMAN_EARJACKKEY, _mp_app_noti_changed_cb, ad) < 0)
+ {
+ ERROR_TRACE("Fail to register VCONFKEY_SYSMAN_EARJACKKEY key callback");
+ res = FALSE;
+ }
+ if (vconf_notify_key_changed(VCONFKEY_USB_STORAGE_STATUS, _mp_app_noti_changed_cb, ad) < 0)
+ {
+ ERROR_TRACE("Fail to register VCONFKEY_USB_STORAGE_STATUS key callback");
+ res = FALSE;
+ }
+ if (vconf_notify_key_changed(VCONFKEY_SYSMAN_EARJACK, _mp_app_noti_changed_cb, ad) < 0)
+ {
+ ERROR_TRACE("Fail to register VCONFKEY_SYSMAN_EARJACK key callback");
+ res = FALSE;
+ }
+ return res;
+}
+
+bool
+mp_app_noti_ignore(void)
+{
+ if (vconf_ignore_key_changed(VCONFKEY_FILEMANAGER_DB_STATUS, _mp_app_noti_changed_cb) < 0)
+ {
+ ERROR_TRACE("Error when ignore callback\n");
+ return FALSE;
+ }
+ if (vconf_ignore_key_changed(VCONFKEY_SETAPPL_SOUND_STATUS_BOOL, _mp_app_noti_changed_cb) < 0)
+ {
+ ERROR_TRACE("Error when ignore callback\n");
+ return FALSE;
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SYSMAN_EARJACKKEY, _mp_app_noti_changed_cb) < 0)
+ {
+ ERROR_TRACE("Error when ignore callback\n");
+ return FALSE;
+ }
+
+ if (vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, _mp_app_noti_changed_cb) < 0)
+ {
+ ERROR_TRACE("Error when ignore callback\n");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+#define MP_WATCH_FLAGS IN_CREATE | IN_DELETE | IN_DELETE_SELF | IN_CLOSE_WRITE | IN_MOVED_TO
+#define MP_EVENT_SIZE (sizeof (struct inotify_event))
+#define MP_EVENT_BUF_LEN (1024 * (MP_EVENT_SIZE + 16))
+
+typedef struct _mp_inotify_t
+{
+ int fd;
+ GList *wd_list;
+ unsigned int prev_event;
+ pthread_t monitor;
+ mp_inotify_cb callback;
+ void *u_data;
+} mp_inotify_t;
+
+static pthread_mutex_t mp_noti_lock;
+static mp_inotify_t *g_handle;
+
+static void
+_mp_app_inotify_handle_free(void)
+{
+ pthread_mutex_destroy(&mp_noti_lock);
+
+ if (g_handle)
+ {
+ if (g_handle->fd >= 0)
+ {
+ close(g_handle->fd);
+ g_handle->fd = -1;
+ }
+ g_free(g_handle);
+ g_handle = NULL;
+ }
+
+ return;
+}
+
+static mp_inotify_t *
+_mp_app_inotify_handle_init(void)
+{
+ _mp_app_inotify_handle_free();
+ g_handle = g_new0(mp_inotify_t, 1);
+
+ if (g_handle)
+ {
+ g_handle->fd = -1;
+ pthread_mutex_init(&mp_noti_lock, NULL);
+ }
+
+ return g_handle;
+}
+
+static void
+_mp_app_inotify_thread_clean_up(void *data)
+{
+ pthread_mutex_t *lock = (pthread_mutex_t *) data;
+ DEBUG_TRACE("Thread cancel Clean_up function");
+ if (lock)
+ {
+ pthread_mutex_unlock(lock);
+ }
+ return;
+}
+
+
+static gpointer
+_mp_app_inotify_watch_thread(gpointer user_data)
+{
+ mp_inotify_t *handle = (mp_inotify_t *) user_data;
+ int oldtype = 0;
+
+ mp_retvm_if(handle == NULL, NULL, "handle is NULL");
+ DEBUG_TRACE("Create _mp_app_inotify_watch_thread!!! ");
+
+ pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype);
+
+ while (1)
+ {
+ ssize_t len = 0;
+ ssize_t i = 0;
+ char event_buff[MP_EVENT_BUF_LEN] = { 0, };
+
+ if (handle->fd < 0)
+ {
+ ERROR_TRACE("fd is not a vaild one");
+ pthread_exit(NULL);
+ }
+
+ len = read(handle->fd, event_buff, sizeof(event_buff) - 1);
+ if (len <= 0 || len > sizeof(event_buff) - 1)
+ {
+ ERROR_TRACE("Fail to read() -fd : %d, len : %d", handle->fd, len);
+ }
+
+ while (i < len)
+ {
+ struct inotify_event *pevent = (struct inotify_event *)&event_buff[i];
+ mp_inotify_event s_event = MP_INOTI_NONE;
+
+ if (pevent->len && strncmp(pevent->name, ".", 1) == 0)
+ {
+ s_event = MP_INOTI_NONE;
+ }
+ else if (pevent->mask & IN_ISDIR)
+ {
+
+ }
+ else
+ {
+ if (pevent->mask & IN_CREATE)
+ {
+ s_event = MP_INOTI_NONE;
+ handle->prev_event = IN_CREATE;
+ }
+
+ if (pevent->mask & IN_CLOSE_WRITE)
+ {
+ if (handle->prev_event == IN_CREATE)
+ {
+ s_event = MP_INOTI_CREATE;
+ }
+ handle->prev_event = MP_INOTI_NONE;
+ }
+
+ if (pevent->mask & IN_DELETE)
+ s_event = MP_INOTI_DELETE;
+
+ if (pevent->mask & IN_MODIFY)
+ {
+ s_event = MP_INOTI_MODIFY;
+ }
+
+ if (pevent->mask & IN_MOVED_TO)
+ {
+ s_event = MP_INOTI_MOVE_OUT;
+ }
+ }
+
+ if (s_event != MP_INOTI_NONE)
+ {
+ pthread_cleanup_push(_mp_app_inotify_thread_clean_up, (void *)&mp_noti_lock);
+ pthread_mutex_lock(&mp_noti_lock);
+ if (handle->callback)
+ {
+ handle->callback(s_event, (pevent->len) ? pevent->name : NULL, handle->u_data);
+ }
+ pthread_mutex_unlock(&mp_noti_lock);
+ pthread_cleanup_pop(0);
+ }
+
+ i += sizeof(struct inotify_event) + pevent->len;
+
+ if (i >= MP_EVENT_BUF_LEN)
+ break;
+ }
+ }
+
+ DEBUG_TRACE("end _mp_app_inotify_watch_thread!!! ");
+
+ return NULL;
+}
+
+Ecore_Timer *_g_inotyfy_timer = NULL;
+
+static Eina_Bool
+_mp_app_inotify_timer_cb(void *data)
+{
+ bool b_invalid_playing_file = false;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ if (ad->edit_in_progress)
+ {
+ DEBUG_TRACE("editing in progress. not refresh list...");
+ return false;
+ }
+
+ DEBUG_TRACE("update view");
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+
+ if (current_item)
+ {
+ if (mp_util_check_uri_available(current_item->filename))
+ {
+ mp_debug("http uri path");
+ }
+ else if (!g_file_test(current_item->filename, G_FILE_TEST_EXISTS))
+ {
+ mp_play_stop_and_updateview(ad, FALSE);
+ b_invalid_playing_file = true;
+ }
+ }
+
+ mp_library_update_view(ad);
+
+ _g_inotyfy_timer = NULL;
+ return EINA_FALSE;
+}
+
+static void
+_mp_app_inotify_cb(mp_inotify_event event, char *path, void *data)
+{
+ DEBUG_TRACE("file operation occured...");
+
+ struct appdata *ad = (struct appdata *)data;
+
+ MP_CHECK(path);
+
+ ecore_pipe_write(ad->inotify_pipe, path, strlen(path));
+}
+
+void
+_mp_app_inotify_add_recursive_watch(const char *path, void *ad)
+{
+
+ DIR *dp = NULL;
+ struct dirent *entry = NULL;
+ char *sub_path = NULL;
+ sub_path = strdup(path);
+ if (mp_app_inotify_add_watch(sub_path, _mp_app_inotify_cb, ad) < 0)
+ {
+ IF_FREE(sub_path);
+ return;
+ }
+
+ dp = opendir(sub_path);
+ if (dp == NULL)
+ return;
+
+ while ((entry = (struct dirent *)readdir(dp)) != NULL)
+ {
+ if (entry->d_name[0] == '.')
+ continue;
+
+ IF_FREE(sub_path);
+ sub_path = g_strdup_printf("%s/%s", path, entry->d_name);
+ if (entry->d_type == DT_DIR)
+ _mp_app_inotify_add_recursive_watch(sub_path, ad);
+ }
+ IF_FREE(sub_path);
+
+ closedir(dp);
+
+}
+
+static void
+_mp_app_pipe_cb(void *data, void *path, unsigned int nbyte)
+{
+ struct appdata *ad = (struct appdata *)data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("%s modified..", path);
+ mp_retm_if(ad->prohibit_aul_relaunch, "Do not refresh list");
+
+ if (_g_inotyfy_timer)
+ ecore_timer_del(_g_inotyfy_timer);
+ _g_inotyfy_timer = ecore_timer_add(0.5, _mp_app_inotify_timer_cb, data);
+
+
+}
+
+static void
+_mp_add_inofity_refresh_watch(struct appdata *ad)
+{
+ mp_inotify_t *handle = NULL;
+ handle = g_handle;
+
+ MP_CHECK(handle);
+
+ GList *wd_list = handle->wd_list;
+ while(wd_list)
+ {
+ if(wd_list->data >=0)
+ mp_app_inotify_rm_watch((int)wd_list->data);
+ wd_list = g_list_delete_link(wd_list, wd_list);
+ }
+
+ _mp_app_inotify_add_recursive_watch(MP_MMC_ROOT_PATH, ad);
+ _mp_app_inotify_add_recursive_watch(MP_PHONE_ROOT_PATH, ad);
+
+}
+
+int
+mp_app_inotify_init(void *data)
+{
+
+ struct appdata *ad = data;
+
+ mp_inotify_t *handle = NULL;
+ handle = _mp_app_inotify_handle_init();
+ mp_retvm_if(handle == NULL, -1, "fail to _mp_app_inotify_handle_init()");
+
+ handle->fd = inotify_init();
+
+ if (handle->fd < 0)
+ {
+ switch (errno)
+ {
+ case EMFILE:
+ ERROR_TRACE("The user limit on the total number of inotify instances has been reached.\n");
+ break;
+ case ENFILE:
+ ERROR_TRACE("The system limit on the total number of file descriptors has been reached.\n");
+ break;
+ case ENOMEM:
+ ERROR_TRACE("Insufficient kernel memory is available.\n");
+ break;
+ default:
+ ERROR_TRACE("Fail to inotify_init(), Unknown error.\n");
+ break;
+ }
+ return -1;
+ }
+ pthread_create(&handle->monitor, NULL, _mp_app_inotify_watch_thread, handle);
+
+ _mp_app_inotify_add_recursive_watch(MP_MMC_ROOT_PATH, ad);
+ _mp_app_inotify_add_recursive_watch(MP_PHONE_ROOT_PATH, ad);
+
+ ad->inotify_pipe = ecore_pipe_add(_mp_app_pipe_cb, (const void *)ad);
+
+ return 0;
+}
+
+int
+mp_app_inotify_add_watch(const char *path, mp_inotify_cb callback, void *user_data)
+{
+ mp_inotify_t *handle = NULL;
+ GList *wd_list;
+ int wd;
+
+ handle = g_handle;
+ MP_CHECK_VAL(handle, -1);
+
+ pthread_mutex_lock(&mp_noti_lock);
+
+ wd_list = handle->wd_list;
+ wd = inotify_add_watch(handle->fd, path, MP_WATCH_FLAGS);
+ if (wd < 0)
+ {
+ switch (errno)
+ {
+ case EACCES:
+ ERROR_TRACE("Read access to the given file is not permitted.\n");
+ break;
+ case EBADF:
+ ERROR_TRACE("The given file descriptor is not valid.\n");
+ handle->fd = -1;
+ break;
+ case EFAULT:
+ ERROR_TRACE("pathname points outside of the process's accessible address space.\n");
+ break;
+ case EINVAL:
+ ERROR_TRACE
+ ("The given event mask contains no legal events; or fd is not an inotify file descriptor.\n");
+ break;
+ case ENOMEM:
+ ERROR_TRACE("Insufficient kernel memory is available.\n");
+ break;
+ case ENOSPC:
+ ERROR_TRACE
+ ("The user limit on the total number of inotify watches was reached or the kernel failed to allocate a needed resource.\n");
+ break;
+ default:
+ ERROR_TRACE("Fail to mp_inotify_add_watch(), Unknown error.\n");
+ break;
+ }
+ pthread_mutex_unlock(&mp_noti_lock);
+ return -1;
+ }
+
+ wd_list = g_list_append(wd_list, (gpointer)wd);
+
+ handle->callback = callback;
+ handle->u_data = user_data;
+ pthread_mutex_unlock(&mp_noti_lock);
+
+ return 0;
+}
+
+int
+mp_app_inotify_rm_watch(int wd)
+{
+ int ret = -1;
+ mp_inotify_t *handle = NULL;
+
+ handle = g_handle;
+ mp_retvm_if(handle == NULL, -1, "handle is NULL");
+
+ if (handle->fd < 0 || wd < 0)
+ {
+ WARN_TRACE
+ ("inotify is not initialized or has no watching dir - fd [%d] wd [%d]",
+ handle->fd, wd);
+ return 0;
+ }
+
+ pthread_mutex_lock(&mp_noti_lock);
+
+ ret = inotify_rm_watch(handle->fd, wd);
+ if (ret < 0)
+ {
+ switch (errno)
+ {
+ case EBADF:
+ ERROR_TRACE("fd is not a valid file descriptor\n");
+ handle->fd = -1;
+ break;
+ case EINVAL:
+ ERROR_TRACE("The watch descriptor wd is not valid; or fd is not an inotify file descriptor.\n");
+ break;
+ default:
+ ERROR_TRACE("Fail to mp_inotify_add_watch(), Unknown error.\n");
+ break;
+ }
+ pthread_mutex_unlock(&mp_noti_lock);
+ return -1;
+ }
+ pthread_mutex_unlock(&mp_noti_lock);
+
+ return 0;
+}
+
+static void
+_mp_app_inotify_wd_list_destroy(gpointer data)
+{
+ mp_app_inotify_rm_watch((int)data);
+}
+
+void
+mp_app_inotify_finalize(struct appdata *ad)
+{
+ mp_inotify_t *handle = NULL;
+ handle = g_handle;
+
+ mp_retm_if(handle == NULL, "handle is NULL");
+
+ if (ad->inotify_pipe)
+ {
+ ecore_pipe_del(ad->inotify_pipe);
+ ad->inotify_pipe = NULL;
+ }
+
+ g_list_free_full(handle->wd_list, _mp_app_inotify_wd_list_destroy);
+ handle->wd_list = NULL;
+
+ pthread_cancel(handle->monitor);
+ pthread_join(handle->monitor, NULL);
+
+ _mp_app_inotify_handle_free();
+
+ return;
+}
+
+void
+mp_app_exit(void *data)
+{
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("player_state [%d]\n", ad->player_state);
+
+ elm_exit();
+}
+
+#define CTR_EDJ_SIG_SRC "ctrl_edj"
+
+Eina_Bool
+mp_app_hard_key_down_cb(void *data, int type, void *event_info)
+{
+ Ecore_Event_Key *ev = event_info;
+ struct appdata *ad = (struct appdata *)data;
+
+ DEBUG_TRACE("%s", ev->keyname);
+
+ if (!strcmp(ev->keyname, KEY_END))
+ {
+ DEBUG_TRACE("KEY_END");
+ mp_app_exit(ad);
+ return ECORE_CALLBACK_DONE;
+ }
+ else if(!strcmp(ev->keyname, KEY_NEXTSONG))
+ {
+ mp_play_control_ff_cb(data, NULL, "ff_btn_down", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(ev->keyname, KEY_PREVIOUSSONG))
+ {
+ mp_play_control_rew_cb(data, NULL, "rew_btn_down", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(ev->keyname, "XF86AudioForward"))
+ {
+ mp_play_control_ff_cb(data, NULL, "ff_btn_down", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(ev->keyname, KEY_REWIND))
+ {
+ mp_play_control_rew_cb(data, NULL, "rew_btn_down", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(ev->keyname, KEY_SELECT))
+ {
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PAUSE, NULL);
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+Eina_Bool
+mp_app_hard_key_up_cb(void *data, int type, void *event_info)
+{
+ Ecore_Event_Key *ev = event_info;
+ struct appdata *ad = (struct appdata *)data;
+
+ DEBUG_TRACE("%s", ev->keyname);
+
+ if (!strcmp(ev->keyname, KEY_END))
+ {
+ DEBUG_TRACE("KEY_END");
+ return ECORE_CALLBACK_DONE;
+ }
+ else if(!strcmp(ev->keyname, KEY_NEXTSONG))
+ {
+ mp_play_control_ff_cb(data, NULL, "ff_btn_up", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(ev->keyname, KEY_PREVIOUSSONG))
+ {
+ mp_play_control_rew_cb(data, NULL, "rew_btn_up", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(ev->keyname, KEY_PAUSECD) || !strcmp(ev->keyname, KEY_PLAYCD))
+ {
+ if (ad->player_state != PLAY_STATE_PLAYING)
+ {
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PLAY, NULL);
+ }
+ else
+ {
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PAUSE, NULL);
+ }
+ }
+ else if(!strcmp(ev->keyname, KEY_FASTFORWARD))
+ {
+ mp_play_control_ff_cb(data, NULL, "ff_btn_up", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(ev->keyname, KEY_REWIND))
+ {
+ mp_play_control_rew_cb(data, NULL, "rew_btn_up", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(ev->keyname, KEY_SELECT))
+ {
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PAUSE, NULL);
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+void
+_mp_app_ext_control_key_changed_cb(keynode_t * node, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ char *keyname = vconf_keynode_get_name(node);
+
+ DEBUG_TRACE("key changed: %s", keyname);
+
+ if (strcmp(keyname, MP_EXT_PLAY_CLICKED) == 0 ||strcmp(keyname, MP_EXT_PAUSE_CLICKED) == 0 )
+ {
+ if (ad->player_state != PLAY_STATE_PLAYING)
+ {
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PLAY, NULL);
+ }
+ else
+ {
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PAUSE, NULL);
+ }
+ }
+ else if(!strcmp(keyname, MP_EXT_NEXT_PRESSED))
+ {
+ ad->seek_off = true;
+ mp_play_control_ff_cb(data, NULL, "ff_btn_down", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(keyname, MP_EXT_PREV_PRESSED))
+ {
+ ad->seek_off = true;
+ mp_play_control_rew_cb(data, NULL, "rew_btn_down", CTR_EDJ_SIG_SRC);
+ }
+ else if(!strcmp(keyname, MP_EXT_NEXT_RELEASED))
+ {
+ mp_play_control_ff_cb(data, NULL, "ff_btn_up", CTR_EDJ_SIG_SRC);
+ ad->seek_off = false;
+ }
+ else if(!strcmp(keyname, MP_EXT_PREV_RELEASED))
+ {
+ mp_play_control_rew_cb(data, NULL, "rew_btn_up", CTR_EDJ_SIG_SRC);
+ ad->seek_off = false;
+ }
+}
+
+
diff --git a/src/common/mp-common.c b/src/common/mp-common.c
new file mode 100755
index 0000000..310fb58
--- /dev/null
+++ b/src/common/mp-common.c
@@ -0,0 +1,747 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <Ecore_X.h>
+#include <appcore-efl.h>
+#include <vconf.h>
+
+#include "mp-common.h"
+#include "mp-player-debug.h"
+
+#include "audio-svc.h"
+#include "mp-view-layout.h"
+#include "mp-util.h"
+#include "mp-menu.h"
+#include "mp-play-view.h"
+#include "mp-playlist-view.h"
+#include "mp-edit-view.h"
+#include "mp-search.h"
+#include "mp-view-manager.h"
+#include "mp-widget.h"
+#include "mp-library.h"
+#include "mp-player-control.h"
+
+static Evas_Object *g_main_win;
+
+static void
+_mp_common_win_del(void *data, Evas_Object * obj, void *event)
+{
+ elm_exit();
+}
+
+Evas_Object *
+mp_create_win(const char *name)
+{
+ Evas_Object *eo;
+ int w, h;
+
+ if (g_main_win)
+ return g_main_win;
+
+ g_main_win = eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+ if (eo)
+ {
+ elm_win_title_set(eo, name);
+ elm_win_borderless_set(eo, EINA_TRUE);
+ evas_object_smart_callback_add(eo, "delete,request", _mp_common_win_del, NULL);
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_resize(eo, w, h);
+ }
+
+ return eo;
+}
+
+Evas_Object *
+mp_get_main_win(void)
+{
+ if (!g_main_win)
+ ERROR_TRACE("main_win is NULL, create it first!!!!!");
+ return g_main_win;
+}
+
+int
+mp_commmon_check_rotate_lock(void)
+{
+ int lock = FALSE;
+ lock = -1;
+ if (!vconf_get_bool(VCONFKEY_SETAPPL_ROTATE_LOCK_BOOL, &lock))
+ {
+ mp_debug("lock state: %d", lock);
+ return lock;
+ }
+ else
+ return -1;
+}
+
+
+int
+mp_check_battery_available(void)
+{
+ int batt_state = -1;
+
+ if (!vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &batt_state))
+ {
+ /* low battery status
+ * VCONFKEY_SYSMAN_BAT_WARNING_LOW = 15 %
+ * VCONFKEY_SYSMAN_BAT_CRITICAL_LOW = 5 %
+ * VCONFKEY_SYSMAN_BAT_POWER_OFF = 1 %
+ * since 2011. 03. 02
+ */
+ if (batt_state <= VCONFKEY_SYSMAN_BAT_POWER_OFF) //VCONFKEY_SYSMAN_BAT_POWER_OFF - 1% remaninging
+ {
+ WARN_TRACE("batt_state: %d", batt_state);
+ return -1;
+ }
+ }
+ else
+ {
+ ERROR_TRACE("Fail to get battery status");
+ }
+ return 0;
+}
+
+int
+mp_check_mass_storage_mode(void)
+{
+ int mass_storage = -1;
+
+ if (!vconf_get_int(VCONFKEY_USB_STORAGE_STATUS, &mass_storage))
+ {
+ DEBUG_TRACE("current mass_storage : %d", mass_storage);
+ if (mass_storage != VCONFKEY_USB_STORAGE_STATUS_OFF)
+ return -1;
+ }
+ else
+ {
+ ERROR_TRACE("Fail to get status");
+ }
+ return 0;
+}
+
+inline Evas_Object *
+mp_common_load_edj(Evas_Object * parent, const char *file, const char *group)
+{
+ Evas_Object *eo = NULL;
+ int r = -1;
+
+ eo = elm_layout_add(parent);
+ if (eo)
+ {
+ r = elm_layout_file_set(eo, file, group);
+ if (!r)
+ {
+ evas_object_del(eo);
+ return NULL;
+ }
+ evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(eo);
+ }
+
+ return eo;
+}
+
+char *
+mp_common_track_list_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ MP_CHECK_NULL(item);
+ AudioHandleType *track = (AudioHandleType *) (item->handle);
+ mp_retvm_if(!track, NULL, "data is null");
+
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ MP_CHECK_NULL(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if (!strcmp(part, "elm.text.1"))
+ {
+ char *title = NULL;
+ int size = 0;
+ if (layout_data->playlist_id < 0)
+ audio_svc_list_item_get_val(track, 0, AUDIO_SVC_LIST_ITEM_TITLE, &title, &size, -1);
+ else
+ audio_svc_playlist_item_get_val(track, 0, AUDIO_SVC_PLAYLIST_ITEM_TITLE, &title, &size, -1);
+
+ mp_retv_if(!title, NULL);
+ if(layout_data->filter_str)
+ {
+ char *markup_name;
+ bool res = false;
+ markup_name = (char *)mp_util_search_markup_keyword(title, layout_data->filter_str, &res);
+ if(res)
+ return strdup(markup_name);
+ }
+ return elm_entry_utf8_to_markup(title);
+ }
+ else if (!strcmp(part, "elm.text.2"))
+ {
+ char *artist = NULL;
+ int size = 0;
+ if (layout_data->playlist_id < 0)
+ audio_svc_list_item_get_val(track, 0, AUDIO_SVC_LIST_ITEM_ARTIST, &artist, &size, -1);
+ else
+ audio_svc_playlist_item_get_val(track, 0, AUDIO_SVC_PLAYLIST_ITEM_ARTIST, &artist, &size, -1);
+ mp_retv_if(!artist, NULL);
+ return strdup(artist);
+ }
+ else if (!strcmp(part, "elm.text.3"))
+ {
+ int duration;
+ char time[16] = "";
+ if (layout_data->playlist_id < 0)
+ audio_svc_list_item_get_val(track, 0, AUDIO_SVC_LIST_ITEM_DURATION, &duration, -1);
+ else
+ audio_svc_playlist_item_get_val(track, 0, AUDIO_SVC_PLAYLIST_ITEM_DURATION, &duration, -1);
+
+ mp_util_format_duration(time, duration);
+ time[15] = '\0';
+ return strdup(time);
+ }
+ return NULL;
+}
+
+bool mp_common_track_get_aa_index(int index, mp_layout_data_t *layout_data, Elm_Object_Item *gli, bool is_item_del)
+{
+ MP_CHECK_FALSE(layout_data);
+ MP_CHECK_FALSE(gli);
+ MP_CHECK_FALSE(index >= 0);
+
+ if (!is_item_del) {
+ index = 0;
+ Elm_Object_Item *gli2 = elm_genlist_first_item_get(layout_data->genlist);
+ DEBUG_TRACE("gli=%p,gli2=%p", gli,gli2);
+ while (gli2) {
+ if(gli2 == gli)
+ break;
+ gli2 = elm_genlist_item_next_get(gli2);
+ DEBUG_TRACE("gli=%p,gli2=%p", gli,gli2);
+ index++;
+ }
+ }
+
+ int group_index = 0;
+ int sub_index = 0;
+ int item_count = 0;
+ int selected_index = 0;
+ for (; group_index < layout_data->aa_group_count; group_index++) {
+ item_count = layout_data->aa_item_count[group_index];
+ if(item_count > 0)
+ index--;
+ for (sub_index = 0; sub_index < item_count; sub_index++) {
+ index--;
+ if (index < 0) {
+ layout_data->selected_index = selected_index;
+ layout_data->selected_group_index = group_index;
+ layout_data->selected_album_sub_index = sub_index;
+ return TRUE;
+ }
+ selected_index++;
+ }
+ }
+
+ return FALSE;
+}
+
+static Eina_Bool
+_mp_common_update_view_idler_cb(void *data)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK_FALSE(layout_data);
+ mp_view_layout_update(layout_data->layout);
+ layout_data->load_item_idler = NULL;
+ return EINA_FALSE;
+}
+
+void
+mp_common_track_genlist_sel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ Elm_Object_Item *gli = (Elm_Object_Item *) event_info;
+ Elm_Object_Item *gli2 = NULL;
+ elm_genlist_item_selected_set(gli, FALSE);
+
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is NULL !!!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ MP_CHECK(layout_data->ad);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ if(layout_data->rename_git)
+ {
+ mp_playlist_view_rename_done_cb(layout_data, NULL, NULL);
+ return;
+ }
+
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) elm_object_item_data_get(gli);
+ MP_CHECK(item);
+
+ if (layout_data->ad->b_add_tracks)
+ {
+ item->checked = !item->checked;
+
+ if (item->checked)
+ layout_data->checked_count++;
+ else
+ layout_data->checked_count--;
+
+ if (layout_data->select_all_layout)
+ {
+ if (layout_data->item_count == layout_data->checked_count)
+ layout_data->select_all_checked = EINA_TRUE;
+ else
+ layout_data->select_all_checked = EINA_FALSE;
+
+ elm_check_state_pointer_set(layout_data->select_all_checkbox, &layout_data->select_all_checked);
+ }
+
+ //elm_genlist_item_update(item->it);
+ elm_genlist_item_fields_update(item->it, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT);
+ mp_util_create_selectioninfo_with_count(layout_data->ad, layout_data->checked_count);
+ mp_common_set_title_button_sensitivity(layout_data, layout_data->checked_count);
+
+ return;
+ }
+
+ if (layout_data->edit_mode)
+ {
+ mp_edit_view_genlist_sel_cb(data, obj, event_info);
+ return;
+ }
+ mp_util_reset_genlist_mode_item(layout_data->genlist);
+
+ int index = 0;
+ if(layout_data->is_item_del)
+ {
+ gli2 = elm_genlist_first_item_get(layout_data->genlist);
+ while(gli2)
+ {
+ if(gli2 == gli)
+ break;
+ gli2 = elm_genlist_item_next_get(gli2);
+ index++;
+ }
+
+ if (AUDIO_SVC_TRACK_BY_ARTIST == layout_data->track_type) {
+ bool ret_val = FALSE;
+ ret_val = mp_common_track_get_aa_index(index, layout_data, gli, layout_data->is_item_del);
+ if (ret_val) {
+ index = layout_data->selected_index;
+ }
+ } else if (AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type) {
+ --index;
+ }
+
+ if (layout_data->view_mode == MP_VIEW_MODE_DEFAULT)
+ {
+ mp_view_layout_update(layout_data->layout);
+ if(layout_data->load_item_idler)
+ ecore_idler_del(layout_data->load_item_idler);
+ layout_data->load_item_idler = ecore_idler_add(_mp_common_update_view_idler_cb, layout_data);
+ }
+ }
+ else
+ {
+ index = (int)data;
+ }
+ DEBUG_TRACE("track (%d) selected", index);
+
+ if(!mp_play_view_load_by_index(layout_data, index, FALSE))
+ mp_widget_text_popup(layout_data->ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"));
+ return;
+}
+
+Evas_Object *
+mp_common_track_list_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ MP_CHECK_NULL(item);
+ AudioHandleType *track = (AudioHandleType *) (item->handle);
+ mp_retvm_if(!track, NULL, "data is null");
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ mp_retvm_if(!layout_data, NULL, "list_data is null!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if (!strcmp(part, "elm.icon"))
+ {
+ char *thumbpath = NULL;
+ int size = 0;
+ if (layout_data->playlist_id < 0)
+ audio_svc_list_item_get_val(track, 0, AUDIO_SVC_LIST_ITEM_THUMBNAIL_PATH, &thumbpath, &size,
+ -1);
+ else
+ audio_svc_playlist_item_get_val(track, 0, AUDIO_SVC_PLAYLIST_ITEM_THUMBNAIL_PATH, &thumbpath,
+ &size, -1);
+ return mp_util_create_thumb_icon(obj, thumbpath, MP_LIST_ICON_SIZE, MP_LIST_ICON_SIZE);
+ }
+
+ Evas_Object *check = NULL;
+
+ if (elm_genlist_decorate_mode_get(obj) || layout_data->ad->b_add_tracks)
+ {
+ if (!strcmp(part, "elm.edit.icon.1"))
+ {
+ check = elm_check_add(obj);
+ elm_check_state_pointer_set(check, &item->checked);
+ evas_object_smart_callback_add(check, "changed", mp_common_item_check_changed_cb, item);
+ return check;
+ }
+ }
+
+ return NULL;
+}
+
+static Evas_Object *
+_mp_common_gl_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+ Evas_Object *editfield = NULL;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(obj);
+
+ if (!strcmp(part, "elm.icon"))
+ {
+ ad->editfiled_new_playlist = editfield =
+ mp_widget_create_editfield(obj, AUDIO_SVC_PLAYLIST_NAME_SIZE - 1, ad->new_playlist_name, ad);
+
+ evas_object_show(editfield);
+
+ return editfield;
+ }
+ return NULL;
+}
+
+
+Evas_Object *
+mp_common_create_editfield_layout(Evas_Object * parent, struct appdata * ad, char *text)
+{
+ Evas_Object *genlist = NULL;
+ Elm_Object_Item *item = NULL;
+ static Elm_Genlist_Item_Class itc;
+
+ MP_CHECK_NULL(parent);
+ MP_CHECK_NULL(ad);
+
+ IF_FREE(ad->new_playlist_name);
+ if (text)
+ ad->new_playlist_name = strdup(text);
+
+ itc.item_style = "music/1icon";
+ itc.func.text_get = NULL;
+ itc.func.content_get = _mp_common_gl_icon_get;
+ itc.func.state_get = NULL;
+ itc.func.del = NULL;
+
+ genlist = elm_genlist_add(parent);
+ item = elm_genlist_item_append(genlist, &itc, ad, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ elm_object_scroll_freeze_push(genlist);
+
+ return genlist;
+}
+
+void
+mp_common_hide_search_ise_context(view_data_t * view_data)
+{
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ mp_layout_data_t *layout_data = NULL;
+
+ Evas_Object *last_view_content = mp_view_manager_get_last_view_layout(view_data->ad);
+ MP_CHECK(last_view_content);
+
+ layout_data = (mp_layout_data_t *) evas_object_data_get(last_view_content, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ mp_search_hide_imf_pannel(layout_data->search_bar);
+}
+
+static void
+_mp_common_search_layout_del_cb(void *data, Evas * e, Evas_Object * eo, void *event_info)
+{
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+}
+
+
+void
+mp_common_search_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ MP_CHECK(view_data->ad);
+
+ mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ Evas_Object *layout = mp_view_layout_create(view_data->navibar, view_data, MP_VIEW_MODE_SEARCH);
+
+ Evas_Object *top_view = mp_view_manager_get_last_view_layout(view_data->ad);
+ MP_CHECK(top_view);
+ mp_layout_data_t *layout_data = evas_object_data_get(top_view, "layout_data");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_view_layout_update(layout);
+
+ mp_view_manager_push_view_content(view_data, layout, MP_VIEW_CONTENT_SEARCH);
+
+ evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, _mp_common_search_layout_del_cb, view_data);
+
+ mp_view_manager_set_title_and_buttons(view_data, GET_SYS_STR("IDS_COM_SK_SEARCH"), mp_util_get_layout_data(layout));
+
+}
+
+void
+mp_common_edit_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ mp_retm_if(view_data->ad->b_add_tracks, "add track mode..");
+ mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
+ mp_retm_if(mp_view_manager_get_edit_view_layout(view_data->ad), "edit view already created...");
+
+ Evas_Object *layout = mp_view_manager_get_last_view_layout(view_data->ad);
+ mp_layout_data_t *layout_data = evas_object_data_get(layout, "layout_data");
+ MP_CHECK(layout_data);
+
+ if (layout_data->item_count < 1)
+ {
+ mp_widget_text_popup(layout_data->ad, GET_SYS_STR("IDS_COM_BODY_NO_ITEMS"));
+ return;
+ }
+ mp_edit_view_create(view_data);
+}
+
+void
+mp_common_back_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ struct appdata *ad = view_data->ad;
+ MP_CHECK(ad);
+ mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
+
+
+ mp_layout_data_t* layout_data = mp_util_get_layout_data(mp_view_manager_get_last_view_layout(ad));
+ if (layout_data && layout_data->search_bar) {
+ Evas_Object *en = mp_search_entry_get(layout_data->search_bar);
+ Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
+ if (imf_context)
+ ecore_imf_context_input_panel_hide(imf_context);
+ elm_object_focus_allow_set (en, EINA_FALSE);
+ }
+
+ if(mp_view_manager_count_view_content(view_data) == 1)
+ {
+ DEBUG_TRACE("First view. go to background");
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PAUSE, NULL);
+ elm_win_lower(ad->win_main);
+ return;
+ }
+
+ mp_view_manager_pop_view_content(view_data, FALSE, FALSE);
+ evas_object_smart_callback_del(obj, "clicked", mp_common_back_button_cb);
+
+ if(mp_util_is_db_updating())
+ {
+ Evas_Object *top_view = mp_view_manager_get_last_view_layout(ad);
+ mp_view_layout_update(top_view);
+ }
+ else if (layout_data != NULL && layout_data->view_data != NULL)
+ {
+ if (layout_data->category == MP_LAYOUT_TRACK_LIST && layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
+ {
+ Evas_Object *top_view = mp_view_manager_get_last_view_layout(ad);
+ mp_view_layout_update(top_view);
+ }
+ }
+}
+
+void
+mp_common_item_check_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ mp_genlist_item_data_t *item_data = (mp_genlist_item_data_t *) data;
+ MP_CHECK(item_data);
+ mp_layout_data_t *layout_data =
+ (mp_layout_data_t *) evas_object_data_get(elm_object_item_widget_get(item_data->it), "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if(layout_data->rename_git)
+ {
+ mp_playlist_view_rename_done_cb(layout_data, NULL, NULL);
+ item_data->checked = !item_data->checked;
+ DEBUG_TRACE("item_data->checked: %d", item_data->checked);
+ elm_check_state_pointer_set(obj, &item_data->checked);
+ return;
+ }
+
+ if (item_data->checked)
+ layout_data->checked_count++;
+ else
+ layout_data->checked_count--;
+
+ if (layout_data->select_all_layout)
+ {
+ if (layout_data->item_count == layout_data->checked_count)
+ layout_data->select_all_checked = EINA_TRUE;
+ else
+ layout_data->select_all_checked = EINA_FALSE;
+
+ elm_check_state_pointer_set(layout_data->select_all_checkbox, &layout_data->select_all_checked);
+ }
+
+ mp_util_create_selectioninfo_with_count(layout_data->ad, layout_data->checked_count);
+ mp_common_set_title_button_sensitivity(layout_data, layout_data->checked_count);
+}
+
+
+void
+mp_common_set_title_button_sensitivity(mp_layout_data_t * layout_data, int selected_count)
+{
+
+ int i;
+ int all_track_count = 0;
+ Elm_Object_Item *item;
+ Elm_Object_Item *edit_item;
+ bool disable = true;
+
+ MP_CHECK(layout_data);
+
+ DEBUG_TRACE("rename_mode=%d, edit_mode=%d, selected_count=%d\n item_count: %d",
+ layout_data->rename_mode, layout_data->edit_mode, selected_count, layout_data->item_count);
+
+ if (layout_data->rename_mode)
+ {
+ //if(layout_data->edit_mode)
+ // i = 1; /*enable cancel button*/
+ //else
+ i = 0; /*disable edit button rename by sweep menu */
+
+ for (; i < MP_NAVI_CONTROL_BUTTON_MAX; i++) /* Don't disable the cancel button in rename mode */
+ {
+ item = mp_view_manager_get_controlbar_item(layout_data->ad, i);
+ if (mp_util_toolbar_item_valid_check(item))
+ elm_object_item_disabled_set(item, disable);
+ }
+ }
+ else if (layout_data->edit_mode)
+ {
+ if(selected_count > 0)
+ disable = false;
+
+ //item = mp_view_manager_get_controlbar_item(layout_data->ad, 0);
+ //elm_object_item_disabled_set(item, false);
+
+ for (i = 0; i < MP_NAVI_CONTROL_BUTTON_MAX; i++) //Cancel button always enabled.
+ {
+ item = mp_view_manager_get_controlbar_item(layout_data->ad, i);
+ if (mp_util_toolbar_item_valid_check(item))
+ elm_object_item_disabled_set(item, disable);
+ }
+ }
+ else if (layout_data->ad->b_add_tracks)
+ {
+ item = mp_view_manager_get_controlbar_item(layout_data->ad, MP_NAVI_CONTROL_BUTTON5);
+ MP_CHECK(item);
+ elm_object_item_disabled_set(item, false);
+
+ item = mp_view_manager_get_controlbar_item(layout_data->ad, MP_NAVI_CONTROL_BUTTON1);
+ MP_CHECK(item);
+ if(selected_count > 0)
+ elm_object_item_disabled_set(item, false);
+ else
+ elm_object_item_disabled_set(item, true);
+ }
+ else
+ {
+ if(layout_data->item_count > 0)
+ disable = false;
+
+ if(layout_data->category != MP_LAYOUT_PLAYLIST_LIST)
+ {
+ item = mp_view_manager_get_edit_controlbar_item(layout_data->ad);
+ if (item)
+ elm_object_item_disabled_set(item, disable);
+
+ item = mp_view_manager_get_search_controlbar_item(layout_data->ad);
+ if (item)
+ elm_object_item_disabled_set(item, disable);
+
+ }
+ else
+ {
+ bool disable_option = true;
+ audio_svc_count_list_item(layout_data->ad->media_svc_handle, AUDIO_SVC_TRACK_ALL, NULL, NULL, NULL, NULL, &all_track_count);
+ if(all_track_count > 0)
+ disable_option = false;
+ edit_item = mp_view_manager_get_edit_controlbar_item(layout_data->ad);
+ for (i = 0; i < MP_NAVI_CONTROL_BUTTON_MAX; i++)
+ {
+ item = mp_view_manager_get_controlbar_item(layout_data->ad, i);
+ if (item == edit_item)
+ elm_object_item_disabled_set(item, disable);
+ else if (mp_util_toolbar_item_valid_check(item))
+ elm_object_item_disabled_set(item, disable_option);
+ }
+ }
+ }
+
+ item = mp_view_manager_get_cancel_controlbar_item(layout_data->ad);
+ if (item)
+ elm_object_item_disabled_set(item, EINA_FALSE);
+
+}
+
+void
+mp_common_navigationbar_finish_effect(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("finish effect");
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ ad->navi_effect_in_progress = FALSE;
+
+ int cnt = mp_view_manager_count_view_content(mp_util_get_view_data(ad));
+ if(cnt == 1)
+ {
+ DEBUG_TRACE("show controlbar");
+ mp_library_controlbar_visible_set(ad, true);
+ }
+ MP_CHECK(ad->library);
+ if(!elm_naviframe_prev_btn_auto_pushed_get(ad->library->cur_view))
+ elm_naviframe_prev_btn_auto_pushed_set(ad->library->cur_view, EINA_TRUE);
+
+ mp_layout_data_t * layout_data = mp_util_get_layout_data(mp_view_manager_get_last_view_layout(ad));
+ MP_CHECK(layout_data);
+ if(layout_data->search_bar)
+ {
+ Evas_Object *ed = mp_search_entry_get(layout_data->search_bar);
+ elm_object_focus_set(ed, EINA_TRUE);
+ }
+}
+
diff --git a/src/common/mp-item.c b/src/common/mp-item.c
new file mode 100755
index 0000000..a59c21d
--- /dev/null
+++ b/src/common/mp-item.c
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <sys/time.h>
+#include <aul.h>
+#include <vconf.h>
+#include <glib.h>
+#include <fcntl.h>
+
+#include "music.h"
+#include "mp-item.h"
+#include "mp-menu.h"
+#include "mp-player-debug.h"
+#include "mp-group-view.h"
+
+bool
+mp_item_update_db(MediaSvcHandle *media_svc_handle, char *fid)
+{
+ MP_CHECK_FALSE(media_svc_handle);
+
+ AudioHandleType *item = NULL;
+ int count = 0;
+ bool ret = FALSE;
+
+ ret = audio_svc_item_new(&item);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, FALSE, "error to get item");
+
+ ret = audio_svc_get_item_by_audio_id(media_svc_handle, fid, item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ audio_svc_item_free(item);
+ return false;
+ }
+
+ audio_svc_item_get_val(item, AUDIO_SVC_TRACK_DATA_PLAYED_COUNT, &count, -1);
+
+ audio_svc_update_item_metadata(media_svc_handle, fid, AUDIO_SVC_TRACK_DATA_PLAYED_COUNT, ++count,
+ AUDIO_SVC_TRACK_DATA_PLAYED_TIME, time(NULL), -1);
+
+ audio_svc_item_free(item);
+
+ return TRUE;
+}
+
diff --git a/src/common/mp-menu.c b/src/common/mp-menu.c
new file mode 100755
index 0000000..af86866
--- /dev/null
+++ b/src/common/mp-menu.c
@@ -0,0 +1,723 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include <stdio.h>
+#include <glib.h>
+
+#include "mp-player-debug.h"
+#include "mp-menu.h"
+#include "mp-view-layout.h"
+#include "mp-util.h"
+#include "mp-popup.h"
+#include "mp-play-list.h"
+#include "mp-item.h"
+#include "mp-player-drm.h"
+#include "mp-playlist-view.h"
+#include "mp-widget.h"
+#include "mp-common.h"
+#include "mp-view-manager.h"
+#include "mp-setting-ctrl.h"
+
+#define MP_MENU_FID "mp_menu_fid"
+#define MP_MENU_PLAY_LIST_FID "mp_menu_playlist_id"
+#define MP_MENU_POPUP_PLAY_LIST_HANDLER "mp_menu_popup_handler"
+#define MP_MENU_GROUP_ITEM_HANDLER "mp_menu_group_item_handler"
+
+typedef enum
+{
+ MP_MENU_FUNC_ADD_TO_LIST = 0,
+ MP_MENU_FUNC_DELETE,
+} mp_menu_func_type;
+
+
+audio_svc_track_type_e
+mp_menu_get_track_type_by_group(audio_svc_group_type_e group_type)
+{
+ audio_svc_track_type_e item_type = AUDIO_SVC_TRACK_ALL;
+
+ if (group_type == AUDIO_SVC_GROUP_BY_ALBUM)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_ALBUM;
+ }
+ else if (group_type == AUDIO_SVC_GROUP_BY_ARTIST)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_ARTIST;
+ }
+ else if (group_type == AUDIO_SVC_GROUP_BY_ARTIST_ALBUM)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_ALBUM;
+ }
+ else if (group_type == AUDIO_SVC_GROUP_BY_GENRE)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_GENRE;
+ }
+ else if (group_type == AUDIO_SVC_GROUP_BY_GENRE_ARTIST)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_GENRE;
+ }
+ else if (group_type == AUDIO_SVC_GROUP_BY_GENRE_ALBUM)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_GENRE;
+ }
+ else if (group_type == AUDIO_SVC_GROUP_BY_GENRE_ARTIST_ALBUM)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_GENRE;
+ }
+ else if (group_type == AUDIO_SVC_GROUP_BY_YEAR)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_YEAR;
+ }
+ else if (group_type == AUDIO_SVC_GROUP_BY_COMPOSER)
+ {
+ item_type = AUDIO_SVC_TRACK_BY_COMPOSER;
+ }
+
+ return item_type;
+}
+
+
+bool
+_mp_menu_func_by_group_handle(int plst_id, mp_layout_data_t * layout_data, AudioHandleType * svc_handle,
+ mp_menu_func_type menu_func)
+{
+ startfunc;
+
+ MP_CHECK_FALSE(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ struct appdata *ad = layout_data->ad;
+ MP_CHECK_FALSE(ad);
+
+ int err = -1;
+ int count = 0;
+ int index = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ int playlist_item_count = 0;
+
+ AudioHandleType *tracks = NULL;
+ audio_svc_track_type_e item_type = AUDIO_SVC_TRACK_ALL;
+
+ item_type = mp_menu_get_track_type_by_group(layout_data->group_type);
+
+ char *name = NULL;
+ int size = 0;
+
+ ret = audio_svc_group_item_get_val(svc_handle, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, FALSE, "Fail to get value");
+ mp_retvm_if(name == NULL, FALSE, "Fail to get value");
+ mp_debug("%s", name);
+
+ audio_svc_count_list_item(ad->media_svc_handle, item_type, name, "", "", "", &count);
+ mp_debug("%d", count);
+
+ ret = audio_svc_list_item_new(&tracks, count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, FALSE, "Fail to audio_svc_list_item_new");
+
+ ret = audio_svc_get_list_item(ad->media_svc_handle, item_type, name, NULL, NULL, NULL, 0, count, tracks);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ if (menu_func == MP_MENU_FUNC_ADD_TO_LIST)
+ {
+ audio_svc_count_playlist_item(ad->media_svc_handle, plst_id, NULL, NULL, &playlist_item_count);
+ if (playlist_item_count >= MP_PLAYLIST_MAX_ITEM_COUNT)
+ {
+ return false;
+ }
+ }
+
+ for (index = 0; index < count; ++index)
+ {
+ char *fid = 0;
+ int size = 0;
+ char *path = NULL;
+
+ mp_debug("%d", index);
+
+ audio_svc_list_item_get_val(tracks, index, AUDIO_SVC_LIST_ITEM_AUDIO_ID, &fid, &size,
+ AUDIO_SVC_LIST_ITEM_PATHNAME, &path, &size, -1);
+ if (menu_func == MP_MENU_FUNC_ADD_TO_LIST)
+ {
+ if (playlist_item_count >= 1000)
+ {
+ return false;
+ }
+ err = audio_svc_add_item_to_playlist(ad->media_svc_handle, plst_id, fid);
+ if (err != AUDIO_SVC_ERROR_NONE)
+ {
+ ERROR_TRACE("Error in audio_svc_list_append_item (%d)\n", err);
+ MP_CHECK_EXCEP(false);
+ }
+ playlist_item_count++;
+ }
+ else
+ {
+ MP_CHECK_EXCEP(path);
+
+ music_list_item *cur_item =
+ mp_play_list_get_current_item(layout_data->view_data->ad->playing_list);
+ if ((cur_item != NULL) && !g_strcmp0(cur_item->key_id ,fid))
+ {
+ mp_widget_text_popup(layout_data->view_data->ad,
+ GET_STR
+ ("IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"));
+ goto mp_exception;
+ }
+
+ err = remove(path);
+
+ if (err < 0)
+ {
+ ERROR_TRACE("Error in remove (%s)\n", path);
+ MP_CHECK_EXCEP(false);
+ }
+ }
+ }
+
+ audio_svc_list_item_free(tracks);
+
+ return true;
+
+ mp_exception:
+ audio_svc_list_item_free(tracks);
+ return false;
+}
+
+void
+mp_menu_add_to_play_list_cancel_create_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+
+ mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
+
+ Evas_Object *current_navi_bar = NULL;
+ current_navi_bar = ad->library->cur_view;
+ MP_CHECK(current_navi_bar);
+
+ view_data_t *view_data = evas_object_data_get(current_navi_bar, "view_data");
+ mp_view_manager_pop_view_content(view_data, FALSE, TRUE);
+ return;
+}
+
+void
+mp_menu_add_to_play_list_done_create_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+
+ mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
+
+ Evas_Object *current_navi_bar = NULL;
+ current_navi_bar = ad->library->cur_view;
+ MP_CHECK(current_navi_bar);
+
+ int plst_uid = -1;
+
+ char *converted_name = NULL;
+ Evas_Object *entry = mp_widget_editfield_entry_get(ad->editfiled_new_playlist);
+ const char *name = elm_entry_entry_get(entry);
+
+ if (name == NULL || strlen(name) == 0)
+ {
+ name = elm_object_part_text_get(ad->editfiled_new_playlist, "elm.guidetext");
+ }
+ converted_name = elm_entry_markup_to_utf8(name);
+
+ plst_uid = mp_util_create_playlist(ad, converted_name);
+ IF_FREE(converted_name);
+ if (plst_uid < 0)
+ return;
+
+ view_data_t *view_data = evas_object_data_get(current_navi_bar, "view_data");
+ mp_view_manager_pop_view_content(view_data, FALSE, TRUE);
+
+ if (view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
+ mp_view_manager_update_list_contents(view_data, FALSE);
+
+ mp_layout_data_t *layout_data = ad->layout_data;
+ mp_list_category_t category = MP_LAYOUT_TRACK_LIST;
+
+ if (layout_data)
+ {
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ category = layout_data->category;
+ }
+
+ bool result = false;
+
+ if (category == MP_LAYOUT_TRACK_LIST)
+ {
+ result = mp_util_add_to_playlist_by_key(ad->media_svc_handle, plst_uid, ad->fid);
+ }
+ else if (category == MP_LAYOUT_GROUP_LIST)
+ {
+ MP_CHECK(ad->group_item_handler);
+
+ result = _mp_menu_func_by_group_handle(plst_uid, layout_data,
+ ad->group_item_handler, MP_MENU_FUNC_ADD_TO_LIST);
+ }
+
+ if (result)
+ {
+ mp_debug("sucess add to play list");
+ mp_util_create_notify(ad, GET_STR("IDS_MUSIC_POP_ADDED"));
+ }
+ else
+ {
+ mp_debug("fail add to play list");
+ char *fmt_str = GET_STR("IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE");
+ char *noti_str = g_strdup_printf(fmt_str, MP_PLAYLIST_MAX_ITEM_COUNT);
+ mp_util_create_notify(ad, noti_str);
+ IF_FREE(noti_str);
+ }
+
+ return;
+}
+
+static void
+_mp_menu_add_playlist_create_select_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ Evas_Object *current_navi_bar = NULL;
+ view_data_t *view_data = NULL;
+ char *new_playlist_name = NULL;
+
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+
+ current_navi_bar = ad->library->cur_view;
+ MP_CHECK(current_navi_bar);
+
+ view_data = evas_object_data_get(current_navi_bar, "view_data");
+
+ new_playlist_name = mp_util_get_new_playlist_name(ad->media_svc_handle);
+ Evas_Object *create_plst_layout = mp_common_create_editfield_layout(current_navi_bar, ad, new_playlist_name);
+ IF_FREE(new_playlist_name);
+ mp_retm_if(create_plst_layout == NULL, "create_plst_layout is NULL");
+
+ mp_view_manager_push_view_content(view_data, create_plst_layout, MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP);
+ mp_view_manager_set_title_and_buttons(view_data, GET_STR("IDS_MUSIC_OPT_ADD_PLAYLIST"), ad);
+
+ evas_object_show(create_plst_layout);
+
+ ad->layout_data = evas_object_data_get(obj, "layout_data");
+ mp_layout_data_t *layout_data = ad->layout_data;
+
+ if (layout_data->category == MP_LAYOUT_TRACK_LIST)
+ {
+ IF_FREE(ad->fid);
+ ad->fid = (char *)evas_object_data_get(obj, MP_MENU_FID);
+ }
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ {
+ ad->group_item_handler = evas_object_data_get(obj, MP_MENU_GROUP_ITEM_HANDLER);
+ }
+
+ mp_popup_destroy(layout_data->ad);
+
+ endfunc;
+}
+
+
+static void
+_mp_menu_add_playlist_select_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ struct appdata *ad = NULL;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ int playlist_id = -1;
+
+ AudioHandleType *item_handler = (AudioHandleType *) data;
+ AudioHandleType *play_list_handle = NULL;
+
+
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ mp_list_category_t category = MP_LAYOUT_TRACK_LIST;
+
+ if (layout_data)
+ {
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ ad = layout_data->ad;
+ category = layout_data->category;
+
+ }
+ else
+ {
+ ad = evas_object_data_get(obj, "ad");
+ }
+ MP_CHECK(ad);
+
+ int size = 0;
+ char *playlist_name = NULL;
+ int item_count = 0;
+ ret = audio_svc_playlist_get_val(item_handler, 0, AUDIO_SVC_PLAYLIST_ID, &playlist_id,
+ AUDIO_SVC_PLAYLIST_NAME, &playlist_name, &size, -1);
+ audio_svc_count_playlist_item(ad->media_svc_handle, playlist_id, NULL, NULL, &item_count);
+ if (item_count > MP_PLAYLIST_MAX_ITEM_COUNT)
+ {
+ char *fmt_str = GET_STR("IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE");
+ char *noti_str = g_strdup_printf(fmt_str, MP_PLAYLIST_MAX_ITEM_COUNT);
+ mp_widget_text_popup(ad, noti_str);
+ IF_FREE(noti_str);
+ goto END;
+ }
+
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+
+ bool result = false;
+
+ if (category == MP_LAYOUT_TRACK_LIST)
+ {
+ char *fid = (char *)evas_object_data_get(obj, MP_MENU_FID);
+ result = mp_util_add_to_playlist_by_key(ad->media_svc_handle, playlist_id, fid);
+ IF_FREE(fid);
+ }
+ else if (category == MP_LAYOUT_GROUP_LIST)
+ {
+ AudioHandleType *group_item_handler = evas_object_data_get(obj, MP_MENU_GROUP_ITEM_HANDLER);
+
+ MP_CHECK(group_item_handler);
+
+ result = _mp_menu_func_by_group_handle(playlist_id, layout_data,
+ group_item_handler, MP_MENU_FUNC_ADD_TO_LIST);
+ }
+
+ if (result)
+ {
+ mp_debug("sucess add to play list");
+
+ if (playlist_name)
+ {
+ mp_util_create_notify(ad, GET_STR("IDS_MUSIC_POP_ADDED"));
+ }
+ }
+ else
+ {
+ mp_debug("fail add to play list");
+ char *fmt_str = GET_STR("IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE");
+ char *noti_str = g_strdup_printf(fmt_str, MP_PLAYLIST_MAX_ITEM_COUNT);
+ mp_util_create_notify(ad, noti_str);
+ IF_FREE(noti_str);
+ }
+
+ END:
+
+ play_list_handle = evas_object_data_get(obj, MP_MENU_POPUP_PLAY_LIST_HANDLER);
+
+ if (play_list_handle)
+ audio_svc_playlist_free(play_list_handle);
+ play_list_handle = NULL;
+
+ mp_popup_destroy(ad);
+ return;
+
+}
+
+static void
+_mp_menu_excute_delete_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+
+ AudioHandleType *handle = (AudioHandleType *) data;
+ MP_CHECK(handle);
+
+ struct appdata *ad = NULL;
+ char *fid = NULL;
+ int ret = 0;
+
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ ad = layout_data->ad;
+ ad->popup_delete = NULL;
+
+ if ((int)event_info == MP_POPUP_YES)
+ {
+ bool result = TRUE;
+
+ if (layout_data->category == MP_LAYOUT_TRACK_LIST)
+ {
+ fid = mp_util_get_fid_by_handle(layout_data, handle);
+ if (layout_data->track_type == AUDIO_SVC_TRACK_BY_PLAYLIST)
+ {
+ int uid = 0;
+ audio_svc_playlist_item_get_val(handle, 0, AUDIO_SVC_PLAYLIST_ITEM_UID, &uid, -1);
+
+ ret = audio_svc_remove_item_from_playlist_by_uid(ad->media_svc_handle, layout_data->playlist_id, uid);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ result = false;
+ else
+ result = true;
+ }
+ else if (layout_data->track_type == AUDIO_SVC_TRACK_BY_ADDED_TIME)
+ {
+ ret = audio_svc_update_item_metadata(ad->media_svc_handle, fid, AUDIO_SVC_TRACK_DATA_ADDED_TIME, 0, -1);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ result = false;
+ else
+ result = true;
+ }
+ else if (layout_data->track_type == AUDIO_SVC_TRACK_BY_PLAYED_TIME)
+ {
+ ret = audio_svc_update_item_metadata(ad->media_svc_handle, fid, AUDIO_SVC_TRACK_DATA_PLAYED_TIME, 0. - 1);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ result = false;
+ else
+ result = true;
+ }
+ else if (layout_data->track_type == AUDIO_SVC_TRACK_BY_PLAYED_COUNT)
+ {
+ ret = audio_svc_update_item_metadata(ad->media_svc_handle, fid, AUDIO_SVC_TRACK_DATA_PLAYED_COUNT, 0, -1);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ result = false;
+ else
+ result = true;
+ }
+ else
+ {
+ if (MP_FILE_DELETE_ERR_NONE != mp_util_delete_track(ad, fid, NULL, FALSE))
+ result = false;
+ else
+ result = true;
+ }
+ }
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ {
+ result = _mp_menu_func_by_group_handle(0, layout_data, handle, MP_MENU_FUNC_DELETE);
+ }
+ else if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ {
+ int plst_id = 0;
+ ret = audio_svc_playlist_get_val(handle, 0, AUDIO_SVC_PLAYLIST_ID, &plst_id, -1);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+
+ ret = audio_svc_delete_playlist(ad->media_svc_handle, plst_id);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to delete playlist");
+ }
+
+ if (result)
+ {
+ Elm_Object_Item *it =
+ (Elm_Object_Item *)elm_genlist_decorated_item_get((const Evas_Object *)layout_data->genlist);
+ if(it)
+ {
+ layout_data->item_count--;
+
+ /* update last view when change album track view or artist track view */
+ if (AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type
+ || AUDIO_SVC_TRACK_BY_ARTIST == layout_data->track_type) {
+ layout_data->album_delete_flag = TRUE;
+ mp_view_manager_update_list_contents(layout_data->view_data, FALSE);
+ layout_data->album_delete_flag = FALSE;
+ }
+
+ //update view in case there is no content. otherwise juse call elm_object_item_del()
+ if(layout_data->item_count<1)
+ mp_view_layout_update(layout_data->layout);
+ else
+ {
+ if (AUDIO_SVC_TRACK_BY_ARTIST == layout_data->track_type) {
+ int index = -1;
+ int sub_index = -1;
+ bool ret_val = FALSE;
+ /* get group index and sub index when the status is artist album */
+ ret_val = mp_common_track_get_aa_index(0, layout_data, it, FALSE);
+ if (ret_val) {
+ index = layout_data->selected_group_index;
+ sub_index = layout_data->selected_album_sub_index;
+ }
+ DEBUG_TRACE("index=%d, sub_index=%d, ret_val=%d", index, sub_index, ret_val);
+ if(ret_val) {
+ --layout_data->aa_item_count[index];
+ if (layout_data->aa_item_count[index] < 1) {
+ /* delete group title if this album have no item */
+ elm_object_item_del(layout_data->aa_group[index]);
+ } else {
+ /* update group title */
+ elm_genlist_item_item_class_update(layout_data->aa_group[index],
+ layout_data->aa_group_itc);
+ }
+ }
+ } else if (AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type) {
+ /* update group title */
+ elm_genlist_item_item_class_update(layout_data->album_group,
+ layout_data->album_group_itc);
+ }
+
+ elm_object_item_del(it);
+ layout_data->is_item_del = true;
+ }
+ }
+ MP_CHECK(layout_data->view_data);
+ if(layout_data->category == MP_LAYOUT_TRACK_LIST
+ && layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
+ mp_util_create_notify(layout_data->ad, GET_SYS_STR("IDS_COM_POP_REMOVED"));
+ else
+ mp_util_create_notify(layout_data->ad, GET_SYS_STR("IDS_COM_POP_DELETED"));
+ }
+ else
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"));
+
+ }
+}
+
+void
+mp_menu_delete_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+
+ struct appdata *ad = NULL;
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+
+
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ AudioHandleType *handle = NULL;
+ handle = (AudioHandleType *) data;
+
+ ad = layout_data->ad;
+
+ Evas_Object *popup = elm_popup_add(ad->win_main);
+ ad->popup_delete = popup;
+ evas_object_data_set(popup, "layout_data", layout_data);
+
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ mp_popup_desc_set(popup, GET_SYS_STR("IDS_COM_POP_DELETE_Q"));
+ mp_popup_set_response_cb(popup, _mp_menu_excute_delete_cb, handle);
+ mp_popup_button_set(popup, "button1", GET_SYS_STR("IDS_COM_SK_YES"), MP_POPUP_YES);
+ mp_popup_button_set(popup, "button2", GET_SYS_STR("IDS_COM_SK_NO"), MP_POPUP_NO);
+
+ evas_object_show(popup);
+}
+
+
+void
+mp_menu_add_to_playlist_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+
+ int ret = AUDIO_SVC_ERROR_NONE;
+
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ music_list_item *item = NULL;
+
+ char *fid = NULL;
+
+ struct appdata *ad = NULL;
+
+ AudioHandleType *handle = NULL;
+
+ Evas_Object *popup = NULL;
+
+ if (layout_data)
+ {
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ ad = layout_data->ad;
+ }
+ else
+ ad = data;
+
+ MP_CHECK_EXCEP(ad);
+
+ popup = mp_genlist_popup_create(ad->win_main, MP_POPUP_ADD_TO_PLST, ad, ad);
+ MP_CHECK(popup);
+
+ Evas_Object *genlist = evas_object_data_get(popup, "genlist");
+ MP_CHECK(genlist);
+
+ if (layout_data)
+ {
+ evas_object_data_set(genlist, "layout_data", layout_data);
+
+ handle = (AudioHandleType *) data;
+
+ if (layout_data->category == MP_LAYOUT_TRACK_LIST)
+ {
+ fid = g_strdup(mp_util_get_fid_by_handle(layout_data, handle));
+ evas_object_data_set(genlist, MP_MENU_FID, (void *)fid); //set request fid
+ }
+ else
+ evas_object_data_set(genlist, MP_MENU_GROUP_ITEM_HANDLER, (void *)handle); //set group item handler
+
+ evas_object_data_set(genlist, "layout_data", layout_data);
+ }
+ else
+ {
+ item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_EXCEP(item);
+ fid = g_strdup(item->key_id);
+ evas_object_data_set(genlist, MP_MENU_FID, (void *)fid); //set request fid
+ evas_object_data_set(genlist, "ad", ad);
+ }
+
+ int i = 0, count = -1, err = -1;
+
+ mp_genlist_popup_item_append(popup, GET_STR("IDS_MUSIC_OPT_CREATE_PLAYLIST"), NULL,
+ _mp_menu_add_playlist_create_select_cb, ad);
+
+ err = audio_svc_count_playlist(ad->media_svc_handle, "", "", &count);
+
+ if ((err != AUDIO_SVC_ERROR_NONE) || (count < 0))
+ {
+ ERROR_TRACE("Error in audio_svc_list_get_count (%d)\n", err);
+ return;
+ }
+
+ if (count)
+ {
+ AudioHandleType *playlists = NULL; //must be free
+ ret = audio_svc_playlist_new(&playlists, count);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to make new playlist");
+ evas_object_data_set(popup, MP_MENU_POPUP_PLAY_LIST_HANDLER, (void *)playlists); //set request handle id for support group item
+
+ ret = audio_svc_get_playlist(ad->media_svc_handle, "", "", 0, count, playlists);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get playlist");
+
+ for (i = 0; i < count; i++)
+ {
+ /* it should be released in a proper place */
+ AudioHandleType *plst = NULL;
+ char *name = NULL;
+ int size;
+ ret = audio_svc_playlist_get_item(playlists, i, &plst);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get item");
+
+ ret = audio_svc_playlist_get_val(plst, 0, AUDIO_SVC_PLAYLIST_NAME, &name, &size, -1);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+
+ mp_genlist_popup_item_append(popup, name, NULL, _mp_menu_add_playlist_select_cb, (void *)plst);
+ }
+
+ }
+
+ evas_object_show(popup);
+
+ return;
+
+ mp_exception:
+ mp_evas_object_del(popup);
+ return;
+}
+
diff --git a/src/common/mp-play.c b/src/common/mp-play.c
new file mode 100755
index 0000000..1547fe0
--- /dev/null
+++ b/src/common/mp-play.c
@@ -0,0 +1,439 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <aul.h>
+#include <utilX.h>
+#include <syspopup_caller.h>
+
+#include "music.h"
+#include "mp-player-control.h"
+#include "mp-player-mgr.h"
+#include <mm_sound.h>
+#include "mp-player-drm.h"
+#include "mp-play-view.h"
+#include "mp-item.h"
+#include "mp-common.h"
+#include "mp-play-list.h"
+#include "mp-library.h"
+#include "mp-widget.h"
+#include "mp-app.h"
+#include "mp-streaming-mgr.h"
+#include "mp-util.h"
+#include "mp-player-debug.h"
+#include <pmapi.h>
+
+#include "mp-play.h"
+
+static bool
+_mp_play_item_set(void *data, char * fid)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ mp_play_list_set_current_item(ad, ad->playing_list, fid);
+
+ endfunc;
+ return true;
+}
+
+static Eina_Bool
+_mp_play_set_pos(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ char play_time[16] = { 0, };
+ int pos = mp_player_mgr_get_position();
+ int duration = mp_player_mgr_get_duration();
+ snprintf(play_time, sizeof(play_time), "%" PLAY_TIME_FORMAT, PLAY_TIME_ARGS(pos/1000));
+
+ if(vconf_set_str(MP_EXT_CUR_POS, play_time))
+ WARN_TRACE("fail to set time...");
+ if(duration>0)
+ {
+ if(vconf_set_dbl(MP_EXT_CUR_PROGRESS_POS, pos/(double)duration))
+ WARN_TRACE("fail to ratio");
+ }
+ else
+ vconf_set_dbl(MP_EXT_CUR_PROGRESS_POS, 0.0);
+
+ return EINA_TRUE;
+}
+
+bool
+mp_play_current_file(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ MP_CHECK_FALSE(ad);
+
+ if (ad->player_state != PLAY_STATE_READY)
+ return FALSE;
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_FALSE(current_item);
+
+ if(!ad->paused_by_user)
+ {
+ if (!mp_player_mgr_play(ad))
+ {
+ mp_play_destory(ad);
+ return FALSE;
+ }
+ }
+ else
+ {
+ DEBUG_TRACE("stay in pause state..");
+ }
+
+ mp_setting_set_albumart_path(current_item->albumart);
+
+ if (!mp_item_update_db(ad->media_svc_handle, current_item->key_id))
+ {
+ WARN_TRACE("Error when update db");
+ }
+
+ return TRUE;
+}
+
+bool
+mp_play_new_file(void *data, bool check_drm)
+{
+ struct appdata *ad = data;
+ mp_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_FALSE(current_item);
+
+ if (mp_util_check_uri_available(current_item->filename))
+ return mp_streaming_mgr_play_new_streaming(ad);
+ else
+ return mp_play_new_file_real(ad, check_drm);
+}
+
+bool
+mp_play_ready(void *data)
+{
+ struct appdata *ad = data;
+ mp_play_view_update_progressbar(ad);
+
+ if (!mp_play_current_file(ad))
+ return FALSE;
+
+ mp_library_now_playing_set(ad);
+
+ mp_setting_save_now_playing(ad);
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_FALSE(current_item);
+
+ IF_FREE(ad->latest_playing_key_id);
+ ad->latest_playing_key_id = g_strdup(current_item->key_id);
+ return TRUE;
+}
+
+bool
+mp_play_new_file_real(void *data, bool check_drm)
+{
+ startfunc;
+ struct appdata *ad = data;
+ mp_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ if (!mp_player_control_ready_new_file(ad, check_drm))
+ {
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool
+mp_play_item_play(void *data, char *fid)
+{
+ startfunc;
+
+ MP_CHECK_FALSE(data);
+ MP_CHECK_FALSE(fid);
+
+ struct appdata *ad = (struct appdata *)data;
+
+ if (ad->playing_list->current_item)
+ {
+ if (g_strcmp0(ad->latest_playing_key_id, fid))
+ {
+ mp_debug("current key = %s it->key id = %s\n", ad->latest_playing_key_id, fid);
+
+ mp_play_destory(ad);
+
+ _mp_play_item_set(ad, fid);
+
+ if (!mp_play_new_file(ad, TRUE))
+ {
+ ERROR_TRACE("Fail to play new file");
+ return FALSE;
+ }
+ }
+ else
+ {
+ mp_debug("playing the same file");
+ _mp_play_item_set(ad, fid);
+ }
+ }
+ else
+ {
+ if (!mp_play_new_file(ad, TRUE))
+ {
+ ERROR_TRACE("Fail to play new file");
+ return FALSE;
+ }
+ }
+
+ endfunc;
+
+ return TRUE;
+}
+
+
+void
+mp_play_prev_file(void *data)
+{
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+ MP_CHECK(ad->playing_list);
+
+ DEBUG_TRACE("mp_play_prev_file [%d]", ad->play_shuffle_state);
+
+ music_list_item *item = NULL;
+
+ if (mp_play_list_get_prev_item(data, ad->playing_list, &item))
+ {
+ if (ad->playing_view)
+ ad->playing_view->flick_direction = 2;
+ ad->freeze_indicator_icon = TRUE;
+
+ if (ad->playing_view)
+ mp_play_view_play_item(data, item, true, false);
+ else
+ {
+ mp_play_item_play(ad, item->key_id);
+ }
+ }
+ else
+ {
+ mp_error("mp_play_list_get_prev_item return false");
+ if (ad->playing_list->list_type == MP_PLST_TYPE_PATH)
+ {
+ mp_app_exit(ad);
+ return;
+ }
+ else
+ {
+ mp_widget_text_popup(data, GET_SYS_STR("IDS_COM_POP_FILE_NOT_FOUND"));
+ mp_play_stop_and_updateview(data, FALSE);
+ }
+ }
+ IF_FREE(item);
+}
+
+void
+mp_play_next_file(void *data, bool forced)
+{
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+ MP_CHECK(ad->playing_list);
+
+ music_list_item *item = NULL;
+
+ IF_FREE(ad->latest_playing_key_id);
+
+ mp_plst_ret_t ret = mp_play_list_get_next_item(data, ad->playing_list, &item, forced);
+
+ if (ret == MP_PLST_RET_OK)
+ {
+ if (ad->playing_view)
+ ad->playing_view->flick_direction = 1;
+ ad->freeze_indicator_icon = TRUE;
+ if (ad->playing_view)
+ mp_play_view_play_item(data, item, true, true);
+ else
+ mp_play_item_play(ad, item->key_id);
+ }
+ else
+ {
+ WARN_TRACE("mp_play_list_get_next_item return false");
+ mp_player_mgr_stop(ad);
+ mp_player_mgr_destroy(ad);
+ ad->music_pos = 0;
+ mp_play_view_update_progressbar(ad);
+
+ if (ad->playing_list->list_type == MP_PLST_TYPE_PATH)
+ {
+ return;
+ }
+ else
+ {
+ if(ret == MP_PLST_RET_END)
+ {
+ DEBUG_TRACE("End of playlist");
+ return;
+ }
+ mp_widget_text_popup(data, GET_SYS_STR("IDS_COM_POP_FILE_NOT_FOUND"));
+ mp_play_stop_and_updateview(data, FALSE);
+ }
+ }
+
+ IF_FREE(item);
+}
+
+void
+mp_play_start(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->playing_view)
+ {
+ ad->playing_view->flick_direction = 0;
+ }
+
+ if(!ad->live_pos_timer)
+ ad->live_pos_timer = ecore_timer_add(1, _mp_play_set_pos, ad);
+
+ ad->player_state = PLAY_STATE_PLAYING;
+ vconf_set_int(VCONFKEY_MUSIC_STATE, VCONFKEY_MUSIC_PLAY);
+ mp_drm_start_consumption(mp_play_list_get_current_item(ad->playing_list)->filename);
+ pm_lock_state(LCD_OFF, STAY_CUR_STATE, 0);
+
+ mp_play_control_visible_set(ad, FALSE);;
+ mp_view_manager_thaw_progress_timer(ad);
+
+ mp_util_grab_mm_keys(ad);
+
+ endfunc;
+}
+
+void
+mp_play_pause(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ mp_ecore_timer_del(ad->live_pos_timer);
+
+ ad->player_state = PLAY_STATE_PAUSED;
+ vconf_set_int(VCONFKEY_MUSIC_STATE, VCONFKEY_MUSIC_PAUSE);
+ mp_drm_pause_consumption();
+ pm_unlock_state(LCD_OFF, PM_SLEEP_MARGIN);
+
+ mp_play_control_visible_set(ad, TRUE);
+ mp_play_view_update_progressbar(ad);
+ mp_view_manager_freeze_progress_timer(ad);
+ endfunc;
+}
+
+void
+mp_play_stop(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ mp_ecore_timer_del(ad->live_pos_timer);
+
+ ad->player_state = PLAY_STATE_STOP;
+ if (!ad->freeze_indicator_icon)
+ {
+ vconf_set_int(VCONFKEY_MUSIC_STATE, VCONFKEY_MUSIC_STOP);
+ }
+ vconf_set_dbl(MP_EXT_CUR_PROGRESS_POS, 0.0);
+ mp_drm_stop_consumption();
+ mp_drm_set_consumption(FALSE);
+ pm_unlock_state(LCD_OFF, PM_SLEEP_MARGIN);
+
+ if (mp_view_manager_is_play_view(ad))
+ {
+ ad->music_pos = 0;
+ mp_play_view_update_progressbar(ad);
+ }
+ else
+ mp_view_manager_freeze_progress_timer(ad);
+ mp_play_control_visible_set(ad, TRUE);
+
+ endfunc;
+}
+
+void
+mp_play_resume(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ if(!ad->live_pos_timer)
+ ad->live_pos_timer = ecore_timer_add(1, _mp_play_set_pos, ad);
+
+ ad->player_state = PLAY_STATE_PLAYING;
+ vconf_set_int(VCONFKEY_MUSIC_STATE, VCONFKEY_MUSIC_PLAY);
+ mp_drm_resume_consumption();
+ pm_lock_state(LCD_OFF, STAY_CUR_STATE, 0);
+
+ mp_play_control_visible_set(ad, FALSE);
+
+ mp_view_manager_thaw_progress_timer(ad);
+ mp_util_grab_mm_keys(ad);
+ endfunc;
+}
+
+bool
+mp_play_destory(void *data)
+{
+ struct appdata *ad = data;
+ mp_retvm_if(ad == NULL, FALSE, "appdata is NULL");
+
+ mp_player_mgr_stop(ad);
+ mp_player_mgr_unrealize(ad);
+ mp_player_mgr_destroy(ad);
+
+ return TRUE;
+}
+
+void
+mp_play_stop_and_updateview(void *data, bool mmc_removed)
+{
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ if (ad->player_state != PLAY_STATE_INIT)
+ {
+ DEBUG_TRACE("mp_play_stop_and_updateview\n");
+ mp_play_destory(ad);
+ }
+
+ if (ad->playing_view && ad->playing_view->layout)
+ {
+ mp_play_view_pop(ad);
+ }
+
+ mp_play_list_clear_play_list(&ad->playing_list);
+
+ mp_library_now_playing_hide(ad);
+ mp_library_update_view(ad);
+
+ return;
+}
diff --git a/src/common/mp-util.c b/src/common/mp-util.c
new file mode 100755
index 0000000..b4da6bd
--- /dev/null
+++ b/src/common/mp-util.c
@@ -0,0 +1,1660 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include "mp-util.h"
+#include "mp-file-tag-info.h"
+#include "mp-play-list.h"
+#include "mp-widget.h"
+#include "mp-common.h"
+#include "mp-library.h"
+#include <bundle.h>
+#include <aul.h>
+#include <appsvc.h>
+#include <utilX.h>
+#include <devman_haptic.h>
+#include <svi.h>
+#include <mm_sound.h>
+
+void
+mp_util_format_duration(char *time, int ms)
+{
+ int sec = ms / 1000;
+ int min = sec / 60;
+
+ if(min >= 60)
+ {
+ int hour = min / 60;
+ snprintf(time, 15, "%02u:%02u:%02u", hour, min % 60, sec % 60);
+ }
+ else
+ snprintf(time, 15, "%02u:%02u", min, sec % 60);
+}
+
+bool
+mp_util_add_to_playlist_by_key(MediaSvcHandle *handle, int plst_id, char *key_id)
+{
+ //startfunc;
+ MP_CHECK_FALSE(handle);
+
+ int err;
+ {
+ err = audio_svc_add_item_to_playlist(handle, plst_id, key_id);
+ if (err != AUDIO_SVC_ERROR_NONE)
+ {
+ ERROR_TRACE("Error in audio_svc_list_append_item (%d)\n", err);
+ return FALSE;
+ }
+ }
+ return TRUE;
+}
+
+Evas_Object *
+mp_util_create_thumb_icon(Evas_Object * obj, const char *path, int w, int h)
+{
+ Evas_Object *thumbnail = elm_bg_add(obj);
+ elm_bg_load_size_set(thumbnail, w, h);
+
+ Evas *evas = evas_object_evas_get(obj);
+ MP_CHECK_NULL(evas);
+ if ((path != NULL) && (strlen(path) > 0) && mp_util_is_image_valid(evas, path))
+ {
+ elm_bg_file_set(thumbnail, path, NULL);
+ }
+ else
+ {
+ elm_bg_file_set(thumbnail, DEFAULT_THUMBNAIL, NULL);
+ }
+
+ evas_object_size_hint_aspect_set(thumbnail, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ return thumbnail;
+}
+
+static void
+_mp_util_selection_info_del_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = data;
+ MP_CHECK(ad);
+
+ ad->notify = NULL;
+ ad->notify_layout = NULL;
+}
+
+void
+mp_util_create_selectioninfo_with_count(void *data, int count)
+{
+ struct appdata *ad = data;
+ Evas_Object *notify = NULL;
+ Evas_Object *notify_layout = NULL;
+
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+
+ if (ad->notify != NULL)
+ {
+ mp_evas_object_del(ad->notify);
+ }
+
+ if (ad->notify_layout != NULL)
+ {
+ mp_evas_object_del(ad->notify_layout);
+ }
+
+ ad->notify = NULL;
+ ad->notify_layout = NULL;
+
+ if (count > 0)
+ {
+ notify = elm_notify_add(ad->library->cur_view);
+ elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
+
+ notify_layout = elm_layout_add(ad->library->cur_view);
+ elm_layout_theme_set(notify_layout, "standard", "selectioninfo", "music/vertical/bottom_64");
+ evas_object_size_hint_weight_set(notify_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(notify_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_content_set(notify, notify_layout);
+
+ char text[128];
+ snprintf(text, 128, "%s (%d)", GET_SYS_STR("IDS_COM_POP_SELECTED"), count);
+
+ edje_object_part_text_set(_EDJ(notify_layout), "elm.text", text);
+ elm_notify_timeout_set(notify, 5);
+ evas_object_show(notify);
+
+ evas_object_event_callback_add(notify, EVAS_CALLBACK_DEL, _mp_util_selection_info_del_cb, ad);
+
+ ad->notify = notify;
+ ad->notify_layout = notify_layout;
+ }
+
+}
+
+void
+mp_util_create_notify(void *data, const char *noti_msg)
+{
+ struct appdata *ad = data;
+ Evas_Object *notify = NULL;
+ Evas_Object *notify_layout = NULL;
+
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+
+ if (ad->notify != NULL)
+ {
+ mp_evas_object_del(ad->notify);
+ }
+
+ if (ad->notify_layout != NULL)
+ {
+ mp_evas_object_del(ad->notify_layout);
+ }
+
+ ad->notify = NULL;
+ ad->notify_layout = NULL;
+
+ notify = elm_notify_add(ad->library->cur_view);
+ elm_notify_orient_set(notify, ELM_NOTIFY_ORIENT_BOTTOM);
+
+ notify_layout = elm_layout_add(ad->library->cur_view);
+ elm_layout_theme_set(notify_layout, "standard", "selectioninfo", "vertical/bottom_64");
+ evas_object_size_hint_weight_set(notify_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(notify_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_object_content_set(notify, notify_layout);
+
+ edje_object_part_text_set(_EDJ(notify_layout), "elm.text", noti_msg);
+ elm_notify_timeout_set(notify, 5);
+ evas_object_show(notify);
+
+ evas_object_event_callback_add(notify, EVAS_CALLBACK_DEL, _mp_util_selection_info_del_cb, ad);
+
+ ad->notify = notify;
+ ad->notify_layout = notify_layout;
+
+}
+
+char *
+mp_util_get_playlist_thumbpath(MediaSvcHandle *handle, AudioHandleType * plst)
+{
+ MP_CHECK_NULL(handle);
+
+ char *thumbpath = NULL;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ int plst_id = -1;
+
+ mp_retvm_if(!plst, NULL, "plst is NULL!!");
+
+ ret = audio_svc_playlist_get_val(plst, 0, AUDIO_SVC_PLAYLIST_ID, &plst_id, -1);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to get playlist id\n");
+ return NULL;
+ }
+
+ AudioHandleType *playlists = NULL;
+ ret = audio_svc_playlist_item_new(&playlists, 1);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to create structure\n");
+ return NULL;
+ }
+
+ ret = audio_svc_get_playlist_item(handle, plst_id, "", "", 0, 1, playlists);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to get items\n");
+ audio_svc_playlist_item_free(playlists);
+ return NULL;
+ }
+ int size = -1;
+ ret = audio_svc_playlist_item_get_val(playlists, 0, AUDIO_SVC_PLAYLIST_ITEM_THUMBNAIL_PATH, &thumbpath, &size,
+ -1);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ audio_svc_playlist_item_free(playlists);
+ DEBUG_TRACE("Fail to get value\n");
+ return NULL;
+ }
+
+ ret = audio_svc_playlist_item_free(playlists);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to free search structure\n");
+ return thumbpath;
+ }
+
+ if (!thumbpath)
+ thumbpath = MP_CTRBAR_ICON_PLAYLIST;
+
+ return thumbpath;
+}
+
+char *
+mp_util_get_new_playlist_name(MediaSvcHandle *handle)
+{
+ MP_CHECK_NULL(handle);
+
+ char unique_name[AUDIO_SVC_PLAYLIST_NAME_SIZE] = "\0";
+ int ret = 0;
+ ret = audio_svc_get_unique_playlist_name(handle, "My playlist", unique_name, AUDIO_SVC_PLAYLIST_NAME_SIZE);
+ if (ret == AUDIO_SVC_ERROR_NONE)
+ {
+ if (strlen(unique_name) <= 0)
+ {
+ ERROR_TRACE("playlist name is NULL");
+ return NULL;
+ }
+ else
+ {
+ return g_strdup(unique_name);
+ }
+ }
+ else
+ {
+ ERROR_TRACE("fail to audio_svc_get_unique_playlist_name() : error code [%x] ", ret);
+ return NULL;
+ }
+
+ return NULL;
+}
+
+
+Eina_Bool
+mp_util_is_item_in_playlist(MediaSvcHandle *handle, gint plst_id, char *key_id)
+{
+ MP_CHECK_VAL(handle, EINA_FALSE);
+
+ int count = -1;
+ int ret = -1;
+ ret = audio_svc_check_duplicate_insertion_in_playlist(handle, plst_id, key_id, &count);
+ if (ret == AUDIO_SVC_ERROR_NONE)
+ {
+ if (count > 0)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ else
+ {
+ ERROR_TRACE("Error from libmusic-service");
+ return FALSE;
+ }
+}
+
+bool
+mp_util_check_item_exist_in_playlist(MediaSvcHandle *handle, gint plst_id, char *key_id)
+{
+ MP_CHECK_FALSE(handle);
+
+ int count = -1;
+ int ret = -1;
+ ret = audio_svc_check_duplicate_insertion_in_playlist(handle, plst_id, key_id, &count);
+ if (ret == AUDIO_SVC_ERROR_NONE)
+ {
+ if (count > 0)
+ return TRUE;
+ else
+ return FALSE;
+ }
+ else
+ {
+ ERROR_TRACE("Error from libmusic-service");
+ return FALSE;
+ }
+}
+
+bool
+mp_util_add_selected_items_to_playlist(Evas_Object * genlist, int plst_id)
+{
+ Elm_Object_Item *first_item = elm_genlist_first_item_get(genlist);
+ Elm_Object_Item *current_item = NULL;
+ Elm_Object_Item *next_item = NULL;
+ mp_genlist_item_data_t *gl_item = NULL;
+ char *fid = NULL;
+ int size;
+ int ret;
+ int count;
+ mp_layout_data_t *layout_data = evas_object_data_get(genlist, "layout_data");
+ MP_CHECK_FALSE(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ MP_CHECK_FALSE(layout_data->ad);
+
+ audio_svc_count_playlist_item(layout_data->ad->media_svc_handle, plst_id, NULL, NULL, &count);
+ if (count >= MP_PLAYLIST_MAX_ITEM_COUNT)
+ return FALSE;
+
+ if (first_item)
+ {
+ MP_GENLIST_CHECK_FOREACH_SAFE(first_item, current_item, next_item, gl_item)
+ {
+ if (count == MP_PLAYLIST_MAX_ITEM_COUNT)
+ {
+ DEBUG_TRACE("Max count reached...");
+ return TRUE;
+ }
+ if (gl_item->checked)
+ {
+ AudioHandleType *item = (AudioHandleType *) (gl_item->handle);
+ MP_CHECK_FALSE(item);
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_list_item_get_val(item, 0, AUDIO_SVC_LIST_ITEM_AUDIO_ID, &fid, &size,
+ -1);
+ else
+ ret = audio_svc_playlist_item_get_val(item, 0, AUDIO_SVC_PLAYLIST_ITEM_AUDIO_ID,
+ &fid, &size, -1);
+ if (ret == AUDIO_SVC_ERROR_NONE)
+ {
+ if (mp_util_add_to_playlist_by_key(layout_data->ad->media_svc_handle, plst_id, fid))
+ count++;
+ }
+ else
+ {
+ ERROR_TRACE("Error!! ret: %d", ret);
+ return FALSE;
+ }
+ }
+ }
+ }
+ else
+ {
+ DEBUG_TRACE("genlist item not exist...");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+char *
+mp_util_get_fid_by_handle(mp_layout_data_t * layout_data, AudioHandleType * record)
+{
+ MP_CHECK_FALSE(record);
+
+ int ret = AUDIO_SVC_ERROR_NONE;
+ char *fid = NULL;
+ int size;
+
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_list_item_get_val(record, 0, AUDIO_SVC_LIST_ITEM_AUDIO_ID, &fid, &size, -1);
+ else
+ ret = audio_svc_playlist_item_get_val(record, 0, AUDIO_SVC_PLAYLIST_ITEM_AUDIO_ID, &fid, &size, -1);
+
+ return fid;
+}
+
+char *
+mp_util_get_path_by_handle(mp_layout_data_t * layout_data, AudioHandleType * record)
+{
+ MP_CHECK_NULL(record);
+
+ char *path = NULL;
+
+ int size = -1, ret = AUDIO_SVC_ERROR_NONE;
+
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_list_item_get_val(record, 0, AUDIO_SVC_LIST_ITEM_PATHNAME, &path, &size, -1);
+ else
+ ret = audio_svc_playlist_item_get_val(record, 0, AUDIO_SVC_PLAYLIST_ITEM_PATHNAME, &path, &size, -1);
+ return path;
+}
+
+
+mp_file_delete_err_t
+mp_util_delete_track(void *data, char *fid, char *file_path, bool show_popup)
+{
+ struct appdata *ad = (struct appdata *)data;
+ int ret = AUDIO_SVC_ERROR_NONE;
+
+ DEBUG_TRACE("music id = %s, path: %s", fid, file_path);
+ MP_CHECK_VAL(fid || file_path, MP_FILE_DELETE_ERR_INVALID_FID);
+
+ music_list_item *cur_item = mp_play_list_get_current_item(ad->playing_list);
+ if(fid)
+ {
+ if (cur_item && !g_strcmp0(fid, cur_item->key_id))
+ {
+ DEBUG_TRACE("Unable to delete track.. file is playing.");
+ if (show_popup)
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"));
+ }
+ return MP_FILE_DELETE_ERR_USING;
+ }
+ }
+
+ char path[AUDIO_SVC_PATHNAME_SIZE] = "";
+
+ if (!file_path)
+ {
+ audio_svc_get_path_by_audio_id(ad->media_svc_handle, fid, path, AUDIO_SVC_PATHNAME_SIZE);
+ }
+ else
+ {
+ strncpy(path, file_path, AUDIO_SVC_PATHNAME_SIZE);
+ path[AUDIO_SVC_PATHNAME_SIZE - 1] = '\0';
+ }
+
+
+ ret = remove(path);
+ if (ret < 0)
+ {
+ ERROR_TRACE("fail to unlink file : %s, ret: %d", path, ret);
+ if (show_popup)
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"));
+ return MP_FILE_DELETE_ERR_REMOVE_FAIL;
+ }
+ else
+ {
+ ret = audio_svc_delete_item_by_path(ad->media_svc_handle, path);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ DEBUG_TRACE("Error audio_svc_delete_item_by_path() ret: %d", ret);
+ }
+
+ return MP_FILE_DELETE_ERR_NONE;
+}
+
+int
+mp_util_file_is_in_phone_memory(const char *path)
+{
+ MP_CHECK_VAL(path, 0);
+ if (!strncmp(MP_PHONE_ROOT_PATH, path, strlen(MP_PHONE_ROOT_PATH)))
+ return 1;
+ else
+ return 0;
+}
+
+Elm_Object_Item *
+mp_util_get_genlist_item_by_item_handle(Evas_Object * genlist, AudioHandleType * handle)
+{
+ Elm_Object_Item *it = NULL;
+
+ it = elm_genlist_first_item_get(genlist);
+ while (it)
+ {
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) elm_object_item_data_get(it);
+ MP_CHECK_NULL(item);
+ AudioHandleType *item_data = (AudioHandleType *) (item->handle);
+ MP_CHECK_NULL(item_data);
+ if (item_data == handle)
+ break;
+ it = elm_genlist_item_next_get(it);
+ }
+
+ MP_CHECK_NULL(it);
+ return it;
+}
+
+/*return value must be freed.*/
+char *
+mp_util_isf_get_edited_str(Evas_Object * isf_entry, bool permit_first_blank)
+{
+
+ const char *buf = NULL;
+ char *strip_msg = NULL;
+ int strip_len = 0;
+
+ if (!isf_entry)
+ return strdup("");
+ buf = elm_entry_entry_get(isf_entry);
+ if (!buf)
+ return strdup("");
+
+ strip_msg = elm_entry_markup_to_utf8(buf);
+
+ if (strip_msg != NULL)
+ {
+ strip_len = strlen(strip_msg);
+
+ if (strip_len > 0)
+ {
+ if (strip_msg[0] == ' ' && !permit_first_blank) //start with space
+ {
+ DEBUG_TRACE("Filename should not be started with blank");
+ free(strip_msg);
+ return strdup("");
+ }
+ if (strip_msg[strip_len - 1] == '\n' || strip_msg[strip_len - 1] == '\r')
+ {
+ strip_msg[strip_len - 1] = '\0';
+ }
+ DEBUG_TRACE("===== The new edited str = %s", strip_msg);
+ return strip_msg;
+ }
+ else
+ {
+ DEBUG_TRACE(" strip_msg length is [%d], strip_msg [%s]", strip_len, strip_msg);
+ return strip_msg;
+ }
+ }
+ else
+ {
+ DEBUG_TRACE("strip_msg is NULL");
+ return strdup("");
+ }
+}
+
+char *
+mp_util_item_get_value_by_type(audio_svc_track_data_type_e item_type, struct music_list_item *item)
+{
+ mp_retvm_if(!item, NULL, "ITEM IS NULL");
+
+ if (item_type == AUDIO_SVC_TRACK_DATA_TITLE)
+ return strdup(item->title);
+ else if (item_type == AUDIO_SVC_TRACK_DATA_ALBUM)
+ return strdup(item->artist);
+ else if (item_type == AUDIO_SVC_TRACK_DATA_ARTIST)
+ return strdup(item->album);
+ else
+ return NULL;
+}
+
+bool
+mp_util_check_uri_available(const char *uri)
+{
+ if (uri == NULL || strlen(uri) == 0)
+ {
+ return FALSE;
+ }
+
+ if (uri == strstr(uri, "http://") || uri == strstr(uri, "https://")
+ || uri == strstr(uri, "rtp://") || uri == strstr(uri, "rtsp://")) {
+ DEBUG_TRACE("Streaming URI... OK");
+ return TRUE;
+ }
+ else
+ {
+ DEBUG_TRACE("uri check failed : [%s]", uri);
+ return FALSE;
+ }
+}
+
+bool
+mp_check_file_exist(const char *path)
+{
+ if (path == NULL || strlen(path) == 0)
+ {
+ return FALSE;
+ }
+
+ if (!ecore_file_exists(path))
+ {
+ DEBUG_TRACE("file check failed : [%s]", path);
+ return FALSE;
+ }
+ DEBUG_TRACE("file check okay : [%s]", path);
+ return TRUE;
+}
+
+bool
+mp_util_launch_browser(const char *url, struct appdata * ad)
+{
+ DEBUG_TRACE("url: %s", url);
+
+ bundle *b = NULL;
+ int res;
+
+ b = bundle_create();
+ bundle_add(b, "url", url);
+
+ res = aul_launch_app("org.tizen.browser", b);
+ DEBUG_TRACE("aul raunch. res: %d", res);
+ bundle_free(b);
+
+ if (res >= AUL_R_OK)
+ return TRUE;
+ else
+ return FALSE;
+
+}
+
+
+//korean initial consonant
+//returns mallocated memory, have to free it after use
+gchar *
+mp_util_get_utf8_initial(const char *name)
+{
+ gunichar first;
+ char *next = NULL;
+ if (name == NULL)
+ return NULL;
+
+ if (g_utf8_strlen(name, -1) <= 0)
+ {
+ return strdup("");
+ }
+
+ first = g_utf8_get_char(name);
+ next = (char *)name;
+
+ while (!g_unichar_isgraph(first))
+ {
+ next = g_utf8_next_char(next);
+ first = g_utf8_get_char(next);
+ }
+
+ if (first >= 0xAC00 && first <= 0xD7A3) // korean range
+ { //korean
+ int index = 0;
+ index = ((((first - 0xAC00) - ((first - 0xAC00) % 28)) / 28) / 21);
+ if (index < 20 && index >= 0)
+ {
+ const gunichar chosung[20] = { 0x3131, 0x3132, 0x3134, 0x3137, 0x3138,
+ 0x3139, 0x3141, 0x3142, 0x3143, 0x3145,
+ 0x3146, 0x3147, 0x3148, 0x3149, 0x314a,
+ 0x314b, 0x314c, 0x314d, 0x314e, 0
+ };
+
+ gchar result[10] = { 0, };
+ int len = 0;
+ len = g_unichar_to_utf8(chosung[index], result);
+ return strndup(result, len + 1);
+ }
+ }
+ else
+ {
+ gchar result[10] = { 0, };
+ int len = 0;
+ len = g_unichar_to_utf8(first, result);
+ return strndup(result, len + 1);
+ }
+ return NULL;
+}
+
+
+char *
+mp_util_get_title_from_path(const char *path)
+{
+ gchar *file_ext = NULL, *file_name = NULL, *title = NULL;
+
+ if (path == NULL || strlen(path) == 0)
+ {
+ return NULL;
+ }
+
+ file_name = g_path_get_basename(path);
+ if (file_name)
+ {
+ file_ext = g_strrstr(file_name, ".");
+ if (file_ext)
+ {
+ title = g_strndup(file_name, strlen(file_name) - strlen(file_ext));
+ }
+ free(file_name);
+ }
+ DEBUG_TRACE("title = %s\n", title);
+ return title;
+}
+
+bool
+mp_util_is_playlist_name_valid(char *name)
+{
+ MP_CHECK_NULL(name);
+
+ char *test_space = strdup(name);
+ if (strlen(g_strchug(test_space)) == 0)
+ {
+ IF_FREE(test_space);
+ return FALSE;
+ }
+ IF_FREE(test_space);
+ return TRUE;
+}
+
+int
+mp_util_create_playlist(struct appdata *ad, char *name)
+{
+ MP_CHECK_VAL(ad, -1);
+ MP_CHECK_VAL(name, -1);
+
+ int plst_uid = -1;
+
+ if (!mp_util_is_playlist_name_valid(name))
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_CREATE_PLAYLIST"));
+ return -1;
+ }
+
+ int count = -1;
+ int ret = audio_svc_count_playlist_by_name(ad->media_svc_handle, name, &count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, -1, "Fail to get playlist count by name");
+ if (count > 0)
+ {
+ mp_widget_text_popup(ad, GET_SYS_STR("IDS_COM_POP_ALREDY_EXISTS"));
+ return -1;
+ }
+
+ ret = audio_svc_add_playlist(ad->media_svc_handle, name, &plst_uid);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, -1, "Fail to add playlist");
+
+ return plst_uid;
+}
+
+void
+_mp_util_parse_last_play_data(mp_layout_data_t * layout_data)
+{
+ MP_CHECK(layout_data);
+ FILE *fp = NULL;
+ char line[MAX_STR_LEN+1];
+
+ if ((fp = fopen(MP_RECENT_PLAYED_INI_FILE_NAME, "r")) == NULL)
+ {
+ return;
+ }
+
+ if (fgets(line, MAX_STR_LEN, fp))
+ {
+ line[MAX_NAM_LEN] = 0;
+ line[strlen(line)-1] = 0;
+ layout_data->track_type = atoi(line);
+ }
+ if (fgets(line, MAX_STR_LEN, fp))
+ {
+ line[MAX_NAM_LEN] = 0;
+ line[strlen(line)-1] = 0;
+ layout_data->playlist_id = atoi(line);
+ }
+ if (fgets(line, MAX_STR_LEN, fp))
+ {
+ line[MAX_NAM_LEN] = 0;
+ line[strlen(line)-1] = 0;
+ IF_FREE(layout_data->type_str);
+ layout_data->type_str = g_strdup(line);
+ }
+ if (fgets(line, MAX_STR_LEN, fp))
+ {
+ line[MAX_NAM_LEN] = 0;
+ line[strlen(line)-1] = 0;
+ IF_FREE(layout_data->type_str);
+ layout_data->filter_str = g_strdup(line);
+ }
+ fclose(fp);
+}
+
+bool
+mp_util_get_recent_play_data(mp_layout_data_t * layout_data, int *index, char **path)
+{
+ int ret = AUDIO_SVC_ERROR_NONE;
+ char *last_audio_id = NULL;
+ char *audio_id = NULL;
+ int size = 0;
+ int i = 0;
+
+ if (!ecore_file_exists(MP_NOWPLAYING_INI_FILE_NAME))
+ {
+ DEBUG_TRACE("No last played data...");
+ layout_data->playlist_id = -1;
+ }
+ else
+ {
+
+ FILE *fp = NULL;
+ char line[MAX_STR_LEN+1];
+
+ if ((fp = fopen(MP_NOWPLAYING_INI_FILE_NAME, "r")) == NULL)
+ {
+ ERROR_TRACE("unable to open MP_NOWPLAYING_INI_FILE_NAME...");
+ return false;
+ }
+
+ if (fgets(line, MAX_STR_LEN, fp))
+ {
+ line[MAX_NAM_LEN] = 0;
+ line[strlen(line)-1] = 0;
+ last_audio_id = g_strdup(line);
+ }
+ if (fgets(line, MAX_STR_LEN, fp))
+ {
+ line[MAX_STR_LEN] = 0;
+ line[strlen(line)-1] = 0;
+ if (path)
+ *path = g_strdup(line);
+ }
+ fclose(fp);
+ }
+
+ if (layout_data)
+ {
+ struct appdata *ad = layout_data->ad;
+ MP_CHECK_FALSE(ad);
+
+ _mp_util_parse_last_play_data(layout_data);
+
+ DEBUG_TRACE("\nrecent play info: track_type: [%d], playlist_id: [%d], type_str: [%s], filter_str: [%s]",
+ layout_data->track_type, layout_data->playlist_id, layout_data->type_str,
+ layout_data->filter_str);
+
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_count_list_item(ad->media_svc_handle, layout_data->track_type, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, &(layout_data->item_count));
+ else
+ ret = audio_svc_count_playlist_item(ad->media_svc_handle, layout_data->playlist_id, layout_data->filter_str, NULL,
+ &(layout_data->item_count));
+
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d", ret);
+
+ if (layout_data->item_count <= 0)
+ {
+ DEBUG_TRACE("Recently played tracks were removed...");
+ return false;
+ }
+
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_list_item_new(&(layout_data->svc_handle), layout_data->item_count);
+ else
+ ret = audio_svc_playlist_item_new(&(layout_data->svc_handle), layout_data->item_count);
+
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d", ret);
+
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_get_list_item(ad->media_svc_handle, layout_data->track_type, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, 0, layout_data->item_count,
+ layout_data->svc_handle);
+ else
+ ret = audio_svc_get_playlist_item(ad->media_svc_handle, layout_data->playlist_id, layout_data->filter_str, NULL, 0,
+ layout_data->item_count, layout_data->svc_handle);
+
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_list_item_free(layout_data->svc_handle);
+ else
+ ret = audio_svc_playlist_item_free(layout_data->svc_handle);
+
+ return false;
+ }
+ if(last_audio_id)
+ {
+ for (i = 0; i < layout_data->item_count; i++)
+ {
+ audio_svc_list_item_get_val(layout_data->svc_handle, i, AUDIO_SVC_LIST_ITEM_AUDIO_ID, &audio_id, &size,
+ -1);
+ if (!g_strcmp0(audio_id, last_audio_id))
+ {
+ if (index)
+ *index = i;
+ break;
+ }
+ }
+ }
+ else
+ *index = 0;
+
+ }
+
+ return true;
+
+}
+
+bool
+mp_util_get_playlist_data(mp_layout_data_t * layout_data, int *index, const char *playlist_name)
+{
+ MP_CHECK_FALSE(layout_data);
+ struct appdata *ad = layout_data->ad;
+ MP_CHECK_FALSE(ad);
+
+ int ret = AUDIO_SVC_ERROR_NONE;
+ int playlist_idx = 0;
+
+ ret = audio_svc_get_playlist_id_by_playlist_name(ad->media_svc_handle, playlist_name, &playlist_idx);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d, playlist_name: %s", ret, playlist_name);
+ mp_retvm_if(playlist_idx < 0, false, "playlist_idx is not valid.. %d", playlist_idx);
+ layout_data->playlist_id = playlist_idx;
+
+ ret = audio_svc_count_playlist_item(ad->media_svc_handle, layout_data->playlist_id, layout_data->filter_str, NULL,
+ &(layout_data->item_count));
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d", ret);
+
+ if (layout_data->item_count <= 0)
+ {
+ DEBUG_TRACE("Recently played tracks were removed...");
+ return false;
+ }
+
+ ret = audio_svc_playlist_item_new(&(layout_data->svc_handle), layout_data->item_count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d", ret);
+
+ ret = audio_svc_get_playlist_item(ad->media_svc_handle, layout_data->playlist_id, layout_data->filter_str, NULL, 0,
+ layout_data->item_count, layout_data->svc_handle);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ ret = audio_svc_playlist_item_free(layout_data->svc_handle);
+ return false;
+ }
+ return true;
+}
+
+bool
+mp_util_get_list_data(mp_layout_data_t * layout_data)
+{
+ MP_CHECK_FALSE(layout_data);
+
+ struct appdata *ad = NULL;
+ AudioHandleType *group_record = NULL;
+ int ret = AUDIO_SVC_ERROR_NONE;
+
+ ad = layout_data->ad;
+ MP_CHECK_FALSE(ad);
+
+ if (ad->launch_type != MP_LAUNCH_PLAY_GROUP)
+ {
+
+ ret = audio_svc_count_list_item(ad->media_svc_handle, layout_data->track_type, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, &(layout_data->item_count));
+
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d", ret);
+
+ if (layout_data->item_count <= 0)
+ {
+ DEBUG_TRACE("Recently played tracks were removed...");
+ return false;
+ }
+
+ ret = audio_svc_list_item_new(&(layout_data->svc_handle), layout_data->item_count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d", ret);
+
+ ret = audio_svc_get_list_item(ad->media_svc_handle, layout_data->track_type, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, 0, layout_data->item_count,
+ layout_data->svc_handle);
+
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ goto error;
+ }
+ }
+ else
+ {
+ int group_count = 0;
+ int i = 0;
+ int index = 0;
+
+ ret = audio_svc_count_group_item(ad->media_svc_handle, layout_data->group_type, NULL, NULL, layout_data->filter_str, NULL,
+ &group_count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d", ret);
+
+ if (group_count <= 0)
+ {
+ DEBUG_TRACE("No such groups");
+ goto error;
+ }
+
+ ret = audio_svc_group_item_new(&group_record, group_count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, false, "ret: %d", ret);
+
+ ret = audio_svc_get_group_item(ad->media_svc_handle, layout_data->group_type, NULL, NULL, layout_data->filter_str, NULL, 0,
+ group_count, group_record);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ goto error;
+ }
+
+ char *group_title[group_count];
+ int item_count[group_count];
+
+ for (i = 0; i < group_count; i++)
+ {
+ int count = 0;
+ int size = 0;
+
+ ret = audio_svc_group_item_get_val(group_record, i, AUDIO_SVC_GROUP_ITEM_MAIN_INFO,
+ &(group_title[i]), &size, -1);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ goto error;
+ }
+
+ ret = audio_svc_count_list_item(ad->media_svc_handle, layout_data->track_type, group_title[i], NULL, NULL, NULL,
+ &count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ goto error;
+ }
+
+ item_count[i] = count;
+ layout_data->item_count += count;
+ }
+
+ if (layout_data->item_count <= 0)
+ {
+ DEBUG_TRACE("No group items");
+ goto error;
+ }
+
+ ret = audio_svc_list_item_new(&(layout_data->svc_handle), layout_data->item_count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ goto error;
+ }
+
+ for (i = 0; i < group_count; i++)
+ {
+ AudioHandleType *handle;
+ ret = audio_svc_list_item_get(layout_data->svc_handle, index, &handle);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ goto error;
+ }
+
+ ret = audio_svc_get_list_item(ad->media_svc_handle, layout_data->track_type, group_title[i], NULL, NULL, NULL, 0,
+ item_count[i], handle);
+ DEBUG_TRACE("0x%x, index: %d", handle, index);
+ index += item_count[i];
+
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("fail to get list item: %d", ret);
+ goto error;
+ }
+
+ }
+
+ for (i = 0; i < layout_data->item_count; i++)
+ {
+ char *title;
+ int size;
+ audio_svc_list_item_get_val(layout_data->svc_handle, i, AUDIO_SVC_LIST_ITEM_TITLE, &title,
+ &size, -1);
+ DEBUG_TRACE("%s", title);
+ }
+
+ }
+
+ return true;
+
+ error:
+ if (group_record)
+ audio_svc_group_item_free(group_record);
+ if (layout_data->svc_handle)
+ audio_svc_list_item_free(layout_data->svc_handle);
+ return false;
+}
+
+void
+_mp_util_set_tabbar_item(Evas_Object *control_bar, Elm_Object_Item **item,
+ Elm_Object_Item **after, int enabled, char *icon, char *label, void *data)
+{
+ if (*item && !enabled)
+ {
+ elm_object_item_del(*item);
+ *item = NULL;
+ }
+ else if(!(*item) && enabled)
+ {
+ *after = *item =
+ elm_toolbar_item_insert_after(control_bar, *after, icon, label, mp_library_view_change_cb, data);
+ }
+ else if(*item && enabled)
+ {
+ *after = *item;
+ }
+ DEBUG_TRACE("after: 0x%x, item: 0x%x, enabled: %d ", *after ,*item, enabled);
+}
+
+void
+mp_util_set_library_controlbar_items(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+ Elm_Object_Item *after = ad->library->ctltab_plist;
+ _mp_util_set_tabbar_item(ad->ctrl_bar, &(ad->library->ctltab_album), &after,
+ ad->library->albums, MP_CTRBAR_ICON_ALBUM, GET_STR(STR_MP_ALBUMS), ad);
+
+ _mp_util_set_tabbar_item(ad->ctrl_bar, &(ad->library->ctltab_artist), &after,
+ ad->library->artists, MP_CTRBAR_ICON_ARTIST, GET_STR(STR_MP_ARTISTS), ad);
+
+ _mp_util_set_tabbar_item(ad->ctrl_bar, &(ad->library->ctltab_genres), &after,
+ ad->library->genres, MP_CTRBAR_ICON_GENRE, GET_STR(STR_MP_GENRES), ad);
+
+ _mp_util_set_tabbar_item(ad->ctrl_bar, &(ad->library->ctltab_composer), &after,
+ ad->library->composers, MP_CTRBAR_ICON_COMPOSER, GET_STR(STR_MP_COMPOSERS), ad);
+
+ _mp_util_set_tabbar_item(ad->ctrl_bar, &(ad->library->ctltab_year), &after,
+ ad->library->years, MP_CTRBAR_ICON_YEAR, GET_STR(STR_MP_YEARS), ad);
+
+}
+
+bool
+mp_util_get_uri_from_app_svc(bundle * b, struct appdata *ad, char **path)
+{
+ char *uri = NULL;
+ const char *operation = NULL;
+
+ if (!b || !bundle_get_count(b))
+ {
+ WARN_TRACE("No exist b pointer or bundle count value.");
+ return FALSE;
+ }
+
+ operation = appsvc_get_operation(b);
+ DEBUG_TRACE("operation: %s", operation);
+
+ if(!operation)
+ {
+ return FALSE;
+ }
+
+ if(!strcmp(APPSVC_OPERATION_VIEW , operation))
+ {
+ uri = (char *)appsvc_get_uri(b);
+ if (uri)
+ {
+ *path = strdup(uri);
+ }
+ else
+ {
+ WARN_TRACE("No URI.");
+ return FALSE;
+ }
+ }
+ else
+ {
+ WARN_TRACE("No Operation.");
+ return FALSE;
+ }
+
+ DEBUG_TRACE("URI path uri : %s", uri);
+ return TRUE;
+}
+
+void
+mp_util_reset_genlist_mode_item(Evas_Object *genlist)
+{
+ MP_CHECK(genlist);
+ Elm_Object_Item *gl_item =
+ (Elm_Object_Item *)elm_genlist_decorated_item_get(genlist);
+ if (gl_item)
+ elm_genlist_item_decorate_mode_set(gl_item, "slide", EINA_FALSE);
+}
+
+view_data_t *
+mp_util_get_view_data(struct appdata *ad)
+{
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ return evas_object_data_get(cur_view, "view_data");
+}
+
+mp_layout_data_t*
+mp_util_get_layout_data(Evas_Object* obj)
+{
+ MP_CHECK_NULL(obj);
+ return evas_object_data_get(obj, "layout_data");
+}
+
+bool
+mp_util_is_image_valid(Evas *evas, const char *path)
+{
+ MP_CHECK_FALSE(path);
+ MP_CHECK_FALSE(evas);
+
+ if (!ecore_file_exists(path)) {
+ mp_error("file not exitst");
+ return false;
+ }
+
+ Evas_Object *image = NULL;
+ int width = 0;
+ int height = 0;
+
+ image = evas_object_image_add(evas);
+ MP_CHECK_FALSE(image);
+ evas_object_image_file_set(image, path, NULL);
+ evas_object_image_size_get(image, &width, &height);
+ evas_object_del(image);
+
+ if (width <= 0 || height <= 0) {
+ mp_debug("Cannot load file : %s", path);
+ return false;
+ }
+
+ return true;
+}
+
+#define MP_PATH_INFO_MAX_LENGTH 30
+#define MP_PATH_INFO_TRANS_OMIT ".."
+#define MP_PATH_INFO_LEVEL_BOUNDARY 3
+#define MP_PATH_INFO_LEN_THRESHOLD 3
+#define MP_PATH_INFO_SEP "/"
+#define MP_PATH_INFO_RETRENCH 128
+
+bool
+mp_util_is_string_elipsized(char *path)
+{
+ MP_CHECK_FALSE(path);
+ if(strlen(path) < MP_PATH_INFO_MAX_LENGTH)
+ {
+ return false;
+ }
+ else
+ return true;
+}
+
+char *mp_util_path_info_retrench(const char *string)
+{
+ mp_retvm_if(string == NULL, g_strdup(MP_PATH_INFO_TRANS_OMIT), "input path is NULL");
+ char *retrench = NULL;
+ if (strlen (string) > MP_PATH_INFO_LEN_THRESHOLD) {
+ char *utf8_string = elm_entry_utf8_to_markup(string);
+ MP_CHECK_NULL(utf8_string);
+ if (g_utf8_strlen(utf8_string, -1) > 2) {
+ retrench = calloc(1, MP_PATH_INFO_RETRENCH);
+ if (retrench) {
+ g_utf8_strncpy(retrench, utf8_string, 2);
+ char *temp = retrench;
+ retrench = g_strconcat(retrench, MP_PATH_INFO_TRANS_OMIT, NULL);
+ free(utf8_string);
+ free(temp);
+ }
+
+ } else {
+ retrench = utf8_string;
+ }
+ return retrench;
+ } else {
+ return elm_entry_utf8_to_markup(string);
+ }
+}
+
+char *
+mp_util_shorten_path(char *path_info)
+{
+ int start = 0;
+ gchar **params = NULL;
+ int count = 0;
+ int len;
+ int i = 0;
+ int j = 0;
+ char *output = NULL;
+ char *temp = NULL;
+ char *base = NULL;
+ bool exception = true;
+
+ MP_CHECK_EXCEP(path_info);
+
+ if (!mp_util_is_string_elipsized(path_info))
+ return g_strdup(path_info);
+
+ params = g_strsplit(path_info, "/", 0);
+ MP_CHECK_EXCEP(params);
+
+ count = g_strv_length(params);
+
+ if (count > MP_PATH_INFO_LEVEL_BOUNDARY)
+ {
+ start = count - MP_PATH_INFO_LEVEL_BOUNDARY;
+ output = g_strdup("..");
+ }
+ else
+ {
+ output = g_strdup("");
+ }
+ MP_CHECK_EXCEP(output);
+
+ for(i=start ; i < count; i++)
+ {
+ base = g_strdup(output);
+ MP_CHECK_EXCEP(base);
+ for(j=i ; j < count; j++)
+ {
+ temp = g_strconcat(base, MP_PATH_INFO_SEP, params[j], NULL);
+ IF_FREE(base);
+ base = temp;
+ temp = NULL;
+ }
+
+ if(i == (count-1) || !mp_util_is_string_elipsized(base))
+ {
+ IF_FREE(output);
+ output = base;
+ base = NULL;
+ break;
+ }
+ else
+ {
+ char *retrench = mp_util_path_info_retrench(params[i]);
+ MP_CHECK_EXCEP(retrench);
+ len = strlen(params[i]);
+ IF_FREE(base);
+ base = g_strconcat(output, MP_PATH_INFO_SEP, retrench, NULL);
+ IF_FREE(output);
+ free(retrench);
+ output = base;
+ base = NULL;
+ }
+ }
+
+ exception = false;
+
+ mp_exception:
+
+
+ if(params)
+ g_strfreev(params);
+
+ if(exception)
+ {
+ IF_FREE(output);
+ IF_FREE(base);
+ return g_strdup(GET_SYS_STR("IDS_COM_BODY_UNKNOWN"));
+ }
+ else
+ return output;
+}
+
+void
+mp_util_grab_mm_keys(struct appdata *ad)
+{
+ utilx_grab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_NEXTSONG, OR_EXCLUSIVE_GRAB);
+ utilx_grab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_PREVIOUSSONG, OR_EXCLUSIVE_GRAB);
+ utilx_grab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_PAUSECD, OR_EXCLUSIVE_GRAB);
+ utilx_grab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_PLAYCD, OR_EXCLUSIVE_GRAB);
+ utilx_grab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_FASTFORWARD, OR_EXCLUSIVE_GRAB);
+ utilx_grab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_REWIND, OR_EXCLUSIVE_GRAB);
+}
+
+void
+mp_util_ungrab_mm_keys(struct appdata *ad)
+{
+ utilx_ungrab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_NEXTSONG);
+ utilx_ungrab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_PREVIOUSSONG);
+ utilx_ungrab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_PAUSECD);
+ utilx_ungrab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_PLAYCD);
+ utilx_ungrab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_FASTFORWARD);
+ utilx_ungrab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win_main), KEY_REWIND);
+}
+
+void
+mp_util_unset_rename(mp_layout_data_t * layout_data)
+{
+ DEBUG_TRACE("");
+ MP_CHECK(layout_data);
+
+ if (layout_data->rename_git)
+ {
+ DEBUG_TRACE("");
+ if (elm_genlist_item_flip_get(layout_data->rename_git))
+ {
+ elm_genlist_item_flip_set(layout_data->rename_git, EINA_FALSE);
+ elm_genlist_item_select_mode_set(layout_data->rename_git, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+ layout_data->rename_git = NULL;
+ layout_data->rename_mode = false;
+ //set title button sensitivity
+ mp_common_set_title_button_sensitivity(layout_data, layout_data->checked_count);
+ }
+}
+
+bool
+mp_util_is_db_updating(void)
+{
+ int db_status = VCONFKEY_FILEMANAGER_DB_UPDATED;
+ vconf_get_int(VCONFKEY_FILEMANAGER_DB_STATUS, &db_status);
+ if(db_status == VCONFKEY_FILEMANAGER_DB_UPDATED)
+ return false;
+ else
+ return true;
+}
+
+/*haptic*/
+void mp_util_stop_vibration(struct appdata *ad)
+{
+ startfunc;
+ MP_CHECK(ad);
+
+ int ret = -1;
+ if (ad->haptic_handle > 0) {
+ ret = device_haptic_stop_play(ad->haptic_handle);
+ if (ret != 0)
+ ERROR_TRACE("device_haptic_stop_play failed[%d]!", ret);
+
+ ret = device_haptic_close(ad->haptic_handle);
+ if (ret != 0)
+ ERROR_TRACE("device_haptic_close failed[%d]!", ret);
+ }
+
+ ad->haptic_handle = 0;
+}
+
+static Eina_Bool _mp_util_vibration_timer_cb(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ ad->vib_timer = NULL;
+ mp_util_stop_vibration(ad);
+
+ return ECORE_CALLBACK_DONE;
+}
+
+
+bool mp_util_play_vibration(struct appdata *ad, float duration)
+{
+ startfunc;
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(duration > 0);
+
+ int ret = 0;
+ if (ad->haptic_handle > 0) {
+ DEBUG_TRACE("Remove previous haptic handle.");
+ mp_util_stop_vibration(ad);
+ }
+
+ ad->haptic_handle = device_haptic_open(DEV_IDX_0, 0);
+ if (ad->haptic_handle < 0) {
+ ERROR_TRACE("device_haptic_open failed[%d]!", ret);
+ return FALSE;
+ }
+
+ mp_ecore_timer_del(ad->vib_timer);
+ ad->vib_timer = ecore_timer_add(duration, _mp_util_vibration_timer_cb, ad);
+
+ char filepath[MAX_NAM_LEN+1];
+ svi_get_path(SVI_TYPE_VIB, SVI_VIB_TOUCH_TOUCH, filepath, sizeof(filepath));
+
+ ret = device_haptic_play_file(ad->haptic_handle, filepath, 1, HAPTIC_FEEDBACK_LEVEL_5);
+
+ if (ret != 0) {
+ ERROR_TRACE("device_haptic_play_pattern failed[%d]!", ret);
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool
+mp_util_is_bt_connected(void)
+{
+ int ret = 0;
+ int connected = 0;
+ bool ret_val = FALSE;
+ char *bt_name = NULL;
+
+ ret = mm_sound_route_get_a2dp_status(&connected, &bt_name);
+ if (ret == MM_ERROR_NONE) {
+ DEBUG_TRACE("Is Bluetooth A2DP On Success : [%d][%s]", connected,
+ bt_name);
+ if (connected != 0) {
+ ret_val = TRUE;
+ } else {
+ DEBUG_TRACE("no bluetooth");
+ }
+ } else {
+ DEBUG_TRACE("Is Bluetooth A2DP On Error : [%d]", ret);
+ }
+
+ if (bt_name)
+ free(bt_name);
+
+ return ret_val;
+}
+
+bool
+mp_util_is_earjack_inserted(void)
+{
+ int value = 0;
+
+ vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &value);
+
+ if (value == VCONFKEY_SYSMAN_EARJACK_REMOVED) {
+ DEBUG_TRACE("no earjack..");
+ return false;
+ } else {
+ DEBUG_TRACE("earjack inserted.. (type[%d])", value);
+ return true;
+ }
+}
+
+void
+mp_util_get_sound_path(mp_snd_path *snd_path)
+{
+ system_audio_route_t policy = 0;
+ mm_sound_route_get_system_policy(&policy);
+
+ if (policy == SYSTEM_AUDIO_ROUTE_POLICY_DEFAULT)
+ {
+ DEBUG_TRACE("SYSTEM_AUDIO_ROUTE_POLICY_DEFAULT");
+ if (mp_util_is_bt_connected())
+ *snd_path = MP_SND_PATH_BT;
+ else if (mp_util_is_earjack_inserted())
+ *snd_path = MP_SND_PATH_EARPHONE;
+ else
+ *snd_path = MP_SND_PATH_SPEAKER;
+ }
+ else if (policy == SYSTEM_AUDIO_ROUTE_POLICY_IGNORE_A2DP)
+ {
+ DEBUG_TRACE("SYSTEM_AUDIO_ROUTE_POLICY_IGNORE_A2DP");
+ if (mp_util_is_earjack_inserted())
+ *snd_path = MP_SND_PATH_EARPHONE;
+ else
+ *snd_path = MP_SND_PATH_SPEAKER;
+ }
+ else
+ {
+ DEBUG_TRACE("SYSTEM_AUDIO_ROUTE_POLICY_HANDSET_ONLY");
+ *snd_path = MP_SND_PATH_SPEAKER;
+ }
+}
+
+#define DEF_BUF_LEN (512)
+const char *
+mp_util_search_markup_keyword(const char *string, char *searchword, bool *result)
+{
+ char pstr[DEF_BUF_LEN + 1] = {0,};
+ static char return_string[DEF_BUF_LEN + 1] = { 0, };
+ int word_len = 0;
+ int search_len = 0;
+ int i = 0;
+ bool found = false;
+ gchar* markup_text_start = NULL;
+ gchar* markup_text_end= NULL;
+ gchar* markup_text= NULL;
+
+ MP_CHECK_NULL(string);
+ MP_CHECK_NULL(searchword);
+ MP_CHECK_NULL(result);
+
+ if(g_utf8_validate(string,-1,NULL)) {
+
+ strncpy(pstr, string, DEF_BUF_LEN);
+
+ word_len = strlen(pstr);
+ search_len = strlen(searchword);
+
+ for (i = 0; i < word_len; i++) {
+ if (!strncasecmp(searchword, &pstr[i], search_len)) {
+ found = true;
+ break;
+ }
+ }
+
+ *result = found;
+ memset(return_string, 0x00, DEF_BUF_LEN+1);
+
+ if (found) {
+ if (i == 0) {
+ markup_text = g_markup_escape_text(&pstr[0], search_len);
+ markup_text_end = g_markup_escape_text(&pstr[search_len], word_len-search_len);
+ MP_CHECK_NULL(markup_text && markup_text_end);
+ snprintf(return_string,
+ DEF_BUF_LEN,
+ "<match>%s</match>%s",
+ markup_text,
+ (char*)markup_text_end);
+ IF_FREE(markup_text);
+ IF_FREE(markup_text_end);
+ } else {
+ markup_text_start = g_markup_escape_text(&pstr[0], i);
+ markup_text = g_markup_escape_text(&pstr[i], search_len);
+ markup_text_end = g_markup_escape_text(&pstr[i+search_len], word_len-(i+search_len));
+ MP_CHECK_NULL(markup_text_start &&markup_text && markup_text_end);
+ snprintf(return_string,
+ DEF_BUF_LEN,
+ "%s<match>%s</match>%s",
+ (char*)markup_text_start,
+ markup_text,
+ (char*)markup_text_end);
+ IF_FREE(markup_text);
+ IF_FREE(markup_text_start);
+ IF_FREE(markup_text_end);
+ }
+ } else {
+ snprintf(return_string, DEF_BUF_LEN, "%s", pstr);
+ }
+ }
+
+ return return_string;
+}
+
+inline Elm_Object_Item *
+mp_util_toolbar_append_object(Evas_Object *toolbar, Evas_Object *obj, int sel)
+{
+ MP_CHECK_NULL(toolbar);
+
+ Elm_Object_Item *item = elm_toolbar_item_append(toolbar, NULL, NULL, NULL, NULL);
+ elm_object_item_part_content_set(item, "object", obj);
+
+ return item;
+}
+
+bool
+mp_util_toolbar_item_valid_check(Elm_Object_Item *item)
+{
+ MP_CHECK_FALSE(item);
+
+ Evas_Object *obj = elm_object_item_part_content_get(item, "object");
+ const char *icon = elm_toolbar_item_icon_get(item);
+ const char *text = elm_object_item_text_get(item);
+
+ if (obj || icon || text)
+ return TRUE;
+
+ return FALSE;
+}
+
+
diff --git a/src/common/mp-view-manager.c b/src/common/mp-view-manager.c
new file mode 100755
index 0000000..09dfe77
--- /dev/null
+++ b/src/common/mp-view-manager.c
@@ -0,0 +1,1235 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-view-manager.h"
+#include "mp-edit-view.h"
+#include "mp-playlist-view.h"
+#include "mp-track-view.h"
+#include "mp-common.h"
+#include "mp-menu.h"
+#include "mp-play-view.h"
+#include "mp-search.h"
+#include "mp-widget.h"
+#include "mp-library.h"
+#include "mp-util.h"
+
+#define MP_OPTION_HEADER_COND(type) type == MP_VIEW_CONTENT_NEW_PLAYLIST\
+ || type == MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP\
+ || type == MP_VIEW_CONTENT_NEW_PLAYLIST_BY_EDIT
+
+typedef struct
+{
+ mp_view_content_t content_type;
+ int view_index;
+ Evas_Object *view_layout;
+ Evas_Object *controlbar;
+ Elm_Object_Item *control_buttons[MP_NAVI_CONTROL_BUTTON_MAX];
+ Elm_Object_Item *edit_button;
+ Elm_Object_Item *search_button;
+ Elm_Object_Item *cancel_button;
+ Elm_Object_Item *navi_item;
+} mp_view_histroy_t;
+
+
+void
+mp_view_manager_push_view_content(view_data_t * view_data, Evas_Object * content, mp_view_content_t type)
+{
+ int view_idx = -1;
+ mp_view_histroy_t *last_history;
+
+ startfunc;
+
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ MP_CHECK(content);
+ MP_CHECK(view_data->navibar);
+
+ struct appdata *ad = view_data->ad;
+ MP_CHECK(ad);
+
+ Elm_Object_Item *navi_item = elm_naviframe_top_item_get(view_data->navibar);
+ if (navi_item)
+ {
+ Evas_Object *top_view = elm_object_item_content_get(navi_item);
+ MP_CHECK(top_view);
+
+ mp_view_layout_progress_timer_freeze(top_view);
+ }
+
+ view_idx = mp_view_manager_count_view_content(view_data);
+ DEBUG_TRACE("view_idx: %d", view_idx);
+ last_history = calloc(sizeof(mp_view_histroy_t), 1);
+
+ last_history->content_type = type;
+ last_history->view_index = view_idx;
+ last_history->view_layout = content;
+
+ /*
+ last_history->navi_item =
+ elm_navigationbar_ex_item_push(view_data->navibar, content, "music/title_option_header");
+ */
+ if(MP_VIEW_CONTENT_PLAY == type || MP_OPTION_HEADER_COND(type))
+ {
+ elm_naviframe_prev_btn_auto_pushed_set(view_data->navibar, EINA_FALSE);
+ last_history->navi_item =
+ elm_naviframe_item_push(view_data->navibar, NULL, NULL, NULL, content, "1line/music");
+ }
+ else
+ last_history->navi_item =
+ elm_naviframe_item_push(view_data->navibar, NULL, NULL, NULL, content, "1line/music");
+
+ mp_view_manager_set_option_header_visible(last_history->navi_item, last_history->content_type);
+
+ if(view_idx == 0)
+ {
+ mp_library_controlbar_visible_set(ad, true);
+ elm_naviframe_item_title_visible_set(last_history->navi_item, false);
+ }
+ else
+ mp_library_controlbar_visible_set(ad, false);
+
+ evas_object_data_set(content, "navi_item", last_history->navi_item);
+
+ if (view_idx) //It shouldn't be set true when first navi content is pushed. Effect finished callback not called in this case..
+ ad->navi_effect_in_progress = TRUE;
+
+ ad->view_history = g_list_append(ad->view_history, last_history);
+
+ endfunc;
+
+}
+
+/* Musc call this api befor del navigationbar. it prevent destroying info ug layout*/
+void
+mp_view_manager_unswallow_info_ug_layout(struct appdata *ad)
+{
+ MP_CHECK(ad);
+}
+
+void
+mp_view_manager_pop_view_content(view_data_t * view_data, bool pop_to_first, bool pop_content)
+{
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ struct appdata *ad = view_data->ad;
+ MP_CHECK(ad);
+
+ GList *view_item = g_list_last(ad->view_history);
+ MP_CHECK(view_item);
+ MP_CHECK(view_data->navibar);
+
+ mp_view_histroy_t *last_history = view_item->data;
+
+ mp_view_manager_unswallow_info_ug_layout(ad);
+
+ if (!pop_to_first)
+ {
+ elm_naviframe_item_pop(view_data->navibar);
+ ad->navi_effect_in_progress = TRUE;
+ SAFE_FREE(view_item->data);
+ ad->view_history =
+ g_list_delete_link(ad->view_history, view_item);
+ view_item = g_list_last(ad->view_history);
+ last_history = view_item->data;
+ }
+ else
+ {
+ if (last_history->view_index == 0)
+ {
+ DEBUG_TRACE("");
+ return;
+ }
+ elm_naviframe_item_pop_to(elm_naviframe_bottom_item_get(view_data->navibar));
+ while (last_history->view_index > 0)
+ {
+ SAFE_FREE(view_item->data);
+ ad->view_history =
+ g_list_delete_link(ad->view_history, view_item);
+ view_item = g_list_last(ad->view_history);
+ MP_CHECK(view_item);
+ last_history = view_item->data;
+ }
+ }
+
+ mp_view_manager_set_option_header_visible(last_history->navi_item, last_history->content_type);
+
+ Elm_Object_Item *navi_item = elm_naviframe_top_item_get(view_data->navibar);
+ MP_CHECK(navi_item);
+ Evas_Object *top_view = elm_object_item_content_get(navi_item);
+ MP_CHECK(top_view);
+
+ mp_view_layout_progress_timer_thaw(top_view);
+
+}
+
+void
+mp_view_manager_pop_to_view_content(view_data_t * view_data, mp_view_content_t type)
+{
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ struct appdata *ad = view_data->ad;
+ MP_CHECK(ad);
+
+ GList *view_item = g_list_last(ad->view_history);
+ MP_CHECK(view_item);
+ MP_CHECK(view_data->navibar);
+
+ mp_view_histroy_t *last_history = view_item->data;
+ bool find_view = false;
+
+ mp_view_manager_unswallow_info_ug_layout(ad);
+
+ if (last_history->content_type != type) {
+ while (last_history->view_index > 0)
+ {
+ DEBUG_TRACE("Content type: %d", last_history->content_type);
+ if (last_history->content_type == type)
+ {
+ find_view = true;
+ }
+ SAFE_FREE(view_item->data);
+ ad->view_history =
+ g_list_delete_link(ad->view_history, view_item);
+ view_item = g_list_last(ad->view_history);
+ MP_CHECK(view_item);
+ last_history = view_item->data;
+
+ if (find_view)
+ {
+ elm_naviframe_item_pop_to(last_history->navi_item);
+ break;
+ }
+ }
+ }
+
+ mp_view_manager_set_option_header_visible(last_history->navi_item, last_history->content_type);
+
+ Elm_Object_Item *navi_item = elm_naviframe_top_item_get(view_data->navibar);
+ MP_CHECK(navi_item);
+ Evas_Object *top_view = elm_object_item_content_get(navi_item);
+ MP_CHECK(top_view);
+
+ mp_view_layout_progress_timer_thaw(top_view);
+
+}
+
+int
+mp_view_manager_count_view_content(view_data_t * view_data)
+{
+ MP_CHECK_VAL(view_data, -1);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ GList *histroy = view_data->ad->view_history;
+ mp_retvm_if(!histroy, 0, "last_item not exist");
+
+ return g_list_length(histroy);
+}
+
+Evas_Object *
+mp_view_manager_get_last_view_layout(struct appdata * ad)
+{
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *last_item = g_list_last(ad->view_history);
+ MP_CHECK_NULL(last_item);
+
+ mp_view_histroy_t *last_history = last_item->data;
+ MP_CHECK_NULL(last_history);
+
+ return last_history->view_layout;
+}
+
+Elm_Object_Item *
+mp_view_manager_get_play_view_navi_item(struct appdata *ad)
+{
+ startfunc;
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ mp_view_histroy_t *history;
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *item = g_list_last(ad->view_history);
+ MP_CHECK_NULL(item);
+
+ do
+ {
+ history = item->data;
+ if (history->content_type == MP_VIEW_CONTENT_PLAY)
+ {
+ return history->navi_item;
+ }
+ item = g_list_previous(item);
+ }
+ while (item);
+
+ return NULL;
+}
+
+void
+mp_view_manager_play_view_title_label_set(struct appdata *ad, const char *title)
+{
+ startfunc;
+ Elm_Object_Item *navi_item;
+ MP_CHECK(ad);
+
+ navi_item = mp_view_manager_get_play_view_navi_item(ad);
+ if(navi_item)
+ elm_object_item_text_set(navi_item, title);
+
+}
+
+Evas_Object *
+mp_view_manager_get_first_view_layout(struct appdata *ad)
+{
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *first_item = g_list_first(ad->view_history);
+ MP_CHECK_NULL(first_item);
+
+ mp_view_histroy_t *last_history = first_item->data;
+ MP_CHECK_NULL(last_history);
+
+ return last_history->view_layout;
+}
+
+Evas_Object *
+mp_view_manager_get_edit_view_layout(struct appdata * ad)
+{
+ mp_view_histroy_t *history = NULL;
+
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *item = g_list_last(ad->view_history);
+ MP_CHECK_FALSE(item);
+
+ do
+ {
+ history = item->data;
+ if (history->content_type == MP_VIEW_CONTENT_EDIT)
+ {
+ return history->view_layout;
+ }
+ item = g_list_previous(item);
+ }
+ while (item);
+
+ return NULL;
+}
+
+
+bool
+mp_view_manager_is_play_view(struct appdata * ad)
+{
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_FALSE(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_FALSE(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *last_item = g_list_last(ad->view_history);
+ MP_CHECK_FALSE(last_item);
+
+ mp_view_histroy_t *last_history = last_item->data;
+ MP_CHECK_FALSE(last_history);
+
+ if (last_history->content_type == MP_VIEW_CONTENT_PLAY)
+ return TRUE;
+ else
+ return FALSE;
+
+}
+
+Evas_Object *
+mp_view_manager_get_view_layout(struct appdata * ad, mp_view_content_t type)
+{
+ mp_view_histroy_t *history = NULL;
+
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *item = g_list_last(ad->view_history);
+ MP_CHECK_FALSE(item);
+
+ do
+ {
+ history = item->data;
+ if (history->content_type == type)
+ {
+ return history->view_layout;
+ }
+ item = g_list_previous(item);
+ }
+ while (item);
+
+ return NULL;
+}
+
+
+void
+mp_view_manager_update_list_contents(view_data_t * view_data, bool update_edit_list)
+{
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_histroy_t *history = NULL;
+ struct appdata *ad = view_data->ad;
+ MP_CHECK(ad);
+
+ GList *item = g_list_last(ad->view_history);
+ MP_CHECK(item);
+ do
+ {
+ history = item->data;
+ if (history->content_type == MP_VIEW_CONTENT_LIST)
+ {
+ mp_layout_data_t *layout_data = evas_object_data_get(history->view_layout, "layout_data");
+ if(layout_data)
+ {
+ if(layout_data->edit_mode && !update_edit_list)
+ {
+ DEBUG_TRACE("skip update edit view");
+ item = g_list_previous(item);
+ continue;
+ }
+ if(layout_data->album_delete_flag)
+ {
+ DEBUG_TRACE("skip update album view or artist view");
+ item = g_list_previous(item);
+ continue;
+ }
+ }
+ mp_view_layout_update(history->view_layout);
+ }
+ item = g_list_previous(item);
+ }
+ while (item);
+
+}
+
+void
+_mp_view_manager_set_back_button(Evas_Object * navibar, mp_view_histroy_t * last_history, Evas_Smart_Cb cb, void *data)
+{
+ MP_CHECK(last_history);
+
+ Evas_Object *button = NULL;
+ if(cb)
+ {
+ button = mp_widget_create_button(navibar, "naviframe/back_btn/music/default", NULL, NULL, cb, data);
+ elm_object_item_part_content_set(last_history->navi_item, ELM_NAVIFRAME_ITEM_PREV_BTN, button);
+ }
+ else
+ {
+ elm_object_item_part_content_set(last_history->navi_item, ELM_NAVIFRAME_ITEM_PREV_BTN, NULL);
+ }
+}
+
+void
+_mp_view_manager_set_title_button(Evas_Object * navibar, mp_view_histroy_t * last_history, char *label, char *icon_path,
+ mp_navi_control_button_type type, Evas_Smart_Cb cb, void *data)
+{
+ startfunc;
+ Evas_Object *button = NULL;
+ Evas_Object *control_bar = NULL;
+
+ MP_CHECK(navibar);
+ MP_CHECK(last_history);
+
+ if (!last_history->controlbar)
+ {
+ last_history->controlbar = elm_toolbar_add(navibar);
+ elm_toolbar_shrink_mode_set(last_history->controlbar, ELM_TOOLBAR_SHRINK_EXPAND);
+ if(MP_OPTION_HEADER_COND(last_history->content_type))
+ {
+ elm_object_style_set(last_history->controlbar, "music/naviframe");
+ elm_object_item_part_content_set(last_history->navi_item, ELM_NAVIFRAME_ITEM_OPTIONHEADER, last_history->controlbar);
+ }
+ else
+ {
+ elm_object_style_set(last_history->controlbar, "music/naviframe");
+ elm_object_item_part_content_set(last_history->navi_item, ELM_NAVIFRAME_ITEM_CONTROLBAR, last_history->controlbar);
+ }
+ }
+
+ control_bar = last_history->controlbar;
+ MP_CHECK(control_bar);
+
+ if(MP_OPTION_HEADER_COND(last_history->content_type))
+ {
+ if (label || icon_path)
+ {
+
+ button = elm_button_add(control_bar);
+ elm_object_style_set(button, "music/navigationbar_control/multiline");
+
+ evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5);
+
+ if (label)
+ elm_object_text_set(button, label);
+
+ evas_object_smart_callback_add(button, "clicked", cb, data);
+ elm_object_focus_allow_set(button, EINA_FALSE); /* Cancel the rename mode without be focused */
+
+ evas_object_show(button);
+ }
+
+ last_history->control_buttons[type] = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL);
+ elm_object_item_part_content_set(last_history->control_buttons[type], "object", button);
+
+ if (label)
+ {
+ if (!strcmp(GET_SYS_STR("IDS_COM_SK_EDIT"), label) ||!strcmp(GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), label))
+ {
+ last_history->edit_button = last_history->control_buttons[type];
+ }
+ else if (!strcmp(GET_SYS_STR("IDS_COM_SK_SEARCH"), label))
+ {
+ last_history->search_button = last_history->control_buttons[type];
+ }
+ else if (!strcmp(GET_SYS_STR("IDS_COM_SK_CANCEL"), label))
+ {
+ last_history->cancel_button = last_history->control_buttons[type];
+ }
+ }
+ }
+ else
+ {
+ if(!icon_path && !label) {
+ last_history->control_buttons[type] = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL);
+ elm_object_item_disabled_set(last_history->control_buttons[type], EINA_TRUE);
+ }
+ else
+ {
+ button = elm_button_add(control_bar);
+ elm_object_style_set(button, "music/bottom_control");
+
+ evas_object_size_hint_weight_set(button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(button, EVAS_HINT_FILL, 0.5);
+
+ evas_object_smart_callback_add(button, "clicked", cb, data);
+ elm_object_focus_allow_set(button, EINA_FALSE); /* Cancel the rename mode without be focused */
+
+ if(icon_path)
+ {
+ Evas_Object *icon = elm_icon_add(control_bar);
+ elm_icon_file_set(icon, icon_path, NULL);
+ elm_object_content_set(button, icon);
+ }
+
+ evas_object_show(button);
+
+ Elm_Object_Item *item = elm_toolbar_item_append(control_bar, NULL, NULL, NULL, NULL);
+ elm_object_item_part_content_set(item, "object", button);
+ last_history->control_buttons[type] = item;
+ }
+
+ if (label)
+ {
+ if (!strcmp(GET_SYS_STR("IDS_COM_SK_EDIT"), label) ||!strcmp(GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), label))
+ {
+ last_history->edit_button = last_history->control_buttons[type];
+ }
+ else if (!strcmp(GET_SYS_STR("IDS_COM_SK_SEARCH"), label))
+ {
+ last_history->search_button = last_history->control_buttons[type];
+ }
+ else if (!strcmp(GET_SYS_STR("IDS_COM_SK_CANCEL"), label))
+ {
+ last_history->cancel_button = last_history->control_buttons[type];
+ }
+ }
+ }
+}
+
+void
+mp_view_manager_set_title_and_buttons(view_data_t * view_data, char *title, void *data)
+{
+ startfunc;
+ Evas_Object *content = NULL;
+ int i = 0;
+
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ struct appdata *ad = view_data->ad;
+ MP_CHECK(ad);
+
+ GList *last_item = g_list_last(ad->view_history);
+ MP_CHECK(last_item);
+
+ mp_view_histroy_t *last_history = last_item->data;
+ MP_CHECK(last_history);
+
+ content = last_history->view_layout;
+ MP_CHECK(content);
+
+ Evas_Object *navibar = view_data->navibar;
+ MP_CHECK(navibar);
+
+ if (title)
+ {
+ DEBUG_TRACE("title: %s", title);
+ elm_object_item_text_set(last_history->navi_item, title);
+ }
+
+ //delete all buttons...
+
+ for (i = 0; i < MP_NAVI_CONTROL_BUTTON_MAX; i++)
+ {
+ if (last_history->control_buttons[i])
+ {
+ elm_object_item_del(last_history->control_buttons[i]);
+ last_history->control_buttons[i] = NULL;
+ }
+ }
+ last_history->edit_button = NULL;
+ last_history->search_button = NULL;
+ last_history->cancel_button = NULL;
+
+ //destroy back button
+ _mp_view_manager_set_back_button(navibar, last_history, NULL, NULL);
+
+ if (last_history->content_type == MP_VIEW_CONTENT_LIST)
+ {
+ mp_layout_data_t *layout_data = evas_object_data_get(last_history->view_layout, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ DEBUG_TRACE("MP_VIEW_CONTENT_LIST. category: %d, rename mode: %d, add tracks : %d ",
+ layout_data->category, layout_data->rename_mode, layout_data->ad->b_add_tracks);
+ DEBUG_TRACE("layout_data->playlist_id: %d", layout_data->playlist_id);
+
+ if (layout_data->edit_mode)
+ {
+ if (layout_data->ad->b_add_tracks)
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history, GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"),
+ MP_ICON_NAVI_ADD_TO_PLST, MP_NAVI_CONTROL_BUTTON1,
+ mp_track_view_add_to_playlist_done_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON4, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_CANCEL"), MP_ICON_NAVI_CANCEL,
+ MP_NAVI_CONTROL_BUTTON5,
+ mp_track_view_add_to_playlist_cancel_cb, data);
+ }
+ else
+ {
+ if (layout_data->category == MP_LAYOUT_TRACK_LIST)
+ {
+ DEBUG_TRACE("");
+ if (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
+ {
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_OPT_REMOVE"),
+ MP_ICON_NAVI_DELETE,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_edit_view_delete_cb, data);
+ }
+ else
+ {
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_OPT_DELETE"),
+ MP_ICON_NAVI_DELETE,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_edit_view_delete_cb, data);
+ }
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), MP_ICON_NAVI_ADD_TO_PLST,
+ MP_NAVI_CONTROL_BUTTON3,
+ mp_edit_view_add_to_plst_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON4, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_CANCEL"),
+ MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON5,
+ mp_edit_view_cencel_cb, data);
+
+ }
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), MP_ICON_NAVI_ADD_TO_PLST,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_edit_view_add_to_plst_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON4, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_CANCEL"),
+ MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON5,
+ mp_edit_view_cencel_cb, data);
+
+ }
+ else
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_OPT_DELETE"),
+ MP_ICON_NAVI_DELETE, MP_NAVI_CONTROL_BUTTON1,
+ mp_edit_view_delete_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON4, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_CANCEL"),
+ MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON5,
+ mp_edit_view_cencel_cb, data);
+
+ }
+ }
+
+ }
+ else
+ {
+ if(!layout_data->ad->b_add_tracks)
+ _mp_view_manager_set_back_button(navibar, last_history, mp_common_back_button_cb, view_data);
+
+ if (title)
+ layout_data->navibar_title = g_strdup(title);
+
+ if (AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type
+ || AUDIO_SVC_TRACK_BY_ARTIST == layout_data->track_type)
+ layout_data->navibar_title = g_strdup(layout_data->type_str);
+
+ layout_data->callback_data = data;
+ if (layout_data->category != MP_LAYOUT_PLAYLIST_LIST)
+ {
+ if (layout_data->ad->b_add_tracks)
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"),
+ MP_ICON_NAVI_ADD_TO_PLST, MP_NAVI_CONTROL_BUTTON5,
+ mp_track_view_add_to_playlist_done_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON4, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_CANCEL"),
+ MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON1,
+ mp_track_view_add_to_playlist_cancel_cb,
+ data);
+ }
+ else if (layout_data->track_type == AUDIO_SVC_TRACK_BY_PLAYLIST)
+ {
+ if (!mp_view_manager_get_view_layout(ad, MP_VIEW_CONTENT_SEARCH))
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_EDIT"), MP_ICON_NAVI_EDIT,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_common_edit_button_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ if (layout_data->playlist_id > 0)
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_ADD"),
+ MP_ICON_NAVI_NEW,
+ MP_NAVI_CONTROL_BUTTON3,
+ mp_playlist_view_add_button_cb,
+ data);
+ else
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_SEARCH"),
+ MP_ICON_NAVI_SEARCH,
+ MP_NAVI_CONTROL_BUTTON3,
+ mp_common_search_button_cb,
+ data);
+
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON4, NULL, NULL);
+ }
+ else
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_EDIT"), MP_ICON_NAVI_EDIT,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_common_edit_button_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON4, NULL, NULL);
+ }
+ }
+ else
+ {
+ if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ {
+ if (!mp_view_manager_get_view_layout(ad, MP_VIEW_CONTENT_SEARCH))
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"),
+ MP_ICON_NAVI_EDIT,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_common_edit_button_cb,
+ data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON2,
+ NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_SEARCH"),
+ MP_ICON_NAVI_SEARCH,
+ MP_NAVI_CONTROL_BUTTON3,
+ mp_common_search_button_cb,
+ data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON4,
+ NULL, NULL);
+ }
+ else
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"),
+ MP_ICON_NAVI_EDIT,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_common_edit_button_cb,
+ data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON2,
+ NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON3,
+ NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON4,
+ NULL, NULL);
+ }
+ }
+ else
+ {
+ if (!mp_view_manager_get_view_layout(ad, MP_VIEW_CONTENT_SEARCH))
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_EDIT"),
+ MP_ICON_NAVI_EDIT,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_common_edit_button_cb,
+ data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON2,
+ NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_SEARCH"),
+ MP_ICON_NAVI_SEARCH,
+ MP_NAVI_CONTROL_BUTTON3,
+ mp_common_search_button_cb,
+ data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON4,
+ NULL, NULL);
+ }
+ else
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_EDIT"),
+ MP_ICON_NAVI_EDIT,
+ MP_NAVI_CONTROL_BUTTON1,
+ mp_common_edit_button_cb,
+ data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON2,
+ NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON3,
+ NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL,
+ NULL, MP_NAVI_CONTROL_BUTTON4,
+ NULL, NULL);
+ }
+ }
+ }
+ }
+ else
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_EDIT"),
+ MP_ICON_NAVI_EDIT, MP_NAVI_CONTROL_BUTTON1,
+ mp_common_edit_button_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_STR("IDS_MUSIC_BODY_CREATE_PLAYLIST"), MP_ICON_NAVI_NEW,
+ MP_NAVI_CONTROL_BUTTON2,
+ mp_playlist_view_create_playlist_button_cb,
+ data);
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_SEARCH"),
+ MP_ICON_NAVI_SEARCH, MP_NAVI_CONTROL_BUTTON3,
+ mp_common_search_button_cb, data);
+ }
+ }
+
+ }
+ else if (last_history->content_type == MP_VIEW_CONTENT_NEW_PLAYLIST)
+ {
+ DEBUG_TRACE("MP_VIEW_CONTENT_NEW_PLAYLIST. ");
+ mp_layout_data_t *layout_data = evas_object_data_get(last_history->view_layout, "layout_data");
+ if (layout_data)
+ {
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ if (layout_data->view_mode == MP_VIEW_MODE_EDIT)
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_DONE"),
+ MP_ICON_NAVI_DONE, MP_NAVI_CONTROL_BUTTON1,
+ mp_edit_view_create_new_done_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history,
+ GET_SYS_STR("IDS_COM_SK_CANCEL"), MP_ICON_NAVI_CANCEL,
+ MP_NAVI_CONTROL_BUTTON4,
+ mp_edit_view_create_new_cancel_cb, data);
+ }
+ }
+ else
+ {
+ DEBUG_TRACE("");
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_DONE"),
+ MP_ICON_NAVI_DONE, MP_NAVI_CONTROL_BUTTON1,
+ mp_playlist_view_create_new_done_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON4, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_CANCEL"),
+ MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON5,
+ mp_playlist_view_create_new_cancel_cb, data);
+ }
+ }
+ else if (last_history->content_type == MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP)
+ {
+ DEBUG_TRACE("MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP. ");
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_DONE"),
+ MP_ICON_NAVI_ADD_TO_PLST, MP_NAVI_CONTROL_BUTTON1,
+ mp_menu_add_to_play_list_done_create_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_CANCEL"),
+ MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON4,
+ mp_menu_add_to_play_list_cancel_create_cb, data);
+ }
+ else if (last_history->content_type == MP_VIEW_CONTENT_NEW_PLAYLIST_BY_EDIT)
+ {
+ DEBUG_TRACE("MP_VIEW_CONTENT_NEW_PLAYLIST_BY_SWEEP. ");
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_DONE"),
+ MP_ICON_NAVI_ADD_TO_PLST, MP_NAVI_CONTROL_BUTTON1,
+ mp_edit_view_create_new_done_cb, data);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON2, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, NULL, NULL,
+ MP_NAVI_CONTROL_BUTTON3, NULL, NULL);
+ _mp_view_manager_set_title_button(navibar, last_history, GET_SYS_STR("IDS_COM_SK_CANCEL"),
+ MP_ICON_NAVI_CANCEL, MP_NAVI_CONTROL_BUTTON4,
+ mp_edit_view_create_new_cancel_cb, data);
+ }
+ else if (last_history->content_type == MP_VIEW_CONTENT_SEARCH)
+ {
+ DEBUG_TRACE("MP_VIEW_CONTENT_SEARCH. ");
+ _mp_view_manager_set_back_button(navibar, last_history, mp_common_back_button_cb, view_data);
+ }
+ else if (last_history->content_type == MP_VIEW_CONTENT_PLAY)
+ {
+ DEBUG_TRACE("MP_VIEW_CONTENT_PLAY. ");
+ mp_play_view_set_snd_path_sensitivity(ad);
+ }
+ else if (last_history->content_type == MP_VIEW_CONTENT_INFO)
+ {
+ DEBUG_TRACE("MP_VIEW_CONTENT_INFO. ");
+ _mp_view_manager_set_back_button(navibar, last_history, mp_play_view_info_back_cb, ad);
+ }
+ else
+ {
+ WARN_TRACE("unexpected value: %d", last_history->content_type);
+ }
+}
+
+void
+mp_view_manager_set_now_playing(view_data_t * view_data, bool show)
+{
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_histroy_t *history = NULL;
+ struct appdata *ad = view_data->ad;
+ MP_CHECK(ad);
+
+ GList *item = g_list_last(ad->view_history);
+ GList *last_item = item;
+ MP_CHECK(item);
+ do
+ {
+ history = item->data;
+ if (history->content_type == MP_VIEW_CONTENT_LIST)
+ {
+ if (show)
+ {
+ mp_view_layout_show_now_playing(history->view_layout);
+ if(item != last_item) //freeze timer not to update every view. update top view.
+ mp_view_layout_progress_timer_freeze(history->view_layout);
+ mp_view_layout_set_now_playing_info(history->view_layout);
+ }
+ else
+ mp_view_layout_hide_now_playing(history->view_layout);
+ }
+ item = g_list_previous(item);
+ }
+ while (item);
+
+}
+
+void
+mp_view_manager_freeze_progress_timer(struct appdata *ad)
+{
+ Evas_Object *top_view = mp_view_manager_get_last_view_layout(ad);
+ if (top_view)
+ mp_view_layout_progress_timer_freeze(top_view);
+
+ mp_play_view_progress_timer_freeze(ad);
+}
+
+void
+mp_view_manager_thaw_progress_timer(struct appdata *ad)
+{
+ mp_retm_if(!ad->prohibit_aul_relaunch, "app is in background. not thaw progress timer.. ");
+
+ Evas_Object *top_view = mp_view_manager_get_last_view_layout(ad);
+ if (top_view)
+ mp_view_layout_progress_timer_thaw(top_view);
+
+ mp_play_view_progress_timer_thaw(ad);
+}
+
+Elm_Object_Item *
+mp_view_manager_get_edit_controlbar_item(struct appdata *ad)
+{
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *last_item = g_list_last(ad->view_history);
+ MP_CHECK_NULL(last_item);
+
+ mp_view_histroy_t *last_history = last_item->data;
+ MP_CHECK_NULL(last_history);
+
+ return last_history->edit_button;
+}
+
+Elm_Object_Item *
+mp_view_manager_get_search_controlbar_item(struct appdata * ad)
+{
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *last_item = g_list_last(ad->view_history);
+ MP_CHECK_NULL(last_item);
+
+ mp_view_histroy_t *last_history = last_item->data;
+ MP_CHECK_NULL(last_history);
+
+ return last_history->search_button;
+}
+
+Elm_Object_Item *
+mp_view_manager_get_cancel_controlbar_item(struct appdata * ad)
+{
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *last_item = g_list_last(ad->view_history);
+ MP_CHECK_NULL(last_item);
+
+ mp_view_histroy_t *last_history = last_item->data;
+ MP_CHECK_NULL(last_history);
+
+ return last_history->cancel_button;
+}
+
+
+Elm_Object_Item *
+mp_view_manager_get_controlbar_item(struct appdata * ad, mp_navi_control_button_type type)
+{
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->library);
+
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK_NULL(cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK_NULL(cur_view_data);
+ MP_CHECK_VIEW_DATA(cur_view_data);
+
+ GList *last_item = g_list_last(ad->view_history);
+ MP_CHECK_NULL(last_item);
+
+ mp_view_histroy_t *last_history = last_item->data;
+ MP_CHECK_NULL(last_history);
+
+ return last_history->control_buttons[type];
+}
+
+void
+mp_view_manager_pop_info_view(struct appdata *ad)
+{
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+ MP_CHECK(ad->playing_view);
+
+ view_data_t *view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK(view_data);
+
+ mp_view_manager_pop_to_view_content(view_data, MP_VIEW_CONTENT_PLAY);
+
+ MP_CHECK(ad->playing_view);
+ if (ad->playing_view->layout)
+ evas_object_show(ad->playing_view->layout);
+}
+
+void
+mp_view_manager_pop_play_view(struct appdata *ad)
+{
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+
+ view_data_t *view_data;
+
+ view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK(view_data);
+
+ if (ad->playing_view)
+ mp_view_manager_pop_to_view_content(view_data, MP_VIEW_CONTENT_PLAY);
+}
+
+void
+mp_view_manager_clear(struct appdata *ad)
+{
+ MP_CHECK(ad);
+
+ GList *view_item = g_list_last(ad->view_history);
+
+ while (ad->view_history)
+ {
+ SAFE_FREE(view_item->data);
+ ad->view_history =
+ g_list_delete_link(ad->view_history, ad->view_history);
+ }
+
+}
+
+void
+mp_view_manager_set_option_header_visible(Elm_Object_Item *navi_item, mp_view_content_t content_type)
+{
+ DEBUG_TRACE("content type: %d", content_type);
+ if(MP_OPTION_HEADER_COND(content_type))
+ elm_object_item_signal_emit(navi_item, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_OPEN);
+ else
+ elm_object_item_signal_emit(navi_item, ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_CLOSE);
+
+}
+
diff --git a/src/common/mp-widget.c b/src/common/mp-widget.c
new file mode 100755
index 0000000..7f7a4fb
--- /dev/null
+++ b/src/common/mp-widget.c
@@ -0,0 +1,370 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-widget.h"
+#include "mp-player-debug.h"
+#include "mp-common.h"
+#include "mp-util.h"
+#include "mp-popup.h"
+
+#define MAX_LEN_VIB_DURATION 0.5
+
+static void
+_mp_widget_genlist_flick_start_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ elm_object_scroll_freeze_push(obj);
+}
+
+static void
+_mp_widget_genlist_flick_stop_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ elm_object_scroll_freeze_pop(obj);
+}
+
+Evas_Object *
+mp_widget_navigation_new(Evas_Object * parent, struct appdata *ad)
+{
+ Evas_Object *navi_bar;
+ mp_retv_if(parent == NULL, NULL);
+ navi_bar = elm_naviframe_add(parent);
+ mp_retvm_if(navi_bar == NULL, NULL, "Fail to create navigation bar");
+ evas_object_smart_callback_add(navi_bar, "transition,finished", mp_common_navigationbar_finish_effect, ad);
+ evas_object_show(navi_bar);
+ return navi_bar;
+}
+
+Evas_Object *
+mp_widget_genlist_create(struct appdata *ad, Evas_Object * parent, bool homogeneous)
+{
+ Evas_Object *list = NULL;
+
+ list = elm_genlist_add(parent);
+ CHECK(list);
+ evas_object_show(list);
+ elm_genlist_mode_set(list, ELM_LIST_COMPRESS);
+ elm_genlist_homogeneous_set(list, homogeneous);
+ evas_object_size_hint_weight_set(list, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(list, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ evas_object_smart_callback_add(list, "drag,start,left", _mp_widget_genlist_flick_start_cb, ad);
+ evas_object_smart_callback_add(list, "drag,start,right", _mp_widget_genlist_flick_start_cb, ad);
+ evas_object_smart_callback_add(list, "drag,stop", _mp_widget_genlist_flick_stop_cb, ad);
+
+ return list;
+}
+
+static void
+_mp_widget_lowbattery_del_cb(void *data, Evas * e, Evas_Object * eo, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ ad->popup[MP_POPUP_NORAML] = NULL;
+}
+
+static void
+_mp_widget_lowbattery_res_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ evas_object_del(obj);
+
+ return;
+}
+
+bool
+mp_widget_check_lowbattery(void *data, Evas_Object * parent)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ if (mp_check_battery_available())
+ {
+ Evas_Object *popup = elm_popup_add(parent);
+ mp_popup_desc_set(popup, GET_SYS_STR("IDS_COM_BODY_LOW_BATTERY"));
+ mp_popup_set_response_cb(popup, _mp_widget_lowbattery_res_cb, ad);
+ mp_popup_button_set(popup, "button1", GET_SYS_STR("IDS_COM_SK_OK"), MP_POPUP_YES);
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _mp_widget_lowbattery_del_cb, ad);
+ evas_object_show(popup);
+
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+bool
+mp_widget_load_fastscroller(Evas_Object * index, struct music_list_item * item, char **latest_string)
+{
+ char *current_group_title = NULL;
+ char *item_value = NULL;
+
+ MP_CHECK_FALSE(index);
+ MP_CHECK_FALSE(item);
+
+ audio_svc_track_data_type_e item_type = AUDIO_SVC_TRACK_DATA_TITLE;
+ bool make_group_title = false;
+
+
+ struct appdata *ad = item->ad;
+ MP_CHECK_FALSE(ad);
+
+ item_type = (int)evas_object_data_get(index, MP_FAST_SCROLLER_TYPE);
+
+ item_value = mp_util_item_get_value_by_type(item_type, item);
+
+ if (item_value)
+ {
+ if (*latest_string)
+ {
+ char *title_initial = mp_util_get_utf8_initial(item_value);
+
+ if (title_initial)
+ {
+ if (strcmp(*latest_string, title_initial) != 0)
+ {
+ make_group_title = TRUE;
+ current_group_title = title_initial;
+ }
+ else
+ {
+ make_group_title = false;
+ IF_FREE(title_initial);
+ }
+ }
+ }
+ else
+ {
+ make_group_title = true;
+ current_group_title = mp_util_get_utf8_initial(item_value);
+ mp_debug("latest_set_group is invalid=%s", current_group_title);
+ }
+ }
+
+ if (current_group_title && make_group_title)
+ {
+ mp_debug("current_group_title =%s", current_group_title);
+ elm_index_item_append(index, current_group_title, NULL, item->list_item);
+ IF_FREE(*latest_string);
+ *latest_string = strdup(current_group_title);
+ }
+
+ IF_FREE(current_group_title);
+ IF_FREE(item_value);
+
+ return true;
+}
+
+
+int
+mp_widget_text_popup(void *data, const char *message)
+{
+ struct appdata *ad = data;
+ Evas_Object *popup;
+ popup = elm_popup_add(ad->win_main);
+ ad->notify_delete = popup;
+
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ mp_popup_desc_set(popup, message);
+ mp_popup_block_clicked_set(popup);
+ mp_popup_timeout_set(popup, 2.0);
+ evas_object_show(popup);
+ return 0;
+}
+
+Evas_Object *
+mp_widget_create_icon(Evas_Object * obj, const char *path, int w, int h)
+{
+ Evas_Object *thumbnail = elm_bg_add(obj);
+ elm_bg_load_size_set(thumbnail, w, h);
+
+ Evas *evas = evas_object_evas_get(obj);
+ MP_CHECK_NULL(evas);
+ if ((path != NULL) && (strlen(path) > 0) && mp_util_is_image_valid(evas, path))
+ {
+ elm_bg_file_set(thumbnail, path, NULL);
+ }
+ else
+ {
+ elm_bg_file_set(thumbnail, DEFAULT_THUMBNAIL, NULL);
+ }
+
+ evas_object_size_hint_aspect_set(thumbnail, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+ return thumbnail;
+}
+
+Evas_Object *
+mp_widget_create_bgimg(Evas_Object * parent)
+{
+ Evas_Object *bg;
+
+ mp_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+ DEBUG_TRACE_FUNC();
+
+ bg = evas_object_rectangle_add(evas_object_evas_get(parent));
+ evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(parent, bg);
+ evas_object_color_set(bg, 37, 37, 37, 255);
+ evas_object_show(bg);
+ return bg;
+}
+
+
+Evas_Object *
+mp_widget_create_button(Evas_Object * parent, char *style, char *caption, Evas_Object * icon,
+ void (*func) (void *, Evas_Object *, void *), void *data)
+{
+ if (!parent)
+ return NULL;
+
+ Evas_Object *btn;
+
+ btn = elm_button_add(parent);
+
+ if (style)
+ elm_object_style_set(btn, style);
+
+ if (caption)
+ elm_object_text_set(btn, caption);
+
+ if (icon)
+ elm_object_content_set(btn, icon);
+
+ elm_object_focus_allow_set(btn, EINA_FALSE);
+ evas_object_propagate_events_set(btn, EINA_FALSE);
+
+ evas_object_smart_callback_add(btn, "clicked", func, (void *)data);
+
+ return btn;
+}
+
+static void
+_mp_widget_entry_maxlength_reached_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = data;
+ MP_CHECK(ad);
+ mp_util_play_vibration(ad, MAX_LEN_VIB_DURATION);
+}
+
+static void
+_mp_widget_entry_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = data;
+ MP_CHECK(ad);
+
+ Evas_Object *editfield = data;
+ MP_CHECK(editfield);
+
+ Evas_Object *entry = obj;
+ MP_CHECK(entry);
+
+ Eina_Bool entry_empty = elm_entry_is_empty(entry);
+ const char *eraser_signal = NULL;
+ const char *guidetext_signal = NULL;
+ if (entry_empty) {
+ eraser_signal = "elm,state,eraser,hide";
+ guidetext_signal = "elm,state,guidetext,show";
+ } else {
+ eraser_signal = "elm,state,eraser,show";
+ guidetext_signal = "elm,state,guidetext,hide";
+ }
+ elm_object_signal_emit(editfield, eraser_signal, "elm");
+ elm_object_signal_emit(editfield, guidetext_signal, "elm");
+}
+
+static void
+_mp_widget_entry_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button is clicked, empty entry's contents.
+{
+ Evas_Object *entry = data;
+ MP_CHECK(entry);
+
+ elm_entry_entry_set(entry, "");
+}
+
+Evas_Object *
+mp_widget_create_editfield(Evas_Object * parent, int limit_size, char *guide_txt, struct appdata *ad)
+{
+ startfunc;
+ Evas_Object *editfield = NULL;
+ Evas_Object *entry = NULL;
+ editfield = elm_layout_add(parent);
+ elm_layout_theme_set(editfield, "layout", "editfield", "default");
+ MP_CHECK_NULL(editfield);
+ evas_object_size_hint_weight_set(editfield, EVAS_HINT_EXPAND,
+ EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(editfield, EVAS_HINT_FILL,
+ EVAS_HINT_FILL);
+
+ entry = elm_entry_add(editfield);
+ MP_CHECK_NULL(entry);
+ elm_object_style_set(entry, "music/default");
+ elm_entry_single_line_set(entry, EINA_TRUE);
+ elm_entry_scrollable_set(entry, EINA_TRUE);
+ elm_entry_autocapital_type_set(entry, ELM_AUTOCAPITAL_TYPE_NONE);
+ elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+
+ evas_object_data_set(editfield, "entry", entry);
+ elm_object_part_content_set(editfield, "elm.swallow.content", entry);
+
+ evas_object_smart_callback_add(entry, "changed", _mp_widget_entry_changed_cb, editfield);
+ elm_object_signal_callback_add(editfield, "elm,eraser,clicked", "elm", _mp_widget_entry_eraser_clicked_cb, entry);
+
+ if(limit_size > 0)
+ {
+ static Elm_Entry_Filter_Limit_Size limit_filter_data;
+
+ limit_filter_data.max_char_count = 0;
+ limit_filter_data.max_byte_count = limit_size;
+ elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &limit_filter_data);
+ evas_object_smart_callback_add(entry, "maxlength,reached", _mp_widget_entry_maxlength_reached_cb,
+ ad);
+ }
+
+ if(guide_txt)
+ elm_object_part_text_set(editfield, "elm.guidetext", guide_txt);
+
+ return editfield;
+}
+
+Evas_Object *
+mp_widget_editfield_entry_get(Evas_Object *editfield)
+{
+ MP_CHECK_NULL(editfield);
+
+ Evas_Object *entry = evas_object_data_get(editfield, "entry");
+
+ return entry;
+}
+
+
+Evas_Object *
+mp_widget_create_title_btn(Evas_Object *parent, const char *text, const char * icon_path, Evas_Smart_Cb func, void *data)
+{
+ Evas_Object *btn = elm_button_add(parent);
+ Evas_Object * icon = NULL;
+ MP_CHECK_NULL(btn);
+ if(text)
+ elm_object_text_set(btn, text);
+ else if(icon_path)
+ {
+ icon = elm_icon_add(btn);
+ MP_CHECK_NULL(icon);
+ elm_icon_file_set(icon, icon_path, NULL);
+ elm_object_content_set(btn, icon);
+ elm_object_style_set(btn, "music/title_button");
+ }
+ evas_object_smart_callback_add(btn, "clicked", func, data);
+ return btn;
+}
diff --git a/src/core/include/mp-file-tag-info.h b/src/core/include/mp-file-tag-info.h
new file mode 100755
index 0000000..2de91cb
--- /dev/null
+++ b/src/core/include/mp-file-tag-info.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __mp_file_tag_info_H__
+#define __mp_file_tag_info_H__
+
+typedef struct _tag_info_t
+{
+ char *album;
+ char *genre;
+ char *author;
+ char *artist;
+ char *title;
+ char *copyright;
+ char *date;
+ char *desc;
+ char *albumart_path;
+ char *track;
+ char *rating;
+ int duration;
+ int audio_codec;
+ int audio_samplerate;
+ int audio_bitrate;
+ int audio_channel;
+} mp_tag_info_t;
+
+int mp_file_tag_info_get_all_tag(const char *filename, mp_tag_info_t * tag_info);
+void mp_file_tag_free(mp_tag_info_t * tag_info);
+
+#endif //__mp_file_tag_info_H__
diff --git a/src/core/include/mp-http-mgr.h b/src/core/include/mp-http-mgr.h
new file mode 100755
index 0000000..c70b412
--- /dev/null
+++ b/src/core/include/mp-http-mgr.h
@@ -0,0 +1,91 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_HTTP_MGR_H__
+#define __MP_HTTP_MGR_H__
+
+#include "mp-define.h"
+
+#define HTTP_ADDR_LEN_MAX 64
+typedef enum
+{
+ MP_HTTP_SVC_DEFAULT,
+ MP_HTTP_SVC_STREAMING,
+ MP_HTTP_SVC_MAX,
+} mp_http_svc_type;
+
+typedef enum
+{
+ MP_HTTP_RESPONSE_NORMAL,
+ MP_HTTP_RESPONSE_DISCONNECT,
+} mp_http_response_type;
+
+typedef enum
+{
+ MP_HTTP_RESP_FAIL,
+ MP_HTTP_RESP_SUCCESS,
+} MpHttpRespResultType_t;
+
+typedef void (*MpHttpRespCb) (gpointer user_data, int type, char *id, MpHttpRespResultType_t res, int view_id);
+typedef bool (*MpHttpRespExcuteCb)(gpointer user_data, mp_http_response_type response_type);
+typedef bool(*MpHttpOpenExcuteCb) (gpointer user_data);
+
+typedef enum
+{
+ MP_HTTP_STATE_NONE = 0,
+ MP_HTTP_STATE_OFF = 0,
+ MP_HTTP_STATE_CELLULAR,
+ MP_HTTP_STATE_WIFI,
+} MpHttpState_t;
+
+typedef struct mp_http_mgr_t
+{
+ struct appdata *ad;
+ MpHttpState_t http_state;
+ char ip[HTTP_ADDR_LEN_MAX];
+ char proxy[HTTP_ADDR_LEN_MAX];
+
+ bool svc_state[MP_HTTP_SVC_MAX];
+ void *cb_data[MP_HTTP_SVC_MAX];
+ MpHttpOpenExcuteCb http_open_cb[MP_HTTP_SVC_MAX];
+ MpHttpRespExcuteCb http_resp_cb[MP_HTTP_SVC_MAX];
+} mp_http_mgr_t;
+
+typedef struct mp_http_data_t
+{
+ struct appdata *ad;
+ int req_type;
+ char *req_id;
+ MpHttpRespCb user_callback;
+ int view_id;
+ void *user_data;
+} mp_http_data_t;
+
+bool mp_http_mgr_create(void *data);
+bool mp_http_mgr_destory(void *data);
+MpHttpState_t mp_http_mgr_get_state(void *data);
+/* return value should be freed */
+char* mp_http_mgr_get_user_agent();
+
+const char* mp_http_mgr_get_ip(void *data);
+const char* mp_http_mgr_get_proxy(void *data);
+bool mp_http_mgr_get_svc_state(void *data, mp_http_svc_type svc_type);
+bool mp_http_mgr_start_svc(void *data, mp_http_svc_type svc_type, MpHttpOpenExcuteCb open_cb, MpHttpRespExcuteCb rsp_cb, gpointer cb_data);
+bool mp_http_mgr_stop_svc(void *data, mp_http_svc_type svc_type, mp_http_response_type response_type);
+
+#endif //__MP_HTTP_MGR_H__
diff --git a/src/core/include/mp-play-list.h b/src/core/include/mp-play-list.h
new file mode 100755
index 0000000..3d0826d
--- /dev/null
+++ b/src/core/include/mp-play-list.h
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_PLAY_LIST_H_
+#define __MP_PLAY_LIST_H_
+
+#include <mm_player.h>
+#include "mp-define.h"
+typedef enum
+{
+ MP_PLST_TYPE_NONE,
+ MP_PLST_TYPE_PATH, //just one file, like email, mms
+ MP_PLST_TYPE_GLIST, //enter music from main menu
+} mp_plst_type_t;
+
+typedef enum
+{
+ MP_PLST_RET_ERR = 0,
+ MP_PLST_RET_OK,
+ MP_PLST_RET_END,
+} mp_plst_ret_t;
+
+typedef struct mp_list_item
+{
+ char fid[AUDIO_SVC_UUID_SIZE+1];
+ gint list_index;
+ bool removed;
+} mp_list_item;
+
+typedef struct music_list_item
+{
+ Evas_Object *gen_list;
+ Elm_Object_Item *list_item;
+
+ /* music metadata */
+ int id;
+ char filename[MAX_NAM_LEN+1];
+ char title[AUDIO_SVC_METADATA_LEN_MAX+1];
+ char artist[AUDIO_SVC_METADATA_LEN_MAX+1];
+ char album[AUDIO_SVC_METADATA_LEN_MAX+1];
+ char time[16];
+ char albumart[MAX_NAM_LEN+1];
+ struct appdata *ad;
+ struct music_list_item *prev;
+ struct music_list_item *next;
+
+ char key_id[AUDIO_SVC_UUID_SIZE+1];
+ gint playlist_uid;
+ gint index; // private.
+ gint list_index;
+ gboolean checked;
+ gint order;
+
+ int category;
+
+} music_list_item;
+typedef struct
+{
+ struct music_list_item *current_item;
+ int current_index;
+ bool play_shuffle_state; //shuffle on/off
+ GList *list; //normal list do not free, just refer normal_list or shuffle_list
+ GList *normal_list;
+ GList *shuffle_list;
+ int start_index;
+ int count;
+ mp_plst_type_t list_type;
+ struct appdata *ad;
+ char *path_excpetionDB;
+
+ char *type_string;
+ char *filter_string;
+ int playlist_id;
+ audio_svc_track_type_e item_type;
+} mp_play_list;
+
+void mp_play_list_item_copy(music_list_item ** to, music_list_item * from);
+
+music_list_item *mp_play_list_get_current_item(mp_play_list * playing_list); // do not free
+bool mp_play_list_get_prev_item(void *data, mp_play_list * play_list, music_list_item ** item); //must be free , allocation inside
+mp_plst_ret_t mp_play_list_get_next_item(void *data, mp_play_list * play_list, music_list_item ** item, bool forced); //must be free , allocation inside
+bool mp_play_list_get_item_by_index(void *data, mp_play_list * playing_list, music_list_item ** item, int value); //must be free , allocation inside
+int mp_play_list_get_normal_list_index_by_fid(mp_play_list * play_list, char *fid);
+
+
+bool mp_play_list_set_current_item(void *data, mp_play_list * playing_list, char *key_id);
+int mp_play_list_get_current_list_count(mp_play_list * play_list);
+
+bool mp_play_list_clear_play_list(mp_play_list ** play_list);
+
+bool mp_play_list_refresh(void *data);
+bool mp_play_list_reset(void *data, mp_play_list ** set_play_list, char *fid);
+bool mp_play_list_create_play_list(void *data, AudioHandleType * svc_track, int count, int current_index,
+ int playlist_id);
+bool mp_play_list_create_by_path(void *data, mp_play_list ** set_play_list, char *path);
+bool mp_play_list_remove_item_by_key(mp_play_list * play_list, char *key_id);
+bool mp_play_list_create_current_play_list(void *data, mp_play_list ** set_play_list,
+ AudioHandleType * svc_track, const char *full_path,
+ int count, int current_index, bool shuffler_play_list, int playlist_id);
+bool mp_play_list_delete_item(mp_play_list *playing_list, char *fid);
+#endif
diff --git a/src/core/include/mp-player-control.h b/src/core/include/mp-player-control.h
new file mode 100755
index 0000000..bbca4c1
--- /dev/null
+++ b/src/core/include/mp-player-control.h
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __DEF_music_player_contro_H_
+#define __DEF_music_player_contro_H_
+
+#include <Elementary.h>
+#include "music.h"
+
+void mp_play_control_play_cb(void *data, Evas_Object * o, const char *emission, const char *source);
+void mp_play_control_ff_cb(void *data, Evas_Object * o, const char *emission, const char *source);
+void mp_play_control_rew_cb(void *data, Evas_Object * o, const char *emission, const char *source);
+void mp_play_control_volume_down_cb(void *data, Evas_Object * o, const char *emission, const char *source);
+void mp_play_control_volume_up_cb(void *data, Evas_Object * o, const char *emission, const char *source);
+void mp_play_control_volume_cb(void *data, Evas_Object * o, const char *emission, const char *source);
+void mp_play_control_menu_cb(void *data, Evas_Object * o, const char *emission, const char *source);
+void mp_play_control_end_of_stream(void *data);
+bool mp_player_control_ready_new_file(void *data, bool check_drm);
+void mp_play_stop_and_updateview(void *data, bool mmc_removed);
+void mp_play_control_visible_set(void *data, bool play_enable);
+void mp_play_control_shuffle_set(void *data, bool shuffle_enable);
+void mp_play_control_repeat_set(void *data, int repeat_state);
+
+
+#endif /*__DEF_music_player_contro_H_*/
diff --git a/src/core/include/mp-player-drm.h b/src/core/include/mp-player-drm.h
new file mode 100755
index 0000000..3a03d99
--- /dev/null
+++ b/src/core/include/mp-player-drm.h
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_PLAYER_DRM_H_
+#define __MP_PLAYER_DRM_H_
+
+typedef struct
+{
+ bool forward;
+ int version;
+ int constraint_type;
+ char validity[256];
+ char description[256];
+} mp_drm;
+
+void mp_drm_set_consumption(bool enabled);
+bool mp_drm_get_consumption(void);
+void mp_drm_start_consumption(char *path);
+void mp_drm_pause_consumption(void);
+void mp_drm_resume_consumption(void);
+void mp_drm_stop_consumption(void);
+bool mp_drm_file_right(char *path);
+bool mp_drm_has_valid_ro(char *path);
+bool mp_drm_get_description(void *data, char *path);
+bool mp_drm_check_forward(void *data, char *path);
+bool mp_drm_check_left_ro(void *data, char *path);
+bool mp_drm_check_expiration(char *path, bool expired);
+bool mp_drm_check_foward_lock(char *path);
+
+#endif /*__MP_PLAYER_DRM_H_*/
diff --git a/src/core/include/mp-player-mgr.h b/src/core/include/mp-player-mgr.h
new file mode 100755
index 0000000..5454fa2
--- /dev/null
+++ b/src/core/include/mp-player-mgr.h
@@ -0,0 +1,49 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_player_mgr_H_
+#define __MP_player_mgr_H_
+
+#include <mm_sound.h>
+#include <mm_sound_private.h>
+#include <mm_player.h>
+#include <vconf.h>
+
+bool mp_player_mgr_is_active(void);
+void mp_player_mgr_pipe_cb(void *data, void *buffer, unsigned int nbyte);
+bool mp_player_mgr_set_msg_callback(MMMessageCallback cb, gpointer user_data);
+bool mp_player_mgr_create(void *data, const gchar * path);
+bool mp_player_mgr_destroy(void *data);
+bool mp_player_mgr_realize(void *data);
+bool mp_player_mgr_unrealize(void *data);
+bool mp_player_mgr_play(void *data);
+bool mp_player_mgr_stop(void *data);
+bool mp_player_mgr_resume(void *data);
+bool mp_player_mgr_pause(void *data);
+void mp_player_mgr_set_mute(bool bMuteEnable);
+bool mp_player_mgr_set_position(guint pos);
+int mp_player_mgr_get_position(void);
+int mp_player_mgr_get_duration(void);
+int player_msg_cb(int msg_type, void *msg_param, void *user_param);
+
+int mp_player_mgr_vol_type_set(void);
+int mp_player_mgr_vol_type_unset(void);
+bool mp_player_mgr_session_init(void);
+bool mp_player_mgr_session_finish(void);
+
+MMPlayerStateType mp_player_mgr_get_state(void);
+#endif //__MP_player_mgr_H_
diff --git a/src/core/include/mp-setting-ctrl.h b/src/core/include/mp-setting-ctrl.h
new file mode 100755
index 0000000..2797e45
--- /dev/null
+++ b/src/core/include/mp-setting-ctrl.h
@@ -0,0 +1,58 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_SETTING_CTRL_H_
+#define __MP_SETTING_CTRL_H_
+
+#include <vconf-keys.h>
+#include "mp-view-layout.h"
+
+enum mp_setting_rep_state
+{
+ MP_SETTING_REP_ALL,
+ MP_SETTING_REP_NON,
+ MP_SETTING_REP_1
+};
+
+typedef struct _mp_setting_menu_t
+{
+ int albums;
+ int artists;
+ int genres;
+ int composers;
+ int years;
+} mp_setting_menu_t;
+
+typedef void (*MpSettingMenu_Cb) (mp_setting_menu_t * state, void *data);
+typedef void (*MpSettingSRS_Cb) (int state, void *data);
+
+int mp_setting_init(struct appdata *ad);
+int mp_setting_deinit(struct appdata *ad);
+int mp_setting_set_shuffle_state(int b_val);
+int mp_setting_get_shuffle_state(int *b_val);
+int mp_setting_set_repeat_state(int val);
+int mp_setting_get_repeat_state(int *val);
+void mp_setting_set_albumart_path(const char *path);
+
+int mp_setting_menu_get_state(mp_setting_menu_t * menu_state);
+int mp_setting_menu_set_callback(MpSettingMenu_Cb func, void *data);
+
+void mp_setting_save_now_playing(void *ad);
+void mp_setting_save_last_played(mp_layout_data_t * layout_data);
+
+#endif // __MP_SETTING_CTRL_H_
diff --git a/src/core/include/mp-streaming-mgr.h b/src/core/include/mp-streaming-mgr.h
new file mode 100755
index 0000000..4f13011
--- /dev/null
+++ b/src/core/include/mp-streaming-mgr.h
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_STREAMING_MGR_H__
+#define __MP_STREAMING_MGR_H__
+
+inline void mp_streaming_mgr_buffering_popup_control(struct appdata *ad, bool is_show);
+int mp_streaming_mgr_message_callback(int msg_type, void *msg_param, void *user_param);
+
+bool mp_streaming_mgr_check_streaming(struct appdata *ad, const char *path);
+bool mp_streaming_mgr_set_attribute(struct appdata *ad, MMHandleType player);
+bool mp_streaming_mgr_play_new_streaming(struct appdata *ad);
+
+#endif /* __MP_STREAMING_MGR_H__ */
diff --git a/src/core/mp-file-tag-info.c b/src/core/mp-file-tag-info.c
new file mode 100755
index 0000000..af91c70
--- /dev/null
+++ b/src/core/mp-file-tag-info.c
@@ -0,0 +1,250 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <glib.h>
+#include <mm_file.h>
+#include <mm_error.h>
+#include "mp-file-tag-info.h"
+#include "mp-player-debug.h"
+#include "mp-define.h"
+
+/* tag_info which must be freed with mp_file_tag_free() after use. */
+int
+mp_file_tag_info_get_all_tag(const char *filename, mp_tag_info_t * tag_info)
+{
+ MMHandleType tag_attrs = 0;
+ MMHandleType content_attrs = 0;
+ int ret = 0;
+
+ if (!filename || !tag_info)
+ {
+ goto CATCH_ERROR;
+ }
+
+ memset(tag_info, 0x00, sizeof(mp_tag_info_t));
+
+ ret = mm_file_create_content_attrs(&content_attrs, filename);
+ if (ret == MM_ERROR_NONE)
+ {
+ char *error = NULL;
+ int dur = 0;
+ int audio_codec = 0;
+ int audio_samplerate = 0;
+ int audio_bitrate = 0;
+ int audio_channel = 0;
+
+ ret = mm_file_get_attrs(content_attrs,
+ &error,
+ MM_FILE_CONTENT_DURATION, &dur,
+ MM_FILE_CONTENT_AUDIO_CODEC, &audio_codec,
+ MM_FILE_CONTENT_AUDIO_SAMPLERATE, &audio_samplerate,
+ MM_FILE_CONTENT_AUDIO_BITRATE, &audio_bitrate,
+ MM_FILE_CONTENT_AUDIO_CHANNELS, &audio_channel, NULL);
+
+ if (ret != MM_ERROR_NONE)
+ {
+ if (error)
+ {
+ ERROR_TRACE("fail to mm_file_get_attrs() - ret(%x), error(%s)", ret, error);
+ free(error);
+ }
+ else
+ {
+ ERROR_TRACE("fail to mm_file_get_attrs() - ret(%x)", ret);
+ }
+ goto CATCH_ERROR;
+ }
+ tag_info->duration = dur;
+ tag_info->audio_codec = audio_codec;
+ tag_info->audio_samplerate = audio_samplerate;
+ tag_info->audio_bitrate = audio_bitrate;
+ tag_info->audio_channel = audio_channel;
+ }
+ else
+ {
+ ERROR_TRACE("fail to mm_file_create_content_attrs() - ret(%x)", ret);
+ goto CATCH_ERROR;
+ }
+
+
+ ret = mm_file_create_tag_attrs(&tag_attrs, filename);
+ if (ret == MM_ERROR_NONE)
+ {
+ char *error = NULL;
+ char *album = NULL;
+ int album_len = 0;
+ char *artist = NULL;
+ int artist_len = 0;
+ char *title = NULL;
+ int title_len = 0;
+ void *albumart = NULL;
+ int albumart_len = 0;
+ int albumart_size = 0;
+ char *genre = NULL;
+ int genre_len = 0;
+ char *copyright = NULL;
+ int copyright_len = 0;
+ char *date = NULL;
+ int date_len = 0;
+ char *desc = NULL;
+ int desc_len = 0;
+ char *author = NULL;
+ int author_len = 0;
+ char *track = NULL;
+ int track_len = 0;
+ char *rating = NULL;
+ int rating_len = 0;
+
+ ret = mm_file_get_attrs(tag_attrs,
+ &error,
+ MM_FILE_TAG_ARTIST, &artist, &artist_len,
+ MM_FILE_TAG_ALBUM, &album, &album_len,
+ MM_FILE_TAG_TITLE, &title, &title_len,
+ MM_FILE_TAG_GENRE, &genre, &genre_len,
+ MM_FILE_TAG_AUTHOR, &author, &author_len,
+ MM_FILE_TAG_COPYRIGHT, &copyright, &copyright_len,
+ MM_FILE_TAG_DATE, &date, &date_len,
+ MM_FILE_TAG_DESCRIPTION, &desc, &desc_len,
+ MM_FILE_TAG_ARTWORK, &albumart, &albumart_len,
+ MM_FILE_TAG_ARTWORK_SIZE, &albumart_size,
+ MM_FILE_TAG_TRACK_NUM, &track, &track_len,
+ MM_FILE_TAG_RATING, &rating, &rating_len, NULL);
+
+ if (ret != MM_ERROR_NONE)
+ {
+ if (error)
+ {
+ ERROR_TRACE("fail to mm_file_get_attrs() - ret(%x), error(%s)", ret, error);
+ free(error);
+ }
+ else
+ {
+ ERROR_TRACE("fail to mm_file_get_attrs() - ret(%x)", ret);
+ }
+ goto CATCH_ERROR;
+ }
+
+ if (albumart)
+ {
+ gchar *path = NULL;
+ int fd = g_file_open_tmp(NULL, &path, NULL);
+
+ if (fd != -1)
+ {
+ FILE *fp = fdopen(fd, "w");
+ if (fp == NULL)
+ {
+ ERROR_TRACE("fail to fdopen()");
+ close(fd);
+ }
+ else
+ {
+ int n = fwrite((unsigned char *)albumart, 1, albumart_size, fp);
+ if (n != albumart_size)
+ {
+ ERROR_TRACE("fail to fwrite()");
+ fclose(fp);
+ close(fd);
+ }
+ else
+ {
+ fflush(fp);
+ fclose(fp);
+ close(fd);
+ }
+ }
+ }
+ tag_info->albumart_path = path;
+ }
+
+ if (album)
+ tag_info->album = strdup(album);
+ if (artist)
+ tag_info->artist = strdup(artist);
+ if (title)
+ tag_info->title = strdup(title);
+ if (genre)
+ tag_info->genre = strdup(genre);
+ if (copyright)
+ tag_info->copyright = strdup(copyright);
+ if (date)
+ tag_info->date = strdup(date);
+ if (desc)
+ tag_info->desc = strdup(desc);
+ if (author)
+ tag_info->author = strdup(author);
+ if (track)
+ tag_info->track = strdup(track);
+ if (rating)
+ tag_info->rating = strdup(rating);
+
+ }
+ else
+ {
+ ERROR_TRACE("fail to mm_file_create_tag_attrs() - ret(%x)", ret);
+ goto CATCH_ERROR;
+ }
+
+ DEBUG_TRACE
+ ("file : %s\n duration: %d \n album: %s\n artist: %s\n title: %s\n genre: %s\n copyright:%s\n date: %s\n desc : %s\n author: %s\n albumart : %s",
+ filename, tag_info->duration, tag_info->album, tag_info->artist, tag_info->title, tag_info->genre,
+ tag_info->copyright, tag_info->date, tag_info->desc, tag_info->author, tag_info->albumart_path);
+
+ if (content_attrs)
+ mm_file_destroy_content_attrs(content_attrs);
+
+ if (tag_attrs)
+ mm_file_destroy_content_attrs(tag_attrs);
+
+ return 0;
+
+ CATCH_ERROR:
+ if (content_attrs)
+ mm_file_destroy_content_attrs(content_attrs);
+
+ if (tag_attrs)
+ mm_file_destroy_content_attrs(tag_attrs);
+
+ return -1;
+}
+
+
+void
+mp_file_tag_free(mp_tag_info_t * tag_info)
+{
+ if (tag_info == NULL)
+ return;
+
+ IF_FREE(tag_info->album);
+ IF_FREE(tag_info->genre);
+ IF_FREE(tag_info->author);
+ IF_FREE(tag_info->artist);
+ IF_FREE(tag_info->title);
+ IF_FREE(tag_info->copyright);
+ IF_FREE(tag_info->date);
+ IF_FREE(tag_info->desc);
+ IF_FREE(tag_info->albumart_path);
+ IF_FREE(tag_info->track);
+ IF_FREE(tag_info->rating);
+ return;
+}
diff --git a/src/core/mp-http-mgr.c b/src/core/mp-http-mgr.c
new file mode 100755
index 0000000..fb72f59
--- /dev/null
+++ b/src/core/mp-http-mgr.c
@@ -0,0 +1,280 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-player-debug.h"
+#include "music.h"
+#include "mp-http-mgr.h"
+
+#define USER_AGENT_KEY VCONFKEY_ADMIN_UAGENT
+
+static MpHttpState_t _mp_http_mgr_get_network_status();
+static void _mp_http_mgr_refresh_network_info(mp_http_mgr_t *http_mgr);
+static bool _mp_http_mgr_register_vconf_change_cb(mp_http_mgr_t *http_mgr);
+static void _mp_http_mgr_ignore_vconf_change_cb();
+static void _mp_http_mgr_network_config_changed_cb(keynode_t *node, void *user_data);
+static void _mp_http_mgr_network_disconnect_cb(mp_http_mgr_t *http_mgr);
+
+
+bool mp_http_mgr_create(void *data)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)data;
+
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE((!ad->http_mgr));
+
+ ad->http_mgr = calloc(1, sizeof(mp_http_mgr_t));
+ MP_CHECK_FALSE(ad->http_mgr);
+ ad->http_mgr->ad = ad;
+
+ if (!_mp_http_mgr_register_vconf_change_cb(ad->http_mgr))
+ goto mp_exception;
+
+ _mp_http_mgr_refresh_network_info(ad->http_mgr);
+
+ return true;
+
+ mp_exception:
+ mp_http_mgr_destory(ad);
+ return false;
+}
+
+bool mp_http_mgr_destory(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(ad->http_mgr);
+
+ _mp_http_mgr_ignore_vconf_change_cb();
+ _mp_http_mgr_network_disconnect_cb(ad->http_mgr);
+
+ IF_FREE(ad->http_mgr);
+
+ return TRUE;
+}
+
+const char* mp_http_mgr_get_ip(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->http_mgr);
+
+ if (strlen(ad->http_mgr->ip) > 0)
+ return (const char *)ad->http_mgr->ip;
+ else
+ return NULL;
+}
+
+const char* mp_http_mgr_get_proxy(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_NULL(ad);
+ MP_CHECK_NULL(ad->http_mgr);
+
+ if (strlen(ad->http_mgr->proxy) > 0)
+ return (const char *)ad->http_mgr->proxy;
+ else
+ return NULL;
+}
+
+bool mp_http_mgr_get_svc_state(void *data, mp_http_svc_type svc_type)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(ad->http_mgr);
+
+ mp_debug("[%d]svc state is [%d]", svc_type, ad->http_mgr->svc_state[svc_type]);
+ return ad->http_mgr->svc_state[svc_type];
+}
+
+bool mp_http_mgr_start_svc(void *data, mp_http_svc_type svc_type, MpHttpOpenExcuteCb open_cb, MpHttpRespExcuteCb rsp_cb, gpointer cb_data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(ad->http_mgr);
+
+ if (!open_cb && !rsp_cb) {
+ mp_error("no callback");
+ return FALSE;
+ }
+
+ if (open_cb) {
+ if (!open_cb(cb_data)) {
+ mp_error("[%d] svc fail to start", svc_type);
+ return FALSE;
+ }
+ }
+
+ mp_debug("## [%d] svc started ##", svc_type);
+ mp_http_mgr_t *http_mgr = (mp_http_mgr_t *)ad->http_mgr;
+
+ http_mgr->cb_data[svc_type] = cb_data;
+ http_mgr->http_open_cb[svc_type] = open_cb;
+ http_mgr->http_resp_cb[svc_type] = rsp_cb;
+
+ http_mgr->svc_state[svc_type] = TRUE;
+ return TRUE;
+}
+
+bool mp_http_mgr_stop_svc(void *data, mp_http_svc_type svc_type, mp_http_response_type response_type)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(ad->http_mgr);
+
+ mp_http_mgr_t *http_mgr = (mp_http_mgr_t *)ad->http_mgr;
+ if (http_mgr->svc_state[svc_type] && http_mgr->http_resp_cb[svc_type]) {
+ http_mgr->http_resp_cb[svc_type](http_mgr->cb_data[svc_type], response_type);
+ }
+
+ http_mgr->cb_data[svc_type] = NULL;
+ http_mgr->http_open_cb[svc_type] = NULL;
+ http_mgr->http_resp_cb[svc_type] = NULL;
+
+ http_mgr->svc_state[svc_type] = FALSE;
+ mp_debug("## [%d] svc stopped ##", svc_type);
+
+ return TRUE;
+}
+
+static MpHttpState_t _mp_http_mgr_get_network_status()
+{
+ MpHttpState_t state = MP_HTTP_STATE_OFF;
+
+ int status = 0;
+ if (vconf_get_int(VCONFKEY_NETWORK_STATUS, &status) == 0) {
+ mp_debug("Network status = [%d]", status);
+ } else {
+ mp_error("vconf_get_int() fail!!");
+ status = 0;
+ }
+
+ if (status == VCONFKEY_NETWORK_CELLULAR)
+ state = MP_HTTP_STATE_CELLULAR;
+ else if (status == VCONFKEY_NETWORK_WIFI)
+ state = MP_HTTP_STATE_WIFI;
+ else
+ state = MP_HTTP_STATE_OFF;
+
+ return status;
+}
+
+static bool _mp_http_mgr_register_vconf_change_cb(mp_http_mgr_t *http_mgr)
+{
+ startfunc;
+ MP_CHECK_FALSE(http_mgr);
+
+ if (vconf_notify_key_changed(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND,
+ _mp_http_mgr_network_config_changed_cb, http_mgr) != 0) {
+ mp_error("vconf_notify_key_changed() fail");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+static void _mp_http_mgr_ignore_vconf_change_cb()
+{
+ startfunc;
+ if (vconf_ignore_key_changed(VCONFKEY_NETWORK_CONFIGURATION_CHANGE_IND,
+ _mp_http_mgr_network_config_changed_cb) !=0) {
+ mp_error("vconf_ignore_key_changed() fail");
+ }
+}
+
+static void _mp_http_mgr_refresh_network_info(mp_http_mgr_t *http_mgr)
+{
+ startfunc;
+ MP_CHECK(http_mgr);
+
+ memset(http_mgr->ip, 0, sizeof(http_mgr->ip));
+ memset(http_mgr->proxy, 0, sizeof(http_mgr->proxy));
+
+ http_mgr->http_state = _mp_http_mgr_get_network_status();
+
+ if (http_mgr->http_state != MP_HTTP_STATE_OFF) {
+ char *ip = vconf_get_str(VCONFKEY_NETWORK_IP);
+ if (ip) {
+ strncpy(http_mgr->ip, ip, sizeof(http_mgr->ip)-1);
+ free(ip);
+ ip = NULL;
+ mp_debug("IP [%s]", http_mgr->ip);
+ }
+
+ char *proxy = vconf_get_str(VCONFKEY_NETWORK_PROXY);
+ if (proxy) {
+ strncpy(http_mgr->proxy, proxy, sizeof(http_mgr->proxy)-1);
+ free(proxy);
+ proxy = NULL;
+ mp_debug("PROXY [%s]", http_mgr->proxy);
+ }
+ }
+}
+
+static void _mp_http_mgr_network_config_changed_cb(keynode_t *node, void *user_data)
+{
+ startfunc;
+ mp_http_mgr_t *http_mgr = (mp_http_mgr_t *)user_data;
+ MP_CHECK(http_mgr);
+
+ if (http_mgr->http_state != MP_HTTP_STATE_OFF) {
+ _mp_http_mgr_network_disconnect_cb(http_mgr);
+ }
+
+ _mp_http_mgr_refresh_network_info(http_mgr);
+}
+
+static void _mp_http_mgr_network_disconnect_cb(mp_http_mgr_t *http_mgr)
+{
+ MP_CHECK(http_mgr);
+
+ mp_debug("!! disconnect old connections !!");
+ int i;
+ for (i = 0 ; i < MP_HTTP_SVC_MAX; i++) {
+ if (http_mgr->svc_state[i])
+ mp_http_mgr_stop_svc(http_mgr->ad, i , MP_HTTP_RESPONSE_DISCONNECT);
+ }
+}
+
+MpHttpState_t
+mp_http_mgr_get_state(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ MP_CHECK_FALSE(ad);
+ if (!ad->http_mgr)
+ {
+ return MP_HTTP_STATE_NONE;
+ }
+
+ mp_http_mgr_t *http_mgr = ad->http_mgr;
+ mp_debug("http_state = [%d]", http_mgr->http_state);
+
+ return http_mgr->http_state;
+}
+
+char* mp_http_mgr_get_user_agent()
+{
+ char *user_agent = vconf_get_str(USER_AGENT_KEY);
+ return user_agent;
+}
+
diff --git a/src/core/mp-play-list.c b/src/core/mp-play-list.c
new file mode 100755
index 0000000..bc6c3bc
--- /dev/null
+++ b/src/core/mp-play-list.c
@@ -0,0 +1,1173 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include "mp-play-list.h"
+#include "mp-player-debug.h"
+#include "mp-util.h"
+#include "mp-common.h"
+#include "mp-file-tag-info.h"
+
+#define MP_NON_DB_FID (0)
+
+static void
+_mp_play_list_clear_list(GList ** list)
+{
+ startfunc;
+
+ MP_CHECK(*list);
+
+ (*list) = g_list_first(*list);
+
+ mp_list_item *handle;
+
+ while (*list)
+ {
+ handle = (mp_list_item *) (*list)->data;
+
+ if (handle)
+ {
+ free(handle);
+ }
+ handle = NULL;
+
+ (*list) = (*list)->next;
+ }
+
+ if (*list)
+ g_list_free(*list);
+ (*list) = NULL;
+
+ endfunc;
+
+ return;
+}
+
+bool
+_mp_play_list_get_current_list(mp_play_list * play_list, bool play_shuffle_state)
+{
+ startfunc;
+ MP_CHECK_FALSE(play_list);
+
+ if (play_shuffle_state && play_list->count > 1)
+ {
+ MP_CHECK_FALSE(play_list->shuffle_list);
+
+ DEBUG_TRACE("set shuffle list is current list");
+ play_list->list = play_list->shuffle_list;
+ }
+ else
+ {
+ DEBUG_TRACE("set normal list is current list");
+ play_list->list = play_list->normal_list;
+ }
+
+ return true;
+}
+
+static bool
+_mp_play_list_get_item_by_path(void *data, char *path, music_list_item ** get_item, mp_list_item * set_item)
+{
+ mp_tag_info_t tag_info;
+ struct appdata *ad = (struct appdata *)data;
+
+ AudioHandleType *record = NULL;
+ char *pathname = NULL, *title = NULL, *album = NULL, *artist = NULL, *thumbname = NULL;
+ int duration = 0;
+ int size = 0, ret = 1, category = -1;
+ MP_CHECK_FALSE(path);
+
+ *get_item = calloc(1, sizeof(music_list_item));
+ MP_CHECK_EXCEP((*get_item));
+
+ ret = audio_svc_item_new(&record);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ if (mp_util_file_is_in_phone_memory(path))
+ ret = audio_svc_get_item_by_path(ad->media_svc_handle, path, record);
+ else
+ ret = audio_svc_get_item_by_path(ad->media_svc_handle, path, record);
+
+ if (ret == AUDIO_SVC_ERROR_NONE)
+ {
+ INFO_TRACE("get item from music db..");
+ ret = audio_svc_item_get_val(record,
+ AUDIO_SVC_TRACK_DATA_THUMBNAIL_PATH, &thumbname, &size,
+ AUDIO_SVC_TRACK_DATA_TITLE, &title, &size,
+ AUDIO_SVC_TRACK_DATA_ARTIST, &artist, &size,
+ AUDIO_SVC_TRACK_DATA_PATHNAME, &pathname, &size,
+ AUDIO_SVC_TRACK_DATA_ALBUM, &album, &size,
+ AUDIO_SVC_TRACK_DATA_DURATION, &duration,
+ AUDIO_SVC_TRACK_DATA_CATEGORY, &category, -1);
+
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ *get_item = calloc(1, sizeof(music_list_item));
+ MP_CHECK_EXCEP(*get_item);
+
+ if (pathname)
+ {
+ g_strlcpy((*get_item)->filename, pathname, MAX_NAM_LEN);
+
+ }
+
+ if (title)
+ g_strlcpy((*get_item)->title, title, AUDIO_SVC_METADATA_LEN_MAX);
+
+ mp_util_format_duration((*get_item)->time, duration);
+
+ if (thumbname && strlen(thumbname) > 0)
+ g_strlcpy((*get_item)->albumart, thumbname, MAX_NAM_LEN);
+ else
+ g_strlcpy((*get_item)->albumart, DEFAULT_THUMBNAIL, MAX_NAM_LEN);
+
+ if (artist)
+ g_strlcpy((*get_item)->artist, artist, AUDIO_SVC_METADATA_LEN_MAX);
+
+ if (album)
+ g_strlcpy((*get_item)->album, album, AUDIO_SVC_METADATA_LEN_MAX);
+
+ (*get_item)->ad = ad;
+ (*get_item)->list_index = set_item->list_index;
+ (*get_item)->category = category;
+ }
+ else
+ {
+ INFO_TRACE("fail to get item from music db, getting information by mm-file directly, filename : %s",
+ path);
+
+ if (mp_file_tag_info_get_all_tag(path, &tag_info) < 0)
+ {
+ DEBUG_TRACE("fail to mp_file_tag_info_get_all_tag()");
+ char *title;
+ title = mp_util_get_title_from_path(path);
+ if (title)
+ {
+ strncpy((*get_item)->title, title, AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->title[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+ free(title);
+ }
+ else
+ {
+ strncpy((*get_item)->title, path, AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->title[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+ }
+ strncpy((*get_item)->filename, path, MAX_NAM_LEN);
+ (*get_item)->filename[MAX_NAM_LEN - 1] = '\0';
+ }
+ else
+ {
+ strncpy((*get_item)->filename, path, AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->filename[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+
+ if (tag_info.title)
+ {
+ strncpy((*get_item)->title, tag_info.title, AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->title[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+ }
+ else
+ {
+ char *title = mp_util_get_title_from_path(path);
+ if (title)
+ {
+ strncpy((*get_item)->title, title, AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->title[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+ free(title);
+ }
+ }
+
+ if (tag_info.artist)
+ {
+ strncpy((*get_item)->artist, tag_info.artist, AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->artist[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+ }
+ else
+ {
+ strncpy((*get_item)->artist, GET_SYS_STR("IDS_COM_BODY_UNKNOWN"),
+ AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->artist[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+ }
+
+ if (tag_info.album)
+ {
+ strncpy((*get_item)->album, tag_info.album, AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->album[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+ }
+ else
+ {
+ strncpy((*get_item)->album, GET_SYS_STR("IDS_COM_BODY_UNKNOWN"),
+ AUDIO_SVC_METADATA_LEN_MAX);
+ (*get_item)->album[AUDIO_SVC_METADATA_LEN_MAX - 1] = '\0';
+ }
+
+ mp_util_format_duration((*get_item)->time, tag_info.duration);
+
+ if (tag_info.albumart_path)
+ {
+ strncpy((*get_item)->albumart, tag_info.albumart_path, MAX_NAM_LEN);
+ (*get_item)->albumart[MAX_NAM_LEN - 1] = '\0';
+ }
+ }
+
+ mp_file_tag_free(&tag_info);
+
+ (*get_item)->ad = ad;
+ (*get_item)->list_index = set_item->list_index;
+ (*get_item)->category = AUDIO_SVC_CATEGORY_SOUND;
+
+ }
+ audio_svc_item_free(record);
+ return true;
+
+ mp_exception:
+ audio_svc_item_free(record);
+ IF_FREE(*get_item);
+ return false;
+}
+
+bool
+_mp_play_list_get_item_by_list_data(void *data, music_list_item ** get_item, mp_list_item * set_item)
+{ //watch out must free
+ struct appdata *ad = (struct appdata *)data;
+
+ MP_CHECK_FALSE(set_item);
+ DEBUG_TRACE("set_item->fid: %s", set_item->fid);
+ MP_CHECK_FALSE(strlen(set_item->fid));
+
+ char *pathname = NULL, *title = NULL, *album = NULL, *artist = NULL, *thumbname = NULL;
+ int duration = 0;
+
+ int size = 0, ret = 1, category = -1;
+
+ AudioHandleType *item_handle = NULL;
+
+ {
+ ret = audio_svc_item_new(&item_handle);
+ MP_CHECK_FALSE(ret == AUDIO_SVC_ERROR_NONE);
+
+ ret = audio_svc_get_item_by_audio_id(ad->media_svc_handle, set_item->fid, item_handle);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ ret = audio_svc_item_get_val(item_handle,
+ AUDIO_SVC_TRACK_DATA_THUMBNAIL_PATH, &thumbname, &size,
+ AUDIO_SVC_TRACK_DATA_TITLE, &title, &size,
+ AUDIO_SVC_TRACK_DATA_ARTIST, &artist, &size,
+ AUDIO_SVC_TRACK_DATA_PATHNAME, &pathname, &size,
+ AUDIO_SVC_TRACK_DATA_ALBUM, &album, &size,
+ AUDIO_SVC_TRACK_DATA_DURATION, &duration,
+ AUDIO_SVC_TRACK_DATA_CATEGORY, &category, -1);
+
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ }
+
+ *get_item = calloc(1, sizeof(music_list_item));
+ MP_CHECK_EXCEP(*get_item);
+
+ if (pathname)
+ {
+ g_strlcpy((*get_item)->filename, pathname, MAX_NAM_LEN);
+
+ }
+
+ if (title)
+ g_strlcpy((*get_item)->title, title, AUDIO_SVC_METADATA_LEN_MAX);
+
+ mp_util_format_duration((*get_item)->time, duration);
+
+ if (thumbname && strlen(thumbname) > 0)
+ g_strlcpy((*get_item)->albumart, thumbname, MAX_NAM_LEN);
+ else
+ g_strlcpy((*get_item)->albumart, DEFAULT_THUMBNAIL, MAX_NAM_LEN);
+
+ if (artist)
+ g_strlcpy((*get_item)->artist, artist, AUDIO_SVC_METADATA_LEN_MAX);
+
+ if (album)
+ g_strlcpy((*get_item)->album, album, AUDIO_SVC_METADATA_LEN_MAX);
+ g_strlcpy((*get_item)->key_id, set_item->fid, AUDIO_SVC_UUID_SIZE+1);
+ (*get_item)->ad = ad;
+ (*get_item)->list_index = set_item->list_index;
+ (*get_item)->category = category;
+
+ {
+ if (item_handle)
+ audio_svc_item_free(item_handle);
+ item_handle = NULL;
+ }
+
+ return true;
+
+ mp_exception:
+
+ IF_FREE(*get_item);
+ if (item_handle)
+ audio_svc_item_free(item_handle);
+ item_handle = NULL;
+
+ return false;
+}
+
+void
+mp_play_list_item_copy(music_list_item ** to, music_list_item * from)
+{
+ *to = calloc(1, sizeof(music_list_item));
+
+ SAFE_STRCPY((*to)->filename, from->filename);
+ SAFE_STRCPY((*to)->title, from->title);
+ SAFE_STRCPY((*to)->artist, from->artist);
+ SAFE_STRCPY((*to)->album, from->album);
+ SAFE_STRCPY((*to)->time, from->time);
+ SAFE_STRCPY((*to)->albumart, from->albumart);
+
+ (*to)->gen_list = from->gen_list;
+ (*to)->ad = from->ad;
+ SAFE_STRCPY((*to)->key_id, from->key_id);
+ (*to)->list_item = from->list_item;
+ (*to)->list_index = from->list_index;
+
+ return;
+}
+
+static bool
+_mp_play_list_set_playing_item(void *data, mp_play_list * play_list, char *fid)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ MP_CHECK_FALSE(play_list);
+ MP_CHECK_FALSE(play_list->list);
+
+ int count = g_list_length(play_list->list);
+ int index = 0;
+
+ MP_CHECK_FALSE(count > 0);
+
+ bool set_result = false;
+ mp_list_item *item = NULL;
+
+ for (index = 0; index < count; ++index)
+ {
+ item = (mp_list_item *) g_list_nth_data(play_list->list, index);
+
+ MP_CHECK_EXCEP(item);
+ if (!g_strcmp0(item->fid, fid))
+ {
+ if (!strlen(item->fid))
+ {
+ char *path = NULL;
+
+ if (play_list->current_item)
+ {
+ path = g_strdup(play_list->path_excpetionDB);
+ DEBUG_TRACE("skip already set");
+ }
+
+ if (path)
+ {
+ IF_FREE(play_list->current_item);
+ _mp_play_list_get_item_by_path(data, path, &(play_list->current_item), item);
+ }
+
+ IF_FREE(path);
+ }
+ else
+ {
+ IF_FREE(play_list->current_item);
+ _mp_play_list_get_item_by_list_data(data, &(play_list->current_item), item);
+ }
+ MP_CHECK_EXCEP(play_list->current_item);
+
+ play_list->current_index = index;
+
+ DEBUG_TRACE("current item path = %s, current index %d", play_list->current_item->filename,
+ play_list->current_index);
+
+ set_result = true;
+ break;
+ }
+ }
+
+ endfunc;
+
+ return set_result;
+
+ mp_exception:
+ return FALSE;
+}
+
+static void
+_mp_play_list_swap(int *A, int *B)
+{
+ int temp;
+
+ temp = *A;
+ *A = *B;
+ *B = temp;
+}
+
+bool
+mp_play_list_clear_play_list(mp_play_list ** play_list)
+{
+ startfunc;
+ MP_CHECK_FALSE(*play_list);
+ IF_FREE((*play_list)->type_string);
+ IF_FREE((*play_list)->filter_string);
+ IF_FREE((*play_list)->current_item);
+ IF_FREE((*play_list)->path_excpetionDB);
+ _mp_play_list_clear_list(&((*play_list)->normal_list));
+ _mp_play_list_clear_list(&((*play_list)->shuffle_list));
+ (*play_list)->list = NULL;
+
+ IF_FREE((*play_list));
+
+ endfunc;
+
+ return TRUE;
+}
+
+bool
+mp_play_list_remove_item_by_key(mp_play_list * play_list, char *key_id)
+{
+ GList *list = NULL;
+ GList *item = NULL;
+ music_list_item *data = NULL;
+
+ MP_CHECK_FALSE(play_list);
+
+ list = g_list_first(play_list->list);
+
+ while (list)
+ {
+ data = (music_list_item *) list->data;
+ if (!g_strcmp0(data->key_id, key_id))
+ {
+ item = list;
+ g_free(data);
+ break;
+ }
+ list = list->next;
+ }
+
+ if (item)
+ {
+ play_list->list = g_list_delete_link(play_list->list, item);
+ }
+
+ return true;
+}
+
+bool
+mp_play_list_create_shuffle_list(void *data, mp_play_list * play_list, int count, int selected_index, char *fid)
+{
+ startfunc;
+
+ MP_CHECK_FALSE(play_list);
+ MP_CHECK_FALSE(play_list->normal_list);
+ MP_CHECK_FALSE(count >= 1);
+
+ if (play_list->shuffle_list)
+ _mp_play_list_clear_list(&play_list->shuffle_list);
+
+ int num[count];
+ int i = 0;
+ int index = 0;
+ int current_index = selected_index;
+
+ if (current_index == -1)
+ {
+ DEBUG_TRACE("current_index is can not know so find current index at list");
+
+ int count = g_list_length(play_list->normal_list);
+ mp_list_item *item = NULL;
+
+ for (index = 0; index < count; ++index)
+ {
+ item = (mp_list_item *) g_list_nth_data(play_list->normal_list, index);
+
+ MP_CHECK_EXCEP(item);
+ if (!g_strcmp0(fid, item->fid))
+ {
+ current_index = index;
+ break;
+ }
+ }
+ }
+
+ srand((unsigned int)time(NULL));
+ num[0] = current_index; //first item should be set at current item, watch out
+
+ for (i = 0; i < count; i++)
+ num[i] = i;
+
+ num[0] = current_index; //current index is change at first index at shuffler case
+ num[current_index] = 0;
+
+ for (i = 1; i < count; i++)
+ {
+ unsigned int seed = 0;
+ rand_r(&seed);
+ int swap_value = (seed % ((count) - i)) + i;
+
+ if (swap_value >= count || swap_value < 1)
+ mp_assert(FALSE);
+
+ if (num[swap_value] != num[0]) //skip swap already set at first
+ _mp_play_list_swap(&num[i], &num[swap_value]);
+ }
+
+ for (index = 0; index < count; index++)
+ {
+ int get_index = 0;
+ mp_list_item *get_item = NULL, *new_item = NULL;
+
+ get_item = (mp_list_item *) g_list_nth_data(play_list->normal_list, num[index]);
+ MP_CHECK_EXCEP(get_item);
+
+ get_index = num[index];
+ new_item = calloc(1, sizeof(mp_list_item));
+ mp_assert(new_item);
+
+ memcpy(new_item, get_item, sizeof(mp_list_item));
+ SAFE_STRCPY(new_item->fid, get_item->fid);
+ new_item->list_index = index;
+
+ play_list->shuffle_list = g_list_append(play_list->shuffle_list, (gpointer) new_item);
+ if (!g_strcmp0(fid, new_item->fid))
+ {
+ play_list->current_index = index;
+ play_list->start_index = index;
+
+ _mp_play_list_get_item_by_list_data(data, &(play_list->current_item), new_item);
+
+ DEBUG_TRACE("current set index %d , fid =%d", index, get_item->fid);
+ }
+ }
+
+ endfunc;
+ return true;
+
+ mp_exception:
+ return false;
+}
+
+bool
+mp_play_list_create_current_play_list(void *data, mp_play_list ** set_play_list,
+ AudioHandleType * svc_track, const char *full_path,
+ int count, int current_index, bool shuffler_play_list, int playlist_id)
+{
+ startfunc;
+
+ mp_retv_if(count <= 0, FALSE);
+
+ int index = -1;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ MP_CHECK_FALSE(ad);
+
+ DEBUG_TRACE("count =%d, current_index %d shuffer state = %d", count, current_index, shuffler_play_list);
+
+ if (*set_play_list)
+ mp_play_list_clear_play_list(set_play_list);
+
+ *set_play_list = calloc(1, sizeof(mp_play_list));
+
+ (*set_play_list)->current_item = NULL;
+ (*set_play_list)->play_shuffle_state = shuffler_play_list;
+ (*set_play_list)->start_index = -1;
+ (*set_play_list)->list_type = MP_PLST_TYPE_GLIST;
+ (*set_play_list)->count = count;
+ (*set_play_list)->playlist_id = playlist_id;
+ bool shuffle_state = shuffler_play_list;
+
+ int ret = 0;
+ char *fid = NULL;
+ char *current_index_fid = NULL;
+ char *fid_by_full_path = NULL;
+ int size;
+
+ if (!svc_track)
+ { //2 create play list by current full path
+ MP_CHECK_FALSE(full_path);
+ AudioHandleType *record = NULL;
+ if (mp_check_file_exist(full_path))
+ {
+ ret = audio_svc_item_new(&record);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ if (mp_util_file_is_in_phone_memory(full_path))
+ ret = audio_svc_get_item_by_path(ad->media_svc_handle, full_path, record);
+ else
+ ret = audio_svc_get_item_by_path(ad->media_svc_handle, full_path, record);
+
+ if(ret == AUDIO_SVC_ERROR_NONE)
+ {
+ ret = audio_svc_item_get_val(record, AUDIO_SVC_TRACK_DATA_AUDIO_ID, &fid_by_full_path, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ DEBUG_TRACE("fid_by_full_path: %s", fid_by_full_path);
+ if (fid_by_full_path == NULL)
+ goto mp_exception;
+ fid_by_full_path = g_strdup(fid_by_full_path);
+ }
+ }
+ else if (mp_util_check_uri_available(full_path))
+ {
+ DEBUG_TRACE("full_path: %s", full_path);
+ fid_by_full_path = NULL;
+ }
+
+ (*set_play_list)->list_type = MP_PLST_TYPE_PATH;
+ shuffle_state = false;
+
+ if (record)
+ audio_svc_item_free(record);
+ record = NULL;
+ }
+
+ //2 Create Normal Play list at normal playing state
+ for (index = 0; index < count; index++)
+ {
+ int get_index = 0;
+
+ get_index = index;
+
+ if (svc_track)
+ {
+
+ IF_FREE(fid);
+ if (playlist_id >= 0)
+ ret = audio_svc_playlist_item_get_val(svc_track, get_index,
+ AUDIO_SVC_PLAYLIST_ITEM_AUDIO_ID, &fid, &size, -1);
+ else
+ ret = audio_svc_list_item_get_val(svc_track, get_index, AUDIO_SVC_LIST_ITEM_AUDIO_ID,
+ &fid, &size,-1);
+
+ DEBUG_TRACE("fid: %s", fid);
+ fid = g_strdup(fid);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ }
+ else
+ {
+ IF_FREE(fid);
+ fid = g_strdup(fid_by_full_path);
+ }
+ mp_list_item *new_item = calloc(1, sizeof(mp_list_item));
+ mp_assert(new_item);
+ SAFE_STRCPY(new_item->fid, fid);
+ DEBUG_TRACE("fid: %s", fid);
+ new_item->list_index = index;
+
+ (*set_play_list)->normal_list = g_list_append((*set_play_list)->normal_list, (gpointer) new_item);
+
+ if (current_index == get_index)
+ {
+ if (shuffle_state && count > 1)
+ {
+ DEBUG_TRACE("current request get fid = %s", current_index_fid);
+ IF_FREE(current_index_fid);
+ current_index_fid = g_strdup(fid);
+ }
+ else
+ {
+ (*set_play_list)->current_index = get_index;
+ (*set_play_list)->start_index = get_index;
+
+ if (!_mp_play_list_get_item_by_list_data
+ (data, &((*set_play_list)->current_item), new_item))
+ {
+ { //2 that is invalid fid(RingTone) . must set path_excpetion DB here!
+ DEBUG_TRACE("find at path");
+ MP_CHECK_FALSE(full_path);
+ (*set_play_list)->path_excpetionDB = strdup(full_path);
+ MP_CHECK_FALSE((*set_play_list)->path_excpetionDB);
+ }
+ _mp_play_list_get_item_by_path(data, (*set_play_list)->path_excpetionDB,
+ &((*set_play_list)->current_item), new_item);
+ }
+ }
+
+ DEBUG_TRACE("current set index %d", index);
+ }
+ }
+
+ if (shuffle_state)
+ {
+ //2 Create Shuffler play list , that function have
+ mp_play_list_create_shuffle_list(data, *set_play_list, count, current_index, current_index_fid);
+ }
+
+ //2 Set Current Play pointer
+ _mp_play_list_get_current_list(*set_play_list, shuffle_state);
+
+ endfunc;
+ IF_FREE(current_index_fid);
+ IF_FREE(fid_by_full_path);
+ IF_FREE(fid);
+
+ return true;
+
+ mp_exception:
+
+ IF_FREE(current_index_fid);
+ IF_FREE(fid_by_full_path);
+ IF_FREE(fid);
+ mp_play_list_clear_play_list(set_play_list);
+ endfunc;
+ return false;
+}
+
+
+
+bool
+mp_play_list_reset(void *data, mp_play_list ** set_play_list, char *fid)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(*set_play_list);
+
+ if (ad->play_shuffle_state)
+ {
+ mp_play_list_create_shuffle_list(data, *set_play_list, (*set_play_list)->count, -1, fid);
+ _mp_play_list_get_current_list(*set_play_list, ad->play_shuffle_state);
+ }
+ else
+ {
+ _mp_play_list_clear_list(&((*set_play_list)->shuffle_list));
+ _mp_play_list_get_current_list(*set_play_list, ad->play_shuffle_state);
+ mp_play_list_set_current_item(data, ad->playing_list, fid);
+ }
+
+ return true;
+}
+
+/**
+ * refresh play list , if file system updata , we need to update play list for it.
+ *
+ * @param void *data <= appdate
+ * @return FALSE or TRUE if it success create
+ * @author aramie.kim@samsung.com
+ */
+
+bool
+mp_play_list_refresh(void *data)
+{
+ startfunc;
+
+ struct appdata *ad = data;
+
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(ad->playing_list);
+
+ char *current_fid = NULL;
+ mp_play_list *playing_list = ad->playing_list;
+ music_list_item *item = mp_play_list_get_current_item(playing_list);
+
+
+ if (item)
+ {
+ if(strlen(item->key_id))
+ current_fid = g_strdup(item->key_id);
+ }
+
+ AudioHandleType *svc_track = NULL;
+
+ int ret = -1, count = 0;
+
+ if (playing_list->playlist_id >= 0)
+ {
+ ret = audio_svc_count_playlist_item(ad->media_svc_handle, playing_list->playlist_id, playing_list->filter_string, NULL,
+ &count);
+ ret = audio_svc_playlist_item_new(&svc_track, count);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE && count == 0);
+ audio_svc_get_playlist_item(ad->media_svc_handle, playing_list->playlist_id, playing_list->filter_string, NULL, 0, count,
+ svc_track);
+ }
+ else
+ {
+ ret = audio_svc_count_list_item(ad->media_svc_handle, playing_list->item_type, playing_list->type_string, NULL,
+ playing_list->filter_string, NULL, &count);
+ ret = audio_svc_list_item_new(&svc_track, count);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE && count == 0);
+ audio_svc_get_list_item(ad->media_svc_handle, playing_list->item_type, playing_list->type_string, NULL,
+ playing_list->filter_string, NULL, 0, count, svc_track);
+ }
+ DEBUG_TRACE("count =%d", count);
+
+ mp_play_list_create_current_play_list(ad, &ad->playing_list, svc_track, NULL, count, 0, ad->play_shuffle_state,
+ playing_list->playlist_id);
+
+ if (current_fid)
+ mp_play_list_set_current_item(ad, ad->playing_list, current_fid);
+ if (svc_track)
+ {
+ if (playing_list->playlist_id >= 0)
+ audio_svc_playlist_item_free(svc_track);
+ else
+ audio_svc_list_item_free(svc_track);
+
+ svc_track = NULL;
+ }
+ IF_FREE(current_fid);
+
+ endfunc;
+
+ return true;
+
+ mp_exception:
+ exceptionfunc;
+
+ if (svc_track)
+ {
+ if (playing_list->playlist_id >= 0)
+ audio_svc_playlist_item_free(svc_track);
+ else
+ audio_svc_list_item_free(svc_track);
+
+ svc_track = NULL;
+ }
+ IF_FREE(current_fid);
+
+ return false;
+}
+
+
+/**
+ * create playlist by fid use for add to home case
+ *
+ * @param void *data <= appdate, mp_play_list **set_play_list, int fid, char *path
+ * @return FALSE or TRUE if it success create
+ * @author aramie.kim@samsung.com
+ */
+
+bool
+mp_play_list_create_by_path(void *data, mp_play_list ** set_play_list, char *path)
+{
+ startfunc;
+ MP_CHECK_FALSE(path);
+ MP_CHECK_FALSE(data);
+
+ bool b_find_same_fid = false;
+
+ if (*set_play_list)
+ {
+ if ((*set_play_list)->list)
+ {
+ //check current file with fid
+ if ((*set_play_list)->current_item)
+ {
+ if (!strlen((*set_play_list)->current_item->key_id))
+ {
+ DEBUG_TRACE("Skip create play_list do not need to create");
+ return true;
+ }
+ }
+
+ //check whether current file have it or not
+ GList *list = (*set_play_list)->list;
+ list = g_list_first(list);
+
+ mp_list_item *item = NULL;
+
+ while (list)
+ {
+ item = (mp_list_item *) list->data;
+ if (!strlen(item->fid))
+ {
+ DEBUG_TRACE("find same fid = %s", item->fid);
+ b_find_same_fid = true;
+ break;
+ }
+ list = list->next;
+ }
+ }
+ }
+
+ if (b_find_same_fid)
+ { //if current file have just set current item
+ DEBUG_TRACE(" current file have just set current item");
+ mp_play_list_set_current_item(data, *set_play_list, NULL);
+ }
+ else
+ {
+ //recreate playlist by path
+ DEBUG_TRACE(" recreate playlist by path");
+ mp_play_list_clear_play_list(set_play_list);
+ mp_play_list_create_current_play_list(data, set_play_list, NULL, path, 1, 0, FALSE, -1);
+ }
+
+ endfunc;
+
+ return true;
+}
+
+bool
+mp_play_list_create_play_list(void *data, AudioHandleType * svc_track, int count, int current_index, int playlist_id)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_play_list_clear_play_list(&ad->playing_list);
+
+ mp_play_list_create_current_play_list(ad, &ad->playing_list, svc_track, NULL, count, current_index,
+ ad->play_shuffle_state, playlist_id);
+ endfunc;
+
+ return true;
+}
+
+int
+mp_play_list_get_current_list_count(mp_play_list * play_list)
+{
+ if (!play_list)
+ return 0;
+
+ int count = 0;
+
+ if (!play_list->list)
+ return 0;
+
+ count = g_list_length(play_list->list);
+
+ return count;
+}
+
+bool
+mp_play_list_set_current_item(void *data, mp_play_list * playing_list, char *key_id)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(playing_list);
+
+ if (!_mp_play_list_set_playing_item(data, playing_list, key_id))
+ {
+ mp_error("playing item can not find it");
+ return false;
+ }
+
+ endfunc;
+
+ return true;
+}
+
+music_list_item *
+mp_play_list_get_current_item(mp_play_list * playing_list)
+{
+ MP_CHECK_NULL(playing_list);
+
+ return playing_list->current_item;
+}
+
+bool
+mp_play_list_get_item_by_index(void *data, mp_play_list * playing_list, music_list_item ** get_item, int value)
+{ //must be free
+ startfunc;
+
+ MP_CHECK_FALSE(playing_list);
+ MP_CHECK_FALSE(playing_list->list);
+
+ bool ret = false;
+
+ mp_list_item *item = NULL;
+
+ int count = g_list_length(playing_list->list);
+
+ MP_CHECK_FALSE(count > value);
+
+ item = (mp_list_item *) g_list_nth_data(playing_list->list, value);
+
+ ret = _mp_play_list_get_item_by_list_data(data, get_item, item);
+
+ return ret;
+}
+
+bool
+mp_play_list_get_prev_item(void *data, mp_play_list * play_list, music_list_item ** request_item)
+{ //must be free
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(play_list);
+ MP_CHECK_FALSE(play_list->list);
+
+ bool ret = false;
+
+ mp_list_item *item = NULL;
+
+ int next_index = play_list->current_index - 1;
+ int count = g_list_length(play_list->list);
+
+ if (0 > next_index)
+ next_index = (count - 1);
+
+ do {
+ item = (mp_list_item *) g_list_nth_data(play_list->list, next_index);
+ if (!item->removed)
+ break;
+ mp_debug("[index : %d] removed from playlist", next_index);
+
+ next_index--;
+ if (0 > next_index)
+ next_index = (count - 1);
+
+ if (next_index == play_list->current_index)
+ return MP_PLST_RET_END;
+ } while (1);
+
+ DEBUG_TRACE("get index = %d", next_index);
+ ret = _mp_play_list_get_item_by_list_data(data, request_item, item);
+
+ endfunc;
+
+ return ret;
+}
+
+mp_plst_ret_t
+mp_play_list_get_next_item(void *data, mp_play_list * play_list, music_list_item ** request_item, bool forced)
+{ //must be free
+ struct appdata *ad = (struct appdata *)data;
+
+ MP_CHECK_VAL(ad, MP_PLST_RET_ERR);
+ MP_CHECK_VAL(play_list, MP_PLST_RET_ERR);
+ MP_CHECK_VAL(play_list->list, MP_PLST_RET_ERR);
+
+ mp_plst_ret_t ret = MP_PLST_RET_OK;
+
+ mp_list_item *item = NULL;
+
+ int count = g_list_length(play_list->list);
+ int next_index = 0;
+
+ if (ad->play_rep_state == PLAY_REP_1 && !forced)
+ next_index = play_list->current_index;
+ else
+ next_index = play_list->current_index + 1;
+
+ if (count == next_index)
+ {
+ if (ad->play_rep_state == PLAY_REP_NON && !forced)
+ return MP_PLST_RET_END; /*return -1. not to display error popup.*/
+ else
+ next_index = 0;
+ }
+
+ do {
+ item = (mp_list_item *) g_list_nth_data(play_list->list, next_index);
+ if (!item->removed)
+ break;
+ mp_debug("[index : %d] removed from playlist", next_index);
+
+ next_index++;
+ if (next_index >= count)
+ next_index = 0;
+
+ if (next_index == play_list->current_index)
+ return MP_PLST_RET_END;
+ } while (1);
+
+ DEBUG_TRACE("get index = %d", next_index);
+ if(!_mp_play_list_get_item_by_list_data(data, request_item, item))
+ ret = MP_PLST_RET_ERR;
+
+ return ret;
+}
+
+
+int
+mp_play_list_get_normal_list_index_by_fid(mp_play_list * play_list, char *fid)
+{
+ int select_request_index = -1;
+
+ MP_CHECK_FALSE(play_list);
+ MP_CHECK_FALSE(play_list->list);
+
+ if (play_list->shuffle_list == play_list->list)
+ {
+ int count = g_list_length(play_list->normal_list);
+ int index = 0;
+
+ if (count > 1)
+ {
+ mp_list_item *item = NULL;
+
+ for (index = 0; index < count; ++index)
+ {
+ item = (mp_list_item *) g_list_nth_data(play_list->normal_list, index);
+ if (!g_strcmp0(item->fid, fid))
+ {
+ select_request_index = index;
+ break;
+ }
+ }
+ }
+ else
+ select_request_index = 0;
+ }
+ else
+ select_request_index = play_list->current_index;
+
+ return select_request_index;
+}
+
+bool
+mp_play_list_delete_item(mp_play_list *playing_list, char *fid)
+{
+ MP_CHECK_FALSE(playing_list);
+ MP_CHECK_FALSE(fid);
+
+ bool ret = FALSE;
+
+ mp_list_item *item = NULL;
+ int count = g_list_length(playing_list->normal_list);
+ int i = 0;
+ for (; i < count ; i++) {
+ item = (mp_list_item *)g_list_nth_data(playing_list->normal_list, i);
+ if (item) {
+ if (!g_strcmp0(fid, item->fid)) {
+ item->removed = TRUE;
+ ret = TRUE;
+ mp_debug("[%d : %s]", i, fid);
+ break;
+ }
+ }
+ }
+
+ if (playing_list->shuffle_list) {
+ count = g_list_length(playing_list->shuffle_list);
+ for (i = 0; i < count ; i++) {
+ item = (mp_list_item *)g_list_nth_data(playing_list->shuffle_list, i);
+ if (item) {
+ if (!g_strcmp0(fid, item->fid)) {
+ item->removed = TRUE;
+ ret = TRUE;
+ mp_debug("[%d : %s]", item->list_index, fid);
+ break;
+ }
+ }
+ }
+ }
+
+ return ret;
+}
+
diff --git a/src/core/mp-player-control.c b/src/core/mp-player-control.c
new file mode 100755
index 0000000..ccbbafa
--- /dev/null
+++ b/src/core/mp-player-control.c
@@ -0,0 +1,645 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <aul.h>
+#include <utilX.h>
+#include <syspopup_caller.h>
+
+#include "music.h"
+#include "mp-player-control.h"
+#include "mp-player-mgr.h"
+#include <mm_sound.h>
+#include "mp-player-drm.h"
+#include "mp-play-view.h"
+#include "mp-item.h"
+#include "mp-common.h"
+#include "mp-play-list.h"
+#include "mp-play.h"
+#include "mp-play-list.h"
+#include "mp-util.h"
+#include "mp-setting-ctrl.h"
+#include "mp-view-manager.h"
+#include "mp-player-mgr.h"
+
+#include "mp-player-debug.h"
+#include <pmapi.h>
+#include "mp-widget.h"
+#include "mp-streaming-mgr.h"
+
+
+#define CTR_EDJ_SIG_SRC "ctrl_edj"
+#define CTR_PROG_SIG_SRC "ctrl_prog"
+
+#define LONG_PRESS_INTERVAL 0.5
+#define FF_REW_INTERVAL 0.05
+#define LONG_PRESS_TIME_INCREASE 0.1
+
+static Eina_Bool _mp_play_mute_popup_cb(void *data);
+
+static Eina_Bool
+_mp_play_control_long_pressed_cb(void *data)
+{
+ startfunc;
+
+ struct appdata *ad = data;
+ mp_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "appdata is NULL");
+
+ double pos = 0, duration = 0, new_pos = 0;
+
+ ad->is_Longpress = true;
+
+ if (ad->player_state == PLAY_STATE_PLAYING)
+ mp_player_mgr_pause(ad);
+
+ if (ad->is_ff)
+ ad->ff_rew += LONG_PRESS_TIME_INCREASE;
+ else
+ ad->ff_rew -= LONG_PRESS_TIME_INCREASE;
+
+ duration = mp_player_mgr_get_duration();
+ pos = mp_player_mgr_get_position();
+
+ ad->music_length = duration / 1000;
+ ad->music_pos = pos / 1000;
+
+ new_pos = ad->music_pos + ad->ff_rew;
+
+ mp_debug("new pos=%f", new_pos);
+
+ if (new_pos < 0.)
+ {
+ mp_player_mgr_set_position(0);
+ ad->music_pos = 0;
+ }
+ else if (new_pos > ad->music_length)
+ {
+ mp_player_mgr_set_position(duration);
+ ad->music_pos = ad->music_length;
+ }
+ else
+ {
+ mp_player_mgr_set_position(new_pos * 1000);
+ ad->music_pos = new_pos;
+ }
+
+ vconf_set_dbl(MP_EXT_CUR_PROGRESS_POS, ad->music_pos / ad->music_length);
+
+ mp_play_view_update_progressbar(data);
+ ecore_timer_interval_set(ad->longpress_timer, FF_REW_INTERVAL);
+
+ endfunc;
+
+ return ECORE_CALLBACK_RENEW;
+
+}
+
+static void
+_mp_play_control_add_longpressed_timer(void *data)
+{
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ ad->longpress_timer =
+ ecore_timer_add(LONG_PRESS_INTERVAL, _mp_play_control_long_pressed_cb, ad);
+}
+
+void
+_mp_play_control_del_longpressed_timer(void *data)
+{
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ mp_ecore_timer_del(ad->longpress_timer);
+}
+
+static bool
+_mp_play_control_reset_play_list(void *data)
+{
+ startfunc;
+
+ struct appdata *ad = data;
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+
+ if (current_item)
+ {
+ mp_play_list_reset(ad, &ad->playing_list, current_item->key_id);
+ }
+
+ current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_FALSE(current_item);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+ char track_index[40];
+
+ snprintf(track_index, sizeof(track_index), "(%d/%d)", current_item->list_index + 1,
+ mp_play_list_get_current_list_count(ad->playing_list));
+
+ edje_object_part_text_set(_EDJ(playing_view->play_ctrl), "track_index", track_index);
+
+ endfunc;
+
+ return true;
+}
+
+bool
+mp_player_control_ready_new_file(void *data, bool check_drm)
+{
+ startfunc;
+
+ struct appdata *ad = data;
+ MP_CHECK_FALSE(ad);
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_FALSE(current_item);
+
+ bool is_drm = FALSE;
+
+ DEBUG_TRACE("current item pathname : [%s]", current_item->filename);
+ if (mp_util_check_uri_available(current_item->filename))
+ {
+ mp_debug("http uri path");
+ }
+ else if (!mp_check_file_exist(current_item->filename))
+ {
+ ERROR_TRACE("There is no such file\n");
+ mp_widget_text_popup(ad, GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST"));
+ return FALSE;
+ }
+
+ if (check_drm)
+ {
+ if (mp_drm_file_right(current_item->filename))
+ {
+ DEBUG_TRACE("This is DRM Contents\n");
+ is_drm = TRUE;
+
+ if (!mp_drm_check_left_ro(ad, current_item->filename))
+ return FALSE;
+
+ if (!mp_drm_check_forward(ad, current_item->filename))
+ return FALSE;
+ }
+ }
+ else
+ is_drm = TRUE;
+
+ if (is_drm)
+ mp_drm_set_consumption(TRUE);
+
+ ad->player_state = PLAY_STATE_INIT;
+
+ if (!mp_player_mgr_create(ad, current_item->filename))
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"));
+ return FALSE;
+ }
+
+ if (!mp_player_mgr_set_msg_callback(player_msg_cb, ad)) //callback has to be set before realize
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"));
+ return FALSE;
+ }
+
+ if (!mp_player_mgr_realize(ad))
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"));
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+
+void
+mp_play_control_play_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("[%s], ad->player_state: %d", emission, ad->player_state);
+
+ if (!strcmp(emission, SIGNAL_PLAY))
+ {
+ ad->paused_by_user = FALSE;
+
+ if (ad->player_state == PLAY_STATE_PAUSED)
+ {
+ mp_player_mgr_resume(ad);
+ }
+ else if (ad->player_state == PLAY_STATE_READY)
+ {
+ mp_play_current_file(ad);
+ }
+ else if (ad->player_state == PLAY_STATE_PLAYING)
+ {
+ DEBUG_TRACE("player_state is already playing. Skip event");
+ }
+ else
+ {
+ mp_play_new_file(ad, TRUE);
+ }
+ }
+ else if (!strcmp(emission, SIGNAL_PAUSE))
+ {
+ if (ad->player_state == PLAY_STATE_PLAYING)
+ {
+ mp_player_mgr_pause(ad);
+ ad->paused_by_user = TRUE;
+ }
+ }
+
+}
+
+void
+mp_play_control_ff_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+ DEBUG_TRACE("mp_play_control_ff_cb [%s]\n", emission);
+
+ ad->ff_rew = 0;
+ ad->is_ff = TRUE;
+
+ if (!strcmp(emission, "ff_btn_down") && !strcmp(source, CTR_EDJ_SIG_SRC))
+ {
+ if(!ad->seek_off)
+ _mp_play_control_add_longpressed_timer(ad);
+ }
+ else if (!strcmp(emission, "ff_btn_up") && !strcmp(source, CTR_EDJ_SIG_SRC))
+ {
+ _mp_play_control_del_longpressed_timer(ad);
+
+ if (ad->is_Longpress)
+ {
+ ad->is_Longpress = false;
+ if (!ad->paused_by_user)
+ mp_player_mgr_resume(ad);
+ }
+ else
+ {
+ if(ad->playing_view)
+ ad->playing_view->flick_direction = 1;
+ mp_play_next_file(ad, TRUE);
+ }
+ }
+
+
+}
+
+void
+mp_play_control_rew_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE("mp_play_control_rew_cb [%s]\n", emission);
+
+ ad->ff_rew = 0;
+ ad->is_ff = FALSE;
+
+ if (!strcmp(emission, "rew_btn_down") && !strcmp(source, CTR_EDJ_SIG_SRC))
+ {
+ if(!ad->seek_off)
+ _mp_play_control_add_longpressed_timer(ad);
+ }
+ else if (!strcmp(emission, "rew_btn_up") && !strcmp(source, CTR_EDJ_SIG_SRC))
+ {
+ _mp_play_control_del_longpressed_timer(ad);
+
+ if (ad->is_Longpress)
+ {
+ ad->is_Longpress = false;
+ if (!ad->paused_by_user)
+ mp_player_mgr_resume(ad);
+ }
+ else
+ {
+ int pos = mp_player_mgr_get_position();
+ if (pos > 3000 ||mp_play_list_get_current_list_count(ad->playing_list) == 1)
+ {
+ mp_player_mgr_set_position(0);
+
+ if (!ad->paused_by_user)
+ {
+ mp_player_mgr_resume(ad);
+ }
+ else
+ {
+ ad->music_pos = 0;
+ mp_play_view_update_progressbar(ad);
+ }
+ return;
+ }
+
+ if (ad->play_shuffle_state)
+ {
+ mp_play_prev_file(ad);
+ }
+ else
+ {
+ if(ad->playing_view)
+ ad->playing_view->flick_direction = 2;
+ mp_play_prev_file(ad);
+ }
+ }
+ }
+
+}
+
+#define MP_LONG_PRESS_TIMEOUT 1.0
+#define MUTE_POPUP_INTERVAL_TIME 3.0
+
+static Eina_Bool
+_mp_play_control_volume_timer_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ ad->volume_long_pressed = true;
+ mp_ecore_timer_del(ad->volume_down_timer);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+ if (ad->mute_flag)
+ {
+ mp_player_mgr_set_mute(false);
+ edje_object_signal_emit(_EDJ(playing_view->play_icon), "unmute", "volume");
+ edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
+ ad->mute_flag = false;
+ }
+ else
+ {
+ mp_player_mgr_set_mute(true);
+ edje_object_signal_emit(_EDJ(playing_view->play_icon), "mute", "volume");
+ edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_SHOW, "*");
+ ad->mute_flag = true;
+ mp_ecore_timer_del(ad->mute_popup_show_timer);
+ ad->mute_popup_show_timer =
+ ecore_timer_add(MUTE_POPUP_INTERVAL_TIME, _mp_play_mute_popup_cb, (void *)ad);
+ }
+
+ return EINA_FALSE;
+}
+
+void
+mp_play_control_volume_down_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ ad->volume_long_pressed = false;
+ mp_ecore_timer_del(ad->volume_down_timer);
+ ad->volume_down_timer = ecore_timer_add(MP_LONG_PRESS_TIMEOUT, _mp_play_control_volume_timer_cb, (void *)ad);
+
+ return;
+}
+
+void
+mp_play_control_volume_up_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_ecore_timer_del(ad->volume_down_timer);
+ return;
+}
+
+static Eina_Bool
+_mp_play_mute_popup_cb(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ mp_ecore_timer_del(ad->mute_popup_show_timer);
+
+ edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
+ endfunc;
+ return EINA_FALSE;
+}
+
+void
+mp_play_control_volume_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_ecore_timer_del(ad->volume_down_timer);
+
+ DEBUG_TRACE("volume_long_pressed=%d,mute_flag=%d", ad->volume_long_pressed, ad->mute_flag);
+ if (ad->volume_long_pressed)
+ {
+ ad->volume_long_pressed = false;
+ }
+ else if (ad->mute_flag)
+ {
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+ edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_SHOW, "*");
+ mp_ecore_timer_del(ad->mute_popup_show_timer);
+ ad->mute_popup_show_timer =
+ ecore_timer_add(MUTE_POPUP_INTERVAL_TIME, _mp_play_mute_popup_cb, (void *)ad);
+ }
+ else
+ syspopup_launch("volume", NULL);
+
+ return;
+}
+
+void
+mp_play_control_menu_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ DEBUG_TRACE("mp_play_control_menu_cb with[%s]\n", emission);
+
+ if (!strcmp(emission, SIGNAL_INFO))
+ {
+ }
+ else if (!strcmp(emission, SIGNAL_MAINALBUM_CLICKED))
+ {
+ }
+ else if (!strcmp(emission, SIGNAL_SHUFFLE))
+ {
+ if (!mp_setting_set_shuffle_state(FALSE))
+ {
+ mp_play_control_shuffle_set(ad, FALSE);
+ ad->play_shuffle_state = FALSE;
+ }
+
+ _mp_play_control_reset_play_list(ad);
+
+ }
+ else if (!strcmp(emission, SIGNAL_SHUFNON))
+ {
+
+ if (!mp_setting_set_shuffle_state(TRUE))
+ {
+ mp_play_control_shuffle_set(ad, TRUE);
+ ad->play_shuffle_state = TRUE;
+ }
+
+ _mp_play_control_reset_play_list(ad);
+ }
+ else if (!strcmp(emission, SIGNAL_REPALL)) //off -1 - all - off
+ {
+ if (!mp_setting_set_repeat_state(MP_SETTING_REP_NON))
+ mp_play_control_repeat_set(ad, MP_SETTING_REP_NON);
+ }
+ else if (!strcmp(emission, SIGNAL_REPNON))
+ {
+ if (!mp_setting_set_repeat_state(MP_SETTING_REP_1))
+ mp_play_control_repeat_set(ad, MP_SETTING_REP_1);
+ }
+ else if (!strcmp(emission, SIGNAL_REP1))
+ {
+ if (!mp_setting_set_repeat_state(MP_SETTING_REP_ALL))
+ mp_play_control_repeat_set(ad, MP_SETTING_REP_ALL);
+ }
+ else
+ {
+
+ }
+}
+
+
+void
+mp_play_control_end_of_stream(void *data)
+{
+ struct appdata *ad = data;
+ mp_retm_if(ad == NULL, "appdata is NULL");
+
+ DEBUG_TRACE(" rep_state[%d] shuffle_state[%d]\n", ad->play_rep_state, ad->play_shuffle_state);
+
+ if (ad->show_optional_menu)
+ {
+ ad->music_pos = ad->music_length;
+ mp_play_view_update_progressbar(ad);
+ }
+
+ if (ad->play_rep_state == PLAY_REP_ALL)
+ {
+ if(ad->playing_list && ad->playing_list->list_type == MP_PLST_TYPE_PATH)
+ {
+ ad->freeze_indicator_icon = true;
+ mp_player_mgr_stop(ad);
+ mp_player_mgr_play(ad);
+ }
+ else
+ mp_play_next_file(ad, FALSE);
+ }
+ else if (ad->play_rep_state == PLAY_REP_1)
+ {
+ ad->freeze_indicator_icon = true;
+ mp_player_mgr_stop(ad);
+ mp_player_mgr_play(ad);
+ }
+ else if (ad->play_rep_state == PLAY_REP_NON)
+ {
+ mp_play_next_file(ad, FALSE);
+ }
+ else
+ {
+ ERROR_TRACE("Error");
+ }
+}
+
+
+
+void
+mp_play_control_visible_set(void *data, bool play_enable)
+{
+ struct appdata *ad = data;
+ Evas_Object *buttons = NULL;
+
+ mp_retm_if(ad == NULL, "appdata is NULL");
+ mp_retm_if(ad->playing_view == NULL, "playing_view is NULL");
+ mp_retm_if(ad->playing_view->play_control == NULL, "play_contol is NULL");
+
+ buttons = evas_object_data_get(ad->playing_view->play_control, "buttons");
+ mp_retm_if(buttons == NULL, "button is NULL");
+
+ if (play_enable)
+ {
+ edje_object_signal_emit(_EDJ(buttons), "play", CTR_PROG_SIG_SRC);
+ }
+ else
+ {
+ edje_object_signal_emit(_EDJ(buttons), "pause", CTR_PROG_SIG_SRC);
+ }
+
+}
+
+void
+mp_play_control_shuffle_set(void *data, bool shuffle_enable)
+{
+ struct appdata *ad = data;
+
+ mp_retm_if(ad == NULL, "appdata is NULL");
+ mp_retm_if(ad->playing_view == NULL, "playing_view is NULL");
+ mp_retm_if(ad->playing_view->play_menu == NULL, "play_menu is NULL");
+
+ if (shuffle_enable)
+ {
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "shuffle_visible", "shuffle");
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "shuffle_non_invisible", "shuffle_non");
+ }
+ else
+ {
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "shuffle_invisible", "shuffle");
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "shuffle_non_visible", "shuffle_non");
+ }
+}
+
+void
+mp_play_control_repeat_set(void *data, int repeat_state)
+{
+ struct appdata *ad = data;
+
+ mp_retm_if(ad == NULL, "appdata is NULL");
+ mp_retm_if(ad->playing_view == NULL, "playing_view is NULL");
+ mp_retm_if(ad->playing_view->play_menu == NULL, "play_menu is NULL");
+
+ if (repeat_state == PLAY_REP_ALL)
+ {
+ ad->play_rep_state = PLAY_REP_ALL;
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_all_visible", "rep_all");
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_1_invisible", "rep_1");
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_non_invisible", "rep_non");
+ }
+ else if (repeat_state == PLAY_REP_1)
+ {
+ ad->play_rep_state = PLAY_REP_1;
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_all_invisible", "rep_all");
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_1_visible", "rep_1");
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_non_invisible", "rep_non");
+ }
+ else if (repeat_state == PLAY_REP_NON)
+ {
+ ad->play_rep_state = PLAY_REP_NON;
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_all_invisible", "rep_all");
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_1_invisible", "rep_1");
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_menu), "rep_non_visible", "rep_non");
+ }
+ else
+ ERROR_TRACE("Error when set repeat\n");
+
+}
diff --git a/src/core/mp-player-drm.c b/src/core/mp-player-drm.c
new file mode 100755
index 0000000..844c1c6
--- /dev/null
+++ b/src/core/mp-player-drm.c
@@ -0,0 +1,108 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include "mp-player-drm.h"
+#include "mp-item.h"
+#include "mp-player-control.h"
+#include "mp-play.h"
+#include "mp-player-debug.h"
+#include "mp-play-list.h"
+#include "mp-util.h"
+#include "mp-popup.h"
+
+static bool _g_drm_consumption = FALSE;
+#define ACCUMULATED_DATE 86400 // 24*60*60
+
+void
+mp_drm_set_consumption(bool enabled)
+{
+ _g_drm_consumption = enabled;
+}
+
+bool
+mp_drm_get_consumption(void)
+{
+ return _g_drm_consumption;
+}
+
+void
+mp_drm_start_consumption(char *path)
+{
+
+}
+
+
+void
+mp_drm_pause_consumption(void)
+{
+
+}
+
+void
+mp_drm_resume_consumption(void)
+{
+
+}
+
+void
+mp_drm_stop_consumption(void)
+{
+
+}
+
+bool
+mp_drm_file_right(char *path)
+{
+ return FALSE;
+}
+
+bool
+mp_drm_has_valid_ro(char *path)
+{
+ return TRUE;
+}
+
+bool
+mp_drm_get_description(void *data, char *path)
+{
+ return FALSE;
+}
+
+bool
+mp_drm_check_forward(void *data, char *path)
+{
+ return TRUE;
+}
+
+bool
+mp_drm_check_left_ro(void *data, char *path)
+{
+ return TRUE;
+}
+
+bool
+mp_drm_check_expiration(char *path, bool expired)
+{
+ return TRUE;
+}
+
+bool
+mp_drm_check_foward_lock(char *path)
+{
+ return TRUE;
+}
diff --git a/src/core/mp-player-mgr.c b/src/core/mp-player-mgr.c
new file mode 100755
index 0000000..a7f153c
--- /dev/null
+++ b/src/core/mp-player-mgr.c
@@ -0,0 +1,591 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <glib.h>
+#include <mm_error.h>
+#include "music.h"
+#include "mp-player-mgr.h"
+#include "mp-player-control.h"
+#include "mp-play.h"
+#include "mp-player-drm.h"
+#include <mm_session.h>
+#include <mm_message.h>
+#include "mp-player-debug.h"
+#include "mp-widget.h"
+#include "mp-play-view.h"
+#include "mp-streaming-mgr.h"
+
+#define MAX_PATH_LEN MAX_NAM_LEN
+
+static MMHandleType _player = 0;
+
+bool
+mp_player_mgr_is_active(void)
+{
+ return _player ? TRUE : FALSE;
+}
+
+bool
+mp_player_mgr_set_msg_callback(MMMessageCallback cb, gpointer user_data)
+{
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ if (mm_player_set_message_callback(_player, cb, user_data) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_set_msg_callback\n");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+MMPlayerStateType
+mp_player_mgr_get_state(void)
+{
+ int ret = -1;
+ MMPlayerStateType state_now = MM_PLAYER_STATE_NULL;
+
+ if (!_player)
+ return state_now;
+
+ ret = mm_player_get_state(_player, &state_now);
+ return state_now;
+}
+
+
+bool
+mp_player_mgr_create(void *data, const gchar * path)
+{
+ struct appdata *ad = (struct appdata *)data;
+ int path_len = strlen(path);
+
+ char *g_err_name = NULL;
+ int ret = MM_ERROR_NONE;
+
+ DEBUG_TRACE("mp_player_mgr_create with [%s]\n", path);
+
+ if(!ad->player_msg_pipe)
+ ad->player_msg_pipe = ecore_pipe_add(mp_player_mgr_pipe_cb, ad);
+
+ if (path_len > 0 && path_len < MAX_PATH_LEN)
+ {
+
+ if (mp_player_mgr_is_active())
+ {
+ return FALSE;
+ }
+ if (mm_player_create(&_player) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_create\n");
+ return FALSE;
+ }
+
+ ret = mm_player_set_attribute(_player, &g_err_name,
+ "sound_volume_type", MM_SOUND_VOLUME_TYPE_MEDIA,
+ "profile_uri", path, strlen(path), NULL);
+ if (ret != MM_ERROR_NONE)
+ {
+ ERROR_TRACE(">>>>>>>>>>>>>g_err_name : %s\n", g_err_name);
+ SAFE_FREE(g_err_name);
+ return FALSE;
+ }
+
+ if (mp_streaming_mgr_check_streaming(ad, path)) {
+ if (!mp_streaming_mgr_set_attribute(ad, _player)) {
+ mp_error("streaming set attribute fail");
+ return FALSE;
+ }
+ }
+ }
+ else
+ {
+
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+bool
+mp_player_mgr_destroy(void *data)
+{
+ struct appdata *ad = data;
+
+ if(ad->player_msg_pipe)
+ {
+ ecore_pipe_del(ad->player_msg_pipe);
+ ad->player_msg_pipe = NULL;
+ }
+
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ if (mm_player_destroy(_player) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_destroy\n");
+ return FALSE;
+ }
+
+ _player = 0;
+ ad->player_state = PLAY_STATE_INIT;
+ if (!ad->freeze_indicator_icon)
+ vconf_set_int(VCONFKEY_MUSIC_STATE, VCONFKEY_MUSIC_OFF);
+ else
+ ad->freeze_indicator_icon = FALSE;
+
+ return TRUE;
+}
+
+bool
+mp_player_mgr_realize(void *data)
+{
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ if (mm_player_realize(_player) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_realize\n");
+ _player = 0;
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool
+mp_player_mgr_unrealize(void *data)
+{
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ if (mm_player_unrealize(_player) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_unrealize\n");
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool
+mp_player_mgr_play(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ int err = -1;
+
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ err = mm_player_start(_player);
+ if (err != MM_ERROR_NONE)
+ {
+ if (err == MM_ERROR_POLICY_BLOCKED)
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"));
+ }
+ else
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"));
+ }
+
+ ERROR_TRACE("Error when mp_player_mgr_play. err[%x]\n", err);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+
+bool
+mp_player_mgr_stop(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ if (mm_player_stop(_player) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_stop\n");
+ return FALSE;
+ }
+
+ mp_play_stop(ad);
+ return TRUE;
+}
+
+bool
+mp_player_mgr_resume(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ int err = -1;
+
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ err = mm_player_resume(_player);
+ if (err != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_resume. err[%x]\n", err);
+ if (err == MM_ERROR_POLICY_BLOCKED)
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_DURING_CALL"));
+ }
+ else
+ {
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"));
+ }
+ return FALSE;
+ }
+
+ mp_play_view_update_progressbar(data);
+ mp_play_view_progress_timer_thaw(data);
+
+ return TRUE;
+}
+
+bool
+mp_player_mgr_pause(void *data)
+{
+ startfunc;
+ int err = -1;
+
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ err = mm_player_pause(_player);
+ if (err != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_pause. err[%x]\n", err);
+ return FALSE;
+ }
+ return TRUE;
+}
+
+bool
+mp_player_mgr_set_position(guint pos)
+{
+ startfunc;
+ if (!mp_player_mgr_is_active())
+ return FALSE;
+
+ if (mm_player_set_position(_player, MM_PLAYER_POS_FORMAT_TIME, (int)pos) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_set_position\n");
+ return FALSE;
+ }
+
+ return TRUE;
+}
+
+int
+mp_player_mgr_get_position(void)
+{
+ int pos = 0;
+
+ if (!mp_player_mgr_is_active())
+ return 0;
+
+ if (mm_player_get_position(_player, MM_PLAYER_POS_FORMAT_TIME, &pos) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("Error when mp_player_mgr_get_position\n");
+ return 0;
+ }
+
+ return pos;
+}
+
+int
+mp_player_mgr_get_duration(void)
+{
+ if (!mp_player_mgr_is_active())
+ return -1;
+
+ int ret = MM_ERROR_NONE;
+ char *g_err_name = NULL;
+ int duration = -1;
+
+ ret = mm_player_get_attribute(_player, &g_err_name, "content_duration", &duration, NULL);
+ if (ret != MM_ERROR_NONE)
+ {
+ ERROR_TRACE(">>>>>>>>>>>>>g_err_name : %s\n", g_err_name);
+ SAFE_FREE(g_err_name);
+ return FALSE;
+ }
+ else
+ {
+ return duration;
+ }
+ return duration;
+}
+
+static Eina_Bool
+mp_playing_paused_by_bluetooth(void *data)
+{
+ struct appdata *ad = data;
+ MP_CHECK_FALSE(ad);
+
+ int earjack = 0;
+
+ if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
+ {
+ WARN_TRACE("Earjack state get Fail...");
+
+ if (earjack == 0)
+ {
+ mp_play_pause(ad);
+ }
+ }
+
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_BLUETOOTH_DISCONNECTED"));
+ ad->bt_pause_idler = NULL;
+ return 0;
+}
+
+static Eina_Bool
+mp_playing_error(void *data)
+{
+ struct appdata *ad = data;
+ MP_CHECK_FALSE(ad);
+
+ mp_play_destory(ad);
+ ad->playing_err_idler = NULL;
+ return EINA_FALSE;
+}
+
+typedef struct{
+ int msg_type;
+ MMMessageParamType msg_param;
+}mp_pipe_msg;
+
+void
+mp_player_mgr_pipe_cb(void *data, void *buffer, unsigned int nbyte)
+{
+ struct appdata *ad = data;
+ MP_CHECK(ad);
+ MP_CHECK(buffer);
+ mp_pipe_msg *pipe_msg = buffer;
+ MMMessageParamType *param = &(pipe_msg->msg_param);
+ int msg_type = pipe_msg->msg_type;
+
+ DEBUG_TRACE("msg_type: %d,", msg_type);
+
+ switch (msg_type)
+ {
+ case MM_MESSAGE_BEGIN_OF_STREAM:
+ DEBUG_TRACE("receive MM_MESSAGE_BEGIN_OF_STREAM\n");
+ mp_play_start(ad);
+ break;
+
+ case MM_MESSAGE_ERROR:
+ DEBUG_TRACE("receive MM_MESSAGE_ERROR \n");
+ DEBUG_TRACE("Error Code=%x\n", param->code);
+ MP_CHECK(param);
+ switch (param->code)
+ {
+ case MM_ERROR_PLAYER_BT_CONNECTION:
+ DEBUG_TRACE("receive MM_ERROR_PLAYER_BT_CONNECTION\n");
+ break;
+ case MM_ERROR_PLAYER_INTERNAL:
+ DEBUG_TRACE("receive MM_ERROR_PLAYER_INTERNAL\n");
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_ERROR_OCCURRED"));
+ break;
+ case MM_ERROR_PLAYER_CODEC_NOT_FOUND:
+ DEBUG_TRACE("receive MM_ERROR_PLAYER_CODEC_NOT_FOUND\n");
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"));
+ break;
+ default:
+ if (!mp_streaming_mgr_message_callback(msg_type, param, ad))
+ mp_widget_text_popup(ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_PLAY_UNSUPPORTED_FILETYPE"));
+ break;
+ }
+ if(!ad->playing_err_idler)
+ ad->playing_err_idler = ecore_idler_add(mp_playing_error, ad);
+ break;
+
+ case MM_MESSAGE_WARNING:
+ DEBUG_TRACE("receive MM_MESSAGE_WARNING\n");
+ break;
+
+ case MM_MESSAGE_END_OF_STREAM:
+ DEBUG_TRACE("receive MM_MESSAGE_END_OF_STREAM\n");
+ mp_play_control_end_of_stream(ad);
+ break;
+
+ case MM_MESSAGE_STATE_CHANGED:
+ MP_CHECK(param);
+ switch (param->state.current)
+ {
+ case MM_PLAYER_STATE_NONE:
+ DEBUG_TRACE("==> [MediaPlayerApp] Player is [NONE]\n");
+ break;
+ case MM_PLAYER_STATE_READY:
+ DEBUG_TRACE("==> [MediaPlayerApp] Player is [READY]\n");
+ ad->player_state = PLAY_STATE_READY;
+ mp_play_ready(ad);
+ break;
+ case MM_PLAYER_STATE_PLAYING:
+ DEBUG_TRACE("==> [MediaPlayerApp] Player is [PLAYING]\n");
+ if (ad->player_state == PLAY_STATE_PAUSED)
+ mp_play_resume(ad);
+
+ ad->player_state = PLAY_STATE_PLAYING;
+
+ if (ad->is_focus_out) {
+ mp_debug("prohibit playing in bg");
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PAUSE, NULL);
+ }
+
+ break;
+ case MM_PLAYER_STATE_PAUSED:
+ DEBUG_TRACE("==> [MediaPlayerApp] Player is [PAUSED]\n");
+ mp_play_pause(ad);
+ ad->player_state = PLAY_STATE_PAUSED;
+ break;
+ case MM_PLAYER_STATE_NULL:
+ DEBUG_TRACE("==> [MediaPlayerApp] Player is [NULL]\n");
+ break;
+ }
+
+ break;
+
+ case MM_MESSAGE_STATE_INTERRUPTED:
+ DEBUG_TRACE("receive MM_MESSAGE_STATE_CHANGED_BY_ASM\n");
+ MP_CHECK(param);
+ switch (param->code)
+ {
+ case MM_MSG_CODE_INTERRUPTED_BY_OTHER_APP:
+ DEBUG_TRACE("receive MM_MSG_CODE_INTERRUPTED_BY_OTHER_APP");
+ break;
+ case MM_MSG_CODE_INTERRUPTED_BY_CALL_START:
+ DEBUG_TRACE("receive MM_MSG_CODE_INTERRUPTED_BY_CALL_START");
+ break;
+ case MM_MSG_CODE_INTERRUPTED_BY_CALL_END:
+ DEBUG_TRACE("receive MM_MSG_CODE_INTERRUPTED_BY_CALL_END");
+ break;
+ case MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG:
+ DEBUG_TRACE("receive MM_MSG_CODE_INTERRUPTED_BY_EARJACK_UNPLUG");
+ break;
+ case MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT:
+ DEBUG_TRACE("receive MM_MSG_CODE_INTERRUPTED_BY_RESOURCE_CONFLICT");
+ break;
+ case MM_MSG_CODE_INTERRUPTED_BY_ALARM_START:
+ DEBUG_TRACE("receive MM_MSG_CODE_INTERRUPTED_BY_ALARM_START");
+ break;
+ case MM_MSG_CODE_INTERRUPTED_BY_ALARM_END:
+ DEBUG_TRACE("receive MM_MSG_CODE_INTERRUPTED_BY_ALARM_END");
+ break;
+ }
+ mp_play_pause(ad);
+
+ break;
+
+ case MM_MESSAGE_BLUETOOTH_OFF:
+ DEBUG_TRACE("receive MM_MESSAGE_BLUETOOTH_OFF\n");
+ if(!ad->bt_pause_idler)
+ ad->bt_pause_idler = ecore_idler_add(mp_playing_paused_by_bluetooth, ad);
+ break;
+
+ case MM_MESSAGE_READY_TO_RESUME:
+ DEBUG_TRACE("receive MM_MESSAGE_READY_TO_RESUME");
+
+ if (ad->player_state == PLAY_STATE_PAUSED)
+ mp_player_mgr_resume(ad);
+ else
+ ERROR_TRACE("Check player state");
+ break;
+
+ default:
+ if (!mp_streaming_mgr_message_callback(msg_type, param, ad)) {
+ DEBUG_TRACE("receive unknown msg [0x%x]", msg_type);
+ }
+ }
+ return;
+}
+
+int
+player_msg_cb(int msg_type, void *msg_param, void *user_param)
+{
+ startfunc;
+ struct appdata *ad = user_param;
+ MP_CHECK_VAL(ad, 0);
+
+ MP_CHECK_VAL(mp_player_mgr_is_active(), 1);
+
+ mp_pipe_msg *pipe_msg = calloc(sizeof(mp_pipe_msg), 1);
+ if(msg_param)
+ memcpy(&(pipe_msg->msg_param), msg_param, sizeof(MMMessageParamType));
+ pipe_msg->msg_type = msg_type;
+
+ ecore_pipe_write(ad->player_msg_pipe, pipe_msg, sizeof(mp_pipe_msg));
+
+ IF_FREE(pipe_msg);
+ return 1;
+}
+
+int
+mp_player_mgr_vol_type_set(void)
+{
+ return mm_sound_volume_primary_type_set(VOLUME_TYPE_MEDIA);
+}
+
+int
+mp_player_mgr_vol_type_unset(void)
+{
+ return mm_sound_volume_primary_type_clear();
+}
+
+bool
+mp_player_mgr_session_init(void)
+{
+ int ret = MM_ERROR_NONE;
+
+ ret = mm_session_init(MM_SESSION_TYPE_SHARE);
+
+ if (ret != MM_ERROR_NONE)
+ return FALSE;
+
+ return TRUE;
+}
+
+bool
+mp_player_mgr_session_finish(void)
+{
+ int ret = MM_ERROR_NONE;
+
+ ret = mm_session_finish();
+
+ if (ret != MM_ERROR_NONE)
+ return FALSE;
+
+ return TRUE;
+
+}
+
+void
+mp_player_mgr_set_mute(bool bMuteEnable)
+{
+
+ if (!mp_player_mgr_is_active())
+ return;
+
+ if (mm_player_set_mute(_player, (int)bMuteEnable) != MM_ERROR_NONE)
+ {
+ ERROR_TRACE("[ERR] mm_player_set_mute");
+ }
+}
diff --git a/src/core/mp-setting-ctrl.c b/src/core/mp-setting-ctrl.c
new file mode 100755
index 0000000..93a6c57
--- /dev/null
+++ b/src/core/mp-setting-ctrl.c
@@ -0,0 +1,339 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <string.h>
+#include <stdlib.h>
+#include <vconf.h>
+#include <audio-svc.h>
+
+#include "music.h"
+
+#include "mp-setting-ctrl.h"
+#include "mp-setting-keys.h"
+#include "mp-player-debug.h"
+#include "mp-file-tag-info.h"
+#include "mp-player-mgr.h"
+#include "mp-widget.h"
+#include "mp-util.h"
+
+typedef struct _mp_setting_t
+{
+ int menu_state;
+ int output;
+ MpSettingMenu_Cb menu_cb;
+ void *menu_udata;
+} mp_setting_t;
+
+
+#define MP_VCONFKEY_MUSIC_SHUFFLE "db/music/menu/shuffle"
+#define MP_VCONFKEY_MUSIC_REPEAT "db/music/menu/repeat"
+#define MP_VCONFKEY_MUSIC_ALBUM_ART "memory/music/album_art"
+
+static mp_setting_t *g_setting = NULL;
+static char *c_file_path = NULL;
+
+static Eina_Bool _mp_setting_init_idler_cb(void *data);
+
+void
+mp_setting_set_albumart_path(const char *path)
+{
+ if (path && strlen(path))
+ vconf_set_str(MP_VCONFKEY_MUSIC_ALBUM_ART, path);
+ else
+ vconf_set_str(MP_VCONFKEY_MUSIC_ALBUM_ART, DEFAULT_THUMBNAIL);
+}
+
+static void
+_mp_setting_menu_changed_cb(keynode_t * node, void *user_data)
+{
+ mp_setting_t *sd = NULL;
+
+ mp_retm_if(node == NULL, "keymode is NULL");
+ mp_retm_if(user_data == NULL, "user_date is NULL");
+ sd = (mp_setting_t *) user_data;
+
+ if (vconf_get_int(VCONFKEY_SETAPPL_MUSIC_MENU_VAL_INT, &sd->menu_state))
+ {
+ ERROR_TRACE("Fail to get %s", VCONFKEY_SETAPPL_MUSIC_MENU_VAL_INT);
+ return;
+ }
+
+ if (sd->menu_cb)
+ {
+ mp_setting_menu_t *menu_state = NULL;
+
+ menu_state = malloc(sizeof(mp_setting_menu_t));
+ MP_CHECK(menu_state);
+
+ mp_setting_menu_get_state(menu_state);
+
+ sd->menu_cb(menu_state, sd->menu_udata);
+
+ free(menu_state);
+ }
+
+ return;
+}
+
+static int
+mp_setting_key_cb_init(void)
+{
+ int ret = 0;
+
+ mp_retvm_if(g_setting == NULL, -1, "setting data is not initialized, init first!!!!!");
+
+ if (vconf_notify_key_changed(VCONFKEY_MUSIC_MENU_CHANGE, _mp_setting_menu_changed_cb, g_setting) < 0)
+ {
+ ERROR_TRACE("Fail to register VCONFKEY_MUSIC_MENU_CHANGE key callback");
+ ret = -1;
+ }
+
+ return ret;
+}
+
+static void
+mp_setting_key_cb_deinit(void)
+{
+
+ vconf_ignore_key_changed(VCONFKEY_MUSIC_MENU_CHANGE, _mp_setting_menu_changed_cb);
+
+ return;
+}
+
+static Eina_Bool
+_mp_setting_init_idler_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ mp_setting_key_cb_init();
+ ad->setting_idler = NULL;
+ return EINA_FALSE;
+}
+
+int
+mp_setting_init(struct appdata *ad)
+{
+ int ret = 0;
+
+ g_setting = malloc(sizeof(mp_setting_t));
+ if (!g_setting)
+ {
+ ERROR_TRACE("Fail to alloc memory");
+ return -1;
+ }
+ memset(g_setting, 0x00, sizeof(mp_setting_t));
+
+ if (vconf_get_int(VCONFKEY_SETAPPL_MUSIC_MENU_VAL_INT, &(g_setting->menu_state)))
+ {
+ ERROR_TRACE("Fail to get %s", VCONFKEY_SETAPPL_MUSIC_MENU_VAL_INT);
+ ret = -1;
+ }
+ if(!ad->setting_idler)
+ ad->setting_idler = ecore_idler_add(_mp_setting_init_idler_cb, ad);
+ return ret;
+}
+
+
+int
+mp_setting_deinit(struct appdata *ad)
+{
+ mp_ecore_idler_del(ad->setting_idler);
+ mp_setting_key_cb_deinit();
+
+ if (c_file_path)
+ {
+ free(c_file_path);
+ c_file_path = NULL;
+ }
+
+ if (g_setting)
+ {
+ free(g_setting);
+ g_setting = NULL;
+ }
+
+ return 0;
+}
+
+int
+mp_setting_set_shuffle_state(int b_val)
+{
+ if (vconf_set_bool(MP_VCONFKEY_MUSIC_SHUFFLE, b_val))
+ {
+ WARN_TRACE("Fail to set MP_VCONFKEY_MUSIC_SHUFFLE");
+ return -1;
+ }
+
+ return 0;
+}
+
+int
+mp_setting_get_shuffle_state(int *b_val)
+{
+ if (vconf_get_bool(MP_VCONFKEY_MUSIC_SHUFFLE, b_val))
+ {
+ WARN_TRACE("Fail to get MP_VCONFKEY_MUSIC_SHUFFLE");
+
+ if (vconf_set_bool(MP_VCONFKEY_MUSIC_SHUFFLE, FALSE))
+ {
+ ERROR_TRACE("Fail to set MP_VCONFKEY_MUSIC_SHUFFLE");
+ return -1;
+ }
+ *b_val = FALSE;
+ }
+ return 0;
+}
+
+int
+mp_setting_set_repeat_state(int val)
+{
+ if (vconf_set_int(MP_VCONFKEY_MUSIC_REPEAT, val))
+ {
+ ERROR_TRACE("Fail to set MP_VCONFKEY_MUSIC_REPEAT");
+ return -1;
+ }
+
+ return 0;
+}
+
+int
+mp_setting_get_repeat_state(int *val)
+{
+ if (vconf_get_int(MP_VCONFKEY_MUSIC_REPEAT, val))
+ {
+ WARN_TRACE("Fail to get MP_VCONFKEY_MUSIC_REPEAT");
+ if (vconf_set_int(MP_VCONFKEY_MUSIC_REPEAT, MP_SETTING_REP_NON))
+ {
+ ERROR_TRACE("Fail to set MP_VCONFKEY_MUSIC_REPEAT");
+ return -1;
+ }
+ *val = MP_SETTING_REP_NON;
+ }
+
+ return 0;
+}
+
+
+int
+mp_setting_menu_get_state(mp_setting_menu_t * menu_state)
+{
+ mp_retvm_if(g_setting == NULL, -1, "setting data is not initialized, init first!!!!!");
+
+ if (menu_state == NULL)
+ return -1;
+
+ menu_state->albums = (g_setting->menu_state & SETTING_MUSIC_MENU_ALBUM ? true : false);
+ menu_state->artists = g_setting->menu_state & SETTING_MUSIC_MENU_ARTIST ? true : false;
+ menu_state->genres = g_setting->menu_state & SETTING_MUSIC_MENU_GENRE ? true : false;
+ menu_state->composers = g_setting->menu_state & SETTING_MUSIC_MENU_COMPOSER ? true : false;
+ menu_state->years = g_setting->menu_state & SETTING_MUSIC_MENU_YEAR ? true : false;
+
+ return 0;
+}
+
+int
+mp_setting_menu_set_callback(MpSettingMenu_Cb func, void *data)
+{
+ mp_retvm_if(g_setting == NULL, -1, "setting data is not initialized, init first!!!!!");
+
+ g_setting->menu_cb = func;
+ g_setting->menu_udata = data;
+
+ return 0;
+}
+
+void
+mp_setting_save_now_playing(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ FILE *fp;
+ music_list_item *item;
+
+ MP_CHECK(ad);
+ MP_CHECK(ad->playing_list);
+
+ item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK(item);
+
+ fp = fopen(MP_NOWPLAYING_INI_FILE_NAME, "w");
+
+ if (fp == NULL)
+ {
+ ERROR_TRACE("Failed to open ini files. : %s", MP_NOWPLAYING_INI_FILE_NAME);
+ return;
+ }
+ fprintf(fp, "%s\n", item->key_id);
+ fprintf(fp, "%s\n", item->filename);
+ fprintf(fp, "%s\n", item->title);
+ fprintf(fp, "%s\n", item->artist);
+ fprintf(fp, "%s\n", item->album);
+ fprintf(fp, "%s\n", item->albumart);
+ fprintf(fp, "\n");
+
+ fclose(fp);
+
+ endfunc;
+}
+
+void
+mp_setting_save_last_played(mp_layout_data_t * layout_data)
+{
+ struct appdata *ad;
+ FILE *fp = NULL;
+
+ if (layout_data)
+ {
+ ad = layout_data->ad;
+
+ MP_CHECK(ad);
+ MP_CHECK(ad->playing_list);
+ if (ad->loadtype != LOAD_PLAY)
+ {
+ fp = fopen(MP_RECENT_PLAYED_INI_FILE_NAME, "w");
+
+ if (fp == NULL)
+ {
+ ERROR_TRACE("Failed to open ini files. : %s", MP_RECENT_PLAYED_INI_FILE_NAME);
+ return;
+ }
+
+ fprintf(fp, "%d\n", layout_data->track_type);
+ fprintf(fp, "%d\n", layout_data->playlist_id);
+
+ if (layout_data->type_str)
+ fprintf(fp, "%s\n", layout_data->type_str);
+ else
+ fprintf(fp, "%s\n", "");
+
+ if (layout_data->filter_str)
+ fprintf(fp, "%s\n", layout_data->filter_str);
+ else
+ fprintf(fp, "%s\n", "");
+
+ fclose(fp);
+
+ }
+ }
+ else
+ {
+ if (ecore_file_exists(MP_RECENT_PLAYED_INI_FILE_NAME))
+ unlink(MP_RECENT_PLAYED_INI_FILE_NAME);
+ }
+
+}
diff --git a/src/core/mp-streaming-mgr.c b/src/core/mp-streaming-mgr.c
new file mode 100755
index 0000000..44e1da6
--- /dev/null
+++ b/src/core/mp-streaming-mgr.c
@@ -0,0 +1,250 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include "mp-streaming-mgr.h"
+#include "mp-http-mgr.h"
+#include "mp-player-debug.h"
+#include "mp-play.h"
+#include "mp-widget.h"
+#include "mp-player-mgr.h"
+#include "mp-util.h"
+
+static bool _mp_streaming_mgr_play_streaming_real(struct appdata *ad);
+
+static void
+_mp_streaming_mgr_utils_show_buffering_popup(void *data)
+{
+ DEBUG_TRACE("");
+ MP_CHECK(data);
+ struct appdata *ad = (struct appdata *)data;
+ if (ad->buffering_popup)
+ {
+ evas_object_del(ad->buffering_popup);
+ ad->buffering_popup = NULL;
+ }
+
+ Evas_Object *progressbar = NULL;
+ progressbar = elm_progressbar_add(ad->win_main);
+ elm_object_style_set(progressbar, "list_process");
+ evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+ evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_progressbar_pulse(progressbar, EINA_TRUE);
+ evas_object_show(progressbar);
+
+ if (ad->playing_view && ad->playing_view->play_view)
+ elm_object_part_content_set(ad->playing_view->play_view, "buffering_area", progressbar);
+
+ ad->buffering_popup = progressbar;
+}
+
+inline void
+mp_streaming_mgr_buffering_popup_control(struct appdata *ad, bool is_show)
+{
+ startfunc;
+
+ MP_CHECK(ad);
+
+ if (is_show)
+ {
+ mp_debug("show buffering popup");
+ /* show */
+ if (!ad->buffering_popup)
+ _mp_streaming_mgr_utils_show_buffering_popup(ad);
+ }
+ else
+ {
+ /* hide */
+ if (ad->buffering_popup)
+ {
+ evas_object_del(ad->buffering_popup);
+ ad->buffering_popup = NULL;
+ }
+ }
+}
+
+int
+mp_streaming_mgr_message_callback(int msg_type, void *msg_param, void *user_param)
+{
+ startfunc;
+ struct appdata *ad = user_param;
+ MMMessageParamType *param = (MMMessageParamType *) msg_param;
+
+ int ret = TRUE;
+
+ switch (msg_type)
+ {
+ case MM_MESSAGE_ERROR:
+ DEBUG_TRACE("receive MM_MESSAGE_ERROR(Streaming) \n");
+ DEBUG_TRACE("Error Code=%x\n", param->code);
+ switch (param->code)
+ {
+ case MM_ERROR_PLAYER_STREAMING_CONNECTION_FAIL:
+ mp_debug("MM_ERROR_PLAYER_STREAMING_CONNECTION_FAIL");
+ mp_streaming_mgr_buffering_popup_control(ad, FALSE);
+ mp_widget_text_popup(ad, GET_SYS_STR("IDS_COM_POP_CONNECTION_FAILED"));
+ break;
+
+ case MM_ERROR_PLAYER_STREAMING_SERVER_DISCONNECTED:
+ mp_debug("MM_ERROR_PLAYER_STREAMING_SERVER_DISCONNECTED");
+ mp_widget_text_popup(ad, GET_SYS_STR("IDS_COM_POP_CONNECTION_FAILED"));
+ break;
+
+ default:
+ mp_debug("Unhandled error!!");
+ ret = FALSE;
+ }
+ break;
+
+ case MM_MESSAGE_CONNECTING:
+ mp_debug("MM_MESSAGE_CONNECTING");
+ break;
+
+ case MM_MESSAGE_CONNECTED:
+ mp_debug("MM_MESSAGE_CONNECTED");
+ break;
+
+ case MM_MESSAGE_CONNECTION_TIMEOUT:
+ mp_debug("MM_MESSAGE_CONNECTION_TIMEOUT");
+ break;
+
+ case MM_MESSAGE_BUFFERING:
+ {
+ mp_debug("MM_MESSAGE_BUFFERING");
+ mp_debug("Buffering : %d%% \n", param->connection.buffering);
+
+ bool is_show_buffering = true;
+ if (param->connection.buffering > 95 || ad->player_state == PLAY_STATE_PLAYING)
+ is_show_buffering = false;
+
+ mp_streaming_mgr_buffering_popup_control(ad, is_show_buffering);
+ }
+ break;
+
+ case MM_MESSAGE_RTP_SENDER_REPORT:
+ mp_debug("MM_MESSAGE_RTP_SENDER_REPORT");
+ break;
+
+ case MM_MESSAGE_RTP_RECEIVER_REPORT: /**< RTP receiver report */
+ mp_debug("MM_MESSAGE_RTP_RECEIVER_REPORT");
+ break;
+
+ case MM_MESSAGE_RTP_SESSION_STATUS: /**< RTP session status */
+ mp_debug("MM_MESSAGE_RTP_SESSION_STATUS");
+ break;
+
+ case MM_MESSAGE_SENDER_STATE: /**< Sender state */
+ mp_debug("MM_MESSAGE_SENDER_STATE");
+ break;
+
+ case MM_MESSAGE_RECEIVER_STATE: /**< Receiver state */
+ mp_debug("MM_MESSAGE_RECEIVER_STATE");
+ break;
+
+ default:
+ mp_debug("@@@@@@@@ streaming msg cb [%d]", msg_type);
+ ret = FALSE;
+ break;
+ }
+
+ return ret;
+}
+
+bool mp_streaming_mgr_check_streaming(struct appdata *ad, const char *path)
+{
+ MP_CHECK_FALSE(path);
+
+ if (!mp_check_file_exist(path) && mp_util_check_uri_available(path)) {
+ mp_debug("streaming....");
+ return TRUE;
+ }
+
+ return FALSE;
+}
+
+bool mp_streaming_mgr_set_attribute(struct appdata *ad, MMHandleType player)
+{
+ startfunc;
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(player);
+
+ int ret = 0;
+ char *g_err_name = NULL;
+
+ const char *proxy_addr = NULL;
+ proxy_addr = mp_http_mgr_get_proxy(ad);
+ if (proxy_addr && strlen(proxy_addr) > 0) {
+ ret = mm_player_set_attribute(player, &g_err_name,
+ "streaming_proxy", proxy_addr, strlen(proxy_addr), NULL);
+ if (ret != MM_ERROR_NONE) {
+ ERROR_TRACE(">>>>>>>>>>>>>g_err_name : %s\n", g_err_name);
+ SAFE_FREE(g_err_name);
+ return FALSE;
+ }
+ }
+
+ char *user_agent = mp_http_mgr_get_user_agent();
+ if (user_agent) {
+ if (strlen(user_agent) > 0) {
+ mp_debug("UA = [%s]", user_agent);
+ ret = mm_player_set_attribute(player, &g_err_name,
+ "streaming_user_agent", user_agent, strlen(user_agent),
+ NULL);
+ if (ret != MM_ERROR_NONE) {
+ ERROR_TRACE(">>>>>>>>>>>>>g_err_name : %s\n", g_err_name);
+ SAFE_FREE(g_err_name);
+ SAFE_FREE(user_agent);
+ return FALSE;
+ }
+ }
+ SAFE_FREE(user_agent);
+ }
+
+ return TRUE;
+}
+
+bool mp_streaming_mgr_play_new_streaming(struct appdata *ad)
+{
+ startfunc;
+ MP_CHECK_FALSE(ad);
+
+ bool ret = FALSE;
+ MpHttpState_t state = mp_http_mgr_get_state(ad);
+ if ( state == MP_HTTP_STATE_OFF) {
+ mp_widget_text_popup(ad, GET_SYS_STR("IDS_COM_POP_CONNECTION_FAILED"));
+ return FALSE;
+ }
+ else { /* connected */
+ mp_streaming_mgr_buffering_popup_control(ad, TRUE);
+ ret = _mp_streaming_mgr_play_streaming_real(ad);
+ }
+
+ if (ret)
+ mp_streaming_mgr_buffering_popup_control(ad, FALSE);
+
+ return ret;
+}
+
+static bool _mp_streaming_mgr_play_streaming_real(struct appdata *ad)
+{
+ startfunc;
+ MP_CHECK_FALSE(ad);
+
+ return mp_play_new_file_real(ad, TRUE);
+}
+
diff --git a/src/include/mp-define.h b/src/include/mp-define.h
new file mode 100755
index 0000000..9a61c05
--- /dev/null
+++ b/src/include/mp-define.h
@@ -0,0 +1,282 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_DEFINE_H_
+#define __MP_DEFINE_H_
+
+#include <Elementary.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <glib.h>
+#include <vconf.h>
+#include <audio-svc.h>
+#include <Ecore_IMF.h>
+#include <Ecore_X.h>
+#include <E_DBus.h>
+#include <appcore-efl.h>
+#include <Edje.h>
+#include <errno.h>
+#include <libintl.h>
+#include <mm_error.h>
+#include <mm_player.h>
+#include <libxml/tree.h>
+#include <libxml/parser.h>
+#include <libxml/xpath.h>
+#include <libxml/xpathInternals.h>
+#include <sys/times.h>
+
+#include "mp-player-debug.h"
+
+#ifndef bool
+#define bool Eina_Bool
+#endif
+
+#define GET_SYS_STR(str) dgettext("sys_string", str)
+#define GET_STR(str) _(str)
+
+#ifndef PREFIX
+# define PREFIX "/opt/apps/org.tizen.music-player"
+#endif
+
+#define PACKAGE "music-player"
+#define INSTALL_DIR PREFIX
+#ifndef LOCALEDIR
+#define LOCALEDIR INSTALL_DIR"/res/locale"
+#endif
+
+#ifndef MP_INI_DIR
+#define MP_INI_DIR INSTALL_DIR"/data"
+#endif
+
+#ifndef EDJDIR
+#define EDJDIR PREFIX"res/edj"
+#endif
+
+#define EDJ_PATH EDJDIR
+#define EDJ_NAME EDJ_PATH"/mp-library.edj"
+#define GRP_MAIN "main"
+
+#define THEME_NAME EDJ_PATH"/mp-custom-winset-style.edj"
+
+#define TITLE_H 90
+
+#define MP_PHONE_ROOT_PATH "/opt/media"
+#define MP_MMC_ROOT_PATH "/opt/storage/sdcard"
+
+#ifdef PATH_MAX
+# define MAX_NAM_LEN PATH_MAX
+#else
+# define MAX_NAM_LEN 4096
+#endif
+
+
+#ifndef FALSE
+#define FALSE 0
+#endif
+#ifndef TRUE
+#define TRUE 1
+#endif
+
+#define SIGNAL_MAIN_MUTE_SHOW "signal.main.mute.show"
+#define SIGNAL_MAIN_MUTE_HIDE "signal.main.mute.hide"
+
+#define CHECK(x) if(!x) ERROR_TRACE("RETURN NULL!!\n", x);
+#define SAFE_FREE(x) if(x) {free(x); x = NULL;}
+
+#define ICON_DIRECTORY RESDIR"/icons"
+#define MAX_STR_LEN MAX_NAM_LEN
+#define MAX_URL_LEN MAX_NAM_LEN
+
+#define DEFAULT_THUMBNAIL ICON_DIRECTORY"/music_player/34_thumb_07.png"
+
+#define THUMBNAIL_MOST_PLAYED ICON_DIRECTORY"/music_player/34_mostplayed.png"
+#define THUMBNAIL_RECENTLY_PLAYED ICON_DIRECTORY"/music_player/34_recentlyplayed.png"
+#define THUMBNAIL_RECENTLY_ADDED ICON_DIRECTORY"/music_player/34_recentlyadded.png"
+#define THUMBNAIL_QUICK_LIST ICON_DIRECTORY"/music_player/34_quicklist.png"
+#define THUMBNAIL_PLAYLIST ICON_DIRECTORY"/music_player/34_playlist.png"
+#define THUMBNAIL_PLAYLIST_NOITEM ICON_DIRECTORY"/music_player/34_player_list_thum_noitems.png"
+
+#define MP_CTRBAR_ICON_SONGS ICON_DIRECTORY"/music_player/01_controlbar_icon_songs.png"
+#define MP_CTRBAR_ICON_PLAYLIST ICON_DIRECTORY"/music_player/01_controlbar_icon_playlists.png"
+#define MP_CTRBAR_ICON_ALBUM ICON_DIRECTORY"/music_player/01_controlbar_icon_music_albums.png"
+#define MP_CTRBAR_ICON_ARTIST ICON_DIRECTORY"/music_player/01_controlbar_icon_artist.png"
+#define MP_CTRBAR_ICON_GENRE ICON_DIRECTORY"/music_player/01_controlbar_icon_genre.png"
+#define MP_CTRBAR_ICON_YEAR ICON_DIRECTORY"/music_player/01_controlbar_icon_year.png"
+#define MP_CTRBAR_ICON_COMPOSER ICON_DIRECTORY"/music_player/01_controlbar_icon_composer.png"
+#define MP_CTRBAR_ICON_FOLDER ICON_DIRECTORY"/music_player/01_controlbar_icon_albums.png"
+
+
+#define MP_ICON_NAVI_EDIT ICON_DIRECTORY"/music_player/T02_controlbar_icon_edit.png"
+#define MP_ICON_NAVI_SEARCH ICON_DIRECTORY"/music_player/T02_controlbar_icon_search.png"
+#define MP_ICON_NAVI_CANCEL ICON_DIRECTORY"/music_player/T02_controlbar_icon_cancel.png"
+#define MP_ICON_NAVI_DONE NULL
+#define MP_ICON_NAVI_INFO NULL
+#define MP_ICON_NAVI_DELETE ICON_DIRECTORY"/music_player/T02_controlbar_icon_delete.png"
+#define MP_ICON_NAVI_ADD_TO_PLST ICON_DIRECTORY"/music_player/T02_controlbar_icon_add_to_playlist.png"
+#define MP_ICON_NAVI_NEW ICON_DIRECTORY"/music_player/T02_controlbar_icon_add.png"
+
+#define MP_ICON_SOUND_PATH ICON_DIRECTORY"/music_player/T02_icon_soundPath.png"
+
+#define MP_ICON_BG ICON_DIRECTORY"/music_player/12_music_list_bg.png"
+
+#define PLAY_VIEW_EDJ_NAME EDJ_PATH"/music.edj"
+
+#define SIGNAL_PAUSE "pause_clicked"
+#define SIGNAL_PLAY "play_clicked"
+#define SIGNAL_VOLUME "play_volume_clicked"
+#define SIGNAL_ALBUMART_CLICKED "album_art_clicked"
+#define SIGNAL_ALBUMART_UP "album_art_up"
+#define SIGNAL_ALBUMART_DOWN "album_art_down"
+#define SIGNAL_ALBUMART_MOVE "album_art_move"
+#define SIGNAL_INFO "play_info_clicked"
+#define SIGNAL_SHUFFLE "shuffle_clicked"
+#define SIGNAL_SHUFNON "shuffle_non_clicked"
+#define SIGNAL_REPALL "rep_all_clicked"
+#define SIGNAL_REPNON "rep_non_clicked"
+#define SIGNAL_REP1 "rep_1_clicked"
+#define SIGNAL_AUTOREP "auto_rep_clicked"
+#define SIGNAL_MAINALBUM_CLICKED "main_albumart_clicked"
+#define SIGNAL_FAVORITE_CLICKED "favorite_clicked"
+#define SIGNAL_NOW_PLAYING_CLICKED "now_playing_clicked"
+
+#define MP_FAST_SCROLLER_TYPE "mp_data_fast_scroller_type"
+
+#define MP_POPUP_YES 1
+#define MP_POPUP_NO 0
+#define MP_POPUP_DEL -1
+
+#define MP_YEAR_S "%03u0s"
+
+#define PLAY_TIME_ARGS(t) \
+ (((int)t) / 60) % 60, \
+ ((int)t) % 60
+#define PLAY_TIME_FORMAT "02u:%02u"
+
+#define MUSIC_TIME_ARGS(t) \
+ ((int)t) / (3600), \
+ (((int)t) / 60) % 60, \
+ ((int)t) % 60
+#define MUSIC_TIME_FORMAT "02u:%02u:%02u"
+
+#undef IF_FREE
+#define IF_FREE(ptr) if (ptr) {free(ptr); ptr = NULL;}
+
+
+#define mp_evas_object_del(object) do { \
+ if(object) { \
+ evas_object_del(object); \
+ object = NULL; \
+ } \
+} while (0)
+
+#define mp_ecore_timer_del(timer) do { \
+ if(timer) { \
+ ecore_timer_del(timer);\
+ timer = NULL; \
+ } \
+} while (0)
+
+#define mp_ecore_idler_del(idler) do { \
+ if(idler) { \
+ ecore_idler_del(idler);\
+ idler = NULL; \
+ } \
+} while (0)
+
+
+#define SAFE_STRCPY(dest, src) \
+ do{if(!dest||!src)break;\
+ strncpy (dest , src, sizeof(dest)-1);\
+ dest[sizeof(dest)-1] = 0; }while(0)
+
+typedef enum
+{
+ MP_SND_PATH_BT,
+ MP_SND_PATH_EARPHONE,
+ MP_SND_PATH_SPEAKER,
+ MP_SND_PATH_MAX,
+} mp_snd_path;
+
+#define MP_GENLIST_CHECK_FOREACH_SAFE(first, current, next, data) \
+ for (current = first, \
+ next = elm_genlist_item_next_get(current), \
+ data = elm_object_item_data_get(current); \
+ current; \
+ current = next, \
+ next = elm_genlist_item_next_get(current), \
+ data = elm_object_item_data_get(current))
+
+#define MP_PLAYLIST_MAX_ITEM_COUNT 1000
+#define MP_NOW_PLAYING_ICON_SIZE 48 * elm_scale_get()
+#define MP_LIST_ICON_SIZE 70 * elm_scale_get()
+#define MP_ALBUM_LIST_ICON_SIZE 48 * elm_scale_get()
+#define MP_PLAY_VIEW_ARTWORK_SIZE 480 * elm_scale_get()
+
+#define MP_NOWPLAYING_INI_FILE_NAME MP_INI_DIR"/now_playing.ini"
+#define MP_RECENT_PLAYED_INI_FILE_NAME MP_INI_DIR"/recent_played.ini"
+
+#define SINGLE_BYTE_MAX 0x7F
+
+typedef enum
+{
+ MP_UG_MESSAGE_BACK,
+ MP_UG_MESSAGE_DEL,
+ MP_UG_MESSAGE_LOAD,
+}mp_ug_message_t;
+
+#define MP_LIVE_VCONF_PREFIX "memory/music/"
+
+#define MP_EXT_PLAY_STATE VCONFKEY_MUSIC_STATE
+#define MP_EXT_CUR_POS MP_LIVE_VCONF_PREFIX"pos" //str
+#define MP_EXT_CUR_PROGRESS_POS MP_LIVE_VCONF_PREFIX"progress_pos" //double
+
+#define MP_EXT_PLAY_CLICKED MP_LIVE_VCONF_PREFIX"play_clicked" //bool
+#define MP_EXT_PAUSE_CLICKED MP_LIVE_VCONF_PREFIX"pause_clicked" //bool
+#define MP_EXT_PREV_PRESSED MP_LIVE_VCONF_PREFIX"prev_pressed" //bool
+#define MP_EXT_PREV_RELEASED MP_LIVE_VCONF_PREFIX"prev_released" //bool
+#define MP_EXT_NEXT_PRESSED MP_LIVE_VCONF_PREFIX"next_pressed" //bool
+#define MP_EXT_NEXT_RELEASED MP_LIVE_VCONF_PREFIX"next_released" //bool
+
+#define MP_POPUP_GENLIST_ITEM_H 112
+#define MP_POPUP_GENLIST_ITEM_H_MAX 408
+#define MP_POPUP_GENLIST_ITEM_W 610
+
+#define MP_B_PATH "path"
+#define MP_MM_KEY "multimedia_key"
+#define MP_PLAY_RECENT "play_recent"
+#define MP_PLAY_PLAYLIST "play_playlist"
+#define MP_PLAY_ARTIST "play_artist"
+#define MP_PLAY_ALBUM "play_album"
+#define MP_PLAY_GENRE "play_genre"
+#define MP_PLAY_SOMETHING "play_music"
+
+#define ELM_NAVIFRAME_ITEM_CONTENT "default"
+#define ELM_NAVIFRAME_ITEM_ICON "icon"
+#define ELM_NAVIFRAME_ITEM_OPTIONHEADER "optionheader"
+#define ELM_NAVIFRAME_ITEM_TITLE_LABEL "title"
+#define ELM_NAVIFRAME_ITEM_PREV_BTN "prev_btn"
+#define ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN "title_left_btn"
+#define ELM_NAVIFRAME_ITEM_TITLE_RIGHT_BTN "title_right_btn"
+#define ELM_NAVIFRAME_ITEM_TITLE_MORE_BTN "title_more_btn"
+#define ELM_NAVIFRAME_ITEM_CONTROLBAR "controlbar"
+#define ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_CLOSE "elm,state,optionheader,close", ""
+#define ELM_NAVIFRAME_ITEM_SIGNAL_OPTIONHEADER_OPEN "elm,state,optionheader,open", ""
+
+#endif /* __MP_DEFINE_H_ */
diff --git a/src/include/mp-player-debug.h b/src/include/mp-player-debug.h
new file mode 100755
index 0000000..4146c4e
--- /dev/null
+++ b/src/include/mp-player-debug.h
@@ -0,0 +1,143 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_PLAYER_DEBUG_H_
+#define __MP_PLAYER_DEBUG_H_
+
+
+#include <stdio.h>
+#include <unistd.h>
+#include "assert.h"
+#include <linux/unistd.h>
+
+#define ENABLE_CHECK_START_END_FUNCTION
+#define ENABLE_LOG_SYSTEM
+
+#ifdef ENABLE_LOG_SYSTEM
+
+#define USE_DLOG_SYSTEM
+
+#define gettid() syscall(__NR_gettid)
+
+#ifdef USE_DLOG_SYSTEM
+#include <dlog.h>
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif //LOG_TAG
+
+#define LOG_TAG "MUSIC"
+
+
+#define mp_debug(fmt, arg...) LOGD("[TID:%d][ %s : %d] "fmt"\n", gettid(), __FUNCTION__, __LINE__,##arg)
+#define mp_error(fmt, arg...) LOGE("[TID:%d]########### ERROR CHECK ############# [ %s : %d] "fmt"\n", gettid(), __FUNCTION__, __LINE__,##arg)
+
+#define DEBUG_TRACE(fmt, arg...) LOGD("[TID:%d][ %s : %d] "fmt"\n", gettid(), __FUNCTION__, __LINE__,##arg)
+#define INFO_TRACE(fmt, arg...) LOGI("[TID:%d][ %s : %d] "fmt"\n", gettid(), __FUNCTION__, __LINE__,##arg)
+#define WARN_TRACE(fmt, arg...) LOGW("[TID:%d][ %s : %d] "fmt"\n", gettid(), __FUNCTION__, __LINE__,##arg)
+#define ERROR_TRACE(fmt, arg...) LOGE("[TID:%d][ %s : %d] "fmt"\n", gettid(), __FUNCTION__, __LINE__,##arg)
+#define mp_debug_temp(fmt, arg...) LOGD("[TID:%d][Temp debug %s : %d] "fmt"\n", gettid(), __FUNCTION__, __LINE__,##arg)
+
+#else // use USE_DLOG_SYSTEM
+
+
+
+#define mp_debug(fmt, arg...) do{fprintf(stderr, "[%s : %s-%d]\t - \n", __FILE__, __func__, __LINE__);\
+ fprintf (stderr, __VA_ARGS__);}while(0)
+
+#define DEBUG_TRACE(fmt, arg...) do{fprintf(stderr, "[%s : %s-%d]\t - \n", __FILE__, __func__, __LINE__);\
+ fprintf (stderr, __VA_ARGS__);}while(0)
+#define INFO_TRACE(fmt, arg...) do{fprintf(stderr, "[%s : %s-%d]\t - \n", __FILE__, __func__, __LINE__);\
+ fprintf (stderr, __VA_ARGS__);}while(0)
+#define WARN_TRACE(fmt, arg...) do{fprintf(stderr, "[%s : %s-%d]\t - \n", __FILE__, __func__, __LINE__);\
+ fprintf (stderr, __VA_ARGS__);}while(0)
+#define ERROR_TRACE(fmt, arg...) do{fprintf(stderr, "[%s : %s-%d]\t - \n", __FILE__, __func__, __LINE__);\
+ fprintf (stderr, __VA_ARGS__);}while(0)
+#define mp_debug_temp(fmt, arg...) do{fprintf(stderr, "[%s : %s-%d]\t - \n", __FILE__, __func__, __LINE__);\
+ fprintf (stderr, __VA_ARGS__);}while(0)
+#endif //USE_DLOG_SYSTEM
+
+#define DEBUG_TRACE_FUNC() DEBUG_TRACE("")
+
+#else //ENABLE_LOG_SYSTEM
+#define mp_debug(fmt, arg...)
+#define DEBUG_TRACE(fmt, arg...)
+#define INFO_TRACE(fmt, arg...)
+#define WARN_TRACE(fmt, arg...)
+#define ERROR_TRACE(fmt, arg...)
+#define mp_debug_temp(fmt, arg...)
+#endif //ENABLE_LOG_SYSTEM
+
+#ifdef ENABLE_CHECK_START_END_FUNCTION
+#define startfunc DEBUG_TRACE("+- START -------------------------");
+#define endfunc DEBUG_TRACE("+- END --------------------------");
+#define exceptionfunc ERROR_TRACE("################################# CRITICAL ERROR #####################################");
+#else
+#define startfunc
+#define endfunc
+#define exceptionfunc
+#endif
+
+#define mp_ret_if(expr) do { \
+ if(expr) { \
+ WARN_TRACE("");\
+ return; \
+ } \
+} while (0)
+#define mp_retv_if(expr, val) do { \
+ if(expr) { \
+ WARN_TRACE("");\
+ return (val); \
+ } \
+} while (0)
+
+#define mp_retm_if(expr, fmt, arg...) do { \
+ if(expr) { \
+ WARN_TRACE(fmt, ##arg); \
+ return; \
+ } \
+} while (0)
+
+#define mp_retvm_if(expr, val, fmt, arg...) do { \
+ if(expr) { \
+ WARN_TRACE(fmt, ##arg); \
+ return (val); \
+ } \
+} while (0)
+
+#define MP_CHECK_EXCEP(expr) do { \
+ if(!(expr)) { \
+ ERROR_TRACE("CRITICAL ERROR ########################################## CHECK BELOW ITEM");\
+ goto mp_exception;\
+ } \
+} while (0)
+
+#define MP_CHECK_VAL(expr, val) mp_retvm_if(!(expr),val,"INVALID PARM RETURN NULL")
+#define MP_CHECK_NULL(expr) mp_retvm_if(!(expr),NULL,"INVALID PARM RETURN NULL")
+#define MP_CHECK_FALSE(expr) mp_retvm_if(!(expr),FALSE,"INVALID PARM RETURN FALSE")
+#define MP_CHECK_CANCEL(expr) mp_retvm_if(!(expr), ECORE_CALLBACK_CANCEL, "INVALID PARAM RETURN")
+#define MP_CHECK(expr) mp_retm_if(!(expr),"INVALID PARAM RETURN")
+
+#define mp_assert(expr) do { \
+ if(!(expr)) { \
+ ERROR_TRACE("CRITICAL ERROR ########################################## CHECK BELOW ITEM");\
+ assert(FALSE); \
+ } \
+} while (0)
+
+
+#endif // __MP_PLAYER_DEBUG_H_
diff --git a/src/include/mp-setting-keys.h b/src/include/mp-setting-keys.h
new file mode 100755
index 0000000..33fb6ae
--- /dev/null
+++ b/src/include/mp-setting-keys.h
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __mp_setting_keys_H__
+#define __mp_setting_keys_H__
+
+#ifndef VCONFKEY_SETAPPL_MUSIC_MENU_VAL_INT
+enum
+{
+ SETTING_MUSIC_MENU_ALBUM = 0x0001,
+ SETTING_MUSIC_MENU_ARTIST = 0x0002,
+ SETTING_MUSIC_MENU_GENRE = 0x0004,
+ SETTING_MUSIC_MENU_COMPOSER = 0x0008,
+ SETTING_MUSIC_MENU_YEAR = 0x0010,
+};
+#define VCONFKEY_SETAPPL_MUSIC_MENU_VAL_INT "db/setting/music-player/menu"
+#endif
+
+#define VCONFKEY_MUSIC_MENU_CHANGE "db/setting/music-player/menu_change"
+
+#endif //__mp_setting_keys_H__
diff --git a/src/include/music.h b/src/include/music.h
new file mode 100755
index 0000000..997c351
--- /dev/null
+++ b/src/include/music.h
@@ -0,0 +1,346 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __DEF_music_H_
+#define __DEF_music_H_
+
+#include <Elementary.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <stdbool.h>
+#include <unistd.h>
+#include <glib.h>
+#include <vconf.h>
+#include <audio-svc.h>
+#include <audio-svc-error.h>
+#include <audio-svc-types.h>
+#include <Ecore_IMF.h>
+#include <Ecore_X.h>
+#include <appcore-efl.h>
+#include <Edje.h>
+#include <errno.h>
+#include <libintl.h>
+
+#include <mm_error.h>
+#include <mm_player.h>
+#include <sys/times.h>
+
+#include "mp-player-debug.h"
+#include "mp-player-drm.h"
+#include "mp-define.h"
+#include "mp-play-list.h"
+#include "mp-http-mgr.h"
+
+typedef struct
+{
+
+ /* controlbar tab item */
+ Elm_Object_Item *ctltab_songs;
+ Elm_Object_Item *ctltab_plist;
+ Elm_Object_Item *ctltab_album;
+ Elm_Object_Item *ctltab_artist;
+ Elm_Object_Item *ctltab_genres;
+ Elm_Object_Item *ctltab_year;
+ Elm_Object_Item *ctltab_composer;
+
+ /* navi bar */
+ Evas_Object *cur_view; //navibar of current view
+
+ //relative to music setting
+ int albums;
+ int artists;
+ int genres;
+ int composers;
+ int years;
+} mp_library;
+
+
+typedef enum
+{
+ MP_VIEW_MODE_DEFAULT,
+ MP_VIEW_MODE_EDIT,
+ MP_VIEW_MODE_SEARCH,
+} mp_view_mode_t;
+
+typedef enum
+{
+ MP_VIEW_TYPE_SONGS,
+ MP_VIEW_TYPE_PLAYLIST,
+ MP_VIEW_TYPE_ALBUM,
+ MP_VIEW_TYPE_GENRE,
+ MP_VIEW_TYPE_ARTIST,
+ MP_VIEW_TYPE_YEAR,
+ MP_VIEW_TYPE_COMPOSER,
+ MP_VIEW_TYPE_PLAYVIEW,
+ MP_VIEW_TYPE_MAX,
+} mp_view_type_t;
+
+
+
+#define MP_VIEW_DATA_MAGIC 0x801211aa
+#define MP_SET_VIEW_DATA_MAGIC(view_data) ((view_data_t *)view_data)->magic = MP_VIEW_DATA_MAGIC
+#define MP_CHECK_VIEW_DATA(view_data) \
+do { \
+ if (((view_data_t *)view_data)->magic != MP_VIEW_DATA_MAGIC) { \
+ ERROR_TRACE("\n########### ERROR CHECK #############\nPARAM is not view_data\n########### ERROR CHECK #############\n"); \
+ mp_assert(FALSE);} \
+} while (0)
+
+typedef struct
+{
+ int magic;
+ Evas_Object *navibar;
+ mp_view_type_t view_type;
+ struct appdata *ad; //appdata
+} view_data_t;
+
+typedef struct
+{
+ //EDJ Layout
+ Evas_Object *layout;
+ Evas_Object *content;
+ Evas_Object *play_view;
+ Evas_Object *play_control;
+ Evas_Object *play_menu; //information, srs, shuffle, repeat
+ Evas_Object *play_info;
+ Evas_Object *play_progressbar;
+ Evas_Object *play_ctrl; //progress bar and index, track name
+ Evas_Object *play_title;
+ Evas_Object *albumart_bg;
+
+ int flick_direction; //1 for right, 2 for left, other for invalid
+ int albumart_width;
+ int albumart_height;
+
+ Evas_Object *play_view_next;
+ char music_play_time_text[16];
+ Ecore_Timer *progressbar_timer;
+ Ecore_Timer *show_ctrl_timer;
+
+ bool transition_state;
+
+ struct music_list_item *playing_list_item;
+ Evas_Object *play_icon;
+
+ bool paused_by_progressbar;
+
+ struct appdata *ad;
+} mp_playing_view;
+
+enum
+{
+ MP_CREATE_PLAYLIST_MODE_NONE,
+ MP_CREATE_PLAYLIST_MODE_NEW,
+ MP_CREATE_PLAYLIST_MODE_WITHMUSICS,
+ MP_CREATE_PLAYLIST_MODE_SAVEAS,
+ MP_CREATE_PLAYLIST_MODE_SWEEP
+};
+
+typedef struct
+{
+ AudioHandleType *plst;
+ Elm_Object_Item *item;
+ void *data;
+} mp_playlist_item_t;
+
+typedef enum
+{
+ MP_LAUNCH_DEFAULT = 0,
+ MP_LAUNCH_PATH,
+ MP_LAUNCH_PLAY_RECENT,
+ MP_LAUNCH_PLAY_GROUP,
+ MP_LAUNCH_PLAY_PLAYLIST,
+ MP_LAUNCH_PLAY_SOMETHING,
+
+} mp_launch_type;
+
+typedef enum
+{
+ LOAD_DEFAULT,
+ LOAD_TRACK, //load by path
+ LOAD_GROUP,
+ LOAD_PLAYLIST,
+ LOAD_PLAY,
+ LOAD_MM_KEY,
+
+} mp_load_type;
+
+typedef enum
+{
+ MP_POPUP_NORAML = 0,
+ MP_POPUP_GENLIST,
+ MP_POPUP_CTX,
+ MP_POPUP_PROGRESS,
+ MP_POPUP_MAX,
+} mp_popup_type;
+
+typedef enum
+{
+ PLAY_STATE_INIT,
+ PLAY_STATE_READY,
+ PLAY_STATE_PLAYING,
+ PLAY_STATE_PAUSED,
+ PLAY_STATE_STOP
+} mp_player_state;
+
+typedef enum
+{
+ PLAY_REP_ALL,
+ PLAY_REP_NON,
+ PLAY_REP_1
+} mp_player_rep_state;
+
+
+struct appdata
+{
+
+ Evas *evas;
+ Evas_Object *win_main;
+ Evas_Object *bg;
+ Evas_Object *popup[MP_POPUP_MAX];
+
+ Ecore_X_Window xwin;
+
+ /* Layout for each view */
+ Evas_Object *base_layout_main; //layout for transparent indicator area
+ Evas_Object *controlbar_layout; //layout for show hide controlbar.
+
+ bool show_optional_menu;
+ double music_pos;
+ double music_length;
+ Ecore_Timer *progressbar_timer;
+
+ mp_playing_view *playing_view;
+
+
+ // for Plalying Control
+ mp_player_rep_state play_rep_state; //repeat_all, repeat_non, repeat_1
+ bool play_shuffle_state; //shuffle on/off
+ bool can_play_drm_contents;
+ bool show_now_playing;
+
+ mp_player_state player_state;
+
+ mp_drm drm_info;
+ char * latest_playing_key_id;
+ mp_play_list *playing_list;
+
+ mp_launch_type launch_type;
+ mp_load_type loadtype;
+ audio_svc_track_type_e track_type;
+ audio_svc_group_type_e group_type;
+
+ char *request_group_name;
+ char *request_playing_path;
+ audio_svc_group_type_e request_group_type;
+ int request_play_id;
+ //update default view layout if this flag set. set true when album/artist/genre short cut pressed.
+
+ Ecore_IMF_Context *imf_context;
+ mp_library *library;
+
+ Evas_Object *ctrl_bar;
+
+ Evas_Object *editfiled_new_playlist;
+ Evas_Object *editfiled_entry;
+ char *new_playlist_name;
+
+ bool b_add_tracks;
+
+ int new_playlist_id;
+
+ Evas_Object *radio_group;
+ Evas_Object *notify;
+ Evas_Object *notify_layout;
+
+ Evas_Object *popup_delete;
+ Evas_Object *notify_delete;
+
+ bool b_search_mode;
+ Evas_Object *isf_entry;
+ Evas_Object *editfield;
+
+ bool freeze_indicator_icon; //set it true to prevent flickering play icon of indicator.
+
+ int ear_key_press_cnt;
+ Ecore_Timer *ear_key_timer;
+
+ //scale factor for scalable UI..
+ double scale; //scale factor;
+
+ GList *view_history;
+ Ecore_Pipe *inotify_pipe;
+
+ void *layout_data;
+ AudioHandleType *group_item_handler;
+ char *fid;
+
+ bool paused_by_user;
+
+ mp_http_mgr_t *http_mgr; //http mgr
+
+ bool navi_effect_in_progress; //Use this not to excute button callbacks while transition effect
+ bool prohibit_aul_relaunch; //aul relaunch only available when music is in pause state
+ bool is_focus_out;
+
+ mp_snd_path snd_path; //indicate sound path;
+
+ Ecore_Event_Handler *key_down;
+ Ecore_Event_Handler *focus_in;
+ Ecore_Event_Handler *focus_out;
+ Ecore_Event_Handler *visibility_change;
+ Ecore_Event_Handler *client_msg;
+
+ Evas_Object *buffering_popup;
+
+ bool edit_in_progress; //don't update view in inotify callback while delete operation.
+
+ Ecore_Timer *volume_down_timer;
+ Ecore_Timer *mute_popup_show_timer; //timer for showing mute popup
+ bool volume_long_pressed;
+ bool mute_flag; //flag for mute
+
+ double ff_rew; //for ff and rew when there is no play view
+
+ bool music_setting_change_flag; //true for change music setting data, false for not
+
+ bool load_play_view; /*set it true if play view must be displayed directly when app is launching*/
+
+ bool is_Longpress;
+ bool is_ff;
+
+ Ecore_Idler *playing_err_idler;
+ Ecore_Idler *bt_pause_idler;
+ Ecore_Idler *setting_idler;
+ Ecore_Idler *app_init_idler;
+
+ Ecore_Timer *longpress_timer;
+ Ecore_Timer *live_pos_timer;
+ bool seek_off;
+
+ int haptic_handle;
+ Ecore_Timer *vib_timer;
+ Ecore_Pipe *player_msg_pipe;
+
+ Ecore_Animator *minfo_ani;
+ GList *minfo_list;
+ Evas_Object *minfo_genlist;
+
+ MediaSvcHandle *media_svc_handle;
+};
+
+#endif /* __DEF_music_H__ */
diff --git a/src/mp-main.c b/src/mp-main.c
new file mode 100755
index 0000000..5742650
--- /dev/null
+++ b/src/mp-main.c
@@ -0,0 +1,578 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include "mp-library.h"
+#include "mp-widget.h"
+#include "mp-util.h"
+#include "mp-setting-ctrl.h"
+#include "mp-item.h"
+#include "mp-player-control.h"
+#include "mp-play-view.h"
+#include "mp-http-mgr.h"
+#include "mp-common.h"
+#include "mp-play-list.h"
+#include "mp-view-manager.h"
+#include "mp-popup.h"
+
+#include <signal.h>
+#include <aul.h>
+#include <glib.h>
+#include <glib-object.h>
+#include "mp-player-mgr.h"
+#include "mp-player-debug.h"
+#include <utilX.h>
+#include <syspopup_caller.h>
+#include <media-svc.h>
+#include "mp-app.h"
+#include "mp-play.h"
+
+static bool _mp_main_init(struct appdata *ad);
+static Eina_Bool _mp_main_win_visibility_change_cb(void *data, int type, void *event);
+static Eina_Bool _mp_main_win_focus_in_cb(void *data, int type, void *event);
+static Eina_Bool _mp_main_win_focus_out_cb(void *data, int type, void *event);
+
+static void
+_mp_main_exit_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ evas_object_del(obj);
+ mp_app_exit(data);
+}
+
+static int
+_mp_main_low_battery_cb(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_VAL(ad, 0);
+
+ if (mp_check_battery_available())
+ {
+ mp_app_exit(ad);
+ }
+ return 0;
+}
+
+static void
+_mp_evas_flush_post(void *data, Evas * e, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, _mp_evas_flush_post);
+
+}
+
+static bool
+_mp_main_init(struct appdata *ad)
+{
+ /* initialize library view layout */
+ ad->request_play_id = -1;
+ ad->music_setting_change_flag = false; //initialize
+ MediaSvcHandle *handle = NULL;
+ if (media_svc_connect(&handle) != AUDIO_SVC_ERROR_NONE)
+ {
+ ERROR_TRACE("Fail when init music db");
+ return FALSE;
+ }
+ ad->media_svc_handle = handle;
+
+ return TRUE;
+}
+
+static bool
+_mp_main_set_current_playing_item(struct appdata *ad, const char *current_player_path)
+{
+ startfunc;
+ ad->loadtype = LOAD_TRACK;
+
+ mp_play_list_create_current_play_list(ad, &ad->playing_list, NULL, current_player_path, 1, 0, FALSE, -1);
+
+ ad->launch_type = MP_LAUNCH_PATH;
+
+ return true;
+
+}
+
+static bool
+_mp_main_is_launching_available(struct appdata *ad)
+{
+ if (mp_check_battery_available())
+ {
+ Evas_Object *popup = elm_popup_add(ad->win_main);
+ mp_popup_desc_set(popup, GET_SYS_STR("IDS_COM_BODY_LOW_BATTERY"));
+ mp_popup_set_response_cb(popup, _mp_main_exit_cb, ad);
+ mp_popup_button_set(popup, "button1", GET_SYS_STR("IDS_COM_SK_OK"), MP_POPUP_YES);
+ mp_popup_timeout_set(popup, 3.0);
+ evas_object_show(ad->win_main);
+ evas_object_show(popup);
+ return false;
+ }
+
+ if (mp_check_mass_storage_mode())
+ {
+ Evas_Object *popup = elm_popup_add(ad->win_main);
+ mp_popup_desc_set(popup, GET_SYS_STR("IDS_COM_POP_UNABLE_TO_USE_DURING_MASS_STORAGE_MODE"));
+ mp_popup_set_response_cb(popup, _mp_main_exit_cb, ad);
+ mp_popup_button_set(popup, "button1", GET_SYS_STR("IDS_COM_SK_OK"), MP_POPUP_YES);
+ mp_popup_timeout_set(popup, 3.0);
+ evas_object_show(ad->win_main);
+ evas_object_show(popup);
+ return false;
+ }
+ return true;
+}
+
+static Eina_Bool _mp_main_win_visibility_change_cb(void *data, int type, void *event)
+{
+ struct appdata *ad = (struct appdata *)data;
+ mp_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "ad is null");
+
+ Ecore_X_Event_Window_Visibility_Change* ev = (Ecore_X_Event_Window_Visibility_Change *)event;
+ mp_debug("## Type=[%d], win=[%d], fully_obscured=[%d] ##", type, ev->win, ev->fully_obscured);
+
+ static bool hided = false;
+
+ if (ev->win == ad->xwin) {
+ /* main window */
+ if (ev->fully_obscured == 1) {
+ mp_debug("hide main window");
+ mp_player_mgr_vol_type_unset();
+
+ ad->prohibit_aul_relaunch = false;
+ hided = true;
+
+ mp_view_manager_freeze_progress_timer(ad);
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PAUSE, NULL);
+ } else {
+ mp_debug("show main window");
+ mp_player_mgr_vol_type_set();
+ ad->prohibit_aul_relaunch = true;
+
+ DEBUG_TRACE("load_type: %d", ad->loadtype);
+ mp_view_manager_thaw_progress_timer(ad);
+ }
+ }
+
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool _mp_main_win_focus_in_cb(void *data, int type, void *event)
+{
+ struct appdata *ad = (struct appdata *)data;
+ mp_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "ad is null");
+
+ Ecore_X_Event_Window_Focus_In *ev = (Ecore_X_Event_Window_Focus_In *)event;
+ if (ev->win == ad->xwin) {
+ ad->is_focus_out = false;
+ }
+
+ int db_state = VCONFKEY_FILEMANAGER_DB_UPDATED;
+ vconf_get_int(VCONFKEY_FILEMANAGER_DB_STATUS, &db_state);
+ if(db_state == VCONFKEY_FILEMANAGER_DB_UPDATING)
+ {
+ DEBUG_TRACE("update list");
+ mp_view_manager_update_list_contents(mp_util_get_view_data(ad), true);
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool _mp_main_win_focus_out_cb(void *data, int type, void *event)
+{
+ struct appdata *ad = (struct appdata *)data;
+ mp_retvm_if(ad == NULL, ECORE_CALLBACK_CANCEL, "ad is null");
+
+ Ecore_X_Event_Window_Focus_Out *ev = (Ecore_X_Event_Window_Focus_Out *)event;
+ if (ev->win == ad->xwin) {
+ ad->is_focus_out = true;
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PAUSE, NULL);
+ }
+ return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+_mp_main_app_init_idler_cb(void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ MP_CHECK_FALSE(ad);
+
+ if (!mp_app_noti_init(ad))
+ {
+ ERROR_TRACE("Error when noti init");
+ }
+ ad->key_down =
+ ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, mp_app_hard_key_down_cb, ad);
+ ad->key_down =
+ ecore_event_handler_add(ECORE_EVENT_KEY_UP, mp_app_hard_key_up_cb, ad);
+ ad->visibility_change =
+ ecore_event_handler_add(ECORE_X_EVENT_WINDOW_VISIBILITY_CHANGE, _mp_main_win_visibility_change_cb, ad);
+ ad->focus_in =
+ ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_IN, _mp_main_win_focus_in_cb, ad);
+ ad->focus_out =
+ ecore_event_handler_add(ECORE_X_EVENT_WINDOW_FOCUS_OUT, _mp_main_win_focus_out_cb, ad);
+
+ mp_app_inotify_init(ad);
+
+ elm_win_indicator_mode_set(ad->win_main, ELM_WIN_INDICATOR_SHOW);
+
+ ad->app_init_idler = NULL;
+ return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_mp_main_scale_set(struct appdata *ad)
+{
+ Evas_Coord w, h;
+ evas_object_geometry_get(ad->win_main, NULL, NULL, &w, &h);
+
+ if (w < h)
+ {
+ ad->scale = (double)w / 480;
+ }
+ else
+ {
+ ad->scale = (double)h / 480;
+ }
+
+ DEBUG_TRACE("scale factor: %f", ad->scale);
+}
+
+static void
+mp_main_parse_bundle(struct appdata *ad, bundle *b, char **request_title, char **path, int *lunching_by_menu_icon)
+{
+
+
+ if (b)
+ {
+ const char *mime_type = NULL;
+ mime_type = (char *)bundle_get_val(b, AUL_K_MIME_TYPE);
+ if (mime_type)
+ {
+ if (!strcmp(mime_type, "music-player.uri"))
+ {
+ *path = g_strdup(bundle_get_val(b, AUL_K_MIME_CONTENT));
+ *lunching_by_menu_icon = 1;
+ DEBUG_TRACE("bundle: mime_type[%s], contents[%s]\n", mime_type, *path);
+ }
+ else
+ {
+ *path = g_strdup(bundle_get_val(b, AUL_K_MIME_CONTENT));
+ }
+ }
+ else if(mp_util_get_uri_from_app_svc(b, ad, path))
+ {
+ DEBUG_TRACE("launching by APP SVC. path: %s", *path);
+ }
+ else
+ {
+ *path = g_strdup(bundle_get_val(b, MP_B_PATH));
+ if (!*path)
+ {
+ if (bundle_del(b, MP_PLAY_RECENT) == 0)
+ {
+ ad->launch_type = MP_LAUNCH_PLAY_RECENT;
+ ad->loadtype = LOAD_PLAY;
+ }
+ else if (bundle_get_val(b, MP_PLAY_PLAYLIST))
+ {
+ *request_title = (char *)bundle_get_val(b, MP_PLAY_PLAYLIST);
+ ad->launch_type = MP_LAUNCH_PLAY_PLAYLIST;
+ ad->loadtype = LOAD_PLAY;
+ }
+ else if (bundle_get_val(b, MP_PLAY_ARTIST))
+ {
+ *request_title = (char *)bundle_get_val(b, MP_PLAY_ARTIST);
+ ad->launch_type = MP_LAUNCH_PLAY_GROUP;
+ ad->loadtype = LOAD_PLAY;
+ ad->track_type = AUDIO_SVC_TRACK_BY_ARTIST;
+ ad->group_type = AUDIO_SVC_GROUP_BY_ARTIST;
+ }
+ else if (bundle_get_val(b, MP_PLAY_ALBUM))
+ {
+ *request_title = (char *)bundle_get_val(b, MP_PLAY_ALBUM);
+ ad->launch_type = MP_LAUNCH_PLAY_GROUP;
+ ad->loadtype = LOAD_PLAY;
+ ad->track_type = AUDIO_SVC_TRACK_BY_ALBUM;
+ ad->group_type = AUDIO_SVC_GROUP_BY_ALBUM;
+ }
+ else if (bundle_get_val(b, MP_PLAY_GENRE))
+ {
+ *request_title = (char *)bundle_get_val(b, MP_PLAY_GENRE);
+ ad->launch_type = MP_LAUNCH_PLAY_GROUP;
+ ad->loadtype = LOAD_PLAY;
+ ad->track_type = AUDIO_SVC_TRACK_BY_GENRE;
+ ad->group_type = AUDIO_SVC_GROUP_BY_GENRE;
+ }
+ else if (bundle_get_val(b, MP_PLAY_SOMETHING))
+ {
+ *request_title = (char *)bundle_get_val(b, MP_PLAY_SOMETHING);
+ ad->launch_type = MP_LAUNCH_PLAY_SOMETHING;
+ ad->loadtype = LOAD_PLAY;
+ ad->track_type = AUDIO_SVC_TRACK_ALL;
+ }
+
+ }
+ }
+ if(*path)
+ DEBUG_TRACE("Path is %s", *path);
+
+ if(bundle_get_val(b, MP_MM_KEY))
+ {
+ DEBUG_TRACE("mm key event, ad->player_state : %d", ad->player_state);
+ if(ad->player_state == PLAY_STATE_PAUSED)
+ {
+ mp_play_control_play_cb(ad, NULL, SIGNAL_PLAY, NULL);
+ ad->loadtype = LOAD_MM_KEY;
+ }
+ else
+ {
+ ad->launch_type = MP_LAUNCH_PLAY_RECENT;
+ ad->loadtype = LOAD_PLAY;
+ }
+ }
+ }
+
+}
+
+/**< Called before main loop */
+static int
+mp_create(void *data)
+{
+ struct appdata *ad = data;
+ int ret = 0;
+
+ MP_CHECK_VAL(ad, -1);
+
+
+ ret = appcore_set_i18n(PACKAGE, LOCALEDIR);
+ mp_retv_if(ret, -1);
+
+ appcore_set_event_callback(APPCORE_EVENT_LOW_BATTERY, _mp_main_low_battery_cb, ad);
+
+ /* do extension add before add elm object.*/
+ elm_theme_extension_add(NULL, THEME_NAME);
+
+ ad->win_main = mp_create_win(PACKAGE);
+ evas_event_callback_add(evas_object_evas_get(ad->win_main), EVAS_CALLBACK_RENDER_FLUSH_POST,
+ _mp_evas_flush_post, ad);
+
+ mp_retv_if(ad->win_main == NULL, -1);
+
+ ad->xwin = elm_win_xwindow_get(ad->win_main);
+
+ mp_widget_create_bgimg(ad->win_main);
+ ad->evas = evas_object_evas_get(ad->win_main);
+
+ if (!mp_player_mgr_session_init())
+ {
+ ERROR_TRACE("Error when set session");
+ return -1;
+ }
+
+ mp_setting_init(ad);
+
+ if (!_mp_main_init(ad))
+ {
+ ERROR_TRACE("Fail when init music");
+ return -1;
+ }
+
+ _mp_main_scale_set(ad);
+
+ mp_http_mgr_create(ad);
+
+ ad->app_init_idler = ecore_idler_add(_mp_main_app_init_idler_cb, ad);
+
+ return 0;
+}
+
+/**< Called after main loop */
+static int
+mp_terminate(void *data)
+{
+ struct appdata *ad = data;
+ DEBUG_TRACE_FUNC();
+ MP_CHECK_VAL(ad, 0);
+
+ mp_ecore_idler_del(ad->playing_err_idler);
+ mp_ecore_idler_del(ad->bt_pause_idler);
+ mp_ecore_idler_del(ad->app_init_idler);
+ mp_ecore_timer_del(ad->longpress_timer);
+ mp_ecore_timer_del(ad->live_pos_timer);
+ mp_util_stop_vibration(ad);
+ mp_ecore_timer_del(ad->vib_timer);
+
+ mp_util_ungrab_mm_keys(ad);
+
+ if (ad->key_down)
+ ecore_event_handler_del(ad->key_down);
+ if (ad->visibility_change) {
+ ecore_event_handler_del(ad->visibility_change);
+ ad->visibility_change = NULL;
+ }
+ if (ad->focus_in) {
+ ecore_event_handler_del(ad->focus_in);
+ ad->focus_in = NULL;
+ }
+ if (ad->focus_out) {
+ ecore_event_handler_del(ad->focus_out);
+ ad->focus_out = NULL;
+ }
+
+ if (ad->player_state != PLAY_STATE_INIT)
+ {
+ mp_player_mgr_stop(ad);
+ mp_player_mgr_destroy(ad);
+ }
+
+ vconf_set_int(VCONFKEY_MUSIC_STATE, VCONFKEY_MUSIC_OFF);
+ mp_player_mgr_vol_type_unset();
+ if (!mp_player_mgr_session_finish())
+ ERROR_TRACE("Error when set session");
+ mp_app_inotify_finalize(ad);
+
+ mp_http_mgr_destory(ad);
+
+ if (ad->media_svc_handle) {
+ media_svc_disconnect(ad->media_svc_handle);
+ }
+
+ mp_setting_deinit(ad);
+ if (!mp_app_noti_ignore())
+ ERROR_TRACE("Error when ignore noti");
+
+ return 0;
+}
+
+/**< Called when every window goes back */
+static int
+mp_pause(void *data)
+{
+ DEBUG_TRACE_FUNC();
+ return 0;
+}
+
+/**< Called when any window comes on top */
+static int
+mp_resume(void *data)
+{
+ DEBUG_TRACE_FUNC();
+ return 0;
+}
+
+/**< Called at the first idler and relaunched by AUL*/
+static int
+mp_reset(bundle * b, void *data)
+{
+ startfunc;
+ struct appdata *ad = data;
+ mp_retv_if(ad == NULL, -1);
+
+ mp_retvm_if(ad->prohibit_aul_relaunch, 0, "relaunch not allowed.. ");
+ if (!ad->prohibit_aul_relaunch)
+ ad->prohibit_aul_relaunch = true;
+
+ if (!_mp_main_is_launching_available(ad))
+ return -1;
+
+ char *request_title = NULL;
+ int lunching_by_menu_icon = 0;
+ char *path;
+
+ mp_main_parse_bundle(ad, b, &request_title, &path, &lunching_by_menu_icon);
+
+ if (path)
+ {
+ _mp_main_set_current_playing_item(ad, path);
+ IF_FREE(ad->request_playing_path);
+ ad->request_playing_path = g_strdup(path);
+ free(path);
+ }
+
+ DEBUG_TRACE("ad->launch_type:%d, ad->loadtype:%d", ad->launch_type, ad->loadtype);
+
+ if (ad->launch_type != MP_LAUNCH_DEFAULT)
+ {
+ mp_popup_destroy(ad);
+ mp_view_manager_pop_info_view(ad);
+ }
+
+ if (ad->launch_type != MP_LAUNCH_DEFAULT && ad->loadtype == LOAD_TRACK)
+ {
+ IF_FREE(ad->latest_playing_key_id);
+ ad->load_play_view = true;
+
+ mp_play_view_create_library(ad);
+
+ mp_play_view_load_by_path(ad, ad->request_playing_path);
+ IF_FREE(ad->request_playing_path);
+
+ ad->paused_by_user = FALSE;
+
+ }
+ else if (ad->launch_type >= MP_LAUNCH_PLAY_RECENT
+ && ad->launch_type <= MP_LAUNCH_PLAY_SOMETHING)
+ {
+ IF_FREE(ad->latest_playing_key_id);
+ ad->load_play_view = true;
+ mp_play_view_create_library(ad);
+
+ ad->paused_by_user = FALSE;
+
+ if (!mp_play_view_load_by_play(ad, request_title))
+ return -1;
+
+ }
+ else if (ad->launch_type == MP_LAUNCH_DEFAULT)
+ {
+ if (ad->base_layout_main == NULL)
+ mp_library_create(ad);
+ }
+
+
+ enum appcore_rm mode;
+ appcore_get_rotation_state(&mode);
+
+ evas_object_show(ad->win_main);
+
+ if(ad->loadtype != LOAD_MM_KEY)
+ elm_win_activate(ad->win_main);
+
+ mp_player_mgr_vol_type_set();
+
+ endfunc;
+
+ return 0;
+}
+
+int
+main(int argc, char *argv[])
+{
+ struct appdata ad;
+ struct appcore_ops ops = {
+ .create = mp_create,
+ .terminate = mp_terminate,
+ .pause = mp_pause,
+ .resume = mp_resume,
+ .reset = mp_reset,
+ };
+ DEBUG_TRACE(" starting music main");
+
+ memset(&ad, 0x0, sizeof(struct appdata));
+ ops.data = &ad;
+
+ return appcore_efl_main(PACKAGE, &argc, &argv, &ops);
+}
diff --git a/src/view/include/mp-edit-view.h b/src/view/include/mp-edit-view.h
new file mode 100755
index 0000000..7fc754e
--- /dev/null
+++ b/src/view/include/mp-edit-view.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include "mp-view-layout.h"
+ Evas_Object * mp_edit_view_create(view_data_t * view_data);
+ void mp_edit_view_back_button_cb(void *data, Evas_Object * obj, void *event_info);
+ void mp_edit_view_create_new_cancel_cb(void *data, Evas_Object * obj, void *event_info);
+ void mp_edit_view_create_new_done_cb(void *data, Evas_Object * obj, void *event_info);
+ void mp_edit_view_delete_cb(void *data, Evas_Object * obj, void *event_info);
+ void mp_edit_view_add_to_plst_cb(void *data, Evas_Object * obj, void *event_info);
+ void mp_edit_view_excute_edit(mp_layout_data_t * layout_data, mp_edit_operation_t edit_operation);
+ void mp_edit_view_cencel_cb(void *data, Evas_Object * obj, void *event_info);
+ void mp_edit_view_genlist_sel_cb(void *data, Evas_Object * obj, void *event_info);
+
diff --git a/src/view/include/mp-group-view.h b/src/view/include/mp-group-view.h
new file mode 100755
index 0000000..2138e53
--- /dev/null
+++ b/src/view/include/mp-group-view.h
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_GROUP_VIEW_H__
+#define __MP_GROUP_VIEW_H__
+
+#include "music.h"
+
+Evas_Object * mp_group_view_create(struct appdata *ad, mp_view_type_t type);
+void mp_group_view_destroy(Evas_Object * group_view);
+void mp_group_view_refresh(Evas_Object * group_view);
+Evas_Object * mp_group_view_icon_get(void *data, Evas_Object * obj, const char *part);
+char *mp_group_view_album_list_label_get(void *data, Evas_Object * obj, const char *part);
+void mp_group_view_group_list_select_cb(void *data, Evas_Object * obj, void *event_info);
+char *mp_group_view_list_label_get(void *data, Evas_Object * obj, const char *part);
+Evas_Object * mp_group_view_icon_get(void *data, Evas_Object * obj, const char *part);
+bool mp_group_view_create_by_group_name(Evas_Object * obj, char *group_name, audio_svc_group_type_e type);
+
+#endif //__MP_GROUP_VIEW_H__
diff --git a/src/view/include/mp-library.h b/src/view/include/mp-library.h
new file mode 100755
index 0000000..b0d64e8
--- /dev/null
+++ b/src/view/include/mp-library.h
@@ -0,0 +1,50 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_LIBRARY_H_
+#define __MP_LIBRARY_H_
+
+#include "music.h"
+#include "mp-view-manager.h"
+#include "mp-setting-ctrl.h"
+
+#define STR_MP_ALL_TRACKS N_("IDS_MUSIC_HEADER_SONGS")
+#define STR_MP_PLAYLISTS N_("IDS_MUSIC_BODY_PLAYLISTS")
+#define STR_MP_ALBUMS N_("IDS_MUSIC_TAB4_ALBUMS")
+#define STR_MP_ARTISTS N_("IDS_MUSIC_TAB4_ARTISTS")
+#define STR_MP_GENRES N_("IDS_MUSIC_TAB4_GENRES")
+#define STR_MP_COMPOSERS N_("IDS_MUSIC_TAB4_COMPOSERS")
+#define STR_MP_CONDUCTORS N_("IDS_MUSIC_TAB4_CONDUCTORS")
+#define STR_MP_YEARS N_("IDS_MUSIC_TAB4_YEARS")
+#define STR_MP_PODCASTS N_("IDS_MUSIC_TAB4_PODCASTS")
+#define STR_MP_MOST_PLAYED N_("IDS_MUSIC_BODY_MOST_PLAYED")
+#define STR_MP_RECENTLY_ADDED N_("IDS_MUSIC_BODY_RECENTLY_ADDED")
+#define STR_MP_RECENTLY_PLAYED N_("IDS_MUSIC_BODY_RECENTLY_PLAYED")
+#define STR_MP_QUICK_LIST N_("IDS_MUSIC_BODY_FAVOURITES")
+#define STR_MP_ADD_TO_PLAYLIST N_("IDS_MUSIC_BODY_ADD_TO_PLAYLIST")
+
+void mp_library_create(struct appdata *ad);
+void mp_library_update_view(struct appdata *ad);
+void mp_library_view_change_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_library_now_playing_hide(struct appdata *ad);
+void mp_library_now_playing_set(struct appdata *ad);
+bool mp_library_load(struct appdata *ad);
+void mp_view_manager_clear(struct appdata *ad);
+
+void mp_library_controlbar_visible_set(struct appdata *ad, bool visible);
+
+#endif //__MP_LIBRARY_H_
diff --git a/src/view/include/mp-play-view.h b/src/view/include/mp-play-view.h
new file mode 100755
index 0000000..3150885
--- /dev/null
+++ b/src/view/include/mp-play-view.h
@@ -0,0 +1,55 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_PLAY_VIEW_H_
+#define __MP_PLAY_VIEW_H_
+
+#include "music.h"
+#include "mp-view-layout.h"
+
+bool mp_play_view_stop_transit(void *data);
+
+bool mp_play_view_pop(void *data);
+bool mp_play_view_load(void *data);
+
+bool mp_play_view_load_by_path(struct appdata *ad, char *path);
+bool mp_play_view_load_track(void *data);
+bool mp_play_view_load_by_index(mp_layout_data_t * layout_data, int index, bool effect_value);
+bool mp_play_view_refresh(void *data);
+
+bool mp_play_view_create_library(void *data);
+bool mp_play_view_create(void *data);
+bool mp_play_view_destory(void *data);
+
+bool mp_play_view_play_item(void *data, struct music_list_item *it, bool effect_value, bool move_left);
+
+void mp_play_view_update_progressbar(void *data);
+void mp_play_view_progress_timer_freeze(void *data);
+void mp_play_view_progress_timer_thaw(void *data);
+void mp_play_view_set_snd_path_sensitivity(void *data);
+void mp_play_view_info_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_play_view_back_clicked_cb(void *data, Evas_Object * obj, void *event_info);
+
+bool mp_play_view_load_by_play(struct appdata *ad, const char *request_title);
+void mp_play_view_info_back_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_play_view_show_default_info(struct appdata *ad);
+void mp_play_view_update_snd_path(struct appdata *ad);
+bool mp_play_view_set_menu_state(void *data, bool show, bool animation);
+void mp_play_view_set_snd_path_cb(void *data, Evas_Object *obj, void *event_info);
+
+#endif
diff --git a/src/view/include/mp-playlist-view.h b/src/view/include/mp-playlist-view.h
new file mode 100755
index 0000000..b48b141
--- /dev/null
+++ b/src/view/include/mp-playlist-view.h
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_PLAYLIST_VIEW_H_
+#define __MP_PLAYLIST_VIEW_H_
+
+#include "music.h"
+#include "mp-view-layout.h"
+
+Evas_Object * mp_playlist_view_create(struct appdata *ad, mp_view_type_t type);
+void mp_playlist_view_destroy(Evas_Object * playlist);
+void mp_playlist_view_refresh(Evas_Object * playlist);
+
+bool mp_playlist_view_create_by_id(Evas_Object * obj, int p_id);
+void mp_playlist_view_update_navibutton(mp_layout_data_t * layout_data);
+void mp_playlist_view_update_genlist_item_class(mp_layout_data_t * layout_data);
+bool mp_playlist_view_reset_rename_mode(struct appdata *ad);
+void mp_playlist_view_create_playlist_button_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_playlist_view_create_new_cancel_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_playlist_view_create_new_done_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_playlist_view_rename_done_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_playlist_view_rename_cancel_cb(void *data, Evas_Object * obj, void *event_info);
+void mp_playlist_view_add_button_cb(void *data, Evas_Object * obj, void *event_info);
+
+#endif //__MP_PLAYLIST_VIEW_H_
diff --git a/src/view/include/mp-track-view.h b/src/view/include/mp-track-view.h
new file mode 100755
index 0000000..ed961fc
--- /dev/null
+++ b/src/view/include/mp-track-view.h
@@ -0,0 +1,30 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_TRACK_VIEW_H_
+#define __MP_TRACK_VIEW_H_
+
+#include "music.h"
+ Evas_Object * mp_track_view_create(struct appdata *ad);
+ void mp_track_view_destroy(Evas_Object * track_view);
+ void mp_track_view_refresh(Evas_Object * track_view);
+ void mp_track_view_update_title_button(Evas_Object * track_view);
+ void mp_track_view_add_to_playlist_done_cb(void *data, Evas_Object * obj, void *event_info);
+ void mp_track_view_add_to_playlist_cancel_cb(void *data, Evas_Object * obj, void *event_info);
+
+#endif /* */
+
diff --git a/src/view/mp-edit-view.c b/src/view/mp-edit-view.c
new file mode 100755
index 0000000..ebdd6f2
--- /dev/null
+++ b/src/view/mp-edit-view.c
@@ -0,0 +1,1006 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-edit-view.h"
+#include "mp-view-layout.h"
+#include "mp-library.h"
+#include "mp-popup.h"
+#include "mp-util.h"
+#include "mp-widget.h"
+#include "mp-common.h"
+#include "mp-menu.h"
+#include "mp-play-list.h"
+#include "mp-playlist-view.h"
+#include "mp-popup.h"
+
+static void
+_mp_edit_view_destroy_view(view_data_t * view_data)
+{
+ startfunc;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ mp_view_manager_pop_view_content(view_data, true, TRUE);
+ if (view_data->ad->notify)
+ evas_object_del(view_data->ad->notify);
+ endfunc;
+}
+
+void
+mp_edit_view_back_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ evas_object_smart_callback_del(obj, "clicked", mp_edit_view_back_button_cb);
+ mp_view_manager_pop_view_content(view_data, FALSE, FALSE);
+ if (view_data->ad->notify)
+ evas_object_del(view_data->ad->notify);
+}
+
+static char *
+_mp_edit_view_get_view_title(mp_layout_data_t * layout_data)
+{
+ char *title = NULL;
+
+ GET_SYS_STR("IDS_COM_SK_SELECT");
+
+ return title;
+
+}
+
+void
+mp_edit_view_create_new_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ view_data_t *view_data = layout_data->view_data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_manager_pop_view_content(view_data, FALSE, TRUE);
+}
+
+void
+mp_edit_view_create_new_done_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ view_data_t *view_data = layout_data->view_data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ struct appdata *ad = view_data->ad;
+ int plst_uid = -1;
+
+ char *converted_name = NULL;
+ Evas_Object *entry = mp_widget_editfield_entry_get(ad->editfiled_new_playlist);
+ const char *name = elm_entry_entry_get(entry);
+ if (name == NULL || strlen(name) == 0)
+ {
+ name = elm_object_part_text_get(ad->editfiled_new_playlist, "elm.guidetext");
+ }
+ converted_name = elm_entry_markup_to_utf8(name);
+
+ plst_uid = mp_util_create_playlist(ad, converted_name);
+ IF_FREE(converted_name);
+ if (plst_uid < 0)
+ return;
+
+ mp_view_manager_pop_view_content(view_data, FALSE, TRUE);
+
+ layout_data->edit_playlist_id = plst_uid;
+ mp_edit_view_excute_edit(layout_data, MP_EDIT_ADD_TO_PLAYLIST);
+
+ if (view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
+ mp_view_manager_update_list_contents(view_data, FALSE);
+
+}
+
+static void
+_mp_edit_view_create_playlist_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ view_data_t *view_data = layout_data->view_data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ Evas_Object *create_plst_layout = NULL;
+ char *new_playlist_name = NULL;
+
+ new_playlist_name = mp_util_get_new_playlist_name(view_data->ad->media_svc_handle);
+ create_plst_layout = mp_common_create_editfield_layout(view_data->navibar, view_data->ad, new_playlist_name);
+ IF_FREE(new_playlist_name);
+ mp_retm_if(create_plst_layout == NULL, "create_plst_layout is NULL");
+
+ mp_view_manager_push_view_content(view_data, create_plst_layout, MP_VIEW_CONTENT_NEW_PLAYLIST_BY_EDIT);
+ mp_view_manager_set_title_and_buttons(view_data, GET_STR("IDS_MUSIC_OPT_ADD_PLAYLIST"), layout_data);
+
+ evas_object_show(create_plst_layout);
+
+ mp_popup_destroy(layout_data->ad);
+
+}
+
+static void
+_mp_edit_view_add_to_playlist_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("playlsit id, %d", data);
+
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) evas_object_data_get(obj, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ layout_data->edit_playlist_id = (int)data;
+ mp_popup_destroy(layout_data->ad);
+ mp_edit_view_excute_edit(layout_data, MP_EDIT_ADD_TO_PLAYLIST);
+}
+
+
+void
+mp_edit_view_add_to_plst_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ Evas_Object *popup = NULL;
+
+ if (layout_data->checked_count <= 0)
+ {
+ mp_widget_text_popup(layout_data->ad, GET_STR("IDS_MUSIC_POP_NOTHING_SELECTED"));
+ return;
+ }
+
+ popup = mp_genlist_popup_create(layout_data->ad->win_main, MP_POPUP_ADD_TO_PLST, data, layout_data->ad);
+ evas_object_data_set(popup, "layout_data", layout_data);
+ mp_retm_if(!popup, "popup is NULL !!!");
+
+ Evas_Object *genlist = evas_object_data_get(popup, "genlist");
+ evas_object_data_set(genlist, "layout_data", layout_data);
+
+ mp_genlist_popup_item_append(popup, GET_STR("IDS_MUSIC_OPT_CREATE_PLAYLIST"), NULL,
+ _mp_edit_view_create_playlist_cb, layout_data);
+ int i = 0, count = -1, ret = -1;
+
+ ret = audio_svc_count_playlist(layout_data->ad->media_svc_handle, "", "", &count);
+
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ ERROR_TRACE("Error in audio_svc_list_get_count (%d)\n", ret);
+ evas_object_del(popup);
+ return;
+ }
+
+ if (count)
+ {
+ AudioHandleType *playlists = NULL;
+ ret = audio_svc_playlist_new(&playlists, count);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to make new playlist");
+
+ ret = audio_svc_get_playlist(layout_data->ad->media_svc_handle, "", "", 0, count, playlists);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ WARN_TRACE("Fail to get playlist");
+ audio_svc_playlist_free(playlists);
+ return;
+ }
+ for (i = 0; i < count; i++)
+ {
+ char *name = NULL;
+ int size;
+ int id;
+
+ ret = audio_svc_playlist_get_val(playlists, i, AUDIO_SVC_PLAYLIST_NAME, &name, &size,
+ AUDIO_SVC_PLAYLIST_ID, &id, -1);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+
+ mp_genlist_popup_item_append(popup, name, NULL, _mp_edit_view_add_to_playlist_cb, (void *)id);
+ }
+ }
+
+ evas_object_show(popup);
+}
+
+static Eina_Bool
+_mp_edit_view_edit_idler_cb(void *data)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ struct appdata *ad = NULL;
+ mp_genlist_item_data_t *item = NULL;
+ AudioHandleType *item_handle = NULL;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ int plst_id = -1;
+ char *fid = NULL;
+ int uid = 0;
+ char *file_path;
+ char *title;
+ int size;
+ bool error_occured = FALSE;
+
+ MP_CHECK_FALSE(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ ad = layout_data->ad;
+ MP_CHECK_FALSE(ad);
+
+ if (!layout_data->current_edit_item)
+ {
+ WARN_TRACE("CHECK here...");
+ goto END;
+ }
+ item = elm_object_item_data_get(layout_data->current_edit_item);
+
+ if (!item)
+ {
+ WARN_TRACE("CHECK here...");
+ goto END;
+ }
+
+ if (AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type
+ || AUDIO_SVC_TRACK_BY_ARTIST == layout_data->track_type)
+ layout_data->category = MP_LAYOUT_TRACK_LIST;
+
+ if (item->checked)
+ {
+ if (layout_data->edit_operation == MP_EDIT_DELETE)
+ {
+ switch (layout_data->category)
+ {
+ case MP_LAYOUT_PLAYLIST_LIST:
+ {
+ layout_data->current_edit_item =
+ elm_genlist_item_next_get(layout_data->current_edit_item);
+ item_handle = (AudioHandleType *) (item->handle);
+ if (!item_handle)
+ {
+ WARN_TRACE("CHECK here...");
+ goto END;
+ }
+
+ if (item_handle)
+ {
+ ret = audio_svc_playlist_get_val(item_handle, 0, AUDIO_SVC_PLAYLIST_ID,
+ &plst_id, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ ret = audio_svc_delete_playlist(ad->media_svc_handle, plst_id);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ DEBUG_TRACE("playlist (%d) deleted", plst_id);
+ }
+ elm_object_item_del(item->it);
+ layout_data->is_item_del = true;
+ layout_data->item_count--;
+ layout_data->checked_count--;
+
+ break;
+ }
+ case MP_LAYOUT_TRACK_LIST:
+ {
+ layout_data->current_edit_item =
+ elm_genlist_item_next_get(layout_data->current_edit_item);
+ item_handle = (AudioHandleType *) (item->handle);
+ if (item_handle)
+ {
+ if (layout_data->playlist_id >= 0)
+ {
+ ret = audio_svc_playlist_item_get_val(item_handle, 0,
+ AUDIO_SVC_PLAYLIST_ITEM_UID,
+ &uid, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ ret = audio_svc_remove_item_from_playlist_by_uid(ad->media_svc_handle,
+ layout_data->playlist_id,
+ uid);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ DEBUG_TRACE("playlist id = %d, id = %d", plst_id, uid);
+
+ if (ad->playing_list) {
+ if (ad->playing_list->playlist_id == layout_data->playlist_id) {
+ mp_debug("delete track from now playing list");
+ fid = mp_util_get_fid_by_handle(layout_data, item_handle);
+ mp_play_list_delete_item(ad->playing_list, fid);
+ }
+ }
+ }
+ else if (layout_data->track_type == AUDIO_SVC_TRACK_BY_ADDED_TIME)
+ {
+ ret = audio_svc_list_item_get_val(item_handle, 0,
+ AUDIO_SVC_LIST_ITEM_AUDIO_ID,
+ &fid, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ ret = audio_svc_update_item_metadata(ad->media_svc_handle, fid,
+ AUDIO_SVC_TRACK_DATA_ADDED_TIME,
+ 0, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ DEBUG_TRACE("playlist id = %d, id = %d", plst_id, fid);
+ }
+ else if (layout_data->track_type == AUDIO_SVC_TRACK_BY_PLAYED_TIME)
+ {
+ ret = audio_svc_list_item_get_val(item_handle, 0,
+ AUDIO_SVC_LIST_ITEM_AUDIO_ID,
+ &fid, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ ret = audio_svc_update_item_metadata(ad->media_svc_handle, fid,
+ AUDIO_SVC_TRACK_DATA_PLAYED_TIME,
+ 0, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ DEBUG_TRACE("playlist id = %d, id = %d", plst_id, fid);
+ }
+ else if (layout_data->track_type == AUDIO_SVC_TRACK_BY_PLAYED_COUNT)
+ {
+ ret = audio_svc_list_item_get_val(item_handle, 0,
+ AUDIO_SVC_LIST_ITEM_AUDIO_ID,
+ &fid, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ ret = audio_svc_update_item_metadata(ad->media_svc_handle, fid,
+ AUDIO_SVC_TRACK_DATA_PLAYED_COUNT,
+ 0, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ DEBUG_TRACE("playlist id = %d, id = %d", plst_id, fid);
+ }
+ else
+ {
+ ret = audio_svc_list_item_get_val(item_handle, 0,
+ AUDIO_SVC_LIST_ITEM_AUDIO_ID,
+ &fid, &size,
+ AUDIO_SVC_LIST_ITEM_PATHNAME,
+ &file_path, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ if (mp_util_delete_track(layout_data->ad, fid, file_path, false)
+ != MP_FILE_DELETE_ERR_NONE)
+ {
+ DEBUG_TRACE("Fail to delete item, fid: %d, path: %s",
+ fid, file_path);
+ layout_data->error_count++;
+ error_occured = true;
+ }
+ }
+ }
+ if (!error_occured)
+ {
+ if (AUDIO_SVC_TRACK_BY_ARTIST == layout_data->track_type) {
+ int index = -1;
+ int sub_index = -1;
+ bool ret_val = FALSE;
+ /* get group index and sub index when the status is artist album */
+ ret_val = mp_common_track_get_aa_index(0, layout_data, item->it, FALSE);
+ if (ret_val) {
+ index = layout_data->selected_group_index;
+ sub_index = layout_data->selected_album_sub_index;
+ layout_data->aa_item_count[index]--;
+ if (layout_data->aa_item_count[index] < 1) {
+ /* delete group title if this album have no item */
+ elm_object_item_del(layout_data->aa_group[index]);
+ } else {
+ /* update group title */
+ elm_genlist_item_item_class_update(layout_data->aa_group[index],
+ layout_data->aa_group_itc);
+ }
+ }
+ DEBUG_TRACE("index=%d, sub_index=%d, ret_val=%d", index, sub_index, ret_val);
+ } else if (AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type) {
+ /* update group title */
+ elm_genlist_item_item_class_update(layout_data->album_group,
+ layout_data->album_group_itc);
+ }
+ elm_object_item_del(item->it);
+ layout_data->is_item_del = true;
+ layout_data->item_count--;
+ layout_data->checked_count--;
+ }
+ break;
+ }
+ case MP_LAYOUT_GROUP_LIST:
+ {
+ item_handle = (AudioHandleType *) (item->handle);
+ if (item_handle)
+ {
+ audio_svc_track_type_e item_type = AUDIO_SVC_TRACK_ALL;
+ int count = 0;
+ char *path = NULL;
+ int size = 0;
+
+ ret = audio_svc_group_item_get_val(item_handle, 0,
+ AUDIO_SVC_GROUP_ITEM_MAIN_INFO,
+ &title, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ MP_CHECK_EXCEP(title);
+
+ item_type = mp_menu_get_track_type_by_group(layout_data->group_type);
+
+ if (!layout_data->group_track_handle)
+ {
+ ret = audio_svc_count_list_item(ad->media_svc_handle, item_type, title, "", "", "",
+ &count);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ MP_CHECK_EXCEP(count > 0);
+ mp_debug("track_count: %d", count);
+
+ ret = audio_svc_list_item_new(&layout_data->group_track_handle,
+ count);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ ret = audio_svc_get_list_item(ad->media_svc_handle, item_type, title, NULL, NULL,
+ NULL, 0, count,
+ layout_data->group_track_handle);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ layout_data->edit_track_index = count - 1;
+ layout_data->group_item_delete_error = false;
+ }
+ ret = audio_svc_list_item_get_val(layout_data->group_track_handle,
+ layout_data->edit_track_index,
+ AUDIO_SVC_LIST_ITEM_PATHNAME, &path,
+ &size, AUDIO_SVC_LIST_ITEM_AUDIO_ID,
+ &fid, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ MP_CHECK_EXCEP(path);
+
+ music_list_item *cur_item =
+ mp_play_list_get_current_item(layout_data->view_data->ad->
+ playing_list);
+ if ((cur_item != NULL) && !g_strcmp0(cur_item->key_id, fid))
+ {
+ DEBUG_TRACE("Playing file is not deleted., fid: %s, path: %s",
+ fid, path);
+ layout_data->error_count++;
+ layout_data->group_item_delete_error = TRUE;
+ }
+ else
+ {
+ if (mp_util_delete_track(layout_data->ad, 0, path, FALSE) !=
+ MP_FILE_DELETE_ERR_NONE)
+ {
+ DEBUG_TRACE("Fail to delete item, fid: %s, path: %s",
+ fid, path);
+ layout_data->error_count++;
+ layout_data->group_item_delete_error = TRUE;
+ }
+ }
+ DEBUG_TRACE("layout_data->edit_track_index: %d",
+ layout_data->edit_track_index);
+ if (layout_data->edit_track_index <= 0)
+ {
+ DEBUG_TRACE("all tracks in %s deleted.", title);
+ layout_data->current_edit_item =
+ elm_genlist_item_next_get(layout_data->
+ current_edit_item);
+ audio_svc_list_item_free(layout_data->group_track_handle);
+ layout_data->group_track_handle = NULL;
+ if (!layout_data->group_item_delete_error)
+ {
+ elm_object_item_del(item->it);
+ layout_data->is_item_del = true;
+ layout_data->item_count--;
+ layout_data->checked_count--;
+ }
+ }
+ else
+ layout_data->edit_track_index--;
+
+ }
+ break;
+ }
+ default:
+ WARN_TRACE("unexpected case...");
+ break;
+ }
+ mp_common_set_title_button_sensitivity(layout_data, layout_data->checked_count);
+ }
+ else if (layout_data->edit_operation == MP_EDIT_ADD_TO_PLAYLIST)
+ {
+ if (layout_data->playlist_track_count >= MP_PLAYLIST_MAX_ITEM_COUNT)
+ {
+ DEBUG_TRACE("unable to add more tracks...");
+ goto mp_exception;
+ }
+ switch (layout_data->category)
+ {
+ case MP_LAYOUT_TRACK_LIST:
+ {
+ layout_data->current_edit_item =
+ elm_genlist_item_next_get(layout_data->current_edit_item);
+ item_handle = (AudioHandleType *) (item->handle);
+ if (item_handle)
+ {
+ if (layout_data->playlist_id >= 0)
+ {
+ ret = audio_svc_playlist_item_get_val(item_handle, 0,
+ AUDIO_SVC_PLAYLIST_ITEM_AUDIO_ID,
+ &fid, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ }
+ else
+ {
+ ret = audio_svc_list_item_get_val(item_handle, 0,
+ AUDIO_SVC_LIST_ITEM_AUDIO_ID,
+ &fid, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ }
+ if (!mp_util_add_to_playlist_by_key(ad->media_svc_handle, layout_data->edit_playlist_id, fid))
+ goto mp_exception;
+ else
+ layout_data->playlist_track_count++;
+ }
+ break;
+ }
+ case MP_LAYOUT_GROUP_LIST:
+ {
+ item_handle = (AudioHandleType *) (item->handle);
+ if (item_handle)
+ {
+ audio_svc_track_type_e item_type = AUDIO_SVC_TRACK_ALL;
+ int count = 0;
+ int size = 0;
+
+ ret = audio_svc_group_item_get_val(item_handle, 0,
+ AUDIO_SVC_GROUP_ITEM_MAIN_INFO,
+ &title, &size, -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ MP_CHECK_EXCEP(title);
+
+ item_type = mp_menu_get_track_type_by_group(layout_data->group_type);
+
+ if (!layout_data->group_track_handle)
+ {
+ ret = audio_svc_count_list_item(ad->media_svc_handle, item_type, title, "", "", "",
+ &count);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+ MP_CHECK_EXCEP(count > 0);
+ mp_debug("track_count: %d", count);
+
+ ret = audio_svc_list_item_new(&layout_data->group_track_handle,
+ count);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ ret = audio_svc_get_list_item(ad->media_svc_handle, item_type, title, NULL, NULL,
+ NULL, 0, count,
+ layout_data->group_track_handle);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ layout_data->edit_track_index = count - 1;
+ layout_data->group_item_delete_error = false;
+ }
+ ret = audio_svc_list_item_get_val(layout_data->group_track_handle,
+ layout_data->edit_track_index,
+ AUDIO_SVC_LIST_ITEM_AUDIO_ID, &fid, &size,
+ -1);
+ MP_CHECK_EXCEP(ret == AUDIO_SVC_ERROR_NONE);
+
+ if (!mp_util_add_to_playlist_by_key(ad->media_svc_handle, layout_data->edit_playlist_id, fid))
+ goto mp_exception;
+ else
+ layout_data->playlist_track_count++;
+
+ if (layout_data->edit_track_index <= 0)
+ {
+ DEBUG_TRACE("all tracks in %s added.", title);
+ layout_data->current_edit_item =
+ elm_genlist_item_next_get(layout_data->
+ current_edit_item);
+ audio_svc_list_item_free(layout_data->group_track_handle);
+ layout_data->group_track_handle = NULL;
+ }
+ else
+ layout_data->edit_track_index--;
+
+ }
+ break;
+ }
+ default:
+ WARN_TRACE("unexpected case...");
+ break;
+ }
+
+ }
+ else
+ {
+ WARN_TRACE("Unsupported operation...");
+ goto mp_exception;
+ }
+ }
+ else
+ layout_data->current_edit_item = elm_genlist_item_next_get(layout_data->current_edit_item);
+
+ if (layout_data->current_edit_item)
+ {
+ return EINA_TRUE;
+ }
+ DEBUG_TRACE("no more items");
+
+ END:
+ mp_popup_response(ad->popup[MP_POPUP_PROGRESS], 0);
+ layout_data->edit_idler = NULL;
+ return EINA_FALSE;
+
+ mp_exception:
+ if (layout_data->group_track_handle)
+ {
+ audio_svc_list_item_free(layout_data->group_track_handle);
+ layout_data->group_track_handle = NULL;
+ }
+ mp_popup_response(ad->popup[MP_POPUP_PROGRESS], 0);
+ layout_data->edit_idler = NULL;
+ return EINA_FALSE;
+
+
+}
+
+static void
+_mp_edit_view_progress_popup_response_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ MP_CHECK(obj);
+
+ evas_object_del(obj);
+
+ struct appdata *ad = layout_data->ad;
+ MP_CHECK(ad);
+
+ if (layout_data->edit_idler)
+ {
+ ecore_idler_del(layout_data->edit_idler);
+ layout_data->edit_idler = NULL;
+ }
+
+ if (layout_data->group_track_handle)
+ {
+ audio_svc_list_item_free(layout_data->group_track_handle);
+ layout_data->group_track_handle = NULL;
+ }
+
+ if(mp_view_manager_count_view_content(layout_data->view_data) > 1)
+ mp_view_manager_update_list_contents(layout_data->view_data, TRUE);
+
+ if (layout_data->item_count < 1)
+ {
+ if(mp_view_manager_count_view_content(layout_data->view_data) > 1)
+ {
+ int category = layout_data->category;
+ int view_type = layout_data->view_data->view_type;
+ _mp_edit_view_destroy_view(layout_data->view_data);
+ if ((category == MP_LAYOUT_TRACK_LIST)
+ && (view_type == MP_VIEW_TYPE_PLAYLIST))
+ {
+ mp_util_create_notify(ad, GET_SYS_STR("IDS_COM_POP_REMOVED"));
+ }
+ else
+ {
+ mp_util_create_notify(ad, GET_SYS_STR("IDS_COM_POP_DELETED"));
+ }
+ return;
+ }
+ else
+ mp_view_manager_update_list_contents(layout_data->view_data, TRUE);
+ }
+
+ int selected_count = layout_data->selected_count;
+
+ mp_edit_view_cencel_cb(layout_data, NULL, NULL);
+
+ DEBUG_TRACE("selected_count, %d, error_count: %d", selected_count, layout_data->error_count);
+
+ if (layout_data->edit_operation == MP_EDIT_ADD_TO_PLAYLIST)
+ {
+ if (selected_count)
+ mp_util_create_notify(layout_data->ad, GET_STR("IDS_MUSIC_POP_ADDED"));
+ }
+ else
+ {
+ bool deleted = FALSE;
+ if (layout_data->genlist) {
+ int before_count = (int)evas_object_data_get(layout_data->genlist, "item_count_before_delete");
+ int current_count = elm_genlist_items_count(layout_data->genlist);
+
+ mp_debug("before: %d, after: %d", before_count, current_count);
+ if (before_count > current_count)
+ deleted = TRUE;
+ }
+
+ if ((selected_count == 1) && layout_data->error_count)
+ {
+ if ((layout_data->category == MP_LAYOUT_TRACK_LIST)
+ && (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST))
+ {
+ mp_util_create_notify(layout_data->ad, GET_STR("IDS_MUSIC_POP_ITEM_NOT_REMOVE"));
+ }
+ else
+ {
+ mp_util_create_notify(layout_data->ad, GET_STR("IDS_MUSIC_POP_UNABLE_TO_DELETE_SELECTED_MUSIC_IS_PLAYING"));
+ }
+ }
+ else if (deleted)
+ {
+ if ((layout_data->category == MP_LAYOUT_TRACK_LIST)
+ && (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST))
+ {
+ mp_util_create_notify(layout_data->ad, GET_SYS_STR("IDS_COM_POP_REMOVED"));
+ }
+ else
+ {
+ mp_util_create_notify(layout_data->ad, GET_SYS_STR("IDS_COM_POP_DELETED"));
+ }
+ }
+ }
+
+ layout_data->ad->edit_in_progress = false;
+
+ if (layout_data->edit_operation == MP_EDIT_ADD_TO_PLAYLIST && layout_data->ad->b_add_tracks)
+ {
+ layout_data->ad->b_add_tracks = FALSE;
+ mp_view_layout_reset_select_all(layout_data);
+ elm_toolbar_item_selected_set(layout_data->ad->library->ctltab_plist, EINA_TRUE);
+
+ if (selected_count)
+ mp_util_create_notify(ad, GET_STR("IDS_MUSIC_POP_ADDED"));
+ }
+
+}
+
+void
+mp_edit_view_excute_edit(mp_layout_data_t * layout_data, mp_edit_operation_t edit_operation)
+{
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ Elm_Object_Item *first_item = elm_genlist_first_item_get(layout_data->genlist);
+ MP_CHECK(first_item);
+ layout_data->current_edit_item = first_item;
+
+ if (layout_data->edit_idler)
+ {
+ ecore_idler_del(layout_data->edit_idler);
+ layout_data->edit_idler = NULL;
+ }
+
+ layout_data->selected_count = layout_data->checked_count;
+ layout_data->error_count = 0;
+ layout_data->group_track_handle = NULL;
+ layout_data->group_item_delete_error = false;
+ layout_data->edit_operation = edit_operation;
+
+ if (edit_operation == MP_EDIT_ADD_TO_PLAYLIST)
+ {
+ audio_svc_count_playlist_item(layout_data->ad->media_svc_handle, layout_data->edit_playlist_id, NULL, NULL,
+ &layout_data->playlist_track_count);
+ DEBUG_TRACE("number of tracks in playlist: %d", layout_data->playlist_track_count);
+ if (layout_data->playlist_track_count >= MP_PLAYLIST_MAX_ITEM_COUNT)
+ {
+ if (layout_data->ad->b_add_tracks)
+ {
+ layout_data->ad->b_add_tracks = FALSE;
+ mp_view_layout_reset_select_all(layout_data);
+ elm_toolbar_item_selected_set(layout_data->ad->library->ctltab_plist, EINA_TRUE);
+ }
+ char *fmt_str = GET_STR("IDS_MUSIC_POP_UNABLE_TO_ADD_MORE_THAN_PD_MUSIC_FILE");
+ char *noti_str = g_strdup_printf(fmt_str, MP_PLAYLIST_MAX_ITEM_COUNT);
+ mp_util_create_notify(layout_data->ad, noti_str);
+ IF_FREE(noti_str);
+ return;
+ }
+ }
+
+ layout_data->edit_idler = ecore_idler_add(_mp_edit_view_edit_idler_cb, layout_data);
+ if (edit_operation == MP_EDIT_ADD_TO_PLAYLIST)
+ mp_popup_create(layout_data->ad->win_main, MP_POPUP_PROGRESS, GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), layout_data,
+ _mp_edit_view_progress_popup_response_cb, layout_data->ad);
+ else
+ {
+ DEBUG_TRACE("layout_data->category=%d=====layout_data->view_data->view_type=%d\n",
+ layout_data->category, layout_data->view_data->view_type);
+ if ((layout_data->category == MP_LAYOUT_TRACK_LIST)
+ && (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST))
+ {
+ mp_popup_create(layout_data->ad->win_main, MP_POPUP_PROGRESS, GET_SYS_STR("IDS_COM_SK_REMOVE"), layout_data,
+ _mp_edit_view_progress_popup_response_cb, layout_data->ad);
+ }
+ else
+ {
+ mp_popup_create(layout_data->ad->win_main, MP_POPUP_PROGRESS, GET_SYS_STR("IDS_COM_OPT_DELETE"), layout_data,
+ _mp_edit_view_progress_popup_response_cb, layout_data->ad);
+ }
+ }
+ layout_data->ad->edit_in_progress = true;
+
+}
+
+static void
+_mp_edit_view_excute_delete_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ evas_object_del(obj);
+ MP_CHECK(layout_data->ad);
+ layout_data->ad->popup_delete = NULL;
+
+ if ((int)event_info == MP_POPUP_NO)
+ {
+ return;
+ }
+
+ if (layout_data->genlist) {
+ int count = elm_genlist_items_count(layout_data->genlist);
+ evas_object_data_set(layout_data->genlist, "item_count_before_delete", (void *)count);
+ }
+
+ mp_edit_view_excute_edit(layout_data, MP_EDIT_DELETE);
+
+ endfunc;
+ return;
+}
+
+void
+mp_edit_view_cencel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = NULL;
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ ad = layout_data->ad;
+
+ if (layout_data->ad->notify)
+ evas_object_del(layout_data->ad->notify);
+
+ mp_view_layout_set_edit_mode(layout_data, false);
+ mp_util_unset_rename(layout_data); /* Cancel the rename mode */
+
+}
+
+void
+mp_edit_view_delete_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = NULL;
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ if (layout_data->checked_count <= 0)
+ {
+ mp_widget_text_popup(layout_data->ad, GET_STR("IDS_MUSIC_POP_NOTHING_SELECTED"));
+ return;
+ }
+
+ ad = layout_data->ad;
+
+ Evas_Object *popup = elm_popup_add(ad->win_main);
+ evas_object_data_set(popup, "layout_data", layout_data);
+ ad->popup_delete = popup;
+
+ evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ if ((layout_data->category == MP_LAYOUT_TRACK_LIST)
+ && (layout_data->view_data->view_type == MP_VIEW_TYPE_PLAYLIST))
+ {
+ mp_popup_desc_set(popup, GET_STR("IDS_MUSIC_POP_REMOVE_Q"));
+ }
+ else
+ {
+ mp_popup_desc_set(popup, GET_SYS_STR("IDS_COM_POP_DELETE_Q"));
+ }
+ mp_popup_set_response_cb(popup, _mp_edit_view_excute_delete_cb, layout_data);
+ mp_popup_button_set(popup, "button1", GET_SYS_STR("IDS_COM_SK_YES"), MP_POPUP_YES);
+ mp_popup_button_set(popup, "button2", GET_SYS_STR("IDS_COM_SK_NO"), MP_POPUP_NO);
+
+ evas_object_show(popup);
+
+}
+
+void
+mp_edit_view_genlist_sel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is NULL !!!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ Elm_Object_Item *gli = (Elm_Object_Item *) event_info;
+ elm_genlist_item_selected_set(gli, FALSE);
+
+ if (elm_genlist_item_flip_get(gli))
+ {
+ return;
+ }
+
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) elm_object_item_data_get(gli);
+ MP_CHECK(item);
+ item->checked = !item->checked;
+
+ if (item->checked)
+ layout_data->checked_count++;
+ else
+ layout_data->checked_count--;
+
+ if (layout_data->select_all_layout)
+ {
+ if (layout_data->item_count == layout_data->checked_count)
+ layout_data->select_all_checked = EINA_TRUE;
+ else
+ layout_data->select_all_checked = EINA_FALSE;
+
+ elm_check_state_pointer_set(layout_data->select_all_checkbox, &layout_data->select_all_checked);
+ }
+
+ //elm_genlist_item_update(item->it);
+ elm_genlist_item_fields_update(item->it, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT);
+ mp_util_create_selectioninfo_with_count(layout_data->ad, layout_data->checked_count);
+ mp_common_set_title_button_sensitivity(layout_data, layout_data->checked_count);
+}
+
+Evas_Object *
+mp_edit_view_create(view_data_t * view_data)
+{
+ DEBUG_TRACE("");
+ MP_CHECK_NULL(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ int reorder = FALSE;
+
+ mp_common_hide_search_ise_context(view_data);
+
+ Evas_Object *top_view = mp_view_manager_get_last_view_layout(view_data->ad);
+ mp_retvm_if(!top_view, NULL, "top view must exist...");
+ mp_layout_data_t *layout_data = evas_object_data_get(top_view, "layout_data");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if (layout_data->category == MP_LAYOUT_TRACK_LIST && layout_data->track_type == AUDIO_SVC_TRACK_BY_PLAYLIST)
+ reorder = TRUE;
+
+ mp_view_layout_set_layout_data(top_view, MP_LAYOUT_EDIT_MODE, TRUE, MP_LAYOUT_REORDER_MODE, reorder, -1);
+
+ mp_view_layout_set_edit_mode(layout_data, true);
+
+ char *title = NULL;
+ title = _mp_edit_view_get_view_title(layout_data);
+
+ mp_view_manager_set_title_and_buttons(view_data, title, layout_data);
+ mp_common_set_title_button_sensitivity(layout_data, 0);
+
+ return NULL;
+
+}
diff --git a/src/view/mp-group-view.c b/src/view/mp-group-view.c
new file mode 100755
index 0000000..00cbc02
--- /dev/null
+++ b/src/view/mp-group-view.c
@@ -0,0 +1,467 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-library.h"
+#include "mp-player-debug.h"
+#include "mp-common.h"
+#include "music.h"
+#include "mp-view-layout.h"
+#include "mp-search.h"
+#include "mp-menu.h"
+#include "mp-edit-view.h"
+#include "mp-util.h"
+#include "mp-widget.h"
+
+static void _mp_group_view_push_group_content(view_data_t * view_data, Evas_Object * content);
+static void _mp_group_view_push_item_content(view_data_t * view_data, Evas_Object * content, char *title);
+
+static Elm_Genlist_Item_Class g_track_class_sweep = {
+ .item_style = "music_player/1icon.3text",
+ .func.text_get = mp_common_track_list_label_get,
+ .func.content_get = mp_common_track_list_icon_get,
+};
+
+static Elm_Genlist_Item_Class g_aa_track_class_sweep = {
+ .item_style = "music_player/2text",
+ .func.text_get = mp_common_track_list_label_get,
+ .func.content_get = mp_common_track_list_icon_get,
+};
+
+static int
+_mp_group_view_get_list_type_by_group_type(int type)
+{
+ int list_type = 0;
+ switch (type)
+ {
+ case AUDIO_SVC_GROUP_BY_ALBUM:
+ list_type = AUDIO_SVC_TRACK_BY_ALBUM;
+ break;
+ case AUDIO_SVC_GROUP_BY_ARTIST:
+ list_type = AUDIO_SVC_TRACK_BY_ARTIST;
+ break;
+ case AUDIO_SVC_GROUP_BY_ARTIST_ALBUM:
+ list_type = AUDIO_SVC_TRACK_BY_ARTIST_ALBUM;
+ break;
+ case AUDIO_SVC_GROUP_BY_GENRE:
+ list_type = AUDIO_SVC_TRACK_BY_GENRE;
+ break;
+ case AUDIO_SVC_GROUP_BY_YEAR:
+ list_type = AUDIO_SVC_TRACK_BY_YEAR;
+ break;
+ case AUDIO_SVC_GROUP_BY_COMPOSER:
+ list_type = AUDIO_SVC_TRACK_BY_COMPOSER;
+ break;
+
+ default:
+ WARN_TRACE("Unhandled type: %d", type);
+ }
+ return list_type;
+}
+
+static Evas_Object *
+_mp_group_create_detail_view_layout(view_data_t * view_data, char *name, audio_svc_group_type_e type)
+{
+ int list_type = 0;
+ int category = MP_LAYOUT_TRACK_LIST;
+ Elm_Genlist_Item_Class *itc = NULL;
+
+ MP_CHECK_NULL(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ Evas_Object *layout = mp_view_layout_create(view_data->navibar, view_data, MP_VIEW_MODE_DEFAULT);
+ mp_assert(layout);
+
+ list_type = _mp_group_view_get_list_type_by_group_type(type);
+
+ if (AUDIO_SVC_TRACK_BY_ARTIST == list_type
+ || AUDIO_SVC_TRACK_BY_ALBUM == list_type) {
+ itc = &g_aa_track_class_sweep;
+ } else {
+ itc = &g_track_class_sweep;
+ }
+
+ mp_genlist_cb_t genlist_cbs;
+ memset(&genlist_cbs, 0, sizeof(mp_genlist_cb_t));
+ genlist_cbs.selected_cb = mp_common_track_genlist_sel_cb;
+
+ mp_view_layout_set_layout_data(layout,
+ MP_LAYOUT_CATEGORY_TYPE, category,
+ MP_LAYOUT_TRACK_LIST_TYPE, list_type,
+ MP_LAYOUT_TYPE_STR, name,
+ MP_LAYOUT_LIST_CB, &genlist_cbs, MP_LAYOUT_GENLIST_ITEMCLASS, itc, -1);
+
+ mp_view_layout_update(layout);
+
+ return layout;
+
+}
+
+bool
+mp_group_view_create_by_group_name(Evas_Object * obj, char *group_name, audio_svc_group_type_e type)
+{
+ startfunc;
+
+ view_data_t *view_data = evas_object_data_get(obj, "view_data");
+ MP_CHECK_FALSE(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ Evas_Object *view_layout = _mp_group_create_detail_view_layout(view_data, group_name, type);
+ _mp_group_view_push_item_content(view_data, view_layout, group_name);
+
+ endfunc;
+
+ return true;
+}
+
+void
+mp_group_view_group_list_select_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ int ret = AUDIO_SVC_ERROR_NONE;
+ int index = (int)data;
+ char *name = NULL;
+ int size = 0;
+
+ Elm_Object_Item *gli = (Elm_Object_Item *) event_info;
+ MP_CHECK(gli);
+ elm_genlist_item_selected_set(gli, FALSE);
+
+ mp_genlist_item_data_t *gli_data = elm_object_item_data_get(gli);
+ MP_CHECK(gli_data);
+
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is NULL !!!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ if (layout_data->edit_mode)
+ {
+ mp_edit_view_genlist_sel_cb(data, obj, event_info);
+ return;
+ }
+
+ view_data_t *view_data = evas_object_data_get(layout_data->navibar, "view_data");
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ if (layout_data->view_mode == MP_VIEW_MODE_SEARCH)
+ {
+ layout_data->group_type = gli_data->group_type;
+ if (gli_data->group_type == AUDIO_SVC_GROUP_BY_ARTIST)
+ ret = audio_svc_group_item_get_val(layout_data->artist_handle, index,
+ AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+ else if (gli_data->group_type == AUDIO_SVC_GROUP_BY_ALBUM)
+ ret = audio_svc_group_item_get_val(layout_data->album_handle, index,
+ AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+ else
+ {
+ ERROR_TRACE("never should be here...");
+ return;
+ }
+
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+ mp_retm_if(name == NULL, "Fail to get value");
+ }
+ else
+ {
+ ret = audio_svc_group_item_get_val(layout_data->svc_handle, index, AUDIO_SVC_GROUP_ITEM_MAIN_INFO,
+ &name, &size, -1);
+
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+ mp_retm_if(name == NULL, "Fail to get value");
+ }
+
+
+ DEBUG_TRACE("name: %s, type: %d", name, layout_data->group_type);
+
+ Evas_Object *view_layout = NULL;
+ view_layout = _mp_group_create_detail_view_layout(view_data, name, layout_data->group_type);
+
+ mp_util_reset_genlist_mode_item(layout_data->genlist);
+
+ _mp_group_view_push_item_content(view_data, view_layout, name);
+
+}
+
+static void
+_mp_group_view_push_group_content(view_data_t * view_data, Evas_Object * content)
+{
+ char *title = NULL;
+
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_manager_push_view_content(view_data, content, MP_VIEW_CONTENT_LIST);
+
+ if (view_data->view_type == MP_VIEW_TYPE_ALBUM)
+ title = GET_STR("IDS_MUSIC_TAB4_ALBUMS");
+ else if (view_data->view_type == MP_VIEW_TYPE_ARTIST)
+ title = GET_STR("IDS_MUSIC_TAB4_ARTISTS");
+ else if (view_data->view_type == MP_VIEW_TYPE_GENRE)
+ title = GET_STR("IDS_MUSIC_TAB4_GENRES");
+ else if (view_data->view_type == MP_VIEW_TYPE_COMPOSER)
+ title = GET_STR("IDS_MUSIC_TAB4_COMPOSERS");
+ else if (view_data->view_type == MP_VIEW_TYPE_YEAR)
+ title = GET_STR("IDS_MUSIC_TAB4_YEARS");
+ else
+ DEBUG_TRACE("unexpected type: %d", view_data->view_type);
+
+ mp_view_manager_set_title_and_buttons(view_data, title, view_data);
+
+}
+
+static void
+_mp_group_view_push_item_content(view_data_t * view_data, Evas_Object * content, char *title)
+{
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_manager_push_view_content(view_data, content, MP_VIEW_CONTENT_LIST);
+ mp_view_manager_set_title_and_buttons(view_data, title, view_data);
+}
+
+Evas_Object *
+mp_group_view_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+ Evas_Object *icon = NULL;
+
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ MP_CHECK_NULL(item);
+ AudioHandleType *svc_item = (AudioHandleType *) (item->handle);
+
+ mp_retv_if(svc_item == NULL, NULL);
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ char *thumb_name = NULL;
+ int size;
+
+ audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_THUMBNAIL_PATH, &thumb_name, &size, -1);
+
+ if (!strcmp(part, "elm.icon"))
+ {
+ icon = mp_util_create_thumb_icon(obj, thumb_name, MP_LIST_ICON_SIZE, MP_LIST_ICON_SIZE);
+ }
+
+ Evas_Object *check = NULL;
+
+ if (elm_genlist_decorate_mode_get(obj) || layout_data->ad->b_add_tracks)
+ { // if edit mode
+ if (!strcmp(part, "elm.edit.icon.1"))
+ { // swallow checkbox or radio button
+ check = elm_check_add(obj);
+ elm_check_state_pointer_set(check, &item->checked);
+ evas_object_smart_callback_add(check, "changed", mp_common_item_check_changed_cb, item);
+ return check;
+ }
+ }
+
+ return icon;
+}
+
+char *
+mp_group_view_album_list_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ char *name = NULL;
+ int size = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ MP_CHECK_NULL(item);
+ AudioHandleType *svc_item = (AudioHandleType *) (item->handle);
+
+ mp_retv_if(svc_item == NULL, NULL);
+
+ if (!strcmp(part, "elm.text.1"))
+ {
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ if (!name || !strlen(name))
+ name = GET_SYS_STR("IDS_COM_BODY_UNKNOWN");
+ return elm_entry_utf8_to_markup(name);
+
+ }
+ else if (!strcmp(part, "elm.text.2"))
+ {
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_SUB_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ if (!name || !strlen(name))
+ name = GET_SYS_STR("IDS_COM_BODY_UNKNOWN");
+ return strdup(name);
+ }
+ else if (!strcmp(part, "elm.text.3"))
+ {
+ int count = -1;
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+
+ ret = audio_svc_count_list_item(item->media_svc_handle, AUDIO_SVC_TRACK_BY_ALBUM, name, "", "", "", &count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get count");
+ mp_retvm_if(count < 0, NULL, "Fail to get count");
+ return g_strdup_printf("(%d)", count);
+ }
+
+ DEBUG_TRACE("Unusing part: %s", part);
+ return NULL;
+}
+
+char *
+mp_group_view_list_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ char *name = NULL;
+ int size = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ MP_CHECK_NULL(item);
+ AudioHandleType *svc_item = (AudioHandleType *) (item->handle);
+ mp_retv_if(svc_item == NULL, NULL);
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ MP_CHECK_NULL(layout_data);
+
+ if (!strcmp(part, "elm.text.1"))
+ {
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ if (!name || !strlen(name))
+ name = GET_SYS_STR("IDS_COM_BODY_UNKNOWN");
+ if(layout_data->filter_str)
+ {
+ char *markup_name = NULL;
+ bool res = false;
+ markup_name = (char *)mp_util_search_markup_keyword(name, layout_data->filter_str, &res);
+ if(res)
+ return strdup(markup_name);
+ } else
+ return elm_entry_utf8_to_markup(name);
+ }
+ else if (!strcmp(part, "elm.text.2"))
+ {
+ int count = -1;
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+
+ int list_type = _mp_group_view_get_list_type_by_group_type(item->group_type);
+ DEBUG_TRACE("name: %s, list_type: %d", name, list_type);
+ ret = audio_svc_count_list_item(item->media_svc_handle, list_type, name, "", "", "", &count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get count");
+ mp_retvm_if(count < 0, NULL, "Fail to get count");
+ return g_strdup_printf("(%d)", count);
+ }
+
+ return NULL;
+}
+
+static Elm_Genlist_Item_Class g_group_class_sweep = {
+ .item_style = "music_player/1icon.2text",
+ .func.text_get = mp_group_view_list_label_get,
+ .func.content_get = mp_group_view_icon_get,
+};
+
+static Elm_Genlist_Item_Class g_album_class_sweep = {
+ .item_style = "music_player/1icon.3text",
+ .func.text_get = mp_group_view_album_list_label_get,
+ .func.content_get = mp_group_view_icon_get,
+};
+
+static mp_genlist_cb_t g_group_list_cbs = {
+ .selected_cb = mp_group_view_group_list_select_cb,
+};
+
+Evas_Object *
+mp_group_view_create(struct appdata *ad, mp_view_type_t view_type)
+{
+ DEBUG_TRACE("view_type: %d", view_type);
+ int list_type;
+
+ Elm_Genlist_Item_Class *itc;
+
+ Evas_Object *navibar = mp_widget_navigation_new(ad->ctrl_bar, ad);
+
+ view_data_t *view_data = calloc(sizeof(view_data_t), 1);
+ MP_SET_VIEW_DATA_MAGIC(view_data);
+ view_data->ad = ad;
+ view_data->navibar = navibar;
+ view_data->view_type = view_type;
+
+ evas_object_data_set(navibar, "view_data", view_data);
+ Evas_Object *view_layout = mp_view_layout_create(navibar, view_data, MP_VIEW_MODE_DEFAULT);
+
+ if (view_type == MP_VIEW_TYPE_ALBUM)
+ {
+ DEBUG_TRACE("album view");
+ list_type = AUDIO_SVC_GROUP_BY_ALBUM;
+
+ itc = &g_album_class_sweep;
+ }
+ else if (view_type == MP_VIEW_TYPE_ARTIST)
+ {
+ DEBUG_TRACE("artist view");
+ list_type = AUDIO_SVC_GROUP_BY_ARTIST;
+ itc = &g_group_class_sweep;
+ }
+ else if (view_type == MP_VIEW_TYPE_GENRE)
+ {
+ DEBUG_TRACE("genre view");
+ list_type = AUDIO_SVC_GROUP_BY_GENRE;
+ itc = &g_group_class_sweep;
+ }
+ else if (view_type == MP_VIEW_TYPE_COMPOSER)
+ {
+ DEBUG_TRACE("composer view");
+ list_type = AUDIO_SVC_GROUP_BY_COMPOSER;
+ itc = &g_group_class_sweep;
+ }
+ else if (view_type == MP_VIEW_TYPE_YEAR)
+ {
+ DEBUG_TRACE("year view");
+ list_type = AUDIO_SVC_GROUP_BY_YEAR;
+ itc = &g_group_class_sweep;
+ }
+ else
+ {
+ ERROR_TRACE("unexpected type: %d", view_type);
+ evas_object_del(navibar);
+ return NULL;
+ }
+
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_GROUP_LIST,
+ MP_LAYOUT_GROUP_LIST_TYPE, list_type,
+ MP_LAYOUT_LIST_CB, &g_group_list_cbs, MP_LAYOUT_GENLIST_ITEMCLASS, itc, -1);
+ _mp_group_view_push_group_content(view_data, view_layout);
+
+ return navibar;
+}
+
+void
+mp_group_view_destroy(Evas_Object * group_view)
+{
+ DEBUG_TRACE("");
+ evas_object_del(group_view);
+}
+
+void
+mp_group_view_refresh(Evas_Object * group_view)
+{
+ DEBUG_TRACE("");
+ view_data_t *view_data = (view_data_t *) evas_object_data_get(group_view, "view_data");
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_manager_update_list_contents(view_data, TRUE);
+}
diff --git a/src/view/mp-library.c b/src/view/mp-library.c
new file mode 100755
index 0000000..67535fb
--- /dev/null
+++ b/src/view/mp-library.c
@@ -0,0 +1,639 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-library.h"
+#include "mp-setting-ctrl.h"
+#include "mp-player-debug.h"
+#include "mp-common.h"
+#include "music.h"
+#include "mp-track-view.h"
+#include "mp-group-view.h"
+#include "mp-playlist-view.h"
+#include "mp-play-view.h"
+#include "mp-util.h"
+#include "mp-widget.h"
+
+static void _mp_library_init(void *data);
+static Evas_Object *_mp_library_create_layout_main(Evas_Object * parent);
+static Evas_Object *_mp_library_create_control_bar(struct appdata *ad);
+static void _mp_library_controlbar_item_append(struct appdata *ad, mp_setting_menu_t * menu_state);
+static bool _mp_library_check_request_item(struct appdata *ad);
+
+static void
+_mp_library_init(void *data)
+{
+ struct appdata *ad = data;
+
+ ad->library = calloc(1, sizeof(mp_library));
+ if (!ad->library)
+ {
+ ERROR_TRACE("failed to create library object\n");
+ }
+}
+
+static Evas_Object *
+_mp_library_create_layout_main(Evas_Object * parent)
+{
+ Evas_Object *layout;
+
+ mp_retv_if(parent == NULL, NULL);
+ layout = elm_layout_add(parent);
+ mp_retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n");
+
+ elm_layout_theme_set(layout, "layout", "application", "default");
+ evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_win_resize_object_add(parent, layout);
+
+ evas_object_show(layout);
+
+ return layout;
+}
+
+static Evas_Object *
+_mp_library_create_control_bar(struct appdata *ad)
+{
+ Evas_Object *obj;
+
+ obj = elm_toolbar_add(ad->controlbar_layout);
+ elm_toolbar_shrink_mode_set(obj, ELM_TOOLBAR_SHRINK_EXPAND);
+ mp_retvm_if(obj == NULL, NULL, "Fail to create control bar");
+ elm_object_style_set(obj, "music/tabbar");
+ elm_toolbar_select_mode_set(obj, ELM_OBJECT_SELECT_MODE_ALWAYS);
+
+ mp_setting_menu_t menu_state;
+ mp_setting_menu_get_state(&menu_state);
+
+ ad->ctrl_bar = obj;
+ _mp_library_controlbar_item_append(ad, &menu_state);
+ evas_object_show(obj);
+
+ elm_object_part_content_set(ad->controlbar_layout, "elm.swallow.controlbar", obj);
+
+ return obj;
+}
+
+static void
+_mp_library_menu_changed(mp_setting_menu_t * menu_state, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+
+ Evas_Object *obj;
+ obj = ad->ctrl_bar;
+
+ MP_CHECK(ad->library->ctltab_songs);
+ MP_CHECK(obj);
+
+ DEBUG_TRACE("loadtype=%d", ad->loadtype);
+ if (ad->loadtype == LOAD_TRACK)
+ {
+ DEBUG_TRACE("Don't need to update menu...");
+ return;
+ }
+
+ ad->music_setting_change_flag = true;
+ ad->library->albums = menu_state->albums;
+ ad->library->artists = menu_state->artists;
+ ad->library->genres = menu_state->genres;
+ ad->library->composers = menu_state->composers;
+ ad->library->years = menu_state->years;
+
+ mp_util_set_library_controlbar_items(ad);
+}
+
+static void
+_mp_library_controlbar_item_append(struct appdata *ad, mp_setting_menu_t * menu_state)
+{
+ DEBUG_TRACE_FUNC();
+
+ Evas_Object *obj;
+
+ obj = ad->ctrl_bar;
+
+ ad->library->ctltab_songs =
+ elm_toolbar_item_append(obj, MP_CTRBAR_ICON_SONGS, GET_STR(STR_MP_ALL_TRACKS), mp_library_view_change_cb, ad);
+
+ ad->library->ctltab_plist =
+ elm_toolbar_item_append(obj, MP_CTRBAR_ICON_PLAYLIST, GET_STR(STR_MP_PLAYLISTS), mp_library_view_change_cb, ad);
+
+ if (menu_state->albums)
+ ad->library->ctltab_album =
+ elm_toolbar_item_append(obj, MP_CTRBAR_ICON_ALBUM, GET_STR(STR_MP_ALBUMS), mp_library_view_change_cb, ad);
+
+ if (menu_state->artists)
+ ad->library->ctltab_artist =
+ elm_toolbar_item_append(obj, MP_CTRBAR_ICON_ARTIST, GET_STR(STR_MP_ARTISTS), mp_library_view_change_cb, ad);
+
+ if (menu_state->genres)
+ ad->library->ctltab_genres =
+ elm_toolbar_item_append(obj, MP_CTRBAR_ICON_GENRE, GET_STR(STR_MP_GENRES), mp_library_view_change_cb, ad);
+
+ if (menu_state->composers)
+ ad->library->ctltab_composer =
+ elm_toolbar_item_append(obj, MP_CTRBAR_ICON_COMPOSER, GET_STR(STR_MP_COMPOSERS), mp_library_view_change_cb, ad);
+
+ if (menu_state->years)
+ ad->library->ctltab_year =
+ elm_toolbar_item_append(obj, MP_CTRBAR_ICON_YEAR, GET_STR(STR_MP_YEARS), mp_library_view_change_cb, ad);
+
+ mp_setting_menu_set_callback(_mp_library_menu_changed, ad);
+
+}
+
+static bool
+_mp_library_load_request_view(void *data, Evas_Object * navi_bar)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ if (!_mp_library_check_request_item(ad))
+ return false;
+
+ if (ad->request_group_name)
+ {
+ mp_debug("group name = %s", ad->request_group_name);
+ mp_group_view_create_by_group_name(navi_bar, ad->request_group_name, ad->request_group_type);
+ IF_FREE(ad->request_group_name);
+ }
+ else if (ad->request_play_id > -1)
+ {
+ mp_debug("play list id = %d", ad->request_play_id);
+ mp_playlist_view_create_by_id(navi_bar, ad->request_play_id);
+ ad->request_play_id = -1;
+ }
+ else
+ {
+ mp_debug("That is not request mode ");
+ return FALSE;
+ }
+
+ endfunc;
+
+ return true;
+}
+
+static void
+_mp_library_show_selected_view(struct appdata *ad, const char *label)
+{
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+ MP_CHECK(label);
+
+ Evas_Object *navi_bar = NULL;
+ view_data_t *view_data = NULL;
+
+ DEBUG_TRACE("label: %s", label);
+
+ if (ad->notify != NULL)
+ {
+ evas_object_del(ad->notify);
+ }
+ if (ad->notify_layout != NULL)
+ {
+ evas_object_del(ad->notify_layout);
+ }
+
+ ad->notify = NULL;
+ ad->notify_layout = NULL;
+
+ if (ad->library->cur_view)
+ {
+ mp_view_manager_unswallow_info_ug_layout(ad);
+ evas_object_del(ad->library->cur_view);
+ ad->library->cur_view = NULL;
+ mp_view_manager_clear(ad);
+ }
+
+ if (!strcmp(label, GET_STR(STR_MP_ALL_TRACKS)))
+ {
+ navi_bar = mp_track_view_create(ad);
+ mp_track_view_update_title_button(navi_bar);
+ }
+ else if (!strcmp(label, GET_STR(STR_MP_ALBUMS)))
+ {
+ navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_ALBUM);
+ }
+ else if (!strcmp(label, GET_STR(STR_MP_ARTISTS)))
+ {
+ navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_ARTIST);
+ }
+ else if (!strcmp(label, GET_STR(STR_MP_GENRES)))
+ {
+ navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_GENRE);
+ }
+ else if (!strcmp(label, GET_STR(STR_MP_YEARS)))
+ {
+ navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_YEAR);
+ }
+ else if (!strcmp(label, GET_STR(STR_MP_COMPOSERS)))
+ {
+ navi_bar = mp_group_view_create(ad, MP_VIEW_TYPE_COMPOSER);
+ }
+ else if (!strcmp(label, GET_STR(STR_MP_PLAYLISTS)))
+ {
+ navi_bar = mp_playlist_view_create(ad, MP_VIEW_TYPE_PLAYLIST);
+ }
+ else
+ {
+ ERROR_TRACE("no tab item");
+ return;
+ }
+
+ if (strcmp(label, GET_STR(STR_MP_ALL_TRACKS)))
+ {
+ ad->b_add_tracks = FALSE;
+ }
+
+ elm_object_part_content_set(ad->controlbar_layout, "elm.swallow.content", navi_bar);
+ ad->library->cur_view = navi_bar;
+
+ if (!_mp_library_load_request_view(ad, navi_bar))
+ {
+ DEBUG_TRACE("Update default layout...");
+ view_data = (view_data_t *) evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ Evas_Object *view_layout = mp_view_manager_get_last_view_layout(ad);
+ if (view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
+ {
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ if (layout_data)
+ mp_playlist_view_update_navibutton(layout_data);
+ }
+
+ mp_view_layout_update(view_layout);
+ }
+
+ evas_object_show(navi_bar);
+}
+
+void
+mp_library_view_change_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ Elm_Object_Item *it;
+
+ MP_CHECK(ad);
+ DEBUG_TRACE_FUNC();
+
+ it = elm_toolbar_selected_item_get(obj);
+ mp_retm_if(it == NULL, "tab item is NULL");
+ const char *label = elm_object_item_text_get(it);
+ mp_retm_if(label == NULL, "label is NULL");
+
+ _mp_library_show_selected_view(ad, label);
+
+ ad->navi_effect_in_progress = false;
+}
+
+
+static Elm_Object_Item *
+_mp_library_get_request_control_item(struct appdata *ad)
+{
+ Elm_Object_Item *select_request_item = NULL;
+
+ if (ad->loadtype == LOAD_DEFAULT)
+ {
+ select_request_item = ad->library->ctltab_songs;
+ }
+ else if (ad->loadtype == LOAD_PLAYLIST)
+ {
+ select_request_item = ad->library->ctltab_plist;
+ }
+ else if (ad->loadtype == LOAD_GROUP)
+ {
+ mp_setting_menu_t menu_state;
+ mp_setting_menu_get_state(&menu_state);
+
+ if (ad->request_group_type == AUDIO_SVC_GROUP_BY_ARTIST)
+ {
+ if (menu_state.artists)
+ select_request_item = ad->library->ctltab_artist;
+ }
+ else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_ALBUM)
+ {
+ if (menu_state.albums)
+ select_request_item = ad->library->ctltab_album;
+ }
+ else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_GENRE)
+ {
+ if (menu_state.genres)
+ select_request_item = ad->library->ctltab_genres;
+ }
+ else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_COMPOSER)
+ {
+ if (menu_state.composers)
+ select_request_item = ad->library->ctltab_composer;
+ }
+ else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_YEAR)
+ {
+ if (menu_state.years)
+ select_request_item = ad->library->ctltab_year;
+ }
+ else
+ {
+ mp_error("can not support that value");
+ }
+ }
+
+ return select_request_item;
+}
+
+static bool
+_mp_library_check_request_item(struct appdata *ad)
+{
+ startfunc;
+
+ char *popup_text = NULL;
+ int count = -1;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ MP_CHECK_FALSE(ad);
+
+ if (!ad->request_group_name && ad->request_play_id > -1)
+ {
+ char plst_name[AUDIO_SVC_PLAYLIST_NAME_SIZE] = "";
+ ret = audio_svc_get_playlist_name_by_playlist_id(ad->media_svc_handle, ad->request_play_id, plst_name,
+ AUDIO_SVC_PLAYLIST_NAME_SIZE);
+
+ if (!(ret == AUDIO_SVC_ERROR_NONE && g_strcmp0(plst_name, "")))
+ {
+ IF_FREE(ad->request_group_name);
+ ad->request_play_id = -1;
+ mp_error("removed play list");
+ popup_text = g_strdup_printf(GET_STR("IDS_MUSIC_BODY_NO_PLAYLISTS"));
+ }
+ }
+ else if (ad->request_group_name)
+ {
+ audio_svc_track_type_e list_type = AUDIO_SVC_TRACK_ALL;
+
+ switch (ad->request_group_type)
+ {
+ case AUDIO_SVC_GROUP_BY_ALBUM:
+ DEBUG_TRACE("create album detail view");
+ list_type = AUDIO_SVC_TRACK_BY_ALBUM;
+ break;
+ case AUDIO_SVC_GROUP_BY_ARTIST:
+ DEBUG_TRACE("create artist detail view");
+ list_type = AUDIO_SVC_TRACK_BY_ARTIST;
+ break;
+ case AUDIO_SVC_GROUP_BY_GENRE:
+ DEBUG_TRACE("create genre detail view");
+ list_type = AUDIO_SVC_TRACK_BY_GENRE;
+ break;
+ case AUDIO_SVC_GROUP_BY_YEAR:
+ DEBUG_TRACE("create year detail view");
+ list_type = AUDIO_SVC_TRACK_BY_YEAR;
+ break;
+ case AUDIO_SVC_GROUP_BY_COMPOSER:
+ DEBUG_TRACE("create composer detail view");
+ list_type = AUDIO_SVC_TRACK_BY_COMPOSER;
+ break;
+ default:
+ break;
+ }
+
+ ret = audio_svc_count_list_item(ad->media_svc_handle, list_type, ad->request_group_name, NULL, NULL, NULL, &count);
+
+ mp_debug("group cout %d", count);
+
+ if (!(ret == AUDIO_SVC_ERROR_NONE && count > 0))
+ {
+ mp_error("removed group");
+ char *fmt = GET_STR("IDS_MUSIC_POP_PS_REMOVED");
+ popup_text = g_strdup_printf(fmt, ad->request_group_name);
+ IF_FREE(ad->request_group_name);
+ }
+
+ }
+ else if (ad->request_playing_path)
+ {
+ if (mp_util_check_uri_available(ad->request_playing_path))
+ {
+ mp_debug("http uri path");
+
+ } else if (!mp_check_file_exist(ad->request_playing_path))
+ {
+ mp_error("removed file");
+ IF_FREE(ad->request_playing_path);
+ popup_text = g_strdup(GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST"));
+ }
+ }
+
+ if (popup_text)
+ {
+ mp_widget_text_popup(ad, popup_text);
+ IF_FREE(popup_text);
+ return false;
+ }
+
+ return true;
+}
+
+static char *
+_mp_library_get_control_tab_label(struct appdata *ad)
+{
+ MP_CHECK_NULL(ad);
+ char *label = NULL;
+ if (ad->request_group_type == AUDIO_SVC_GROUP_BY_ARTIST)
+ {
+ label = GET_STR(STR_MP_ARTISTS);
+ }
+ else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_ALBUM)
+ {
+ label = GET_STR(STR_MP_ALBUMS);
+ }
+ else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_GENRE)
+ {
+ label = GET_STR(STR_MP_GENRES);
+ }
+ else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_COMPOSER)
+ {
+ label = GET_STR(STR_MP_COMPOSERS);
+ }
+ else if (ad->request_group_type == AUDIO_SVC_GROUP_BY_YEAR)
+ {
+ label = GET_STR(STR_MP_YEARS);
+ }
+ else
+ {
+ mp_error("can not support that value");
+ }
+ return label;
+}
+
+bool
+mp_library_load(struct appdata * ad)
+{
+ startfunc;
+
+ MP_CHECK_FALSE(ad);
+
+ if (!ad->base_layout_main)
+ {
+ mp_library_create(ad);
+ }
+ else
+ {
+ Elm_Object_Item *selected_item = NULL;
+ Elm_Object_Item *select_request_item = NULL;
+
+ if (!ad->ctrl_bar)
+ _mp_library_create_control_bar(ad);
+ else
+ selected_item = elm_toolbar_selected_item_get(ad->ctrl_bar);
+
+ select_request_item = _mp_library_get_request_control_item(ad);
+
+ if (selected_item && selected_item == select_request_item)
+ {
+ view_data_t *view_data = NULL;
+
+ if (ad->library->cur_view)
+ {
+ view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK_FALSE(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ mp_view_manager_pop_view_content(view_data, TRUE, TRUE);
+
+ _mp_library_load_request_view(ad, ad->library->cur_view);
+ }
+ else
+ mp_error("invalid cur_view");
+ }
+ else if (select_request_item)
+ {
+ elm_toolbar_item_selected_set(select_request_item, EINA_TRUE);
+ }
+ else
+ {
+ DEBUG_TRACE("Tab is not exist for selected category...");
+ if (ad->loadtype == LOAD_GROUP)
+ {
+ char *label = _mp_library_get_control_tab_label(ad);
+ MP_CHECK_FALSE(label);
+ _mp_library_show_selected_view(ad, label);
+ }
+ else
+ ERROR_TRACE("It shouldn't be here..");
+ }
+ }
+
+ endfunc;
+
+ return true;
+}
+
+
+void
+mp_library_create(struct appdata *ad)
+{
+ startfunc;
+
+ _mp_library_init(ad);
+
+ ad->base_layout_main = _mp_library_create_layout_main(ad->win_main);
+ mp_retm_if(ad->base_layout_main == NULL, "library view layout is not initialized");
+
+ ad->controlbar_layout = mp_common_load_edj(ad->base_layout_main, EDJ_NAME, "control_layout");
+ MP_CHECK(ad->controlbar_layout);
+ mp_library_controlbar_visible_set(ad, true);
+
+ elm_object_part_content_set(ad->base_layout_main, "elm.swallow.content", ad->controlbar_layout);
+
+ _mp_library_create_control_bar(ad);
+
+ if(ad->loadtype == LOAD_TRACK)
+ {
+ DEBUG_TRACE("Don't need to select control tab..");
+ return;
+ }
+
+ Elm_Object_Item *reqeust_item = _mp_library_get_request_control_item(ad);
+ if (reqeust_item)
+ {
+ elm_toolbar_item_selected_set(reqeust_item, EINA_TRUE);
+ }
+ else
+ {
+ char *label = _mp_library_get_control_tab_label(ad);
+ if (label)
+ _mp_library_show_selected_view(ad, label);
+ else
+ elm_toolbar_item_selected_set(ad->library->ctltab_songs, EINA_TRUE);
+ }
+
+ endfunc;
+
+}
+
+void
+mp_library_update_view(struct appdata *ad)
+{
+ MP_CHECK(ad);
+ MP_CHECK(ad->library);
+ Evas_Object *cur_view = ad->library->cur_view;
+ MP_CHECK(ad->library->cur_view);
+
+ view_data_t *cur_view_data = evas_object_data_get(cur_view, "view_data");
+ MP_CHECK(cur_view_data);
+
+ MP_CHECK_VIEW_DATA(cur_view_data);
+ mp_view_manager_update_list_contents(cur_view_data, FALSE);
+}
+
+void
+mp_library_now_playing_hide(struct appdata *ad)
+{
+ if (ad->show_now_playing)
+ {
+ ad->show_now_playing = FALSE;
+ view_data_t *view_data = (view_data_t *) evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_manager_set_now_playing(view_data, FALSE);
+ }
+}
+
+void
+mp_library_now_playing_set(struct appdata *ad)
+{
+ view_data_t *view_data = (view_data_t *) evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ if (!ad->show_now_playing)
+ {
+ ad->show_now_playing = TRUE;
+ }
+
+ mp_view_manager_set_now_playing(view_data, TRUE);
+}
+
+void
+mp_library_controlbar_visible_set(struct appdata *ad, bool visible)
+{
+ MP_CHECK(ad);
+ if(visible)
+ edje_object_signal_emit(_EDJ(ad->controlbar_layout), "show.control", "music_app");
+ else
+ edje_object_signal_emit(_EDJ(ad->controlbar_layout), "hide.control", "music_app");
+}
+
diff --git a/src/view/mp-play-view.c b/src/view/mp-play-view.c
new file mode 100755
index 0000000..837ad03
--- /dev/null
+++ b/src/view/mp-play-view.c
@@ -0,0 +1,2516 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <glib.h>
+#include "music.h"
+#include "mp-play-view.h"
+#include "mp-player-control.h"
+#include "mp-play.h"
+#include "mp-item.h"
+#include "mp-player-drm.h"
+#include "mp-smart-event-box.h"
+#include "mp-file-tag-info.h"
+#include "mp-common.h"
+#include "mp-player-mgr.h"
+#include "mp-player-debug.h"
+#include "mp-play-list.h"
+#include "mp-util.h"
+#include "mp-library.h"
+#include "mp-app.h"
+#include "mp-menu.h"
+#include "mp-widget.h"
+#include "mp-popup.h"
+#include "mp-streaming-mgr.h"
+
+#define HD_ALBUM_IMAGE_H_SCALE 720/1280
+
+#define CTR_EDJ_SIG_SRC "ctrl_edj"
+#define CTR_PROG_SIG_SRC "ctrl_prog"
+#define PLAYVIEW_TRANSIT_TIME (0.35)
+#define FAVOUR_LONG_PRESS_TIME (1.5)
+
+static void _mp_play_progress_val_set(void *data, double position);
+static bool _mp_play_view_init_progress_bar(void *data);
+static bool _mp_play_view_transit_by_item(void *data, struct music_list_item *it, bool move_left);
+static void _mp_play_view_destory_cb(void *data, Evas * e, Evas_Object * obj, void *event_info);
+static Evas_Object *_mp_play_view_create_ctrl_layout(void *data, Evas_Object * parents, Evas_Object ** progress,
+ bool remove_signal);
+static void _mp_play_view_start_request(void *data, Evas_Object * obj, void *event_info);
+static void _mp_play_view_glist_free_cb(gpointer data);
+
+
+static void
+_mp_play_view_init(void *data)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ ad->show_optional_menu = FALSE;
+
+ playing_view->layout = NULL;
+ playing_view->play_view = NULL;
+ playing_view->play_control = NULL;
+ playing_view->play_menu = NULL; //information, shuffle, repeat
+ playing_view->play_progressbar = NULL;
+ playing_view->play_info = NULL;
+
+ playing_view->albumart_bg = NULL;
+ playing_view->flick_direction = 0;
+ ad->volume_long_pressed = false;
+
+ playing_view->play_view_next = NULL;
+ playing_view->progressbar_timer = NULL;
+
+ playing_view->transition_state = false;
+
+ endfunc;
+
+ return;
+}
+
+void
+mp_play_view_back_clicked_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
+
+ DEBUG_TRACE("ad->loadtype: %d", ad->loadtype);
+
+ //reset mute flag
+ ad->mute_flag = false;
+ if (ad->playing_view)
+ mp_evas_object_del(ad->playing_view->play_icon);
+
+ {
+ MP_CHECK(ad->library);
+ view_data_t *view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK(view_data);
+ mp_view_manager_pop_view_content(view_data, FALSE, FALSE);
+
+ if (ad->music_setting_change_flag)
+ {
+ mp_util_set_library_controlbar_items(ad);
+ ad->music_setting_change_flag = false;
+ }
+ }
+ if (ad->buffering_popup)
+ mp_streaming_mgr_buffering_popup_control(ad, false);
+ evas_object_smart_callback_del(obj, "clicked", mp_play_view_back_clicked_cb);
+
+ return;
+}
+
+static void
+_mp_play_view_clear_animator(struct appdata *ad)
+{
+ MP_CHECK(ad);
+ if(ad->minfo_ani)
+ {
+ ecore_animator_del(ad->minfo_ani);
+ ad->minfo_ani = NULL;
+ }
+
+ if(ad->minfo_list)
+ {
+ g_list_free_full(ad->minfo_list, _mp_play_view_glist_free_cb);
+ ad->minfo_list = NULL;
+ }
+}
+
+void
+mp_play_view_info_back_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
+ mp_playing_view *playing_view = ad->playing_view;
+ _mp_play_view_clear_animator(ad);
+ view_data_t *view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+ mp_view_manager_pop_view_content(view_data, FALSE, FALSE);
+ if (playing_view)
+ playing_view->play_info = NULL;
+ endfunc;
+ return;
+}
+
+/* callback function when click "album" image*/
+static void
+_mp_play_view_sb_click_info_albumart(void *data, Evas * e, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ mp_play_view_info_back_cb(ad, NULL, NULL);
+ endfunc;
+}
+
+typedef struct
+{
+ char *header;
+ char *detail;
+}mp_media_info_t;
+
+static char *
+_mp_play_view_info_gl_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ mp_media_info_t *info = (mp_media_info_t *)data;
+
+ if (!g_strcmp0(part, "elm.text.1"))
+ {
+ MP_CHECK_NULL(info);
+ DEBUG_TRACE("%s", info->header);
+ return g_strdup(info->header);
+ }
+ else if (!g_strcmp0(part, "elm.text.2"))
+ {
+ MP_CHECK_NULL(info);
+ return elm_entry_utf8_to_markup(info->detail);
+ }
+
+ return NULL;
+}
+
+static void
+_mp_play_view_info_gl_item_del(void *data, Evas_Object * obj)
+{
+ mp_media_info_t *info = data;
+ MP_CHECK(info);
+ IF_FREE(info->header);
+ IF_FREE(info->detail);
+ free(info);
+}
+
+static Elm_Genlist_Item_Class info_view_info_item_class = {
+ .item_style = "multiline/music_player/info",
+ .func.text_get = _mp_play_view_info_gl_label_get,
+ .func.del = _mp_play_view_info_gl_item_del,
+ .func.content_get = NULL,
+};
+
+static Eina_Bool
+_ecore_animator_cb(void *data)
+{
+ struct appdata *ad = NULL;
+ Elm_Object_Item *item;
+
+ ad = data;
+ MP_CHECK_FALSE(ad);
+
+ if(ad->minfo_list)
+ {
+ ad->minfo_list = g_list_first(ad->minfo_list);
+
+ item = elm_genlist_item_append(ad->minfo_genlist, &info_view_info_item_class,
+ ad->minfo_list->data,
+ NULL,
+ ELM_GENLIST_ITEM_NONE,
+ NULL, NULL);
+ if(item)
+ elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+ ad->minfo_list = g_list_delete_link(ad->minfo_list, ad->minfo_list);
+ return EINA_TRUE;
+ }
+
+ ad->minfo_ani = NULL;
+ return EINA_FALSE;
+
+}
+
+static void
+_mp_play_view_create_info_item(Evas_Object * genlist, char *header, char *detail)
+{
+ MP_CHECK(genlist);
+
+ struct appdata *ad = evas_object_data_get(genlist, "ad");
+ MP_CHECK(ad);
+
+ mp_media_info_t *info = calloc(1, sizeof(mp_media_info_t));
+ MP_CHECK(info);
+ info->header = g_strdup(header);
+ info->detail= g_strdup(detail);
+
+ if(!ad->minfo_ani)
+ {
+ DEBUG_TRACE("create animator");
+ ad->minfo_ani = ecore_animator_add(_ecore_animator_cb, ad);
+ ad->minfo_genlist = genlist;
+ }
+
+ ad->minfo_list = g_list_append(ad->minfo_list, info);
+
+}
+
+static void
+_mp_play_view_glist_free_cb(gpointer data)
+{
+ startfunc;
+ _mp_play_view_info_gl_item_del(data, NULL);
+}
+
+static Evas_Object *
+_mp_play_view_create_info_detail(Evas_Object * parent, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_NULL(ad);
+ music_list_item *cur_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_NULL(cur_item);
+
+ int ret = 0;
+ Evas_Object *genlist;
+
+ AudioHandleType *svc_audio_item;
+ char *pathname = NULL, *title = NULL, *album = NULL, *artist = NULL, *thumbname = NULL, *genre = NULL;
+ char *author = NULL, *copyright = NULL, *format = NULL;
+ int duration = 0, track = 0, size = 0;
+
+ audio_svc_item_new(&svc_audio_item);
+ ret = audio_svc_get_item_by_audio_id(ad->media_svc_handle, cur_item->key_id, svc_audio_item);
+ ret = audio_svc_item_get_val(svc_audio_item, AUDIO_SVC_TRACK_DATA_PATHNAME, &pathname, &size,
+ AUDIO_SVC_TRACK_DATA_TITLE, &title, &size,
+ AUDIO_SVC_TRACK_DATA_ALBUM, &album, &size,
+ AUDIO_SVC_TRACK_DATA_ARTIST, &artist, &size,
+ AUDIO_SVC_TRACK_DATA_THUMBNAIL_PATH, &thumbname, &size,
+ AUDIO_SVC_TRACK_DATA_GENRE, &genre, &size,
+ AUDIO_SVC_TRACK_DATA_COPYRIGHT, &copyright, &size,
+ AUDIO_SVC_TRACK_DATA_AUTHOR, &author, &size,
+ AUDIO_SVC_TRACK_DATA_DURATION, &duration,
+ AUDIO_SVC_TRACK_DATA_TRACK_NUM, &track,
+ AUDIO_SVC_TRACK_DATA_FORMAT, &format, &size, -1);
+
+ _mp_play_view_clear_animator(ad);
+
+ genlist = elm_genlist_add(parent);
+ MP_CHECK_NULL(genlist);
+ evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+ evas_object_data_set(genlist, "ad", ad);
+
+ if (ret == AUDIO_SVC_ERROR_NONE)
+ {
+ if (artist && strlen(artist))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_ARTIST"), artist);
+
+ }
+
+
+ _mp_play_view_create_info_item(genlist, GET_SYS_STR("IDS_COM_BODY_DETAILS_TITLE"), title);
+
+
+ if (album && strlen(album))
+ {
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_ALBUM"), album);
+
+ }
+
+ char duration_format[10] = { 0, };
+ int dur_sec = duration / 1000;
+ int sec = dur_sec % 60;
+ int min = dur_sec / 60;
+ snprintf(duration_format, sizeof(duration_format), "%02u:%02u", min, sec);
+
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_TRACK_LENGTH"),
+ duration_format);
+
+
+ if (genre && strlen(genre))
+ {
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_GENRE"), genre);
+
+ }
+
+ if (author && strlen(author))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_AUTHOR"), author);
+
+ }
+
+ if (copyright && strlen(copyright))
+ {
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_COPYRIGHT"), copyright);
+
+ }
+
+ if(mp_drm_file_right(cur_item->filename))
+ {
+ if (mp_drm_get_description(ad, cur_item->filename))
+
+ _mp_play_view_create_info_item(genlist,
+ GET_STR("IDS_MUSIC_BODY_DESCRIPTION"),
+ ad->drm_info.description);
+ else
+
+ _mp_play_view_create_info_item(genlist,
+ GET_STR("IDS_MUSIC_BODY_DESCRIPTION"),
+ "-");
+
+
+ if (ad->drm_info.forward)
+
+ _mp_play_view_create_info_item(genlist,
+ GET_STR("IDS_MUSIC_BODY_FORWARDING"),
+ GET_STR("IDS_MUSIC_BODY_POSSIBLE"));
+ else
+
+ _mp_play_view_create_info_item(genlist,
+ GET_STR("IDS_MUSIC_BODY_FORWARDING"),
+ GET_STR("IDS_MUSIC_BODY_IMPOSSIBLE"));
+
+ }
+
+ if (track > 0)
+ {
+ char *track_num = g_strdup_printf("%d", track);
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_TRACK_NUMBER"), track_num);
+
+ SAFE_FREE(track_num);
+ }
+
+ if (format && strlen(format))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_FORMAT"), format);
+
+ }
+
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_MUSIC_LOCATION"),
+ cur_item->filename);
+ }
+ else
+ {
+ mp_tag_info_t tag_info;
+ mp_file_tag_info_get_all_tag(cur_item->filename, &tag_info);
+
+ if (tag_info.artist && strlen(tag_info.artist))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_ARTIST"),
+ tag_info.artist);
+
+ }
+
+ if (tag_info.title && strlen(tag_info.title))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_SYS_STR("IDS_COM_BODY_DETAILS_TITLE"),
+ tag_info.title);
+
+ }
+
+ if (tag_info.album && strlen(tag_info.album))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_ALBUM"),
+ tag_info.album);
+
+ }
+
+ char duration_format[10] = { 0, };
+ int dur_sec = tag_info.duration / 1000;
+ int sec = dur_sec % 60;
+ int min = dur_sec / 60;
+ snprintf(duration_format, sizeof(duration_format), "%02u:%02u", min, sec);
+
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_TRACK_LENGTH"),
+ duration_format);
+
+
+ if (tag_info.genre && strlen(tag_info.genre))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_GENRE"),
+ tag_info.genre);
+
+ }
+
+ if (tag_info.author && strlen(tag_info.author))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_AUTHOR"),
+ tag_info.author);
+
+ }
+
+ if (tag_info.copyright && strlen(tag_info.copyright))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_COPYRIGHT"), tag_info.copyright);
+
+ }
+
+ if(mp_drm_file_right(cur_item->filename))
+ {
+ if (mp_drm_get_description(ad, cur_item->filename))
+
+ _mp_play_view_create_info_item(genlist,
+ GET_STR("IDS_MUSIC_BODY_DESCRIPTION"),
+ ad->drm_info.description);
+ else
+
+ _mp_play_view_create_info_item(genlist,
+ GET_STR("IDS_MUSIC_BODY_DESCRIPTION"),
+ "-");
+
+
+ if (ad->drm_info.forward)
+
+ _mp_play_view_create_info_item(genlist,
+ GET_STR("IDS_MUSIC_BODY_FORWARDING"),
+ GET_STR("IDS_MUSIC_BODY_POSSIBLE"));
+ else
+
+ _mp_play_view_create_info_item(genlist,
+ GET_STR("IDS_MUSIC_BODY_FORWARDING"),
+ GET_STR("IDS_MUSIC_BODY_IMPOSSIBLE"));
+
+ }
+
+ if (tag_info.track && strlen(tag_info.track))
+ {
+ if (!strstr(tag_info.track, "-") && g_strcmp0(tag_info.track, "0"))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_TRACK_NUMBER"),
+ tag_info.track);
+
+ }
+ }
+
+ if (tag_info.rating && strlen(tag_info.rating))
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_PARENT_RATING"),
+ tag_info.rating);
+
+ }
+
+ GString *format = g_string_new("");
+ if (tag_info.audio_bitrate > 0)
+ g_string_append_printf(format, "%dkbps ", tag_info.audio_bitrate / 1000);
+
+ if (tag_info.audio_samplerate > 0)
+ g_string_append_printf(format, "%.1fkHz ", (double)tag_info.audio_samplerate / 1000);
+
+ if (tag_info.audio_channel > 0)
+ g_string_append_printf(format, "%dch", tag_info.audio_channel);
+
+ if (format)
+ {
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_FORMAT"),
+ format->str);
+
+ g_string_free(format, TRUE);
+ }
+
+
+ _mp_play_view_create_info_item(genlist, GET_STR("IDS_MUSIC_BODY_MUSIC_LOCATION"),
+ cur_item->filename);
+
+
+ mp_file_tag_free(&tag_info);
+ }
+
+ evas_object_show(genlist);
+ audio_svc_item_free(svc_audio_item);
+ elm_object_part_content_set(parent, "mi_content", genlist);
+ return genlist;
+}
+
+static void
+mp_play_view_create_info_contents(Evas_Object * parent, void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+ music_list_item *cur_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK(cur_item);
+
+ /***********create left area start********************/
+ Evas_Object *info_view_left_area = mp_common_load_edj(parent, PLAY_VIEW_EDJ_NAME, "info_view_left_area");
+ MP_CHECK(info_view_left_area);
+ elm_object_part_content_set(parent, "left_area", info_view_left_area);
+ evas_object_show(info_view_left_area);
+
+ Evas_Object *video_play_img = elm_image_add(info_view_left_area);
+ elm_image_file_set(video_play_img, ICON_DIRECTORY "/music_player/T02_Video_play.png", NULL);
+ elm_object_part_content_set(info_view_left_area, "video_play_img", video_play_img);
+ evas_object_show(video_play_img);
+
+ Evas_Object *album_image = elm_image_add(info_view_left_area);
+ if (strlen(cur_item->albumart) && mp_util_is_image_valid(ad->evas, cur_item->albumart))
+ {
+ elm_image_file_set(album_image, cur_item->albumart, NULL);
+ }
+ else
+ {
+ elm_image_file_set(album_image, DEFAULT_THUMBNAIL, NULL);
+ }
+ elm_object_part_content_set(info_view_left_area, "left_album_bg", album_image);
+ evas_object_show(album_image);
+ evas_object_event_callback_add(video_play_img, EVAS_CALLBACK_MOUSE_DOWN, NULL, NULL);
+ evas_object_event_callback_add(video_play_img, EVAS_CALLBACK_MOUSE_MOVE, NULL, NULL);
+ evas_object_event_callback_add(video_play_img, EVAS_CALLBACK_MOUSE_UP,
+ _mp_play_view_sb_click_info_albumart, ad);
+
+ Evas_Object *right_base_box = mp_common_load_edj(parent, PLAY_VIEW_EDJ_NAME, "base_box_no_xml");
+ MP_CHECK(right_base_box);
+ elm_object_part_content_set(parent, "base_box", right_base_box);
+ evas_object_show(right_base_box);
+
+ Evas_Object *right_base_box_detail =
+ mp_common_load_edj(right_base_box, PLAY_VIEW_EDJ_NAME, "mi_base_box_detail");
+ MP_CHECK(right_base_box_detail);
+ elm_object_part_content_set(right_base_box, "no_sim_media_content", right_base_box_detail);
+ evas_object_show(right_base_box_detail);
+ edje_object_part_text_set(_EDJ(right_base_box_detail), "title", GET_STR("IDS_MUSIC_BODY_DETAILS_MEADIA_INFO"));
+ Evas_Object *item = _mp_play_view_create_info_detail(right_base_box_detail, ad);
+ MP_CHECK(item);
+ elm_object_part_content_set(right_base_box_detail, "mi_scroller", item);
+
+ elm_object_part_content_set(parent, "no_xml_no_sim_detail_scroller", right_base_box_detail);
+}
+
+static void
+_mp_play_view_popup_bt_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ struct appdata *ad = (struct appdata *)data;
+
+ int ret = mm_sound_route_set_system_policy(SYSTEM_AUDIO_ROUTE_POLICY_DEFAULT);
+
+ if (ret != MM_ERROR_NONE)
+ WARN_TRACE("Error: mm_sound_route_set_system_policy(0x%x)", ret);
+ else
+ elm_radio_value_set(ad->radio_group, MP_SND_PATH_BT);
+
+ mp_popup_destroy(ad);
+}
+
+static void
+_mp_play_view_popup_headphone_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ struct appdata *ad = (struct appdata *)data;
+
+ int ret = mm_sound_route_set_system_policy(SYSTEM_AUDIO_ROUTE_POLICY_IGNORE_A2DP);
+ if (ret != MM_ERROR_NONE)
+ WARN_TRACE("Error: mm_sound_route_set_system_policy(0x%x)", ret);
+ else
+ elm_radio_value_set(ad->radio_group, MP_SND_PATH_EARPHONE);
+
+ mp_popup_destroy(ad);
+}
+
+
+static void
+_mp_play_view_popup_speaker_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ struct appdata *ad = (struct appdata *)data;
+
+ int earjack = 0;
+ int ret = 0;
+
+ if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
+ WARN_TRACE("Earjack state get Fail...");
+
+ if (earjack)
+ ret = mm_sound_route_set_system_policy(SYSTEM_AUDIO_ROUTE_POLICY_HANDSET_ONLY);
+ else
+ ret = mm_sound_route_set_system_policy(SYSTEM_AUDIO_ROUTE_POLICY_IGNORE_A2DP);
+
+ if (ret != MM_ERROR_NONE)
+ WARN_TRACE("Error: mm_sound_route_set_system_policy(0x%x)", ret);
+ else
+ elm_radio_value_set(ad->radio_group, MP_SND_PATH_SPEAKER);
+
+ mp_popup_destroy(ad);
+}
+
+static void
+_mp_play_view_append_snd_path_device(struct appdata *ad, char *bt_name, int bt_connected, int earjack, Evas_Object *popup)
+{
+ MP_CHECK(ad);
+ MP_CHECK(popup);
+
+ if (bt_connected)
+ mp_genlist_popup_item_append(popup, bt_name, ad->radio_group, _mp_play_view_popup_bt_cb, ad);
+
+ if (earjack)
+ mp_genlist_popup_item_append(popup, GET_SYS_STR("IDS_COM_OPT_HEADPHONES_ABB"), ad->radio_group, _mp_play_view_popup_headphone_cb, ad);
+
+ mp_genlist_popup_item_append(popup, GET_SYS_STR("IDS_COM_OPT_SPEAKER_ABB"), ad->radio_group, _mp_play_view_popup_speaker_cb, ad);
+
+ mp_util_get_sound_path(&(ad->snd_path));
+}
+
+void
+mp_play_view_update_snd_path(struct appdata *ad)
+{
+ startfunc;
+ MP_CHECK(ad);
+
+ bool popup_exist = false;
+ int bt_connected = 0;
+ int earjack = 0;
+ static char *bt_name;
+ int ret = 0;
+ Evas_Object *popup = NULL;
+
+ popup = ad->popup[MP_POPUP_GENLIST];
+ if(popup)
+ {
+ popup_exist = evas_object_data_get(popup, "sound_path");
+ }
+
+ //update or destroy popup..
+ if(popup_exist)
+ {
+ IF_FREE(bt_name);
+ ret = mm_sound_route_get_a2dp_status(&bt_connected, &bt_name);
+ if (ret != MM_ERROR_NONE)
+ {
+ WARN_TRACE("Fail to mm_sound_route_get_a2dp_status ret = [%d]", ret);
+ }
+ if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
+ WARN_TRACE("Earjack state get Fail...");
+
+ if (!bt_connected && !earjack)
+ {
+ evas_object_del(popup);
+ }
+ else
+ {
+ evas_object_del(popup);
+ }
+ }
+
+ //update button
+ mp_play_view_set_snd_path_sensitivity(ad);
+
+}
+
+void
+mp_play_view_set_snd_path_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+
+ Evas_Object *group = NULL;
+ Evas_Object *popup = NULL;
+
+ int ret = 0;
+ int bt_connected = 0;
+ int earjack = 0;
+
+ static char *bt_name = NULL;
+
+ popup = mp_genlist_popup_create(ad->win_main, MP_POPUP_SOUND_PATH, ad, ad);
+ mp_retm_if(!popup, "Error: popup is null...");
+
+ group = elm_radio_add(popup);
+ ad->radio_group = group;
+
+ Evas_Object *genlist = evas_object_data_get(popup, "genlist");
+ MP_CHECK(genlist);
+ evas_object_data_set(genlist, "ad", ad);
+
+ IF_FREE(bt_name);
+ ret = mm_sound_route_get_a2dp_status(&bt_connected, &bt_name);
+ if (ret != MM_ERROR_NONE)
+ {
+ WARN_TRACE("Fail to mm_sound_route_get_a2dp_status ret = [%d]", ret);
+ }
+
+ if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
+ WARN_TRACE("Earjack state get Fail...");
+
+ _mp_play_view_append_snd_path_device(ad, bt_name, bt_connected, earjack, popup);
+
+}
+
+static void
+_mp_play_view_destory_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ mp_playing_view *playing_view = (mp_playing_view *)(data);
+ MP_CHECK(playing_view);
+
+ struct appdata *ad = playing_view->ad;
+ MP_CHECK(ad);
+
+ playing_view->flick_direction = 0;
+ //hide mute popup
+ if (playing_view->play_view)
+ edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
+ mp_ecore_timer_del(ad->volume_down_timer);
+ mp_ecore_timer_del(ad->mute_popup_show_timer);
+ //reset flag
+ ad->volume_long_pressed = false;
+
+ mp_ecore_timer_del(playing_view->progressbar_timer);
+ mp_ecore_timer_del(playing_view->show_ctrl_timer);
+
+ if(ad->playing_view == playing_view)
+ {
+ IF_FREE(ad->playing_view);
+ }
+ else
+ ERROR_TRACE("++++++++ check here ++++++++++");
+
+ endfunc;
+
+ return;
+}
+
+void
+mp_play_view_show_default_info(struct appdata *ad)
+{
+ MP_CHECK(ad);
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ mp_evas_object_del(playing_view->play_info);
+ playing_view->play_info =
+ mp_common_load_edj(ad->library->cur_view, PLAY_VIEW_EDJ_NAME, "richinfo/base_layout");
+
+ mp_play_view_create_info_contents(playing_view->play_info, ad);
+
+ view_data_t *view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+ mp_view_manager_push_view_content(view_data, playing_view->play_info, MP_VIEW_CONTENT_INFO);
+ mp_view_manager_set_title_and_buttons(view_data, GET_SYS_STR("IDS_COM_BODY_DETAILS"),
+ ad);
+}
+
+void
+mp_play_view_info_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ //hide mute popup
+ if (playing_view->play_view)
+ edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
+ //show volume button
+ if (!ad->mute_flag)
+ edje_object_signal_emit(_EDJ(playing_view->play_icon), "unmute", "volume");
+ else
+ edje_object_signal_emit(_EDJ(playing_view->play_icon), "mute", "volume");
+ mp_ecore_timer_del(ad->volume_down_timer);
+ mp_ecore_timer_del(ad->mute_popup_show_timer);
+
+ mp_play_view_show_default_info(ad);
+
+}
+
+static bool
+_mp_play_view_load_track_info(void *data, music_list_item * item)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ if (ad->mute_flag)
+ {
+ //set mute
+ mp_player_mgr_set_mute(true);
+ edje_object_signal_emit(_EDJ(playing_view->play_icon), "mute", "volume");
+ }
+ else
+ {
+ //reset volume
+ mp_player_mgr_set_mute(false);
+ edje_object_signal_emit(_EDJ(playing_view->play_icon), "unmute", "volume");
+ }
+
+ MP_CHECK_FALSE(item);
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_FALSE(current_item);
+
+ DEBUG_TRACE("category: %d", current_item->category);
+ if (current_item->category == AUDIO_SVC_CATEGORY_MUSIC)
+ {
+ if (current_item->key_id > 0
+ && mp_util_is_item_in_playlist(ad->media_svc_handle, AUDIO_SVC_FAVORITE_LIST_ID, current_item->key_id))
+ {
+ edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_on", "play_view");
+ }
+ else
+ {
+ edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_off", "play_view");
+ }
+ }
+ else
+ {
+ edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_invisible", "play_view");
+ }
+
+ mp_view_manager_play_view_title_label_set(ad, item->title);
+
+ edje_object_part_text_set(_EDJ(playing_view->play_title), "artist", current_item->artist);
+ edje_object_part_text_set(_EDJ(playing_view->play_title), "album", current_item->album);
+
+ return true;
+}
+
+static Evas_Object *
+_mp_play_view_create_next_item(music_list_item * next_item, void *data)
+{
+ Evas_Object *next_view = NULL;
+ Evas_Object *album_img = NULL;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_NULL(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_NULL(playing_view);
+
+ MP_CHECK_NULL(next_item);
+
+ mp_debug("next item : %s", next_item->title);
+
+ next_view = mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "mp_play_view");
+ evas_object_size_hint_max_set(next_view, 480 * ad->scale, 800 * ad->scale);
+
+ evas_object_show(next_view);
+
+ album_img = evas_object_image_add(ad->evas);
+ int w, h;
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_image_load_size_set(album_img, w, h*HD_ALBUM_IMAGE_H_SCALE);
+ evas_object_image_fill_set(album_img, 0, 0, w, h*HD_ALBUM_IMAGE_H_SCALE);
+ if (strlen(next_item->albumart) && mp_util_is_image_valid(ad->evas, next_item->albumart))
+ {
+ evas_object_image_file_set(album_img, next_item->albumart, NULL);
+ }
+ else
+ {
+ evas_object_image_file_set(album_img, DEFAULT_THUMBNAIL, NULL);
+ }
+
+ elm_object_part_content_set(next_view, "album_art", album_img);
+ evas_object_show(album_img);
+
+ Evas_Object *progress = NULL;
+ Evas_Object *play_ctrl = NULL;
+
+ play_ctrl = _mp_play_view_create_ctrl_layout(data, next_view, &progress, FALSE);
+ playing_view->play_progressbar = progress;
+ evas_object_show(progress);
+
+ _mp_play_view_load_track_info(data, next_item);
+
+ return next_view;
+}
+
+static void
+_mp_play_view_eventbox_clicked_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ DEBUG_TRACE("[%d]", ad->show_optional_menu);
+
+ mp_play_view_set_menu_state(ad, !ad->show_optional_menu, true);
+
+ return;
+}
+
+static bool
+_mp_play_view_clear_next_view(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ Evas_Object *content = elm_object_part_content_unset(playing_view->layout, "list_content_temp");
+ evas_object_del(content);
+ playing_view->play_view_next = NULL;
+
+ edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "set_default", "list_content");
+
+ IF_FREE(playing_view->playing_list_item);
+
+ playing_view->transition_state = false;
+
+ return true;
+}
+
+static void
+_mp_play_view_eventbox_flick_left_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ music_list_item *next_item = NULL;
+
+ if (mp_play_list_get_next_item(data, ad->playing_list, &next_item, TRUE)== MP_PLST_RET_OK)
+ {
+ playing_view->flick_direction = 1;
+ IF_FREE(ad->latest_playing_key_id);
+ _mp_play_view_transit_by_item(data, next_item, true);
+ }
+
+ IF_FREE(next_item);
+
+ return;
+}
+
+static void
+_mp_play_view_eventbox_flick_right_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ music_list_item *next_item = NULL;
+
+ if (mp_play_list_get_prev_item(data, ad->playing_list, &next_item))
+ {
+ playing_view->flick_direction = 2;
+ IF_FREE(ad->latest_playing_key_id);
+ _mp_play_view_transit_by_item(data, next_item, false);
+ }
+ else
+ mp_error("can not get next item");
+
+ IF_FREE(next_item);
+
+
+ return;
+}
+
+static void
+_mp_play_view_favourite_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ DEBUG_TRACE("%s", emission);
+
+ if (!strcmp(emission, "favorite_up"))
+ {
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK(current_item);
+
+ if (current_item->key_id > 0
+ && mp_util_is_item_in_playlist(ad->media_svc_handle, AUDIO_SVC_FAVORITE_LIST_ID, current_item->key_id))
+ {
+ int ret = AUDIO_SVC_ERROR_NONE;
+ ret = audio_svc_remove_item_from_playlist_by_audio_id(ad->media_svc_handle, AUDIO_SVC_FAVORITE_LIST_ID,
+ current_item->key_id);
+ if (ret == AUDIO_SVC_ERROR_NONE) {
+ edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_off",
+ "play_view");
+ mp_util_create_notify(ad, GET_SYS_STR("IDS_COM_POP_REMOVED"));
+ }
+ }
+ else
+ {
+ int ret = AUDIO_SVC_ERROR_NONE;
+ ret = audio_svc_add_item_to_playlist(ad->media_svc_handle, AUDIO_SVC_FAVORITE_LIST_ID, current_item->key_id);
+ if (ret == AUDIO_SVC_ERROR_NONE) {
+ edje_object_signal_emit(_EDJ(playing_view->play_menu), "favorite_on",
+ "play_view");
+ mp_util_create_notify(ad, GET_STR("IDS_MUSIC_POP_ADDED"));
+ }
+ }
+ }
+
+ MP_CHECK(ad->library);
+ MP_CHECK(ad->library->cur_view);
+ view_data_t *view_data = (view_data_t *) evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK(view_data);
+ if (view_data->view_type == MP_VIEW_TYPE_PLAYLIST)
+ mp_library_update_view(ad);
+
+ return;
+}
+
+static void
+_mp_play_view_progressbar_down_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ if (data == NULL && obj == NULL && event_info == NULL)
+ return;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ Evas_Event_Mouse_Down *ev = event_info;
+ Evas_Object *progressbar = obj;
+ int duration = 0, w = 0, current = 0, x = 0;
+ double ratio = 0.0;
+
+ if (ad->player_state == PLAY_STATE_INIT)
+ {
+ ERROR_TRACE("Invaild player_state : %d", ad->player_state);
+ return;
+ }
+
+ if (ad->player_state == PLAY_STATE_PLAYING)
+ {
+ mp_player_mgr_pause(ad);
+ playing_view->paused_by_progressbar = true;
+ }
+
+ mp_play_view_progress_timer_freeze(ad);
+ evas_object_geometry_get(progressbar, &x, NULL, &w, NULL);
+ current = ev->canvas.x - x;
+
+ if (current < 0)
+ current = 0;
+ else if (current > w)
+ current = w;
+
+ ratio = (double)current / w;
+ duration = mp_player_mgr_get_duration();
+
+ ad->music_length = duration / 1000.;
+
+ ad->music_pos = ratio * ad->music_length;
+ mp_play_view_update_progressbar(ad);
+
+ return;
+}
+
+static void
+_mp_play_view_progressbar_up_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ if (data == NULL && obj == NULL && event_info == NULL)
+ return;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ Evas_Event_Mouse_Up *ev = event_info;
+ Evas_Object *progressbar = obj;
+ int duration = 0, w = 0, current = 0, x = 0;
+ double ratio = 0.0;
+
+ if (ad->player_state == PLAY_STATE_INIT)
+ {
+ ERROR_TRACE("Invaild player_state : %d", ad->player_state);
+ return;
+ }
+ evas_object_geometry_get(progressbar, &x, NULL, &w, NULL);
+
+ current = ev->canvas.x - x;
+
+ if (current < 0)
+ current = 0;
+ else if (current > w)
+ current = w;
+
+ ratio = (double)current / w;
+
+ duration = mp_player_mgr_get_duration();
+
+ ad->music_length = duration / 1000.;
+
+ ad->music_pos = ratio * ad->music_length;
+ mp_play_view_update_progressbar(ad);
+
+ mp_player_mgr_set_position(ad->music_pos * 1000);
+
+ if (playing_view->paused_by_progressbar)
+ {
+ mp_player_mgr_resume(ad);
+ playing_view->paused_by_progressbar = false;
+ }
+ return;
+}
+
+static void
+_mp_play_progressbar_move_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
+{
+ if (data == NULL && obj == NULL && event_info == NULL)
+ return;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ Evas_Event_Mouse_Move *ev = event_info;
+
+ if (ad->player_state == PLAY_STATE_INIT)
+ {
+ ERROR_TRACE("Invaild player_state : %d", ad->player_state);
+ return;
+ }
+
+ Evas_Object *progressbar = obj;
+ int duration = 0, w = 0, current = 0;
+ int x;
+ double ratio = 0.0;
+
+ if (ad->player_state == PLAY_STATE_INIT)
+ return;
+
+ evas_object_geometry_get(progressbar, &x, NULL, &w, NULL);
+
+ current = ev->cur.canvas.x - x;
+
+ if (current < 0)
+ current = 0;
+ else if (current > w)
+ current = w;
+
+ ratio = (double)current / w;
+ duration = mp_player_mgr_get_duration();
+
+ ad->music_length = duration / 1000.;
+
+ ad->music_pos = ratio * ad->music_length;
+ mp_play_view_update_progressbar(ad);
+
+ return;
+}
+
+
+static Eina_Bool
+_mp_play_view_update_progressbar_cb(void *data)
+{
+ struct appdata *ad = data;
+ MP_CHECK_CANCEL(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_CANCEL(playing_view);
+
+ if(!ad->prohibit_aul_relaunch)
+ {
+ WARN_TRACE("Check here.. progress timer should be freezed..");
+ ecore_timer_freeze(playing_view->progressbar_timer);
+ }
+
+ int duration = 0, pos = 0;
+ double get_length = 0., get_pos = 0.;
+
+ if (ad->player_state == PLAY_STATE_PLAYING || ad->player_state == PLAY_STATE_PAUSED)
+ {
+ duration = mp_player_mgr_get_duration();
+ if ((duration / 1000) > 0)
+ {
+ pos = mp_player_mgr_get_position();
+ get_length = duration / 1000.;
+ get_pos = pos / 1000.;
+ }
+
+ if (get_length != ad->music_length || get_pos != ad->music_pos)
+ {
+ ad->music_length = get_length;
+ ad->music_pos = get_pos;
+
+ mp_play_view_update_progressbar(ad);
+ }
+ }
+
+ ecore_timer_interval_set(playing_view->progressbar_timer, 0.5);
+
+ return 1;
+}
+
+static void
+_mp_play_view_menu_visible_set(void *data, bool menu_enable, bool animation)
+{
+ struct appdata *ad = data;
+
+ mp_retm_if(ad == NULL, "appdata is NULL");
+ mp_retm_if(ad->playing_view == NULL, "playing_view is NULL");
+ mp_retm_if(ad->playing_view->play_view == NULL, "play_view is NULL");
+
+ if (menu_enable)
+ edje_object_signal_emit(_EDJ(ad->playing_view->layout), "option_menu_visible", "player_option_menu");
+ else
+ {
+ if(animation)
+ edje_object_signal_emit(_EDJ(ad->playing_view->layout), "option_menu_invisible",
+ "player_option_menu");
+ else
+ edje_object_signal_emit(_EDJ(ad->playing_view->layout), "option_hide",
+ "player_option_menu");
+ }
+}
+
+static void
+_mp_play_view_progress_visible_set(void *data, bool progressbar_enable)
+{
+ struct appdata *ad = data;
+
+ mp_retm_if(ad == NULL, "appdata is NULL");
+ mp_retm_if(ad->playing_view == NULL, "playing_view is NULL");
+ mp_retm_if(ad->playing_view->play_view == NULL, "play_view is NULL");
+
+ if (progressbar_enable)
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_ctrl), "progressbar_visible", "player_progress");
+ else
+ edje_object_signal_emit(_EDJ(ad->playing_view->play_ctrl), "progressbar_invisible", "player_progress");
+}
+
+
+void
+_mp_play_view_add_progress_timer(void *data)
+{
+ struct appdata *ad = data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ mp_ecore_timer_del(playing_view->progressbar_timer);
+
+ playing_view->progressbar_timer = ecore_timer_add(0.1, _mp_play_view_update_progressbar_cb, ad);
+ if(ad->player_state != PLAY_STATE_PLAYING || !ad->prohibit_aul_relaunch)
+ ecore_timer_freeze(playing_view->progressbar_timer);
+
+ return;
+}
+
+static bool
+_mp_play_view_init_progress_bar(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ int pos = 0, duration = 0;
+ pos = mp_player_mgr_get_position();
+ duration = mp_player_mgr_get_duration();
+ ad->music_pos = pos / 1000.;
+ ad->music_length = duration / 1000.;
+ mp_play_view_update_progressbar(ad);
+ _mp_play_view_add_progress_timer(ad);
+
+ return true;
+}
+
+bool
+_mp_play_view_set_menu_item(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ int shuffle_state = 0;
+ int repeat_state = 0;
+
+ if (!mp_setting_get_shuffle_state(&shuffle_state))
+ {
+ mp_play_control_shuffle_set(ad, shuffle_state);
+ ad->play_shuffle_state = shuffle_state;
+ }
+
+ if (!mp_setting_get_repeat_state(&repeat_state))
+ mp_play_control_repeat_set(ad, repeat_state);
+
+ return true;
+}
+
+
+static bool
+_mp_play_view_create_menu(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ playing_view->play_menu = mp_common_load_edj(playing_view->play_view, PLAY_VIEW_EDJ_NAME, "mp_play_menu");
+ elm_object_part_content_set(playing_view->layout, "player_option_menu", playing_view->play_menu);
+ edje_object_signal_callback_add(_EDJ(playing_view->play_menu), "favorite_down", "*", _mp_play_view_favourite_cb,
+ ad);
+ edje_object_signal_callback_add(_EDJ(playing_view->play_menu), "favorite_up", "*", _mp_play_view_favourite_cb,
+ ad);
+
+ edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_SHUFFLE, "*", mp_play_control_menu_cb,
+ ad);
+ edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_SHUFNON, "*", mp_play_control_menu_cb,
+ ad);
+ edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_REPALL, "*", mp_play_control_menu_cb, ad);
+ edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_REPNON, "*", mp_play_control_menu_cb, ad);
+ edje_object_signal_callback_add(_EDJ(playing_view->play_menu), SIGNAL_REP1, "*", mp_play_control_menu_cb, ad);
+
+ _mp_play_view_set_menu_item(ad);
+
+ _mp_play_view_menu_visible_set(ad, FALSE, false);
+ endfunc;
+ return true;
+
+}
+
+void
+mp_play_view_set_snd_path_sensitivity(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ int ret = 0;
+ int bt_connected = 0;
+ char *bt_name = NULL;
+ int earjack = 0;
+ Elm_Object_Item *navi_item = NULL;
+ Evas_Object *btn = NULL;
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ navi_item = mp_view_manager_get_play_view_navi_item(ad);
+
+ if(navi_item)
+ btn = elm_object_item_part_content_get(navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN);
+
+ ret = mm_sound_route_get_a2dp_status(&bt_connected, &bt_name);
+ if (!bt_connected)
+ {
+ if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
+ WARN_TRACE("Earjack state get Fail...");
+ }
+ IF_FREE(bt_name);
+ if (!bt_connected && !earjack)
+ {
+ if(btn)
+ {
+ elm_object_item_part_content_unset(navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN);
+ evas_object_del(btn);
+ }
+ }
+ else
+ {
+ if(!btn && navi_item)
+ {
+ Evas_Object *btn = mp_widget_create_title_btn(ad->library->cur_view, NULL, MP_ICON_SOUND_PATH,
+ mp_play_view_set_snd_path_cb, ad);
+ elm_object_item_part_content_set(navi_item, ELM_NAVIFRAME_ITEM_TITLE_LEFT_BTN, btn);
+ }
+ }
+}
+
+static void
+mp_play_view_back_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ struct appdata *ad = view_data->ad;
+ MP_CHECK(ad);
+ mp_retm_if(ad->navi_effect_in_progress, "navi effect in progress");
+
+ mp_common_back_button_cb(data, obj, NULL);
+}
+
+static bool
+_mp_play_view_create_control_bar(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ Evas_Object *play_control = NULL, *play_icon = NULL;
+
+ play_control =
+ mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/main/control");
+
+ MP_CHECK_FALSE(play_control);
+
+ play_icon = mp_common_load_edj(play_control, PLAY_VIEW_EDJ_NAME, "music/playing/main/control/buttons");
+
+ if (!play_icon)
+ {
+ mp_evas_object_del(play_control);
+ MP_CHECK_FALSE(play_icon);
+ }
+
+ elm_object_part_content_set(play_control, "buttons", play_icon);
+ evas_object_data_set(play_control, "buttons", play_icon);
+
+ edje_object_signal_callback_add(_EDJ(play_icon), "info_clicked", CTR_EDJ_SIG_SRC, mp_play_view_back_cb,
+ mp_util_get_view_data(ad));
+
+ edje_object_signal_callback_add(_EDJ(play_icon), "volume_clicked", CTR_EDJ_SIG_SRC, mp_play_control_volume_cb,
+ ad);
+ edje_object_signal_callback_add(_EDJ(play_icon), "play_clicked", CTR_EDJ_SIG_SRC, mp_play_control_play_cb, ad);
+ edje_object_signal_callback_add(_EDJ(play_icon), "pause_clicked", CTR_EDJ_SIG_SRC, mp_play_control_play_cb, ad);
+
+ edje_object_signal_callback_add(_EDJ(play_icon), "ff_btn_down", CTR_EDJ_SIG_SRC, mp_play_control_ff_cb, ad);
+ edje_object_signal_callback_add(_EDJ(play_icon), "ff_btn_up", CTR_EDJ_SIG_SRC, mp_play_control_ff_cb, ad);
+
+ edje_object_signal_callback_add(_EDJ(play_icon), "rew_btn_down", CTR_EDJ_SIG_SRC, mp_play_control_rew_cb, ad);
+ edje_object_signal_callback_add(_EDJ(play_icon), "rew_btn_up", CTR_EDJ_SIG_SRC, mp_play_control_rew_cb, ad);
+
+ MMPlayerStateType player_state = mp_player_mgr_get_state();
+ if (player_state != MM_PLAYER_STATE_PLAYING)
+ edje_object_signal_emit(_EDJ(play_icon), "play", CTR_PROG_SIG_SRC);
+ else
+ edje_object_signal_emit(_EDJ(play_icon), "pause", CTR_PROG_SIG_SRC);
+
+ playing_view->play_control = play_control;
+
+ //show volume button
+ if (!ad->mute_flag)
+ edje_object_signal_emit(_EDJ(play_icon), "unmute", "volume");
+ else
+ edje_object_signal_emit(_EDJ(play_icon), "mute", "volume");
+ playing_view->play_icon = play_icon;
+
+ elm_object_part_content_set(playing_view->layout, "elm.swallow.controlbar", playing_view->play_control);
+ endfunc;
+ return true;
+}
+
+
+
+static void
+_mp_play_progress_val_set(void *data, double position)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+ MP_CHECK(playing_view->play_progressbar);
+
+ Evas_Object *pbar = evas_object_data_get(playing_view->play_progressbar, "progress_bar");
+
+ edje_object_part_drag_value_set(_EDJ(pbar), "progressbar_control", position, 0.0);
+
+ return;
+}
+
+static void
+_mp_play_view_transit_by_item_complete_cb(void *data, Evas_Object * obj, const char *emission, const char *source)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ DEBUG_TRACE("emission: %s, source: %s", emission, source);
+ if (source)
+ {
+ if (strcmp(source, "list") == 0)
+ {
+ mp_play_item_play(ad, playing_view->playing_list_item->key_id);
+ mp_play_view_refresh(ad);
+
+ _mp_play_view_clear_next_view(data);
+
+ _mp_play_view_init_progress_bar(data);
+ evas_object_show(playing_view->layout);
+
+ edje_object_signal_callback_del(elm_layout_edje_get(playing_view->layout), "transit_done", "*",
+ _mp_play_view_transit_by_item_complete_cb);
+ }
+ }
+
+ return;
+}
+
+static bool
+_mp_play_view_transit_by_item(void *data, struct music_list_item *it, bool move_left)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ if (playing_view->play_view)
+ {
+ mp_ecore_timer_del(ad->mute_popup_show_timer);
+ //hide mute popup
+ edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
+ //show volume button
+ if (!ad->mute_flag)
+ edje_object_signal_emit(_EDJ(playing_view->play_icon), "unmute", "volume");
+ else
+ edje_object_signal_emit(_EDJ(playing_view->play_icon), "mute", "volume");
+ }
+
+ Evas_Object *next = NULL;
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_FALSE(current_item);
+
+ if (!g_strcmp0(ad->latest_playing_key_id ,it->key_id))
+ {
+ mp_debug("same file selected plz check state");
+ return FALSE;
+ }
+
+ if (playing_view->transition_state)
+ {
+ mp_debug("skip_by transiton effect");
+ return FALSE;
+ }
+
+ mp_play_view_stop_transit(data);
+
+ mp_play_view_progress_timer_freeze(ad);
+
+ mp_play_view_set_menu_state(ad, ad->show_optional_menu, false);
+
+ mp_debug("current index = %d, set index = %d", current_item->list_index, it->list_index);
+
+ IF_FREE(playing_view->playing_list_item);
+ mp_play_list_item_copy(&playing_view->playing_list_item, it);
+
+ next = _mp_play_view_create_next_item(it, ad);
+
+ MP_CHECK_FALSE(next);
+
+ playing_view->play_view_next = next;
+ elm_object_part_content_set(playing_view->layout, "list_content_temp", next);
+ edje_object_signal_callback_add(elm_layout_edje_get(playing_view->layout), "transit_done", "*",
+ _mp_play_view_transit_by_item_complete_cb, ad);
+
+ if (!move_left)
+ {
+ edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "set_left", "list_content_temp");
+ edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "flick_right", "list_content");
+ }
+ else
+ {
+ edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "set_right", "list_content_temp");
+ edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "flick_left", "list_content");
+ }
+
+ edje_object_signal_emit(elm_layout_edje_get(playing_view->layout), "set_default", "list_content_temp");
+
+ playing_view->transition_state = true;
+
+ return true;
+}
+
+static bool
+_mp_play_view_push_navibar(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ elm_object_part_content_set(playing_view->layout, "list_content", playing_view->play_view);
+ view_data_t *view_data = NULL;
+
+ MP_CHECK_FALSE(ad->library);
+ MP_CHECK_FALSE(ad->library->cur_view);
+
+ view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK_FALSE(view_data);
+ mp_view_manager_push_view_content(view_data, playing_view->layout, MP_VIEW_CONTENT_PLAY);
+ mp_view_manager_set_title_and_buttons(view_data, GET_SYS_STR("IDS_COM_SK_PLAY"), ad);
+
+ return true;
+
+}
+
+static void
+_mp_play_view_play_option_cb(void *data, Evas_Object * obj, const char *emission, const char *source)
+{
+ MP_CHECK(emission);
+
+ if (!strcmp(emission, "option_3_clicked"))
+ {
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+ mp_play_view_info_cb(data, obj, NULL);
+ }
+}
+
+static Evas_Object *
+_mp_play_view_create_ctrl_layout(void *data, Evas_Object * parents, Evas_Object ** progress, bool remove_signal)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ Evas_Object *ctrl_layout = NULL;
+
+ ctrl_layout = mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/play_ctrl");
+
+ elm_object_part_content_set(parents, "player_info", ctrl_layout);
+
+ *progress = mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/progress_box");
+
+ Evas_Object *play_progress =
+ mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "music/playing/progress_box/progress_bar");
+ elm_object_part_content_set(*progress, "progress_bar", play_progress);
+ evas_object_data_set(*progress, "progress_bar", play_progress);
+
+ if (!remove_signal)
+ {
+ edje_object_signal_callback_add(_EDJ(ctrl_layout), "favorite_down", "*", _mp_play_view_favourite_cb,
+ ad);
+ edje_object_signal_callback_add(_EDJ(ctrl_layout), "favorite_up", "*", _mp_play_view_favourite_cb, ad);
+
+ evas_object_event_callback_add(play_progress, EVAS_CALLBACK_MOUSE_DOWN,
+ _mp_play_view_progressbar_down_cb, ad);
+ evas_object_event_callback_add(play_progress, EVAS_CALLBACK_MOUSE_UP, _mp_play_view_progressbar_up_cb,
+ ad);
+ evas_object_event_callback_add(play_progress, EVAS_CALLBACK_MOUSE_MOVE, _mp_play_progressbar_move_cb,
+ ad);
+ }
+
+ elm_object_part_content_set(playing_view->layout, "player_progress", *progress);
+
+ Evas_Object *play_info = mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "player_view_info");
+ elm_object_part_content_set(playing_view->layout, "player_info", play_info);
+ playing_view->play_title = play_info;
+
+ Evas_Object *play_options =
+ mp_common_load_edj(playing_view->layout, PLAY_VIEW_EDJ_NAME, "player_view_options");
+ elm_object_part_content_set(playing_view->layout, "player_options", play_options);
+
+ edje_object_part_text_set(_EDJ(play_options), "option_3", GET_SYS_STR("IDS_COM_BODY_DETAILS"));
+
+ edje_object_signal_callback_add(_EDJ(play_options), "option_3_clicked", "*", _mp_play_view_play_option_cb,
+ ad);
+
+ return ctrl_layout;
+}
+
+
+static bool
+_mp_play_view_create_playing_layout(void *data, Evas_Object * parents_layout, bool b_next)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ //2 Create playing view
+ playing_view->play_view = mp_common_load_edj(parents_layout, PLAY_VIEW_EDJ_NAME, "mp_play_view");
+
+ MP_CHECK_FALSE(playing_view->play_view);
+
+ //hide mute popup
+ edje_object_signal_emit(_EDJ(playing_view->play_view), SIGNAL_MAIN_MUTE_HIDE, "*");
+
+ Evas_Object *event_box = mp_smart_event_box_add(playing_view->play_view);
+
+ evas_object_size_hint_weight_set(event_box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(event_box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_smart_callback_add(event_box, "mouse.clicked", _mp_play_view_eventbox_clicked_cb, ad);
+ evas_object_smart_callback_add(event_box, "mouse.flick.left", _mp_play_view_eventbox_flick_left_cb, ad);
+ evas_object_smart_callback_add(event_box, "mouse.flick.right", _mp_play_view_eventbox_flick_right_cb, ad);
+
+
+ evas_object_show(event_box);
+ elm_object_part_content_set(playing_view->play_view, "event_box", event_box);
+ evas_object_data_set(playing_view->play_view, "event_box", event_box);
+
+ mp_evas_object_del(playing_view->albumart_bg);
+ playing_view->albumart_bg = evas_object_image_add(ad->evas);
+ int w, h;
+ ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+ evas_object_image_load_size_set(playing_view->albumart_bg, w, h*HD_ALBUM_IMAGE_H_SCALE);
+ evas_object_image_fill_set(playing_view->albumart_bg, 0, 0, w, h*HD_ALBUM_IMAGE_H_SCALE);
+ elm_object_part_content_set(playing_view->play_view, "album_bg", playing_view->albumart_bg);
+
+ playing_view->play_ctrl =
+ _mp_play_view_create_ctrl_layout(ad, playing_view->play_view, &playing_view->play_progressbar, FALSE);
+
+ _mp_play_view_progress_visible_set(ad, TRUE);
+ _mp_play_progress_val_set(ad, 0.0);
+
+ evas_object_show(playing_view->play_progressbar);
+
+ endfunc;
+
+ return TRUE;
+}
+
+static bool
+_mp_play_view_create_layout(void *data)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ //2 Create main layout
+
+ if (playing_view->layout)
+ {
+ mp_debug("already created skip create layout");
+ return TRUE;
+ }
+
+ MP_CHECK_FALSE(ad->library);
+ MP_CHECK_FALSE(ad->library->cur_view);
+ playing_view->layout =
+ mp_common_load_edj(ad->library->cur_view, PLAY_VIEW_EDJ_NAME, "mp_play_view_layout");
+ MP_CHECK_FALSE(playing_view->layout);
+
+ evas_object_event_callback_add(playing_view->layout, EVAS_CALLBACK_DEL, _mp_play_view_destory_cb, playing_view);
+ //2 Create playing view
+ _mp_play_view_create_playing_layout(ad, playing_view->layout, FALSE);
+
+ //2 Create menu layout
+ _mp_play_view_create_menu(ad);
+
+ //2 Create control bar
+ _mp_play_view_create_control_bar(ad);
+
+ //2 Push at navibar
+ _mp_play_view_push_navibar(ad);
+
+ mp_debug("");
+
+ endfunc;
+
+ return true;
+}
+void
+_mp_play_view_delete_progress_timer(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ mp_ecore_timer_del(playing_view->progressbar_timer);
+}
+
+bool
+mp_play_view_set_menu_state(void *data, bool show, bool anim)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ ad->show_optional_menu = show;
+
+ if (!show)
+ {
+ mp_debug("set hide state");
+
+ mp_ecore_timer_del(ad->longpress_timer);
+ _mp_play_view_menu_visible_set(ad, FALSE, anim);
+
+ }
+ else
+ {
+ mp_debug("set show state");
+
+ _mp_play_view_menu_visible_set(ad, TRUE, anim);
+ }
+
+ return true;
+
+}
+
+void
+mp_play_view_progress_timer_thaw(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ if (playing_view->progressbar_timer && ad->player_state == PLAY_STATE_PLAYING)
+ {
+ ecore_timer_thaw(playing_view->progressbar_timer);
+ }
+}
+
+void
+mp_play_view_progress_timer_freeze(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ if (playing_view->progressbar_timer)
+ {
+ ecore_timer_freeze(playing_view->progressbar_timer);
+ }
+}
+
+void
+mp_play_view_update_progressbar(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK(playing_view);
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK(current_item);
+
+ char play_time[16] = { 0, };
+ char total_time[16] = { 0, };
+
+ if (ad->music_length > 0.)
+ {
+ if (ad->music_length > 3600.)
+ {
+ snprintf(total_time, sizeof(total_time), "%" MUSIC_TIME_FORMAT,
+ MUSIC_TIME_ARGS(ad->music_length));
+ snprintf(play_time, sizeof(play_time), "%" MUSIC_TIME_FORMAT, MUSIC_TIME_ARGS(ad->music_pos));
+ }
+ else
+ {
+ snprintf(total_time, sizeof(total_time), "%" PLAY_TIME_FORMAT,
+ PLAY_TIME_ARGS(ad->music_length));
+ snprintf(play_time, sizeof(play_time), "%" PLAY_TIME_FORMAT, PLAY_TIME_ARGS(ad->music_pos));
+ }
+ }
+ else
+ { //if the duration which is getting from mmfw is 0, it will use duration which is getting from mp-svc
+ snprintf(total_time, sizeof(total_time), "%s", current_item->time);
+ snprintf(play_time, sizeof(play_time), "%" PLAY_TIME_FORMAT, PLAY_TIME_ARGS(ad->music_pos));
+ }
+
+ double played_ratio = 0.;
+ if(ad->music_length > 0. && ad->music_pos > 0.)
+ played_ratio = ad->music_pos / ad->music_length;
+ _mp_play_progress_val_set(ad, played_ratio);
+ edje_object_part_text_set(_EDJ(playing_view->play_progressbar), "progress_text_total", total_time);
+ edje_object_part_text_set(_EDJ(playing_view->play_progressbar), "progress_text_playing", play_time);
+
+ _mp_play_view_progress_visible_set(ad, TRUE);
+
+ return;
+
+}
+
+bool
+mp_play_view_stop_transit(void *data)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ if (playing_view->play_view_next && playing_view->playing_list_item)
+ {
+ mp_play_list_set_current_item(ad, ad->playing_list, playing_view->playing_list_item->key_id);
+ mp_play_view_refresh(ad);
+ _mp_play_view_clear_next_view(data);
+ _mp_play_view_init_progress_bar(data);
+ edje_object_signal_callback_del(elm_layout_edje_get(playing_view->layout), "transit_done", "*",
+ _mp_play_view_transit_by_item_complete_cb);
+ }
+
+ return true;
+}
+
+bool
+mp_play_view_load_track(void *data)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+ MP_CHECK_FALSE(ad->playing_list);
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+ MP_CHECK_FALSE(current_item);
+
+ // get alubmart
+ if (!strstr(PREFIX, current_item->albumart) && mp_util_is_image_valid(ad->evas, current_item->albumart))
+ {
+ evas_object_image_file_set(playing_view->albumart_bg, current_item->albumart, NULL);
+ }
+ else
+ {
+ evas_object_image_file_set(playing_view->albumart_bg, DEFAULT_THUMBNAIL, NULL);
+ }
+ evas_object_show(playing_view->albumart_bg);
+
+ playing_view->flick_direction = 0;
+
+ _mp_play_view_load_track_info(data, mp_play_list_get_current_item(ad->playing_list));
+
+ endfunc;
+
+ return true;
+}
+
+
+bool
+mp_play_view_load_by_path(struct appdata * ad, char *path)
+{
+ MP_CHECK_FALSE(ad);
+ MP_CHECK_FALSE(path);
+
+ //create play list and set playing request item
+ mp_play_list_create_by_path(ad, &ad->playing_list, path);
+
+ //reget current item
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);;
+ MP_CHECK_FALSE(current_item);
+
+ DEBUG_TRACE("current_item->artist: %s", current_item->artist);
+
+ mp_setting_save_last_played(NULL);
+
+ mp_play_destory(ad);
+ ad->paused_by_user = FALSE;
+
+ if (ad->playing_view)
+ {
+ evas_object_del(ad->playing_view->play_control);
+ _mp_play_view_create_control_bar(ad);
+ mp_play_view_play_item(ad, current_item, false, true);
+ }
+ else
+ {
+ mp_play_view_load(ad);
+ MP_CHECK_FALSE(ad->library);
+ MP_CHECK_FALSE(ad->library->cur_view);
+ evas_object_smart_callback_add(ad->library->cur_view, "transition,finished",
+ _mp_play_view_start_request, ad);
+ }
+
+ return true;
+}
+
+
+static void
+_mp_play_view_start_request(void *data, Evas_Object * obj, void *event_info)
+{
+ struct appdata *ad = (struct appdata *)data;
+ mp_retm_if(!ad, "ad");
+
+ mp_playing_view *playing_view = ad->playing_view;
+ mp_retm_if(!playing_view, "ad");
+
+ startfunc;
+ ad->paused_by_user = FALSE;
+ mp_play_new_file(data, TRUE);
+
+ _mp_play_view_init_progress_bar(data);
+
+ evas_object_smart_callback_del(ad->library->cur_view, "transition,finished", _mp_play_view_start_request);
+
+ endfunc;
+
+ return;
+}
+
+
+bool
+mp_play_view_load_by_index(mp_layout_data_t * layout_data, int index, bool effect_value)
+{
+ MP_CHECK_FALSE(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ struct appdata *ad = layout_data->ad;
+ MP_CHECK_FALSE(ad);
+
+ bool reqest_play = false;
+ char *latest_key_id = NULL;
+ bool result = false;
+
+ music_list_item *current_item = mp_play_list_get_current_item(ad->playing_list);
+
+ if (current_item)
+ latest_key_id = g_strdup(current_item->key_id);
+ else
+ reqest_play = true;
+
+ if (layout_data->view_mode == MP_VIEW_MODE_DEFAULT)
+ result = mp_play_list_create_play_list(ad, layout_data->svc_handle, layout_data->item_count, index, layout_data->playlist_id); //set current item here!!1
+ else
+ result = mp_play_list_create_play_list(ad, layout_data->track_handle, layout_data->track_count, index, layout_data->playlist_id); //use track_handle when playback started from search result...
+
+ current_item = mp_play_list_get_current_item(ad->playing_list); //reget current item
+
+ MP_CHECK_EXCEP(current_item);
+ MP_CHECK_EXCEP(result);
+ MP_CHECK_EXCEP(ad->playing_list);
+
+ if (ad->loadtype != LOAD_PLAY)
+ mp_setting_save_last_played(layout_data); //store playlist info.
+
+ if (layout_data->type_str)
+ ad->playing_list->type_string = g_strdup(layout_data->type_str);
+ if (layout_data->filter_str)
+ ad->playing_list->filter_string = g_strdup(layout_data->filter_str);
+ ad->playing_list->playlist_id = layout_data->playlist_id;
+
+
+ ad->playing_list->item_type = layout_data->track_type;
+
+ if (ad->loadtype == LOAD_PLAY) //when there is no transition effect, directly play track.
+ {
+ ad->paused_by_user = FALSE;
+ mp_play_destory(ad);
+ mp_play_view_load(ad);
+ mp_play_new_file(ad, TRUE);
+ _mp_play_view_init_progress_bar(ad);
+ }
+ else
+ {
+ if (g_strcmp0(latest_key_id, current_item->key_id))
+ {
+ reqest_play = true;
+ mp_play_destory(ad);
+ }
+
+ if (effect_value)
+ {
+ _mp_play_view_transit_by_item(ad, current_item, true);
+ }
+ else
+ {
+ mp_play_view_load(ad);
+ {
+ if (reqest_play)
+ evas_object_smart_callback_add(ad->library->cur_view, "transition,finished",
+ _mp_play_view_start_request, ad);
+ }
+ }
+ }
+
+ IF_FREE(latest_key_id);
+ return true;
+
+ mp_exception:
+ IF_FREE(latest_key_id);
+ return false;
+
+}
+
+
+bool
+mp_play_view_play_item(void *data, struct music_list_item * it, bool effect_value, bool move_left)
+{
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ MP_CHECK_FALSE(it);
+ MP_CHECK_FALSE(ad->playing_list);
+
+ if (effect_value && (ad->playing_list->count > 1))
+ {
+ if(ad->prohibit_aul_relaunch)
+ _mp_play_view_transit_by_item(data, it, move_left);
+ else
+ {
+ IF_FREE(playing_view->playing_list_item);
+ mp_play_list_item_copy(&playing_view->playing_list_item, it);
+ mp_play_item_play(ad, playing_view->playing_list_item->key_id);
+ mp_play_view_refresh(data);
+ }
+ }
+ else
+ {
+ if (ad->playing_list)
+ {
+ MP_CHECK_FALSE(ad->playing_list->current_item);
+ mp_play_item_play(data, ad->playing_list->current_item->key_id);
+ }
+ mp_play_view_refresh(data);
+ }
+
+ return true;
+}
+
+bool
+mp_play_view_create_library(void *data)
+{
+ // create library view , that function use for loadtype is track , that do not support one one track view
+ startfunc;
+
+ struct appdata *ad = data;
+ MP_CHECK_FALSE(ad);
+
+ if (!ad->base_layout_main)
+ {
+ ad->request_group_type = -1;
+
+ mp_library_create(ad);
+ MP_CHECK_FALSE(ad->library);
+
+ elm_toolbar_item_selected_set(ad->library->ctltab_songs, EINA_TRUE);
+ }
+
+ ad->b_add_tracks = 0;
+ elm_toolbar_item_selected_set(ad->library->ctltab_songs, EINA_TRUE);
+ Evas_Object *layout = mp_view_manager_get_last_view_layout(ad);
+ mp_view_layout_set_edit_mode(mp_util_get_layout_data(layout), false);
+ endfunc;
+
+ return true;
+}
+
+bool
+mp_play_view_create(void *data)
+{
+ struct appdata *ad = data;
+ mp_retvm_if(!ad, FALSE, "ad is invalid");
+
+ mp_retvm_if(ad->playing_view != NULL, FALSE, "ad playing_view is is valid exit create");
+
+ ad->playing_view = malloc(sizeof(mp_playing_view));
+ MP_CHECK_FALSE(ad->playing_view);
+ memset(ad->playing_view, 0, sizeof(mp_playing_view));
+
+ ad->playing_view->ad = ad;
+
+ _mp_play_view_init(ad);
+
+ return true;
+}
+
+bool
+mp_play_view_destory(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ if (playing_view->layout)
+ mp_evas_object_del(playing_view->layout); //=> call _mp_play_view_layout_del_cb watchout
+ else
+ IF_FREE(ad->playing_view);
+
+ return true;
+}
+
+bool
+mp_play_view_load(void *data)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_play_view_create(data);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ _mp_play_view_create_layout(data);
+ MP_CHECK_FALSE(playing_view->layout);
+
+ mp_play_view_refresh(data);
+
+ endfunc;
+
+ return true;
+}
+
+bool
+mp_play_view_pop(void *data)
+{
+ startfunc;
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+ mp_view_manager_pop_play_view(ad);
+ endfunc;
+ return true;
+}
+
+bool
+mp_play_view_refresh(void *data)
+{
+ startfunc;
+
+ struct appdata *ad = (struct appdata *)data;
+ MP_CHECK_FALSE(ad);
+
+ mp_playing_view *playing_view = ad->playing_view;
+ MP_CHECK_FALSE(playing_view);
+
+ mp_play_view_load_track(ad);
+
+ mp_play_view_set_menu_state(ad, ad->show_optional_menu, false);
+
+ _mp_play_view_init_progress_bar(data);
+
+ const Evas_Object *play_icon = elm_object_part_content_get(ad->playing_view->play_control, "buttons");
+ if (play_icon != NULL)
+ {
+ MMPlayerStateType player_state = mp_player_mgr_get_state();
+ if (player_state != MM_PLAYER_STATE_PLAYING)
+ {
+ edje_object_signal_emit(_EDJ(play_icon), "play", CTR_PROG_SIG_SRC);
+ }
+ else
+ {
+ edje_object_signal_emit(_EDJ(play_icon), "pause", CTR_PROG_SIG_SRC);
+ }
+ }
+ endfunc;
+ return true;
+}
+
+static void
+_mp_play_view_popup_response_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ mp_app_exit(data);
+}
+
+bool
+mp_play_view_load_by_play(struct appdata *ad, const char *request_title)
+{
+ startfunc;
+ MP_CHECK_FALSE(ad);
+
+ bool success = true;
+ char *popup_txt = NULL;
+ mp_layout_data_t *layout_data = NULL;
+ int index = 0;
+
+ switch (ad->launch_type)
+ {
+ case MP_LAUNCH_PLAY_RECENT:
+ {
+ if (ecore_file_exists(MP_RECENT_PLAYED_INI_FILE_NAME) || !ecore_file_exists(MP_NOWPLAYING_INI_FILE_NAME))
+ {
+ layout_data = calloc(1, sizeof(mp_layout_data_t));
+ index = 0;
+ MP_CHECK_FALSE(layout_data);
+ MP_SET_LAYOUT_DATA_MAGIC(layout_data);
+ if (mp_util_get_recent_play_data(layout_data, &index, NULL))
+ {
+ layout_data->ad = ad;
+
+ mp_play_view_load_by_index(layout_data, index, false);
+
+ if (layout_data->svc_handle)
+ {
+ if (layout_data->playlist_id < 0)
+ audio_svc_list_item_free(layout_data->svc_handle);
+ else
+ audio_svc_playlist_item_free(layout_data->svc_handle);
+ }
+ }
+ else
+ {
+ success = false;
+ popup_txt = GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST");
+ }
+ IF_FREE(layout_data->type_str);
+ IF_FREE(layout_data->filter_str);
+ free(layout_data);
+ }
+ else
+ {
+ if (ecore_file_exists(MP_NOWPLAYING_INI_FILE_NAME))
+ {
+ char *path;
+ if (mp_util_get_recent_play_data(NULL, NULL, &path))
+ {
+ mp_play_view_load_by_path(ad, path);
+ IF_FREE(path);
+ }
+ else
+ {
+ success = false;
+ popup_txt = GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST");
+ }
+ }
+ else
+ {
+ success = false;
+ popup_txt = GET_SYS_STR("IDS_COM_POP_FILE_NOT_EXIST");
+ }
+
+ }
+
+ break;
+ }
+ case MP_LAUNCH_PLAY_PLAYLIST:
+ {
+ layout_data = calloc(1, sizeof(mp_layout_data_t));
+ index = 0;
+ MP_CHECK_FALSE(layout_data);
+ MP_SET_LAYOUT_DATA_MAGIC(layout_data);
+ if (mp_util_get_playlist_data(layout_data, &index, request_title))
+ {
+ layout_data->ad = ad;
+
+ mp_play_view_load_by_index(layout_data, index, false);
+
+ if (layout_data->svc_handle)
+ {
+ audio_svc_playlist_item_free(layout_data->svc_handle);
+ }
+ }
+ else
+ {
+ success = false;
+ popup_txt = GET_SYS_STR("IDS_COM_BODY_NO_CONTENTS");
+ }
+ free(layout_data);
+ break;
+ }
+ case MP_LAUNCH_PLAY_GROUP:
+ {
+ layout_data = calloc(1, sizeof(mp_layout_data_t));
+ MP_CHECK_FALSE(layout_data);
+ MP_SET_LAYOUT_DATA_MAGIC(layout_data);
+
+ layout_data->ad = ad;
+ layout_data->filter_str = (char *)request_title;
+ layout_data->track_type = ad->track_type;
+ layout_data->group_type = ad->group_type;
+ layout_data->playlist_id = -1;
+
+ if (mp_util_get_list_data(layout_data))
+ {
+ mp_play_view_load_by_index(layout_data, 0, false);
+
+ if (layout_data->svc_handle)
+ {
+ audio_svc_group_item_free(layout_data->svc_handle);
+ }
+ }
+ else
+ {
+ success = false;
+ popup_txt = GET_SYS_STR("IDS_COM_BODY_NO_CONTENTS");
+ }
+ free(layout_data);
+ break;
+ }
+ case MP_LAUNCH_PLAY_SOMETHING:
+ {
+ layout_data = calloc(1, sizeof(mp_layout_data_t));
+ MP_CHECK_FALSE(layout_data);
+ MP_SET_LAYOUT_DATA_MAGIC(layout_data);
+
+ layout_data->ad = ad;
+ layout_data->filter_str = (char *)request_title;
+ layout_data->playlist_id = -1;
+
+ if (mp_util_get_list_data(layout_data))
+ {
+ layout_data->ad = ad;
+
+ mp_play_view_load_by_index(layout_data, 0, false);
+
+ if (layout_data->svc_handle)
+ {
+ audio_svc_group_item_free(layout_data->svc_handle);
+ }
+ }
+ else
+ {
+ success = false;
+ popup_txt = GET_SYS_STR("IDS_COM_BODY_NO_CONTENTS");
+ }
+ free(layout_data);
+ break;
+ }
+
+ default:
+ WARN_TRACE("Unsupported type: %d", ad->launch_type);
+ break;
+ }
+
+ if (!success)
+ {
+ Evas_Object *popup = elm_popup_add(ad->win_main);
+ mp_popup_desc_set(popup, popup_txt);
+ mp_popup_set_response_cb(popup, _mp_play_view_popup_response_cb, ad);
+ mp_popup_button_set(popup, "button1", GET_SYS_STR("IDS_COM_SK_OK"), MP_POPUP_YES);
+ mp_popup_timeout_set(popup, 3.0);
+ evas_object_show(ad->win_main);
+ evas_object_show(popup);
+ }
+ endfunc;
+ return true;
+}
diff --git a/src/view/mp-playlist-view.c b/src/view/mp-playlist-view.c
new file mode 100755
index 0000000..b6e8521
--- /dev/null
+++ b/src/view/mp-playlist-view.c
@@ -0,0 +1,736 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-library.h"
+#include "mp-player-debug.h"
+#include "mp-common.h"
+#include "music.h"
+#include "mp-view-layout.h"
+#include "mp-search.h"
+#include "mp-edit-view.h"
+#include "mp-playlist-view.h"
+#include "mp-util.h"
+#include "mp-widget.h"
+#include "mp-widget.h"
+#include "mp-menu.h"
+
+static void _mp_playlist_view_push_group_content(view_data_t * view_data, Evas_Object * content);
+static void _mp_playlist_view_push_item_content(view_data_t * view_data, Evas_Object * content, char *title);
+static void _mp_playlist_view_playlist_list_select_cb(void *data, Evas_Object * obj, void *event_info);
+
+static Elm_Genlist_Item_Class g_track_class_sweep = {
+ .item_style = "music_player/1icon.3text",
+ .func.text_get = mp_common_track_list_label_get,
+ .func.content_get = mp_common_track_list_icon_get,
+};
+
+static void
+_mp_playlist_view_auto_playlist_list_select_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ int ret = AUDIO_SVC_ERROR_NONE;
+ int index = (int)data;
+ char *name = NULL;
+ int size = 0;
+
+ Elm_Object_Item *gli = (Elm_Object_Item *) event_info;
+ elm_genlist_item_selected_set(gli, FALSE);
+
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is NULL !!!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if(layout_data->rename_git)
+ {
+ mp_playlist_view_rename_done_cb(layout_data, NULL, NULL);
+ return;
+ }
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ if (layout_data->edit_mode)
+ {
+ return;
+ }
+
+ view_data_t *view_data = evas_object_data_get(layout_data->navibar, "view_data");
+ mp_retm_if(!view_data, "view_data is null");
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_retm_if(mp_view_manager_count_view_content(view_data) != 1, "detail view_layout might be destroying....");
+
+ ret = audio_svc_playlist_get_val(layout_data->default_playlists, index, AUDIO_SVC_PLAYLIST_NAME, &name, &size,
+ -1);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+ mp_retm_if(name == NULL, "Fail to get value");
+
+ DEBUG_TRACE("playlist name: %s, playlist id: %d", name);
+
+ Evas_Object *view_layout = mp_view_layout_create(view_data->navibar, view_data, MP_VIEW_MODE_DEFAULT);
+
+ mp_genlist_cb_t genlist_cbs;
+ memset(&genlist_cbs, 0, sizeof(mp_genlist_cb_t));
+ genlist_cbs.selected_cb = mp_common_track_genlist_sel_cb;
+
+ if (!strcmp(GET_STR(STR_MP_MOST_PLAYED), name))
+ {
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_TRACK_LIST,
+ MP_LAYOUT_TRACK_LIST_TYPE, AUDIO_SVC_TRACK_BY_PLAYED_COUNT,
+ MP_LAYOUT_GENLIST_ITEMCLASS, &g_track_class_sweep,
+ MP_LAYOUT_LIST_CB, &genlist_cbs, -1);
+ }
+ else if (!strcmp(GET_STR(STR_MP_RECENTLY_ADDED), name))
+ {
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_TRACK_LIST,
+ MP_LAYOUT_TRACK_LIST_TYPE, AUDIO_SVC_TRACK_BY_ADDED_TIME,
+ MP_LAYOUT_GENLIST_ITEMCLASS, &g_track_class_sweep,
+ MP_LAYOUT_LIST_CB, &genlist_cbs, -1);
+ }
+ else if (!strcmp(GET_STR(STR_MP_RECENTLY_PLAYED), name))
+ {
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_TRACK_LIST,
+ MP_LAYOUT_TRACK_LIST_TYPE, AUDIO_SVC_TRACK_BY_PLAYED_TIME,
+ MP_LAYOUT_GENLIST_ITEMCLASS, &g_track_class_sweep,
+ MP_LAYOUT_LIST_CB, &genlist_cbs, -1);
+ }
+ else
+ {
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_TRACK_LIST,
+ MP_LAYOUT_TRACK_LIST_TYPE, AUDIO_SVC_TRACK_BY_PLAYLIST,
+ MP_LAYOUT_PLAYLIT_ID, AUDIO_SVC_FAVORITE_LIST_ID,
+ MP_LAYOUT_LIST_CB, &genlist_cbs,
+ MP_LAYOUT_GENLIST_ITEMCLASS, &g_track_class_sweep, -1);
+ }
+
+ _mp_playlist_view_push_item_content(view_data, view_layout, name);
+ mp_view_layout_update(view_layout);
+
+}
+
+bool
+mp_playlist_view_create_by_id(Evas_Object * obj, int p_id)
+{
+ startfunc;
+
+ view_data_t *view_data = evas_object_data_get(obj, "view_data");
+ mp_retvm_if(!view_data, FALSE, "view_data is null");
+ MP_CHECK_VIEW_DATA(view_data);
+ Evas_Object *view_layout = mp_view_layout_create(obj, view_data, MP_VIEW_MODE_DEFAULT);
+
+ mp_genlist_cb_t genlist_cbs;
+ memset(&genlist_cbs, 0, sizeof(mp_genlist_cb_t));
+ genlist_cbs.selected_cb = mp_common_track_genlist_sel_cb;
+
+ char name[AUDIO_SVC_PLAYLIST_NAME_SIZE] = { '0' };
+
+ audio_svc_get_playlist_name_by_playlist_id(view_data->ad->media_svc_handle, p_id, name, AUDIO_SVC_PLAYLIST_NAME_SIZE);
+
+ if (p_id >= 0)
+ {
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_TRACK_LIST,
+ MP_LAYOUT_TRACK_LIST_TYPE, AUDIO_SVC_TRACK_BY_PLAYLIST,
+ MP_LAYOUT_PLAYLIT_ID, p_id,
+ MP_LAYOUT_LIST_CB, &genlist_cbs,
+ MP_LAYOUT_GENLIST_ITEMCLASS, &g_track_class_sweep, -1);
+ }
+ else
+ WARN_TRACE("invalid playlist!!");
+
+ _mp_playlist_view_push_item_content(view_data, view_layout, name);
+ mp_view_layout_update(view_layout);
+
+ endfunc;
+
+ return true;
+}
+
+static void
+_mp_playlist_view_playlist_list_select_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ int ret = AUDIO_SVC_ERROR_NONE;
+ int index = (int)data;
+ char *name = NULL;
+ int size = 0;
+ int p_id = 0;
+
+ Elm_Object_Item *gli = (Elm_Object_Item *) event_info;
+ elm_genlist_item_selected_set(gli, FALSE);
+
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is NULL !!!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if (elm_genlist_item_flip_get(gli))
+ {
+ return;
+ }
+
+ if(layout_data->rename_git)
+ {
+ mp_playlist_view_rename_done_cb(layout_data, NULL, NULL);
+ return;
+ }
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ if (layout_data->edit_mode)
+ {
+ mp_edit_view_genlist_sel_cb(data, obj, event_info);
+ return;
+ }
+
+ view_data_t *view_data = evas_object_data_get(layout_data->navibar, "view_data");
+ mp_retm_if(!view_data, "view_data is null");
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_retm_if(layout_data->rename_mode, "rename mode.. ignore selection...");
+ mp_retm_if(mp_view_manager_count_view_content(view_data) != 1, "detail view_layout might be destroying....");
+
+ ret = audio_svc_playlist_get_val(layout_data->svc_handle, index, AUDIO_SVC_PLAYLIST_ID, &p_id,
+ AUDIO_SVC_PLAYLIST_NAME, &name, &size, -1);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+ mp_retm_if(name == NULL, "Fail to get value");
+
+ DEBUG_TRACE("playlist name: %s, playlist id: %d", name, p_id);
+
+ Evas_Object *view_layout = mp_view_layout_create(view_data->navibar, view_data, MP_VIEW_MODE_DEFAULT);
+
+ mp_genlist_cb_t genlist_cbs;
+ memset(&genlist_cbs, 0, sizeof(mp_genlist_cb_t));
+ genlist_cbs.selected_cb = mp_common_track_genlist_sel_cb;
+
+ if (p_id >= 0)
+ {
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_TRACK_LIST,
+ MP_LAYOUT_TRACK_LIST_TYPE, AUDIO_SVC_TRACK_BY_PLAYLIST,
+ MP_LAYOUT_PLAYLIT_ID, p_id,
+ MP_LAYOUT_LIST_CB, &genlist_cbs,
+ MP_LAYOUT_GENLIST_ITEMCLASS, &g_track_class_sweep, -1);
+ }
+ else
+ WARN_TRACE("invalid playlist!!");
+
+ mp_util_reset_genlist_mode_item(layout_data->genlist);
+
+ _mp_playlist_view_push_item_content(view_data, view_layout, name);
+ mp_view_layout_update(view_layout);
+
+}
+
+static void
+_mp_playlist_view_push_group_content(view_data_t * view_data, Evas_Object * content)
+{
+ mp_retm_if(!view_data, "view_data is NULL");
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_manager_push_view_content(view_data, content, MP_VIEW_CONTENT_LIST);
+ mp_view_manager_set_title_and_buttons(view_data, GET_STR("IDS_MUSIC_BODY_PLAYLISTS"), view_data);
+}
+
+void
+mp_playlist_view_add_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ struct appdata *ad = view_data->ad;
+ ad->b_add_tracks = TRUE;
+
+ Elm_Object_Item *top_item = elm_naviframe_top_item_get(view_data->navibar);
+ Evas_Object *top_view = elm_object_item_content_get(top_item);
+ mp_retm_if(!top_view, "top view must exist...");
+ mp_layout_data_t *layout_data = evas_object_data_get(top_view, "layout_data");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ ad->new_playlist_id = layout_data->playlist_id;
+ elm_toolbar_item_selected_set(ad->library->ctltab_songs, EINA_TRUE);
+}
+
+static void
+_mp_playlist_view_push_item_content(view_data_t * view_data, Evas_Object * content, char *title)
+{
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_view_manager_push_view_content(view_data, content, MP_VIEW_CONTENT_LIST);
+ mp_view_manager_set_title_and_buttons(view_data, title, view_data);
+}
+
+void
+mp_playlist_view_create_new_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ mp_view_manager_pop_view_content(view_data, FALSE, TRUE);
+}
+
+void
+mp_playlist_view_create_new_done_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ struct appdata *ad = view_data->ad;
+ int plst_uid = -1;
+
+ char *converted_name = NULL;
+ Evas_Object *entry = mp_widget_editfield_entry_get(ad->editfiled_new_playlist);
+ const char *name = elm_entry_entry_get(entry);
+ if (name == NULL || strlen(name) == 0)
+ {
+ name = elm_object_part_text_get(ad->editfiled_new_playlist, "elm.guidetext");
+ }
+ converted_name = elm_entry_markup_to_utf8(name);
+
+ plst_uid = mp_util_create_playlist(ad, converted_name);
+ IF_FREE(converted_name);
+ if (plst_uid < 0)
+ return;
+
+ ad->new_playlist_id = plst_uid;
+ ad->b_add_tracks = TRUE;
+ elm_toolbar_item_selected_set(ad->library->ctltab_songs, EINA_TRUE);
+
+}
+
+void
+mp_playlist_view_create_playlist_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ char *new_playlist_name = NULL;
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ Evas_Object *create_plst_layout = NULL;
+
+ new_playlist_name = mp_util_get_new_playlist_name(view_data->ad->media_svc_handle);
+ create_plst_layout = mp_common_create_editfield_layout(view_data->navibar, view_data->ad, new_playlist_name);
+ IF_FREE(new_playlist_name);
+ mp_retm_if(create_plst_layout == NULL, "create_plst_layout is NULL");
+
+ mp_view_manager_push_view_content(view_data, create_plst_layout, MP_VIEW_CONTENT_NEW_PLAYLIST);
+ mp_view_manager_set_title_and_buttons(view_data, GET_STR("IDS_MUSIC_BODY_CREATE_PLAYLIST"), view_data);
+
+ evas_object_show(create_plst_layout);
+
+}
+
+static char *
+_mp_playlist_view_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ MP_CHECK_NULL(item);
+ AudioHandleType *plst_item = (AudioHandleType *) (item->handle);
+
+ MP_CHECK_NULL(plst_item);
+
+ int ret = AUDIO_SVC_ERROR_NONE;
+ if (!strcmp(part, "elm.text.1"))
+ {
+
+ char *name = NULL;
+ int size;
+ ret = audio_svc_playlist_get_val(plst_item, 0, AUDIO_SVC_PLAYLIST_NAME, &name, &size, -1);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get value");
+ mp_retvm_if(name == NULL, NULL, "Fail to get value");
+ return strdup(name);
+ }
+ else if(!strcmp(part, "elm.text.2"))
+ {
+ int count = -1;
+ int plst_id = -1;
+ ret = audio_svc_playlist_get_val(plst_item, 0, AUDIO_SVC_PLAYLIST_ID, &plst_id, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ MP_CHECK_NULL(plst_id > 0);
+
+ ret = audio_svc_count_playlist_item(item->media_svc_handle, plst_id, NULL, NULL, &count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get count");
+ mp_retvm_if(count < 0, NULL, "Fail to get count");
+ return g_strdup_printf("(%d)", count);
+
+ }
+
+ return NULL;
+}
+
+void
+mp_playlist_view_rename_done_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ char *text = NULL;
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) elm_object_item_data_get(layout_data->rename_git);
+ MP_CHECK(item);
+ AudioHandleType *plst = (AudioHandleType *) (item->handle);
+ MP_CHECK(plst);
+
+ bool rename_success = FALSE;
+ int ret = 0;
+
+ text = mp_util_isf_get_edited_str(layout_data->ad->editfiled_entry, TRUE);
+
+ if (!mp_util_is_playlist_name_valid((char *)text))
+ mp_widget_text_popup(layout_data->ad, GET_STR("IDS_MUSIC_POP_UNABLE_RENAME_PLAYLIST"));
+ else
+ {
+ int count = 0;
+ ret = audio_svc_count_playlist_by_name(layout_data->ad->media_svc_handle, text, &count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ ERROR_TRACE("Fail to get playlist count by name: %d", ret);
+ mp_widget_text_popup(layout_data->ad, GET_STR("IDS_MUSIC_POP_UNABLE_CREATE_PLAYLIST"));
+ }
+ else
+ {
+ if (count > 0) {
+ char *origin_name = NULL;
+ int size = 0;
+ audio_svc_playlist_get_val(plst, 0, AUDIO_SVC_PLAYLIST_NAME, &origin_name, &size, -1);
+ if (origin_name && !g_strcmp0(origin_name, text)) {
+ mp_debug("Not edited.. rename OK");
+ rename_success = TRUE;
+ } else {
+ char *msg = g_strdup_printf("Playlist name %s is exist", text);
+ mp_widget_text_popup(layout_data->ad, msg);
+ SAFE_FREE(msg);
+ }
+ } else {
+ audio_svc_playlist_set_val(plst, 0, AUDIO_SVC_PLAYLIST_NAME, text, AUDIO_SVC_METADATA_LEN_MAX, -1);
+
+ int plst_id = -1;
+ audio_svc_playlist_get_val(plst, 0, AUDIO_SVC_PLAYLIST_ID, &plst_id, -1);
+ ret = audio_svc_update_playlist_name(layout_data->ad->media_svc_handle, plst_id, text);
+ if (ret == AUDIO_SVC_ERROR_NONE) {
+ mp_debug("audio_svc_update_playlist_name().. OK");
+ rename_success = TRUE;
+ }
+
+ }
+ }
+ }
+ IF_FREE(text);
+
+ if (rename_success) {
+ mp_debug("playlist rename success");
+ if (layout_data->edit_mode)
+ mp_view_manager_update_list_contents(layout_data->view_data, FALSE);
+ }
+
+ elm_genlist_item_update(layout_data->rename_git);
+
+ mp_util_unset_rename(layout_data);
+
+ return;
+}
+
+void
+mp_playlist_view_rename_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE_FUNC();
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->ad->navi_effect_in_progress, "navi effect in progress");
+ mp_util_unset_rename(layout_data);
+}
+
+static void
+_mp_playlist_rename_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ MP_CHECK(data);
+ mp_layout_data_t *layout_data =
+ (mp_layout_data_t *) evas_object_data_get(elm_object_item_widget_get(data), "layout_data");
+ MP_CHECK(layout_data);
+
+ if (layout_data->rename_mode)
+ {
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ if (layout_data->rename_git)
+ {
+ elm_genlist_item_flip_set(layout_data->rename_git, EINA_FALSE);
+ elm_genlist_item_select_mode_set(layout_data->rename_git, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+ }
+
+ layout_data->rename_git = data;
+ layout_data->rename_mode = true;
+
+ elm_genlist_item_flip_set(layout_data->rename_git, EINA_TRUE);
+ elm_genlist_item_select_mode_set(layout_data->rename_git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ mp_common_set_title_button_sensitivity(layout_data, layout_data->checked_count);
+}
+
+static Evas_Object *
+_mp_playlist_view_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ MP_CHECK_NULL(item);
+ AudioHandleType *plst = (AudioHandleType *) (item->handle);
+
+ MP_CHECK_NULL(plst);
+
+ Evas_Object *eo = NULL;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ int playlist_id = 0;
+ char *thumb_path = NULL;
+ char *name = NULL;
+ int size;
+ mp_retvm_if(!layout_data, NULL, "list data is NULL !!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ ret = audio_svc_playlist_get_val(plst, 0, AUDIO_SVC_PLAYLIST_ID, &playlist_id,
+ AUDIO_SVC_PLAYLIST_THUMBNAIL_PATH, &thumb_path, &size, AUDIO_SVC_PLAYLIST_NAME,
+ &name, &size, -1);
+
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get value");
+ if (!strcmp(part, "elm.icon"))
+ {
+
+ if (!playlist_id)
+ {
+ if (!strcmp(GET_STR(STR_MP_MOST_PLAYED), name))
+ {
+ eo = mp_util_create_thumb_icon(obj, THUMBNAIL_MOST_PLAYED, MP_LIST_ICON_SIZE,
+ MP_LIST_ICON_SIZE);
+ }
+ else if (!strcmp(GET_STR(STR_MP_RECENTLY_ADDED), name))
+ {
+ eo = mp_util_create_thumb_icon(obj, THUMBNAIL_RECENTLY_ADDED, MP_LIST_ICON_SIZE,
+ MP_LIST_ICON_SIZE);
+ }
+ else if (!strcmp(GET_STR(STR_MP_RECENTLY_PLAYED), name))
+ {
+ eo = mp_util_create_thumb_icon(obj, THUMBNAIL_RECENTLY_PLAYED, MP_LIST_ICON_SIZE,
+ MP_LIST_ICON_SIZE);
+ }
+ else
+ {
+ eo = mp_util_create_thumb_icon(obj, THUMBNAIL_QUICK_LIST, MP_LIST_ICON_SIZE,
+ MP_LIST_ICON_SIZE);
+ }
+ }
+ else
+ {
+ if (thumb_path == NULL)
+ {
+ int count = 0;
+ audio_svc_count_playlist_item(item->media_svc_handle, playlist_id, NULL, NULL, &count);
+ if (count <= 0)
+ eo = mp_util_create_thumb_icon(obj, THUMBNAIL_PLAYLIST_NOITEM,
+ MP_LIST_ICON_SIZE, MP_LIST_ICON_SIZE);
+ else
+ eo = mp_util_create_thumb_icon(obj, NULL, MP_LIST_ICON_SIZE, MP_LIST_ICON_SIZE);
+ }
+ else
+ {
+ eo = mp_util_create_thumb_icon(obj, thumb_path, MP_LIST_ICON_SIZE, MP_LIST_ICON_SIZE);
+ }
+ }
+ }
+ else if (!strcmp(part, "elm.swallow.end"))
+ {
+ if (playlist_id > 0 && layout_data->edit_mode)
+ {
+ eo = elm_button_add(obj);
+ elm_object_style_set(eo, "rename");
+ evas_object_smart_callback_add(eo, "clicked", _mp_playlist_rename_button_cb, item->it);
+ evas_object_data_set(eo, "layout_data", layout_data);
+ }
+ }
+
+ Evas_Object *btn = NULL, *check = NULL, *edit_field = NULL, *entry = NULL;
+
+ if (elm_genlist_decorate_mode_get(obj))
+ {
+ if (!strcmp(part, "elm.edit.icon.1"))
+ {
+ if (!elm_genlist_item_flip_get(item->it))
+ {
+ check = elm_check_add(obj);
+ elm_check_state_pointer_set(check, &item->checked);
+ evas_object_smart_callback_add(check, "changed", mp_common_item_check_changed_cb, item);
+ return check;
+ }
+ }
+ else if (!strcmp(part, "elm.edit.icon.2"))
+ {
+ btn = elm_button_add(obj);
+ elm_object_style_set(btn, "rename");
+ if (item->it)
+ {
+ evas_object_smart_callback_add(btn, "clicked", _mp_playlist_rename_button_cb, item->it);
+ evas_object_propagate_events_set(btn, EINA_FALSE);
+ evas_object_data_set(btn, "layout_data", layout_data);
+ }
+ return btn;
+ }
+ }
+
+ if (!strcmp(part, "elm.flip.content"))
+ {
+ edit_field = mp_widget_create_editfield(obj, AUDIO_SVC_PLAYLIST_NAME_SIZE - 1, NULL, layout_data->ad);
+ entry = mp_widget_editfield_entry_get(edit_field);
+ name = elm_entry_utf8_to_markup(name);
+ elm_entry_entry_set(entry, name);
+ elm_entry_cursor_end_set(entry);
+
+ layout_data->ad->editfiled_entry = entry;
+
+ evas_object_smart_callback_add(entry, "activated", mp_playlist_view_rename_done_cb, layout_data);
+
+ evas_object_show(entry);
+ elm_object_focus_set(entry, EINA_TRUE);
+
+ return edit_field;
+ }
+
+ return eo;
+}
+
+static Elm_Genlist_Item_Class g_playlist_class_sweep = {
+ .item_style = "music_player/1icon.2text",
+ .func.text_get = _mp_playlist_view_label_get,
+ .func.content_get = _mp_playlist_view_icon_get,
+};
+
+static Elm_Genlist_Item_Class g_playlist_class = {
+ .item_style = "music_player/1icon.2text",
+ .func.text_get = _mp_playlist_view_label_get,
+ .func.content_get = _mp_playlist_view_icon_get,
+};
+
+static mp_genlist_cb_t g_playlist_list_cbs = {
+ .selected_cb = _mp_playlist_view_playlist_list_select_cb,
+ .auto_playlist_cb = _mp_playlist_view_auto_playlist_list_select_cb
+};
+
+Evas_Object *
+mp_playlist_view_create(struct appdata *ad, mp_view_type_t view_type)
+{
+ DEBUG_TRACE("view_type: %d", view_type);
+ Evas_Object *navibar = mp_widget_navigation_new(ad->ctrl_bar, ad);
+
+ view_data_t *view_data = calloc(sizeof(view_data_t), 1);
+ MP_SET_VIEW_DATA_MAGIC(view_data);
+ view_data->ad = ad;
+ view_data->navibar = navibar;
+ view_data->view_type = view_type;
+ DEBUG_TRACE("view_data->navibar: %x", view_data->navibar);
+
+ evas_object_data_set(navibar, "view_data", view_data);
+
+ Evas_Object *view_layout = mp_view_layout_create(navibar, view_data, MP_VIEW_MODE_DEFAULT);
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_PLAYLIST_LIST,
+ MP_LAYOUT_LIST_CB, &g_playlist_list_cbs,
+ MP_LAYOUT_GENLIST_ITEMCLASS, &g_playlist_class_sweep,
+ MP_LAYOUT_GENLIST_AUTO_PLAYLIST_ITEMCLASS, &g_playlist_class, -1);
+ _mp_playlist_view_push_group_content(view_data, view_layout);
+
+ return navibar;
+}
+
+void
+mp_playlist_view_destroy(Evas_Object * playlist_view)
+{
+ DEBUG_TRACE("");
+}
+
+void
+mp_playlist_view_refresh(Evas_Object * playlist_view)
+{
+ DEBUG_TRACE("");
+ view_data_t *view_data = (view_data_t *) evas_object_data_get(playlist_view, "view_data");
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ mp_view_manager_update_list_contents(view_data, TRUE);
+}
+
+void
+mp_playlist_view_update_navibutton(mp_layout_data_t * layout_data)
+{
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_view_manager_set_title_and_buttons(layout_data->view_data, NULL, layout_data->view_data);
+}
+
+void
+mp_playlist_view_update_genlist_item_class(mp_layout_data_t * layout_data)
+{
+ startfunc;
+ MP_CHECK(layout_data);
+ MP_CHECK(layout_data->rename_git);
+ elm_genlist_item_item_class_update(layout_data->rename_git, &g_playlist_class_sweep);
+ elm_genlist_item_update(layout_data->rename_git);
+ endfunc;
+}
+
+bool
+mp_playlist_view_reset_rename_mode(struct appdata *ad)
+{
+ MP_CHECK_FALSE(ad);
+
+ MP_CHECK_FALSE(ad->library);
+ MP_CHECK_FALSE(ad->library->cur_view);
+
+ view_data_t *view_data = evas_object_data_get(ad->library->cur_view, "view_data");
+ MP_CHECK_FALSE(view_data);
+
+ mp_layout_data_t *layout_data = NULL;
+
+ Evas_Object *last_view_layout = mp_view_manager_get_last_view_layout(ad);
+
+ if (last_view_layout)
+ {
+ layout_data = evas_object_data_get(last_view_layout, "layout_data");
+ }
+
+ MP_CHECK_FALSE(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_util_unset_rename(layout_data);
+
+ return true;
+}
diff --git a/src/view/mp-track-view.c b/src/view/mp-track-view.c
new file mode 100755
index 0000000..7fb6812
--- /dev/null
+++ b/src/view/mp-track-view.c
@@ -0,0 +1,170 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-library.h"
+#include "mp-player-debug.h"
+#include "mp-common.h"
+#include "music.h"
+#include "mp-view-layout.h"
+#include "mp-search.h"
+#include "mp-edit-view.h"
+#include "mp-widget.h"
+#include "mp-util.h"
+
+void
+mp_track_view_add_to_playlist_done_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ if (view_data->ad->notify != NULL)
+ {
+ evas_object_del(view_data->ad->notify);
+ }
+ if (view_data->ad->notify_layout != NULL)
+ {
+ evas_object_del(view_data->ad->notify_layout);
+ }
+
+ view_data->ad->notify = NULL;
+ view_data->ad->notify_layout = NULL;
+
+ mp_layout_data_t *layout_data = NULL;
+ layout_data = evas_object_data_get(mp_view_manager_get_first_view_layout(view_data->ad), "layout_data");
+ if (layout_data)
+ {
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ layout_data->edit_playlist_id = view_data->ad->new_playlist_id;
+ mp_edit_view_excute_edit(layout_data, MP_EDIT_ADD_TO_PLAYLIST);
+ }
+ else
+ DEBUG_TRACE("layout_data is NULL !!!");
+}
+
+void
+mp_track_view_add_to_playlist_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ view_data_t *view_data = (view_data_t *) data;
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ MP_CHECK(view_data->ad);
+
+ mp_retm_if(view_data->ad->navi_effect_in_progress, "navi effect in progress");
+
+ view_data->ad->b_add_tracks = FALSE;
+
+ if (view_data->ad->notify != NULL)
+ {
+ evas_object_del(view_data->ad->notify);
+ }
+ if (view_data->ad->notify_layout != NULL)
+ {
+ evas_object_del(view_data->ad->notify_layout);
+ }
+
+ view_data->ad->notify = NULL;
+ view_data->ad->notify_layout = NULL;
+
+ Evas_Object *view_layout = mp_view_manager_get_last_view_layout(view_data->ad);
+ MP_CHECK(view_layout);
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_view_layout_reset_select_all(layout_data);
+
+ elm_toolbar_item_selected_set(view_data->ad->library->ctltab_plist, EINA_TRUE);
+}
+
+Evas_Object *
+mp_track_view_create(struct appdata *ad)
+{
+ DEBUG_TRACE("");
+ Evas_Object *navibar = mp_widget_navigation_new(ad->ctrl_bar, ad);
+
+ view_data_t *view_data = calloc(sizeof(view_data_t), 1);
+ MP_SET_VIEW_DATA_MAGIC(view_data);
+ view_data->ad = ad;
+ view_data->navibar = navibar;
+
+ evas_object_data_set(navibar, "view_data", view_data);
+ Evas_Object *view_layout = mp_view_layout_create(navibar, view_data, MP_VIEW_MODE_DEFAULT);
+
+ Elm_Genlist_Item_Class itc;
+ memset(&itc, 0, sizeof(Elm_Genlist_Item_Class));
+ itc.item_style = "music_player/1icon.3text";
+ itc.func.text_get = mp_common_track_list_label_get;
+ itc.func.content_get = mp_common_track_list_icon_get;
+
+ mp_genlist_cb_t genlist_cbs;
+ memset(&genlist_cbs, 0, sizeof(mp_genlist_cb_t));
+ genlist_cbs.selected_cb = mp_common_track_genlist_sel_cb;
+
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_TRACK_LIST_TYPE, AUDIO_SVC_TRACK_ALL,
+ MP_LAYOUT_LIST_CB, &genlist_cbs, MP_LAYOUT_GENLIST_ITEMCLASS, &itc, -1);
+
+ mp_view_manager_push_view_content(view_data, view_layout, MP_VIEW_CONTENT_LIST);
+
+ return navibar;
+}
+
+void
+mp_track_view_destroy(Evas_Object * track_view)
+{
+ DEBUG_TRACE("");
+ evas_object_del(track_view);
+}
+
+void
+mp_track_view_refresh(Evas_Object * track_view)
+{
+ DEBUG_TRACE("");
+ view_data_t *view_data = (view_data_t *) evas_object_data_get(track_view, "view_data");
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ mp_view_manager_update_list_contents(view_data, TRUE);
+}
+
+void
+mp_track_view_update_title_button(Evas_Object * track_view)
+{
+ DEBUG_TRACE("");
+ Evas_Object *top_view = NULL;
+ Elm_Object_Item *navi_it = NULL;
+ view_data_t *view_data = (view_data_t *) evas_object_data_get(track_view, "view_data");
+ MP_CHECK(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+
+ navi_it = elm_naviframe_top_item_get(view_data->navibar);
+ MP_CHECK(navi_it);
+ top_view = elm_object_item_content_get(navi_it);
+ MP_CHECK(top_view);
+
+ if (view_data->ad->b_add_tracks)
+ {
+ mp_view_manager_set_title_and_buttons(view_data, GET_STR("IDS_MUSIC_OPT_ADD_PLAYLIST"), view_data);
+ }
+ else
+ {
+ mp_view_manager_set_title_and_buttons(view_data, GET_STR("IDS_MUSIC_HEADER_SONGS"), view_data);
+ }
+
+}
diff --git a/src/widget/include/mp-popup.h b/src/widget/include/mp-popup.h
new file mode 100755
index 0000000..79a9a3e
--- /dev/null
+++ b/src/widget/include/mp-popup.h
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_popup_H_
+#define __MP_popup_H_
+
+#include <Elementary.h>
+
+typedef enum _mp_popup_t
+{
+ MP_POPUP_SOUND_PATH,
+ MP_POPUP_ADD_TO_PLST,
+} mp_popup_t;
+
+#define mp_popup_title_set(obj, title) elm_object_part_text_set((obj), "title,text", (title))
+#define mp_popup_desc_set(obj, desc) elm_object_text_set((obj), (desc))
+#define mp_popup_content_set(obj, content) elm_object_content_set((obj), (content))
+
+#define mp_popup_btn_popup_set(obj, popup) do { \
+ if (obj) { \
+ evas_object_data_set((obj), "popup", (popup)); \
+ } \
+} while (0)
+#define mp_popup_btn_popup_get(obj) evas_object_data_get((obj), "popup")
+#define mp_popup_btn_response_set(obj, response) do { \
+ if (obj) { \
+ evas_object_data_set((obj), "response", (void *)(response)); \
+ } \
+} while (0)
+#define mp_popup_btn_response_get(obj) (int)evas_object_data_get((obj), "response")
+
+
+Elm_Object_Item *mp_genlist_popup_item_append(Evas_Object * popup, char *label, Evas_Object * icon, void *cb,
+ void *data);
+Evas_Object *mp_genlist_popup_create(Evas_Object * parent, mp_popup_t type, void *user_data, struct appdata *ad);
+Evas_Object *mp_popup_create(Evas_Object * parent, mp_popup_type type, char *title, void *user_data, void *response_cb,
+ struct appdata *ad);
+void mp_popup_destroy(struct appdata *ad);
+
+void mp_popup_set_response_cb(Evas_Object *popup, Evas_Smart_Cb response_cb, void *data);
+void mp_popup_response(Evas_Object *popup, int response);
+Evas_Object *mp_popup_button_set(Evas_Object *popup, const char *part, const char *text, int response);
+void mp_popup_timeout_set(Evas_Object *popup, double timeout);
+void mp_popup_block_clicked_set(Evas_Object *popup);
+
+#endif // __MP_contextpopup_H_
diff --git a/src/widget/include/mp-search.h b/src/widget/include/mp-search.h
new file mode 100755
index 0000000..b2b3e45
--- /dev/null
+++ b/src/widget/include/mp-search.h
@@ -0,0 +1,29 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_SEARCH_H_
+#define __MP_SEARCH_H_
+#include <Evas.h>
+
+Evas_Object *mp_search_create_new(Evas_Object * parent, Evas_Smart_Cb change_cb, void *change_cb_data, Evas_Smart_Cb cancel_cb, void *cancel_cb_data);
+void mp_search_hide_imf_pannel(Evas_Object * search);
+Evas_Object *mp_search_entry_get(Evas_Object *search);
+const char *mp_search_text_get(Evas_Object *search);
+void mp_search_text_set(Evas_Object *search, const char *text);
+
+#endif //__MP_SEARCH_H_
diff --git a/src/widget/include/mp-smart-event-box.h b/src/widget/include/mp-smart-event-box.h
new file mode 100755
index 0000000..a2aac6f
--- /dev/null
+++ b/src/widget/include/mp-smart-event-box.h
@@ -0,0 +1,24 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_SMART_EVENT_BOX_H_
+#define __MP_SMART_EVENT_BOX_H_
+
+Evas_Object *mp_smart_event_box_add(Evas_Object * parent);
+
+#endif //__MP_SMART_EVENT_BOX_H_
diff --git a/src/widget/include/mp-view-layout.h b/src/widget/include/mp-view-layout.h
new file mode 100755
index 0000000..85cfcdd
--- /dev/null
+++ b/src/widget/include/mp-view-layout.h
@@ -0,0 +1,201 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 __MP_VIEW_LAYOUT_H_
+#define __MP_VIEW_LAYOUT_H_
+
+#include "music.h"
+#include "mp-define.h"
+
+typedef void (*genlist_cb_t) (void *, Evas_Object *, void *);
+
+typedef enum
+{
+ MP_LAYOUT_TRACK_LIST,
+ MP_LAYOUT_GROUP_LIST,
+ MP_LAYOUT_PLAYLIST_LIST,
+} mp_list_category_t;
+
+typedef enum
+{
+ MP_EDIT_DELETE,
+ MP_EDIT_ADD_TO_PLAYLIST,
+} mp_edit_operation_t;
+
+enum
+{
+ MP_LAYOUT_CATEGORY_TYPE = 1, //track list or group list or playlist
+ MP_LAYOUT_TRACK_LIST_TYPE, //audio_svc_track_type_e
+ MP_LAYOUT_GROUP_LIST_TYPE, //audio_svc_group_type_e
+ MP_LAYOUT_PLAYLIT_ID,
+ MP_LAYOUT_TYPE_STR, //type_str for db query
+ MP_LAYOUT_FILTER_STR,
+ MP_LAYOUT_GENLIST_ITEMCLASS, //item class of genlist
+ MP_LAYOUT_GENLIST_AUTO_PLAYLIST_ITEMCLASS, //item class of genlist
+ MP_LAYOUT_LIST_CB,
+ MP_LAYOUT_EDIT_MODE,
+ MP_LAYOUT_REORDER_MODE,
+};
+
+typedef struct
+{
+ genlist_cb_t selected_cb;
+ genlist_cb_t auto_playlist_cb;
+} mp_genlist_cb_t;
+
+typedef struct
+{
+ int magic;
+ mp_list_category_t category;
+ audio_svc_track_type_e track_type;
+ audio_svc_group_type_e group_type;
+
+ int playlist_id;
+ char *type_str;
+ char *filter_str;
+
+ int edit_mode;
+ int reorder;
+ int add_to_plst;
+ int rename_mode;
+
+ int b_loading;
+
+ int item_count;
+ int track_count; //for create playing list from search result.
+
+ AudioHandleType *svc_handle;
+ AudioHandleType *track_handle; //for search
+ AudioHandleType *artist_handle; //for search
+ AudioHandleType *album_handle; //for search
+ AudioHandleType *default_playlists;
+
+ Evas_Object *navibar; //parent navibar of layout
+
+ Evas_Object *layout;
+ Evas_Object *genlist;
+ Evas_Object *search_bar;
+ Evas_Object *now_playing;
+ Evas_Object *box; //content of confomant, genlist or sentinal should be contained in it.
+ Evas_Object *sentinel;
+ Evas_Object *isf_entry;
+
+ Ecore_IMF_Context *imf_context;
+
+ Elm_Genlist_Item_Class itc;
+ Elm_Genlist_Item_Class auto_playlist_item_class;
+ Elm_Object_Item *selected_it; //Selected genlist item;
+
+ struct appdata *ad;
+
+ mp_genlist_cb_t cb_func;
+
+ Ecore_Idler *search_idler_handle;
+
+ view_data_t *view_data;
+
+ Elm_Object_Item *rename_git;
+
+ mp_view_mode_t view_mode; // to classify edit & search view.
+ Elm_Object_Item *search_group_git; //group item for search list.
+
+ Evas_Object *now_playing_icon;
+ Evas_Object *now_playing_progress;
+ Ecore_Timer *progress_timer;
+
+ //added for append item in idler callback.
+ Ecore_Idler *load_item_idler;
+ Ecore_Idler *block_size_idler;
+
+ //added for genlist edit mode
+ Evas_Object *select_all_layout;
+ Evas_Object *select_all_checkbox;
+ Eina_Bool select_all_checked;
+ int checked_count;
+
+ //support cancel while processing edit function.
+ Ecore_Idler *edit_idler;
+ Ecore_Idler *reorder_idler;
+ Elm_Object_Item *current_edit_item;
+ int selected_count; //use to store checked count when editing strared.
+ int error_count;
+ AudioHandleType *group_track_handle; //for deleting group items
+ int edit_track_index; //for deleting group items
+ bool group_item_delete_error; //for deleting group items
+ mp_edit_operation_t edit_operation;
+ int playlist_track_count; //number of tracks in playlist..
+ int edit_playlist_id; //playlist_id tracks to be added.
+
+ char *navibar_title;
+ void *callback_data;
+ int default_playlist_count;
+
+ Elm_Object_Item **aa_group; //group item for artist-album list.
+ Elm_Genlist_Item_Class *aa_group_itc; //group for album list.
+ int aa_group_count; // count of group item
+ int selected_group_index; //selected index for group
+ AudioHandleType *aa_handle; //handle for artist-album group
+ int selected_album_sub_index; //selected index for artist-album sub genlist
+ int *aa_item_count; //item count for artist-album sub genlist
+ bool album_delete_flag; //flag for delete album item
+ int selected_index; //selected index for group
+
+ Elm_Object_Item *album_group; //group item for album track view.
+ Elm_Genlist_Item_Class *album_group_itc; //group for album track view.
+ AudioHandleType *album_track_handle; //group item handle for album track view
+
+ Eina_Bool is_item_del; //set it true if elm_object_item_del() used. When play track after delete track, svc_handle mismatch with list.
+
+} mp_layout_data_t;
+
+typedef struct
+{
+ Elm_Object_Item *it; // Genlist Item pointer
+ Eina_Bool checked; // Check status
+ audio_svc_group_type_e group_type; //use this to classify ablum or artist when group item seleted in search view.
+ AudioHandleType *handle;
+ MediaSvcHandle *media_svc_handle;
+} mp_genlist_item_data_t;
+
+#define MP_LAYOUT_DATA_MAGIC 0x810522bb
+#define MP_SET_LAYOUT_DATA_MAGIC(layout_data) ((mp_layout_data_t *)layout_data)->magic = MP_LAYOUT_DATA_MAGIC
+#define MP_CHECK_LAYOUT_DATA(layout_data) \
+do { \
+ if (((mp_layout_data_t *)layout_data)->magic != MP_LAYOUT_DATA_MAGIC) { \
+ ERROR_TRACE("\n########### ERROR CHECK #############\nPARAM is not layout data\n########### ERROR CHECK #############\n"); \
+ mp_assert(FALSE);} \
+} while (0)
+
+Evas_Object *mp_view_layout_create(Evas_Object * parent, view_data_t * view_data, mp_view_mode_t view_mode);
+void mp_view_layout_destroy(Evas_Object * view_layout);
+void mp_view_layout_update(Evas_Object * view_layout);
+int mp_view_layout_get_count(Evas_Object * view_layout);
+void mp_view_layout_set_layout_data(Evas_Object * view_layout, ...);
+void mp_view_layout_clear(Evas_Object * view_layout);
+
+void mp_view_layout_show_now_playing(Evas_Object * view_layout);
+void mp_view_layout_hide_now_playing(Evas_Object * view_layout);
+void mp_view_layout_set_now_playing_info(Evas_Object * view_layout);
+void mp_view_layout_reset_select_all(mp_layout_data_t * layout_data);
+
+void mp_view_layout_progress_timer_thaw(Evas_Object * view_layout);
+void mp_view_layout_progress_timer_freeze(Evas_Object * view_layout);
+void mp_view_layout_set_edit_mode(mp_layout_data_t * layout_data, bool edit_mode);
+void mp_view_layout_search_changed_cb(void *data, Evas_Object * obj, void *event_info);
+
+#endif
diff --git a/src/widget/mp-popup.c b/src/widget/mp-popup.c
new file mode 100755
index 0000000..f3fa552
--- /dev/null
+++ b/src/widget/mp-popup.c
@@ -0,0 +1,437 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <stdio.h>
+#include <appcore-efl.h>
+#include "music.h"
+#include "mp-menu.h"
+#include "mp-popup.h"
+#include "mp-item.h"
+#include "mp-player-debug.h"
+#include "mp-view-layout.h"
+#include "mp-play-list.h"
+#include "mp-common.h"
+#include "mm_sound.h"
+#include "mp-widget.h"
+
+typedef struct {
+ Evas_Object *popup;
+ Evas_Smart_Cb response_cb;
+ void *cb_data;
+ int response;
+} Popup_Cb_Data;
+
+static Elm_Genlist_Item_Class itc;
+
+static Evas_Object *g_popup_win = NULL;
+
+static void
+_mp_popup_response_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("response callback=%d", (int)event_info);
+ if (g_popup_win)
+ {
+ evas_object_del(g_popup_win);
+ g_popup_win = NULL;
+ }
+
+ if ((int)event_info != 5)
+ evas_object_del(obj);
+}
+
+static char *
+_mp_popup_gl_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ char *label = (char *)data;
+ DEBUG_TRACE("%s", label);
+ return strdup(label);
+}
+
+static Evas_Object *
+_mp_popup_gl_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+ DEBUG_TRACE("");
+ MP_CHECK_NULL(data);
+
+ struct appdata *ad = evas_object_data_get(obj, "ad");
+ MP_CHECK_NULL(ad);
+
+ Evas_Object *radio = elm_radio_add(obj);
+ elm_radio_group_add(radio, ad->radio_group);
+
+ if (!strcmp(GET_SYS_STR("IDS_COM_OPT_HEADPHONES_ABB"), data))
+ {
+ elm_radio_state_value_set(radio, MP_SND_PATH_EARPHONE);
+ evas_object_data_set(radio, "idx", (void *)(MP_SND_PATH_EARPHONE));
+ }
+ else if (!strcmp(GET_SYS_STR("Speaker"), data))
+ {
+ elm_radio_state_value_set(radio, MP_SND_PATH_SPEAKER);
+ evas_object_data_set(radio, "idx", (void *)(MP_SND_PATH_SPEAKER));
+ }
+ else
+ {
+ elm_radio_state_value_set(radio, MP_SND_PATH_BT);
+ evas_object_data_set(radio, "idx", (void *)(MP_SND_PATH_BT));
+ }
+
+ evas_object_show(radio);
+
+ elm_radio_value_set(ad->radio_group, ad->snd_path);
+
+ return radio;
+}
+
+static void
+_mp_popup_set_min_size(Evas_Object *box, int cnt)
+{
+ int min_h = 0;
+ MP_CHECK(box);
+ if(cnt > 3)
+ min_h = MP_POPUP_GENLIST_ITEM_H_MAX;
+ else
+ min_h = MP_POPUP_GENLIST_ITEM_H*cnt + cnt -1;
+
+ evas_object_size_hint_min_set(box,
+ MP_POPUP_GENLIST_ITEM_W * elm_scale_get(), min_h * elm_scale_get());
+}
+
+static Evas_Object *
+_mp_popup_create_min_style_popup(Evas_Object * parent, char *title, int cnt)
+{
+ Evas_Object *genlist = NULL;
+ Evas_Object *box = NULL;
+ Evas_Object *popup = elm_popup_add(parent);
+ MP_CHECK_NULL(popup);
+
+ elm_object_style_set(popup, "min_menustyle");
+ mp_popup_title_set(popup, title);
+
+ box = elm_box_add(popup);
+ MP_CHECK_NULL(box);
+
+ _mp_popup_set_min_size(box, cnt);
+
+ genlist = elm_genlist_add(box);
+ MP_CHECK_NULL(genlist);
+ evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+ evas_object_data_set(popup, "genlist", genlist);
+
+ evas_object_show(genlist);
+ elm_box_pack_end(box, genlist);
+ mp_popup_content_set(popup, box);
+ evas_object_show(box);
+
+ mp_popup_set_response_cb(popup, _mp_popup_response_cb, NULL);
+ mp_popup_button_set(popup, "button1", GET_SYS_STR("IDS_COM_POP_CANCEL"), MP_POPUP_NO);
+ evas_object_show(popup);
+
+ return popup;
+}
+
+static Evas_Object *
+_mp_popup_sound_path_create(Evas_Object * parent, void *data)
+{
+ DEBUG_TRACE_FUNC();
+
+ Evas_Object *popup = NULL;
+ int bt_connected = 0;
+ int earjack = 0;
+ int ret = 0;
+ char *bt_name = NULL;
+ int cnt = 1;
+
+ ret = mm_sound_route_get_a2dp_status(&bt_connected, &bt_name);
+ if (ret != MM_ERROR_NONE)
+ {
+ WARN_TRACE("Fail to mm_sound_route_get_a2dp_status ret = [%d]", ret);
+ }
+ IF_FREE(bt_name);
+ if(bt_connected)
+ cnt++;
+
+ if (vconf_get_int(VCONFKEY_SYSMAN_EARJACK, &earjack))
+ WARN_TRACE("Earjack state get Fail...");
+ if(earjack)
+ cnt++;
+
+ popup = _mp_popup_create_min_style_popup(parent, GET_STR("Sound path"), cnt);
+
+ return popup;
+}
+
+static Evas_Object *
+_mp_popup_add_to_playlist_create(Evas_Object * parent, void *data, struct appdata *ad)
+{
+ DEBUG_TRACE_FUNC();
+
+ Evas_Object *popup = NULL;
+ int ret;
+ int count = 0;
+
+ ret = audio_svc_count_playlist(ad->media_svc_handle, "", "", &count);
+ DEBUG_TRACE("count,%d", count);
+
+ popup = _mp_popup_create_min_style_popup(parent, GET_STR("IDS_MUSIC_BODY_ADD_TO_PLAYLIST"), count+1);
+
+ return popup;
+}
+
+static void
+_mp_popup_del_cb(void *data, Evas * e, Evas_Object * eo, void *event_info)
+{
+ DEBUG_TRACE("");
+ struct appdata *ad = (struct appdata *)data;
+ int type = (int)evas_object_data_get(eo, "type");
+ DEBUG_TRACE("type: %d", type);
+ if (type >= MP_POPUP_MAX)
+ {
+ ERROR_TRACE("Never should be here!!!");
+ return;
+ }
+ ad->popup[type] = NULL;
+}
+
+static bool
+_mp_popup_popup_exist(struct appdata *ad, mp_popup_t type)
+{
+ MP_CHECK_FALSE(ad);
+ if (ad->popup[type])
+ return TRUE;
+ return FALSE;
+}
+
+Elm_Object_Item *
+mp_genlist_popup_item_append(Evas_Object * popup, char *label, Evas_Object * icon, void *cb, void *data)
+{
+ MP_CHECK_NULL(popup);
+ MP_CHECK_NULL(label);
+
+ Evas_Object *genlist = evas_object_data_get(popup, "genlist");
+ MP_CHECK_NULL(genlist);
+
+ Elm_Object_Item *item = NULL;
+
+ if (!icon)
+ {
+ itc.item_style = "1text";
+ itc.func.text_get = _mp_popup_gl_label_get;
+ itc.func.content_get = NULL;
+ itc.func.state_get = NULL;
+ itc.func.del = NULL;
+ }
+ else
+ {
+ itc.item_style = "1text.1icon.3";
+ itc.func.text_get = _mp_popup_gl_label_get;
+ itc.func.content_get = _mp_popup_gl_icon_get;
+ itc.func.state_get = NULL;
+ itc.func.del = NULL;
+ }
+
+ item = elm_genlist_item_append(genlist, &itc, label, NULL, ELM_GENLIST_ITEM_NONE, cb, data);
+
+ return item;
+
+}
+
+Evas_Object *
+mp_genlist_popup_create(Evas_Object * parent, mp_popup_t type, void *user_data, struct appdata * ad)
+{
+ mp_retvm_if(parent == NULL, NULL, "parent is NULL");
+ MP_CHECK_NULL(ad);
+
+ if (_mp_popup_popup_exist(ad, MP_POPUP_GENLIST))
+ {
+ DEBUG_TRACE("popup already exist...");
+ return NULL;
+ }
+
+ Evas_Object *popup = NULL;
+
+ switch (type)
+ {
+ case MP_POPUP_ADD_TO_PLST:
+ popup = _mp_popup_add_to_playlist_create(parent, user_data, ad);
+ break;
+ case MP_POPUP_SOUND_PATH:
+ popup = _mp_popup_sound_path_create(parent, user_data);
+ evas_object_data_set(popup, "sound_path", (char *)1);
+ break;
+ default:
+ break;
+ }
+
+ if (popup)
+ {
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _mp_popup_del_cb, ad);
+ evas_object_data_set(popup, "type", (void *)MP_POPUP_GENLIST);
+ ad->popup[MP_POPUP_GENLIST] = popup;
+ }
+
+ return popup;
+}
+
+void
+mp_popup_destroy(struct appdata *ad)
+{
+ MP_CHECK(ad);
+ int i = 0;
+ for(i=0; i < MP_POPUP_MAX; i++)
+ {
+ if (ad->popup[i])
+ {
+ mp_popup_response(ad->popup[i], -1);
+ ad->popup[i] = NULL;
+ }
+ }
+}
+
+Evas_Object *
+mp_popup_create(Evas_Object * parent, mp_popup_type type, char *title, void *user_data, void *response_cb,
+ struct appdata *ad)
+{
+ Evas_Object *popup = NULL;
+ Evas_Object *progressbar = NULL;
+
+ MP_CHECK_NULL(parent);
+ MP_CHECK_NULL(type);
+ MP_CHECK_NULL(ad);
+
+ if (_mp_popup_popup_exist(ad, type))
+ {
+ DEBUG_TRACE("popup already exist...");
+ return NULL;
+ }
+
+ switch (type)
+ {
+ case MP_POPUP_PROGRESS:
+ popup = elm_popup_add(ad->win_main);
+ MP_CHECK_NULL(popup);
+
+ progressbar = elm_progressbar_add(popup);
+ MP_CHECK_NULL(progressbar);
+
+ elm_object_style_set(progressbar, "list_process");
+ evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, 0.5);
+ evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(progressbar);
+ elm_progressbar_pulse(progressbar, EINA_TRUE);
+
+ mp_popup_title_set(popup, title);
+ mp_popup_content_set(popup, progressbar);
+
+ mp_popup_set_response_cb(popup, response_cb, user_data);
+ mp_popup_button_set(popup, "button1", GET_SYS_STR("IDS_COM_POP_CANCEL"), MP_POPUP_NO);
+
+ evas_object_event_callback_add(popup, EVAS_CALLBACK_DEL, _mp_popup_del_cb, ad);
+ evas_object_data_set(popup, "type", (void *)type);
+
+ break;
+
+ default:
+ DEBUG_TRACE("Unsupported type: %d", type);
+ return NULL;
+ }
+
+ evas_object_show(popup);
+
+ ad->popup[type] = popup;
+
+ return popup;
+
+}
+
+static void
+_mp_poup_button_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ MP_CHECK(data);
+ Evas_Object *popup = data;
+
+ int response = mp_popup_btn_response_get(obj);
+ mp_popup_response(popup, response);
+}
+
+void
+mp_popup_set_response_cb(Evas_Object *popup, Evas_Smart_Cb response_cb, void *data)
+{
+ MP_CHECK(popup);
+
+ evas_object_data_set(popup, "popup_response_cb", response_cb);
+ evas_object_data_set(popup, "popup_response_cb_data", data);
+}
+
+void
+mp_popup_response(Evas_Object *popup, int response)
+{
+ MP_CHECK(popup);
+
+ Evas_Smart_Cb response_cb = evas_object_data_get(popup, "popup_response_cb");
+ void *cb_data = evas_object_data_get(popup, "popup_response_cb_data");
+
+ if (response_cb)
+ response_cb(cb_data, popup, (void *)response);
+ else
+ evas_object_del(popup);
+}
+
+Evas_Object *
+mp_popup_button_set(Evas_Object *popup, const char *part, const char *text, int response)
+{
+ MP_CHECK_NULL(popup);
+ MP_CHECK_NULL(part);
+
+ if (g_strcmp0(part, "button1") && g_strcmp0(part, "button2") && g_strcmp0(part, "button3")) {
+ mp_error("invalid part");
+ return NULL;
+ }
+
+ Evas_Object *button = mp_widget_create_button(popup, NULL, (char *)text, NULL, _mp_poup_button_response_cb, popup);
+ if (button) {
+ elm_object_part_content_set(popup, part, button);
+ mp_popup_btn_popup_set(button, popup);
+ mp_popup_btn_response_set(button, response);
+ }
+
+ return button;
+}
+
+static void
+_mp_poup_default_response_cb(void *data, Evas_Object *obj, void *event_info)
+{
+ mp_popup_response(obj, (int)data);
+}
+
+void
+mp_popup_timeout_set(Evas_Object *popup, double timeout)
+{
+ MP_CHECK(popup);
+
+ elm_popup_timeout_set(popup, timeout);
+ evas_object_smart_callback_add(popup, "timeout", _mp_poup_default_response_cb, (void *)MP_POPUP_DEL);
+}
+
+void
+mp_popup_block_clicked_set(Evas_Object *popup)
+{
+ MP_CHECK(popup);
+
+ evas_object_smart_callback_add(popup, "block,clicked", _mp_poup_default_response_cb, (void *)MP_POPUP_DEL);
+}
diff --git a/src/widget/mp-search.c b/src/widget/mp-search.c
new file mode 100755
index 0000000..c4b7a9e
--- /dev/null
+++ b/src/widget/mp-search.c
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "music.h"
+#include "mp-search.h"
+#include "mp-player-debug.h"
+#include "mp-view-layout.h"
+
+void
+_mp_search_view_activated_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ MP_CHECK(data);
+ mp_search_hide_imf_pannel(data);
+}
+
+static void
+_mp_search_entry_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ Evas_Object *searchbar = data;
+ MP_CHECK(searchbar);
+ Evas_Object *entry = obj;
+ MP_CHECK(entry);
+
+ const char *signal = NULL;
+ if (elm_entry_is_empty(entry))
+ signal = "elm,state,eraser,hide";
+ else
+ signal = "elm,state,eraser,show";
+
+ elm_object_signal_emit(searchbar, signal, "elm");
+}
+
+static void
+_mp_search_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+ Evas_Object *entry = data;
+ MP_CHECK(entry);
+
+ elm_entry_entry_set(entry, "");
+}
+
+Evas_Object *
+mp_search_create_new(Evas_Object * parent, Evas_Smart_Cb change_cb, void *change_cb_data, Evas_Smart_Cb cancel_cb, void *cancel_cb_data)
+{
+ startfunc;
+ Evas_Object *sb = NULL;
+ Evas_Object *en = NULL;
+
+ sb = elm_layout_add(parent);
+ MP_CHECK_NULL(sb);
+
+ const char *style = (cancel_cb) ? "cancel_button" : "default";
+ elm_layout_theme_set(sb, "layout", "searchbar", style);
+
+ if (cancel_cb) {
+ Evas_Object *cancel_btn = elm_button_add(sb);
+ elm_object_style_set(cancel_btn, "searchbar/default");
+ elm_object_text_set(cancel_btn, GET_SYS_STR("IDS_COM_SK_CANCEL"));
+ evas_object_smart_callback_add(cancel_btn, "clicked", cancel_cb, cancel_cb_data);
+
+ elm_object_part_content_set(sb, "button_cancel", cancel_btn);
+ elm_object_signal_emit(sb, "cancel,show", "");
+ }
+
+ en = elm_entry_add(sb);
+ elm_entry_scrollable_set(en, EINA_TRUE);
+ elm_entry_single_line_set(en, EINA_TRUE);
+ elm_object_part_content_set(sb, "elm.swallow.content", en);
+ evas_object_data_set(sb, "entry", en);
+
+ elm_entry_input_panel_layout_set(en, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+
+ evas_object_size_hint_weight_set(sb, EVAS_HINT_EXPAND, 0);
+ evas_object_size_hint_align_set(sb, EVAS_HINT_FILL, 0.0);
+
+ evas_object_smart_callback_add(en, "changed", _mp_search_entry_changed_cb, sb);
+ elm_object_signal_callback_add(sb, "elm,eraser,clicked", "elm", _mp_search_eraser_clicked_cb, en);
+
+ evas_object_smart_callback_add(en, "changed", change_cb, change_cb_data);
+ evas_object_smart_callback_add(en, "activated", _mp_search_view_activated_cb, sb);
+
+ static Elm_Entry_Filter_Limit_Size limit_filter_data;
+ limit_filter_data.max_char_count = 0;
+ limit_filter_data.max_byte_count = AUDIO_SVC_METADATA_LEN_MAX;
+ elm_entry_markup_filter_append(en, elm_entry_filter_limit_size, &limit_filter_data);
+
+ evas_object_show(sb);
+
+ return sb;
+}
+
+void
+mp_search_hide_imf_pannel(Evas_Object * search)
+{
+ MP_CHECK(search);
+ Evas_Object *en = mp_search_entry_get(search);
+ Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(en);
+
+ if (imf_context)
+ {
+ ecore_imf_context_input_panel_hide(imf_context);
+ }
+}
+
+Evas_Object *
+mp_search_entry_get(Evas_Object *search)
+{
+ MP_CHECK_NULL(search);
+
+ Evas_Object *entry = evas_object_data_get(search, "entry");
+
+ return entry;
+}
+
+const char *
+mp_search_text_get(Evas_Object *search)
+{
+ MP_CHECK_NULL(search);
+ Evas_Object *entry = evas_object_data_get(search, "entry");
+ MP_CHECK_NULL(entry);
+
+ const char *text = elm_object_text_get(entry);
+ return text;
+}
+
+void
+mp_search_text_set(Evas_Object *search, const char *text)
+{
+ MP_CHECK(search);
+ Evas_Object *entry = evas_object_data_get(search, "entry");
+ MP_CHECK(entry);
+
+ if (text == NULL)
+ text = "";
+
+ elm_object_text_set(entry, text);
+}
+
diff --git a/src/widget/mp-smart-event-box.c b/src/widget/mp-smart-event-box.c
new file mode 100755
index 0000000..cfef47e
--- /dev/null
+++ b/src/widget/mp-smart-event-box.c
@@ -0,0 +1,260 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 <Elementary.h>
+#include "mp-smart-event-box.h"
+#include "mp-player-debug.h"
+
+#ifndef ABS
+#define ABS(x) ((x) < 0 ? -(x) : (x))
+#endif
+
+typedef struct _MpSmartEventBoxObject
+{
+ Evas_Object *rect;
+ Evas_Coord x, y, w, h;
+ Evas_Coord down_x;
+ Evas_Coord down_y;
+} MpSmartEventBoxObject;
+
+static Evas_Smart_Class _parent_sc = EVAS_SMART_CLASS_INIT_NULL;
+
+static void
+__mouse_down_cb(void *data, Evas * evas, Evas_Object * obj, void *event_info)
+{
+ Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *) event_info;
+ Evas_Object *box = (Evas_Object *) data;
+ MpSmartEventBoxObject *box_d = evas_object_smart_data_get(box);
+
+ box_d->down_x = ev->canvas.x;
+ box_d->down_y = ev->canvas.y;
+
+ evas_object_smart_callback_call((Evas_Object *) data, "mouse.down", NULL);
+ return;
+}
+
+static void
+__mouse_up_cb(void *data, Evas * evas, Evas_Object * obj, void *event_info)
+{
+ Evas_Coord minw = 0, minh = 0, diff_x = 0, diff_y = 0;
+ Evas_Event_Mouse_Up *mu = (Evas_Event_Mouse_Up *) event_info;
+ Evas_Object *box = (Evas_Object *) data;
+ MpSmartEventBoxObject *box_d = evas_object_smart_data_get(box);
+
+ elm_coords_finger_size_adjust(1, &minw, 1, &minh);
+
+ diff_x = box_d->down_x - mu->canvas.x;
+ diff_y = box_d->down_y - mu->canvas.y;
+
+ if ((ABS(diff_x) > minw) || (ABS(diff_y) > minh))
+ { // dragging
+ if (ABS(diff_y) > ABS(diff_x))
+ {
+ if (diff_y < 0) //down
+ goto flick_down;
+ else //up
+ goto flick_up;
+ }
+ else
+ {
+ if (diff_x < 0)
+ { //right
+ goto flick_right;
+ }
+ else
+ { //left
+ goto flick_left;
+ }
+ }
+ }
+
+ evas_object_smart_callback_call((Evas_Object *) data, "mouse.clicked", NULL);
+ return;
+
+ flick_up:
+ evas_object_smart_callback_call((Evas_Object *) data, "mouse.flick.up", NULL);
+ return;
+
+ flick_down:
+ evas_object_smart_callback_call((Evas_Object *) data, "mouse.flick.down", NULL);
+ return;
+
+ flick_left:
+ evas_object_smart_callback_call((Evas_Object *) data, "mouse.flick.left", NULL);
+ return;
+
+ flick_right:
+ evas_object_smart_callback_call((Evas_Object *) data, "mouse.flick.right", NULL);
+ return;
+}
+
+static void
+_smart_reconfigure(MpSmartEventBoxObject * data)
+{
+ evas_object_move(data->rect, data->x, data->y);
+ evas_object_resize(data->rect, data->w, data->h);
+ return;
+}
+
+
+static void
+_mp_smart_event_box_object_add(Evas_Object * obj)
+{
+ MpSmartEventBoxObject *data = NULL;
+
+ data = (MpSmartEventBoxObject *) malloc(sizeof(MpSmartEventBoxObject));
+ mp_assert(data);
+ memset(data, 0, sizeof(MpSmartEventBoxObject));
+
+ data->rect = evas_object_rectangle_add(evas_object_evas_get(obj));
+ evas_object_size_hint_min_set(data->rect, 0, 15);
+ evas_object_color_set(data->rect, 0, 0, 0, 0);
+ evas_object_size_hint_fill_set(data->rect, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(data->rect, EVAS_HINT_EXPAND, 0.0);
+ evas_object_size_hint_align_set(data->rect, EVAS_HINT_FILL, 0.0);
+
+ evas_object_smart_member_add(data->rect, obj);
+
+ evas_object_smart_data_set(obj, data);
+
+ return;
+}
+
+static void
+_mp_smart_event_box_object_del(Evas_Object * obj)
+{
+ MpSmartEventBoxObject *data = NULL;
+ data = evas_object_smart_data_get(obj);
+
+ if (data->rect != NULL)
+ {
+ evas_object_smart_member_del(data->rect);
+ evas_object_del(data->rect);
+ data->rect = NULL;
+ }
+ free(data);
+
+ return;
+}
+
+static void
+_mp_smart_event_box_object_show(Evas_Object * obj)
+{
+ MpSmartEventBoxObject *data = NULL;
+ data = evas_object_smart_data_get(obj);
+
+ if (data->rect != NULL)
+ {
+ evas_object_show(data->rect);
+ }
+
+ return;
+}
+
+static void
+_mp_smart_event_box_object_hide(Evas_Object * obj)
+{
+ MpSmartEventBoxObject *data = NULL;
+ data = evas_object_smart_data_get(obj);
+
+ if (data->rect != NULL)
+ {
+ evas_object_hide(data->rect);
+ }
+
+ return;
+}
+
+static void
+_mp_smart_event_box_object_move(Evas_Object * obj, Evas_Coord x, Evas_Coord y)
+{
+ MpSmartEventBoxObject *data = NULL;
+ data = evas_object_smart_data_get(obj);
+ data->x = x;
+ data->y = y;
+
+ _smart_reconfigure(data);
+}
+
+static void
+_mp_smart_event_box_object_resize(Evas_Object * obj, Evas_Coord w, Evas_Coord h)
+{
+ MpSmartEventBoxObject *data = NULL;
+ data = evas_object_smart_data_get(obj);
+ data->w = w;
+ data->h = h;
+
+ _smart_reconfigure(data);
+}
+
+
+
+static Evas_Smart *
+_mp_smart_event_box_object_smart_get(void)
+{
+ static Evas_Smart_Class sc = EVAS_SMART_CLASS_INIT_NAME_VERSION("mp_smart_event_box_object");
+
+ if (!_parent_sc.name)
+ {
+ evas_object_smart_clipped_smart_set(&sc);
+ _parent_sc = sc;
+ sc.add = _mp_smart_event_box_object_add;
+ sc.del = _mp_smart_event_box_object_del;
+ sc.show = _mp_smart_event_box_object_show;
+ sc.hide = _mp_smart_event_box_object_hide;
+ sc.move = _mp_smart_event_box_object_move;
+ sc.resize = _mp_smart_event_box_object_resize;
+ }
+
+ return evas_smart_class_new(&sc);
+}
+
+
+static Evas_Object *
+_mp_smart_event_box_object_new(Evas * e)
+{
+ Evas_Object *obj;
+ obj = evas_object_smart_add(e, _mp_smart_event_box_object_smart_get());
+
+ return obj;
+}
+
+
+Evas_Object *
+mp_smart_event_box_add(Evas_Object * parent)
+{
+ Evas *e = NULL;
+ Evas_Object *obj = NULL;
+ MpSmartEventBoxObject *data = NULL;
+
+ e = evas_object_evas_get(parent);
+ if ((obj = _mp_smart_event_box_object_new(e)))
+ {
+ if ((data = evas_object_smart_data_get(obj)))
+ {
+ evas_object_event_callback_add(data->rect, EVAS_CALLBACK_MOUSE_DOWN, __mouse_down_cb, obj);
+ evas_object_event_callback_add(data->rect, EVAS_CALLBACK_MOUSE_UP, __mouse_up_cb, obj);
+ }
+ else
+ {
+ evas_object_del(obj);
+ obj = NULL;
+ }
+ }
+
+ return obj;
+}
diff --git a/src/widget/mp-view-layout.c b/src/widget/mp-view-layout.c
new file mode 100755
index 0000000..d1638c0
--- /dev/null
+++ b/src/widget/mp-view-layout.c
@@ -0,0 +1,2247 @@
+/*
+ * Copyright 2012 Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.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.tizenopensource.org/license
+ *
+ * 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 "mp-view-layout.h"
+#include "mp-player-debug.h"
+#include "mp-library.h"
+#include "mp-widget.h"
+#include "mp-util.h"
+#include "mp-common.h"
+#include "mp-search.h"
+#include "mp-play-view.h"
+#include "mp-play-list.h"
+#include "mp-view-manager.h"
+#include "mp-playlist-view.h"
+#include "mp-group-view.h"
+#include "mp-player-mgr.h"
+
+#define MP_INIT_ITEM_LOAD_COUNT 8
+#define MP_AUTO_PLAYLIST_COUNT 4
+#define MP_GENLIST_DEFALT_BLOCK_SIZE 81
+#define MP_MAX_TEXT_PRE_FORMAT_LEN 256
+#define MP_MAX_ARTIST_NAME_WIDTH 320
+#define MP_LABEL_SLIDE_DURATION 5
+
+static void _mp_view_layout_reorder(void *data, Evas_Object * obj, void *event_info);
+static void _mp_view_layout_load_search_list_item(Evas_Object * view_layout);
+static void _mp_view_layout_load_list_item(Evas_Object * view_layout);
+static void _mp_view_layout_load_search_item(Evas_Object * view_layout);
+static void _mp_view_layout_gl_del(void *data, Evas_Object * obj);
+static void _mp_view_layout_update_icon(Evas_Object * view_layout);
+
+static Eina_Bool
+_mp_view_layout_update_list_idler_cb(void *data)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ _mp_view_layout_load_search_list_item(layout_data->layout);
+
+ layout_data->search_idler_handle = NULL;
+ return EINA_FALSE;
+}
+
+void
+mp_view_layout_search_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ const char *search_str = NULL;
+
+ search_str = mp_search_text_get(layout_data->search_bar);
+
+ DEBUG_TRACE("search_str: %s", search_str);
+ if (search_str)
+ {
+ if (layout_data->filter_str)
+ free(layout_data->filter_str);
+ layout_data->filter_str = strdup(search_str);
+ if (layout_data->search_idler_handle)
+ ecore_idler_del(layout_data->search_idler_handle);
+ layout_data->search_idler_handle = ecore_idler_add(_mp_view_layout_update_list_idler_cb, data);
+ }
+}
+
+static Eina_Bool
+_mp_view_layout_reorder_idle_cb(void *data)
+{
+ DEBUG_TRACE("");
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK_FALSE(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ Elm_Object_Item *list_item = NULL;
+ int count = 0;
+ int err = -1;
+ int old_order;
+ int new_order = 1;
+ char *title;
+ int size;
+ int uid;
+
+ audio_svc_count_playlist_item(layout_data->ad->media_svc_handle, layout_data->playlist_id, "", "", &count);
+ if (count > 0)
+ {
+ list_item = elm_genlist_first_item_get(layout_data->genlist);
+
+ if (list_item != NULL)
+ {
+ do
+ {
+ mp_genlist_item_data_t *gl_item =
+ (mp_genlist_item_data_t *) elm_object_item_data_get(list_item);
+ MP_CHECK_FALSE(gl_item);
+ AudioHandleType *item = (AudioHandleType *) (gl_item->handle);
+ MP_CHECK_FALSE(item);
+ if (item != NULL)
+ {
+ err = audio_svc_playlist_item_get_val(item, 0, AUDIO_SVC_PLAYLIST_ITEM_TITLE,
+ &title, &size,
+ AUDIO_SVC_PLAYLIST_ITEM_PLAY_ORDER,
+ &old_order, AUDIO_SVC_PLAYLIST_ITEM_UID,
+ &uid, -1);
+ DEBUG_TRACE("uid: %d, title: %s, old_order: %d", uid, title, old_order);
+ if (old_order == new_order)
+ {
+ DEBUG_TRACE("same order.. skip..");
+ new_order++;
+ continue;
+ }
+ if (err != AUDIO_SVC_ERROR_NONE)
+ {
+ ERROR_TRACE("Error in audio_svc_playlist_item_get_val (%d)\n", err);
+ break;
+ }
+ err = audio_svc_update_playlist_item_play_order(layout_data->ad->media_svc_handle, layout_data->playlist_id, uid,
+ new_order++);
+ if (err != AUDIO_SVC_ERROR_NONE)
+ {
+ ERROR_TRACE("Error in audio_svc_update_playlist_item_play_order (%d)\n",
+ err);
+ break;
+ }
+ }
+ }
+ while ((list_item = elm_genlist_item_next_get(list_item)) != NULL);
+ }
+ mp_view_manager_update_list_contents(layout_data->view_data, TRUE);
+ }
+ layout_data->reorder_idler = NULL;
+ return EINA_FALSE;
+}
+
+static void
+_mp_view_layout_reorder(void *data, Evas_Object * obj, void *event_info)
+{
+ DEBUG_TRACE("");
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+#if 0
+ if (rel_item)
+ {
+ if (move_after)
+ elm_genlist_item_move_after(rel_item, it);
+ else
+ elm_genlist_item_move_before(rel_item, it);
+ }
+#endif
+ if(!layout_data->reorder_idler)
+ layout_data->reorder_idler = ecore_idler_add(_mp_view_layout_reorder_idle_cb, layout_data);
+
+}
+
+static void
+_mp_view_layout_genlist_del_cb(void *data, Evas * e, Evas_Object * obj, void *event_info)
+{
+ startfunc;
+ mp_layout_data_t *layout_data = evas_object_data_get(obj, "layout_data");
+ if (layout_data)
+ {
+ DEBUG_TRACE("category: %d, track_type: %d, group_type: %d", layout_data->category,
+ layout_data->track_type, layout_data->group_type);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_ecore_timer_del(layout_data->progress_timer);
+ mp_ecore_idler_del(layout_data->load_item_idler);
+ mp_ecore_idler_del(layout_data->search_idler_handle);
+ mp_ecore_idler_del(layout_data->block_size_idler);
+ mp_ecore_idler_del(layout_data->reorder_idler);
+
+ SAFE_FREE(layout_data->type_str);
+ SAFE_FREE(layout_data->filter_str);
+ if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ audio_svc_playlist_free(layout_data->svc_handle);
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ audio_svc_group_item_free(layout_data->svc_handle);
+ else
+ audio_svc_list_item_free(layout_data->svc_handle);
+
+ if (layout_data->track_handle)
+ audio_svc_list_item_free(layout_data->track_handle);
+ if (layout_data->artist_handle)
+ audio_svc_group_item_free(layout_data->artist_handle);
+ if (layout_data->album_handle)
+ audio_svc_group_item_free(layout_data->album_handle);
+ /* free album svc group */
+ if (layout_data->album_track_handle)
+ audio_svc_group_item_free(layout_data->album_track_handle);
+ /* free artist album svc group */
+ if (layout_data->aa_handle)
+ audio_svc_group_item_free(layout_data->aa_handle);
+ IF_FREE(layout_data->aa_group);
+ IF_FREE(layout_data->aa_item_count);
+ IF_FREE(layout_data->navibar_title);
+
+ free(layout_data);
+ }
+ endfunc;
+}
+
+static void
+_mp_view_layout_append_auto_playlists(mp_layout_data_t * layout_data)
+{
+ int i;
+ static char names[][50] =
+ { STR_MP_MOST_PLAYED, STR_MP_RECENTLY_ADDED, STR_MP_RECENTLY_PLAYED, STR_MP_QUICK_LIST };
+ AudioHandleType *plst;
+
+ MP_CHECK(layout_data);
+
+ if (layout_data->default_playlists)
+ audio_svc_playlist_free(layout_data->default_playlists);
+
+ layout_data->default_playlist_count = 0;
+
+ audio_svc_playlist_new(&plst, MP_AUTO_PLAYLIST_COUNT);
+ layout_data->default_playlists = plst;
+ for (i = 0; i < MP_AUTO_PLAYLIST_COUNT; i++)
+ {
+ AudioHandleType *item;
+ audio_svc_playlist_get_item(plst, i, &item);
+ audio_svc_playlist_set_val(plst, i, AUDIO_SVC_PLAYLIST_NAME, GET_STR(names[i]),
+ AUDIO_SVC_METADATA_LEN_MAX, -1);
+
+ mp_genlist_item_data_t *item_data;
+ item_data = calloc(1, sizeof(mp_genlist_item_data_t));
+ MP_CHECK(item_data);
+ item_data->media_svc_handle = layout_data->ad->media_svc_handle;
+ item_data->handle = (void *)item;
+
+ layout_data->auto_playlist_item_class.func.del = _mp_view_layout_gl_del;
+
+ item_data->it = elm_genlist_item_append(layout_data->genlist, &(layout_data->auto_playlist_item_class),
+ item_data, NULL,
+ ELM_GENLIST_ITEM_NONE, layout_data->cb_func.auto_playlist_cb,
+ (void *)i);
+ layout_data->default_playlist_count++;
+ if (layout_data->edit_mode)
+ elm_object_item_disabled_set(item_data->it, EINA_TRUE);
+ }
+}
+
+static Evas_Object *
+_mp_view_layout_sentinel_add(mp_layout_data_t * layout_data)
+{
+ DEBUG_TRACE_FUNC();
+ Evas_Object *no_contents = NULL;
+
+ no_contents = elm_layout_add(layout_data->box);
+ evas_object_size_hint_weight_set(no_contents, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_size_hint_align_set(no_contents, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+
+ if (layout_data->view_mode == MP_VIEW_MODE_SEARCH)
+ {
+ elm_layout_file_set(no_contents, EDJ_NAME, "no_result");
+ edje_object_part_text_set(_EDJ(no_contents), "elm.text", GET_SYS_STR("IDS_COM_BODY_NO_SEARCH_RESULTS"));
+ }
+ else
+ {
+ elm_layout_file_set(no_contents, EDJ_NAME, "no_content");
+ edje_object_part_text_set(_EDJ(no_contents), "elm.text", GET_SYS_STR("IDS_COM_BODY_NO_CONTENTS"));
+ }
+
+ if (layout_data->genlist)
+ {
+ elm_box_unpack(layout_data->box, layout_data->genlist);
+ evas_object_hide(layout_data->genlist);
+ }
+
+ elm_box_pack_end(layout_data->box, no_contents);
+ evas_object_show(no_contents);
+
+ return no_contents;
+}
+
+static Eina_Bool
+_mp_view_layout_set_block_count_idle_cb(void *data)
+{
+ mp_layout_data_t * layout_data = (mp_layout_data_t *)data;
+ MP_CHECK_FALSE(layout_data);
+ elm_genlist_block_count_set(layout_data->genlist, MP_GENLIST_DEFALT_BLOCK_SIZE);
+ layout_data->block_size_idler = NULL;
+ return FALSE;
+}
+
+char *
+_mp_view_layout_gl_label_get_title(void *data, Evas_Object * obj, const char *part)
+{
+ MP_CHECK_NULL(data);
+ if (!strcmp(part, "elm.text"))
+ {
+ return strdup(data);
+ }
+ return NULL;
+}
+
+static void
+_mp_view_layout_gl_del(void *data, Evas_Object * obj)
+{
+ mp_genlist_item_data_t *item_data = (mp_genlist_item_data_t *) data;
+ IF_FREE(item_data);
+}
+
+static void
+_mp_view_layout_append_group_title(mp_layout_data_t * layout_data, char *title)
+{
+ static Elm_Genlist_Item_Class itc = {
+ .item_style = "music_player/grouptitle",
+ .func.text_get = _mp_view_layout_gl_label_get_title,
+ };
+
+ layout_data->search_group_git =
+ elm_genlist_item_append(layout_data->genlist, &itc, (void *)title, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+
+ MP_CHECK(layout_data->search_group_git);
+ elm_genlist_item_select_mode_set(layout_data->search_group_git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
+
+static char *
+_mp_view_layout_aa_list_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ MP_CHECK_NULL(data);
+ char *name = NULL;
+ int size = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ AudioHandleType *svc_item = (AudioHandleType *) (item->handle);
+ MP_CHECK_NULL(svc_item);
+
+ if (!g_strcmp0(part, "elm.text.1")) {
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ if (!name || !strlen(name))
+ name = GET_SYS_STR("IDS_COM_BODY_UNKNOWN");
+ return strdup(name);
+
+ } else if (!g_strcmp0(part, "elm.text.2")) {
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_SUB_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ if (!name || !strlen(name))
+ name = GET_SYS_STR("IDS_COM_BODY_UNKNOWN");
+ return strdup(name);
+ } else if (!g_strcmp0(part, "elm.text.3")) {
+ char *album_name = NULL;
+ char *artist_name = NULL;
+ int track_num = -1;
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &album_name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_SUB_INFO, &artist_name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ ret = audio_svc_count_list_item(item->media_svc_handle, AUDIO_SVC_TRACK_BY_ARTIST_ALBUM, album_name, artist_name, "", "", &track_num);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get track_num");
+ mp_retvm_if(track_num < 0, NULL, "Fail to get track_num");
+ return g_strdup_printf("%d", track_num);
+ }
+
+ DEBUG_TRACE("Unusing part: %s", part);
+ return NULL;
+}
+
+static Evas_Object *
+_mp_view_layout_aa_list_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+ MP_CHECK_NULL(data);
+ mp_genlist_item_data_t *item = (mp_genlist_item_data_t *) data;
+ AudioHandleType *svc_item = (AudioHandleType *) (item->handle);
+ MP_CHECK_NULL(svc_item);
+
+ char *thumb_name = NULL;
+ Evas_Object *icon = NULL;
+ int size = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_THUMBNAIL_PATH, &thumb_name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+
+ if (!g_strcmp0(part, "elm.icon")) {
+ icon = mp_util_create_thumb_icon(obj, thumb_name, MP_ALBUM_LIST_ICON_SIZE, MP_ALBUM_LIST_ICON_SIZE);
+ }
+
+ return icon;
+}
+
+static char *
+_mp_view_layout_album_list_get_artist_name(MediaSvcHandle *handle, AudioHandleType *svc_item)
+{
+ MP_CHECK_NULL(handle);
+ MP_CHECK_NULL(svc_item);
+ int ret = AUDIO_SVC_ERROR_NONE;
+ char *name = NULL;
+ int size = -1;
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_SUB_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+
+ int count = -1;
+ int track_num = -1;
+ char *album_name = NULL;
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &album_name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+
+ ret = audio_svc_count_list_item(handle, AUDIO_SVC_TRACK_BY_ALBUM, album_name, "", "", "", &count);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get count");
+ mp_retvm_if(count < 0, NULL, "Fail to get count");
+
+ ret = audio_svc_count_list_item(handle, AUDIO_SVC_TRACK_BY_ARTIST_ALBUM, album_name, name, "", "", &track_num);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get track_num");
+ mp_retvm_if(track_num < 0, NULL, "Fail to get track_num");
+ DEBUG_TRACE("track_num=%d,count=%d", track_num, count);
+ if (track_num < count) {
+ char *artist = NULL;
+ AudioHandleType *svc_handle = NULL;
+ /* create album svc list */
+ ret = audio_svc_list_item_new(&svc_handle, count);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to create svc list");
+ /* get album svc list */
+ ret = audio_svc_get_list_item(handle, AUDIO_SVC_TRACK_BY_ALBUM, album_name, NULL,
+ NULL, NULL, 0, count, svc_handle);
+ if (ret != AUDIO_SVC_ERROR_NONE) {
+ DEBUG_TRACE("Fail to get svc list");
+ audio_svc_list_item_free(svc_handle);
+ return NULL;
+ }
+ /* get artist name */
+ ret = audio_svc_list_item_get_val(svc_handle, 0, AUDIO_SVC_LIST_ITEM_ARTIST, &artist, &size, -1);
+ if (ret != AUDIO_SVC_ERROR_NONE || artist == NULL) {
+ DEBUG_TRACE("Fail to get value: ret: %d, artist: %s", ret, artist);
+ if (svc_handle)
+ audio_svc_list_item_free(svc_handle);
+ return NULL;
+ }
+
+ char *artist_name = NULL;
+ int alloc_size = strlen(artist) + 1;
+ artist_name = (char *)g_malloc(alloc_size);
+ if (!artist_name) {
+ DEBUG_TRACE("Fail to allocate memory");
+ if (svc_handle)
+ audio_svc_list_item_free(svc_handle);
+ return NULL;
+ }
+ memset(artist_name, 0, alloc_size);
+ if (artist)
+ strncat(artist_name, artist, strlen(artist));
+ int index = 1;
+ for (; index < count; index++) {
+ /* get artist name */
+ artist = NULL;
+ ret = audio_svc_list_item_get_val(svc_handle, index, AUDIO_SVC_LIST_ITEM_ARTIST, &artist, &size, -1);
+ if (ret != AUDIO_SVC_ERROR_NONE) {
+ DEBUG_TRACE("Fail to get value");
+ if (svc_handle)
+ audio_svc_list_item_free(svc_handle);
+ return NULL;
+ }
+
+ if (artist && !strstr(artist_name, artist)) {
+ alloc_size += strlen(artist) + 1;
+ artist_name = (char *)g_realloc(artist_name, alloc_size);
+ if (!artist_name) {
+ DEBUG_TRACE("Fail to reallocate memory");
+ if (svc_handle)
+ audio_svc_list_item_free(svc_handle);
+ return NULL;
+ }
+ strncat(artist_name, ",", 1);
+ strncat(artist_name, artist, strlen(artist));
+ DEBUG_TRACE("artist_name=%s,artist=%s", artist_name, artist);
+ }
+ }
+ DEBUG_TRACE("artist_name=%s", artist_name);
+ if (svc_handle)
+ audio_svc_list_item_free(svc_handle);
+ return artist_name;
+ }
+
+ if (!name || !strlen(name))
+ name = GET_SYS_STR("IDS_COM_BODY_UNKNOWN");
+ return g_strdup(name);
+}
+
+static Evas_Object *
+_mp_view_layout_get_label_slide(Evas_Object *parent, char *name, int font_size, char *color, int max_size)
+{
+ Evas_Object *label = NULL;
+ char *label_str = NULL;
+ char *pre_format = NULL;
+ pre_format = (char *)g_malloc(MP_MAX_TEXT_PRE_FORMAT_LEN);
+ mp_retvm_if(!pre_format, NULL, "Fail to allocate memory");
+ memset(pre_format, 0, MP_MAX_TEXT_PRE_FORMAT_LEN);
+ const char *last_format = "</color></font_size>";
+ snprintf(pre_format, MP_MAX_TEXT_PRE_FORMAT_LEN, "<font_size=%d><color=#%s>", font_size, color);
+ int str_length = strlen(pre_format) + strlen(name) + strlen(last_format) + 1;
+ label_str = (char *)g_malloc(str_length);
+ if (!label_str) {
+ DEBUG_TRACE("Fail to allocate memory");
+ g_free(pre_format);
+ return NULL;
+ }
+ memset(label_str, 0, str_length);
+ snprintf(label_str, str_length, "%s%s%s", pre_format, name, last_format);
+ label = elm_label_add(parent);
+ elm_object_style_set(label, "slide_bounce");
+ elm_object_text_set(label, label_str);
+ elm_label_wrap_width_set(label, MP_MAX_ARTIST_NAME_WIDTH);
+ if (strlen(name) > max_size) {
+ elm_label_slide_duration_set(label, (strlen(name) / max_size) * MP_LABEL_SLIDE_DURATION);
+ elm_label_slide_set(label, EINA_TRUE);
+ }
+ g_free(pre_format);
+ g_free(label_str);
+ return label;
+}
+
+static char *
+_mp_view_layout_album_list_label_get(void *data, Evas_Object * obj, const char *part)
+{
+ MP_CHECK_NULL(data);
+ char *name = NULL;
+ int size = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ AudioHandleType *svc_item = (AudioHandleType *) (layout_data->album_track_handle);
+ MP_CHECK_NULL(svc_item);
+
+ if (!g_strcmp0(part, "elm.text.1")) {
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ if (!name || !strlen(name))
+ name = GET_SYS_STR("IDS_COM_BODY_UNKNOWN");
+ return strdup(name);
+
+ } else if (!g_strcmp0(part, "elm.text.3")) {
+ char *album_name = NULL;
+ int track_num = -1;
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &album_name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ ret = audio_svc_count_list_item(layout_data->ad->media_svc_handle, AUDIO_SVC_TRACK_BY_ALBUM, album_name, NULL, "", "", &track_num);
+ mp_retvm_if(ret != AUDIO_SVC_ERROR_NONE, NULL, "Fail to get track_num");
+ mp_retvm_if(track_num < 0, NULL, "Fail to get track_num");
+ return g_strdup_printf("%d", track_num);
+ }
+
+ DEBUG_TRACE("Unusing part: %s", part);
+ return NULL;
+}
+
+static Evas_Object *
+_mp_view_layout_album_list_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+ startfunc;
+ MP_CHECK_NULL(data);
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ AudioHandleType *svc_item = (AudioHandleType *) (layout_data->album_track_handle);
+ MP_CHECK_NULL(svc_item);
+
+ Evas_Object *icon = NULL;
+ int size = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ if (!g_strcmp0(part, "elm.icon")) {
+ char *thumb_name = NULL;
+ ret = audio_svc_group_item_get_val(svc_item, 0, AUDIO_SVC_GROUP_ITEM_THUMBNAIL_PATH, &thumb_name, &size, -1);
+ mp_retvm_if((ret != AUDIO_SVC_ERROR_NONE), NULL, "Fail to get value");
+ icon = mp_util_create_thumb_icon(obj, thumb_name, MP_ALBUM_LIST_ICON_SIZE, MP_ALBUM_LIST_ICON_SIZE);
+ } else if (!g_strcmp0(part, "elm.text.swallow")) {
+ char *name = _mp_view_layout_album_list_get_artist_name(layout_data->ad->media_svc_handle, svc_item);
+ if (name) {
+ icon = _mp_view_layout_get_label_slide(obj, name, 36, "FFFFFFFF", 42);
+ g_free(name);
+ }
+ }
+ return icon;
+}
+
+
+
+static void
+_mp_view_layout_append_aa_group_title(mp_layout_data_t * layout_data, mp_genlist_item_data_t *item_data, int index)
+{
+ MP_CHECK(layout_data);
+ MP_CHECK(item_data);
+ MP_CHECK(index >= 0);
+ static Elm_Genlist_Item_Class aa_group_itc = {
+ .item_style = "music_player/dialogue_title",
+ .func.text_get = _mp_view_layout_aa_list_label_get,
+ .func.content_get = _mp_view_layout_aa_list_icon_get,
+ };
+ layout_data->aa_group_itc = &aa_group_itc;
+ layout_data->aa_group[index] =
+ elm_genlist_item_append(layout_data->genlist, layout_data->aa_group_itc, item_data,
+ NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ MP_CHECK(layout_data->aa_group[index]);
+ elm_genlist_item_select_mode_set(layout_data->aa_group[index], ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+}
+
+static void
+_mp_view_layout_append_album_group_title(mp_layout_data_t * layout_data)
+{
+ startfunc;
+ MP_CHECK(layout_data);
+ static Elm_Genlist_Item_Class album_group_itc = {
+ .item_style = "music_player/album_title",
+ .func.text_get = _mp_view_layout_album_list_label_get,
+ .func.content_get = _mp_view_layout_album_list_icon_get,
+ };
+ layout_data->album_group_itc = &album_group_itc;
+ layout_data->album_group =
+ elm_genlist_item_append(layout_data->genlist, layout_data->album_group_itc, layout_data,
+ NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+ MP_CHECK(layout_data->album_group);
+ elm_genlist_item_select_mode_set(layout_data->album_group, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+ endfunc;
+}
+
+static void
+_mp_view_layout_add_album_group_title(mp_layout_data_t * layout_data)
+{
+ startfunc;
+ MP_CHECK(layout_data);
+ MP_CHECK(layout_data->svc_handle);
+ int ret = AUDIO_SVC_ERROR_NONE;
+ char *artist = NULL;
+ int size = -1;
+ ret = audio_svc_list_item_get_val(layout_data->svc_handle, 0, AUDIO_SVC_LIST_ITEM_ARTIST, &artist, &size, -1);
+ mp_retm_if((ret != AUDIO_SVC_ERROR_NONE), "Fail to get value");
+ DEBUG_TRACE("artist=%s,type_str=%s", artist, layout_data->type_str);
+ /* create album svc group */
+ AudioHandleType *group_handle = NULL;
+ ret = audio_svc_group_item_new(&group_handle, 1);
+ mp_retm_if((ret != AUDIO_SVC_ERROR_NONE), "Fail to create structure");
+ DEBUG_TRACE("artist=%s,type_str=%s", artist, layout_data->type_str);
+ /* get album svc group */
+ ret = audio_svc_get_group_item(layout_data->ad->media_svc_handle, AUDIO_SVC_GROUP_BY_ARTIST_ALBUM, artist, NULL,
+ layout_data->type_str, NULL, 0, 1, group_handle);
+ if (ret != AUDIO_SVC_ERROR_NONE) {
+ DEBUG_TRACE("Fail to get group items");
+ audio_svc_group_item_free(group_handle);
+ return;
+ }
+ /* free last album svc group */
+ if (layout_data->album_track_handle)
+ audio_svc_group_item_free(layout_data->album_track_handle);
+ /* set album_track_handle value */
+ layout_data->album_track_handle = group_handle;
+
+ _mp_view_layout_append_album_group_title(layout_data);
+ endfunc;
+}
+
+static void
+_mp_view_layout_load_search_list_item(Evas_Object * view_layout)
+{
+
+ DEBUG_TRACE("");
+
+ Elm_Genlist_Item_Class itc;
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is null");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if (layout_data->filter_str && strlen(layout_data->filter_str))
+ {
+ _mp_view_layout_load_search_item(view_layout);
+ edje_object_signal_emit(_EDJ(layout_data->layout), "hide.screen", "music_app");
+ }
+ else
+ {
+ memset(&itc, 0, sizeof(Elm_Genlist_Item_Class));
+ itc.item_style = "music_player/1icon.3text";
+ itc.func.text_get = mp_common_track_list_label_get;
+ itc.func.content_get = mp_common_track_list_icon_get;
+
+ mp_genlist_cb_t genlist_cbs;
+ memset(&genlist_cbs, 0, sizeof(mp_genlist_cb_t));
+ genlist_cbs.selected_cb = mp_common_track_genlist_sel_cb;
+
+ mp_view_layout_set_layout_data(view_layout,
+ MP_LAYOUT_CATEGORY_TYPE, MP_LAYOUT_TRACK_LIST,
+ MP_LAYOUT_TRACK_LIST_TYPE, AUDIO_SVC_TRACK_ALL,
+ MP_LAYOUT_LIST_CB, &genlist_cbs, MP_LAYOUT_GENLIST_ITEMCLASS, &itc, -1);
+
+ _mp_view_layout_load_list_item(view_layout);
+
+ edje_object_signal_emit(_EDJ(layout_data->layout), "show.screen", "music_app");
+ }
+}
+
+static Eina_Bool
+_mp_view_layout_load_item_idler_cb(void *data)
+{
+ startfunc;
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ int index;
+ int ret = -1;
+ genlist_cb_t sel_cb;
+ Elm_Genlist_Item_Class *itc;
+
+ if (!layout_data)
+ {
+ WARN_TRACE("layout_data is null...");
+ return EINA_FALSE;
+ }
+
+ itc = &(layout_data->itc);
+ sel_cb = layout_data->cb_func.selected_cb;
+
+ for (index = MP_INIT_ITEM_LOAD_COUNT; index < layout_data->item_count; index++)
+ {
+ AudioHandleType *item = NULL;
+ Elm_Object_Item *list_item = NULL;
+ char *title = NULL;
+ int size = 0;
+
+ if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ {
+ ret = audio_svc_playlist_get_item(layout_data->svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_playlist_get_item, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_playlist_get_val(item, 0, AUDIO_SVC_PLAYLIST_NAME, &title, &size, -1);
+ }
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ {
+ ret = audio_svc_group_item_get(layout_data->svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_group_item_get, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_group_item_get_val(item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &title, &size, -1);
+ }
+ else
+ {
+ if (layout_data->playlist_id < 0)
+ {
+ ret = audio_svc_list_item_get(layout_data->svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_list_item_get, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_list_item_get_val(item, 0, AUDIO_SVC_LIST_ITEM_TITLE, &title, &size, -1);
+ }
+ else
+ {
+ ret = audio_svc_playlist_item_get(layout_data->svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_list_item_get, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_playlist_item_get_val(item, 0, AUDIO_SVC_PLAYLIST_ITEM_TITLE, &title, &size,
+ -1);
+ }
+ }
+
+ mp_genlist_item_data_t *item_data;
+ item_data = calloc(1, sizeof(mp_genlist_item_data_t));
+ if (!item_data)
+ goto END;
+ item_data->media_svc_handle = layout_data->ad->media_svc_handle;
+ item_data->handle = (void *)item;
+ item_data->group_type = layout_data->group_type;
+
+ itc->func.del = _mp_view_layout_gl_del;
+
+ item_data->it = list_item = elm_genlist_item_append(layout_data->genlist, itc, item_data, NULL,
+ ELM_GENLIST_ITEM_NONE, sel_cb, (void *)index);
+
+ }
+
+ END:
+ layout_data->load_item_idler = NULL;
+ endfunc;
+ return EINA_FALSE;
+}
+
+static void
+_mp_view_layout_check_select_all(mp_layout_data_t * layout_data)
+{
+ MP_CHECK(layout_data);
+
+ Elm_Object_Item *it;
+ bool disabled = false;
+
+ if (layout_data->select_all_checked)
+ layout_data->checked_count = layout_data->item_count;
+ else
+ layout_data->checked_count = 0;
+
+ it = elm_genlist_first_item_get(layout_data->genlist);
+ while (it)
+ {
+ if (elm_genlist_item_select_mode_get(it) != ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY) {
+ mp_genlist_item_data_t *it_data = NULL;
+ it_data = elm_object_item_data_get(it);
+ disabled = elm_object_item_disabled_get(it); //not to select auto playlist.
+ if (it_data && !disabled) {
+ it_data->checked = layout_data->select_all_checked;
+ }
+ }
+ it = elm_genlist_item_next_get(it);
+ }
+ // Update all realized items
+ elm_genlist_realized_items_update(layout_data->genlist);
+ mp_util_create_selectioninfo_with_count(layout_data->ad, layout_data->checked_count);
+ mp_common_set_title_button_sensitivity(layout_data, layout_data->checked_count);
+
+}
+
+static void
+_mp_view_layout_select_all_layout_mouse_down_cb(void *data, Evas * evas, Evas_Object * obj, void *event_info)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+
+ if(layout_data->rename_git)
+ {
+ mp_playlist_view_rename_done_cb(layout_data, NULL, NULL);
+ return;
+ }
+
+ layout_data->select_all_checked = !layout_data->select_all_checked;
+ elm_check_state_pointer_set(layout_data->select_all_checkbox, &layout_data->select_all_checked);
+
+ _mp_view_layout_check_select_all(layout_data);
+}
+
+static void
+_mp_view_layout_select_all_check_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+
+ if(layout_data->rename_git)
+ {
+ mp_playlist_view_rename_done_cb(layout_data, NULL, NULL);
+ layout_data->select_all_checked = !layout_data->select_all_checked;
+ elm_check_state_pointer_set(layout_data->select_all_checkbox, &layout_data->select_all_checked);
+ return;
+ }
+
+ _mp_view_layout_check_select_all(data);
+}
+
+static void
+_mp_view_layout_create_select_all(mp_layout_data_t * layout_data)
+{
+ MP_CHECK(layout_data);
+
+ layout_data->select_all_layout = elm_layout_add(layout_data->box);
+ elm_layout_theme_set(layout_data->select_all_layout, "genlist", "item", "select_all/music/default");
+ evas_object_size_hint_weight_set(layout_data->select_all_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+ evas_object_size_hint_align_set(layout_data->select_all_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_event_callback_add(layout_data->select_all_layout, EVAS_CALLBACK_MOUSE_DOWN,
+ _mp_view_layout_select_all_layout_mouse_down_cb, layout_data);
+
+ Evas_Object *check = layout_data->select_all_checkbox = elm_check_add(layout_data->select_all_layout);
+ elm_check_state_pointer_set(check, &layout_data->select_all_checked);
+ evas_object_smart_callback_add(check, "changed", _mp_view_layout_select_all_check_changed_cb, layout_data);
+ evas_object_propagate_events_set(check, EINA_FALSE);
+ elm_object_part_content_set(layout_data->select_all_layout, "elm.icon", check);
+
+ edje_object_part_text_set(elm_layout_edje_get(layout_data->select_all_layout), "elm.text",
+ GET_SYS_STR("IDS_COM_BODY_SELECT_ALL"));
+ elm_box_pack_start(layout_data->box, layout_data->select_all_layout);
+ evas_object_show(layout_data->select_all_layout);
+}
+
+static void
+_mp_view_layout_load_search_item(Evas_Object * view_layout)
+{
+ startfunc;
+ int count = 0;
+ gint track_count = 0;
+ gint artist_count = 0;
+ gint album_count = 0;
+
+ gint index = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ AudioHandleType *svc_handle = NULL;
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is null");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ mp_retm_if(layout_data->b_loading, "func called while loading");
+ layout_data->b_loading = TRUE;
+
+ elm_genlist_clear(layout_data->genlist);
+
+ ret = audio_svc_count_group_item(layout_data->ad->media_svc_handle, AUDIO_SVC_GROUP_BY_ARTIST, NULL, NULL, layout_data->filter_str, NULL,
+ &artist_count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to create structure");
+ goto END;
+ }
+ ret = audio_svc_count_group_item(layout_data->ad->media_svc_handle, AUDIO_SVC_GROUP_BY_ALBUM, NULL, NULL, layout_data->filter_str, NULL,
+ &album_count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to create structure");
+ goto END;
+ }
+ ret = audio_svc_count_list_item(layout_data->ad->media_svc_handle, AUDIO_SVC_TRACK_ALL, NULL, NULL, layout_data->filter_str, NULL, &track_count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to create structure");
+ goto END;
+ }
+
+ count = artist_count + album_count + track_count;
+ layout_data->track_count = track_count;
+
+ if (0 >= count)
+ {
+ ERROR_TRACE("no tracks");
+ if (!layout_data->sentinel)
+ layout_data->sentinel = _mp_view_layout_sentinel_add(layout_data);
+ goto END;
+ }
+
+ if (layout_data->sentinel)
+ {
+ elm_box_unpack(layout_data->box, layout_data->sentinel);
+ evas_object_del(layout_data->sentinel);
+ layout_data->sentinel = NULL;
+ elm_box_pack_end(layout_data->box, layout_data->genlist);
+ evas_object_show(layout_data->genlist);
+ }
+
+ static Elm_Genlist_Item_Class group_class = {
+ .item_style = "music_player/1icon.2text",
+ .func.text_get = mp_group_view_list_label_get,
+ .func.content_get = mp_group_view_icon_get,
+ .func.del = _mp_view_layout_gl_del,
+ };
+
+ static Elm_Genlist_Item_Class track_class = {
+ .item_style = "music_player/1icon.3text",
+ .func.text_get = mp_common_track_list_label_get,
+ .func.content_get = mp_common_track_list_icon_get,
+ .func.del = _mp_view_layout_gl_del,
+ };
+
+ if (artist_count)
+ {
+ DEBUG_TRACE("append artist list items");
+ _mp_view_layout_append_group_title(layout_data, GET_STR("IDS_MUSIC_TAB4_ARTISTS"));
+ ret = audio_svc_group_item_new(&svc_handle, artist_count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to create structure");
+ goto END;
+ }
+ ret = audio_svc_get_group_item(layout_data->ad->media_svc_handle, AUDIO_SVC_GROUP_BY_ARTIST, NULL, NULL, layout_data->filter_str, NULL, 0,
+ artist_count, svc_handle);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to get items");
+ goto END;
+ }
+
+ for (index = 0; index < artist_count; index++)
+ {
+ AudioHandleType *item = NULL;
+ Elm_Object_Item *list_item = NULL;
+ char *title = NULL;
+ int size = 0;
+ ret = audio_svc_group_item_get(svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_list_item_get, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_group_item_get_val(item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &title, &size, -1);
+
+ mp_genlist_item_data_t *item_data;
+ item_data = calloc(1, sizeof(mp_genlist_item_data_t));
+ MP_CHECK(item_data);
+ item_data->handle = (void *)item;
+ item_data->group_type = AUDIO_SVC_GROUP_BY_ARTIST;
+
+ item_data->it = list_item =
+ elm_genlist_item_append(layout_data->genlist, &group_class, item_data,
+ layout_data->search_group_git, ELM_GENLIST_ITEM_NONE,
+ mp_group_view_group_list_select_cb, (void *)index);
+
+ }
+
+ if (layout_data->artist_handle)
+ {
+ audio_svc_group_item_free(layout_data->artist_handle);
+ layout_data->track_handle = NULL;
+ }
+ layout_data->artist_handle = svc_handle;
+
+ }
+
+ if (album_count)
+ {
+ DEBUG_TRACE("append album_count list items");
+ _mp_view_layout_append_group_title(layout_data, GET_STR("IDS_MUSIC_TAB4_ALBUMS"));
+ ret = audio_svc_group_item_new(&svc_handle, album_count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to create structure");
+ goto END;
+ }
+ ret = audio_svc_get_group_item(layout_data->ad->media_svc_handle, AUDIO_SVC_GROUP_BY_ALBUM, NULL, NULL, layout_data->filter_str, NULL, 0,
+ album_count, svc_handle);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to get items");
+ goto END;
+ }
+
+ for (index = 0; index < album_count; index++)
+ {
+ AudioHandleType *item = NULL;
+ Elm_Object_Item *list_item = NULL;
+ char *title = NULL;
+ int size = 0;
+ ret = audio_svc_group_item_get(svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_list_item_get, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_group_item_get_val(item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &title, &size, -1);
+
+ mp_genlist_item_data_t *item_data;
+ item_data = calloc(1, sizeof(mp_genlist_item_data_t));
+ MP_CHECK(item_data);
+ item_data->media_svc_handle = layout_data->ad->media_svc_handle;
+ item_data->handle = (void *)item;
+ item_data->group_type = AUDIO_SVC_GROUP_BY_ALBUM;
+
+ item_data->it = list_item =
+ elm_genlist_item_append(layout_data->genlist, &group_class, item_data,
+ layout_data->search_group_git, ELM_GENLIST_ITEM_NONE,
+ mp_group_view_group_list_select_cb, (void *)index);
+
+ }
+
+ if (layout_data->album_handle)
+ {
+ audio_svc_group_item_free(layout_data->album_handle);
+ layout_data->track_handle = NULL;
+ }
+ layout_data->album_handle = svc_handle;
+
+ }
+
+ if (track_count)
+ {
+ DEBUG_TRACE("append track_count list items");
+ _mp_view_layout_append_group_title(layout_data, GET_STR("IDS_MUSIC_HEADER_SONGS"));
+ ret = audio_svc_list_item_new(&svc_handle, track_count);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to create structure");
+ goto END;
+ }
+ ret = audio_svc_get_list_item(layout_data->ad->media_svc_handle, AUDIO_SVC_TRACK_ALL, NULL, NULL, layout_data->filter_str, NULL, 0,
+ track_count, svc_handle);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to get items");
+ goto END;
+ }
+
+ for (index = 0; index < track_count; index++)
+ {
+ AudioHandleType *item = NULL;
+ Elm_Object_Item *list_item = NULL;
+ char *title = NULL;
+ int size = 0;
+ ret = audio_svc_list_item_get(svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_list_item_get, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_list_item_get_val(item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &title, &size, -1);
+
+ mp_genlist_item_data_t *item_data;
+ item_data = calloc(1, sizeof(mp_genlist_item_data_t));
+ MP_CHECK(item_data);
+ item_data->media_svc_handle = layout_data->ad->media_svc_handle;
+ item_data->handle = (void *)item;
+
+ item_data->it = list_item =
+ elm_genlist_item_append(layout_data->genlist, &track_class, item_data,
+ layout_data->search_group_git, ELM_GENLIST_ITEM_NONE,
+ mp_common_track_genlist_sel_cb, (void *)index);
+
+ }
+
+ if (layout_data->track_handle)
+ {
+ audio_svc_list_item_free(layout_data->track_handle);
+ layout_data->track_handle = NULL;
+ }
+ layout_data->track_handle = svc_handle;
+
+ }
+
+ END:
+ layout_data->b_loading = FALSE;
+ endfunc;
+}
+
+static void
+_mp_view_layout_load_aa_list_item(Evas_Object * view_layout)
+{
+ startfunc;
+ MP_CHECK(view_layout);
+ int ret = AUDIO_SVC_ERROR_NONE;
+ gint count = -1;
+
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is null");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ mp_retm_if(layout_data->b_loading, "func called while loading");
+ layout_data->b_loading = TRUE;
+ layout_data->checked_count = 0;
+ layout_data->select_all_checked = 0;
+ layout_data->is_item_del = false;
+
+ if (layout_data->load_item_idler) {
+ DEBUG_TRACE("unregister idler");
+ ecore_idler_del(layout_data->load_item_idler);
+ layout_data->load_item_idler = NULL;
+ }
+
+ Elm_Object_Item *item = elm_genlist_first_item_get(layout_data->genlist);
+ if (item) {
+ elm_genlist_item_bring_in(item, ELM_GENLIST_ITEM_SCROLLTO_IN);
+ elm_genlist_clear(layout_data->genlist);
+ }
+
+ audio_svc_count_group_item(layout_data->ad->media_svc_handle, AUDIO_SVC_GROUP_BY_ARTIST_ALBUM, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, &count);
+
+ layout_data->item_count = count;
+
+ if (0 >= count
+ && (layout_data->category != MP_LAYOUT_PLAYLIST_LIST
+ || (layout_data->filter_str && strlen(layout_data->filter_str))))
+ {
+ ERROR_TRACE("no tracks");
+ if (!layout_data->sentinel)
+ layout_data->sentinel = _mp_view_layout_sentinel_add(layout_data);
+ goto END;
+ }
+
+ if (layout_data->sentinel) {
+ elm_box_unpack(layout_data->box, layout_data->sentinel);
+ evas_object_del(layout_data->sentinel);
+ layout_data->sentinel = NULL;
+ elm_box_pack_end(layout_data->box, layout_data->genlist);
+ evas_object_show(layout_data->genlist);
+ }
+
+ /* create artist-album svc group */
+ AudioHandleType *group_handle = NULL;
+ ret = audio_svc_group_item_new(&group_handle, count);
+ if (ret != AUDIO_SVC_ERROR_NONE) {
+ DEBUG_TRACE("Fail to create structure");
+ goto END;
+ }
+ /* get artist-album svc group */
+ ret = audio_svc_get_group_item(layout_data->ad->media_svc_handle, AUDIO_SVC_GROUP_BY_ARTIST_ALBUM, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, 0, count, group_handle);
+ if (ret != AUDIO_SVC_ERROR_NONE) {
+ DEBUG_TRACE("Fail to get group items");
+ audio_svc_group_item_free(group_handle);
+ goto END;
+ }
+ /* free last artist-album svc group */
+ if (layout_data->aa_handle)
+ audio_svc_group_item_free(layout_data->aa_handle);
+ /* set aa_handle value */
+ layout_data->aa_handle = group_handle;
+ /* set aa_group_count value */
+ layout_data->aa_group_count = count;
+
+ IF_FREE(layout_data->aa_group);
+ IF_FREE(layout_data->aa_item_count);
+ layout_data->aa_group = calloc(count, sizeof(Elm_Object_Item *));
+ layout_data->aa_item_count = calloc(count, sizeof(int));
+ if (!layout_data->aa_item_count || !layout_data->aa_group) {
+ DEBUG_TRACE("allocate memory fail");
+ goto END;
+ }
+ int track_num = -1;
+ int size = 0;
+ ret = audio_svc_count_list_item(layout_data->ad->media_svc_handle, AUDIO_SVC_TRACK_BY_ARTIST, layout_data->type_str,
+ NULL, "", "", &track_num);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get track_num");
+
+ AudioHandleType *svc_handle = NULL;
+ /* create artist-album svc list */
+ ret = audio_svc_list_item_new(&svc_handle, track_num);
+ /* get sub list track count */
+ ret = audio_svc_get_list_item(layout_data->ad->media_svc_handle, AUDIO_SVC_TRACK_BY_ARTIST, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, 0, track_num, svc_handle);
+ /* free last artist-album svc list */
+ if (layout_data->svc_handle)
+ audio_svc_group_item_free(layout_data->svc_handle);
+ /* set svc_handle value */
+ layout_data->svc_handle = svc_handle;
+
+ layout_data->item_count = track_num;
+ int group_index = 0;
+ int index = 0;
+
+ Elm_Genlist_Item_Class *itc = NULL;
+ genlist_cb_t sel_cb = NULL;
+ itc = &(layout_data->itc);
+ sel_cb = layout_data->cb_func.selected_cb;
+ itc->func.del = _mp_view_layout_gl_del;
+ itc->decorate_all_item_style = "music_edit_default";
+
+ //itc->func.moved = _mp_view_layout_reorder;
+ evas_object_smart_callback_del(layout_data->genlist, "moved", _mp_view_layout_reorder);
+ evas_object_smart_callback_add(layout_data->genlist, "moved", _mp_view_layout_reorder, layout_data);
+
+ DEBUG_TRACE("item_count=%d,count=%d", layout_data->item_count, count);
+ for (group_index = 0; group_index < count; group_index++) {
+ char *album_name = NULL;
+ int item_num = -1;
+ AudioHandleType *group_item = NULL;
+ /* get item value */
+ ret = audio_svc_group_item_get(group_handle, group_index, &group_item);
+ if (ret != AUDIO_SVC_ERROR_NONE) {
+ DEBUG_TRACE("Fail to audio_svc_group_item_get, ret[%d]", ret);
+ goto END;
+ }
+
+ /* add artist-album group title */
+ mp_genlist_item_data_t *group_item_data = NULL;
+ group_item_data = calloc(1, sizeof(mp_genlist_item_data_t));
+ if (!group_item_data) {
+ DEBUG_TRACE("allocate memory fail");
+ goto END;
+ }
+ group_item_data->media_svc_handle = layout_data->ad->media_svc_handle;
+ group_item_data->handle = (void *)group_item;
+ _mp_view_layout_append_aa_group_title(layout_data, group_item_data, group_index);
+
+ ret = audio_svc_group_item_get_val(group_handle, group_index, AUDIO_SVC_GROUP_ITEM_MAIN_INFO,
+ &album_name, &size, -1);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+
+ ret = audio_svc_count_list_item(layout_data->ad->media_svc_handle, AUDIO_SVC_TRACK_BY_ARTIST_ALBUM, album_name,
+ layout_data->type_str, "", "", &item_num);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get item_num");
+ mp_retm_if(item_num < 0, "Fail to get item_num");
+ layout_data->aa_item_count[group_index] = item_num;
+
+ int sub_index = 0;
+ for (; sub_index < item_num; sub_index++) {
+ AudioHandleType *sub_item = NULL;
+ Elm_Object_Item *sub_list_item = NULL;
+ ret = audio_svc_list_item_get(svc_handle, index, &sub_item);
+ mp_retm_if(ret != AUDIO_SVC_ERROR_NONE, "Fail to get value");
+
+ mp_genlist_item_data_t *sub_item_data = NULL;
+ sub_item_data = calloc(1, sizeof(mp_genlist_item_data_t));
+ if (!sub_item_data) {
+ DEBUG_TRACE("allocate memory fail");
+ goto END;
+ }
+ sub_item_data->media_svc_handle = layout_data->ad->media_svc_handle;
+ sub_item_data->handle = (void *)sub_item;
+ Elm_Object_Item *parent_group = NULL;
+ parent_group = layout_data->aa_group[group_index];
+ sub_item_data->it = sub_list_item = elm_genlist_item_append(layout_data->genlist, itc, sub_item_data,
+ parent_group, ELM_GENLIST_ITEM_NONE,
+ sel_cb, (void *)index);
+ ++index;
+ }
+ }
+
+ if (layout_data->edit_mode || (layout_data->ad->b_add_tracks
+ && layout_data->view_data->view_type == MP_VIEW_TYPE_SONGS)) {
+ if (!layout_data->select_all_layout) {
+ _mp_view_layout_create_select_all(layout_data);
+ } else {
+ if (layout_data->select_all_checkbox)
+ elm_check_state_set(layout_data->select_all_checkbox, false);
+ }
+ elm_genlist_decorate_mode_set(layout_data->genlist, EINA_TRUE);
+ elm_genlist_select_mode_set(layout_data->genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ } else {
+ if (layout_data->select_all_layout) {
+ evas_object_del(layout_data->select_all_layout);
+ layout_data->select_all_layout = NULL;
+ }
+ elm_genlist_decorate_mode_set(layout_data->genlist, EINA_FALSE);
+ elm_genlist_select_mode_set(layout_data->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+
+ if (layout_data->reorder && layout_data->playlist_id > 0) {
+ elm_genlist_reorder_mode_set(layout_data->genlist, EINA_TRUE);
+ } else {
+ elm_genlist_reorder_mode_set(layout_data->genlist, EINA_FALSE);
+ }
+
+ END:
+ layout_data->b_loading = FALSE;
+ endfunc;
+}
+
+static void
+_mp_view_layout_load_list_item(Evas_Object * view_layout)
+{
+ startfunc;
+ gint count = -1;
+ gint load_count = -1;
+ gint index = 0;
+ int ret = AUDIO_SVC_ERROR_NONE;
+ Elm_Genlist_Item_Class *itc;
+ genlist_cb_t sel_cb;
+
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is null");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ mp_retm_if(layout_data->b_loading, "func called while loading");
+ layout_data->b_loading = TRUE;
+ layout_data->checked_count = 0;
+ layout_data->select_all_checked = 0;
+ layout_data->is_item_del = false;
+
+ if (layout_data->load_item_idler)
+ {
+ DEBUG_TRACE("unregister idler");
+ ecore_idler_del(layout_data->load_item_idler);
+ layout_data->load_item_idler = NULL;
+ }
+
+ Elm_Object_Item *item = elm_genlist_first_item_get(layout_data->genlist);
+ if (item)
+ {
+ elm_genlist_item_bring_in(item, ELM_GENLIST_ITEM_SCROLLTO_IN);
+ elm_genlist_clear(layout_data->genlist);
+ }
+
+
+ if (layout_data->category == MP_LAYOUT_TRACK_LIST)
+ {
+ if (layout_data->playlist_id < 0)
+ audio_svc_count_list_item(layout_data->ad->media_svc_handle, layout_data->track_type, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, &count);
+ else
+ audio_svc_count_playlist_item(layout_data->ad->media_svc_handle, layout_data->playlist_id, layout_data->filter_str, NULL, &count);
+ }
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ audio_svc_count_group_item(layout_data->ad->media_svc_handle, layout_data->group_type, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, &count);
+ else if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ {
+ audio_svc_count_playlist(layout_data->ad->media_svc_handle, layout_data->filter_str, NULL, &count);
+ _mp_view_layout_append_auto_playlists(layout_data);
+ }
+ else
+ {
+ WARN_TRACE("category is not valid: %d", layout_data->category);
+ goto END;
+ }
+ layout_data->item_count = count;
+ DEBUG_TRACE("count: %d", count);
+
+ if (0 >= count
+ && (layout_data->category != MP_LAYOUT_PLAYLIST_LIST
+ || (layout_data->filter_str && strlen(layout_data->filter_str))))
+ {
+ ERROR_TRACE("no tracks");
+ if (!layout_data->sentinel)
+ layout_data->sentinel = _mp_view_layout_sentinel_add(layout_data);
+ goto END;
+ }
+
+ if (layout_data->sentinel)
+ {
+ elm_box_unpack(layout_data->box, layout_data->sentinel);
+ evas_object_del(layout_data->sentinel);
+ layout_data->sentinel = NULL;
+ elm_box_pack_end(layout_data->box, layout_data->genlist);
+ evas_object_show(layout_data->genlist);
+ }
+
+ AudioHandleType *svc_handle = NULL;
+ if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ ret = audio_svc_playlist_new(&svc_handle, count);
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ ret = audio_svc_group_item_new(&svc_handle, count);
+ else
+ {
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_list_item_new(&svc_handle, count);
+ else
+ ret = audio_svc_playlist_item_new(&svc_handle, count);
+ }
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to create structure");
+ goto END;
+ }
+ if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ ret = audio_svc_get_playlist(layout_data->ad->media_svc_handle, layout_data->filter_str, NULL, 0, count, svc_handle);
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ ret = audio_svc_get_group_item(layout_data->ad->media_svc_handle, layout_data->group_type, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, 0, count, svc_handle);
+ else
+ {
+ if (layout_data->playlist_id < 0)
+ ret = audio_svc_get_list_item(layout_data->ad->media_svc_handle, layout_data->track_type, layout_data->type_str, NULL,
+ layout_data->filter_str, NULL, 0, count, svc_handle);
+ else
+ ret = audio_svc_get_playlist_item(layout_data->ad->media_svc_handle, layout_data->playlist_id, layout_data->filter_str, NULL, 0,
+ count, svc_handle);
+ }
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to get items");
+ audio_svc_list_item_free(svc_handle);
+ goto END;
+ }
+
+ if (layout_data->svc_handle)
+ {
+ if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ audio_svc_playlist_free(layout_data->svc_handle);
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ audio_svc_group_item_free(layout_data->svc_handle);
+ else
+ {
+ if (layout_data->playlist_id < 0)
+ audio_svc_list_item_free(layout_data->svc_handle);
+ else
+ audio_svc_playlist_item_free(layout_data->svc_handle);
+ }
+ }
+ layout_data->svc_handle = svc_handle;
+
+ itc = &(layout_data->itc);
+ sel_cb = layout_data->cb_func.selected_cb;
+
+ itc->func.del = _mp_view_layout_gl_del;
+ itc->decorate_all_item_style = "music_edit_default";
+
+ //itc->func.moved = _mp_view_layout_reorder;
+ evas_object_smart_callback_del(layout_data->genlist, "moved", _mp_view_layout_reorder);
+ evas_object_smart_callback_add(layout_data->genlist, "moved", _mp_view_layout_reorder, layout_data);
+
+ static bool first_loading = true;
+
+ if(first_loading)
+ {
+ load_count = MIN(count, MP_INIT_ITEM_LOAD_COUNT);
+ first_loading = false;
+ }
+ else
+ {
+ load_count = count;
+ elm_genlist_block_count_set(layout_data->genlist, MP_INIT_ITEM_LOAD_COUNT);
+ if(!layout_data->block_size_idler)
+ layout_data->block_size_idler = ecore_idler_add(_mp_view_layout_set_block_count_idle_cb, layout_data);
+ }
+
+ if (layout_data->playlist_id < 0
+ && MP_LAYOUT_TRACK_LIST == layout_data->category
+ && AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type)
+ _mp_view_layout_add_album_group_title(layout_data);
+
+ for (index = 0; index < load_count; index++)
+ {
+ AudioHandleType *item = NULL;
+ Elm_Object_Item *list_item = NULL;
+ char *title = NULL;
+ int size = 0;
+
+ if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ {
+ ret = audio_svc_playlist_get_item(svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_playlist_get_item, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_playlist_get_val(item, 0, AUDIO_SVC_PLAYLIST_NAME, &title, &size, -1);
+ }
+ else if (layout_data->category == MP_LAYOUT_GROUP_LIST)
+ {
+ ret = audio_svc_group_item_get(svc_handle, index, &item);
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_list_item_get, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ audio_svc_group_item_get_val(item, 0, AUDIO_SVC_GROUP_ITEM_MAIN_INFO, &title, &size, -1);
+ }
+ else
+ {
+ if (layout_data->playlist_id < 0)
+ {
+ ret = audio_svc_list_item_get(svc_handle, index, &item);
+ audio_svc_list_item_get_val(item, 0, AUDIO_SVC_LIST_ITEM_TITLE, &title, &size, -1);
+ }
+ else
+ {
+ ret = audio_svc_playlist_item_get(svc_handle, index, &item);
+ audio_svc_playlist_item_get_val(item, 0, AUDIO_SVC_PLAYLIST_ITEM_TITLE, &title, &size,
+ -1);
+ int play_order;
+ audio_svc_playlist_item_get_val(item, 0, AUDIO_SVC_PLAYLIST_ITEM_PLAY_ORDER,
+ &play_order, -1);
+ }
+
+ if (ret != AUDIO_SVC_ERROR_NONE)
+ {
+ DEBUG_TRACE("Fail to audio_svc_list_item_get, ret[%d], index[%d]", ret, index);
+ goto END;
+ }
+ }
+
+ mp_genlist_item_data_t *item_data;
+ item_data = calloc(1, sizeof(mp_genlist_item_data_t));
+ MP_CHECK(item_data);
+ item_data->media_svc_handle = layout_data->ad->media_svc_handle;
+ item_data->handle = (void *)item;
+ item_data->group_type = layout_data->group_type;
+
+ Elm_Object_Item *parent_group = NULL;
+ if (layout_data->playlist_id < 0
+ && MP_LAYOUT_TRACK_LIST == layout_data->category
+ && AUDIO_SVC_TRACK_BY_ALBUM == layout_data->track_type)
+ parent_group = layout_data->album_group;
+ item_data->it = list_item = elm_genlist_item_append(layout_data->genlist, itc, item_data, parent_group,
+ ELM_GENLIST_ITEM_NONE, sel_cb, (void *)index);
+
+ }
+
+ if (count > load_count && layout_data->view_mode != MP_VIEW_MODE_SEARCH)
+ {
+ if(!layout_data->load_item_idler)
+ layout_data->load_item_idler = ecore_idler_add(_mp_view_layout_load_item_idler_cb, layout_data);
+ }
+
+ if (layout_data->edit_mode
+ || (layout_data->ad->b_add_tracks && layout_data->view_data->view_type == MP_VIEW_TYPE_SONGS))
+ {
+ if (!layout_data->select_all_layout)
+ {
+ _mp_view_layout_create_select_all(layout_data);
+ }
+ else
+ {
+ if (layout_data->select_all_checkbox)
+ elm_check_state_set(layout_data->select_all_checkbox, false);
+ }
+
+ elm_genlist_decorate_mode_set(layout_data->genlist, EINA_TRUE);
+ elm_genlist_select_mode_set(layout_data->genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ }
+ else
+ {
+ if (layout_data->select_all_layout)
+ {
+ evas_object_del(layout_data->select_all_layout);
+ layout_data->select_all_layout = NULL;
+ }
+ elm_genlist_decorate_mode_set(layout_data->genlist, EINA_FALSE);
+ elm_genlist_select_mode_set(layout_data->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
+ }
+
+ if (layout_data->reorder && layout_data->playlist_id > 0)
+ elm_genlist_reorder_mode_set(layout_data->genlist, EINA_TRUE);
+ else
+ elm_genlist_reorder_mode_set(layout_data->genlist, EINA_FALSE);
+
+ END:
+ layout_data->b_loading = FALSE;
+ endfunc;
+}
+
+static void
+_mp_view_layout_now_playing_cb(void *data, Evas_Object * o, const char *emission, const char *source)
+{
+ startfunc;
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ if(layout_data->rename_git)
+ {
+ mp_playlist_view_rename_done_cb(layout_data, NULL, NULL);
+ return;
+ }
+ mp_common_hide_search_ise_context(layout_data->view_data);
+ mp_util_reset_genlist_mode_item(layout_data->genlist);
+ mp_play_view_load(layout_data->ad);
+ endfunc;
+}
+
+static Evas_Object *
+_mp_view_layout_create_now_playing(Evas_Object * parent, mp_layout_data_t * layout_data)
+{
+ Evas_Object *playing_pannel = NULL;
+ int r = -1;
+
+ DEBUG_TRACE_FUNC();
+
+ playing_pannel = elm_layout_add(parent);
+ if (playing_pannel)
+ {
+ r = elm_layout_file_set(playing_pannel, PLAY_VIEW_EDJ_NAME, "mp_now_playing");
+ if (!r)
+ {
+ evas_object_del(playing_pannel);
+ return NULL;
+ }
+ evas_object_size_hint_weight_set(playing_pannel, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ }
+
+ Evas_Object *thumbnail = elm_bg_add(playing_pannel);
+ elm_bg_load_size_set(thumbnail, MP_NOW_PLAYING_ICON_SIZE, MP_NOW_PLAYING_ICON_SIZE);
+ elm_object_part_content_set(playing_pannel, "thumb_image", thumbnail);
+ layout_data->now_playing_icon = thumbnail;
+
+ Evas_Object *progress = elm_progressbar_add(playing_pannel);
+ elm_object_style_set(progress, "music/list_progress");
+ elm_progressbar_horizontal_set(progress, EINA_TRUE);
+ evas_object_size_hint_align_set(progress, EVAS_HINT_FILL, EVAS_HINT_FILL);
+ evas_object_size_hint_weight_set(progress, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ elm_progressbar_value_set(progress, 0.0);
+ evas_object_show(progress);
+
+ elm_object_part_content_set(playing_pannel, "progress_bar", progress);
+ layout_data->now_playing_progress = progress;
+
+ mp_retvm_if(playing_pannel == NULL, NULL, "now playing view is NULL");
+
+ edje_object_signal_callback_add(_EDJ(playing_pannel), SIGNAL_NOW_PLAYING_CLICKED, "*",
+ _mp_view_layout_now_playing_cb, layout_data);
+
+ evas_object_show(playing_pannel);
+
+ return playing_pannel;
+}
+
+static void
+_mp_widget_gl_drag_cb(void *data, Evas_Object * obj, void *event_info)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+
+ if(layout_data->rename_git)
+ {
+ mp_playlist_view_rename_done_cb(layout_data, NULL, NULL);
+ return;
+ }
+}
+
+static Evas_Object *
+_mp_view_layout_create_layout(Evas_Object * parent, view_data_t * view_data, mp_layout_data_t * layout_data,
+ mp_view_mode_t view_mode)
+{
+ Evas_Object *layout = NULL;
+ MP_CHECK_NULL(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ if (view_mode == MP_VIEW_MODE_SEARCH)
+ {
+ layout = elm_layout_add(parent);
+ mp_retvm_if(layout == NULL, NULL, "layout is NULL");
+ elm_layout_file_set(layout, EDJ_NAME, "main_layout_with_searchbar");
+
+ layout_data->genlist = mp_widget_genlist_create(layout_data->ad, layout, false);
+ evas_object_data_set(layout_data->genlist, "layout_data", layout_data);
+
+ elm_win_conformant_set(view_data->ad->win_main, EINA_TRUE);
+
+ Evas_Object *box = elm_box_add(layout);
+ evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(box);
+ layout_data->box = box;
+
+ elm_box_pack_end(box, layout_data->genlist);
+
+ elm_object_part_content_set(layout, "list_content", box);
+
+ Evas_Object *search_bar = mp_search_create_new(layout,
+ mp_view_layout_search_changed_cb, layout_data,
+ mp_common_back_button_cb, view_data);
+ elm_object_part_content_set(layout, "search_bar", search_bar);
+ evas_object_show(search_bar);
+ layout_data->search_bar = search_bar;
+
+ }
+ else
+ {
+ layout = elm_layout_add(parent);
+ mp_retvm_if(layout == NULL, NULL, "layout is NULL");
+ elm_layout_file_set(layout, EDJ_NAME, "main_layout");
+
+ layout_data->genlist = mp_widget_genlist_create(layout_data->ad, layout, true);
+ evas_object_data_set(layout_data->genlist, "layout_data", layout_data);
+
+ elm_win_conformant_set(view_data->ad->win_main, EINA_TRUE);
+ Evas_Object *conformant = elm_conformant_add(view_data->navibar);
+ elm_object_style_set(conformant, "internal_layout");
+ evas_object_size_hint_weight_set(conformant, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+ Evas_Object *box = elm_box_add(layout);
+ evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+ evas_object_show(box);
+ layout_data->box = box;
+
+ elm_box_pack_end(box, layout_data->genlist);
+ elm_object_content_set(conformant, box);
+
+ elm_object_part_content_set(layout, "list_content", conformant);
+
+ layout_data->now_playing = _mp_view_layout_create_now_playing(layout, layout_data);
+ elm_object_part_content_set(layout, "now_playing", layout_data->now_playing);
+ }
+ evas_object_event_callback_add(layout_data->genlist, EVAS_CALLBACK_FREE, _mp_view_layout_genlist_del_cb,
+ layout_data);
+ evas_object_smart_callback_add(layout_data->genlist, "drag,start,up", _mp_widget_gl_drag_cb, layout_data);
+ evas_object_smart_callback_add(layout_data->genlist, "drag,start,down", _mp_widget_gl_drag_cb, layout_data);
+
+ return layout;
+}
+
+Evas_Object *
+mp_view_layout_create(Evas_Object * parent, view_data_t * view_data, mp_view_mode_t view_mode)
+{
+ startfunc;
+ MP_CHECK_NULL(view_data);
+ MP_CHECK_VIEW_DATA(view_data);
+ mp_layout_data_t *layout_data = calloc(1, sizeof(mp_layout_data_t));
+ MP_CHECK_NULL(layout_data);
+ MP_SET_LAYOUT_DATA_MAGIC(layout_data);
+
+ layout_data->ad = view_data->ad;
+ layout_data->navibar = parent;
+
+ Evas_Object *layout = _mp_view_layout_create_layout(parent, view_data, layout_data, view_mode);
+
+ layout_data->layout = layout;
+ layout_data->view_data = view_data;
+ layout_data->view_mode = view_mode;
+ layout_data->playlist_id = -1;
+
+ evas_object_show(layout);
+
+ evas_object_data_set(layout, "layout_data", layout_data);
+
+ endfunc;
+ return layout;
+}
+
+void
+mp_view_layout_set_layout_data(Evas_Object * view_layout, ...)
+{
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ va_list var_args;
+ int field;
+
+ va_start(var_args, view_layout);
+ do
+ {
+ field = va_arg(var_args, int);
+ if (field < 0)
+ {
+ break;
+ }
+
+ switch (field)
+ {
+ case MP_LAYOUT_CATEGORY_TYPE:
+ {
+ int val = va_arg((var_args), int);
+ layout_data->category = val;
+ DEBUG_TRACE("layout_data->category = %d", layout_data->category);
+ break;
+ }
+ case MP_LAYOUT_TRACK_LIST_TYPE:
+ {
+ int val = va_arg((var_args), int);
+
+ layout_data->track_type = val;
+ DEBUG_TRACE("layout_data->track_type = %d", layout_data->track_type);
+ break;
+ }
+ case MP_LAYOUT_GROUP_LIST_TYPE:
+ {
+ int val = va_arg((var_args), int);
+ layout_data->group_type = val;
+ DEBUG_TRACE("layout_data->group_type = %d", layout_data->group_type);
+ break;
+ }
+ case MP_LAYOUT_PLAYLIT_ID:
+ {
+ int val = va_arg((var_args), int);
+ layout_data->playlist_id = val;
+ DEBUG_TRACE("layout_data->playlist_id = %d", layout_data->playlist_id);
+ break;
+ }
+ case MP_LAYOUT_TYPE_STR:
+ {
+ char *val = va_arg((var_args), char *);
+ SAFE_FREE(layout_data->type_str);
+ layout_data->type_str = g_strdup(val);
+ DEBUG_TRACE("layout_data->type_str = %s", layout_data->type_str);
+
+ break;
+ }
+ case MP_LAYOUT_FILTER_STR:
+ {
+ char *val = va_arg((var_args), char *);
+ SAFE_FREE(layout_data->filter_str);
+ layout_data->filter_str = g_strdup(val);
+ DEBUG_TRACE("layout_data->filter_str = %s", layout_data->filter_str);
+
+ break;
+ }
+ case MP_LAYOUT_EDIT_MODE:
+ {
+ int val = va_arg((var_args), int);
+ layout_data->edit_mode = val;
+ DEBUG_TRACE("layout_data->edit_mode = %d", layout_data->edit_mode);
+ break;
+ }
+ case MP_LAYOUT_REORDER_MODE:
+ {
+ int val = va_arg((var_args), int);
+ layout_data->reorder = val;
+ DEBUG_TRACE("layout_data->reorder = %d", layout_data->reorder);
+ break;
+ }
+ case MP_LAYOUT_GENLIST_ITEMCLASS:
+ {
+ Elm_Genlist_Item_Class *itc = va_arg((var_args), Elm_Genlist_Item_Class *);
+ if (itc)
+ memcpy(&(layout_data->itc), itc, sizeof(Elm_Genlist_Item_Class));
+ break;
+ }
+ case MP_LAYOUT_GENLIST_AUTO_PLAYLIST_ITEMCLASS:
+ {
+ Elm_Genlist_Item_Class *itc = va_arg((var_args), Elm_Genlist_Item_Class *);
+ if (itc)
+ memcpy(&(layout_data->auto_playlist_item_class), itc,
+ sizeof(Elm_Genlist_Item_Class));
+ break;
+ }
+ case MP_LAYOUT_LIST_CB:
+ {
+ mp_genlist_cb_t *cb_func = va_arg((var_args), mp_genlist_cb_t *);
+ if (cb_func)
+ memcpy(&(layout_data->cb_func), cb_func, sizeof(layout_data->cb_func));
+ break;
+ }
+ default:
+ DEBUG_TRACE("Invalid arguments");
+ }
+
+ }
+ while (field);
+
+ va_end(var_args);
+
+}
+
+void
+mp_view_layout_destroy(Evas_Object * view_layout)
+{
+ mp_retm_if(!view_layout, "");
+ if (view_layout)
+ evas_object_del(view_layout);
+}
+
+void
+mp_view_layout_update(Evas_Object * view_layout)
+{
+ startfunc;
+ MP_CHECK(view_layout);
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_retm_if(!layout_data, "layout_data is null!!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ {
+ if (layout_data->view_mode != MP_VIEW_MODE_SEARCH) {
+ if (layout_data->playlist_id < 0
+ && MP_LAYOUT_TRACK_LIST == layout_data->category
+ && AUDIO_SVC_TRACK_BY_ARTIST == layout_data->track_type) {
+ _mp_view_layout_load_aa_list_item(view_layout);
+ } else {
+ _mp_view_layout_load_list_item(view_layout);
+ }
+ }
+ else
+ _mp_view_layout_load_search_list_item(view_layout);
+ DEBUG_TRACE("category: %d, track_type: %d, group_type: %d", layout_data->category,
+ layout_data->track_type, layout_data->group_type);
+
+ if (layout_data->now_playing)
+ {
+ if (layout_data->ad->show_now_playing)
+ {
+ if (!layout_data->ad->b_add_tracks && !layout_data->edit_mode)
+ {
+ mp_view_layout_show_now_playing(view_layout);
+ mp_view_layout_set_now_playing_info(view_layout);
+ }
+ else
+ mp_view_layout_hide_now_playing(view_layout);
+ }
+ else
+ {
+ mp_view_layout_hide_now_playing(view_layout);
+ }
+
+ }
+ }
+
+ if (view_layout == mp_view_manager_get_last_view_layout(layout_data->ad))
+ {
+ mp_view_layout_progress_timer_thaw(view_layout);
+ mp_common_set_title_button_sensitivity(layout_data, layout_data->checked_count);
+ }
+
+ endfunc;
+}
+
+void
+mp_view_layout_clear(Evas_Object * view_layout)
+{
+ mp_retm_if(!view_layout, "");
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_retm_if(!layout_data, "");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ Elm_Object_Item *item = elm_genlist_first_item_get(layout_data->genlist);
+ if (item)
+ elm_genlist_item_bring_in(item, ELM_GENLIST_ITEM_SCROLLTO_IN);
+
+ elm_genlist_clear(layout_data->genlist);
+ SAFE_FREE(layout_data->filter_str);
+ mp_search_text_set(layout_data->search_bar, "");
+
+ if (layout_data->progress_timer)
+ ecore_timer_freeze(layout_data->progress_timer);
+ mp_view_layout_set_edit_mode(layout_data, false);
+
+}
+
+static void
+_mp_view_layout_set_progress_pos(void *data)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK(layout_data);
+ MP_CHECK(layout_data->ad);
+
+ if(!layout_data->ad->prohibit_aul_relaunch)
+ WARN_TRACE("Check here.. progress timer should be freezed..");
+
+ double pos = layout_data->ad->music_pos;
+ double duration = layout_data->ad->music_length;
+ double value = 0.0;
+
+ if (duration > 0.0)
+ value = pos / duration;
+
+ elm_progressbar_value_set(layout_data->now_playing_progress, value);
+}
+
+
+static Eina_Bool
+_mp_view_layout_progress_timer_cb(void *data)
+{
+ mp_layout_data_t *layout_data = (mp_layout_data_t *) data;
+ MP_CHECK_FALSE(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ MP_CHECK_FALSE(layout_data->ad);
+
+ layout_data->ad->music_pos = mp_player_mgr_get_position();
+ layout_data->ad->music_length = mp_player_mgr_get_duration();
+
+ _mp_view_layout_set_progress_pos(data);
+ return ECORE_CALLBACK_RENEW;
+}
+
+void
+mp_view_layout_show_now_playing(Evas_Object * view_layout)
+{
+ mp_retm_if(!view_layout, "view_layout is null!!");
+
+ edje_object_signal_emit(_EDJ(view_layout), "SHOW_NOW_PLAING", "music_app");
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK(layout_data->now_playing_progress);
+
+ _mp_view_layout_set_progress_pos(layout_data);
+
+ if (!layout_data->progress_timer)
+ layout_data->progress_timer = ecore_timer_add(0.5, _mp_view_layout_progress_timer_cb, layout_data);
+
+ MP_CHECK(layout_data->ad);
+ if(layout_data->ad->player_state != PLAY_STATE_PLAYING)
+ ecore_timer_freeze(layout_data->progress_timer);
+
+ _mp_view_layout_update_icon(view_layout);
+
+}
+
+void
+mp_view_layout_hide_now_playing(Evas_Object * view_layout)
+{
+ mp_retm_if(!view_layout, "view_layout is null!!");
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if (layout_data->progress_timer)
+ {
+ ecore_timer_del(layout_data->progress_timer);
+ layout_data->progress_timer = NULL;
+ }
+
+ edje_object_signal_emit(_EDJ(view_layout), "HIDE_NOW_PLAING", "music_app");
+}
+
+void
+mp_view_layout_progress_timer_thaw(Evas_Object * view_layout)
+{
+ mp_retm_if(!view_layout, "view_layout is null!!");
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ MP_CHECK(layout_data->ad);
+
+ if (layout_data->progress_timer && layout_data->ad->player_state == PLAY_STATE_PLAYING)
+ ecore_timer_thaw(layout_data->progress_timer);
+
+ _mp_view_layout_set_progress_pos(layout_data);
+ _mp_view_layout_update_icon(view_layout);
+}
+
+void
+mp_view_layout_progress_timer_freeze(Evas_Object * view_layout)
+{
+ mp_retm_if(!view_layout, "view_layout is null!!");
+
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ MP_CHECK(layout_data);
+ MP_CHECK_LAYOUT_DATA(layout_data);
+
+ if (layout_data->progress_timer)
+ ecore_timer_freeze(layout_data->progress_timer);
+ _mp_view_layout_set_progress_pos(layout_data);
+ _mp_view_layout_update_icon(view_layout);
+}
+
+void
+mp_view_layout_set_now_playing_info(Evas_Object * view_layout)
+{
+ mp_retm_if(!view_layout, "view_layout is null!!");
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_retm_if(!layout_data, "Layout data is null !!!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ mp_retm_if(!layout_data->ad, "layout_data->ad is null !!!!");
+ MP_CHECK(layout_data->now_playing);
+ MP_CHECK(layout_data->now_playing_icon);
+
+ music_list_item *current_item = mp_play_list_get_current_item(layout_data->ad->playing_list);
+ MP_CHECK(current_item);
+
+
+ if (!strlen(current_item->albumart) || !mp_util_is_image_valid(layout_data->ad->evas, current_item->albumart))
+ elm_bg_file_set(layout_data->now_playing_icon, DEFAULT_THUMBNAIL, NULL);
+ else
+ elm_bg_file_set(layout_data->now_playing_icon, current_item->albumart, NULL);
+
+ char *label =
+ g_strdup_printf("%s / %s",
+ (strlen(current_item->title) != 0 ? current_item->title : GET_SYS_STR("IDS_COM_BODY_UNKNOWN")),
+ (strlen(current_item->artist) ? current_item->artist : GET_SYS_STR("IDS_COM_BODY_UNKNOWN")));
+
+ edje_object_part_text_set(_EDJ(layout_data->now_playing), "now_playing_label", label);
+ IF_FREE(label);
+
+}
+
+static void
+_mp_view_layout_update_icon(Evas_Object * view_layout)
+{
+ startfunc;
+ mp_retm_if(!view_layout, "view_layout is null!!");
+ mp_layout_data_t *layout_data = evas_object_data_get(view_layout, "layout_data");
+ mp_retm_if(!layout_data, "Layout data is null !!!!");
+ MP_CHECK_LAYOUT_DATA(layout_data);
+ mp_retm_if(!layout_data->ad, "layout_data->ad is null !!!!");
+ MP_CHECK(layout_data->now_playing);
+
+ if(layout_data->ad->player_state != PLAY_STATE_PLAYING)
+ edje_object_signal_emit(_EDJ(layout_data->now_playing), "pause", "playing_icon");
+ else
+ edje_object_signal_emit(_EDJ(layout_data->now_playing), "play", "playing_icon");
+}
+
+void
+mp_view_layout_reset_select_all(mp_layout_data_t * layout_data)
+{
+ MP_CHECK(layout_data);
+ MP_CHECK(layout_data->select_all_checkbox);
+
+ layout_data->checked_count = 0;
+ layout_data->select_all_checked = 0;
+ elm_check_state_set(layout_data->select_all_checkbox, false);
+}
+
+void
+mp_view_layout_set_edit_mode(mp_layout_data_t * layout_data, bool edit_mode)
+{
+ startfunc;
+ MP_CHECK(layout_data);
+ if (edit_mode)
+ {
+ if (!layout_data->select_all_layout)
+ {
+ _mp_view_layout_create_select_all(layout_data);
+ }
+ else
+ {
+ if (layout_data->select_all_checkbox)
+ elm_check_state_set(layout_data->select_all_checkbox, false);
+ }
+
+ Elm_Object_Item *sweeped_item = (Elm_Object_Item *) elm_genlist_decorated_item_get(layout_data->genlist);
+ if (sweeped_item)
+ {
+ elm_genlist_item_decorate_mode_set(sweeped_item, "slide", EINA_FALSE);
+ elm_genlist_item_update(sweeped_item);
+ }
+
+ if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ {
+ int i = 0;
+ Elm_Object_Item *item = elm_genlist_first_item_get(layout_data->genlist);
+ for (i = 0; i < layout_data->default_playlist_count; i++)
+ {
+ Elm_Object_Item *next = NULL;
+ next = elm_genlist_item_next_get(item);
+ elm_object_item_disabled_set(item, EINA_TRUE);
+ item = next;
+ }
+ }
+ if (layout_data->reorder)
+ elm_genlist_reorder_mode_set(layout_data->genlist, EINA_TRUE);
+ elm_genlist_decorate_mode_set(layout_data->genlist, EINA_TRUE);
+
+ elm_genlist_select_mode_set(layout_data->genlist, ELM_OBJECT_SELECT_MODE_ALWAYS);
+ }
+ else
+ {
+ if (layout_data->select_all_layout)
+ {
+ evas_object_del(layout_data->select_all_layout);
+ layout_data->select_all_layout = NULL;
+ }
+ elm_genlist_decorate_mode_set(layout_data->genlist, EINA_FALSE);
+ layout_data->edit_mode = 0;
+ elm_genlist_select_mode_set(layout_data->genlist, ELM_OBJECT_SELECT_MODE_DEFAULT);
+
+ if (elm_genlist_reorder_mode_get(layout_data->genlist))
+ {
+ elm_genlist_decorate_mode_set(layout_data->genlist, EINA_FALSE);
+ }
+ layout_data->reorder = 0;
+ if (layout_data->checked_count)
+ {
+ Elm_Object_Item *item = elm_genlist_first_item_get(layout_data->genlist);
+ while (item)
+ {
+ mp_genlist_item_data_t *item_data =
+ (mp_genlist_item_data_t *) elm_object_item_data_get(item);
+ MP_CHECK(item_data);
+ item_data->checked = EINA_FALSE;
+ item = elm_genlist_item_next_get(item);
+ }
+ layout_data->checked_count = 0;
+ }
+ layout_data->selected_count = 0;
+ layout_data->select_all_checked = false;
+
+ mp_view_manager_set_title_and_buttons(layout_data->view_data, layout_data->navibar_title,
+ layout_data->callback_data);
+ mp_common_set_title_button_sensitivity(layout_data, 0);
+
+ if (layout_data->category == MP_LAYOUT_PLAYLIST_LIST)
+ {
+ int i = 0;
+ Elm_Object_Item *item = elm_genlist_first_item_get(layout_data->genlist);
+ for (i = 0; i < layout_data->default_playlist_count; i++)
+ {
+ Elm_Object_Item *next = NULL;
+ next = elm_genlist_item_next_get(item);
+ elm_object_item_disabled_set(item, EINA_FALSE);
+ item = next;
+ }
+ }
+
+ }
+
+ endfunc;
+}
+
diff --git a/target_images/music_player/01_controlbar_icon_albums.png b/target_images/music_player/01_controlbar_icon_albums.png
new file mode 100755
index 0000000..9d22c0c
--- /dev/null
+++ b/target_images/music_player/01_controlbar_icon_albums.png
Binary files differ
diff --git a/target_images/music_player/01_controlbar_icon_artist.png b/target_images/music_player/01_controlbar_icon_artist.png
new file mode 100755
index 0000000..cdfc4da
--- /dev/null
+++ b/target_images/music_player/01_controlbar_icon_artist.png
Binary files differ
diff --git a/target_images/music_player/01_controlbar_icon_composer.png b/target_images/music_player/01_controlbar_icon_composer.png
new file mode 100755
index 0000000..0b6a8c6
--- /dev/null
+++ b/target_images/music_player/01_controlbar_icon_composer.png
Binary files differ
diff --git a/target_images/music_player/01_controlbar_icon_genre.png b/target_images/music_player/01_controlbar_icon_genre.png
new file mode 100755
index 0000000..cc3ca3c
--- /dev/null
+++ b/target_images/music_player/01_controlbar_icon_genre.png
Binary files differ
diff --git a/target_images/music_player/01_controlbar_icon_music_albums.png b/target_images/music_player/01_controlbar_icon_music_albums.png
new file mode 100755
index 0000000..3b8bb7d
--- /dev/null
+++ b/target_images/music_player/01_controlbar_icon_music_albums.png
Binary files differ
diff --git a/target_images/music_player/01_controlbar_icon_playlists.png b/target_images/music_player/01_controlbar_icon_playlists.png
new file mode 100755
index 0000000..87d9f59
--- /dev/null
+++ b/target_images/music_player/01_controlbar_icon_playlists.png
Binary files differ
diff --git a/target_images/music_player/01_controlbar_icon_songs.png b/target_images/music_player/01_controlbar_icon_songs.png
new file mode 100644
index 0000000..b47daf3
--- /dev/null
+++ b/target_images/music_player/01_controlbar_icon_songs.png
Binary files differ
diff --git a/target_images/music_player/01_controlbar_icon_year.png b/target_images/music_player/01_controlbar_icon_year.png
new file mode 100755
index 0000000..8d2268e
--- /dev/null
+++ b/target_images/music_player/01_controlbar_icon_year.png
Binary files differ
diff --git a/target_images/music_player/34_mostplayed.png b/target_images/music_player/34_mostplayed.png
new file mode 100755
index 0000000..8baf524
--- /dev/null
+++ b/target_images/music_player/34_mostplayed.png
Binary files differ
diff --git a/target_images/music_player/34_player_list_thum_noitems.png b/target_images/music_player/34_player_list_thum_noitems.png
new file mode 100755
index 0000000..8359b06
--- /dev/null
+++ b/target_images/music_player/34_player_list_thum_noitems.png
Binary files differ
diff --git a/target_images/music_player/34_quicklist.png b/target_images/music_player/34_quicklist.png
new file mode 100755
index 0000000..133d075
--- /dev/null
+++ b/target_images/music_player/34_quicklist.png
Binary files differ
diff --git a/target_images/music_player/34_rating_00.png b/target_images/music_player/34_rating_00.png
new file mode 100755
index 0000000..d109fa9
--- /dev/null
+++ b/target_images/music_player/34_rating_00.png
Binary files differ
diff --git a/target_images/music_player/34_rating_01.png b/target_images/music_player/34_rating_01.png
new file mode 100755
index 0000000..a1b134e
--- /dev/null
+++ b/target_images/music_player/34_rating_01.png
Binary files differ
diff --git a/target_images/music_player/34_rating_02.png b/target_images/music_player/34_rating_02.png
new file mode 100755
index 0000000..c1673a7
--- /dev/null
+++ b/target_images/music_player/34_rating_02.png
Binary files differ
diff --git a/target_images/music_player/34_rating_03.png b/target_images/music_player/34_rating_03.png
new file mode 100755
index 0000000..4dcfdc7
--- /dev/null
+++ b/target_images/music_player/34_rating_03.png
Binary files differ
diff --git a/target_images/music_player/34_rating_04.png b/target_images/music_player/34_rating_04.png
new file mode 100755
index 0000000..7b15c95
--- /dev/null
+++ b/target_images/music_player/34_rating_04.png
Binary files differ
diff --git a/target_images/music_player/34_rating_05.png b/target_images/music_player/34_rating_05.png
new file mode 100755
index 0000000..cb37a47
--- /dev/null
+++ b/target_images/music_player/34_rating_05.png
Binary files differ
diff --git a/target_images/music_player/34_recentlyadded.png b/target_images/music_player/34_recentlyadded.png
new file mode 100755
index 0000000..341fdf3
--- /dev/null
+++ b/target_images/music_player/34_recentlyadded.png
Binary files differ
diff --git a/target_images/music_player/34_recentlyplayed.png b/target_images/music_player/34_recentlyplayed.png
new file mode 100755
index 0000000..39a274b
--- /dev/null
+++ b/target_images/music_player/34_recentlyplayed.png
Binary files differ
diff --git a/target_images/music_player/34_thumb_07.png b/target_images/music_player/34_thumb_07.png
new file mode 100755
index 0000000..75fbaf7
--- /dev/null
+++ b/target_images/music_player/34_thumb_07.png
Binary files differ
diff --git a/target_images/music_player/T02_Video_play.png b/target_images/music_player/T02_Video_play.png
new file mode 100755
index 0000000..d302435
--- /dev/null
+++ b/target_images/music_player/T02_Video_play.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_add.png b/target_images/music_player/T02_controlbar_icon_add.png
new file mode 100755
index 0000000..e60bfb9
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_add.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_add_to_playlist.png b/target_images/music_player/T02_controlbar_icon_add_to_playlist.png
new file mode 100755
index 0000000..446f330
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_add_to_playlist.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_artist.png b/target_images/music_player/T02_controlbar_icon_artist.png
new file mode 100755
index 0000000..5e42d85
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_artist.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_cancel.png b/target_images/music_player/T02_controlbar_icon_cancel.png
new file mode 100755
index 0000000..8d12808
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_cancel.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_delete.png b/target_images/music_player/T02_controlbar_icon_delete.png
new file mode 100755
index 0000000..c13897d
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_delete.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_edit.png b/target_images/music_player/T02_controlbar_icon_edit.png
new file mode 100755
index 0000000..ed90f86
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_edit.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_playlists.png b/target_images/music_player/T02_controlbar_icon_playlists.png
new file mode 100755
index 0000000..7d1d467
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_playlists.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_search.png b/target_images/music_player/T02_controlbar_icon_search.png
new file mode 100755
index 0000000..e748043
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_search.png
Binary files differ
diff --git a/target_images/music_player/T02_controlbar_icon_songs.png b/target_images/music_player/T02_controlbar_icon_songs.png
new file mode 100755
index 0000000..b2a2ebf
--- /dev/null
+++ b/target_images/music_player/T02_controlbar_icon_songs.png
Binary files differ
diff --git a/target_images/music_player/T02_icon_soundPath.png b/target_images/music_player/T02_icon_soundPath.png
new file mode 100755
index 0000000..79e0cda
--- /dev/null
+++ b/target_images/music_player/T02_icon_soundPath.png
Binary files differ