From d14111b6d5b7914cc0742d1d5dcc415cd95c7bb1 Mon Sep 17 00:00:00 2001 From: Kim Kibum Date: Fri, 8 Jun 2012 14:54:17 +0900 Subject: [PATCH] apply FSL(Flora Software License) --- CMakeLists.txt | 99 ++ LICENSE | 75 ++ NOTICE | 1 + debian/changelog | 7 + debian/compat | 1 + debian/control | 31 + debian/copyright | 0 debian/libug-myfile-efl.install.in | 3 + debian/rules | 127 ++ icons/01_myfile_add_icon.png | Bin 0 -> 256 bytes icons/06_myfiles_list_folder.png | Bin 0 -> 1729 bytes icons/34_control_pause.png | Bin 0 -> 3013 bytes icons/34_control_play.png | Bin 0 -> 3032 bytes icons/47_myfiles_icon_excel.png | Bin 0 -> 5986 bytes icons/47_myfiles_icon_folder.png | Bin 0 -> 4067 bytes icons/47_myfiles_icon_folder_created.png | Bin 0 -> 4170 bytes icons/47_myfiles_icon_folder_sinced.png | Bin 0 -> 4525 bytes icons/47_myfiles_icon_html.png | Bin 0 -> 6416 bytes icons/47_myfiles_icon_music.png | Bin 0 -> 7531 bytes icons/47_myfiles_icon_pause_focus.png | Bin 0 -> 2908 bytes icons/47_myfiles_icon_pdf.png | Bin 0 -> 4794 bytes icons/47_myfiles_icon_play_focus.png | Bin 0 -> 3179 bytes icons/47_myfiles_icon_ppt.png | Bin 0 -> 5417 bytes icons/47_myfiles_icon_ring_tone.png | Bin 0 -> 8576 bytes icons/47_myfiles_icon_rss.png | Bin 0 -> 5082 bytes icons/47_myfiles_icon_swf.png | Bin 0 -> 5653 bytes icons/47_myfiles_icon_text.png | Bin 0 -> 4023 bytes icons/47_myfiles_icon_upper_folder_black_theme.png | Bin 0 -> 3197 bytes icons/47_myfiles_icon_upper_folder_focus.png | Bin 0 -> 3134 bytes icons/47_myfiles_icon_upper_folder_white_theme.png | Bin 0 -> 348 bytes icons/47_myfiles_icon_video.png | Bin 0 -> 8062 bytes icons/47_myfiles_icon_word.png | Bin 0 -> 5865 bytes icons/60_myfiles_file_amr.png | Bin 0 -> 2022 bytes icons/60_myfiles_file_etc.png | Bin 0 -> 1292 bytes icons/60_myfiles_icon_images.png | Bin 0 -> 1454 bytes icons/60_myfiles_icon_java.png | Bin 0 -> 3005 bytes icons/60_myfiles_icon_music_default.png | Bin 0 -> 1770 bytes icons/60_myfiles_icon_vText.png | Bin 0 -> 1350 bytes icons/60_myfiles_icon_vcalender.png | Bin 0 -> 1706 bytes icons/60_myfiles_icon_vcard.png | Bin 0 -> 1606 bytes icons/60_myfiles_memorycard.png | Bin 0 -> 3006 bytes icons/60_myfiles_memorycard_sub.png | Bin 0 -> 691 bytes icons/60_myfiles_phone.png | Bin 0 -> 3028 bytes icons/U01_icon_USB.png | Bin 0 -> 3891 bytes icons/myfile_icon_add.png | Bin 0 -> 2999 bytes packaging/ug-myfile-efl.spec | 47 + po/CMakeLists.txt | 24 + po/POTFILES.in | 17 + po/de.po | 120 ++ po/de_DE.po | 158 +++ po/el.po | 120 ++ po/el_GR.po | 159 +++ po/en.po | 159 +++ po/en_GB.po | 46 + po/en_US.po | 94 ++ po/es.po | 120 ++ po/es_ES.po | 158 +++ po/fr.po | 120 ++ po/fr_FR.po | 158 +++ po/it.po | 120 ++ po/it_IT.po | 158 +++ po/ja.po | 137 ++ po/ja_JP.po | 159 +++ po/ko.po | 155 +++ po/ko_KR.po | 158 +++ po/nl.po | 120 ++ po/nl_NL.po | 158 +++ po/pt.po | 120 ++ po/pt_PT.po | 158 +++ po/ru.po | 120 ++ po/ru_RU.po | 158 +++ po/tk.po | 120 ++ po/tr_TR.po | 159 +++ po/ug-myfile-efl.pot | 94 ++ po/update-po.sh | 57 + po/zh_CN.po | 158 +++ po/zh_HK.po | 158 +++ po/zh_TW.po | 158 +++ src/common/file-system/mf-ug-file-attr.c | 1072 +++++++++++++++ src/common/file-system/mf-ug-fs-oper.c | 381 ++++++ src/common/mf-ug-cb.c | 1052 +++++++++++++++ src/common/mf-ug-fm-svc-wapper.c | 547 ++++++++ src/common/mf-ug-inotify-handle.c | 348 +++++ src/common/mf-ug-list-play.c | 989 ++++++++++++++ src/common/mf-ug-util.c | 729 +++++++++++ src/include/mf-ug-cb.h | 50 + src/include/mf-ug-conf.h | 79 ++ src/include/mf-ug-dlog.h | 84 ++ src/include/mf-ug-fm-svc-wrapper.h | 41 + src/include/mf-ug-fs-util.h | 257 ++++ src/include/mf-ug-inotify-handle.h | 44 + src/include/mf-ug-main.h | 147 +++ src/include/mf-ug-resource.h | 41 + src/include/mf-ug-util.h | 201 +++ src/include/mf-ug-winset.h | 129 ++ src/mf-ug-main.c | 1137 ++++++++++++++++ src/widget/mf-ug-ctrl-bar.c | 277 ++++ src/widget/mf-ug-genlist.c | 1365 ++++++++++++++++++++ src/widget/mf-ug-navi-bar.c | 794 ++++++++++++ src/widget/mf-ug-popup.c | 95 ++ src/widget/mf-ug-tab-bar.c | 251 ++++ ug_navibar_layout.edc | 448 +++++++ 102 files changed, 15027 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100755 NOTICE create mode 100644 debian/changelog create mode 100644 debian/compat create mode 100644 debian/control create mode 100644 debian/copyright create mode 100644 debian/libug-myfile-efl.install.in create mode 100755 debian/rules create mode 100644 icons/01_myfile_add_icon.png create mode 100644 icons/06_myfiles_list_folder.png create mode 100644 icons/34_control_pause.png create mode 100644 icons/34_control_play.png create mode 100644 icons/47_myfiles_icon_excel.png create mode 100644 icons/47_myfiles_icon_folder.png create mode 100644 icons/47_myfiles_icon_folder_created.png create mode 100644 icons/47_myfiles_icon_folder_sinced.png create mode 100644 icons/47_myfiles_icon_html.png create mode 100644 icons/47_myfiles_icon_music.png create mode 100644 icons/47_myfiles_icon_pause_focus.png create mode 100644 icons/47_myfiles_icon_pdf.png create mode 100644 icons/47_myfiles_icon_play_focus.png create mode 100644 icons/47_myfiles_icon_ppt.png create mode 100644 icons/47_myfiles_icon_ring_tone.png create mode 100644 icons/47_myfiles_icon_rss.png create mode 100644 icons/47_myfiles_icon_swf.png create mode 100644 icons/47_myfiles_icon_text.png create mode 100644 icons/47_myfiles_icon_upper_folder_black_theme.png create mode 100644 icons/47_myfiles_icon_upper_folder_focus.png create mode 100644 icons/47_myfiles_icon_upper_folder_white_theme.png create mode 100644 icons/47_myfiles_icon_video.png create mode 100644 icons/47_myfiles_icon_word.png create mode 100644 icons/60_myfiles_file_amr.png create mode 100644 icons/60_myfiles_file_etc.png create mode 100644 icons/60_myfiles_icon_images.png create mode 100644 icons/60_myfiles_icon_java.png create mode 100644 icons/60_myfiles_icon_music_default.png create mode 100644 icons/60_myfiles_icon_vText.png create mode 100644 icons/60_myfiles_icon_vcalender.png create mode 100644 icons/60_myfiles_icon_vcard.png create mode 100644 icons/60_myfiles_memorycard.png create mode 100644 icons/60_myfiles_memorycard_sub.png create mode 100644 icons/60_myfiles_phone.png create mode 100644 icons/U01_icon_USB.png create mode 100644 icons/myfile_icon_add.png create mode 100644 packaging/ug-myfile-efl.spec create mode 100644 po/CMakeLists.txt create mode 100644 po/POTFILES.in create mode 100644 po/de.po create mode 100644 po/de_DE.po create mode 100644 po/el.po create mode 100644 po/el_GR.po create mode 100644 po/en.po create mode 100644 po/en_GB.po create mode 100644 po/en_US.po create mode 100644 po/es.po create mode 100644 po/es_ES.po create mode 100644 po/fr.po create mode 100644 po/fr_FR.po create mode 100644 po/it.po create mode 100644 po/it_IT.po create mode 100644 po/ja.po create mode 100644 po/ja_JP.po create mode 100644 po/ko.po create mode 100644 po/ko_KR.po create mode 100644 po/nl.po create mode 100644 po/nl_NL.po create mode 100644 po/pt.po create mode 100644 po/pt_PT.po create mode 100644 po/ru.po create mode 100644 po/ru_RU.po create mode 100644 po/tk.po create mode 100644 po/tr_TR.po create mode 100644 po/ug-myfile-efl.pot create mode 100644 po/update-po.sh create mode 100644 po/zh_CN.po create mode 100644 po/zh_HK.po create mode 100644 po/zh_TW.po create mode 100755 src/common/file-system/mf-ug-file-attr.c create mode 100755 src/common/file-system/mf-ug-fs-oper.c create mode 100755 src/common/mf-ug-cb.c create mode 100755 src/common/mf-ug-fm-svc-wapper.c create mode 100755 src/common/mf-ug-inotify-handle.c create mode 100755 src/common/mf-ug-list-play.c create mode 100755 src/common/mf-ug-util.c create mode 100755 src/include/mf-ug-cb.h create mode 100755 src/include/mf-ug-conf.h create mode 100755 src/include/mf-ug-dlog.h create mode 100755 src/include/mf-ug-fm-svc-wrapper.h create mode 100755 src/include/mf-ug-fs-util.h create mode 100755 src/include/mf-ug-inotify-handle.h create mode 100755 src/include/mf-ug-main.h create mode 100755 src/include/mf-ug-resource.h create mode 100755 src/include/mf-ug-util.h create mode 100755 src/include/mf-ug-winset.h create mode 100755 src/mf-ug-main.c create mode 100755 src/widget/mf-ug-ctrl-bar.c create mode 100755 src/widget/mf-ug-genlist.c create mode 100755 src/widget/mf-ug-navi-bar.c create mode 100755 src/widget/mf-ug-popup.c create mode 100755 src/widget/mf-ug-tab-bar.c create mode 100755 ug_navibar_layout.edc diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..136fb81 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,99 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(ug-myfile-efl C) + + +#################################### +########## SET Directory ########### +#################################### +SET(MFUGNAME ug-myfile-efl) +SET(UGINCLUDE ${CMAKE_CURRENT_SOURCE_DIR}/src/include) + +SET(UG-SRC-DIR ${CMAKE_CURRENT_SOURCE_DIR}/src) +SET(UG-UTILITY-DIR ${UG-SRC-DIR}/common) +SET(UG-FS-DIR ${UG-UTILITY-DIR}/file-system) +SET(UG-WIDGET-DIR ${UG-SRC-DIR}/widget) + +SET(PREFIX "/opt/ug") +SET(LIBDIR "${PREFIX}/lib") +SET(RESDIR "${PREFIX}/res") +SET(LOCALEDIR "${RESDIR}/locale") +SET(IMAGEDIR "${RESDIR}/images/${MFUGNAME}") +SET(EDJDIR "${RESDIR}/edje/${MFUGNAME}") + + +SET(SRCS + ${UG-SRC-DIR}/mf-ug-main.c + ${UG-UTILITY-DIR}/mf-ug-util.c + ${UG-UTILITY-DIR}/mf-ug-cb.c + ${UG-UTILITY-DIR}/mf-ug-fm-svc-wapper.c + ${UG-UTILITY-DIR}/mf-ug-inotify-handle.c + ${UG-UTILITY-DIR}/mf-ug-list-play.c +########### winset wrap ########## + ${UG-WIDGET-DIR}/mf-ug-navi-bar.c + ${UG-WIDGET-DIR}/mf-ug-genlist.c + ${UG-WIDGET-DIR}/mf-ug-popup.c + ${UG-WIDGET-DIR}/mf-ug-ctrl-bar.c + ${UG-WIDGET-DIR}/mf-ug-tab-bar.c +################ file system ######### + ${UG-FS-DIR}/mf-ug-file-attr.c + ${UG-FS-DIR}/mf-ug-fs-oper.c + ) + +INCLUDE_DIRECTORIES(${UGINCLUDE}) + +INCLUDE(FindPkgConfig) +pkg_check_modules(ug_pkgs REQUIRED +ecore-x ecore-evas +elementary +vconf +glib-2.0 +mm-common +mm-sound +mm-player +ui-gadget +libmedia-service +aul +dlog +) + +FOREACH(flag ${ug_pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS}") + +ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"") +ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{FACTORYFS}\"") + + +ADD_DEFINITIONS("-DLIST_PLAY_SUPPORT") +ADD_DEFINITIONS("-DUG_THUMB_REAL_TIME_UPDATE") +ADD_DEFINITIONS("-DUG_LAUNCH_AT_MASS_STORAGE_MODE") +ADD_DEFINITIONS("-DMF_UG_FEATURE_NEW_UX") + +ADD_LIBRARY(${MFUGNAME} SHARED ${SRCS}) +TARGET_LINK_LIBRARIES(${MFUGNAME} ${ug_pkgs_LDFLAGS} dl) + +INSTALL(TARGETS ${MFUGNAME} LIBRARY DESTINATION ${LIBDIR}) + + +# edje +ADD_CUSTOM_TARGET(ug_navibar_layout.edj + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR} + ${CMAKE_SOURCE_DIR}/ug_navibar_layout.edc + ${CMAKE_BINARY_DIR}/ug_navibar_layout.edj + DEPENDS ${CMAKE_SOURCE_DIR}/ug_navibar_layout.edc +) + +ADD_DEPENDENCIES(${PROJECT_NAME} ug_navibar_layout.edj) + +INSTALL(FILES ${CMAKE_BINARY_DIR}/ug_navibar_layout.edj DESTINATION ${EDJDIR}) + + +# images +INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/icons/ DESTINATION ${IMAGEDIR} FILES_MATCHING PATTERN "*.png" +PERMISSIONS OWNER_READ OWNER_WRITE OWNER_EXECUTE GROUP_READ GROUP_WRITE GROUP_EXECUTE WORLD_READ WORLD_WRITE WORLD_EXECUTE) + +# i18n +ADD_SUBDIRECTORY(po) + diff --git a/LICENSE b/LICENSE new file mode 100644 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/debian/changelog b/debian/changelog new file mode 100644 index 0000000..e57f0d9 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,7 @@ +ug-myfile-efl (0.0.1-62) unstable; urgency=low + + * inital version + * Git: pkgs/u/ug-myfile-efl + * Tag: ug-myfile-efl_0.0.1-62 + + -- Guangliang Wang Mon, 23 Apr 2012 20:34:18 +0800 diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100644 index 0000000..30ea80d --- /dev/null +++ b/debian/control @@ -0,0 +1,31 @@ +Source: ug-myfile-efl +Section: libs +Priority: extra +Maintainer: Aram Kim , Liu Ruichao , Guangliang Wang , Tang Feng , Hyungmin Kim +Uploaders: Liu RuiChao , Tang Feng , Guangliang Wang +Build-Depends: debhelper (>= 5), + libelm-dev, + libmm-player-dev, + libmm-sound-dev, + dlog-dev, + libui-gadget-dev, + libmedia-service-dev, + libslp-setting-dev, + libeina-dev, + libedbus-dev, + libdbus-glib-1-dev, + libdbus-1-dev, + libecore-dev, +Standards-Version: 0.1.0 + +Package: libug-myfile-efl +Section: libs +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: Myfile UI Gadget (EFL) + +Package: libug-myfile-efl-dbg +Section: debug +Architecture: any +Depends: ${misc:Depends}, libug-myfile-efl (= ${Source-Version}) +Description: Myfile UI Gadget(unstripped) \ No newline at end of file diff --git a/debian/copyright b/debian/copyright new file mode 100644 index 0000000..e69de29 diff --git a/debian/libug-myfile-efl.install.in b/debian/libug-myfile-efl.install.in new file mode 100644 index 0000000..cdb492b --- /dev/null +++ b/debian/libug-myfile-efl.install.in @@ -0,0 +1,3 @@ +/opt/ug/lib/* +/opt/ug/res/* + diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..a8c5062 --- /dev/null +++ b/debian/rules @@ -0,0 +1,127 @@ +#!/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 ?= /usr +DATADIR ?= /opt + +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,--hash-style=both -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#@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 po/CMakeFiles/ + rm -rf po/cmake_install.cmake + rm -rf po/Makefile + rm -rf *.so + rm -rf debian/*.install + rm -rf *.edj + + 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 + + +# 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=libug-myfile-efl-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/icons/01_myfile_add_icon.png b/icons/01_myfile_add_icon.png new file mode 100644 index 0000000000000000000000000000000000000000..290e2a5818d52f50718f1393da53c46b446f533b GIT binary patch literal 256 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 Hu0mjfn*p42 literal 0 HcmV?d00001 diff --git a/icons/34_control_play.png b/icons/34_control_play.png new file mode 100644 index 0000000000000000000000000000000000000000..e5d79282b84238be079dfeb0a3333e5a6e255b36 GIT binary patch literal 3032 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 UgbsD*djJ3c07*qoM6N<$g8H1>82|tP literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_folder_sinced.png b/icons/47_myfiles_icon_folder_sinced.png new file mode 100644 index 0000000000000000000000000000000000000000..80279436b757d98809af1cb606e0db6eb8ec3e5b GIT binary patch literal 4525 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 LNkvXXu0mjfg!+P$ literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_html.png b/icons/47_myfiles_icon_html.png new file mode 100644 index 0000000000000000000000000000000000000000..78646b468897d596c95c67a13d503a6b2bfc241b GIT binary patch literal 6416 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
    +l#=P`>76x!?m=c}XL;g@ zqpYs3^5vIb^-;0Z&ZCUSP^i#4K__YW+H4vYRt^9C!x~O&_7A}yj6i_n+AYmW#WLi> zzA?e!Da*kL&16=S&m@Gt^8m=-jfF>Cc06~%Z-6I*XEIvFvN57HoW-S*iRUwlciROI-H6ULfK_`|~uZdb3fQm$jIMw$dE zJ%sWQBCYUB0UFEIMMJZuQ5fRHP^uz;)LH zTq_H72$zPtM-EKUh%Nv5)pd&17_7lc2~vTOsZF;CVxev*S1hBEz*AtH$MFNx9N06S zZl^ofwffyIm%Enz9%3@I9v6#nk|@gX)X^EjjN7~|0XNwT@j9pU?=!4Eq32L!<3oM^3Nmkl^@!XYeVvl)&Znqjh#<>GviA8(Yo zU25PED3$)!xwMQhHWKmp%n_7ae46U@sR3*b#=yKlpGEIVQCvr@od99M z4?Jcc8)JMd$Dw@_l&Vd>ys*gSt3?3z&5d&G@HAt?A*1;WQ5Ybk0NY;qKEmIF1`N~- z+?@;hgMff2$`FMaW+q|RWS&|h%_Os-&rmLdlHv~8Z6f@g|GGzQ0(UcojUeD!31Mq< zbR-`#G90cG#)0i}b$1coxqH)rhfIQ-gV0J7dfnLF1nTi?+Y|l~d4Uv!-fFqKBW_zT z(SG*s`-2+!=D3wZ```y1Y zMq_PCdOArkMx&I%S=*`SD^FpprC2OsjGGwJOzWm141owYGB@s#2-k_j#oq0ifSYjWI|m*|TR4 zb8~a}zE7jk;Of<@%+Jr?QwX|#qWOFttu;$aOB9PmmX?-~Qc@@sXf~T{r`-!+4|GCA zDTVL*J=g8FY&J_ipT`)(!omV;YindO8HR?2wtZN0pd{G7*IsRF?E{@Dlv0w<=NTRz zrc$Y3tz~$4m_nhj>2KO3{LoCGy%}k(?YY-|=70U!|9;P}pJW`zOiWBLF)=}@R6bIxox611&>Ov_xvPeuD%b8q+U enZVDX{m%dcu_KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000t}Nkl}q z{ras{cR43N>UGbM)10N7wttYfQD{`-E%$t9xo4?1s><7WS>ERB9RTkDcn82c0N&Os z+wPD5;r{1$_o)hb%QAO(3K7LRNKq)-84`sQB8^T?H4HSTGeVhgxxre4FC#O1TljJP z8b1o;?VJ=6#u}WlokW^-SvIXIGd6Q`s5$O3djfGM;@BKXr905K%U|+#@NfR!e}3QX z1Nie^s`VvFk*FlEpnwAjiYA>hjwM%^I~rMbv^kTXz~*kJ z7++F`D?-}Hc&Ymof3ouEebFcW@&M?jpo&T@tR_X0HmqeS%Q@Ux% zTgV!A!DeRB74C?2c2S{?7*a5#62eHS`ik!hzCXF|3gwzoZ77-`x0a3ZDw+k~$cvr1 zK-EjTmcMAbg{*1s#@GXS!`+p&IN4dsk2U8x+*!)@H|FegG3_wcpcujk!cg%8!4H%$ zQ2apgy+qZk?_*hCsZ?SGzAvPz{yt-C3sRFX2CT8h8n-h5AOFRJyAnQ*#hm&5^jlex zf5HF;17aw6v9Y}l_Cj{iREZ*Nhqj5^hz8lsj97NGmM+b%TN#! zs)ABqJF|d6+ARR8L0T%i2IQ(BDxgwteyapAV9Z2=X5u{p8X*NmeC2CwO^yUWvW|y-n_Ufm@%fl zwO0id6@*06MAAUiNDxmHUk353M$O7n>)-<&n-xl`T|jr}0?Ai}`+QjGj)U zMP>76hX8ilB2a~xB0@&+5kW9UYyZ@QXe3G?YDhst8O4uc^5>$&<(T{_(R5lwPOHdS zHLM`IZkjIs5JaGjfMvqu#= zjT!b#A0(NGs|IE&q3D+Ix4T4zX3=J; za{xsUi4&VJ2(|`qWCCIb0N8CJm_S5GM8rz1AyKQUrf>!Or|w{Ne342j>}^6&6$+QL zG`%0J5cTS2w_JcU(fZgQ)?yZqphy*Y21lIlx#)tlAY6y`fc2ccyR-qWU*^g~4J;TNbdx z7;r7Q&6L97ZYyZ1YOM(%nSdxJ^VYo%0AMjpn>mcYhFil^Ue~BnRi;`^8bwAFe?v%S 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 Bd~W~% literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_pause_focus.png b/icons/47_myfiles_icon_pause_focus.png new file mode 100644 index 0000000000000000000000000000000000000000..fd1c6a2ff3d67a147a644e07b7d05cade28c2e8d GIT binary patch literal 2908 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 literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_pdf.png b/icons/47_myfiles_icon_pdf.png new file mode 100644 index 0000000000000000000000000000000000000000..2480d818341a660d16797b59ef59121484cf9aa0 GIT binary patch literal 4794 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 literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_rss.png b/icons/47_myfiles_icon_rss.png new file mode 100644 index 0000000000000000000000000000000000000000..1b566e2ab59eec384f6147f2e04cde4dfe790fe2 GIT binary patch literal 5082 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 literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_swf.png b/icons/47_myfiles_icon_swf.png new file mode 100644 index 0000000000000000000000000000000000000000..ee50e850dace5ea0321be9644dabd9f6b72edc45 GIT binary patch literal 5653 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 Y0CiVzhUYOQssI2007*qoM6N<$f^nA6RR910 literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_upper_folder_white_theme.png b/icons/47_myfiles_icon_upper_folder_white_theme.png new file mode 100644 index 0000000000000000000000000000000000000000..e3853c1353feaf736f3d21b03a0934c671ed101c GIT binary patch literal 348 zcmeAS@N?(olHy`uVBq!ia0vp^Mj*_=3?wxlRx|^tgaDrq*Z=?jo9e0q5s(1^vEe}w zE|6R>XC{!eHqir;j+Q3p&z&*X*8(a7azp(*t&Meo3?KrE%$hbC$k@DLU1Lo}Nq#m^ z^pfBBu01q!&&2rzfPtp6W7r+czbxX!d)W~*;i zbyjOlovb7-ynXA3d*(&~n(FVqFX0LjDw9f8$ynMmUEs>Ai>E$!nyZ{B@SMsx;e?{| z!5XFPPez;mC~w+n%4)V#XV#aw&foOi?FvqOWQlz)SU+>-gN6hCN$dX3OmW#5!TV3x VT`Ay-aUsxo44$rjF6*2UngF{Um7@Rv literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_video.png b/icons/47_myfiles_icon_video.png new file mode 100644 index 0000000000000000000000000000000000000000..a8e832a654503e0459910fc54a7d631f99e2f4e0 GIT binary patch literal 8062 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 M07*qoM6N<$f;}Ni9{>OV literal 0 HcmV?d00001 diff --git a/icons/47_myfiles_icon_word.png b/icons/47_myfiles_icon_word.png new file mode 100644 index 0000000000000000000000000000000000000000..b399badc3ae7390c87707a3066a090c458bac2c8 GIT binary patch literal 5865 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 literal 0 HcmV?d00001 diff --git a/icons/60_myfiles_file_amr.png b/icons/60_myfiles_file_amr.png new file mode 100644 index 0000000000000000000000000000000000000000..93c66f32ebb1c5735567431fddbd3d86e7800ade GIT binary patch literal 2022 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 literal 0 HcmV?d00001 diff --git a/icons/60_myfiles_icon_music_default.png b/icons/60_myfiles_icon_music_default.png new file mode 100644 index 0000000000000000000000000000000000000000..5f001a2d044ed149403b389eddbd0d32f6597774 GIT binary patch literal 1770 zcmVAw_J?o7o{#Zbji#gNEV=%ez-FM)|xMHH4qE#N1?bKsdBi9HMC ziuHnq$}c=@3wJY{Aqiyi)!OqDK~Z<`*~A``3J38z^Qi7VPk?KTUs=PyVJkvx?XX8XKlh=k| zWD97VP2{ZcJj}x5)*>y?GOd7P42o+3x0*yyedj;@oGu8<=7Vvc?|rn=l4pisrUrBw zXmLv2;lhzbO z$AJZ?T_KgWwv-`!j?)lcXrNme`JmTb?p>XTS~2QdJ;ny^Av*@#u!Y}*@Ky34yfD;C zWPnT>SCedJ2ASQ(7(n;k3Sv|P(^!A(Zy10HNN){6z-E}KW-|yL+Ds#Crr;!!J(Y9C z)HvhM{Qpqu7TBK)y zyHbDK+ZNJBOu%3fDfEbaPxl9=zD9BvP_Jy$l*JIvLiPU#vuG_|0?iZ>2}{)ngkit$ zaSKU6*=9KE@bvn7N0e6W63$F6R=~2Apm=&J2QVvwL!z1b{rzcEFk(`2lhi$+JT2sK zx9DbbhP#ZjNy~(67R16t?yY^ImgV8H{9tR(n&ZJ$Xv_fxND0?^1C>mXh z=`szep_GXv9>jf@@avqm*C7~kqAf7hldH1G>oHWQ&UiN#v7)z-JZuZUQ`U9JBdoy4 zmD1G7a-UeG=G61ggml<)%F56}GCR*G-HZc~ak%h)3@MOw<@LWMepMT@z=CwX4AXXY zM=QDOY4I|94Jyje#lUX{KOc{-n9Fuolwaqj{qA?a-$M%+%-> zl7dYYzd7wRUE^j<4eM_3jy97Cqrj|XIO4RhnT_t{P^k?t610u!S+Ay8LtEXeLClJQ z=>rIOP@p#R-q1kQlFb-*Ax{2PKwF>NEygX=-C_+@>qOF0OlvR`DR@WctRcAu@RUvj zMI&{~eVydGSatmm8Z(m{*Wy(CIUQ(9& zU1tusYIk`GSaVrKbbiAY=ye`zv zedZ74GNwAgh;8O4FqLdbN5`g}|9f6`U+xm!k0{EH zq_s%r)fu{$?iv?>H!`|fA!Dg65x{&8ShUxuTco38L)o?2fVu7z_G|kaMH5LfXaznl?_3PVE_Zs!DGF17~n2Mo_p^Blu0TinF=U{q40RR91 M07*qoM6N<$g4p>>5dZ)H literal 0 HcmV?d00001 diff --git a/icons/60_myfiles_icon_vText.png b/icons/60_myfiles_icon_vText.png new file mode 100644 index 0000000000000000000000000000000000000000..97b5a62c6f233222672b0415b06db56430830802 GIT binary patch literal 1350 zcmX9-4NOy46n^ScUdiovGNu&;DUw{#mwr)waHi48KO0#XrWu#Lb@c{k^sckXw;bM86cYb#L5(qtyhYk?8s zVbaJD%%ll8mbI;kG@D2Zc-R6NXuw%R0JH!CrGU?XaH=HoAyyJuaHK-{kOgJAIESeQ z9yms1s3Md=gBWrRNN*;M8l(b*0coVMkOn3fI8XsBpU8q!sHsO9$O2<(W)X5T(lgBi zXheEBK|#Yz4-klPF@;kALOOuXJ1~rg^T0#5Dk6)i16vX!;TD)nj8kAx89)P~Va7GH zgyVchI`9VP_$CbkSxhEmWH`XrBd4UWlt=?U1P{+5lzK$3VHhK2&o>yyflSFKuZY<`iJX4 z9~hHHG)M~5(MV4t6%Xf{kRE#D{Fk=;=65~?%3KSs+Su{vrh4j!f z2jjwr5aaxgoEP5EpXwqdiN~=0gVqd%R;wM{KUlU`p^#b?TC2jUKnm-1l&P&l(%XV^ z#qH(b=-jvzQD3f(R@|^mHpSiG)rG3}9b$YBJ(q~$h z5b;LvmVG=jyJf03bxQZE;Dq?u?)ZD@o(?P3F+k>=`P}zKtt`Da^K!fYvb}bhRd^}( z2z#KYuJ73IZjRd4<6oDzzs8{)Z5U)Ub9ttr?NCyGgKtaaVmG*_pVj&^n% z+41AqZh7j$dp+u<65l6rZ^ITpTl zX;6=y4ZL%XmA$jr&X3G{F87;1P@8D$di~&GgJ3KuXeiO)QnNBzv~JhBlf#<=Z0|e& NjWHsL@U9@O_?S7ste2^n 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 z z4lf!i7>wY=ijcLuikgMzew9A=5hzO0<9@5xMjiD~9r}A+#kKJXMO#7^7#!ojw*F)B MI5AO`?D#$Z0Ub`ERR910 literal 0 HcmV?d00001 diff --git a/icons/60_myfiles_memorycard.png b/icons/60_myfiles_memorycard.png new file mode 100644 index 0000000000000000000000000000000000000000..f486674e69ff3dccf9a92fd206e19f7b19232347 GIT binary patch literal 3006 zcmV;v3qkaWP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0002#NklY*bTaZ8?+m|{y9pJC?-N{ z;62C>j|+Z!FBeE0NtC1$3X^~ZEMNhzt4c|B&PC%SYXEg7!(?NdNNyer^F7HI^L0&O z*kuWl9>55|AKt?OY!j6B0pJ~^4FLMt)ZXIRFV3+SZ79WFHYq78Fx&5gnNZx}# zd+fGmuw4;tjpSto_G}gi7hn^yQoE-*Rbu{HH|QcCbBpAS+L{F{U;ztQzycPqfCVgI z0UuK?@yeh^{*ly@CL|nHIo)vxSik}n@L%;A0Js)6Pk6!2uK)l507*qoM6N<$g4KXbUL8c=8P>AeyH!s|C50~%xem}>Wt2rQzPKX8o zNYw|GTJkcX3nNKYIU4sk_Pg zu`sj5nCppvn+Yk|!2osQ?CLnc*@$zL*kt8WUNkh48xrQpji?@=}a(Hpll+n6A3&afff-K zJ1B*g$}z#+S|La_5Sh@O&ZS_c&x| z{uk;`Kz-X@BecAg?(oI<&|FV1gV1k;&{~8FdQluguBJyWpQrPKju_0Tm6>@JhH1a9 zbW}m9-l*r2<@_4^rl)dw_8t535NJ5n(<3X6^jGTmeaoHW_#t^Z_8N|O$!He{UJ_3G!}?NO3v!Nrt6hHQ7L zF)mHFpORDe`=(mTN7KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z00030NklJi%*0=3xT$J zm-GcL%@;0hFNKnjQe;Rh3~XQnZydQx63Nl`l1c#OLQ4mroy?LnIUMG=Xn8a)mVD(3 z4t=#n)mR%`lYI25Q2=KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000DDNkl}Ioj4;;wM&D`AkpZ|H@NkT+uWx0bE7XyF+zyM$XFaQ_;3;+fI1AqabMP*CW2?pOP zI&a+tTnO>#x4;`4x%o@)rlSMkQcWg-{t%BYHw6PkNo$)xgm%J{z$I-8Q^4g-34p4e z0V!ZW>lknqI058H(c*3=ENX{Q|5o9@!rZNL-2M8g2^=@ZRIlbMwg#kNW{G$gr9rV_lK<)M^!P4y{8Ewt}QxP2m2a-!i~S;6RfD zuyroqxpG@AFqiLKoy&I~RF(`XOO})+ca3IOx@}i1=2pL^!vJc3@aao$^-s9_dpRC?$~o>0{BQfj#?)|e&Nn8 zE4H7{==Arc5c5m{pH);2FJ9O=sg(3OOV)_xaHZPgxGp%Z4=N>70dwS(l6^{vRdG3d z{i|I?VEFEVpL4*cWj55w1hS4ad=2=~C53)QvtSgs&ld9wn)VkXSA#buduO&i{Zntb zZdaC6W6LQAg@fd^E)F!QbB*VH8ldgK*N)9k$Fcd?nxX;4P&=i=k8D6G zdk*Nf)#@1y%zKVz>6&hx(KrD3`+#Eso41?DN$sSDw5hbYIJxJ5`Njgkn*nVh<8oPs zw0iXq_q%!VjR(NniDqLetS)NWFV!Nx*3t4S*^ zH9ifB6#((}0T!ipcGz~+I5q75Z-fs3c!%51{k+(6Y9pEgF)+Y)cmdc;>6@XnPk(NZ z8XkZ7N#w&(5ed>65$O|=Ga|BXyI&NMPei0!L}o+G6T8O4fN-_MJf)8wQk2gBSL04- zs+ENKpP?2P1Aqa*0AK(x02lxa00sa9Ks0|15qhvrqbbnE~C002ovPDHLkV1n6V BG!y^; literal 0 HcmV?d00001 diff --git a/icons/myfile_icon_add.png b/icons/myfile_icon_add.png new file mode 100644 index 0000000000000000000000000000000000000000..43c4984efbbb756c3dd2aaea5769f2351cc519fd GIT binary patch literal 2999 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 t&Z{;ns!lf(yB43vrCyNDZl&M6=K$aF, YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-16 18:18+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: libraries/winset-wrapper/myfileListView.c:75 +msgid "IDS_MF_BODY_IMAGES" +msgstr "Images" + +#: libraries/winset-wrapper/myfileListView.c:77 +#msgid "Videos" +#msgstr "" + +#: libraries/winset-wrapper/myfileListView.c:78 +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Videos" + +#: libraries/winset-wrapper/myfileListView.c:80 +#msgid "Sounds" +#msgstr "" + +#: libraries/winset-wrapper/myfileListView.c:81 +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Sounds" + +#: libraries/winset-wrapper/myfileListView.c:83 +#msgid "Others" +#msgstr "" + +#: libraries/winset-wrapper/myfileListView.c:84 +msgid "IDS_MF_BODY_OTHERS" +msgstr "Others" + diff --git a/po/en_US.po b/po/en_US.po new file mode 100644 index 0000000..862dc57 --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,94 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-16 18:18+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src_sg/myfile_sg_lib.c:98 src_sg/myfile_sg_lib.c:482 +#: src_sg/myfile_sg_lib.c:518 src_sg/myfile_sg_lib.c:901 +msgid "IDS_COM_SK_OK" +msgstr "OK" + +#: src_sg/myfile_sg_lib.c:478 src_sg/myfile_sg_lib.c:894 +msgid "IDS_COM_BODY_BACK" +msgstr "Back" + +#: src_sg/myfile_sg_lib.c:504 src_sg/myfile_sg_lib.c:897 +#: src_sg/myfile_sg_lib.c:942 +msgid "IDS_COM_BODY_DELETE" +msgstr "Delete" + +#: src_sg/myfile_sg_lib.c:517 +msgid "Select at least one item" +msgstr "" + +#. supporting multi-lang for default folders +#: source/libraries/winset-wrapper/main/titlebar.c:24 +msgid "Images" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:25 +msgid "IDS_MF_BODY_IMAGES" +msgstr "Images" + +#: source/libraries/winset-wrapper/main/titlebar.c:27 +msgid "Videos" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:28 +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Videos" + +#: source/libraries/winset-wrapper/main/titlebar.c:30 +msgid "Sounds" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:31 +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Sounds" + +#: source/libraries/winset-wrapper/main/titlebar.c:33 +msgid "Others" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:34 +msgid "IDS_MF_BODY_OTHERS" +msgstr "Others" + +#: source/libraries/winset-wrapper/main/tab.c:16 +#: source/libraries/winset-wrapper/main/tab.c:79 +#: source/libraries/winset-wrapper/main/tab.c:102 +#: source/libraries/winset-wrapper/main/popup.c:291 +msgid "IDS_COM_BODY_PHONE" +msgstr "Phone" + +#: source/libraries/winset-wrapper/main/tab.c:26 +#: source/libraries/winset-wrapper/main/tab.c:80 +#: source/libraries/winset-wrapper/main/tab.c:103 +#: source/libraries/winset-wrapper/main/popup.c:297 +msgid "IDS_COM_BODY_MEMORY_CARD" +msgstr "Memory card" + +#: source/libraries/winset-wrapper/main/tab.c:28 +msgid "IDS_COM_BODY_ALL" +msgstr "All" + +#: source/libraries/winset-wrapper/main/tab.c:52 +msgid "FONT_NAME" +msgstr "" + +#: source/libraries/winset-wrapper/main/popup.c:346 +msgid "IDS_COM_SK_CANCEL" +msgstr "CANCEL" diff --git a/po/es.po b/po/es.po new file mode 100644 index 0000000..ce73e46 --- /dev/null +++ b/po/es.po @@ -0,0 +1,120 @@ +msgid "IDS_MF_BODY_ANY" +msgstr "Cualquiera" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Usos disponibles" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "Crear carpeta" + +msgid "IDS_MF_BODY_DATE" +msgstr "Fecha" + +msgid "IDS_MF_BODY_DONE" +msgstr "Finalizado" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Ejecutar" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Reenviando" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "Imágenes" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Imposible" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Προετοιμασία των δεδομένων MMC..." + +msgid "IDS_MF_BODY_OTHERS" +msgstr "Otros" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Posible" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Imprimir" + +msgid "IDS_MF_BODY_SIZE" +msgstr "Tamaño" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Sonidos" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Validez" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Vídeos" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nueva carpeta" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "Teléfono" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "Cambiar nombre" + +msgid "IDS_MF_OPT_COPY" +msgstr "Copiar" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "Detalles" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Editar" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "Tipo" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Ordenar por" + +msgid "IDS_MF_OPT_MOVE" +msgstr "Mover" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Mover aquí" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "Melodía" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "Fondos" + +msgid "IDS_MF_POP_CLOSE" +msgstr "Cerrar" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Continuar" + +msgid "IDS_MF_POP_COPYING" +msgstr "Copiando..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "Eliminando..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "¿Desea desbloquearlo ahora?" + +msgid "IDS_MF_POP_MOVING" +msgstr "Moviendo..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Pegar aquí" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "Seleccionar todo" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Tipo de archivo no admitido" + +msgid "IDS_MF_SK_ADD" +msgstr "Añadir" + +msgid "IDS_MF_SK_CANCEL" +msgstr "Cancelar" + diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100644 index 0000000..1d09824 --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "Arriba" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "Inicio" +msgid "IDS_MF_BODY_ALERTS" +msgstr "Alertas" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "Fondos de pantalla" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "Mi álbum" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "Mis clips de vídeo" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "Estado correcto" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "Proveedor" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "Contar" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "Contiene" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "Individual" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "Intervalo" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "Renomb" + +msgid "IDS_MF_BODY_TIME" +msgstr "Hora" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "Recuento de tiempo" + +msgid "IDS_MF_BODY_TYPE" +msgstr "Tipo" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "Ilimitado" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "Reempl" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "Melodía del llamante" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "Nombre" + +msgid "IDS_MF_POP_COPIED" +msgstr "Copiado" + +msgid "IDS_MF_POP_MOVED" +msgstr "Movido" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "No se ha seleccionado nada" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "No hay memoria de ejecución suficiente" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "No hay memoria suficiente. Elimine algunos elementos" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "Fecha creada" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "Información de GPS" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "Latitud GPS" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "Longitud GPS" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "Versión GPS" + +msgid "IDS_MF_BODY_NAME" +msgstr "Nombre" + +msgid "IDS_MF_SK_DETAILS" +msgstr "Detalles" + +msgid "IDS_MF_BODY_ANY" +msgstr "Cualquiera" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Usos disponibles" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Ejecutar" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Reenviando" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Imposible" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Los datos MMC se están inicializando..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Posible" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Imprimir" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Validez" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nueva carpeta" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Editar" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Mostrar por" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Mover aquí" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Continuar" + +msgid "IDS_MF_POP_COPYING" +msgstr "Copiando..." + +msgid "IDS_MF_POP_MOVING" +msgstr "Moviendo..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Pegar aquí" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Tipo de archivo no admitido" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "Vista de detalle" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "Ascendente" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "Descendente" + diff --git a/po/fr.po b/po/fr.po new file mode 100644 index 0000000..109bf21 --- /dev/null +++ b/po/fr.po @@ -0,0 +1,120 @@ +msgid "IDS_MF_BODY_ANY" +msgstr "N'importe" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Utilisations disponibles" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "Créer dossier" + +msgid "IDS_MF_BODY_DATE" +msgstr "Date" + +msgid "IDS_MF_BODY_DONE" +msgstr "OK" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Exécuter" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Transfert" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "Images" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Impossible" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "" + +msgid "IDS_MF_BODY_OTHERS" +msgstr "Autres" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Possible" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Imprimer" + +msgid "IDS_MF_BODY_SIZE" +msgstr "Taille" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Sons" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Validité" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Vidéos" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nouveau dossier" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "Téléphone" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "Renommer" + +msgid "IDS_MF_OPT_COPY" +msgstr "Copier" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "Détails" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Modifier" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "Type" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Trier par" + +msgid "IDS_MF_OPT_MOVE" +msgstr "Déplacer" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Déplacer ici" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "Sonnerie" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "Fond d'écran" + +msgid "IDS_MF_POP_CLOSE" +msgstr "Fermer" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Continuer" + +msgid "IDS_MF_POP_COPYING" +msgstr "Copie ..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "Suppression ..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "Voulez-vous le déverrouiller maintenant ?" + +msgid "IDS_MF_POP_MOVING" +msgstr "Déplacement..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Coller ici" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "Sélectionner tout" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Type de fichier non pris en charge" + +msgid "IDS_MF_SK_ADD" +msgstr "Ajouter" + +msgid "IDS_MF_SK_CANCEL" +msgstr "Annuler" + diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100644 index 0000000..bb7cc9c --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "Haut" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "Accueil" +msgid "IDS_MF_BODY_ALERTS" +msgstr "Alertes" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "Fonds d'écran" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "Mon album" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "Mes clips vidéo" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "Information sur les droits" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "Fournisseur" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "Compte" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "Contient" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "Individuel" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "Intervalle" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "Nv nom" + +msgid "IDS_MF_BODY_TIME" +msgstr "Heure" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "Temps restant" + +msgid "IDS_MF_BODY_TYPE" +msgstr "Type" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "Illimité" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "Rempl." + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "Sonnerie personnalisée" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "Nom" + +msgid "IDS_MF_POP_COPIED" +msgstr "Copié(s)" + +msgid "IDS_MF_POP_MOVED" +msgstr "Déplacé" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "Aucune sélection" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "Mémoire de la pile insuffisante" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "Mémoire insuffisante. Supprimez certains éléments" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "Date de création" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "Informations GPS" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "Latitude GPS" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "Longitude GPS" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "Version GPS" + +msgid "IDS_MF_BODY_NAME" +msgstr "Nom" + +msgid "IDS_MF_SK_DETAILS" +msgstr "Détails" + +msgid "IDS_MF_BODY_ANY" +msgstr "N'importe" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Utilisations disponibles" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Exécuter" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Transfert" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Impossible" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Données MMC en cours d'initialisation..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Possible" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Imprimer" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Validité" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nouveau dossier" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Modifier" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Trier par" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Déplacer ici" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Continuer" + +msgid "IDS_MF_POP_COPYING" +msgstr "Copie ..." + +msgid "IDS_MF_POP_MOVING" +msgstr "Déplacement..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Coller ici" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Type de fichier non pris en charge" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "Affichage détaillé" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "Croissant" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "Décroissant" + diff --git a/po/it.po b/po/it.po new file mode 100644 index 0000000..15a979b --- /dev/null +++ b/po/it.po @@ -0,0 +1,120 @@ +msgid "IDS_MF_BODY_ANY" +msgstr "Qualsiasi" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Usi disponibili" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "Crea cartella" + +msgid "IDS_MF_BODY_DATE" +msgstr "Data" + +msgid "IDS_MF_BODY_DONE" +msgstr "Fatto" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Esegui" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Inoltro" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "Immagini" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Impossibile" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "MMC verileri başlatılıyor..." + +msgid "IDS_MF_BODY_OTHERS" +msgstr "Altro" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Possibile" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Stampa" + +msgid "IDS_MF_BODY_SIZE" +msgstr "Dimensioni" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Suoni" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Validità" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Video" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nuova cartella" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "Telefono" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "Rinomina" + +msgid "IDS_MF_OPT_COPY" +msgstr "Copia" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "Dettagli" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Modifica" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "Tipo" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Elenca per" + +msgid "IDS_MF_OPT_MOVE" +msgstr "Sposta" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Sposta qui" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "Suoneria" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "Sfondo" + +msgid "IDS_MF_POP_CLOSE" +msgstr "Chiudi" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Continua" + +msgid "IDS_MF_POP_COPYING" +msgstr "Copia in corso..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "Eliminazione..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "Sbloccarlo adesso?" + +msgid "IDS_MF_POP_MOVING" +msgstr "Spostamento..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Incolla qui" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "Seleziona tutto" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Tipo file non supportato" + +msgid "IDS_MF_SK_ADD" +msgstr "Aggiungi" + +msgid "IDS_MF_SK_CANCEL" +msgstr "Annulla" + diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100644 index 0000000..f80ad57 --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "Su" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "Home" +msgid "IDS_MF_BODY_ALERTS" +msgstr "Avvisi" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "Sfondi" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "Album" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "Video personali" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "Stato diritti" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "Fornitore" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "Conteggio" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "Contiene" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "Individuale" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "Intervallo" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "Rinom." + +msgid "IDS_MF_BODY_TIME" +msgstr "Ora" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "A termine" + +msgid "IDS_MF_BODY_TYPE" +msgstr "Tipo" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "Senza limitazioni" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "Sostit." + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "Suoneria chiamante" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "Nome" + +msgid "IDS_MF_POP_COPIED" +msgstr "Copiato" + +msgid "IDS_MF_POP_MOVED" +msgstr "Spostato" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "Nessun elemento selezionato" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "Memoria heap insufficiente" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "Memoria insufficiente. Eliminare alcuni elementi" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "Data creazione" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "Informaz. GPS" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "Latitudine GPS" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "Longitudine GPS" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "Versione GPS" + +msgid "IDS_MF_BODY_NAME" +msgstr "Nome" + +msgid "IDS_MF_SK_DETAILS" +msgstr "Dettagli" + +msgid "IDS_MF_BODY_ANY" +msgstr "Qualsiasi" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Usi disponibili" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Esegui" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Inoltro" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Impossibile" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Inizializzazione dati MMC..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Possibile" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Stampa" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Validità" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nuova cartella" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Modifica" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Elenca per" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Sposta qui" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Continua" + +msgid "IDS_MF_POP_COPYING" +msgstr "Copia in corso..." + +msgid "IDS_MF_POP_MOVING" +msgstr "Spostamento..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Incolla qui" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Tipo file non supportato" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "Vista dettagli" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "Crescente" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "Decrescente" + diff --git a/po/ja.po b/po/ja.po new file mode 100644 index 0000000..170b593 --- /dev/null +++ b/po/ja.po @@ -0,0 +1,137 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-16 18:18+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +msgid "IDS_MF_BODY_ANY" +msgstr "どれか" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "使用​可能" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "フォルダ作成" + +msgid "IDS_MF_BODY_DATE" +msgstr "日付" + +msgid "IDS_MF_BODY_DONE" +msgstr "完了" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "実行" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "外部転送" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "画像" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "不可" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Los datos MMC se están inicializando..." + +msgid "IDS_MF_BODY_OTHERS" +msgstr "その他" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "可能" + +msgid "IDS_MF_BODY_PRINT" +msgstr "印刷" + +msgid "IDS_MF_BODY_SIZE" +msgstr "サイズ" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "サウンド" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "有効性" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "ムービー" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "新​フォルダ" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "本体" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "ファイル名変更" + +msgid "IDS_MF_OPT_COPY" +msgstr "コピー" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "詳細" + +msgid "IDS_MF_OPT_EDIT" +msgstr "編集​" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "種類" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "ソート" + +msgid "IDS_MF_OPT_MOVE" +msgstr "移動" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "ここに​移動" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "着信音" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "壁紙" + +msgid "IDS_MF_POP_CLOSE" +msgstr "閉じる" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "次へ" + +msgid "IDS_MF_POP_COPYING" +msgstr "コピー中..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "削除中..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "今すぐ​ロック​解除​しますか?" + +msgid "IDS_MF_POP_MOVING" +msgstr "移動中..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "ここにコピー" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "全て選択" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "非対応のファイルです" + +msgid "IDS_MF_SK_ADD" +msgstr "追加" + +msgid "IDS_MF_SK_CANCEL" +msgstr "キャンセル" diff --git a/po/ja_JP.po b/po/ja_JP.po new file mode 100644 index 0000000..c760088 --- /dev/null +++ b/po/ja_JP.po @@ -0,0 +1,159 @@ +msgid "IDS_MF_TAB_UP" +msgstr "上" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "ホーム" + +msgid "IDS_MF_BODY_ALERTS" +msgstr "アラート" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "壁紙" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "マイ​アルバム" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "マイ​ビデオ​クリップ" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "右​ステータス" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "提供元順" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "カウント" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "含む" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "個人" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "間隔" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "名称変更" + +msgid "IDS_MF_BODY_TIME" +msgstr "時刻" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "時間​カウント" + +msgid "IDS_MF_BODY_TYPE" +msgstr "種類" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "無制限" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "上書き" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "個別​着信音" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "名前" + +msgid "IDS_MF_POP_COPIED" +msgstr "コピーしました。" + +msgid "IDS_MF_POP_MOVED" +msgstr "移動しました。" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "何も​選択​されて​いません" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "ヒープメモリ不足です" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "メモリが不足しています。いくつかのアイテムを削除してください" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "作成​された​データ" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "GPS情報" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "GPS​緯度" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "GPS​経度" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "GPS​バージョン" + +msgid "IDS_MF_BODY_NAME" +msgstr "名前" + +msgid "IDS_MF_SK_DETAILS" +msgstr "詳細" + +msgid "IDS_MF_BODY_ANY" +msgstr "どれか" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "使用​可能" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "実行" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "転送" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "不可" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "MMC​データ​を​インストール中..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "可能" + +msgid "IDS_MF_BODY_PRINT" +msgstr "印刷" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "有効性" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "新規フォルダー" + +msgid "IDS_MF_OPT_EDIT" +msgstr "編集" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "ソート" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "ここに​移動" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "次へ" + +msgid "IDS_MF_POP_COPYING" +msgstr "コピー中..." + +msgid "IDS_MF_POP_MOVING" +msgstr "移動中..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "ここにコピー" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "未対応のファイルです" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "詳細​表示" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "昇順" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "降順" + diff --git a/po/ko.po b/po/ko.po new file mode 100644 index 0000000..5be8a5c --- /dev/null +++ b/po/ko.po @@ -0,0 +1,155 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-16 18:18+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=UTF-8\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src_sg/myfile_sg_lib.c:98 src_sg/myfile_sg_lib.c:482 +#: src_sg/myfile_sg_lib.c:518 src_sg/myfile_sg_lib.c:901 +msgid "IDS_COM_SK_OK" +msgstr "확인" + +#: src_sg/myfile_sg_lib.c:478 src_sg/myfile_sg_lib.c:894 +msgid "IDS_COM_BODY_BACK" +msgstr "이전" + +#: src_sg/myfile_sg_lib.c:504 src_sg/myfile_sg_lib.c:897 +#: src_sg/myfile_sg_lib.c:942 +msgid "IDS_COM_BODY_DELETE" +msgstr "삭제" + +#: src_sg/myfile_sg_lib.c:517 +msgid "Select at least one item" +msgstr "" + +msgid "IDS_MF_BODY_ANY" +msgstr "모든 종류" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "사용 가능" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "폴더 추가" + +msgid "IDS_MF_BODY_DATE" +msgstr "날짜" + +msgid "IDS_MF_BODY_DONE" +msgstr "완료" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "실행" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "전송" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "이미지" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "불가능" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "외장메모리 데이터 읽어오는 중…" + +msgid "IDS_MF_BODY_OTHERS" +msgstr "기타" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "가능" + +msgid "IDS_MF_BODY_PRINT" +msgstr "인쇄" + +msgid "IDS_MF_BODY_SIZE" +msgstr "크기" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "사운드" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "유효 횟수" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "동영상" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "폴더 추가" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "휴대폰" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "이름 변경" + +msgid "IDS_MF_OPT_COPY" +msgstr "복사" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "상세정보" + +msgid "IDS_MF_OPT_EDIT" +msgstr "편집" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "형식" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "정렬" + +msgid "IDS_MF_OPT_MOVE" +msgstr "이동" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "여기로 이동" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "벨소리" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "배경화면" + +msgid "IDS_MF_POP_CLOSE" +msgstr "닫기" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "계속" + +msgid "IDS_MF_POP_COPYING" +msgstr "복사 중..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "삭제 중..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "지금 해제할까요?" + +msgid "IDS_MF_POP_MOVING" +msgstr "이동 중..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "여기로 복사" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "모두 선택" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "지원되지 않는 파일 형식입니다" + +msgid "IDS_MF_SK_ADD" +msgstr "추가" + +msgid "IDS_MF_SK_CANCEL" +msgstr "취소" diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100644 index 0000000..e3ae9f6 --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "위로" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "홈" +msgid "IDS_MF_BODY_ALERTS" +msgstr "알림" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "배경화면" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "내 앨범" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "내 동영상" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "권한 유효 상태" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "판매자" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "횟수" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "포함" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "개인" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "간격" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "이름 변경" + +msgid "IDS_MF_BODY_TIME" +msgstr "시간" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "시간 경과 후 횟수 계산" + +msgid "IDS_MF_BODY_TYPE" +msgstr "형식" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "제한 없음" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "교체" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "개인 벨소리" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "이름" + +msgid "IDS_MF_POP_COPIED" +msgstr "복사되었습니다" + +msgid "IDS_MF_POP_MOVED" +msgstr "이동되었습니다" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "선택된 것이 없습니다" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "힙메모리가 부족합니다" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "저장 공간이 없습니다. 필요 없는 파일을 삭제하세요" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "생성 날짜" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "GPS 정보" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "GPS 위도" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "GPS 경도" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "GPS 버전" + +msgid "IDS_MF_BODY_NAME" +msgstr "이름" + +msgid "IDS_MF_SK_DETAILS" +msgstr "상세 정보" + +msgid "IDS_MF_BODY_ANY" +msgstr "모든 종류" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "사용 가능" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "실행" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "전송" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "불가능" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "메모리 카드 데이터 초기화 중…" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "가능" + +msgid "IDS_MF_BODY_PRINT" +msgstr "인쇄" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "유효 횟수" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "새 폴더" + +msgid "IDS_MF_OPT_EDIT" +msgstr "편집" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "정렬" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "여기로 이동" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "계속" + +msgid "IDS_MF_POP_COPYING" +msgstr "복사 중..." + +msgid "IDS_MF_POP_MOVING" +msgstr "이동 중..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "여기로 복사" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "지원되지 않는 파일 형식입니다" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "상세정보 보기" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "오름차순" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "내림차순" + diff --git a/po/nl.po b/po/nl.po new file mode 100644 index 0000000..1be7c74 --- /dev/null +++ b/po/nl.po @@ -0,0 +1,120 @@ +msgid "IDS_MF_BODY_ANY" +msgstr "Alle" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Aantal keer dat het gebruikt mag worden" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "Map maken" + +msgid "IDS_MF_BODY_DATE" +msgstr "Datum" + +msgid "IDS_MF_BODY_DONE" +msgstr "Gereed" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Uitvoeren" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Doorsturen" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "Afbeeldingen" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Niet mogelijk" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "MMC-gegevens worden geïnitialiseerd..." + +msgid "IDS_MF_BODY_OTHERS" +msgstr "Overige" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Mogelijk" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Afdrukken" + +msgid "IDS_MF_BODY_SIZE" +msgstr "Grootte" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Geluiden" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Geldigheid" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Video's" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nieuwe map" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "Telefoon" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "Naam wijzigen" + +msgid "IDS_MF_OPT_COPY" +msgstr "Kopiëren" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "Details" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Wijzigen" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "Type" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Sorteren op" + +msgid "IDS_MF_OPT_MOVE" +msgstr "Verplaatsen" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Hier plaatsen" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "Beltoon" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "Achtergrond" + +msgid "IDS_MF_POP_CLOSE" +msgstr "Dichtbij" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Doorgaan" + +msgid "IDS_MF_POP_COPYING" +msgstr "Kopiëren..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "Wissen..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "Wilt u het apparaat nu ontgrendelen?" + +msgid "IDS_MF_POP_MOVING" +msgstr "Verplaatsen..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Hier kopiëren" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "Alles selecteren" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Niet-ondersteund bestandstype" + +msgid "IDS_MF_SK_ADD" +msgstr "Voeg toe" + +msgid "IDS_MF_SK_CANCEL" +msgstr "Annul." + diff --git a/po/nl_NL.po b/po/nl_NL.po new file mode 100644 index 0000000..e8621b2 --- /dev/null +++ b/po/nl_NL.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "Omhoog" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "Startpagina" +msgid "IDS_MF_BODY_ALERTS" +msgstr "Waarschuwingen" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "Achtergronden" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "Mijn album" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "Mijn videoclips" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "Status rechten" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "Leverancier" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "Aantal" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "Bevat" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "Individueel" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "Interval" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "Wijzig" + +msgid "IDS_MF_BODY_TIME" +msgstr "Tijd" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "Speelduur" + +msgid "IDS_MF_BODY_TYPE" +msgstr "Type" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "Onbeperkt" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "Vervang" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "Beltoon beller" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "Naam" + +msgid "IDS_MF_POP_COPIED" +msgstr "Gekopieerd" + +msgid "IDS_MF_POP_MOVED" +msgstr "Verplaatst" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "Niets geselecteerd" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "Onvoldoende heap-geheugen" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "Onvoldoende geheugen. Wis een aantal items" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "Aanmaakdatum" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "GPS informatie" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "GPS-breedtegraad" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "GPS-lengtegraad" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "GPS-versie" + +msgid "IDS_MF_BODY_NAME" +msgstr "Naam" + +msgid "IDS_MF_SK_DETAILS" +msgstr "Details" + +msgid "IDS_MF_BODY_ANY" +msgstr "Alle" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Aantal keer dat het gebruikt mag worden" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Uitvoeren" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Doorsturen" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Niet mogelijk" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "MMC-gegevens worden geïnitialiseerd..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Mogelijk" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Afdrukken" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Geldigheid" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nieuwe map" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Wijzigen" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Sorteren op" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Hier plaatsen" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Doorgaan" + +msgid "IDS_MF_POP_COPYING" +msgstr "Kopiëren..." + +msgid "IDS_MF_POP_MOVING" +msgstr "Verplaatsen..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Hier kopiëren" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Niet-ondersteund bestandstype" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "Detailweergave" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "Oplopend" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "Aflopend" + diff --git a/po/pt.po b/po/pt.po new file mode 100644 index 0000000..4ed2697 --- /dev/null +++ b/po/pt.po @@ -0,0 +1,120 @@ +msgid "IDS_MF_BODY_ANY" +msgstr "Qualquer" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Utilizações disponíveis" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "Criar pasta" + +msgid "IDS_MF_BODY_DATE" +msgstr "Data" + +msgid "IDS_MF_BODY_DONE" +msgstr "Concluído" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Executar" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "A reencaminhar" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "Imagens" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Impossível" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Données MMC en cours d'initialisation..." + +msgid "IDS_MF_BODY_OTHERS" +msgstr "Outros" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Possível" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Imprimir" + +msgid "IDS_MF_BODY_SIZE" +msgstr "Tamanho" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Sons" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Validade" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Vídeos" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nova pasta" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "Telefone" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "Mudar nome" + +msgid "IDS_MF_OPT_COPY" +msgstr "Copiar" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "Detalhes" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Editar" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "Tipo" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Listar por" + +msgid "IDS_MF_OPT_MOVE" +msgstr "Mover" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Mover para aqui" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "Tom de toque" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "Fundo" + +msgid "IDS_MF_POP_CLOSE" +msgstr "Fechar" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Continuar" + +msgid "IDS_MF_POP_COPYING" +msgstr "A copiar..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "A eliminar..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "Quer desbloquear agora?" + +msgid "IDS_MF_POP_MOVING" +msgstr "A mover..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Colar aqui" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "Seleccionar tudo" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Tipo de ficheiro não suportado" + +msgid "IDS_MF_SK_ADD" +msgstr "Adicionar" + +msgid "IDS_MF_SK_CANCEL" +msgstr "Cancelar" + diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100644 index 0000000..8f34ed8 --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "Para cima" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "Início" +msgid "IDS_MF_BODY_ALERTS" +msgstr "Alertas" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "Fundos" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "O meu álbum" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "Os meus clips de vídeo" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "Estado dos direitos" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "Representante" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "Contagem" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "Conteúdo" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "Individual" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "Intervalo" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "M. nm." + +msgid "IDS_MF_BODY_TIME" +msgstr "Data" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "Contagem temporizada" + +msgid "IDS_MF_BODY_TYPE" +msgstr "Tipo" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "Ilimitado" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "Subs." + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "Toque do chamador" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "Nome" + +msgid "IDS_MF_POP_COPIED" +msgstr "Copiado" + +msgid "IDS_MF_POP_MOVED" +msgstr "Movido" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "Nada seleccionado" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "Memória de pilha insuficiente" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "Memória insuficiente. Apague alguns itens" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "Criado na data" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "Informações de GPS" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "Latitude GPS" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "Longitude GPS" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "Versão GPS" + +msgid "IDS_MF_BODY_NAME" +msgstr "Nome" + +msgid "IDS_MF_SK_DETAILS" +msgstr "Detalhes" + +msgid "IDS_MF_BODY_ANY" +msgstr "Qualquer" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Utilizações disponíveis" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Executar" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Reencaminhar" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Impossível" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Os dados MMC estão a ser iniciados..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Possível" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Imprimir" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Validade" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Nova pasta" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Editar" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Listar por" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Mover para aqui" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Continuar" + +msgid "IDS_MF_POP_COPYING" +msgstr "A copiar..." + +msgid "IDS_MF_POP_MOVING" +msgstr "A mover..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Colar aqui" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Tipo de ficheiro não suportado" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "Vista de detalhes" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "Ascendente" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "Descendente" + diff --git a/po/ru.po b/po/ru.po new file mode 100644 index 0000000..4eb84d6 --- /dev/null +++ b/po/ru.po @@ -0,0 +1,120 @@ +msgid "IDS_MF_BODY_ANY" +msgstr "Любой" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Доступно" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "Создать папку" + +msgid "IDS_MF_BODY_DATE" +msgstr "Дата" + +msgid "IDS_MF_BODY_DONE" +msgstr "Готово" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Запуск" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Пересылка" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "Картинки" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Невозможно" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Инициализация данных MMC..." + +msgid "IDS_MF_BODY_OTHERS" +msgstr "Прочее" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Возможно" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Печать" + +msgid "IDS_MF_BODY_SIZE" +msgstr "Размер" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Звуки" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Период действия" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Видео" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Новая папка" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "Телефон" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "Переименовать" + +msgid "IDS_MF_OPT_COPY" +msgstr "Копировать" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "Свойства" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Изменить" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "Тип" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Сортировка по" + +msgid "IDS_MF_OPT_MOVE" +msgstr "Переместить" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Переместить сюда" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "Мелодия звонка" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "Обои" + +msgid "IDS_MF_POP_CLOSE" +msgstr "Закрыть" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Продолжить" + +msgid "IDS_MF_POP_COPYING" +msgstr "Копирование..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "Удаление..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "Разблокировать элемент?" + +msgid "IDS_MF_POP_MOVING" +msgstr "Перемещение..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Вставить сюда" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "Выбрать все" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Неподдерживаемый тип файла" + +msgid "IDS_MF_SK_ADD" +msgstr "Добавить" + +msgid "IDS_MF_SK_CANCEL" +msgstr "Отмена" + diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100644 index 0000000..9f0fefb --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "Вверх" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "Домой" +msgid "IDS_MF_BODY_ALERTS" +msgstr "Оповещения" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "Обои" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "Мой альбом" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "Мои видеоклипы" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "Состояние прав" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "Поставщик" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "Количество" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "Содержит" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "Индивидуальный" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "Интервал" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "Переим." + +msgid "IDS_MF_BODY_TIME" +msgstr "Время" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "Счетчик" + +msgid "IDS_MF_BODY_TYPE" +msgstr "Тип" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "Неограниченно" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "Заменить" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "Мелодия контакта" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "Имя" + +msgid "IDS_MF_POP_COPIED" +msgstr "Скопировано" + +msgid "IDS_MF_POP_MOVED" +msgstr "Перемещено" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "Ничего не выбрано" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "Недостаточно динамической памяти" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "Недостаточно памяти. Удалите некоторые элементы" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "Дата создания" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "Информация GPS" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "Широта по GPS" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "Долгота по GPS" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "Версия GPS" + +msgid "IDS_MF_BODY_NAME" +msgstr "Имя" + +msgid "IDS_MF_SK_DETAILS" +msgstr "Сведения" + +msgid "IDS_MF_BODY_ANY" +msgstr "Любой" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Доступно" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Запуск" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Пересылка" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Невозможно" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Инициализация данных MMC..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Возможно" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Печать" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Период действия" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Новая папка" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Изменить" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Сортировка по" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Переместить сюда" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Продолжить" + +msgid "IDS_MF_POP_COPYING" +msgstr "Копирование..." + +msgid "IDS_MF_POP_MOVING" +msgstr "Перемещение..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Вставить сюда" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Неподдерживаемый тип файла" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "Просмотр сведений" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "По возрастанию" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "По убыванию" + diff --git a/po/tk.po b/po/tk.po new file mode 100644 index 0000000..826304e --- /dev/null +++ b/po/tk.po @@ -0,0 +1,120 @@ +msgid "IDS_MF_BODY_ANY" +msgstr "Herhangi" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Mevcut kullanımlar" + +msgid "IDS_MF_BODY_CREATE_FOLDER" +msgstr "Klasör oluştur" + +msgid "IDS_MF_BODY_DATE" +msgstr "Tarih" + +msgid "IDS_MF_BODY_DONE" +msgstr "Kaydet" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Uygulama" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Ä°letme" + +msgid "IDS_MF_BODY_IMAGES" +msgstr "Resimler" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Ä°mkansız" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "Os dados MMC estão a ser iniciados..." + +msgid "IDS_MF_BODY_OTHERS" +msgstr "Diğerleri" + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Mümkün" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Yazdır" + +msgid "IDS_MF_BODY_SIZE" +msgstr "Boyut" + +msgid "IDS_MF_BODY_SOUNDS" +msgstr "Seslerim" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Geçerlilik" + +msgid "IDS_MF_BODY_VIDEOS" +msgstr "Videolar" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Yeni klasör" + +msgid "IDS_MF_HEADER_PHONE" +msgstr "Telefon" + +msgid "IDS_MF_HEADER_RENAME" +msgstr "Yeniden adlandır" + +msgid "IDS_MF_OPT_COPY" +msgstr "Kopyala" + +msgid "IDS_MF_OPT_DETAILS" +msgstr "Ayrıntılar" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Düzenle" + +msgid "IDS_MF_OPT_LISTBY_TYPE" +msgstr "Tür" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Listele" + +msgid "IDS_MF_OPT_MOVE" +msgstr "Taşı" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Buraya taşı" + +msgid "IDS_MF_OPT_RINGTONE" +msgstr "Zil sesi" + +msgid "IDS_MF_OPT_WALLPAPER" +msgstr "Duvar kağıdı" + +msgid "IDS_MF_POP_CLOSE" +msgstr "Kapat" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Devam" + +msgid "IDS_MF_POP_COPYING" +msgstr "Kopyalanıyor..." + +msgid "IDS_MF_POP_DELETING_ING" +msgstr "Siliniyor..." + +msgid "IDS_MF_POP_DO_YOU_WANT_TO_UNLOCK_IT_NOW_Q" +msgstr "Kilidi kaldırmak istiyor musunuz?" + +msgid "IDS_MF_POP_MOVING" +msgstr "Taşıyor..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Buraya yapıştır" + +msgid "IDS_MF_POP_SELECT_ALL" +msgstr "Hepsini seç" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Desteklenmeyen dosya türü" + +msgid "IDS_MF_SK_ADD" +msgstr "Ekle" + +msgid "IDS_MF_SK_CANCEL" +msgstr "Ä°ptal" + diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100644 index 0000000..e77dfaf --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,159 @@ +msgid "IDS_MF_TAB_UP" +msgstr "Yukarı" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "A.Syf" + +msgid "IDS_MF_BODY_ALERTS" +msgstr "Uyarılar" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "Duvar kağıtları" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "Albümüm" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "Video kliplerim" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "Hak durumu" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "Sağlayıcı" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "sayım" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "İçindekiler" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "Kişisel" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "Aralık" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "Y. adl" + +msgid "IDS_MF_BODY_TIME" +msgstr "Saat" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "Zamanlı sayım" + +msgid "IDS_MF_BODY_TYPE" +msgstr "Tür" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "Sınırsız" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "Değiştir" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "Arayan zil sesi tonu" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "Ä°sim" + +msgid "IDS_MF_POP_COPIED" +msgstr "Kopyalandı" + +msgid "IDS_MF_POP_MOVED" +msgstr "Taşındı" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "Bir şey seçilmedi" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "Yeterli küme hafızası yok" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "Yeterli hafıza yok. Bazı öğeleri silin." + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "Oluşturulma tarihi" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "GPS bilgileri" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "GPS enlem" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "GPS boylam" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "GPS versiyonu" + +msgid "IDS_MF_BODY_NAME" +msgstr "Ä°sim" + +msgid "IDS_MF_SK_DETAILS" +msgstr "Ayrıntılar" + +msgid "IDS_MF_BODY_ANY" +msgstr "Herhangi" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "Mevcut kullanımlar" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "Uygulama" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "Ä°letme" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "Ä°mkansız" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "MMC verileri başlatılıyor..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "Mümkün" + +msgid "IDS_MF_BODY_PRINT" +msgstr "Yazdır" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "Geçerlilik" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "Yeni klasör" + +msgid "IDS_MF_OPT_EDIT" +msgstr "Düzenle" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "Listele" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "Buraya taşı" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "Devam" + +msgid "IDS_MF_POP_COPYING" +msgstr "Kopyalanıyor..." + +msgid "IDS_MF_POP_MOVING" +msgstr "Taşıyor..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "Buraya yapıştır" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "Desteklenmeyen dosya türü" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "Ayrıntılı görünüm" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "Artan" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "Azalan" + diff --git a/po/ug-myfile-efl.pot b/po/ug-myfile-efl.pot new file mode 100644 index 0000000..c89d2ef --- /dev/null +++ b/po/ug-myfile-efl.pot @@ -0,0 +1,94 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-06-16 18:18+0900\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src_sg/myfile_sg_lib.c:98 src_sg/myfile_sg_lib.c:482 +#: src_sg/myfile_sg_lib.c:518 src_sg/myfile_sg_lib.c:901 +msgid "IDS_COM_SK_OK" +msgstr "" + +#: src_sg/myfile_sg_lib.c:478 src_sg/myfile_sg_lib.c:894 +msgid "IDS_COM_BODY_BACK" +msgstr "" + +#: src_sg/myfile_sg_lib.c:504 src_sg/myfile_sg_lib.c:897 +#: src_sg/myfile_sg_lib.c:942 +msgid "IDS_COM_BODY_DELETE" +msgstr "" + +#: src_sg/myfile_sg_lib.c:517 +msgid "Select at least one item" +msgstr "" + +#. supporting multi-lang for default folders +#: source/libraries/winset-wrapper/main/titlebar.c:24 +msgid "Images" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:25 +msgid "IDS_MF_BODY_IMAGES" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:27 +msgid "Videos" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:28 +msgid "IDS_MF_BODY_VIDEOS" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:30 +msgid "Sounds" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:31 +msgid "IDS_MF_BODY_SOUNDS" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:33 +msgid "Others" +msgstr "" + +#: source/libraries/winset-wrapper/main/titlebar.c:34 +msgid "IDS_MF_BODY_OTHERS" +msgstr "" + +#: source/libraries/winset-wrapper/main/tab.c:16 +#: source/libraries/winset-wrapper/main/tab.c:79 +#: source/libraries/winset-wrapper/main/tab.c:102 +#: source/libraries/winset-wrapper/main/popup.c:291 +msgid "IDS_COM_BODY_PHONE" +msgstr "" + +#: source/libraries/winset-wrapper/main/tab.c:26 +#: source/libraries/winset-wrapper/main/tab.c:80 +#: source/libraries/winset-wrapper/main/tab.c:103 +#: source/libraries/winset-wrapper/main/popup.c:297 +msgid "IDS_COM_BODY_MEMORY_CARD" +msgstr "" + +#: source/libraries/winset-wrapper/main/tab.c:28 +msgid "IDS_COM_BODY_ALL" +msgstr "" + +#: source/libraries/winset-wrapper/main/tab.c:52 +msgid "FONT_NAME" +msgstr "" + +#: source/libraries/winset-wrapper/main/popup.c:346 +msgid "IDS_COM_SK_CANCEL" +msgstr "" diff --git a/po/update-po.sh b/po/update-po.sh new file mode 100644 index 0000000..ff5bff7 --- /dev/null +++ b/po/update-po.sh @@ -0,0 +1,57 @@ +#!/bin/sh + +PACKAGE=ug-myfile-efl +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 100644 index 0000000..15f4371 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "向上" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "主界面" +msgid "IDS_MF_BODY_ALERTS" +msgstr "提示" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "墙纸" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "我的相册" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "我的录像片段" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "授权状态" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "提供者" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "计数" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "包括" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "个人" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "间隔" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "重命名" + +msgid "IDS_MF_BODY_TIME" +msgstr "持续期间" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "计时" + +msgid "IDS_MF_BODY_TYPE" +msgstr "类型" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "无限" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "替换" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "来电铃声" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "名称" + +msgid "IDS_MF_POP_COPIED" +msgstr "已复制" + +msgid "IDS_MF_POP_MOVED" +msgstr "已移动" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "未选择" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "堆存储器容量不足" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "存储空间不足。请删除部分项目" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "创建日期" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "GPS 信息" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "GPS纬度" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "GPS经度" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "GPS 版本" + +msgid "IDS_MF_BODY_NAME" +msgstr "名称" + +msgid "IDS_MF_SK_DETAILS" +msgstr "详细信息" + +msgid "IDS_MF_BODY_ANY" +msgstr "任何" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "可用于" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "执行" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "转发" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "不可以" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "正在初始化 MMC 数据..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "可以" + +msgid "IDS_MF_BODY_PRINT" +msgstr "打印" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "有效" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "新文件夹" + +msgid "IDS_MF_OPT_EDIT" +msgstr "编辑" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "排序方式" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "移动到这里" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "继续" + +msgid "IDS_MF_POP_COPYING" +msgstr "正在复制..." + +msgid "IDS_MF_POP_MOVING" +msgstr "移动中..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "粘贴至此" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "不支持的文件类型" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "详情查看" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "升序" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "降序" + diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100644 index 0000000..0ee10ed --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "向上" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "首頁" +msgid "IDS_MF_BODY_ALERTS" +msgstr "提示" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "螢幕牆紙" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "我的相簿" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "我的短片" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "版權狀態" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "供應商" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "計數" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "包含" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "個人" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "間隔" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "重新命名" + +msgid "IDS_MF_BODY_TIME" +msgstr "時間" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "計時" + +msgid "IDS_MF_BODY_TYPE" +msgstr "類型" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "無限制" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "取代" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "聯絡人來電鈴聲" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "名稱" + +msgid "IDS_MF_POP_COPIED" +msgstr "已複製" + +msgid "IDS_MF_POP_MOVED" +msgstr "已移動" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "無已選擇項目" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "堆積記憶體不足" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "記憶體不足。請刪除一些項目" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "建立日期" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "GPS 資訊" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "GPS緯度" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "GPS經度" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "GPS 版本" + +msgid "IDS_MF_BODY_NAME" +msgstr "名稱" + +msgid "IDS_MF_SK_DETAILS" +msgstr "詳細資料" + +msgid "IDS_MF_BODY_ANY" +msgstr "任何" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "可供使用" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "執行" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "轉寄中" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "不可以" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "正在初始化 MMC 數據..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "可以" + +msgid "IDS_MF_BODY_PRINT" +msgstr "列印" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "有效期" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "新資料夾" + +msgid "IDS_MF_OPT_EDIT" +msgstr "編輯" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "排列按" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "移到這裡" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "繼續" + +msgid "IDS_MF_POP_COPYING" +msgstr "正在複製..." + +msgid "IDS_MF_POP_MOVING" +msgstr "正在移動..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "貼在這裡" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "不支援的檔案類型" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "詳細檢視" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "升序" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "降序" + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..3ba642e --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,158 @@ +msgid "IDS_MF_TAB_UP" +msgstr "向上" + +msgid "IDS_MF_BUTTON_HOME" +msgstr "家" +msgid "IDS_MF_BODY_ALERTS" +msgstr "提醒" + +msgid "IDS_MF_BODY_WALLPAPERS" +msgstr "底色圖案" + +msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM" +msgstr "我的相簿" + +msgid "IDS_MF_BODY_MY_VIDEO_CLIPS" +msgstr "我的影片片段" + +msgid "IDS_MF_BODY_RIGHT_STATUS" +msgstr "版權狀態" + +msgid "IDS_MF_BODY_VENDOR" +msgstr "供應商" + +msgid "IDS_MF_HEADER_COUNT" +msgstr "計數" + +msgid "IDS_MF_BODY_CONTAINS" +msgstr "包含" + +msgid "IDS_MF_BODY_INDIVIDUAL" +msgstr "個別" + +msgid "IDS_MF_BODY_INTERVAL" +msgstr "間隔" + +msgid "IDS_MF_BODY_RENAME_ABB" +msgstr "重新命名" + +msgid "IDS_MF_BODY_TIME" +msgstr "時間" + +msgid "IDS_MF_BODY_TIMED_COUNT" +msgstr "計時數" + +msgid "IDS_MF_BODY_TYPE" +msgstr "類型" + +msgid "IDS_MF_BODY_UNLIMITED" +msgstr "無限制" + +msgid "IDS_MF_BUTTON_REPLACE_ABB" +msgstr "覆蓋" + +msgid "IDS_MF_OPT_CALLER_RINGTONE" +msgstr "來電者鈴聲" + +msgid "IDS_MF_OPT_LISTBY_NAME" +msgstr "名稱" + +msgid "IDS_MF_POP_COPIED" +msgstr "已複製" + +msgid "IDS_MF_POP_MOVED" +msgstr "已移動" + +msgid "IDS_MF_POP_NOTHING_SELECTED" +msgstr "未選擇任何項目" + +msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY" +msgstr "堆積記憶體不足" + +msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS" +msgstr "記憶體不足。請刪除部分項目" + +msgid "IDS_MF_BODY_CREATED_DATE" +msgstr "建立日期" + +msgid "IDS_MF_BODY_GPS_INFORMATION" +msgstr "GPS 資訊" + +msgid "IDS_MF_BODY_GPS_LATITUDE" +msgstr "GPS緯度" + +msgid "IDS_MF_BODY_GPS_LONGITUDE" +msgstr "GPS經度" + +msgid "IDS_MF_BODY_GPS_VERSION" +msgstr "GPS 版本" + +msgid "IDS_MF_BODY_NAME" +msgstr "名稱" + +msgid "IDS_MF_SK_DETAILS" +msgstr "詳細資料" + +msgid "IDS_MF_BODY_ANY" +msgstr "任何" + +msgid "IDS_MF_BODY_AVAILABLE_USES" +msgstr "可供使用" + +msgid "IDS_MF_BODY_EXECUTE" +msgstr "執行" + +msgid "IDS_MF_BODY_FORWARDING" +msgstr "正在轉寄" + +msgid "IDS_MF_BODY_IMPOSSIBLE" +msgstr "不可能" + +msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING" +msgstr "正在初始化 MMC 資料..." + +msgid "IDS_MF_BODY_POSSIBLE" +msgstr "可能" + +msgid "IDS_MF_BODY_PRINT" +msgstr "列印" + +msgid "IDS_MF_BODY_VALIDITY" +msgstr "有效期" + +msgid "IDS_MF_HEADER_NEW_FOLDER" +msgstr "新資料夾" + +msgid "IDS_MF_OPT_EDIT" +msgstr "編輯" + +msgid "IDS_MF_OPT_LIST_BY" +msgstr "排列依據" + +msgid "IDS_MF_OPT_MOVE_HERE" +msgstr "移到這裡" + +msgid "IDS_MF_POP_CONTINUE" +msgstr "繼續" + +msgid "IDS_MF_POP_COPYING" +msgstr "正在複製..." + +msgid "IDS_MF_POP_MOVING" +msgstr "正在移動..." + +msgid "IDS_MF_POP_PASTE_HERE" +msgstr "在此貼上" + +msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE" +msgstr "不支援的檔案類型" + +msgid "IDS_MF_OPT_DETAIL_VIEW" +msgstr "詳細查看" + +msgid "IDS_MF_POP_ASCENDING" +msgstr "遞增" + +msgid "IDS_MF_POP_DESCENDING" +msgstr "遞減" + diff --git a/src/common/file-system/mf-ug-file-attr.c b/src/common/file-system/mf-ug-file-attr.c new file mode 100755 index 0000000..082e394 --- /dev/null +++ b/src/common/file-system/mf-ug-file-attr.c @@ -0,0 +1,1072 @@ +/* + * 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 +#include +#include +#include +#include +#include "mf-ug-fs-util.h" + +#define MF_UG_PHONE_DEFAULT_LEVEL 2 /*the phone path is /opt/media, it consists of opt and media two parts*/ +#define MF_UG_MMC_DEFAULT_LEVEL 3 /*the mmc path is /opt/storage/sdcard, it consists of opt and storage and sdcard three parts*/ + +struct _ug_ftype_by_mime { + const char *mime; + mf_ug_fs_file_type ftype; +}; + +static struct _ug_ftype_by_mime mime_type[] = { + {"image/png", UG_FILE_TYPE_IMAGE}, + {"image/jpeg", UG_FILE_TYPE_IMAGE}, + {"image/gif", UG_FILE_TYPE_IMAGE}, + {"image/bmp", UG_FILE_TYPE_IMAGE}, + {"image/vnd.wap.wbmp", UG_FILE_TYPE_IMAGE}, + + {"video/x-msvideo", UG_FILE_TYPE_VIDEO}, + {"video/mp4", UG_FILE_TYPE_VIDEO}, + {"video/3gpp", UG_FILE_TYPE_VIDEO}, + {"video/x-ms-asf", UG_FILE_TYPE_VIDEO}, + {"video/x-ms-wmv", UG_FILE_TYPE_VIDEO}, + {"video/x-matroska", UG_FILE_TYPE_VIDEO}, + + {"audio/mpeg", UG_FILE_TYPE_MUSIC}, + {"audio/x-wav", UG_FILE_TYPE_MUSIC}, + {"application/x-smaf", UG_FILE_TYPE_MUSIC}, + {"audio/mxmf", UG_FILE_TYPE_MUSIC}, + {"audio/midi", UG_FILE_TYPE_MUSIC}, + {"audio/x-xmf", UG_FILE_TYPE_MUSIC}, + {"audio/x-ms-wma", UG_FILE_TYPE_MUSIC}, + {"audio/aac", UG_FILE_TYPE_MUSIC}, + {"audio/ac3", UG_FILE_TYPE_MUSIC}, + {"audio/ogg", UG_FILE_TYPE_MUSIC}, + {"audio/vorbis", UG_FILE_TYPE_MUSIC}, + {"audio/imelody", UG_FILE_TYPE_MUSIC}, + {"audio/iMelody", UG_FILE_TYPE_MUSIC}, + {"audio/x-rmf", UG_FILE_TYPE_MUSIC}, + {"application/vnd.smaf", UG_FILE_TYPE_MUSIC}, + {"audio/mobile-xmf", UG_FILE_TYPE_MUSIC}, + {"audio/mid", UG_FILE_TYPE_MUSIC}, + {"audio/vnd.ms-playready.media.pya", UG_FILE_TYPE_MUSIC}, + {"audio/imy", UG_FILE_TYPE_MUSIC}, + {"audio/m4a", UG_FILE_TYPE_MUSIC}, + {"audio/melody", UG_FILE_TYPE_MUSIC}, + {"audio/mmf", UG_FILE_TYPE_MUSIC}, + {"audio/mp3", UG_FILE_TYPE_MUSIC}, + {"audio/mp4", UG_FILE_TYPE_MUSIC}, + {"audio/MP4A-LATM", UG_FILE_TYPE_MUSIC}, + {"audio/mpeg3", UG_FILE_TYPE_MUSIC}, + {"audio/mpeg4", UG_FILE_TYPE_MUSIC}, + {"audio/mpg", UG_FILE_TYPE_MUSIC}, + {"audio/mpg3", UG_FILE_TYPE_MUSIC}, + {"audio/smaf", UG_FILE_TYPE_MUSIC}, + {"audio/sp-midi", UG_FILE_TYPE_MUSIC}, + {"audio/wav", UG_FILE_TYPE_MUSIC}, + {"audio/wave", UG_FILE_TYPE_MUSIC}, + {"audio/wma", UG_FILE_TYPE_MUSIC}, + {"audio/xmf", UG_FILE_TYPE_MUSIC}, + {"audio/x-mid", UG_FILE_TYPE_MUSIC}, + {"audio/x-midi", UG_FILE_TYPE_MUSIC}, + {"audio/x-mp3", UG_FILE_TYPE_MUSIC}, + {"audio/-mpeg", UG_FILE_TYPE_MUSIC}, + {"audio/x-mpeg", UG_FILE_TYPE_MUSIC}, + {"audio/x-mpegaudio", UG_FILE_TYPE_MUSIC}, + {"audio/x-mpg", UG_FILE_TYPE_MUSIC}, + {"audio/x-ms-asf", UG_FILE_TYPE_MUSIC}, + {"audio/x-wave", UG_FILE_TYPE_MUSIC}, + + {"application/pdf", UG_FILE_TYPE_PDF}, + + {"application/msword", UG_FILE_TYPE_DOC}, + {"application/vnd.openxmlformats-officedocument.wordprocessingml.document", UG_FILE_TYPE_DOC}, + + {"application/vnd.ms-powerpoint", UG_FILE_TYPE_PPT}, + {"application/vnd.openxmlformats-officedocument.presentationml.presentation", UG_FILE_TYPE_PPT}, + + {"application/vnd.ms-excel", UG_FILE_TYPE_EXCEL}, + {"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", UG_FILE_TYPE_EXCEL}, + + {"audio/AMR", UG_FILE_TYPE_VOICE}, + {"audio/AMR-WB", UG_FILE_TYPE_VOICE}, + {"audio/amr", UG_FILE_TYPE_VOICE}, + {"audio/amr-wb", UG_FILE_TYPE_VOICE}, + {"audio/x-amr", UG_FILE_TYPE_VOICE}, + + {"text/html", UG_FILE_TYPE_HTML}, + + {"application/x-shockwave-flash", UG_FILE_TYPE_FLASH}, + {"video/x-flv", UG_FILE_TYPE_FLASH}, + + {"text/plain", UG_FILE_TYPE_TXT}, + + {"text/x-opml+xml", UG_FILE_TYPE_RSS}, + + {"text/vnd.sun.j2me.app-descriptor", UG_FILE_TYPE_JAVA}, + {"application/x-java-archive", UG_FILE_TYPE_JAVA}, + + {NULL, UG_FILE_TYPE_ETC}, +}; + +static char *icon_array[UG_FILE_TYPE_MAX] = { + [UG_FILE_TYPE_DIR] = UG_ICON_FOLDER, + [UG_FILE_TYPE_IMAGE] = UG_ICON_IMAGE, + [UG_FILE_TYPE_VIDEO] = UG_ICON_VIDEO, + [UG_FILE_TYPE_MUSIC] = UG_ICON_MUSIC, + [UG_FILE_TYPE_SOUND] = UG_ICON_SOUND, + [UG_FILE_TYPE_PDF] = UG_ICON_PDF, + [UG_FILE_TYPE_DOC] = UG_ICON_DOC, + [UG_FILE_TYPE_PPT] = UG_ICON_PPT, + [UG_FILE_TYPE_EXCEL] = UG_ICON_EXCEL, + [UG_FILE_TYPE_VOICE] = UG_ICON_VOICE, + [UG_FILE_TYPE_HTML] = UG_ICON_HTML, + [UG_FILE_TYPE_FLASH] = UG_ICON_FLASH, + [UG_FILE_TYPE_TXT] = UG_ICON_TXT, + [UG_FILE_TYPE_VCONTACT] = UG_ICON_VCONTACT, + [UG_FILE_TYPE_VCALENDAR] = UG_ICON_VCALENDAR, + [UG_FILE_TYPE_VNOTE] = UG_ICON_VNOTE, + [UG_FILE_TYPE_RSS] = UG_ICON_RSS, + [UG_FILE_TYPE_JAVA] = UG_ICON_JAVA, +}; + +/********************* +**Function name: __mf_ug_file_attr_get_category_by_file_ext +**Parameter: const char* file_ext +**Return value: mf_ug_fs_file_type +** +**Action: +** Get file category by extention +** +*********************/ +static mf_ug_fs_file_type __mf_ug_file_attr_get_category_by_file_ext(const char *file_ext, const char *fullpath) +{ + int i = 0; + + if (file_ext == NULL) { + return UG_FILE_TYPE_ETC; + } + + if (file_ext[0] == '.') { + i = 1; + } + + switch (file_ext[i]) { + case 'a': + case 'A': + if (strcasecmp("ASF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("AMR", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VOICE; + } + if (strcasecmp("AWB", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VOICE; + } + if (strcasecmp("AAC", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MUSIC; + } + if (strcasecmp("AVI", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("AAC", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MUSIC; + } + + break; + case 'b': + case 'B': + if (strcasecmp("BMP", &file_ext[i]) == 0) { + return UG_FILE_TYPE_IMAGE; + } + break; + case 'd': + case 'D': + if (strcasecmp("DOC", &file_ext[i]) == 0) { + return UG_FILE_TYPE_DOC; + } + if (strcasecmp("DOCX", &file_ext[i]) == 0) { + return UG_FILE_TYPE_DOC; + } + if (strcasecmp("DIVX", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + break; + case 'g': + case 'G': + if (strcasecmp("GIF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_IMAGE; + } + if (strcasecmp("G72", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MUSIC; + } + break; + case 'h': + case 'H': + if (strcasecmp("H263", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MUSIC; + } + if (strcasecmp("HTML", &file_ext[i]) == 0) { + return UG_FILE_TYPE_HTML; + } + if (strcasecmp("HTM", &file_ext[i]) == 0) { + return UG_FILE_TYPE_HTML; + } + break; + case 'i': + case 'I': + if (strcasecmp("IMY", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("IPK", &file_ext[i]) == 0) { + return UG_FILE_TYPE_APP; + } + break; + case 'j': + case 'J': + if (strcasecmp("JAD", &file_ext[i]) == 0) { + return UG_FILE_TYPE_JAVA; + } + if (strcasecmp("JAR", &file_ext[i]) == 0) { + return UG_FILE_TYPE_JAVA; + } + + if (strcasecmp("JPG", &file_ext[i]) == 0) { + return UG_FILE_TYPE_IMAGE; + } + if (strcasecmp("JPEG", &file_ext[i]) == 0) { + return UG_FILE_TYPE_IMAGE; + } + if (strcasecmp("JPE", &file_ext[i]) == 0) { + return UG_FILE_TYPE_IMAGE; + } + break; + case 'm': + case 'M': + if (strcasecmp("MMF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("MP3", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MUSIC; + } + if (strcasecmp("MID", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("MIDI", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("MP4", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("MPG", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("MPEG", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("M4A", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MUSIC; + } + if (strcasecmp("M3G", &file_ext[i]) == 0) { + return UG_FILE_TYPE_FLASH; + } + if (strcasecmp("MXMF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("MKV", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("MKA", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MUSIC; + } + break; + case 'o': + case 'O': + if (strcasecmp("opml", &file_ext[i]) == 0) { + return UG_FILE_TYPE_RSS; + } + break; + case 'p': + case 'P': + if (strcasecmp("PNG", &file_ext[i]) == 0) { + return UG_FILE_TYPE_IMAGE; + } + if (strcasecmp("PJPEG", &file_ext[i]) == 0) { + return UG_FILE_TYPE_IMAGE; + } + if (strcasecmp("PDF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_PDF; + } + if (strcasecmp("PPT", &file_ext[i]) == 0) { + return UG_FILE_TYPE_PPT; + } + if (strcasecmp("PPTX", &file_ext[i]) == 0) { + return UG_FILE_TYPE_PPT; + } + if (strcasecmp("PEM", &file_ext[i]) == 0) { + return UG_FILE_TYPE_CERTIFICATION; + } + break; + case 'r': + case 'R': + break; + case 's': + case 'S': + if (strcasecmp("SDP", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("SPM", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("SMP", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("SPF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("SWF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_FLASH; + } + if (strcasecmp("SCN", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MOVIE_MAKER; + } + if (strcasecmp("SVG", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SVG; + } + if (strcasecmp("SVGZ", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SVG; + } + break; + case 't': + case 'T': + if (strcasecmp("TXT", &file_ext[i]) == 0) { + return UG_FILE_TYPE_TXT; + } + if (strcasecmp("THM", &file_ext[i]) == 0) { + return UG_FILE_TYPE_THEME; + } + break; + case 'v': + case 'V': + if (strcasecmp("VCF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VCONTACT; + } + if (strcasecmp("VCS", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VCALENDAR; + } + if (strcasecmp("VNT", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VNOTE; + } + if (strcasecmp("VBM", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VBOOKMARK; + } + break; + case 'w': + case 'W': + if (strcasecmp("WAV", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("WBMP", &file_ext[i]) == 0) { + return UG_FILE_TYPE_IMAGE; + } + if (strcasecmp("WGT", &file_ext[i]) == 0) { + return UG_FILE_TYPE_WGT; + } + if (strcasecmp("WMA", &file_ext[i]) == 0) { + return UG_FILE_TYPE_MUSIC; + } + if (strcasecmp("WMV", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + break; + case 'x': + case 'X': + if (strcasecmp("XLS", &file_ext[i]) == 0) { + return UG_FILE_TYPE_EXCEL; + } + if (strcasecmp("XLSX", &file_ext[i]) == 0) { + return UG_FILE_TYPE_EXCEL; + } + if (strcasecmp("XMF", &file_ext[i]) == 0) { + return UG_FILE_TYPE_SOUND; + } + if (strcasecmp("XHTML", &file_ext[i]) == 0) { + return UG_FILE_TYPE_HTML; + } + break; + case '3': + if (strcasecmp("3GP", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("3GPP", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + if (strcasecmp("3G2", &file_ext[i]) == 0) { + return UG_FILE_TYPE_VIDEO; + } + break; + } + + return UG_FILE_TYPE_ETC; +} + +/********************* +**Function name: __mf_ug_file_attr_is_valid_name +**Parameter: +** const char *filename: the file/dir name we need to check +** +**Return value: +** -0x14 if the name is invalid +** 0 if the name is valid +** +**Action: +** check if the name is valid by file name +** +*********************/ +static int __mf_ug_file_attr_is_valid_name(const char *filename) +{ + char *pattern; + int ret, z, cflags = 0; + char ebuf[128]; + regex_t reg; + regmatch_t pm[1]; + const size_t nmatch = 1; + /*/ToDo: ignore the file star with . */ + if (strncmp(filename, ".", 1) == 0) { + return MYFILE_ERR_INVALID_FILE_NAME; + } + + pattern = MYFILE_NAME_PATTERN; + z = regcomp(®, pattern, cflags); + + if (z != 0) { + regerror(z, ®, ebuf, sizeof(ebuf)); + fprintf(stderr, "%s: pattern '%s' \n", ebuf, pattern); + return MYFILE_ERR_INVALID_FILE_NAME; + } + + z = regexec(®, filename, nmatch, pm, 0); + if (z == REG_NOMATCH) { + ret = MYFILE_ERR_NONE; + } else { + ret = MYFILE_ERR_INVALID_FILE_NAME; + } + regfree(®); + return ret; +} + + +/****************************** +** Prototype : __mf_ug_file_attr_default_icon_get_by_type +** Description : Samsung +** Input : mf_ug_fs_file_type ftype +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static char *__mf_ug_file_attr_default_icon_get_by_type(mf_ug_fs_file_type ftype) +{ + char *icon_path = NULL; + + if (icon_array[ftype]) { + icon_path = strdup(icon_array[ftype]); + } else { + icon_path = strdup(UG_DEFAULT_ICON); + } + + return icon_path; +} + + +/****************************** +** Prototype : mf_ug_file_attr_get_parent_path +** Description : Samsung +** Input : const char* path +** char* parent_path +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +int mf_ug_file_attr_get_parent_path(const char *path, char **parent_path) +{ + ug_mf_retvm_if(path == NULL, MYFILE_ERR_INVALID_ARG, "path is NULL"); + ug_mf_retvm_if(parent_path == NULL, MYFILE_ERR_INVALID_ARG, "parent_path is NULL"); + ug_debug("Path :::: [%s]", path); + + *parent_path = g_strdup(path); + if (*parent_path == NULL) + return MYFILE_ERR_ALLOCATE_FAIL; + + const char *name = NULL; + name = ecore_file_file_get(path); + /* + ** input path and parent_path are check in the caller. + ** parent_path is full path must be like /opt/media/file.ext + ** name is file.ext + ** strlen(parent_path) should large than strlen(name) normally. + ** to take exception like input path is "", we add a if condition + */ + if (strlen(*parent_path) > strlen(name)) + (*parent_path)[strlen(*parent_path) - strlen(name) - 1] = '\0'; + + if (strlen(*parent_path) == 0) { + *parent_path = g_strdup("/"); + } + + return MYFILE_ERR_NONE; +} + + +/********************* +**Function name: mf_get_category +**Parameter: +** const char* filepath: file fullpath +** mf_ug_fs_file_type *category: output parameter of category +**Return value: +** error code +** +**Action: +** Get file category by file full path +** +*********************/ +int mf_ug_file_attr_get_file_category(const char *filepath, mf_ug_fs_file_type * category) +{ + int i = 0; + int flag = 0; + + if (mf_ug_file_attr_is_dir(filepath)) { + *category = UG_FILE_TYPE_DIR; + return MYFILE_ERR_NONE; + } + + const char *filename = NULL; + filename = ecore_file_file_get(filepath); + /*/return value ceck */ + if (filename == NULL) { + *category = UG_FILE_TYPE_NONE; + return MYFILE_ERR_SRC_ARG_INVALID; + } + char file_ext[FILE_EXT_LEN_MAX + 1] = { 0 }; + /*/ToDo: error file name like the last letter is "." */ + for (i = strlen(filename); i >= 0; i--) { + if (filename[i] == '.') { + strncpy(file_ext, &filename[i + 1], FILE_EXT_LEN_MAX + 1); + flag = 1; + break; + } + + if (filename[i] == '/') { + flag = 0; + break; + } + } + + if (flag == 1) { + *category = __mf_ug_file_attr_get_category_by_file_ext(file_ext, filepath); + return MYFILE_ERR_NONE; + } else { + *category = UG_FILE_TYPE_NONE; + return MYFILE_ERR_GET_CATEGORY_FAIL; + } +} + +/********************* +**Function name: mf_ug_file_attr_get_file_stat +**Parameter: +** const char* filename: file name +** ugFsNodeInfo **node: output parameter of what we need to refine +**Return value: +** error code +** +**Action: +** Get file size and last modified date by file path +** +*********************/ +int mf_ug_file_attr_get_file_stat(const char *filename, ugFsNodeInfo ** node) +{ + struct stat statbuf; + + ug_mf_retvm_if(filename == NULL, MYFILE_ERR_INVALID_ARG, "filename is null"); + ug_mf_retvm_if(node == NULL, MYFILE_ERR_INVALID_ARG, "node is null"); + + if (stat(filename, &statbuf) == -1) { + return MYFILE_ERR_GET_STAT_FAIL; + } + + (*node)->size = statbuf.st_size; + (*node)->date = statbuf.st_mtime; + + return MYFILE_ERR_NONE; +} + +/********************* +**Function name: mf_ug_file_attr_is_dir +**Parameter: +** const char* filename: file fullpath +**Return value: +** if path is a directory, return 1 +** else, return 0 +** +**Action: +** check if the file path is Directory +** +*********************/ +int mf_ug_file_attr_is_dir(const char *filepath) +{ + return ecore_file_is_dir(filepath); +} + +/********************* +**Function name: mf_ug_file_attr_get_store_type_by_full +**Parameter: +** const char* filepath: file full path +** mf_ug_storage_type *store_type: output parameter of storage type +**Return value: +** error code +** +**Action: +** Get file storage type by file path +** +*********************/ +int mf_ug_file_attr_get_store_type_by_full(const char *filepath, mf_ug_storage_type * store_type) +{ + if (filepath == NULL || store_type == NULL) { + return MYFILE_ERR_SRC_ARG_INVALID; + } + + if (strncmp(filepath, PHONE_FOLDER, strlen(PHONE_FOLDER)) == 0) { + *store_type = MF_UG_PHONE; + return MYFILE_ERR_NONE; + } else if (strncmp(filepath, MEMORY_FOLDER, strlen(MEMORY_FOLDER)) == 0) { + *store_type = MF_UG_MMC; + return MYFILE_ERR_NONE; + } else { + *store_type = MF_UG_NONE; + return MYFILE_ERR_STORAGE_TYPE_ERROR; + } +} + +/********************* +**Function name: mf_ug_file_attr_get_file_ext +**Parameter: +** const char* filepath: file full path +** char *file_ext: output parameter of file extension +** +**Return value: +** error code +** +**Action: +** get file extension by file full path +** +*********************/ +int mf_ug_file_attr_get_file_ext(const char *filepath, char *file_ext) +{ + const char *filename = NULL; + filename = ecore_file_file_get(filepath); + + if (filename == NULL) { + return MYFILE_ERR_INVALID_FILE_NAME; + } + + char *pdot = strrchr(filename, '.'); + + if (!pdot) { + return MYFILE_ERR_EXT_GET_ERROR; + } else if (pdot != filepath) { + memcpy(file_ext, pdot + 1, strlen(pdot) - 1); + return MYFILE_ERR_NONE; + } else { + return MYFILE_ERR_EXT_GET_ERROR; + } +} + + + +/********************* +**Function name: mf_ug_file_attr_is_right_dir_path +**Parameter: +** const char *filename: the file/dir name we need to check +** +**Return value: +** error code +** +**Action: +** check if the dir path is correct +** +*********************/ +int mf_ug_file_attr_is_right_dir_path(const char *dir_path) +{ + int result = MYFILE_ERR_NONE; + int length = 0; + + length = strlen(dir_path); + if (length == 0) { + return MYFILE_ERR_INVALID_DIR_PATH; + } + + if (dir_path[length - 1] == '/' && length > 1) { + return MYFILE_ERR_INVALID_DIR_PATH; + } + + if (dir_path[0] != '/') { + return MYFILE_ERR_INVALID_DIR_PATH; + } + + const char *file_name = NULL; + file_name = ecore_file_file_get(dir_path); + result = __mf_ug_file_attr_is_valid_name(file_name); + + if (result != MYFILE_ERR_NONE) { + ug_mf_error("Is NOT Valid dir path name"); + } + + return result; +} + +/********************* +**Function name: mf_ug_file_attr_is_right_file_path +**Parameter: +** const char *filename: the file/dir name we need to check +** +**Return value: +** error code +** +**Action: +** check if the file path is correct +** +*********************/ +int mf_ug_file_attr_is_right_file_path(const char *file_path) +{ + int result = MYFILE_ERR_NONE; + + if (strlen(file_path) == 0) { + return MYFILE_ERR_INVALID_FILE_PATH; + } + + if (file_path[0] != '/') { + return MYFILE_ERR_INVALID_DIR_PATH; + } + + const char *file_name = NULL; + file_name = ecore_file_file_get(file_path); + result = __mf_ug_file_attr_is_valid_name(file_name); + if (result != MYFILE_ERR_NONE) { + ug_mf_error("Is NOT Valid dir path name"); + } + + return result; +} + + + +char *mf_ug_file_attr_get_file_icon(MediaSvcHandle *handle, const char *file_path, int *error_code) +{ + int index = 0; + char *icon_path = NULL; + mf_ug_fs_file_type ftype = UG_FILE_TYPE_NONE; + char *thumbnail_path = NULL; + char mime[255] = { '\0', }; + + ug_mf_retvm_if(file_path == NULL, NULL, "file_path is NULL"); + + + if (aul_get_mime_from_file(file_path, mime, sizeof(mime)) < 0) { + ug_mf_warnig("Fail to aul_get_mime_from_file(), set etc icon"); + return g_strdup(icon_path); + } + + for (index = 0; mime_type[index].mime; index++) { + if (strncmp(mime, mime_type[index].mime, strlen(mime)) == 0) { + ftype = mime_type[index].ftype; + break; + } + } + + switch (ftype) { + case UG_FILE_TYPE_IMAGE: + { + int err = 0; + thumbnail_path = calloc(1, (MYFILE_FILE_PATH_LEN_MAX + 1)); + if (thumbnail_path == NULL) { + return NULL; + } + + err = minfo_get_thumb_path(handle, file_path, thumbnail_path, MYFILE_FILE_PATH_LEN_MAX); + if (err == 0) { + icon_path = thumbnail_path; + } else { + icon_path = NULL; + if (error_code) + *error_code = err; + } + } + break; + case UG_FILE_TYPE_VIDEO: + { + int err = 0; + thumbnail_path = calloc(1, (MYFILE_FILE_PATH_LEN_MAX + 1)); + if (thumbnail_path == NULL) { + return NULL; + } + + err = minfo_get_thumb_path_for_video(handle, file_path, thumbnail_path, MYFILE_FILE_PATH_LEN_MAX); + + if (err == 0) { + icon_path = thumbnail_path; + } else { + icon_path = NULL; + if (error_code) + *error_code = err; + } + } + break; + default: + icon_path = __mf_ug_file_attr_default_icon_get_by_type(ftype); + break; + } + + ug_mf_debug("mime [%s], file type [%d], icon_path [%s]", mime, ftype, icon_path); + + return icon_path; +} + +static int mf_ug_file_attr_get_path_level(const char *fullpath, int *level) +{ + if (fullpath == NULL) { + return MYFILE_ERR_SRC_ARG_INVALID; + } + + if (mf_ug_file_attr_is_right_dir_path(fullpath) != 0) { + return MYFILE_ERR_INVALID_PATH; + } + + mf_ug_storage_type storage_t = 0; + int start_level = 0; + int error_code = mf_ug_file_attr_get_store_type_by_full(fullpath, &storage_t); + if (error_code != 0) { + return error_code; + } + + if (storage_t == MF_UG_PHONE) { + start_level = MF_UG_PHONE_DEFAULT_LEVEL; + } else if (storage_t == MF_UG_MMC) { + start_level = MF_UG_MMC_DEFAULT_LEVEL; + } + + char *temp = strdup(fullpath); + if (temp == NULL) { + return MYFILE_ERR_UNKNOW_ERROR; + } + + int count = 0; + + gchar **result = NULL; + gchar **params = NULL; + result = g_strsplit(temp, "/", 0); + + if (result == NULL) { + free(temp); + temp = NULL; + return MYFILE_ERR_UNKNOW_ERROR; + } + + for (params = result; *params; params++) { + count++; + } + + g_strfreev(result); + *level = count - start_level - 1; + free(temp); + return MYFILE_ERR_NONE; + +} + + +int mf_ug_file_attr_is_in_system_folder(char *fullpath, int level, bool * result) +{ + if (fullpath == NULL) { + return MYFILE_ERR_SRC_ARG_INVALID; + } + + mf_ug_storage_type storage_t = 0; + int error_code = mf_ug_file_attr_get_store_type_by_full(fullpath, &storage_t); + if (error_code != 0) { + return error_code; + } + + const char *name = NULL; + name = ecore_file_file_get(fullpath); + char *parent_path = malloc(MYFILE_DIR_PATH_LEN_MAX + 1); + + if (parent_path == NULL) { + return MYFILE_ERR_ALLOCATE_FAIL; + } + memset(parent_path, 0, MYFILE_DIR_PATH_LEN_MAX + 1); + error_code = mf_ug_file_attr_get_parent_path(fullpath, &parent_path); + + if (error_code != 0) { + return error_code; + } + + if (storage_t == MF_UG_PHONE || storage_t == MF_UG_MMC) { + if (level == 1) { + if ((strlen(name) == strlen(IMAGE_AND_VIDEO)) && strcmp(name, IMAGE_AND_VIDEO) == 0) { + *result = true; + } else if ((strlen(name) == strlen(SOUND_AND_MUSIC)) && strcmp(name, SOUND_AND_MUSIC) == 0) { + *result = true; + } else if ((strlen(name) == strlen(DOWNLOADS)) && strcmp(name, DOWNLOADS) == 0) { + *result = true; + } else if ((strlen(name) == strlen(CAMERA_SHOTS)) && strcmp(name, CAMERA_SHOTS) == 0) { + *result = true; + } else { + *result = false; + } + } else if (level == 2) { + const char *parent_name = NULL; + parent_name = ecore_file_file_get(parent_path); + if (storage_t == MF_UG_PHONE && (strlen(parent_name) == strlen(DOWNLOADS)) && strcmp(parent_name, DOWNLOADS) == 0) { + if ((strlen(name) == strlen(OTHERS)) && !strcmp(OTHERS, name)) { + *result = true; + } else { + *result = false; + } + } else if ((strlen(parent_name) == strlen(SOUND_AND_MUSIC)) && strcmp(parent_name, SOUND_AND_MUSIC) == 0) { + if ((strlen(name) == strlen(FM_RADIO)) && !strcmp(FM_RADIO, name)) { + *result = true; + } else if ((strlen(name) == strlen(MUSIC)) && !strcmp(MUSIC, name)) { + *result = true; + } else if ((strlen(name) == strlen(RINGTONES)) && !strcmp(RINGTONES, name)) { + *result = true; + } else if ((strlen(name) == strlen(ALERTS)) && !strcmp(ALERTS, name)) { + *result = true; + } else if ((strlen(name) == strlen(VOICE_RECORDER)) && !strcmp(VOICE_RECORDER, name)) { + *result = true; + } else { + *result = false; + } + } else if ((strlen(parent_name) == strlen(IMAGE_AND_VIDEO)) && strcmp(parent_name, IMAGE_AND_VIDEO) == 0) { + if ((strlen(name) == strlen(WALLPAPER)) && !strcmp(WALLPAPER, name)) { + *result = true; + } else if ((strlen(name) == strlen(MY_PHOTO_CLIPS)) && !strcmp(MY_PHOTO_CLIPS, name)) { + *result = true; + } else if ((strlen(name) == strlen(MY_ALBUM)) && !strcmp(MY_ALBUM, name)) { + *result = true; + } else if ((strlen(name) == strlen(MY_VIDEO_CLIPS)) && !strcmp(MY_VIDEO_CLIPS, name)) { + *result = true; + } else { + *result = false; + } + } else { + *result = false; + } + } else { + if (parent_path) { + free(parent_path); + parent_path = NULL; + } + return MYFILE_ERR_STORAGE_TYPE_ERROR; + } + } + + else { + if (parent_path) { + free(parent_path); + parent_path = NULL; + } + *result = false; + return MYFILE_ERR_STORAGE_TYPE_ERROR; + } + + if (parent_path) { + free(parent_path); + parent_path = NULL; + } + return MYFILE_ERR_NONE; +} + + +int mf_ug_file_attr_is_system_dir(char *fullpath, bool * result) +{ + if (fullpath == NULL) { + ug_debug("source argument invalid"); + return MYFILE_ERR_SRC_ARG_INVALID; + } + + if (mf_ug_file_attr_is_dir(fullpath) == 0) { + ug_debug("source is not exist"); + return MYFILE_ERR_SRC_NOT_EXIST; + } + + int level = 0; + int error_code = 0; + + error_code = mf_ug_file_attr_get_path_level(fullpath, &level); + if (error_code != 0) { + ug_debug("Fail to get path level"); + return error_code; + } + + if (level >= 3 || level <= 0) { + *result = false; + ug_debug("Path Level is wrong"); + return MYFILE_ERR_NONE; + } + error_code = mf_ug_file_attr_is_in_system_folder(fullpath, level, result); + + if (error_code != 0) { + ug_debug("Fail .. is in system folder err :: %d", error_code); + return error_code; + } + + return MYFILE_ERR_NONE; + +} + +mf_ug_fs_file_type mf_ug_file_attr_get_file_type_by_mime(const char *file_path) +{ + int index; + mf_ug_fs_file_type ftype = UG_FILE_TYPE_NONE; + char mime[255] = { '\0', }; + + if (aul_get_mime_from_file(file_path, mime, sizeof(mime)) < 0) { + ug_debug("Fail to aul_get_mime_from_file(), set etc icon"); + return ftype; + } + + for (index = 0; mime_type[index].mime; index++) { + if (strncmp(mime, mime_type[index].mime, strlen(mime)) == 0) { + ftype = mime_type[index].ftype; + return ftype; + } + } + + return ftype; +} diff --git a/src/common/file-system/mf-ug-fs-oper.c b/src/common/file-system/mf-ug-fs-oper.c new file mode 100755 index 0000000..71fa889 --- /dev/null +++ b/src/common/file-system/mf-ug-fs-oper.c @@ -0,0 +1,381 @@ +/* + * 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 +#include +#include "mf-ug-fs-util.h" + + + +/********************* +**Function name: __mf_ug_fs_oper_file_system_error +**Parameter: +** const char* src: source path +** const char* dst: destination path +** int check_option: check option +** +**Return value: +** error code +** +**Action: +** input parameter checking +** +*********************/ +static int __mf_ug_fs_oper_file_system_error(const char *src, const char *dst, int check_option) +{ + if ((check_option & MF_ERROR_CHECK_SRC_ARG_VALID) && (src == NULL)) { + return MYFILE_ERR_SRC_ARG_INVALID; + } + if ((check_option & MF_ERROR_CHECK_SRC_EXIST) && (!ecore_file_exists(src))) { + return MYFILE_ERR_SRC_NOT_EXIST; + } + + if (check_option & MF_ERROR_CHECK_SRC_PATH_VALID) { + if (!ecore_file_is_dir(src)) { + if (mf_ug_file_attr_is_right_file_path(src)) { + return MYFILE_ERR_INVALID_FILE_PATH; + } + } else { + if (mf_ug_file_attr_is_right_dir_path(src)) { + return MYFILE_ERR_INVALID_DIR_PATH; + } + } + } + return MYFILE_ERR_NONE; +} + +/********************* +**Function name: mf_ug_fs_oper_read_dir +**Parameter: +** char *path: path which we need to read +** Eina_List** dir_list: output parameter of dir list under specified path +** Eina_List** file_list: output parameter of file list under specified path +** +**Return value: +** error code +** +**Action: +** read element under the specified path +** +*********************/ +int mf_ug_fs_oper_read_dir(const char *path, Eina_List **dir_list, Eina_List **file_list) +{ + DIR *pDir = NULL; + struct dirent *ent; + + ug_mf_retvm_if(path == NULL, MYFILE_ERR_INVALID_ARG, "path is null"); + ug_mf_retvm_if(dir_list == NULL, MYFILE_ERR_INVALID_ARG, "dir_list is null"); + ug_mf_retvm_if(file_list == NULL, MYFILE_ERR_INVALID_ARG, "file_list is null"); + + int option = MF_ERROR_CHECK_SRC_ARG_VALID | MF_ERROR_CHECK_SRC_EXIST | MF_ERROR_CHECK_SRC_PATH_VALID; + int ret = __mf_ug_fs_oper_file_system_error(path, NULL, option); + + if (ret != MYFILE_ERR_NONE) { + return ret; + } + + pDir = opendir(path); + + if (pDir == NULL) { + return MYFILE_ERR_DIR_OPEN_FAIL; + } + + while ((ent = readdir(pDir)) != NULL) { + GString *childpath = NULL; + ugFsNodeInfo *pNode = NULL; + + if (strncmp(ent->d_name, ".", 1) == 0 || strcmp(ent->d_name, "..") == 0) { + continue; + } + + if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) { + continue; + } +#ifdef UG_DEBUG_FOLDER_OPTION + if ((ent->d_type & DT_DIR) != 0) { + if ((strlen(path) == strlen(PHONE_FOLDER)) && (strcmp(path, PHONE_FOLDER) == 0) + && (strlen(ent->d_name) == strlen(DEBUG_FOLDER)) && (strcmp(ent->d_name, DEBUG_FOLDER) == 0)) { + continue; + } + } +#endif + pNode = (ugFsNodeInfo *) malloc(sizeof(ugFsNodeInfo)); + + if (pNode == NULL) { + continue; + } + memset(pNode, 0, sizeof(ugFsNodeInfo)); + snprintf(pNode->path, sizeof(pNode->path), "%s", path); + snprintf(pNode->name, sizeof(pNode->name), "%s", ent->d_name); + if (ent->d_type & DT_DIR) { + pNode->type = UG_FILE_TYPE_DIR; + } else if (ent->d_type & DT_REG) { + mf_ug_file_attr_get_file_category(ent->d_name, &(pNode->type)); + } + childpath = g_string_new(path); + if (childpath == NULL) { + free(pNode); + pNode = NULL; + continue; + } + g_string_append_printf(childpath, "/%s", ent->d_name); + mf_ug_file_attr_get_file_stat(childpath->str, &pNode); + if (pNode->type == UG_FILE_TYPE_DIR) { + ug_mf_debug("dir append\n"); + *dir_list = eina_list_append(*dir_list, pNode); + } else { + ug_mf_debug("file append\n"); + ret = mf_ug_file_attr_get_file_ext(childpath->str, pNode->ext); + if (ret != MYFILE_ERR_NONE) { + memset(pNode->ext, 0, FILE_EXT_LEN_MAX); + } + *file_list = eina_list_append(*file_list, pNode); + } + + g_string_free(childpath, TRUE); + } + closedir(pDir); + + return MYFILE_ERR_NONE; +} + +/********************* +**Function name: __mf_ug_fs_oper_exec_filter +**Parameter: +** ugFsNodeInfo* pnode_info: the node we need to check for filter +** int option: filter +** +**Return value: +** error code +** +**Action: +** check if the node satisfied the filter option +*********************/ + +static bool __mf_ug_fs_oper_exec_filter(ugFsNodeInfo *pnode_info, int option) +{ + if (pnode_info == NULL) { + return FALSE; + } + if (option & UG_FILTER_CATEGORY_IMAGE) { + if (pnode_info->type == UG_FILE_TYPE_IMAGE) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_VIDEO) { + if (pnode_info->type == UG_FILE_TYPE_VIDEO) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_SOUND) { + if (pnode_info->type == UG_FILE_TYPE_SOUND) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_VOICE) { + if (pnode_info->type == UG_FILE_TYPE_VOICE) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_MUSIC) { + if (pnode_info->type == UG_FILE_TYPE_MUSIC) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_HTML) { + if (pnode_info->type == UG_FILE_TYPE_HTML) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_FLASH) { + if (pnode_info->type == UG_FILE_TYPE_FLASH) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_GAME) { + if (pnode_info->type == UG_FILE_TYPE_GAME) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_APP) { + if (pnode_info->type == UG_FILE_TYPE_APP) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_THEME) { + if (pnode_info->type == UG_FILE_TYPE_THEME) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_DOC) { + if (pnode_info->type == UG_FILE_TYPE_DOC) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_EXCEL) { + if (pnode_info->type == UG_FILE_TYPE_EXCEL) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_PPT) { + if (pnode_info->type == UG_FILE_TYPE_PPT) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_PDF) { + if (pnode_info->type == UG_FILE_TYPE_PDF) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_TXT) { + if (pnode_info->type == UG_FILE_TYPE_TXT) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_VCONTACT) { + if (pnode_info->type == UG_FILE_TYPE_VCONTACT) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_VCALENDAR) { + if (pnode_info->type == UG_FILE_TYPE_VCALENDAR) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_VNOTE) { + if (pnode_info->type == UG_FILE_TYPE_VNOTE) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_VBOOKMARK) { + if (pnode_info->type == UG_FILE_TYPE_VBOOKMARK) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_VIDEO_PROJECT) { + if (pnode_info->type == UG_FILE_TYPE_VIDEO_PROJECT) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_SVG) { + if (pnode_info->type == UG_FILE_TYPE_SVG) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_RSS) { + if (pnode_info->type == UG_FILE_TYPE_RSS) { + return TRUE; + } + } + if (option & UG_FILTER_CATEGORY_ETC) { + if (pnode_info->type == UG_FILE_TYPE_ETC) { + return TRUE; + } + } + return FALSE; +} + +int mf_ug_fs_oper_list_filter(Eina_List *in_list, Eina_List **out_list, int option) +{ + ug_mf_debug(); + if (in_list == NULL) { + return MYFILE_ERR_SRC_ARG_INVALID; + } + + if (out_list == NULL) { + return MYFILE_ERR_DST_ARG_INVALID; + } + + if (option == 0) { + *out_list = in_list; + return MYFILE_ERR_NONE; + } + + Eina_List *l = NULL; + ugFsNodeInfo *data = NULL; + EINA_LIST_FOREACH(in_list, l, data) { + if (__mf_ug_fs_oper_exec_filter(data, option)) { + *out_list = eina_list_append(*out_list, data); + } + } + return MYFILE_ERR_NONE; +} + +/****************************** +** Prototype : ug_mf_list_filter_by_extention +** Description : filter from list by extension +** Input : Eina_List *in_list +** Eina_List **out_list +** char* ext +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +int mf_ug_fs_oper_list_filter_by_extension(Eina_List *in_list, Eina_List **out_list, char *ext) +{ + if (in_list == NULL) { + return MYFILE_ERR_SRC_ARG_INVALID; + } + + if (out_list == NULL) { + return MYFILE_ERR_DST_ARG_INVALID; + } + + if (ext == NULL) { + *out_list = in_list; + return MYFILE_ERR_NONE; + } + + Eina_List *l = NULL; + ugFsNodeInfo *data = NULL; + + char *seps = ";"; + char *temp_ext = malloc(strlen(ext) + 1); + gchar **result = NULL; + gchar **params = NULL; + + EINA_LIST_FOREACH(in_list, l, data) { + memset(temp_ext, 0, strlen(ext) + 1); + strncpy(temp_ext, ext, strlen(ext)); + result = g_strsplit(temp_ext, seps, 0); + if (result == NULL) { + continue; + } + for (params = result; *params; params++) { + if (strcasecmp(data->ext, *params) == 0) { + *out_list = eina_list_append(*out_list, data); + break; + } + } + + g_strfreev(result); + result = NULL; + } + free(temp_ext); + return MYFILE_ERR_NONE; +} diff --git a/src/common/mf-ug-cb.c b/src/common/mf-ug-cb.c new file mode 100755 index 0000000..ac94a2b --- /dev/null +++ b/src/common/mf-ug-cb.c @@ -0,0 +1,1052 @@ +/* + * 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 +#include +#include +#include +#include + +#include "mf-ug-main.h" +#include "mf-ug-inotify-handle.h" +#include "mf-ug-winset.h" +#include "mf-ug-fs-util.h" +#include "mf-ug-fm-svc-wrapper.h" +#include "mf-ug-resource.h" + +/****************************** +** Prototype : mf_ug_cb_back_button_cb +** Description : +** Input : void *data +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +void mf_ug_cb_back_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + + if (ugd->ug_Status.ug_bCancelDisableFlag) { + return; + } + if (0 != ugd->ug_ListPlay.ug_Player) { + mf_ug_list_play_destory_playing_file(ugd); + } + if (ugd->ug_Status.ug_bSettingEntry == true && ugd->ug_Status.ug_bInSettingView == false) { + Eina_List *l = NULL; + void *item = NULL; + ugNaviBar *pNavi_s = NULL; + ugNaviBar *pNavi_toshow = NULL; + GString *title = NULL; + + if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PLAYING || ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PAUSED) { + mf_ug_list_play_destory_playing_file(ugd); + } + + EINA_LIST_FOREACH(ugd->ug_MainWindow.ug_pNaviBarList, l, item) { + pNavi_s = (ugNaviBar *)item; + if (pNavi_s == NULL) + return; + if (g_strcmp0(pNavi_s->ug_pNaviLabel, MF_UG_LABEL_PHONE) == 0) { + if (pNavi_s->ug_pCurrentPath != NULL) { + free(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = NULL; + } + pNavi_s->ug_pCurrentPath = strdup(UG_SETTING_RINGTONE_PATH); + pNavi_s->ug_bNaviFlagInUse = true; + pNavi_toshow = pNavi_s; + } else { + if (pNavi_s->ug_pCurrentPath != NULL) { + free(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = NULL; + } + pNavi_s->ug_pCurrentPath = strdup(MEMORY_FOLDER); + pNavi_s->ug_bNaviFlagInUse = false; + } + + } + + if (pNavi_toshow == NULL) { + ug_debug("pNavi_toshow is NULL"); + return; + } + + if (ugd->ug_Status.ug_pPath) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + + ugd->ug_Status.ug_bInSettingView = true; + + if (ugd->ug_Status.ug_pPath) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + pNavi_toshow->ug_pCurrentPath = strdup(UG_SETTING_RINGTONE_PATH); + ugd->ug_Status.ug_pPath = g_string_new(pNavi_toshow->ug_pCurrentPath); + title = mf_ug_fm_svc_wapper_get_file_name(ugd->ug_Status.ug_pPath); + + if (title != NULL) { + pNavi_toshow->ug_pNaviTitle = g_strdup(title->str); + g_string_free(title, TRUE); + title = NULL; + } + mf_ug_navi_bar_create_default_view(ugd); + mf_ug_ctrl_bar_set_item_disable(ugd); + + elm_object_item_text_set(pNavi_toshow->ug_pNaviItem, pNavi_toshow->ug_pNaviTitle); + elm_naviframe_item_title_visible_set(pNavi_toshow->ug_pNaviItem, EINA_TRUE); + + if (ugd->ug_MainWindow.ug_pTabBar && mf_ug_tab_bar_items_count_get(ugd->ug_MainWindow.ug_pTabBar) > 1) { + elm_object_part_content_unset(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.content"); + elm_object_part_content_unset(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.tabbar"); + elm_object_part_content_unset(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content"); + + mf_ug_tab_bar_remove_all_items(ugd->ug_MainWindow.ug_pTabBar); + UG_SAFE_FREE_OBJ(ugd->ug_MainWindow.ug_pTabBar); + mf_ug_navi_bar_remove_navi_list_item_by_label(ugd, MF_UG_LABEL_MMC); + + Evas_Object *navibar = ug_mf_navi_bar_get_navibar_from_navilist(ugd->ug_MainWindow.ug_pNaviBarList, MF_UG_LABEL_PHONE); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", navibar); + evas_object_hide(ugd->ug_MainWindow.ug_pTabLayout); + UG_SAFE_FREE_OBJ(ugd->ug_MainWindow.ug_pTabLayout); + } + } else { + ug_destroy_me(ugd->ug); + } + UG_TRACE_END; + +} + +/****************************** +** Prototype : mf_ug_cb_add_button_cb +** Description : +** Input : void *data +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +void mf_ug_cb_add_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + + bundle *b = NULL; + char *result = NULL; + + if (ugd->ug_Status.ug_b_NaviPushFlag) { + UG_TRACE_END; + return; + } + result = mf_ug_util_get_send_result(ugd); + if (result) { + b = bundle_create(); + ug_debug("result is [%s]", result); + bundle_add(b, "result", result); + ug_send_result(ugd->ug, b); + if (result) { + free(result); + } + if (b) { + bundle_free(b); + } + } + + if (0 != ugd->ug_ListPlay.ug_Player) { + mf_ug_list_play_destory_playing_file(ugd); + } + ug_destroy_me(ugd->ug); + UG_TRACE_END; +} + +void mf_ug_cb_goto_myfile_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + + if (ugd->ug_Status.ug_bCancelDisableFlag) { + ug_debug("ug_Status.ug_bCancelDisableFlag is true"); + return; + } + ugNaviBar *item = NULL; + Eina_List *l = NULL; + + ugNaviBar *pNavi_s = NULL;//ug_mf_navi_bar_get_navi_from_navilist(ugd->ug_MainWindow.ug_pNaviBarList, MF_UG_LABEL_PHONE); + ugNaviBar *pNavi_toshow = NULL; + int mmc_card = 0; + int error_code = 0; + EINA_LIST_FOREACH(ugd->ug_MainWindow.ug_pNaviBarList, l, item) { + pNavi_s = (ugNaviBar *)item; + if (pNavi_s == NULL) + return; + if (g_strcmp0(pNavi_s->ug_pNaviLabel, MF_UG_LABEL_PHONE) == 0) { + if (pNavi_s->ug_pCurrentPath != NULL) { + free(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = NULL; + } + pNavi_s->ug_pCurrentPath = strdup(PHONE_FOLDER); + pNavi_s->ug_bNaviFlagInUse = true; + pNavi_toshow = pNavi_s; + } else { + if (pNavi_s->ug_pCurrentPath != NULL) { + free(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = NULL; + } + pNavi_s->ug_pCurrentPath = strdup(MEMORY_FOLDER); + pNavi_s->ug_bNaviFlagInUse = false; + } + + } + + + if (0 != ugd->ug_ListPlay.ug_Player) + mf_ug_list_play_destory_playing_file(ugd); + + if (ugd->ug_Status.ug_pPath) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER); + + ugd->ug_Status.ug_bInSettingView = false; + mf_ug_navi_bar_create_default_view(ugd); + ugd->ug_Status.ug_bCancelDisableFlag = true; + + error_code = mf_ug_util_get_mmc_state(&mmc_card); + if (error_code == 0 && mmc_card == 1) { + Elm_Object_Item *pItemPhone = NULL; + Elm_Object_Item *pItemMMC = NULL; + + if (ugd->ug_MainWindow.ug_pTabLayout == NULL) { + ugd->ug_MainWindow.ug_pTabLayout = mf_ug_main_tab_layout_create(ugd->ug_MainWindow.ug_pWindow); + ugd->ug_MainWindow.ug_pTabBackGround = mf_ug_main_create_bg(ugd->ug_MainWindow.ug_pWindow); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.bg", ugd->ug_MainWindow.ug_pTabBackGround); + } + if (ugd->ug_MainWindow.ug_pTabBar == NULL) { + ugd->ug_MainWindow.ug_pTabBar = mf_ug_tab_bar_create(ugd->ug_MainWindow.ug_pWindow); + } + + pItemPhone = + mf_ug_tab_bar_append_item(ugd->ug_MainWindow.ug_pTabBar, UG_ICON_PHONE, MF_UG_LABEL_PHONE, + ugd); + pItemMMC = + mf_ug_tab_bar_append_item(ugd->ug_MainWindow.ug_pTabBar, UG_ICON_MEMORY, MF_UG_LABEL_MMC, + ugd); + + //mf_ug_tab_bar_set_selected_item(pItemPhone); + elm_object_part_content_unset(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content"); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.content", pNavi_toshow->ug_pNaviBar); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.tabbar", ugd->ug_MainWindow.ug_pTabBar); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", ugd->ug_MainWindow.ug_pTabLayout); + evas_object_show(ugd->ug_MainWindow.ug_pTabLayout); + if (ugd->ug_Status.ug_bMassStorageFlag) { + mf_ug_tab_bar_set_item_disable(ugd->ug_MainWindow.ug_pTabBar, EINA_TRUE); + } + } + + mf_ug_ctrl_bar_set_item_disable(ugd); +} + + +/****************************** +** Prototype : _ug_popup_exit +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +void mf_ug_cb_mass_storage_popup_cb(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + + mf_ug_cb_back_button_cb(ugd, NULL, NULL); + + if (ugd->ug_MainWindow.ug_pNormalPopup) { + evas_object_del(ugd->ug_MainWindow.ug_pNormalPopup); + ugd->ug_MainWindow.ug_pNormalPopup = NULL; + } + UG_TRACE_END; +} + + +/****************************** +** Prototype : mf_ug_cb_upper_click_cb +** Description : Samsung +** Input : void *data +** Evas_Object * obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_upper_click_cb(void *data, Evas_Object * obj, void *event_info) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retm_if(pNavi_s == NULL, "pNavi_s is NULL"); + + if (ugd->ug_Status.ug_b_NaviPushFlag) { + UG_TRACE_END; + return; + } + + if (ugd->ug_Status.ug_pPath != NULL && pNavi_s->ug_pCurrentPath != NULL) { + if (g_strcmp0(pNavi_s->ug_pCurrentPath, MF_UG_LABEL_PHONE) == 0 + || g_strcmp0(pNavi_s->ug_pCurrentPath, MF_UG_LABEL_MMC) == 0) { + mf_ug_navi_bar_create_default_view(ugd); + return; + } + GString *new_path = NULL; + char *file_dir = ecore_file_dir_get(pNavi_s->ug_pCurrentPath); + if (file_dir) { + new_path = g_string_new(file_dir); + UG_SAFE_FREE_GSTRING(ugd->ug_Status.ug_pPath); + ugd->ug_Status.ug_pPath = new_path; + UG_SAFE_FREE_CHAR(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = strdup(new_path->str); + free(file_dir); + file_dir = NULL; + } else { + ug_debug("file_dir is NULL"); + } + } else { + ugd->ug_Status.ug_pPath = g_string_new(MF_UG_LABEL_PHONE); + pNavi_s->ug_pCurrentPath = strdup(MF_UG_LABEL_PHONE); + } + mf_ug_navi_bar_create_default_view(ugd); + mf_ug_ctrl_bar_set_item_disable(ugd); + UG_TRACE_END; +} + + +void mf_ug_cb_home_button_cb(void *data, Evas_Object * obj, void *event_info) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retm_if(pNavi_s == NULL, "pNavi_s is NULL"); + + if (ugd->ug_Status.ug_b_NaviPushFlag) { + UG_TRACE_END; + return; + } + + int storage = MF_UG_PHONE; + + storage = mf_ug_fm_svc_wapper_get_location(ugd->ug_Status.ug_pPath->str); + switch (storage) { + case MF_UG_PHONE: + UG_SAFE_FREE_GSTRING(ugd->ug_Status.ug_pPath); + ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER); + UG_SAFE_FREE_CHAR(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = g_strdup(PHONE_FOLDER); + mf_ug_util_set_current_state(ugd, STATE_PHONE); + break; + case MF_UG_MMC: + UG_SAFE_FREE_GSTRING(ugd->ug_Status.ug_pPath); + ugd->ug_Status.ug_pPath = g_string_new(MEMORY_FOLDER); + UG_SAFE_FREE_CHAR(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = g_strdup(MEMORY_FOLDER); + mf_ug_util_set_current_state(ugd, STATE_MEMORY); + break; + default: + return; + } + + mf_ug_navi_bar_create_default_view(ugd); + mf_ug_ctrl_bar_set_item_disable(ugd); + UG_TRACE_END; +} + +/****************************** +** Prototype : tab_callback +** Description : +** Input : void *data +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_tab_bar_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + + const char *label = NULL; + Evas_Object *newContent = NULL; + Evas_Object *pNaviBar = NULL; + Elm_Object_Item *it = NULL; + ugNaviBar *pNavi_s_toshow = NULL; + ugNaviBar *pNavi_s_inuse = NULL; + + //mf_ug_navi_bar_del_item_directly(ugd); + it = (Elm_Object_Item *)event_info; + label = elm_object_item_text_get(it); + + if (label != NULL) { + char *rootpath = NULL; + + /*0. set the previous navi to be out of use */ + pNavi_s_inuse = mf_ug_navi_bar_get_in_use_navi(ugd); + + if (pNavi_s_inuse == NULL || pNavi_s_inuse->ug_pNaviLabel == NULL) { + UG_TRACE_END; + return; + } + ug_debug("label is [%s] pNavi_s_inuse->ug_pNaviLabel is [%s]", label, pNavi_s_inuse->ug_pNaviLabel); + + if (g_strcmp0(label, pNavi_s_inuse->ug_pNaviLabel) == 0) { + UG_TRACE_END; + return; + } + + pNavi_s_inuse->ug_bNaviFlagInUse = FALSE; + + if (0 != ugd->ug_ListPlay.ug_Player) { + mf_ug_list_play_destory_playing_file(ugd); + } + + /*if the muisc is playing, destory the play */ + + /*1. get navi bar pointer by the label */ + pNaviBar = ug_mf_navi_bar_get_navibar_from_navilist(ugd->ug_MainWindow.ug_pNaviBarList, label); + + ug_debug("label is %s", label); + /*2. create navi bar if not created, otherwise get it by pNaviBar */ + if (pNaviBar == NULL) { + /*2.0 get root path by storage label */ + rootpath = mf_ug_fm_svc_wapper_get_root_path_by_tab_label(label); + if (rootpath == NULL) { + UG_TRACE_END; + return; + } + /*2.1 create the navi for the tab */ + pNavi_s_toshow = calloc(1, sizeof(ugNaviBar)); + if (pNavi_s_toshow == NULL) { + ug_debug("pNavi_s_toshow is NULL"); + free(rootpath); + rootpath = NULL; + return; + } + + pNavi_s_toshow->ug_pNaviBar = mf_ug_navi_bar_create_navi_bar(ugd->ug_MainWindow.ug_pMainLayout); + if (pNavi_s_toshow->ug_pNaviBar == NULL) { + ug_debug("pNavi_s_toshow->ug_pNaviBar is NULL"); + free(rootpath); + rootpath = NULL; + free(pNavi_s_toshow); + pNavi_s_toshow = NULL; + return; + } + pNavi_s_toshow->ug_bNaviFlagInUse = TRUE; + /*2.2 set path as root path of the storage */ + pNavi_s_toshow->ug_pCurrentPath = g_strdup(rootpath); + pNavi_s_toshow->ug_pNaviLabel = strdup(label); + free(rootpath); + rootpath = NULL; + /*2.3 insert phone navi into the navi_list */ + ugd->ug_MainWindow.ug_pNaviBarList = eina_list_append(ugd->ug_MainWindow.ug_pNaviBarList, pNavi_s_toshow); + + if (ugd->ug_Status.ug_pPath != NULL) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + ugd->ug_Status.ug_pPath = g_string_new(pNavi_s_toshow->ug_pCurrentPath); + mf_ug_navi_bar_create_default_view(ugd); + + /*2.4 set the navi to tab bar item */ + mf_ug_tab_bar_set_item_view(it, ugd->ug_MainWindow.ug_pTabLayout, pNavi_s_toshow->ug_pNaviBar); + mf_ug_navi_bar_set_blocking(ugd, false); + + } else { + /*/2.1 get the navi of the tab */ + pNavi_s_toshow = mf_ug_navi_bar_get_navi_struct_by_navi(ugd, pNaviBar); + + pNavi_s_toshow->ug_bNaviFlagInUse = TRUE; + + /*/2.2 set related status value. */ + if (ugd->ug_Status.ug_pPath != NULL) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + ugd->ug_Status.ug_pPath = g_string_new(pNavi_s_toshow->ug_pCurrentPath); + /*/2.3 update the content to catch update */ + newContent = mf_ug_genlist_create_content_list_view(ugd); + pNavi_s_toshow->ug_pContent = newContent; + mf_ug_navi_bar_set_new_content(pNavi_s_toshow->ug_pNaviLayout, newContent); + mf_ug_tab_bar_set_item_view(it, ugd->ug_MainWindow.ug_pTabLayout, pNavi_s_toshow->ug_pNaviBar); + } + + mf_ug_ctrl_bar_set_item_disable(ugd); + } else { + ug_debug("Invalid argument: label is NULL\n"); + } + UG_TRACE_END; +} + + +void mf_ug_cb_ctrl_bar_button_cb(void *data, Evas_Object *obj, void *event_info) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + ug_mf_retm_if(event_info == NULL, "event_info is NULL"); + const char *label = NULL; + + if (ugd->ug_Status.ug_b_NaviPushFlag) + return; + label = elm_object_item_text_get((Elm_Object_Item *)event_info); + ug_mf_retm_if(label == NULL, "label is NULL"); + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + if (g_strcmp0(label, MF_UG_LABEL_RINGTONES) == 0) { + if (g_strcmp0(ugd->ug_Status.ug_pPath->str, UG_RINGTION_PATH) != 0) { + UG_SAFE_FREE_GSTRING(ugd->ug_Status.ug_pPath); + ugd->ug_Status.ug_pPath = g_string_new(UG_RINGTION_PATH); + UG_SAFE_FREE_CHAR(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = g_strdup(UG_RINGTION_PATH); + mf_ug_util_set_current_state(ugd, STATE_PHONE); + ugd->ug_Status.ug_iCtrlBarType = CTRL_BAR_MUSIC; + mf_ug_navi_bar_create_default_view(ugd); + } + } else if (g_strcmp0(label, MF_UG_LABEL_OTHER_MUSIC) == 0) { + if (g_strcmp0(ugd->ug_Status.ug_pPath->str, UG_MUSIC_PATH) != 0) { + UG_SAFE_FREE_GSTRING(ugd->ug_Status.ug_pPath); + ugd->ug_Status.ug_pPath = g_string_new(UG_MUSIC_PATH); + UG_SAFE_FREE_CHAR(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = g_strdup(UG_MUSIC_PATH); + mf_ug_util_set_current_state(ugd, STATE_PHONE); + ugd->ug_Status.ug_iCtrlBarType = CTRL_BAR_RINGTONE; + mf_ug_navi_bar_create_default_view(ugd); + } + } + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_cb_list_play_cb +** Description : Samsung +** Input : ugListItemData *data +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_list_play_cb(ugListItemData *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = data; + ug_mf_retm_if(itemData == NULL, "itemData is NULL"); + ug_mf_retm_if(itemData->ug_pData == NULL, "ug_pData is NULL"); + + if (itemData->ug_pData->ug_Status.ug_b_NaviPushFlag) + return; + + mf_ug_list_play_play_music_item(itemData); + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_cb_select_info_show_cb +** Description : Samsung +** Input : void *data +** Evas *e +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_select_info_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + edje_object_signal_emit(_EDJ(ugd->ug_MainWindow.ug_pMainLayout), "elm,state,show,default", "elm"); + UG_TRACE_END; + return; +} + +/****************************** +** Prototype : mf_ug_cb_select_info_hide_cb +** Description : Samsung +** Input : void *data +** Evas *e +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_select_info_hide_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + edje_object_signal_emit(_EDJ(ugd->ug_MainWindow.ug_pMainLayout), "elm,state,hide,default", "elm"); + UG_TRACE_END; + return; +} + +/****************************** +** Prototype : mf_ug_cb_select_info_timeout_cb +** Description : Samsung +** Input : void *data +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_select_info_timeout_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + edje_object_signal_emit(_EDJ(ugd->ug_MainWindow.ug_pMainLayout), "elm,state,hide,default", "elm"); + UG_TRACE_END; + return; +} + + +/****************************** +** Prototype : mf_ug_cb_mmc_changed_cb +** Description : Samsung +** Input : keynode_t *key +** void* data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_mmc_changed_cb(keynode_t *key, void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + ug_mf_retm_if(ugd->ug_Status.ug_pPath == NULL || ugd->ug_Status.ug_pPath->str == NULL, "ugd->ug_Status.ug_pPath is NULL"); + + int optStorage = MF_UG_NONE; + char *labelStorage = NULL; + + if (VCONF_TYPE_INT == vconf_keynode_get_type(key) + && VCONFKEY_SYSMAN_MMC_MOUNTED == vconf_keynode_get_int(key)) { + if (ugd->ug_Status.ug_bInSettingView && ugd->ug_Status.ug_bSettingEntry) { + ugd->ug_Status.ug_iMmcFlag = MMC_ON; + return; + } + + mf_ug_util_storage_insert_action(ugd, MF_UG_LABEL_MMC); +#ifdef MF_UG_FEATURE_NEW_UX + ugNaviBar *pNaviInUseStruct = mf_ug_navi_bar_get_in_use_navi(ugd); + elm_naviframe_item_title_visible_set(pNaviInUseStruct->ug_pNaviItem, EINA_FALSE); +#endif + ugd->ug_Status.ug_iMmcFlag = MMC_ON; + return; + } else { + ugNaviBar *pNaviInUseStruct = NULL; + + if (VCONFKEY_SYSMAN_MMC_REMOVED == vconf_keynode_get_int(key) + || VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED == vconf_keynode_get_int(key)) { + ug_debug("mmc removed"); + if (ugd->ug_Status.ug_bInSettingView && ugd->ug_Status.ug_bSettingEntry) { + ugd->ug_Status.ug_iMmcFlag = MMC_OFF; + return; + } + optStorage = MF_UG_MMC; + ugd->ug_Status.ug_iMmcFlag = MMC_OFF; + } + + if (optStorage == MF_UG_NONE) { + ug_debug("get removed storage failed"); + return; + } + + switch (optStorage) { + case MF_UG_MMC: + labelStorage = MF_UG_LABEL_MMC; + break; + default: + break; + } + + if (mf_ug_fm_svc_wapper_get_location(ugd->ug_Status.ug_pPath->str) != optStorage) { + mf_ug_navi_bar_remove_navi_list_item_by_label(ugd, labelStorage); + mf_ug_tab_bar_remove_item_by_label(ugd->ug_MainWindow.ug_pTabBar, labelStorage); + if (mf_ug_util_set_main_layout_by_tab_item_count(ugd) == 0) { + pNaviInUseStruct = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_debug("pNaviInUseStruct is [%p]", pNaviInUseStruct); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", pNaviInUseStruct->ug_pNaviBar); + evas_object_show(ugd->ug_MainWindow.ug_pMainLayout); + } + } else { + + if (0 != ugd->ug_ListPlay.ug_Player) { + mf_ug_list_play_destory_playing_file(ugd); + if (ugd->ug_ListPlay.ug_pPlayFilePath) { + g_free(ugd->ug_ListPlay.ug_pPlayFilePath); + ugd->ug_ListPlay.ug_pPlayFilePath = NULL; + } + } + + mf_ug_navi_bar_remove_navi_list_item_by_label(ugd, labelStorage); + mf_ug_tab_bar_remove_item_by_label(ugd->ug_MainWindow.ug_pTabBar, labelStorage); + pNaviInUseStruct = mf_ug_navi_bar_get_in_use_navi(ugd); + if (mf_ug_util_set_main_layout_by_tab_item_count(ugd) == 0) { + ug_debug(); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", pNaviInUseStruct->ug_pNaviBar); + evas_object_show(ugd->ug_MainWindow.ug_pMainLayout); + } + mf_ug_navi_bar_refresh_navibar_recovered_view(ugd, pNaviInUseStruct); + } + +#ifdef MF_UG_FEATURE_NEW_UX + if (ugd->ug_Status.ug_iMmcFlag == MMC_ON && !(ugd->ug_Status.ug_bSettingEntry == true && ugd->ug_Status.ug_bInSettingView == true)) + elm_naviframe_item_title_visible_set(pNaviInUseStruct->ug_pNaviItem, EINA_FALSE); + else + elm_naviframe_item_title_visible_set(pNaviInUseStruct->ug_pNaviItem, EINA_TRUE); +#endif + } + UG_TRACE_END; + return; +} + + +void mf_ug_cb_mass_storage_changed_cb(keynode_t *key, void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + ug_mf_retm_if(ugd->ug_Status.ug_pPath == NULL || ugd->ug_Status.ug_pPath->str == NULL, "ugd->ug_Status.ug_pPath is NULL"); + + if (VCONF_TYPE_INT == vconf_keynode_get_type(key) + && VCONFKEY_USB_STORAGE_STATUS_OFF == vconf_keynode_get_int(key)) { + if (ugd->ug_Status.ug_bMassStorageFlag == true) { + if (ugd->ug_Status.ug_bInSettingView && ugd->ug_Status.ug_bSettingEntry) { + ugd->ug_Status.ug_bMassStorageFlag = false; + return; + } + Evas_Object *newContent = NULL; + ugNaviBar *pNavi_toshow = NULL; + + pNavi_toshow = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retm_if(pNavi_toshow == NULL, "get navigation bar in use failed"); + + ugd->ug_Status.ug_bMassStorageFlag = false; + pNavi_toshow->ug_pContent = newContent = mf_ug_genlist_create_content_list_view(ugd); + mf_ug_navi_bar_set_new_content(pNavi_toshow->ug_pNaviLayout, newContent); + mf_ug_ctrl_bar_set_item_disable(ugd); + + if (ugd->ug_MainWindow.ug_pTabBar) { + mf_ug_tab_bar_set_item_disable(ugd->ug_MainWindow.ug_pTabBar, EINA_FALSE); + } + } + UG_TRACE_END; + return; + } else if (VCONF_TYPE_INT == vconf_keynode_get_type(key) + && (VCONFKEY_USB_STORAGE_STATUS_UMS_ON == vconf_keynode_get_int(key) + || VCONFKEY_USB_STORAGE_STATUS_UMS_MMC_ON == vconf_keynode_get_int(key))) { + if (ugd->ug_Status.ug_bInSettingView && ugd->ug_Status.ug_bSettingEntry) { + ugd->ug_Status.ug_bMassStorageFlag = true; + return; + } + } + UG_TRACE_END; + return; +} + +int mf_ug_cb_set_mass_storage_state_cb(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, -1, "ugData is NULL"); + + return vconf_notify_key_changed(VCONFKEY_USB_STORAGE_STATUS, mf_ug_cb_mass_storage_changed_cb, ugd); +} + +/****************************** +** Prototype : mf_ug_cb_dir_update_cb +** Description : Samsung +** Input : mf_ug_inotify_event event +** char *name +** void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_dir_update_cb(mf_ug_inotify_event event, char *name, void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + + ug_debug("event : %d, name : %s", event, name); + + ug_dir_event_t buffer; + + buffer.event = event; + buffer.name = strdup(name); + + ecore_pipe_write(ugd->ug_UiGadget.ug_pInotifyPipe, &buffer, sizeof(buffer)); + UG_TRACE_END; + + return; +} + +/****************************** +** Prototype : mf_ug_cb_dir_pipe_cb +** Description : Samsung +** Input : void *data +** void *buffer +** unsigned int nbyte +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_cb_dir_pipe_cb(void *data, void *buffer, unsigned int nbyte) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed"); + + if (ugd->ug_ListPlay.ug_iPlayState != PLAY_STATE_INIT) { + return; + } + if (buffer) { + ug_dir_event_t *msg = (ug_dir_event_t *) buffer; + ug_debug("event : %d, name : %s", msg->event, msg->name); + + Evas_Object *newContent = NULL; + switch (msg->event) { + case UG_MF_INOTI_CREATE: + case UG_MF_INOTI_MOVE_IN: + /*/1 TODO: add new item to list */ + break; + case UG_MF_INOTI_DELETE: + case UG_MF_INOTI_MOVE_OUT: + /*/1 TODO: remove item from list */ + break; + case UG_MF_INOTI_MODIFY: + /*/1 TODO: update item in list */ + break; + case UG_MF_INOTI_DELETE_SELF: + case UG_MF_INOTI_MOVE_SELF: + /*/1 TODO: watching directory is removed, change current directory. */ + break; + default: + ug_mf_error("Unknown event"); + break; + } + pNavi_s->ug_pContent = newContent = mf_ug_genlist_create_content_list_view(ugd); + mf_ug_navi_bar_set_new_content(pNavi_s->ug_pNaviLayout, newContent); + mf_ug_ctrl_bar_set_item_disable(ugd); + if (msg->name) { + free(msg->name); + msg->name = NULL; + } + } + UG_TRACE_END; +} + + +#ifdef UG_THUMB_REAL_TIME_UPDATE +Eina_Bool mf_ug_cb_thumb_timer_cb(void *data) +{ + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retvm_if(itemData == NULL, EINA_FALSE, "input params is NULL"); + ugData *ugd = (ugData *)itemData->ug_pData; + ug_mf_retvm_if(ugd == NULL, EINA_FALSE, "ugd is NULL"); + + bool allright_flag = true; + Evas_Object *pContent = NULL; + + if (ugd->ug_Status.ug_pThumbUpdateTimer == NULL) { + return EINA_FALSE; + } + + /****read the realized part of the list****/ + if (itemData->ug_pItem) { + pContent = elm_object_item_widget_get(itemData->ug_pItem); + if (pContent == NULL) { + ugd->ug_Status.ug_pThumbUpdateTimer = NULL; + return EINA_FALSE; + } + } else { + ugd->ug_Status.ug_pThumbUpdateTimer = NULL; + return EINA_FALSE; + } + Eina_List *realized_list = elm_genlist_realized_items_get(pContent); + Eina_List *list = NULL; + Elm_Object_Item *it; + ugListItemData *item_data = NULL; + + if (realized_list == NULL) { + allright_flag = false; + } + + EINA_LIST_FOREACH(realized_list, list, it) { + item_data = (ugListItemData *)elm_object_item_data_get(it); + if (item_data == NULL) + continue; + + if (item_data->ug_bRealThumbFlag == false) { + ug_debug("Update item: %s", item_data->ug_pItemName->str); + if (ecore_file_is_dir(item_data->ug_pItemName->str) == true) { + item_data->ug_pThumbPath = strdup(UG_ICON_FOLDER); + item_data->ug_bRealThumbFlag = true; + elm_object_item_data_set(it, item_data); + elm_genlist_item_update(it); + + } else if (ecore_file_exists(item_data->ug_pItemName->str)) { + char *new_thumb = mf_ug_file_attr_get_file_icon(ugd->ug_Status.ug_pMedia_svc_handle, item_data->ug_pItemName->str, NULL); + if (new_thumb) { + if (item_data->ug_pThumbPath) { + free(item_data->ug_pThumbPath); + item_data->ug_pThumbPath = NULL; + } + item_data->ug_pThumbPath = strdup(new_thumb); + item_data->ug_bRealThumbFlag = true; + elm_object_item_data_set(it, item_data); + elm_genlist_item_update(it); + + free(new_thumb); + new_thumb = NULL; + } else { + allright_flag = false; + } + } + } + } + + if (allright_flag == false) { + return EINA_TRUE; + } else { + ugd->ug_Status.ug_pThumbUpdateTimer = NULL; + return EINA_FALSE; + } +} +#endif diff --git a/src/common/mf-ug-fm-svc-wapper.c b/src/common/mf-ug-fm-svc-wapper.c new file mode 100755 index 0000000..c7296e0 --- /dev/null +++ b/src/common/mf-ug-fm-svc-wapper.c @@ -0,0 +1,547 @@ +/* + * 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 "mf-ug-util.h" +#include "mf-ug-cb.h" +#include "mf-ug-main.h" +#include "mf-ug-fm-svc-wrapper.h" +#include "mf-ug-fs-util.h" +#include "mf-ug-resource.h" + +#define UG_FILTER_CATEGORY_ALL \ +UG_FILTER_CATEGORY_NONE | UG_FILTER_CATEGORY_IMAGE | UG_FILTER_CATEGORY_VIDEO \ +| UG_FILTER_CATEGORY_SOUND | UG_FILTER_CATEGORY_VOICE | UG_FILTER_CATEGORY_MUSIC \ +| UG_FILTER_CATEGORY_HTML | UG_FILTER_CATEGORY_FLASH | UG_FILTER_CATEGORY_GAME \ +| UG_FILTER_CATEGORY_APP | UG_FILTER_CATEGORY_THEME | UG_FILTER_CATEGORY_DOC \ +| UG_FILTER_CATEGORY_EXCEL | UG_FILTER_CATEGORY_PPT | UG_FILTER_CATEGORY_PDF \ +| UG_FILTER_CATEGORY_TXT | UG_FILTER_CATEGORY_VCONTACT | UG_FILTER_CATEGORY_VCALENDAR \ +| UG_FILTER_CATEGORY_VNOTE | UG_FILTER_CATEGORY_VBOOKMARK | UG_FILTER_CATEGORY_VIDEO_PROJECT\ +| UG_FILTER_CATEGORY_SVG | UG_FILTER_CATEGORY_ETC + + +#define MF_UG_PATH_INFO_RETRENCH 128 +#define MF_UG_PATH_INFO_HEAD_LEN(x) strlen(x) +#define MF_UG_PATH_INFO_TRANS_OMIT elm_entry_utf8_to_markup("..") +#define MF_UG_PATH_INFO_LEVEL_BOUNDARY 3 +#define MF_UG_PATH_INFO_LEN_THRESHOLD 4 +#define MF_UG_PATH_INFO_SEP elm_entry_utf8_to_markup("/") +typedef struct { + int len_orig; + int len_trans; + char *original; + char *transfer; + bool flag_trans; +}ug_pNode; + +/********************* +**Function name: __mf_ug_fm_svc_wapper_COMESFROM +**Parameter: +** GString* fullpath: fullpath to check the location +** +**Return value: +** location of the path +** +**Action: +** get storage type by fullpath +*********************/ +static int __mf_ug_fm_svc_wapper_COMESFROM(char *fullpath) +{ + int len_phone = strlen(PHONE_FOLDER); + int len_memory = strlen(MEMORY_FOLDER); + + if (strncmp(fullpath, PHONE_FOLDER, len_phone) == 0) { + return MF_UG_PHONE; + } else if (strncmp(fullpath, MEMORY_FOLDER, len_memory) == 0) { + return MF_UG_MMC; + } else { + return MYFILE_ERR_STORAGE_TYPE_ERROR; + } +} + +/****************************** +** Prototype : _ug_mf_get_file_list +** Description : +** Input : struct ugmyfiledata *data +** GString* folder_name +** Eina_List** dir_list +** Eina_List** file_list +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static int __mf_ug_fm_svc_wapper_get_file_list(GString *fullpath, Eina_List **dir_list, Eina_List **file_list) +{ + ug_mf_retvm_if(fullpath == NULL, MYFILE_ERR_INVALID_ARG, "fullpath is NULL"); + ug_mf_retvm_if(fullpath->str == NULL, MYFILE_ERR_INVALID_ARG, "fullpath->str is NULL"); + ug_mf_retvm_if(fullpath->len == 0, MYFILE_ERR_INVALID_ARG, "fullpath->len is 0"); + + int error_code = 0; + + error_code = mf_ug_fs_oper_read_dir(fullpath->str, dir_list, file_list); + if (error_code != 0) { + ug_debug("error_code is [%d]\n", error_code); + } else { + ug_debug("success get the file list\n"); + } + return error_code; +} + + +/****************************** +** Prototype : mfUgGetFileListWithFormat +** Description : +** Input : struct ugmyfiledata *data +** GString* folder_name +** Eina_List** dir_list +** Eina_List** file_list +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +unsigned long mf_ug_fm_svc_wapper_get_file_filter(int file_filter_mode) +{ + unsigned long filter = 0; + switch (file_filter_mode) { + case SHOW_ALL_LIST: + filter |= UG_FILTER_CATEGORY_ALL; + ug_debug("show_all_list:::::::::::::::::::::::::::::::::: filter is [%d]", filter); + break; + case SHOW_IMAGE_LIST: + filter |= UG_FILTER_CATEGORY_IMAGE; + break; + case SHOW_SOUND_LIST: + filter |= UG_FILTER_CATEGORY_MUSIC | UG_FILTER_CATEGORY_SOUND | UG_FILTER_CATEGORY_VOICE; + break; + case SHOW_VIDEO_LIST: + filter |= UG_FILTER_CATEGORY_VIDEO; + break; + case SHOW_FLASH_LIST: + filter |= UG_FILTER_CATEGORY_FLASH; + break; + case SHOW_FOLDER_LIST: + break; + case SHOW_IMAGE_VIDEO_LIST: + filter |= UG_FILTER_CATEGORY_IMAGE | UG_FILTER_CATEGORY_VIDEO; + break; + case SHOW_IMAGE_SOUND_LIST: + filter |= UG_FILTER_CATEGORY_IMAGE | UG_FILTER_CATEGORY_SOUND | UG_FILTER_CATEGORY_MUSIC | UG_FILTER_CATEGORY_VOICE; + break; + case SHOW_VIDEO_SOUND_LIST: + filter |= UG_FILTER_CATEGORY_SOUND | UG_FILTER_CATEGORY_VIDEO | UG_FILTER_CATEGORY_MUSIC | UG_FILTER_CATEGORY_VOICE; + break; + default: + break; + } + return filter; +} + +int mf_ug_fm_svc_wapper_get_file_list_by_filter(ugData *data, GString *fullpath, Eina_List **dir_list, Eina_List **filter_list) +{ + ugData *ugd = data; + ug_mf_retvm_if(ugd == NULL, MYFILE_ERR_INVALID_ARG, "ugd is NULL"); + ug_mf_retvm_if(fullpath == NULL, MYFILE_ERR_INVALID_ARG, "fullpath is NULL"); + ug_mf_retvm_if(fullpath->str == NULL, MYFILE_ERR_INVALID_ARG, "fullpath->str is NULL"); + ug_mf_retvm_if(fullpath->len == 0, MYFILE_ERR_INVALID_ARG, "fullpath->len is 0"); + + int error_code = 0; + int filter_mode = 0; + int file_filter = 0; + int file_list_len = 0; + Eina_List *file_list = NULL; + char *extension = NULL; + + filter_mode = ugd->ug_UiGadget.ug_iFilterMode; + file_filter = ugd->ug_UiGadget.ug_iFileFilter; + + ug_debug("fullpath is [%s]", fullpath->str); + error_code = __mf_ug_fm_svc_wapper_get_file_list(fullpath, dir_list, &file_list); + + if (error_code == 0) { + ug_debug(); + file_list_len = eina_list_count(file_list); + + if (file_list_len > 0) { + ug_debug("file_filter is [%d]\n", filter_mode); + + if (filter_mode != SHOW_BY_EXTENSION) { + error_code = mf_ug_fs_oper_list_filter(file_list, filter_list, file_filter); + } else if (ugd->ug_UiGadget.ug_pExtension != NULL) { + extension = strdup(ugd->ug_UiGadget.ug_pExtension); + error_code = mf_ug_fs_oper_list_filter_by_extension(file_list, filter_list, extension); + free(extension); + } + ug_debug("error is [%d]%s %d\n", error_code, __func__, __LINE__); + return error_code; + } + } + ug_debug("error is [%d]%s %d\n", error_code, __func__, __LINE__); + return error_code; +} + + + +/****************************** +** Prototype : mfUgIsRootPath +** Description : +** Input : None +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +bool mf_ug_fm_svc_wapper_is_root_path(void *data) +{ + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + if (!strcmp(ugd->ug_Status.ug_pPath->str, PHONE_FOLDER)) { + return true; + } else if (!strcmp(ugd->ug_Status.ug_pPath->str, MEMORY_FOLDER)) { + return true; + } else { + return false; + } +} + + +/****************************** +** Prototype : mfUgGetFileName +** Description : +** Input : GString* path +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +GString *mf_ug_fm_svc_wapper_get_file_name(GString *path) +{ + GString *ret = NULL; + if (ecore_file_exists(path->str)) { + ret = g_string_new(ecore_file_file_get(path->str)); + } else { + ret = NULL; + } + return ret; +} + +char *mf_ug_fm_svc_wapper_get_root_path_by_tab_label(const char *label) +{ + if (g_strcmp0(label, MF_UG_LABEL_PHONE) == 0) { + return g_strdup(PHONE_FOLDER); + } else if (g_strcmp0(label, MF_UG_LABEL_MMC) == 0) { + return g_strdup(MEMORY_FOLDER); + } else + return NULL; +} + +/****************************** +** Prototype : mf_ug_fm_svc_wapper_get_location +** Description : Samsung +** Input : char* fullpath +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +int mf_ug_fm_svc_wapper_get_location(char *fullpath) +{ + return __mf_ug_fm_svc_wapper_COMESFROM(fullpath); +} + +gint mf_ug_fm_svc_wapper_get_folder_foldersystem(GString *path, bool * result) +{ + + int error_code = 0; + error_code = mf_ug_file_attr_is_system_dir(path->str, result); + return error_code; + +} + +GString *mf_ug_fm_svc_wrapper_get_file_parent_path(GString *fullpath) +{ + GString *ret = NULL; + char *path = NULL; + int error_code = 0; + + if (fullpath == NULL || fullpath->str == NULL) { + return NULL; + } + error_code = mf_ug_file_attr_get_parent_path(fullpath->str, &path); + if (error_code != 0) { + return NULL; + } + + ret = g_string_new(path); + free(path); + path = NULL; + return ret; +} + +char *mf_ug_fm_svc_path_info_retrench(const char *string) +{ + ug_mf_retvm_if(string == NULL, g_strdup(MF_UG_PATH_INFO_TRANS_OMIT), "input path is NULL"); + char *retrench = NULL; + char *utf8_string = elm_entry_utf8_to_markup(string); + if (utf8_string && strlen (string) > MF_UG_PATH_INFO_LEN_THRESHOLD) { + if (g_utf8_strlen(utf8_string, -1) > 2) { + retrench = calloc(1, MF_UG_PATH_INFO_RETRENCH); + if (retrench) { + char *omit = MF_UG_PATH_INFO_TRANS_OMIT; + char *temp = g_utf8_strncpy(retrench, utf8_string, 2); + retrench = g_strconcat(temp, omit, NULL); + UG_SAFE_FREE_CHAR(omit); + UG_SAFE_FREE_CHAR(utf8_string); + UG_SAFE_FREE_CHAR(temp); + } + + } else { + retrench = utf8_string; + } + return retrench; + } else { + return utf8_string; + } +} + +static void __mf_ug_fm_svc_wrapper_path_info_node_free(Eina_List *list) +{ + ug_mf_retm_if(list == NULL, "list is NULL"); + const Eina_List *l = NULL; + void *data = NULL; + EINA_LIST_FOREACH(list, l, data) { + ug_pNode *node = (ug_pNode *)data; + if (node != NULL) { + UG_SAFE_FREE_CHAR(node->original); + UG_SAFE_FREE_CHAR(node->transfer); + UG_SAFE_FREE_CHAR(node); + } + } + eina_list_free(list); +} + + +char *mf_ug_fm_svc_path_info_translate(char *path_info, int path_info_max_len) +{ + + ug_mf_retvm_if(path_info == NULL, g_strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")), "input path is NULL"); + + int top = 0; + bool flag = TRUE; + Eina_List *temp_list = NULL; + const Eina_List *l = NULL; + gchar **result = NULL; + gchar **params = NULL; + int count = 0; + int max_len = 0; + int total_len = 0; + int i = 0; + char *output = NULL; + void *pnode = NULL; + char *omit = MF_UG_PATH_INFO_TRANS_OMIT; + + if (strlen(path_info) < path_info_max_len) { + UG_SAFE_FREE_CHAR(omit); + return path_info; + } + + result = g_strsplit(path_info, "/", 0); + if (result == NULL) { + free(path_info); + path_info = NULL; + UG_SAFE_FREE_CHAR(omit); + return g_strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")); + } + + params = result; + count = g_strv_length(result); + + if (count > MF_UG_PATH_INFO_LEVEL_BOUNDARY) + { + top = MF_UG_PATH_INFO_LEVEL_BOUNDARY; + flag = FALSE; + max_len = path_info_max_len - MF_UG_PATH_INFO_LEVEL_BOUNDARY - MF_UG_PATH_INFO_HEAD_LEN(omit);//(2 is length of ..) ../aa../bb../*** + } + else + { + top = count; + flag = TRUE; + max_len = path_info_max_len - (count-1); + } + + for(i = top; i > 1; i--) + { + ug_pNode *nodeB = calloc(sizeof(ug_pNode), 1); + nodeB->original = elm_entry_utf8_to_markup(params[count -i]); + nodeB->len_orig = strlen(params[count - i]); + nodeB->transfer = mf_ug_fm_svc_path_info_retrench(params[count-i]); + nodeB->len_trans = strlen(nodeB->transfer); + nodeB->flag_trans = FALSE; + total_len += nodeB->len_orig; + + temp_list = eina_list_append(temp_list, nodeB); + } + + total_len += strlen(params[count - 1]); + + for (i = 0 ; i < eina_list_count(temp_list); i++) + { + if (total_len > max_len) + { + ug_pNode *data = NULL; + data = eina_list_nth(temp_list, i); + total_len -= (data->len_orig - data->len_trans); + data->flag_trans = TRUE; + } + + if (total_len <= max_len) + break; + } + + + if (flag == FALSE) + { + output = elm_entry_utf8_to_markup(".."); + } + char *temp = NULL; + char *sep = MF_UG_PATH_INFO_SEP; + EINA_LIST_FOREACH(temp_list, l, pnode) + { + ug_pNode *node = (ug_pNode *)pnode; + temp = output; + if(node->flag_trans == TRUE) + { + if (output != NULL) + output = g_strconcat(output, sep, node->transfer, NULL); + else + output = g_strdup(node->transfer); + } + else + { + if (output != NULL) + output = g_strconcat(output, sep ,node->original, NULL); + else + output = g_strdup(node->original); + } + UG_SAFE_FREE_CHAR(temp); + } + temp = output; + char *last_string = params[count - 1]; + char *utf8_last = elm_entry_utf8_to_markup(last_string); + + if (output != NULL) { + int last_len = strlen(last_string); + int output_len = strlen(output); + int d_value = path_info_max_len - output_len; + if ((last_len + output_len) > path_info_max_len) { + const char *end = (char *)calloc(1, d_value+1); + g_utf8_validate(utf8_last, d_value, &end); + d_value = last_len - strlen(end); + utf8_last[d_value] = '\0'; + output = g_strconcat(output, sep, utf8_last, omit, NULL); + } else { + output = g_strconcat(output, sep, utf8_last, NULL); + } + } + else + output = g_strdup(utf8_last); + UG_SAFE_FREE_CHAR(utf8_last); + + UG_SAFE_FREE_CHAR(temp); + UG_SAFE_FREE_CHAR(sep); + UG_SAFE_FREE_CHAR(omit); + UG_SAFE_FREE_CHAR(path_info); + __mf_ug_fm_svc_wrapper_path_info_node_free(temp_list); + temp_list = NULL; + g_strfreev(result); + result = NULL; + return output; +} + + +char *mf_ug_fm_svc_wrapper_translate_path(char *original_path) +{ + ug_mf_retvm_if(original_path == NULL, g_strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")), "input path is NULL"); + + char *new_path = NULL; + int root_len = 0; + + if (mf_ug_fm_svc_wapper_get_location(original_path) == MF_UG_PHONE) { + root_len = strlen(PHONE_FOLDER); + new_path = g_strconcat(MF_UG_LABEL_PHONE, original_path + root_len, "/", NULL); + } else if (mf_ug_fm_svc_wapper_get_location(original_path) == MF_UG_MMC) { + root_len = strlen(MEMORY_FOLDER); + new_path = g_strconcat(MF_UG_LABEL_MMC, original_path + root_len, "/", NULL); + } else { + new_path = g_strdup(original_path); + } + + ug_debug("new path is %s", new_path); + return new_path; +} + +char *mf_ug_fm_svc_wapper_path_info_get(char *original_path) +{ + ug_mf_retvm_if(original_path == NULL, g_strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN")), "input path is NULL"); + char *path_info = NULL; + int len = 0; + + path_info = mf_ug_fm_svc_wrapper_translate_path(original_path); + if (path_info) { + len = strlen(path_info); + if (len > 0 && path_info[len - 1] == '/') { + path_info[len - 1] = '\0'; + } + } + return path_info; + +} + diff --git a/src/common/mf-ug-inotify-handle.c b/src/common/mf-ug-inotify-handle.c new file mode 100755 index 0000000..33432b2 --- /dev/null +++ b/src/common/mf-ug-inotify-handle.c @@ -0,0 +1,348 @@ +/* + * 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 +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mf-ug-dlog.h" +#include "mf-ug-inotify-handle.h" + +#define MF_WATCH_FLAGS \ + IN_CREATE | IN_DELETE | IN_DELETE_SELF | IN_MOVE_SELF | IN_MOVED_FROM | IN_MOVED_TO | IN_CLOSE_WRITE + +#define MF_EVENT_SIZE (sizeof(struct inotify_event)) +/** reasonable guess as to size of 1024 events */ +#define MF_EVENT_BUF_LEN (1024 * (MF_EVENT_SIZE + 16)) + +typedef struct _mf_inotify_t { + int fd; + int wd; + gchar *path; + unsigned int prev_event; + pthread_t monitor; + mf_ug_inotify_cb callback; + void *u_data; +} mf_inotify_t; + +static pthread_mutex_t mf_noti_lock; +static mf_inotify_t *g_handle; + +static void __mf_ug_inotify_handle_free_handle(void) +{ + pthread_mutex_destroy(&mf_noti_lock); + + if (g_handle) { + if (g_handle->fd >= 0) { + close(g_handle->fd); + g_handle->fd = -1; + } + if (g_handle->path) { + g_free(g_handle->path); + g_handle->path = NULL; + } + g_free(g_handle); + g_handle = NULL; + } + + return; +} + +static mf_inotify_t *__mf_ug_inotify_handle_init_handle(void) +{ + __mf_ug_inotify_handle_free_handle(); + g_handle = g_new0(mf_inotify_t, 1); + + if (g_handle) { + g_handle->fd = -1; + g_handle->wd = -1; + pthread_mutex_init(&mf_noti_lock, NULL); + } + + return g_handle; +} + +static void __mf_ug_inotify_handle_clean_up_thread(void *data) +{ + pthread_mutex_t *lock = (pthread_mutex_t *) data; + ug_mf_debug("Thread cancel Clean_up function"); + if (lock) { + pthread_mutex_unlock(lock); + } + return; +} + + +static gpointer __mf_ug_inotify_handle_watch_thread(gpointer user_data) +{ + mf_inotify_t *handle = (mf_inotify_t *) user_data; + int oldtype = 0; + + ug_mf_retvm_if(handle == NULL, NULL, "handle is NULL"); + ug_mf_debug("Create __mf_ug_inotify_handle_watch_thread!!! "); + + pthread_setcanceltype(PTHREAD_CANCEL_DEFERRED, &oldtype); + + while (1) { + ssize_t len = 0; + uint32_t i = 0; + char event_buff[MF_EVENT_BUF_LEN] = { 0, }; + + if (handle->fd < 0) { + ug_mf_error("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) { + ug_mf_error("Fail to read() -fd : %d, len : %d", handle->fd, len); + continue; + } + + while (i < len) { + struct inotify_event *pevent = (struct inotify_event *)&event_buff[i]; + mf_ug_inotify_event s_event = UG_MF_INOTI_NONE; + ug_mf_error("mask=%x dir=%s len=%d name=%s", + pevent->mask, (pevent->mask & IN_ISDIR) ? "yes" : "no", pevent->len, (pevent->len) ? pevent->name : NULL); + + if (pevent->len && strncmp(pevent->name, ".", 1) == 0) { + s_event = UG_MF_INOTI_NONE; + } else if (pevent->mask & IN_ISDIR) { + if (pevent->mask & IN_DELETE_SELF) + s_event = UG_MF_INOTI_DELETE_SELF; + + if (pevent->mask & IN_MOVE_SELF) + s_event = UG_MF_INOTI_MOVE_SELF; + + if (pevent->mask & IN_CREATE) + s_event = UG_MF_INOTI_CREATE; + + if (pevent->mask & IN_DELETE) + s_event = UG_MF_INOTI_DELETE; + + if (pevent->mask & IN_MOVED_FROM) + s_event = UG_MF_INOTI_MOVE_OUT; + + if (pevent->mask & IN_MOVED_TO) + s_event = UG_MF_INOTI_MOVE_IN; + } else { + if (pevent->mask & IN_CREATE) { + s_event = UG_MF_INOTI_NONE; + handle->prev_event = IN_CREATE; + } + + if (pevent->mask & IN_CLOSE_WRITE) { + if (handle->prev_event == IN_CREATE) { + s_event = UG_MF_INOTI_CREATE; + } else { + s_event = UG_MF_INOTI_MODIFY; + } + handle->prev_event = 0; + } + + if (pevent->mask & IN_DELETE) + s_event = UG_MF_INOTI_DELETE; + + if (pevent->mask & IN_MOVED_FROM) + s_event = UG_MF_INOTI_MOVE_OUT; + + if (pevent->mask & IN_MOVED_TO) + s_event = UG_MF_INOTI_MOVE_IN; + } + + ug_mf_debug("s_event : %d, prev_event: %x, callback : %p", s_event, handle->prev_event, handle->callback); + if (s_event != UG_MF_INOTI_NONE) { + pthread_cleanup_push(__mf_ug_inotify_handle_clean_up_thread, (void *)&mf_noti_lock); + pthread_mutex_lock(&mf_noti_lock); + if (handle->callback) { + handle->callback(s_event, (pevent->len) ? pevent->name : NULL, handle->u_data); + } + pthread_mutex_unlock(&mf_noti_lock); + pthread_cleanup_pop(0); + } + + i += sizeof(struct inotify_event) + pevent->len; + } + } + + ug_mf_debug("end __mf_ug_inotify_handle_watch_thread!!! "); + + return NULL; +} + +int mf_ug_inotify_handle_init_inotify(void) +{ + mf_inotify_t *handle = NULL; + handle = __mf_ug_inotify_handle_init_handle(); + ug_mf_retvm_if(handle == NULL, -1, "fail to __mf_ug_inotify_handle_init_handle()"); + + handle->fd = inotify_init(); + + if (handle->fd < 0) { + switch (errno) { + case EMFILE: + ug_mf_error("The user limit on the total number of inotify instances has been reached.\n"); + break; + case ENFILE: + ug_mf_error("The system limit on the total number of file descriptors has been reached.\n"); + break; + case ENOMEM: + ug_mf_error("Insufficient kernel memory is available.\n"); + break; + default: + ug_mf_error("Fail to inotify_init(), Unknown error.\n"); + break; + } + return -1; + } + pthread_create(&handle->monitor, NULL, __mf_ug_inotify_handle_watch_thread, handle); + return 0; +} + +int mf_ug_inotify_handle_add_inotify_watch(const char *path, mf_ug_inotify_cb callback, void *user_data) +{ + mf_inotify_t *handle = NULL; + handle = g_handle; + ug_mf_retvm_if(handle == NULL, -1, "handle is NULL"); + + if (handle->wd >= 0) { + ug_mf_warnig("The mf_notify module supports single instance, the watch descript [%d] is removed automatically\n", handle->wd); + mf_ug_inotify_handle_rm_inotify_watch(); + } + + pthread_mutex_lock(&mf_noti_lock); + handle->wd = inotify_add_watch(handle->fd, path, MF_WATCH_FLAGS); + + if (handle->wd < 0) { + switch (errno) { + case EACCES: + ug_mf_error("Read access to the given file is not permitted.\n"); + break; + case EBADF: + ug_mf_error("The given file descriptor is not valid.\n"); + handle->fd = -1; + break; + case EFAULT: + ug_mf_error("pathname points outside of the process's accessible address space.\n"); + break; + case EINVAL: + ug_mf_error("The given event mask contains no legal events; or fd is not an inotify file descriptor.\n"); + break; + case ENOMEM: + ug_mf_error("Insufficient kernel memory is available.\n"); + break; + case ENOSPC: + ug_mf_error("User limit on the total num of inotify watch was reached or the kernel failed to alloc a needed resource.\n"); + break; + default: + ug_mf_error("Fail to ug_ug_mf_inotify_add_watch(), Unknown error.\n"); + break; + } + pthread_mutex_unlock(&mf_noti_lock); + return -1; + } + + ug_mf_debug("start watching [%s] directory", path); + if (handle->path) { + g_free(handle->path); + handle->path = NULL; + } + handle->path = g_strdup(path); + handle->callback = callback; + handle->u_data = user_data; + pthread_mutex_unlock(&mf_noti_lock); + + return 0; +} + + + +int mf_ug_inotify_handle_rm_inotify_watch(void) +{ + int ret = -1; + mf_inotify_t *handle = NULL; + + handle = g_handle; + ug_mf_retvm_if(handle == NULL, -1, "handle is NULL"); + + if (handle->fd < 0 || handle->wd < 0) { + ug_mf_warnig("inotify is not initialized or has no watching dir - fd [%d] wd [%d]", handle->fd, handle->wd); + return 0; + } + + pthread_mutex_lock(&mf_noti_lock); + + ret = inotify_rm_watch(handle->fd, handle->wd); + if (ret < 0) { + switch (errno) { + case EBADF: + ug_mf_error("fd is not a valid file descriptor\n"); + handle->fd = -1; + break; + case EINVAL: + ug_mf_error("The watch descriptor wd is not valid; or fd is not an inotify file descriptor.\n"); + handle->wd = -1; + break; + default: + ug_mf_error("Fail to mf_ug_inotify_handle_add_inotify_watch(), Unknown error.\n"); + break; + } + pthread_mutex_unlock(&mf_noti_lock); + return -1; + } + ug_mf_debug("stop watching [%s] directory", handle->path); + if (handle->path) { + g_free(handle->path); + handle->path = NULL; + } + handle->callback = NULL; + handle->u_data = NULL; + handle->wd = -1; + pthread_mutex_unlock(&mf_noti_lock); + + return 0; +} + +void mf_ug_inotify_handle_finalize_inotify(void) +{ + mf_inotify_t *handle = NULL; + handle = g_handle; + + ug_mf_retm_if(handle == NULL, "handle is NULL"); + + if (handle->fd >= 0 && handle->wd >= 0) { + mf_ug_inotify_handle_rm_inotify_watch(); + } + + pthread_cancel(handle->monitor); + pthread_join(handle->monitor, NULL); + + __mf_ug_inotify_handle_free_handle(); + + return; +} diff --git a/src/common/mf-ug-list-play.c b/src/common/mf-ug-list-play.c new file mode 100755 index 0000000..64591ec --- /dev/null +++ b/src/common/mf-ug-list-play.c @@ -0,0 +1,989 @@ +/* + * 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 +#include +#include +#include +#include +#include +#include + +#include "mf-ug-main.h" +#include "mf-ug-conf.h" +#include "mf-ug-cb.h" +#include "mf-ug-fm-svc-wrapper.h" +#include "mf-ug-util.h" +#include "mf-ug-winset.h" +#include "mf-ug-dlog.h" +#include "mf-ug-fs-util.h" + + + +/****************************** +** Prototype : __mf_ug_list_play_init_data +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_list_play_init_data(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + if (ugd->ug_ListPlay.ug_Player != 0) { + mf_ug_list_play_destory_playing_file(ugd); + ugd->ug_ListPlay.ug_Player = 0; + } + ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_INIT; + ugd->ug_ListPlay.ug_pPlayFilePath = NULL; + UG_TRACE_END; +} + +/****************************** +** Prototype : _mp_playing_error +** Description : +** Input : void * data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static int __mf_ug_list_play_playing_error(ugListItemData *data) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = data; + ug_mf_retvm_if(itemData == NULL, 0, "itemData is NULL"); + + mf_ug_list_play_destory_playing_file(itemData->ug_pData); + UG_TRACE_END; + return 0; +} + +/****************************** +** Prototype : __mf_ug_list_play_update_item_icon +** Description : +** Input : ugListItemData *data +** int state +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_list_play_update_item_icon(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + Elm_Object_Item *gl_item = NULL; + ugListItemData *itemData = NULL; + ugNaviBar *pNaviInUse = NULL; + Evas_Object *pGenlist = NULL; + + if (ugd->ug_ListPlay.ug_pPlayFilePath == NULL || strlen(ugd->ug_ListPlay.ug_pPlayFilePath) == 0) { + return; + } + pNaviInUse = mf_ug_navi_bar_get_in_use_navi(ugd); + pGenlist = pNaviInUse->ug_pContent; + + gl_item = elm_genlist_first_item_get(pGenlist); + while (gl_item) { + itemData = elm_object_item_data_get(gl_item); + if (itemData && itemData->ug_pItemName) { + if (g_strcmp0(ugd->ug_ListPlay.ug_pPlayFilePath, itemData->ug_pItemName->str) == 0) { + elm_genlist_item_update(gl_item); + UG_TRACE_END; + return; + } + } + gl_item = elm_genlist_item_next_get(gl_item); + } + + ug_debug("__mf_ug_list_play_update_item_icon failed"); + UG_TRACE_END; +} + + +/****************************** +** Prototype : __mf_ug_list_play_set_play_start_status +** Description : +** Input : ugListItemData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_list_play_set_play_start_status(void *data, char *path) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_PLAYING; + UG_TRACE_END; +} + +/****************************** +** Prototype : __mf_ug_list_play_set_play_resume_status +** Description : +** Input : ugListItemData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_list_play_set_play_resume_status(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_PLAYING; + UG_TRACE_END; +} + +/****************************** +** Prototype : __mf_ug_list_play_set_play_pause_status +** Description : +** Input : ugListItemData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_list_play_set_play_pause_status(ugData *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_PAUSED; + UG_TRACE_END; +} + +/****************************** +** Prototype : __mf_ug_list_play_msg_cb +** Description : +** Input : int msg_type +** void *msg_param +** void *user_param +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static int __mf_ug_list_play_msg_cb(int msg_type, void *msg_param, ugListItemData *user_param) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = user_param; + ug_mf_retvm_if(itemData == NULL, false, "itemData is NULL"); + ugData *ugd = itemData->ug_pData; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + MMMessageParamType *param = (MMMessageParamType *) msg_param; + + ug_debug("msg_type is [%d]", msg_type); + if (ugd->ug_ListPlay.ug_Player == 0) { + return false; + } else { + switch (msg_type) { + case MM_MESSAGE_BEGIN_OF_STREAM: + ug_debug("receive MM_MESSAGE_BEGIN_OF_STREAM\n"); + break; + case MM_MESSAGE_ERROR: + ug_debug("receive MM_MESSAGE_ERROR Error Code=%x\n", param->code); + switch (param->code) { + case MM_ERROR_PLAYER_INTERNAL: + ug_debug("receive MM_ERROR_PLAYER_INTERNAL\n"); + break; + } + ecore_idler_add((Ecore_Task_Cb) __mf_ug_list_play_playing_error, itemData); + break; + case MM_MESSAGE_WARNING: + ug_debug("receive MM_MESSAGE_WARNING\n"); + break; + case MM_MESSAGE_STATE_CHANGED: + + ug_mf_retvm_if(param == NULL, false, "param is NULL"); + ug_debug("msg_type is [%d]", param->state.current); + switch (param->state.current) { + case MM_PLAYER_STATE_NONE: + ug_debug("==> [MediaPlayerApp] Player is [NONE]\n"); + break; + case MM_PLAYER_STATE_READY: + ug_debug("==> [MediaPlayerApp] Player is [READY]\n"); + ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_READY; + __mf_ug_list_play_update_item_icon(ugd); + break; + case MM_PLAYER_STATE_PLAYING: + ug_debug("==> [MediaPlayerApp] Player is [PLAYING]\n"); + if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_READY) { + if (ugd->ug_ListPlay.ug_pPlayFilePath == NULL) + ugd->ug_ListPlay.ug_pPlayFilePath = g_strdup(itemData->ug_pItemName->str); + __mf_ug_list_play_set_play_start_status(ugd, itemData->ug_pItemName->str); + } else if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PAUSED) { + if (ugd->ug_ListPlay.ug_pPlayFilePath == NULL) + ugd->ug_ListPlay.ug_pPlayFilePath = g_strdup(itemData->ug_pItemName->str); + __mf_ug_list_play_set_play_resume_status(ugd); + } + __mf_ug_list_play_update_item_icon(ugd); + break; + case MM_PLAYER_STATE_PAUSED: + ug_debug("==> [MediaPlayerApp] Player is [PAUSED]\n"); + __mf_ug_list_play_set_play_pause_status(ugd); + __mf_ug_list_play_update_item_icon(ugd); + break; + case MM_PLAYER_STATE_NULL: + ug_debug("==> [MediaPlayerApp] Player is [NULL]\n"); + if (ugd->ug_ListPlay.ug_pPlayFilePath != NULL) { + g_free(ugd->ug_ListPlay.ug_pPlayFilePath); + ugd->ug_ListPlay.ug_pPlayFilePath = NULL; + } + break; + default: + break; + } + + break; + case MM_MESSAGE_STATE_INTERRUPTED: + ug_debug("receive MM_MESSAGE_STATE_CHANGED_BY_ASM\n"); + __mf_ug_list_play_set_play_pause_status(ugd); + __mf_ug_list_play_update_item_icon(ugd); + break; + case MM_MESSAGE_END_OF_STREAM: + mf_ug_list_play_destory_playing_file(ugd); + if (ugd->ug_ListPlay.ug_pPlayFilePath != NULL) { + g_free(ugd->ug_ListPlay.ug_pPlayFilePath); + ugd->ug_ListPlay.ug_pPlayFilePath = NULL; + } + break; + default: + UG_TRACE_END; + return false; + } + } + return true; +} + +/****************************** +** Prototype : _mp_player_mgr_create +** Description : +** Input : void *data +** const gchar *path +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_create_player_mgr(void *data, const char *path) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + int path_len = strlen(path); + char *g_err_name = NULL; + int ret = MM_ERROR_NONE; + + if (path_len > 0 && path_len < MYFILE_DIR_PATH_LEN_MAX) { + if (ugd->ug_ListPlay.ug_Player == 0) { + if (mm_player_create(&ugd->ug_ListPlay.ug_Player) != MM_ERROR_NONE) { + ug_debug("Error when __mf_ug_list_play_create_player_mgr\n"); + UG_TRACE_END; + return false; + } + /*avsysaudiosink volume table setting */ + + ret = mm_player_set_attribute(ugd->ug_ListPlay.ug_Player, &g_err_name, "sound_volume_type", MM_SOUND_VOLUME_TYPE_MEDIA, + "profile_uri", path, strlen(path), NULL); + if (ret != MM_ERROR_NONE) { + ug_debug(">>>>>>>>>>>>>g_err_name : %s\n", g_err_name); + UG_TRACE_END; + return false; + } else { + UG_TRACE_END; + return true; + } + } else { + ug_debug("player handle is exist"); + UG_TRACE_END; + return false; + } + } else { + ug_debug("the path_len is too long"); + UG_TRACE_END; + return false; + } +} + +/****************************** +** Prototype : _mp_player_mgr_set_msg_callback +** Description : +** Input : MMMessageCallback cb +** gpointer user_data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_set_player_mgr_msg_cb(MMMessageCallback cb, gpointer user_data) +{ + UG_TRACE_BEGIN; + + ugListItemData *itemData = (ugListItemData *)user_data; + ug_mf_retvm_if(itemData == NULL, false, "itemData is NULL"); + + ugData *ugd = itemData->ug_pData; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + if (ugd->ug_ListPlay.ug_Player != 0) { + if (mm_player_set_message_callback(ugd->ug_ListPlay.ug_Player, cb, user_data) != MM_ERROR_NONE) { + ug_debug("Error when _mp_player_mgr_set_msg_callback\n"); + UG_TRACE_END; + return false; + } else { + UG_TRACE_END; + return true; + } + } + UG_TRACE_END; + return false; +} + + +/****************************** +** Prototype : _mp_player_mgr_realize +** Description : +** Input : ugListItemData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_realize_player_mgr(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + int error_code = 0; + MMPlayerStateType state = MM_PLAYER_STATE_NONE; + + if (ugd->ug_ListPlay.ug_Player != 0) { + error_code = mm_player_get_state(ugd->ug_ListPlay.ug_Player, &state); + + if (0 == error_code && MM_PLAYER_STATE_NULL == state) { + if (mm_player_realize(ugd->ug_ListPlay.ug_Player) != MM_ERROR_NONE) { + ug_debug("Error when _mp_player_mgr_realize\n"); + UG_TRACE_END; + return false; + } else { + UG_TRACE_END; + return true; + } + } else { + UG_TRACE_END; + return false; + } + } + UG_TRACE_END; + + return false; +} + + +/****************************** +** Prototype : __mf_ug_list_play_ready_new_file_play +** Description : Samsung +** Input : void *data +** +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_ready_new_file_play(void *data) +{ + + UG_TRACE_BEGIN; + ugListItemData *itemData = data; + ug_mf_retvm_if(itemData == NULL, false, "itemData is NULL"); + + ugData *ugd = (ugData *)itemData->ug_pData; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + char *path = strdup(itemData->ug_pItemName->str); + + /*check if file is exist */ + if (path != NULL) { + if (!ecore_file_exists(path)) { + ug_debug("Error file %s is not exist\n", path); + free(path); + path = NULL; + UG_TRACE_END; + return false; + } + + if (!__mf_ug_list_play_create_player_mgr(ugd, path)) { + ug_debug(); + free(path); + path = NULL; + UG_TRACE_END; + return false; + } + + + if (!__mf_ug_list_play_set_player_mgr_msg_cb((MMMessageCallback) __mf_ug_list_play_msg_cb, itemData)) { + free(path); + path = NULL; + UG_TRACE_END; + return false; + } + + + if (!__mf_ug_list_play_realize_player_mgr(ugd)) { + free(path); + path = NULL; + UG_TRACE_END; + return false; + } + free(path); + path = NULL; + UG_TRACE_END; + return true; + } else { + return false; + } + +} + + +/****************************** +** Prototype : _mp_player_mgr_play +** Description : +** Input : ugListItemData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_play(void *data) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + int err = MM_ERROR_NONE; + int error_code = 0; + MMPlayerStateType state = MM_PLAYER_STATE_NONE; + + if (ugd->ug_ListPlay.ug_Player != 0) { + error_code = mm_player_get_state(ugd->ug_ListPlay.ug_Player, &state); + + if (0 == error_code && MM_PLAYER_STATE_READY == state) { + err = mm_player_start(ugd->ug_ListPlay.ug_Player); + if (err != MM_ERROR_NONE) { + ug_debug("Error when _mp_player_mgr_play. err[%x]\n", err); + UG_TRACE_END; + return false; + } else { + UG_TRACE_END; + return true; + } + } else { + UG_TRACE_END; + return false; + } + } else { + UG_TRACE_END; + return false; + } +} + +/****************************** +** Prototype : __mf_ug_list_play_stop +** Description : +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_stop(ugData *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + MMPlayerStateType state = MM_PLAYER_STATE_NONE; + int error_code = 0; + + if (ugd->ug_ListPlay.ug_Player != 0) { + error_code = mm_player_get_state(ugd->ug_ListPlay.ug_Player, &state); + + if (0 == error_code && (MM_PLAYER_STATE_PLAYING == state || MM_PLAYER_STATE_PAUSED == state)) { + if (mm_player_stop(ugd->ug_ListPlay.ug_Player) != MM_ERROR_NONE) { + ug_debug("Error when __mf_ug_list_play_stop\n"); + UG_TRACE_END; + return false; + } else { + + ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_STOP; + UG_TRACE_END; + return true; + } + + } else { + UG_TRACE_END; + return false; + } + } + UG_TRACE_END; + return false; +} + +/****************************** +** Prototype : __mf_ug_list_play_unrealize +** Description : +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_unrealize(ugData *data) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + if (ugd->ug_ListPlay.ug_Player != 0) { + /*/unrealize can be invoked at any state */ + if (mm_player_unrealize(ugd->ug_ListPlay.ug_Player) != MM_ERROR_NONE) { + ug_debug("Error when __mf_ug_list_play_unrealize\n"); + UG_TRACE_END; + return false; + } else { + UG_TRACE_END; + return true; + } + } + UG_TRACE_END; + return false; +} + +/****************************** +** Prototype : __mf_ug_list_play_destory +** Description : +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_destory(ugData *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + if (ugd->ug_ListPlay.ug_Player != 0) { + /*/destroy can be invoked at any state */ + if (mm_player_destroy(ugd->ug_ListPlay.ug_Player) != MM_ERROR_NONE) { + ug_debug("Error when __mf_ug_list_play_destory\n"); + UG_TRACE_END; + return false; + } else { + ugd->ug_ListPlay.ug_Player = 0; + ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_INIT; + UG_TRACE_END; + return true; + } + } + UG_TRACE_END; + return false; +} + +/****************************** +** Prototype : __mf_ug_list_play_play_current_file +** Description : Samsung +** Input : ugData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_play_current_file(ugData *data) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + if (ugd->ug_ListPlay.ug_iPlayState != PLAY_STATE_READY) { + UG_TRACE_END; + return false; + } + + if (!__mf_ug_list_play_play(ugd)) { + mf_ug_list_play_destory_playing_file(ugd); + UG_TRACE_END; + return false; + } + return true; +} + + +/****************************** +** Prototype : __mf_ug_list_play_resume +** Description : +** Input : ugListItemData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_resume(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + MMPlayerStateType state = MM_PLAYER_STATE_NONE; + int error_code = 0; + int err = -1; + + if (ugd->ug_ListPlay.ug_Player != 0) { + error_code = mm_player_get_state(ugd->ug_ListPlay.ug_Player, &state); + + if (0 == error_code && MM_PLAYER_STATE_PAUSED == state) { + err = mm_player_resume(ugd->ug_ListPlay.ug_Player); + if (err != MM_ERROR_NONE) { + ug_debug("Error when _ug_player_mgr_resume. err[%x]\n", err); + UG_TRACE_END; + return false; + } else { + UG_TRACE_END; + return true; + } + } else { + UG_TRACE_END; + return false; + } + } + UG_TRACE_END; + return false; + +} + + +/****************************** +** Prototype : __mf_ug_list_play_pause +** Description : +** Input : ugListItemData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static bool __mf_ug_list_play_pause(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + int err = MM_ERROR_NONE; + MMPlayerStateType state = MM_PLAYER_STATE_NONE; + int error_code = 0; + + if (ugd->ug_ListPlay.ug_Player) { + error_code = mm_player_get_state(ugd->ug_ListPlay.ug_Player, &state); + + if (0 == error_code && MM_PLAYER_STATE_PLAYING == state) { + err = mm_player_pause(ugd->ug_ListPlay.ug_Player); + if (err != MM_ERROR_NONE) { + ug_debug("Error when _ug_player_mgr_pause. err[%x]\n", err); + UG_TRACE_END; + return false; + } else { + UG_TRACE_END; + return true; + } + } else { + UG_TRACE_END; + return false; + } + } + UG_TRACE_END; + return false; +} + + +/****************************** +** Prototype : mp_play_control_cb +** Description : +** Input : ugListItemData *data +** int state +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_list_play_control_cb(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + int state = ugd->ug_ListPlay.ug_iPlayState; + + if (state == PLAY_STATE_PLAYING) { + __mf_ug_list_play_pause(ugd); + } else { + __mf_ug_list_play_resume(ugd); + + } + UG_TRACE_END; +} + +static bool __mf_ug_list_play_play_new_file(ugListItemData *data) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = data; + ug_mf_retvm_if(itemData == NULL, false, "itemData is NULL"); + + ugData *ugd = (ugData *)itemData->ug_pData; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + __mf_ug_list_play_init_data(ugd); + + if (!__mf_ug_list_play_ready_new_file_play(itemData)) { + UG_TRACE_END; + return false; + } + + if (!__mf_ug_list_play_play_current_file(ugd)) { + UG_TRACE_END; + return false; + } + UG_TRACE_END; + + return true; +} + + +/****************************** +** Prototype : _music_item_play +** Description : +** Input : ugListItemData *param +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_list_play_play_music_item(ugListItemData *data) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = data; + ug_mf_retm_if(itemData == NULL, "itemData is NULL"); + ugData *ugd = itemData->ug_pData; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + int key = 0; + int error_code = 0; + error_code = vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &key); + ug_debug("key is [%d]", key); + if (error_code == 0 && key <= VCONFKEY_SYSMAN_BAT_POWER_OFF) { + mf_ug_popup_create(ugd, UG_POPMODE_TEXT, NULL, ("Battery low, play failed!"), NULL, NULL, NULL, NULL, NULL); + } else if (error_code != 0) { + mf_ug_popup_create(ugd, UG_POPMODE_TEXT, NULL, ("Unkown error, play failed!"), NULL, NULL, NULL, NULL, NULL); + } else { + if (ugd->ug_ListPlay.ug_pPlayFilePath != NULL) { + if (g_strcmp0(ugd->ug_ListPlay.ug_pPlayFilePath, itemData->ug_pItemName->str) != 0) { + mf_ug_list_play_destory_playing_file(ugd); + __mf_ug_list_play_play_new_file(itemData); + } else { + /*/ playing the same file */ + __mf_ug_list_play_control_cb(ugd); + } + } else { + __mf_ug_list_play_play_new_file(itemData); + } + } + UG_TRACE_END; + +} + +/****************************** +** Prototype : mf_ug_list_play_destory_playing_file +** Description : +** Input : ugListItemData *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_list_play_destory_playing_file(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + __mf_ug_list_play_stop(ugd); + __mf_ug_list_play_unrealize(ugd); + __mf_ug_list_play_destory(ugd); + UG_TRACE_END; +} diff --git a/src/common/mf-ug-util.c b/src/common/mf-ug-util.c new file mode 100755 index 0000000..e934f33 --- /dev/null +++ b/src/common/mf-ug-util.c @@ -0,0 +1,729 @@ +/* + * 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 +#include + +#include "mf-ug-util.h" +#include "mf-ug-winset.h" +#include "mf-ug-fm-svc-wrapper.h" +#include "mf-ug-fs-util.h" +#include "mf-ug-inotify-handle.h" +#include "mf-ug-resource.h" + +/****************************** +** Prototype : ug_genlist_selected_state_get +** Description : +** Input : void *data +** Output : bool +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +bool mf_ug_util_is_genlist_selected(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, false, "ugd is NULL"); + + Elm_Object_Item *gli = NULL; + Elm_Object_Item *nli = NULL; + Evas_Object *genlist = NULL; + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retvm_if(pNavi_s == NULL, false, "get navigation bar in use failed"); + + genlist = pNavi_s->ug_pContent; + gli = elm_genlist_first_item_get(genlist); + + while (gli) { + ugListItemData *itemData = (ugListItemData *)elm_object_item_data_get(gli); + ug_mf_retvm_if(itemData == NULL, false, "itemData is NULL"); + if (itemData->ug_bChecked == true) { + UG_TRACE_END; + return true; + } + nli = elm_genlist_item_next_get(gli); + gli = nli; + } + UG_TRACE_END; + return false; +} + +/****************************** +** Prototype : ug_parase_path_get +** Description : +** Input : GList *dest_list +** char *path_list +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_util_get_params_path(Eina_List **dest_list, const char *path_list) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(dest_list == NULL, "dest_list is NULL"); + + gchar **result = NULL; + gchar **params = NULL; + result = g_strsplit(path_list, "?", 0); + + for (params = result; *params; params++) { + *dest_list = eina_list_append(*dest_list, strdup(*params)); + } + + g_strfreev(result); + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_util_free_eina_list_data +** Description : Samsung +** Input : Eina_List **list +** mf_ug_eina_list_node_type node_type +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_util_free_eina_list_data(Eina_List **list, mf_ug_eina_list_node_type node_type) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(list == NULL, "list is NULL"); + ug_mf_retm_if(*list == NULL, "*list is NULL"); + + Eina_List *l = NULL; + void *pNode = NULL; + switch (node_type) { + case NODE_TYPE_CHAR: + case NODE_TYPE_PNODE: + EINA_LIST_FOREACH(*list, l, pNode) { + free(pNode); + pNode = NULL; + } + break; + case NODE_TYPE_GSTRING: + EINA_LIST_FOREACH(*list, l, pNode) { + if (pNode != NULL) { + g_string_free(pNode, TRUE); + pNode = NULL; + } + } + break; + default: + break; + } + + eina_list_free(*list); + *list = NULL; + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_util_is_mass_storage_on +** Description : Samsung +** Input : None +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +bool mf_ug_util_is_mass_storage_on() +{ + UG_TRACE_BEGIN; + int usb_state = 0; + int error_code = vconf_get_int(VCONFKEY_USB_STORAGE_STATUS, &usb_state); + ug_debug("usb state is %d", usb_state); + ug_debug("error_code is %d", error_code); + if (error_code == 0) { + if (usb_state != VCONFKEY_USB_STORAGE_STATUS_UMS_ON && usb_state != VCONFKEY_USB_STORAGE_STATUS_UMS_MMC_ON) { + UG_TRACE_END; + return false; + } else { + UG_TRACE_END; + return true; + } + } else { + UG_TRACE_END; + return false; + } +} + + +/****************************** +** Prototype : __mf_ug_util_get_marked_selected_items +** Description : +** Input : GList *list +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_util_get_marked_selected_items(Eina_List *list, Eina_List **select_list) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(select_list == NULL, "select_list is NULL"); + ug_mf_retm_if(list == NULL, "list is NULL"); + + Eina_List *l = NULL; + void *pNode = NULL; + + EINA_LIST_FOREACH(list, l, pNode) { + if (pNode != NULL) { + *select_list = eina_list_append(*select_list, strdup(pNode)); + } + } + UG_TRACE_END; + +} + +/****************************** +** Prototype : __mf_ug_util_get_marked_off_selected_items +** Description : +** Input : void *data +** Evas_Object* content +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_util_get_marked_off_selected_items(void *data, Eina_List **select_list) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + ug_mf_retm_if(select_list == NULL, "selected_list is NULL"); + + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + Evas_Object *content = pNavi_s->ug_pContent; + Elm_Object_Item *gli = elm_genlist_first_item_get(content); + int radio_id = 1; + Elm_Object_Item *nli = NULL; + + + while (gli) { + + ugListItemData *params = (ugListItemData *)elm_object_item_data_get(gli); + ug_mf_retm_if(params == NULL, "params is NULL"); + if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) { + if (params->ug_pRadioBox) { + if (elm_radio_value_get(ugd->ug_MainWindow.ug_pRadioGroup) == radio_id) { + *select_list = eina_list_append(*select_list, strdup(params->ug_pItemName->str)); + break; + } + radio_id++; + } + } else if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE) { + if (params->ug_pCheckBox) { + if (params->ug_bChecked == true) { + *select_list = eina_list_append(*select_list, strdup(params->ug_pItemName->str)); + } + } + } + nli = elm_genlist_item_next_get(gli); + gli = nli; + } + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_util_get_send_result +** Description : +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +char *mf_ug_util_get_send_result(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugData is NULL"); + + char *file_selected = NULL; + Eina_List *selected_list = NULL; + Eina_List *l = NULL; + char *pNode = NULL; + + if (ugd->ug_UiGadget.ug_iMarkedMode == MARKED_ON + && (ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE || ugd->ug_UiGadget.ug_iSelectMode == MULTI_ALL_MODE)) { + __mf_ug_util_get_marked_selected_items(ugd->ug_UiGadget.ug_pMultiSelectFileList, &selected_list); + } else { + __mf_ug_util_get_marked_off_selected_items(ugd, &selected_list); + } + + EINA_LIST_FOREACH(selected_list, l, pNode) { + if (pNode != NULL) { + if (file_selected == NULL) { + file_selected = g_strconcat(pNode, NULL); + } else { + char *temp = file_selected; + file_selected = g_strconcat(file_selected, "?", pNode, NULL); + free(temp); + } + } + } + mf_ug_util_free_eina_list_data(&selected_list, NODE_TYPE_CHAR); + UG_TRACE_END; + return file_selected; +} + + +/****************************** +** Prototype : _ug_mf_set_state_as +** Description : +** Input : struct ugmyfiledata* data +** int state +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_util_set_current_state(void *data, int state) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + ugd->ug_Status.ug_iState = state; + UG_TRACE_END; +} + + +/****************************** +** Prototype : mf_ug_util_get_mmc_state +** Description : +** Input : int* mmc_card +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +int mf_ug_util_get_mmc_state(int *mmc_card) +{ + UG_TRACE_BEGIN; + int data = UG_ERROR_RETURN; + int error_code = MYFILE_ERR_NONE; + + ug_mf_retvm_if(mmc_card == NULL, MYFILE_ERR_SRC_ARG_INVALID, "mmc_card is NULL"); + + *mmc_card = 0; + error_code = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &data); + + if (error_code) { + UG_TRACE_END; + return MYFILE_ERR_GET_VCONF_FAIL; + } + + if (data != VCONFKEY_SYSMAN_MMC_MOUNTED) { + *mmc_card = MMC_OFF; + } else { + *mmc_card = MMC_ON; + } + UG_TRACE_END; + return error_code; +} + +/****************************** +** Prototype : mf_ug_util_create_dir_monitor +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +int mf_ug_util_create_dir_monitor(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, UG_ERROR_RETURN, "ugData is NULL"); + + if (ugd->ug_UiGadget.ug_pInotifyPipe) { + ecore_pipe_del(ugd->ug_UiGadget.ug_pInotifyPipe); + ugd->ug_UiGadget.ug_pInotifyPipe = NULL; + } + ugd->ug_UiGadget.ug_pInotifyPipe = ecore_pipe_add(mf_ug_cb_dir_pipe_cb, (const void *)ugd); + UG_TRACE_END; + + return mf_ug_inotify_handle_init_inotify(); +} + + +/****************************** +** Prototype : mf_ug_util_add_dir_watch +** Description : Samsung +** Input : const char *path +** void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +int mf_ug_util_add_dir_watch(const char *path, void *data) +{ + return mf_ug_inotify_handle_add_inotify_watch(path, mf_ug_cb_dir_update_cb, data); +} + + +/****************************** +** Prototype : mf_ug_util_set_mmc_state_cb +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +int mf_ug_util_set_mmc_state_cb(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, UG_ERROR_RETURN, "ugd is NULL"); + + int mmc_state = MMC_OFF; + mf_ug_util_get_mmc_state(&mmc_state); + ugd->ug_Status.ug_iMmcFlag = mmc_state; + + UG_TRACE_END; + return vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, mf_ug_cb_mmc_changed_cb, ugd); +} + +/****************************** +** Prototype : mf_ug_util_destory_mmc_state_cb +** Description : Samsung +** Input : None +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_util_destory_mmc_state_cb() +{ + UG_TRACE_BEGIN; + vconf_ignore_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, mf_ug_cb_mmc_changed_cb); + UG_TRACE_END; +} + +void mf_ug_util_destory_mass_storage_callback() +{ + UG_TRACE_BEGIN; + vconf_ignore_key_changed(VCONFKEY_USB_STORAGE_STATUS, mf_ug_cb_mass_storage_changed_cb); + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_util_destory_dir_monitor +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_util_destory_dir_monitor(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + if (ugd->ug_UiGadget.ug_pInotifyPipe) { + ecore_pipe_del(ugd->ug_UiGadget.ug_pInotifyPipe); + ugd->ug_UiGadget.ug_pInotifyPipe = NULL; + } + + mf_ug_inotify_handle_finalize_inotify(); + UG_TRACE_END; + + return; +} + + +/****************************** +** Prototype : mf_ug_util_storage_insert_action +** Description : Samsung +** Input : void *data +** char* pItemLabel +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_util_storage_insert_action(void *data, char *pItemLabel) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + Elm_Object_Item *pItemPhone = NULL; + Elm_Object_Item *pItemMMC = NULL; + Evas_Object *pTabBar = NULL; + Evas_Object *pOldContent = NULL; + + if (ugd->ug_MainWindow.ug_pTabBar == NULL) { + /*1. unset the current content of main layout */ + pOldContent = elm_object_part_content_unset(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content"); + /*2. create Tab Bar */ + if (ugd->ug_MainWindow.ug_pTabLayout == NULL) { + ugd->ug_MainWindow.ug_pTabLayout = mf_ug_main_tab_layout_create(ugd->ug_MainWindow.ug_pWindow); + } + pTabBar = mf_ug_tab_bar_create(ugd->ug_MainWindow.ug_pWindow); + ugd->ug_MainWindow.ug_pTabBar = pTabBar; + elm_object_part_content_set(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.content", pOldContent); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.tabbar", ugd->ug_MainWindow.ug_pTabBar); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", ugd->ug_MainWindow.ug_pTabLayout); + evas_object_show(ugd->ug_MainWindow.ug_pTabLayout); + /*3. set Navi Bars of phone and mmc as sub view of Tab Bar */ + pItemPhone = mf_ug_tab_bar_append_item(pTabBar, UG_ICON_PHONE, MF_UG_LABEL_PHONE, ugd); + pItemMMC = mf_ug_tab_bar_append_item(pTabBar, UG_ICON_MEMORY, MF_UG_LABEL_MMC, ugd); + /*4. set selected */ + //mf_ug_tab_bar_set_selected_item(pItemPhone); + + } else { + pItemMMC = mf_ug_tab_bar_append_item(pTabBar, UG_ICON_MEMORY, MF_UG_LABEL_MMC, ugd); + } + + if (ugd->ug_Status.ug_bMassStorageFlag) { + mf_ug_tab_bar_set_item_disable(ugd->ug_MainWindow.ug_pTabBar, EINA_TRUE); + } + UG_TRACE_END; +} + + +/****************************** +** Prototype : mf_ug_util_set_main_layout_by_tab_item_count +** Description : __mf_ug_main_free_evas_object +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +int mf_ug_util_set_main_layout_by_tab_item_count(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, 0, "ugd is NULL"); + + Evas_Object *pOldContent = NULL; + pOldContent = ugd->ug_MainWindow.ug_pTabBar; + if (eina_list_count(ugd->ug_MainWindow.ug_pNaviBarList) < 2) { + /*no: tab bar delete operation */ + elm_object_part_content_unset(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.tabbar"); + evas_object_del(pOldContent); + elm_object_part_content_unset(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.content"); + + elm_object_part_content_unset(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content"); + UG_SAFE_FREE_OBJ(ugd->ug_MainWindow.ug_pTabLayout); + ugd->ug_MainWindow.ug_pTabBar = NULL; + UG_TRACE_END; + return 0; + } else { + /*yes: do nothing */ + //elm_toolbar_item_selected_set(elm_toolbar_first_item_get(ugd->ug_MainWindow.ug_pTabBar), EINA_TRUE); + UG_TRACE_END; + return 1; + } +} + +/****************************** +** Prototype : mf_ug_util_get_file_launch_type +** Description : +** Input : char * path +** Output : UG_MYFILE_LAUNCH_TYPE +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +mf_ug_launch_type mf_ug_util_get_file_launch_type(char *path) +{ + if (path == NULL) { + UG_TRACE_END; + return LAUNCH_TYPE_UNSUPPORT; + } + if (ecore_file_file_get(path) == NULL) { + UG_TRACE_END; + return LAUNCH_TYPE_UNSUPPORT; + } + if (ecore_file_is_dir(path) == 1) { + UG_TRACE_END; + return LAUNCH_TYPE_UNSUPPORT; + } + + mf_ug_fs_file_type category_t = 0; + mf_ug_file_attr_get_file_category(path, &category_t); + if (category_t == UG_FILE_TYPE_MUSIC || category_t == UG_FILE_TYPE_SOUND || category_t == UG_FILE_TYPE_VOICE) { + UG_TRACE_END; + return LAUNCH_TYPE_MUSIC; + } else if (category_t == UG_FILE_TYPE_IMAGE) { + UG_TRACE_END; + return LAUNCH_TYPE_IMAGE; + } else { + UG_TRACE_END; + return LAUNCH_TYPE_UNSUPPORT; + } + + UG_TRACE_END; +} + + +char *mf_ug_util_upper_folder_name_get(void *data, GString *fullpath) +{ + ug_mf_retvm_if(data == NULL, NULL, "data is NULL"); + ug_mf_retvm_if(fullpath == NULL, NULL, "fullpath is NULL"); + ug_mf_retvm_if(fullpath->str == NULL, NULL, "fullpath is NULL"); + + GString *parent_path = NULL; + GString *gName = NULL; + char *upper_name = NULL; + + parent_path = mf_ug_fm_svc_wrapper_get_file_parent_path(fullpath); + + ug_mf_retvm_if(parent_path == NULL, NULL, "fullpath is NULL"); + ug_mf_retvm_if(parent_path->str == NULL, NULL, "fullpath is NULL"); + + + if (!g_strcmp0(parent_path->str, PHONE_FOLDER)) { + upper_name = g_strdup(MF_UG_LABEL_PHONE); + } else if (!g_strcmp0(parent_path->str, MEMORY_FOLDER)) { + upper_name = g_strdup(MF_UG_LABEL_MMC); + } else { + gName = mf_ug_fm_svc_wapper_get_file_name(parent_path); + UG_GSTRING_CHECK_NULL_GOTO(gName, FAILED_EXIT); + upper_name = g_strdup(gName->str); + } + + UG_CHAR_CHECK_NULL_GOTO(upper_name, FAILED_EXIT); + UG_SAFE_FREE_GSTRING(parent_path); + UG_SAFE_FREE_GSTRING(gName); + return upper_name; + +FAILED_EXIT: + UG_SAFE_FREE_GSTRING(parent_path); + UG_SAFE_FREE_GSTRING(gName); + return NULL; + +} + diff --git a/src/include/mf-ug-cb.h b/src/include/mf-ug-cb.h new file mode 100755 index 0000000..f0bf01f --- /dev/null +++ b/src/include/mf-ug-cb.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 __DEF_MF_UG_CB_H_ +#define __DEF_MF_UG_CB_H_ + +#include +#include +#include "mf-ug-main.h" +#include "mf-ug-util.h" +#include "mf-ug-inotify-handle.h" + +void mf_ug_cb_back_button_cb(void *data, Evas_Object *obj, void *event_info); +void mf_ug_cb_add_button_cb(void *data, Evas_Object *obj, void *event_info); +void mf_ug_cb_goto_myfile_button_cb(void *data, Evas_Object *obj, void *event_info); +void mf_ug_cb_mass_storage_popup_cb(void *data); +void mf_ug_cb_tab_bar_cb(void *data, Evas_Object *obj, void *event_info); +void mf_ug_cb_ctrl_bar_button_cb(void *data, Evas_Object *obj, void *event_info); +void mf_ug_cb_list_play_cb(ugListItemData *data, Evas_Object *obj, void *event_info); +void mf_ug_cb_select_info_show_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +void mf_ug_cb_select_info_hide_cb(void *data, Evas *e, Evas_Object *obj, void *event_info); +void mf_ug_cb_select_info_timeout_cb(void *data, Evas_Object *obj, void *event_info); +void mf_ug_cb_mmc_changed_cb(keynode_t *key, void *data); +void mf_ug_cb_dir_update_cb(mf_ug_inotify_event event, char *name, void *data); +void mf_ug_cb_dir_pipe_cb(void *data, void *buffer, unsigned int nbyte); +Eina_Bool mf_ug_cb_thumb_timer_cb(void *data); +int mf_ug_cb_set_mass_storage_state_cb(void *data); +void mf_ug_cb_mass_storage_changed_cb(keynode_t *key, void *data); +void mf_ug_cb_upper_click_cb(void *data, Evas_Object * obj, void *event_info); +void mf_ug_cb_home_button_cb(void *data, Evas_Object * obj, void *event_info); + +#endif diff --git a/src/include/mf-ug-conf.h b/src/include/mf-ug-conf.h new file mode 100755 index 0000000..af5b8a2 --- /dev/null +++ b/src/include/mf-ug-conf.h @@ -0,0 +1,79 @@ +/* + * 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_MF_UG_CONF_H_ +#define __DEF_MF_UG_CONF_H_ + +#include + +#define UGPACKAGE "ug-myfile-efl" +#define UGLOCALEDIR "/opt/ug/res/locale" + +#define UG_EDJ_PATH "/opt/ug/res/edje/ug-myfile-efl" +#define UG_ICON_PATH "/opt/ug/res/images/ug-myfile-efl" + +#define UG_EDJ_NAVIGATIONBAR UG_EDJ_PATH"/ug_navibar_layout.edj" + + +#define UG_GRP_LIST "effect/model/list" +#define UG_GRP_NAVI_VIEW "navigation_view" +#define UG_GRP_GOTO_MYFILE "goto_myfile" +#define UG_GRP_NO_CONTENT "noContent" +#define UG_GRP_UPPER_LAYOUT "upper_folder" +#define UG_GRP_PATH_INFO "pathinfo" +#define UG_OPTION_COUNT 5 +#define UG_ERROR_RETURN (-1) + +#define UG_SELECT_MODE_MULTI_ALL "MULTI_ALL" +#define UG_SELECT_MODE_SINGLE_ALL "SINGLE_ALL" +#define UG_SELECT_MODE_MULTI_FILE "MULTI_FILE" +#define UG_SELECT_MODE_SINGLE_FILE "SINGLE_FILE" + +#define UG_FILE_FILTER_IMAGE "IMAGE" +#define UG_FILE_FILTER_SOUND "SOUND" +#define UG_FILE_FILTER_VIDEO "VIDEO" +#define UG_FILE_FILTER_FLASH "FLASH" +#define UG_FILE_FILTER_FOLDER "FOLDER" +#define UG_FILE_FILTER_IV "IV" +#define UG_FILE_FILTER_IS "IS" +#define UG_FILE_FILTER_VS "VS" +#define UG_FILE_FILTER_ALL "ALL" + +#define UG_MUSIC_PATH "/opt/media/Sounds and music/Music" +#define UG_RINGTION_PATH "/opt/media/Sounds and music/Ringtones" +#define UG_SETTING_RINGTONE_PATH "/opt/share/settings/Ringtones" +#define UG_SETTING_ALERTS_PATH "/opt/share/settings/Alerts" + +#define MAX_MESSAGE_LEN 1024 +#define ACCUMULATED_DATE 86400 /* 24*60*60 */ + +#define UG_LABEL_STRING_LENGTH 128 + +#define UG_TIME_FORMAT "02u:%02u:%02u" +#define UG_TIME_ARGS(t) \ + (t) / (3600), \ + ((t) / 60) % 60, \ + (t) % 60 + +#define _EDJ(o) elm_layout_edje_get(o) + +#define INTERVAL_THUMB_UPDATE 0.5 + +#endif /* __DEF_MYFILE_CONF_H_ */ diff --git a/src/include/mf-ug-dlog.h b/src/include/mf-ug-dlog.h new file mode 100755 index 0000000..dd32beb --- /dev/null +++ b/src/include/mf-ug-dlog.h @@ -0,0 +1,84 @@ +/* + * 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_MF_UG_DLOG_H_ +#define __DEF_MF_UG_DLOG_H_ + +#include +#include + +#define DLOG_ON 1 + +#ifdef LOG_TAG +#undef LOG_TAG +#endif + +#define LOG_TAG "MYFILE-UG" +#include + + +#if DLOG_ON +#define ug_debug(fmt , args...) LOGD("[%s][%d]debug message from ug-myfile-efl is : "fmt"\n", __func__, __LINE__, ##args) +#define ug_myfile_dlog(fmt , args...) LOGD("[%s][%d]debug message from myfile is : "fmt"\n", __func__, __LINE__, ##args) +#define UG_TRACE_BEGIN do {\ + {\ + LOGD("\n\033[0;35mENTER FUNCTION: %s. \033[0m\t%s:%d\n", \ + __FUNCTION__, (char *)(strrchr(__FILE__, '/') + 1), __LINE__);\ + } \ + } while (0); + +#define UG_TRACE_END do {\ + {\ + LOGD("\n\033[0;35mEXIT FUNCTION: %s. \033[0m\t%s:%d\n", \ + __FUNCTION__, (char *)(strrchr(__FILE__, '/') + 1), __LINE__);\ + } \ + } while (0); + +#else +#define ug_myfile_dlog(fmt , args...) printf("[MYFILE][%40s:%4d] "fmt"\n", __func__, __LINE__, ##args) +#endif +#define ug_mf_debug(fmt , args...) do { (void)0; } while (0) +#define ug_mf_warnig(fmt , args...) do { (void)0; } while (0) +#define ug_mf_error(fmt , args...) do { (void)0; } while (0) +#define UG_MYFILE_TRACE_ERROR(fmt, arg...) do { LOGE("[%s][%d] "fmt"\n", strrchr(__FILE__, '/') + 1, __LINE__, ##arg); } while (0) + +#define ug_mf_retvm_if(expr, val, fmt, arg...) do { \ + if (expr) { \ + UG_MYFILE_TRACE_ERROR(fmt, ##arg); \ + return (val); \ + } \ + } while (0) + +#define ug_mf_retv_if(expr, val) do { \ + if (expr) { \ + return (val); \ + } \ + } while (0) + + +#define ug_mf_retm_if(expr, fmt, arg...) do { \ + if (expr) { \ + UG_MYFILE_TRACE_ERROR(fmt, ##arg); \ + return; \ + } \ + } while (0) + + +#endif diff --git a/src/include/mf-ug-fm-svc-wrapper.h b/src/include/mf-ug-fm-svc-wrapper.h new file mode 100755 index 0000000..f971e33 --- /dev/null +++ b/src/include/mf-ug-fm-svc-wrapper.h @@ -0,0 +1,41 @@ +/* + * 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_MF_UG_FM_SVC_WRAPPER_H_ +#define __DEF_MF_UG_FM_SVC_WRAPPER_H_ + +#include +#include "mf-ug-main.h" + +#define MF_UG_PATH_INFO_MAX_LENGTH_PORTRAIT 35 + + +/* file information get/set */ +unsigned long mf_ug_fm_svc_wapper_get_file_filter(int file_filter_mode); +int mf_ug_fm_svc_wapper_get_file_list_by_filter(ugData *data, GString *fullpath, Eina_List **dir_list, Eina_List **filter_list); +bool mf_ug_fm_svc_wapper_is_root_path(void *data); +GString *mf_ug_fm_svc_wapper_get_file_name(GString *path); +char *mf_ug_fm_svc_wapper_get_root_path_by_tab_label(const char *label); +int mf_ug_fm_svc_wapper_get_location(char *fullpath); +gint mf_ug_fm_svc_wapper_get_folder_foldersystem(GString *path, bool *result); +GString *mf_ug_fm_svc_wrapper_get_file_parent_path(GString *fullpath); +char *mf_ug_fm_svc_wapper_path_info_get(char *original_path); +char *mf_ug_fm_svc_path_info_translate(char *path_info, int path_info_max_len); + +#endif diff --git a/src/include/mf-ug-fs-util.h b/src/include/mf-ug-fs-util.h new file mode 100755 index 0000000..1e3e08f --- /dev/null +++ b/src/include/mf-ug-fs-util.h @@ -0,0 +1,257 @@ +/* + * 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_MF_UG_FS_UTIL_H_ +#define __DEF_MF_UG_FS_UTIL_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include +#include + +#include "mf-ug-dlog.h" + + +/* File system related value definition */ +#define FILE_EXT_LEN_MAX 8 +#define MYFILE_DIR_PATH_LEN_MAX 4096 +#define MYFILE_FILE_NAME_LEN_MAX 256 +#define MYFILE_FILE_PATH_LEN_MAX MYFILE_DIR_PATH_LEN_MAX + MYFILE_FILE_NAME_LEN_MAX + + +/* File system related String definition */ +#define PHONE_FOLDER "/opt/media" +#define MEMORY_FOLDER "/opt/storage/sdcard" +#define DEBUG_FOLDER "SLP_debug" + +#define MYFILE_NAME_PATTERN "[\\:;*\"<>|?/]" + +#define IMAGE_AND_VIDEO "Images and videos" +#define SOUND_AND_MUSIC "Sounds and music" +#define DOWNLOADS "Downloads" +#define CAMERA_SHOTS "Camera shots" + + +#define WALLPAPER "Wallpapers" +#define MY_PHOTO_CLIPS "My photo clips" +#define MY_ALBUM "My album" /*/_("IDS_MF_BODY_ACCESS_MORE_MY_ALBUM") */ +#define MY_VIDEO_CLIPS "My video clips" /*/_("IDS_MF_BODY_MY_VIDEO_CLIPS") */ + +#define FM_RADIO "FM Radio" /*/dgettext("sys_string", "IDS_COM_HEADER_FMRADIO") */ +#define MUSIC "Music" /*/_("IDS_MF_BODY_MUSIC") */ +#define RINGTONES "Ringtones" +#define VOICE_RECORDER "Voice recorder" /*/dgettext("sys_string", "IDS_COM_BODY_VOICE_RECORDER") */ +#define ALERTS "Alerts" +#define OTHERS "Others" /*/dgettext("sys_string","IDS_COM_BODY_OTHERS") */ + +/* File system define default folder */ + +/* compile option */ +#define UG_DEBUG_FOLDER_OPTION + +#ifndef UG_ICON_PATH +#define UG_ICON_PATH "/opt/ug/res/images/ug-myfile-efl" +#endif + +#ifndef UG_DEFAULT_ICON +#define UG_DEFAULT_ICON UG_ICON_PATH"/60_myfiles_file_etc.png" +#endif + +#define UG_ICON_FOLDER UG_ICON_PATH"/47_myfiles_icon_folder.png" +#define UG_ICON_IMAGE UG_ICON_PATH"/60_myfiles_icon_images.png" +#define UG_ICON_VIDEO UG_ICON_PATH"/47_myfiles_icon_video.png" +#define UG_ICON_MUSIC UG_ICON_PATH"/47_myfiles_icon_music.png" +#define UG_ICON_SOUND UG_ICON_PATH"/60_myfiles_icon_music_default.png" +#define UG_ICON_PDF UG_ICON_PATH"/47_myfiles_icon_pdf.png" +#define UG_ICON_DOC UG_ICON_PATH"/47_myfiles_icon_word.png" +#define UG_ICON_PPT UG_ICON_PATH"/47_myfiles_icon_ppt.png" +#define UG_ICON_EXCEL UG_ICON_PATH"/47_myfiles_icon_excel.png" +#define UG_ICON_VOICE UG_ICON_PATH"/60_myfiles_file_amr.png" +#define UG_ICON_HTML UG_ICON_PATH"/47_myfiles_icon_html.png" +#define UG_ICON_FLASH UG_ICON_PATH"/47_myfiles_icon_swf.png" +#define UG_ICON_TXT UG_ICON_PATH"/47_myfiles_icon_text.png" +#define UG_ICON_VCONTACT UG_ICON_PATH"/60_myfiles_icon_vcard.png" +#define UG_ICON_VCALENDAR UG_ICON_PATH"/60_myfiles_icon_vcalender.png" +#define UG_ICON_VNOTE UG_ICON_PATH"/60_myfiles_icon_vText.png" +#define UG_ICON_RSS UG_ICON_PATH"/47_myfiles_icon_rss.png" +#define UG_ICON_JAVA UG_ICON_PATH"/60_myfiles_icon_java.png" +#define UG_ICON_MEMORY_SUB UG_ICON_PATH"/60_myfiles_memorycard_sub.png" +#define UG_ICON_MUSIC_PLAY UG_ICON_PATH"/34_control_play.png" +#define UG_ICON_MUSIC_PAUSE UG_ICON_PATH"/34_control_pause.png" +#define UG_ICON_MUSIC_PLAY_WHITE UG_ICON_PATH"/47_myfiles_icon_play_focus.png" +#define UG_ICON_MUSIC_PAUSE_WHITE UG_ICON_PATH"/47_myfiles_icon_pause_focus.png" +#define UG_ICON_UPPER UG_ICON_PATH"/47_myfiles_icon_upper_folder_white_theme.png" + +#define UG_ICON_FOLDER_CREATED UG_ICON_PATH"/47_myfiles_icon_folder_created.png" +#define UG_ICON_FOLDER_SINCED UG_ICON_PATH"/47_myfiles_icon_folder_sinced.png" +#define UG_ICON_PHONE UG_ICON_PATH"/60_myfiles_phone.png" +#define UG_ICON_MEMORY UG_ICON_PATH"/60_myfiles_memorycard.png" + +typedef enum _mf_ug_fs_file_type mf_ug_fs_file_type; + +enum _mf_ug_fs_file_type { + UG_FILE_TYPE_NONE = 0, + UG_FILE_TYPE_DIR, /**< Folder category */ + UG_FILE_TYPE_FILE, /**< File category */ + UG_FILE_TYPE_IMAGE, /**< Image category */ + UG_FILE_TYPE_VIDEO, /**< Video category */ + UG_FILE_TYPE_MUSIC, /**< Music category */ + UG_FILE_TYPE_SOUND, /**< Sound category */ + UG_FILE_TYPE_PDF, /**< Pdf category */ + UG_FILE_TYPE_DOC, /**< Word category */ + UG_FILE_TYPE_PPT, /**< Powerpoint category */ + UG_FILE_TYPE_EXCEL, /**< Excel category */ + UG_FILE_TYPE_VOICE, /**< Voice category */ + UG_FILE_TYPE_HTML, /**< Html category */ + UG_FILE_TYPE_FLASH, /**< Flash category */ + UG_FILE_TYPE_GAME, /**< Game category */ + UG_FILE_TYPE_APP, /**< Application category */ + UG_FILE_TYPE_THEME, /**< Theme category */ + UG_FILE_TYPE_TXT, /**< Txt category */ + UG_FILE_TYPE_VCONTACT, /**< Vcontact category */ + UG_FILE_TYPE_VCALENDAR, /**< Vcalendar category */ + UG_FILE_TYPE_VNOTE, /**< Vnote category */ + UG_FILE_TYPE_VBOOKMARK, /**< Vbookmark category */ + UG_FILE_TYPE_VIDEO_PROJECT, /**< Video editor project category */ + UG_FILE_TYPE_RADIO_RECORDED, /**< radio recorded clips category */ + UG_FILE_TYPE_MOVIE_MAKER, /**< Movie maker project category */ + UG_FILE_TYPE_SVG, /**< Svg category */ + UG_FILE_TYPE_RSS, /**< Rss reader file, *.opml */ + UG_FILE_TYPE_CERTIFICATION, /**< certification file, *.pem */ + UG_FILE_TYPE_JAVA, /**< java file, *.jad, *.jar */ + UG_FILE_TYPE_WGT, /**< wrt , *.wgt, *.wgt */ + UG_FILE_TYPE_ETC, /**< Other files category */ + UG_FILE_TYPE_MAX +}; + +typedef enum _mf_ug_iter_category_filter_t mf_ug_iter_category_filter_t; +enum _mf_ug_iter_category_filter_t { + UG_FILTER_CATEGORY_NONE = 0x00000000, /**< Default */ + UG_FILTER_CATEGORY_IMAGE = 0x00000001, /**< Image category */ + UG_FILTER_CATEGORY_VIDEO = 0x00000002, /**< Video category */ + UG_FILTER_CATEGORY_SOUND = 0x00000004, /**< Sound category */ + UG_FILTER_CATEGORY_VOICE = 0x00000008, /**< Voice category */ + UG_FILTER_CATEGORY_MUSIC = 0x00000010, /**< Music category */ + UG_FILTER_CATEGORY_HTML = 0x00000020, /**< Html category */ + UG_FILTER_CATEGORY_FLASH = 0x00000040, /**< Flash category */ + UG_FILTER_CATEGORY_GAME = 0x00000080, /**< Game category */ + UG_FILTER_CATEGORY_APP = 0x00000100, /**< Application category */ + UG_FILTER_CATEGORY_THEME = 0x00000200, /**< Theme category */ + UG_FILTER_CATEGORY_DOC = 0x00000400, /**< Word category */ + UG_FILTER_CATEGORY_EXCEL = 0x00000800, /**< Excel category */ + UG_FILTER_CATEGORY_PPT = 0x00001000, /**< Powerpoint category */ + UG_FILTER_CATEGORY_PDF = 0x00002000, /**< Pdf category */ + UG_FILTER_CATEGORY_TXT = 0x00004000, /**< Txt category */ + UG_FILTER_CATEGORY_VCONTACT = 0x00008000, /**< Vcontact category */ + UG_FILTER_CATEGORY_VCALENDAR = 0x00010000, /**< Vcalendar category */ + UG_FILTER_CATEGORY_VNOTE = 0x00020000, /**< Vnote category */ + UG_FILTER_CATEGORY_VBOOKMARK = 0x00040000, /**< Vbookmark category */ + UG_FILTER_CATEGORY_VIDEO_PROJECT = 0x00080000, /**< Video editor project category */ + UG_FILTER_CATEGORY_SVG = 0x00100000, /**< SVG category */ + UG_FILTER_CATEGORY_RSS = 0x00200000, /**< RSS category */ + UG_FILTER_CATEGORY_ETC = 0x00400000, /**< Other files category */ + +}; + +typedef enum _mf_ug_storage_type mf_ug_storage_type; +enum _mf_ug_storage_type { + MF_UG_NONE, + MF_UG_PHONE, + MF_UG_MMC, + MF_UG_MAX +}; + + +/* File operation error check options definition */ +#define MF_ERROR_CHECK_SRC_ARG_VALID 0x0001 +#define MF_ERROR_CHECK_SRC_EXIST 0x0002 +#define MF_ERROR_CHECK_SRC_PATH_VALID 0x0004 + +/* File system error definition */ +#define MF_ERROR_MASKL16 0xFFFF + +#define MF_ERROR_SET(X) (X & MF_ERROR_MASKL16) + +#define MID_CONTENTS_MGR_ERROR 0 + +#define MYFILE_ERR_NONE (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x00)) /**< No error */ + +/*/1-10*/ +#define MYFILE_ERR_SRC_ARG_INVALID (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x01)) /**< invalid src argument */ +#define MYFILE_ERR_DST_ARG_INVALID (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x02)) /**< invalid dst argument */ +#define MYFILE_ERR_DIR_OPEN_FAIL (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x03)) /**< exception of dir open*/ +#define MYFILE_ERR_INVALID_DIR_PATH (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x04)) /**< exception of invalid dir path */ +#define MYFILE_ERR_INVALID_FILE_NAME (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x05)) /**< exception of invalid file name */ +#define MYFILE_ERR_INVALID_FILE_PATH (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x06)) /**< exception of invalid file path */ +#define MYFILE_ERR_SRC_NOT_EXIST (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x08)) /**< source not found */ +#define MYFILE_ERR_STORAGE_TYPE_ERROR (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x09)) /**< storage type error */ +#define MYFILE_ERR_EXT_GET_ERROR (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0a)) /**< get ext type failed */ +#define MYFILE_ERR_GET_STAT_FAIL (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0b)) /**< get stat failed */ +#define MYFILE_ERR_GET_CATEGORY_FAIL (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0c)) /**< get file category failed */ +#define MYFILE_ERR_GET_VCONF_FAIL (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0d)) /**< get vconf value failed */ +#define MYFILE_ERR_INVALID_ARG (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0e)) /**< argument of function is not valid */ +#define MYFILE_ERR_ALLOCATE_FAIL (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0f)) +#define MYFILE_ERR_LIST_PLAY_FAIL (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x10)) +#define MYFILE_ERR_INVALID_PATH (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x11)) /**< invalid path string */ +#define MYFILE_ERR_GET_THUMBNAIL_FAILED (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x12)) /** +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "mf-ug-dlog.h" +#include "mf-ug-conf.h" +/*********** Global Definitions ***********/ +#ifndef UG_MODULE_API +#define UG_MODULE_API __attribute__ ((visibility("default"))) +#endif + +typedef void (*ugCallBack) (void *, Evas_Object *, void *); + +typedef struct _ugNaviBar ugNaviBar; + +struct _ugNaviBar { + Evas_Object *ug_pNaviBar; + Evas_Object *ug_pNaviBox; + Evas_Object *ug_pNaviLayout; + Evas_Object *ug_pContent; + Evas_Object *ug_pNaviCtrlBar; + Evas_Object *ug_pCtrlBarButton[3]; + + Elm_Object_Item *ug_pPreNaviItem; + Elm_Object_Item *ug_pNaviItem; + char *ug_pNaviLabel; + char *ug_pNaviTitle; + char *ug_pCurrentPath; + bool ug_bNaviFlagInUse; +}; + + +typedef struct _ugMainWindow ugMainWindow; +struct _ugMainWindow { + Evas_Object *ug_pWindow; + Evas_Object *ug_pBackGround; + Evas_Object *ug_pTabBackGround; + Evas_Object *ug_pMainLayout; + Evas_Object *ug_pNormalPopup; + Evas_Object *ug_pLabel; + Evas_Object *ug_pSelectInfoLayout; + Evas_Object *ug_pRadioGroup; + Evas_Object *ug_pTabBar; + Evas_Object *ug_pTabLayout; + Eina_List *ug_pNaviBarList; +}; + + +typedef struct _ugStatus ugStatus; +struct _ugStatus { + GString *ug_pPath; + int ug_iState; + int ug_iSortType; + int ug_iRadioOn; + int ug_iMmcFlag; + int ug_iCtrlBarType; + bool ug_bAudioPlayFlag; + bool ug_bInstallFlag; + bool ug_bSettingEntry; + bool ug_bInSettingView; + bool ug_bMassStorageFlag; + bool ug_bNoContentFlag; + bool ug_bCancelDisableFlag; + bool ug_b_NaviPushFlag; + char *ug_pUpper_folder; + bool ug_bUpperFlag; + Elm_Genlist_Item_Class ug_itc; + Elm_Genlist_Item_Class ug_topitc; + Elm_Genlist_Item_Class ug_separtor_no_bottom_line_itc; + Elm_Genlist_Item_Class ug_separtor_with_bottom_line_itc; + Elm_Genlist_Item_Class ug_normalitc; + Elm_Genlist_Item_Class ug_editfileditc; + Elm_Genlist_Item_Class ug_editfiledUpperSeperatoritc; + Elm_Genlist_Item_Class ug_editfiledBottomSeperatoritc; +#ifdef UG_THUMB_REAL_TIME_UPDATE + Ecore_Timer *ug_pThumbUpdateTimer; +#endif + MediaSvcHandle *ug_pMedia_svc_handle; +}; + + +typedef struct _ugUiGadget ugUiGadget; +struct _ugUiGadget { + int ug_iFilterMode; + int ug_iSelectMode; + int ug_iMarkedMode; + unsigned long ug_iFileFilter; + char *ug_pExtension; + Eina_List *ug_pDirList; + Eina_List *ug_pFilterList; + Eina_List *ug_pMultiSelectFileList; + Ecore_Pipe *ug_pInotifyPipe; +}; + +typedef struct _ugListPlay ugListPlay; +struct _ugListPlay { + char *ug_pPlayFilePath; + MMHandleType ug_Player; + int ug_iPlayState; +}; + + +typedef struct _ugData ugData; +struct _ugData { + ugMainWindow ug_MainWindow; + ugStatus ug_Status; + ugUiGadget ug_UiGadget; + ugListPlay ug_ListPlay; + struct ui_gadget *ug; +}; + + +#endif /* __DEF_MYFILE_H_ */ diff --git a/src/include/mf-ug-resource.h b/src/include/mf-ug-resource.h new file mode 100755 index 0000000..3e9296f --- /dev/null +++ b/src/include/mf-ug-resource.h @@ -0,0 +1,41 @@ +/* + * 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_MF_UG_RESOURCE_H_ +#define __DEF_MF_UG_RESOURCE_H_ + +#include "mf-ug-conf.h" + +#define MF_UG_LABEL_PHONE dgettext("sys_string", "IDS_COM_BODY_PHONE") +#define MF_UG_LABEL_MMC dgettext("sys_string", "IDS_COM_BODY_MEMORY_CARD") +#define MF_UG_LABEL_OTG "External storage" +#define MF_UG_LABEL_UNKNOWN dgettext("sys_string", "IDS_COM_BODY_UNKNOWN") +#define MF_UG_LABEL_SET dgettext("sys_string", "IDS_COM_SK_SET") +#define MF_UG_LABEL_ATTACH dgettext("sys_string", "IDS_COM_POP_ATTACH") +#define MF_UG_LABEL_CANCEL dgettext("sys_string", "IDS_COM_SK_CANCEL") +#define MF_UG_LABEL_OTHER_MUSIC "Other music" +#define MF_UG_LABEL_RINGTONES "Ringtones" +#define MF_UG_LABEL_NO_FILES dgettext("sys_string", "IDS_COM_BODY_NO_FILES") +#define MF_UG_LABEL_MYFILES dgettext("sys_string", "IDS_COM_BODY_MY_FILES") +#define MF_UG_LABEL_OK dgettext("sys_string", "IDS_COM_SK_OK") +#define MF_UG_LABEL_HOME dgettext(UGPACKAGE, "IDS_MF_BUTTON_HOME") +#define MF_UG_LABEL_UPPER dgettext(UGPACKAGE, "IDS_MF_TAB_UP") + +#endif + diff --git a/src/include/mf-ug-util.h b/src/include/mf-ug-util.h new file mode 100755 index 0000000..f4a0de4 --- /dev/null +++ b/src/include/mf-ug-util.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 __DEF_MF_UG_UTIL_H_ +#define __DEF_MF_UG_UTIL_H_ + +#include +#include +#include + +#include "mf-ug-main.h" + +#define UG_SAFE_FREE_CHAR(x) do {\ + if ((x) != NULL) {\ + free(x); \ + x = NULL;\ + } \ + } while (0) + +#define UG_SAFE_FREE_GSTRING(x) do {\ + if ((x) != NULL) {\ + g_string_free(x, TRUE); \ + x = NULL;\ + } \ + } while (0) + +#define UG_CHAR_CHECK_NULL_GOTO(arg, dest) do {\ + if ((arg) == NULL) {\ + goto dest;\ + } \ + } while (0) + +#define UG_GSTRING_CHECK_NULL_GOTO(arg, dest) do {\ + if ((arg) == NULL || (arg->str) == NULL) {\ + goto dest;\ + } \ + } while (0) + + +#define UG_SAFE_DEL_NAVI_ITEM(x) do {\ + if ((x) != NULL) {\ + elm_object_item_del(x); \ + x = NULL;\ + } \ + } while (0) + + +#define UG_SAFE_FREE_OBJ(x) do {\ + if ((x) != NULL) {\ + evas_object_del(x); \ + x = NULL;\ + } \ + } while (0) + +typedef enum _mf_ug_list_play_state mf_ug_list_play_state; + +enum _mf_ug_list_play_state { + PLAY_STATE_INIT = 0, + PLAY_STATE_READY, + PLAY_STATE_PLAYING, + PLAY_STATE_PAUSED, + PLAY_STATE_STOP, + PLAY_STATE_MAX +}; + + +typedef enum _mf_ug_select_mode mf_ug_select_mode; +enum _mf_ug_select_mode { + SELECT_MODE = 0, + SINGLE_FILE_MODE, + SINGLE_ALL_MODE, + MULTI_FILE_MODE, + MULTI_ALL_MODE, + SELECT_MODE_MAX +}; + +typedef enum _mf_ug_marked_switch mf_ug_marked_switch; +enum _mf_ug_marked_switch { + MARKED_OFF = 0, + MARKED_ON, +}; + +typedef enum _mf_ug_file_filter_type mf_ug_file_filter_type; +enum _mf_ug_file_filter_type { + SHOW_ALL_LIST = 0, + SHOW_IMAGE_LIST, + SHOW_SOUND_LIST, + SHOW_VIDEO_LIST, + SHOW_FLASH_LIST, + SHOW_FOLDER_LIST, + SHOW_IMAGE_VIDEO_LIST, + SHOW_IMAGE_SOUND_LIST, + SHOW_VIDEO_SOUND_LIST, + SHOW_BY_EXTENSION +}; + + + +typedef enum _mf_ug_state_mode mf_ug_state_mode; +enum _mf_ug_state_mode { + STATE_PHONE = 0, + STATE_MEMORY, + STATE_MODE_MAX +}; + +typedef enum _mf_ug_mmc_insert_state mf_ug_mmc_insert_state; +enum _mf_ug_mmc_insert_state { + MMC_OFF = 0, + MMC_ON +}; + +typedef enum _mf_ug_launch_type mf_ug_launch_type; +enum _mf_ug_launch_type { + LAUNCH_TYPE_FORK = 0, + LAUNCH_TYPE_FAIL, + LAUNCH_TYPE_DIR, + LAUNCH_TYPE_IMAGE, + LAUNCH_TYPE_MUSIC, + LAUNCH_TYPE_VIDEO, + LAUNCH_TYPE_UNSUPPORT, + LAUNCH_TYPE_MAX +}; + +typedef enum _mf_ug_eina_list_node_type mf_ug_eina_list_node_type; +enum _mf_ug_eina_list_node_type { + NODE_TYPE_NONE = 0, + NODE_TYPE_CHAR, + NODE_TYPE_PNODE, + NODE_TYPE_GSTRING, + NODE_TYPE_MAX +}; + +typedef enum _mf_ug_ctrl_bar_type mf_ug_ctrl_bar_type; +enum _mf_ug_ctrl_bar_type { + CTRL_BAR_NORMAL = 0, + CTRL_BAR_MUSIC, + CTRL_BAR_RINGTONE, + CTRL_BAR_MULTI, + CTR_BAR_MAX +}; + +typedef struct _ugListItemData ugListItemData; +struct _ugListItemData { + Evas_Object *ug_pCheckBox; + Evas_Object *ug_pRadioBox; + Elm_Object_Item *ug_pItem; + char *ug_pThumbPath; + GString *ug_pItemName; + ugData *ug_pData; + bool ug_bChecked; + int ug_iGroupValue; + bool ug_bRealThumbFlag; +}; + +typedef struct _ug_dir_event_t ug_dir_event_t; +struct _ug_dir_event_t { + int event; + char *name; +}; + +bool mf_ug_util_is_mass_storage_on(); +int mf_ug_util_create_dir_monitor(void *data); +int mf_ug_util_set_mmc_state_cb(void *data); +int mf_ug_util_get_mmc_state(int *mmc_card); +char *mf_ug_util_get_send_result(void *data); +bool mf_ug_util_is_genlist_selected(void *data); + +void mf_ug_list_play_play_music_item(ugListItemData *data); +void mf_ug_list_play_destory_playing_file(void *data); +void mf_ug_util_storage_insert_action(void *data, char *pItemLabel); +void mf_ug_util_destory_mmc_state_cb(); +void mf_ug_util_destory_dir_monitor(void *data); +void mf_ug_util_get_params_path(Eina_List **dest_list, const char *path_list); +void mf_ug_util_free_eina_list_data(Eina_List **list, mf_ug_eina_list_node_type node_type); +int mf_ug_util_set_main_layout_by_tab_item_count(void *data); +void mf_ug_util_set_current_state(void *data, int state); +int mf_ug_util_add_dir_watch(const char *path, void *data); +mf_ug_launch_type mf_ug_util_get_file_launch_type(char *path); + +void mf_ug_util_destory_mass_storage_callback(); +int mf_ug_file_attr_get_parent_path(const char *path, char **parent_path); +char *mf_ug_util_upper_folder_name_get(void *data, GString *fullpath); + +#endif /* __DEF_MYFILE_UTIL_H_ */ diff --git a/src/include/mf-ug-winset.h b/src/include/mf-ug-winset.h new file mode 100755 index 0000000..cd52adf --- /dev/null +++ b/src/include/mf-ug-winset.h @@ -0,0 +1,129 @@ +/* + * 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_MF_UG_WINSET_H_ +#define __DEF_MF_UG_WINSET_H_ + +#include +#include +#include +#include +#include +#include + + +#include "mf-ug-main.h" +#include "mf-ug-cb.h" +#include "mf-ug-conf.h" + + +/******************Navigation Bar Definition ***********/ +#define MF_UG_NAVI_STYLE_ENABLE "1line" +#define MF_UG_UPPER_HEIGHT (113*elm_config_scale_get()) +#define MF_UG_UPPER_WIDTH (480*elm_config_scale_get()) + +Evas_Object *mf_ug_navi_bar_create_navi_bar(Evas_Object *parent); +void mf_ug_navi_bar_set_new_content(Evas_Object *pLayout, Evas_Object *NaviContent); +void mf_ug_navi_bar_create_default_view(void *data); +ugNaviBar *mf_ug_navi_bar_get_in_use_navi(void *data); +ugNaviBar *mf_ug_navi_bar_get_navi_struct_by_navi(void *data, Evas_Object *pNaviBar); +void mf_ug_navi_bar_reset_navi_object(ugNaviBar *pNavi_s); +void mf_ug_navi_bar_refresh_navibar_recovered_view(void *data, ugNaviBar *pNaviStruct); +void mf_ug_navi_bar_remove_navi_list_item_by_label(void *data, const char *pNaviLabel); +void mf_ug_navi_bar_set_select_info_label(void *data, int dir_count, int file_count); +void mf_ug_navi_bar_set_blocking(void *data, bool bblock_during_transition); +void mf_ug_navi_bar_remove_previous_contents(void *data); +void mf_ug_navi_bar_del_item_directly(void *data); + +/********** Control Bar Definition ********/ + +#define UG_CTRL_ICON_CANCEL UG_ICON_PATH"/myfile_icon_cancel.png" +#define UG_CTRL_ICON_SAVE UG_ICON_PATH"/myfile_icon_done.png" + +typedef enum _eCtrlBarButtonType eCtrlBarButtonType; + +enum _eCtrlBarButtonType { + CTRL_BUTTON_CANCEL = 0, + CTRL_BUTTON_DONE, + CTRL_BUTTON_ADD, + CTRL_BUTTON_OTHER_RIONTONGS, + CTRL_BUTTON_MUSIC, + CTRL_BUTTON_MAX +}; + +void mf_ug_ctrl_bar_set(void *data, ugNaviBar *pNavi_s); +void mf_ug_ctrl_bar_disable_item(void *data, bool disable); +void mf_ug_ctrl_bar_set_item_disable(void *data); + + +/**********Tab Bar Definition *************/ +Evas_Object *mf_ug_tab_bar_create(Evas_Object *parent); +Elm_Object_Item *mf_ug_tab_bar_append_item(Evas_Object *pTabBar, char *pTabIconPath, char *pTabBarLabel, void *user_data); +void mf_ug_tab_bar_set_item_view(Evas_Object *parent, Evas_Object *tab_layout, Evas_Object *view); +void mf_ug_tab_bar_remove_item_by_label(Evas_Object *pTabBar, char *pTabLabel); +void mf_ug_tab_bar_remove_all_items(Evas_Object *pTabBar); +void mf_ug_tab_bar_set_selected_item(Elm_Object_Item *pItem); +void mf_ug_tab_bar_set_item_disable(Evas_Object *pTabBar, Eina_Bool disable); +void mf_ug_ctrl_bar_recover(void *data); + + +/*********** Popup Definition ************/ +typedef enum _mf_ug_popup_mode mf_ug_popup_mode; +enum _mf_ug_popup_mode { + UG_POPMODE_MIN = 0, + UG_POPMODE_TEXT, + UG_POPMODE_TITLE_TEXT, + UG_POPMODE_TEXT_TWO_BTN, + UG_POPMODE_TITLE_TEXT_TWO_BTN, + UG_POPMODE_TEXT_BTN, + UG_POPMODE_TITLE_TEXT_BTN, + UG_POPMODE_TITLE_TEXT_THREE_BTN, + UG_POPMODE_PROGRESSBAR, + UG_POPMPDE_MAX +}; + +typedef enum _mf_ug_popup_event_type mf_ug_popup_event_type; +enum _mf_ug_popup_event_type { + UG_ELM_POPUP_NONE, + UG_ELM_POPUP_YES, + UG_ELM_POPUP_NO, + UG_ELM_POPUP_OK, + UG_ELM_POPUP_CANCLE, + UG_ELM_POPUP_AUTO_RENAME, + UG_ELM_POPUP_REPLACE, + UG_ELM_POPUP_PHONE, + UG_ELM_POPUP_MEMORY, + UG_ELM_POPUP_MAX +}; + +/*********** Popup API ************/ +void mf_ug_popup_create(void *data, mf_ug_popup_mode popupMode, char *title, char *context, char *first_btn_text, char *second_btn_text, + char *third_btn_text, Evas_Smart_Cb func, void *param); + + +/******************* Genlist API *********************/ + +void mf_ug_upper_genlist_item_append(Evas_Object *pGenlist, void *data); +void mf_ug_genlist_goto_myfile_item_append(Evas_Object *pGenlist, void *data); +Evas_Object *mf_navi_bar_upper_create(Evas_Object *parent); +void mf_ug_genlist_goto_myfile_style_set(void *data); +void mf_ug_genlist_upper_style_set(void *data); +Evas_Object *mf_ug_genlist_create_content_list_view(void *data); + +#endif diff --git a/src/mf-ug-main.c b/src/mf-ug-main.c new file mode 100755 index 0000000..af80db3 --- /dev/null +++ b/src/mf-ug-main.c @@ -0,0 +1,1137 @@ +/* + * 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 +#include +#include +#include +#include +#include +#include + +#include "mf-ug-main.h" +#include "mf-ug-fs-util.h" +#include "mf-ug-util.h" +#include "mf-ug-conf.h" +#include "mf-ug-dlog.h" +#include "mf-ug-winset.h" +#include "mf-ug-fm-svc-wrapper.h" +#include "mf-ug-resource.h" + +/****************************** +** Prototype : __mf_ug_main_init_data +** Description : +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_main_init_data(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + + if (ugd->ug_Status.ug_pPath != NULL) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER); + ugd->ug_Status.ug_iState = STATE_PHONE; + ugd->ug_Status.ug_iRadioOn = 0; + ugd->ug_Status.ug_iMmcFlag = false; + ugd->ug_Status.ug_bAudioPlayFlag = false; + ugd->ug_Status.ug_bInstallFlag = true; + ugd->ug_Status.ug_bInSettingView = false; + ugd->ug_Status.ug_bSettingEntry = false; + + ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE; + ugd->ug_UiGadget.ug_iFilterMode = SHOW_ALL_LIST; + ugd->ug_UiGadget.ug_pExtension = NULL; + ugd->ug_UiGadget.ug_iMarkedMode = MARKED_OFF; + ugd->ug_UiGadget.ug_pMultiSelectFileList = NULL; + + ugd->ug_ListPlay.ug_pPlayFilePath = NULL; + ugd->ug_ListPlay.ug_iPlayState = PLAY_STATE_INIT; + + + mf_ug_util_create_dir_monitor(ugd); + mf_ug_util_set_mmc_state_cb(ugd); + mf_ug_cb_set_mass_storage_state_cb(ugd); + UG_TRACE_END; +} + +/****************************** +** Prototype : __mf_ug_main_free_data +** Description : +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_main_free_data(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + + if (ugd->ug_Status.ug_pPath) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + if (ugd->ug_UiGadget.ug_pMultiSelectFileList) { + mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pMultiSelectFileList, NODE_TYPE_CHAR); + ugd->ug_UiGadget.ug_pMultiSelectFileList = NULL; + } + if (ugd->ug_UiGadget.ug_pDirList) { + mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pDirList, NODE_TYPE_PNODE); + ugd->ug_UiGadget.ug_pDirList = NULL; + } + if (ugd->ug_UiGadget.ug_pFilterList) { + mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pFilterList, NODE_TYPE_PNODE); + ugd->ug_UiGadget.ug_pFilterList = NULL; + } + + if (ugd->ug_Status.ug_pUpper_folder) { + free(ugd->ug_Status.ug_pUpper_folder); + ugd->ug_Status.ug_pUpper_folder = NULL; + } + + UG_TRACE_END; + +} + + +/****************************** +** Prototype : __mf_ug_main_free_evas_object +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_main_free_evas_object(void *data) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugData is NULL"); + + int iNaviListLen = 0; + int index = 0; + + if (ugd->ug_MainWindow.ug_pNormalPopup != NULL) { + + evas_object_del(ugd->ug_MainWindow.ug_pNormalPopup); + ugd->ug_MainWindow.ug_pNormalPopup = NULL; + } + if (ugd->ug_MainWindow.ug_pRadioGroup != NULL) { + + evas_object_del(ugd->ug_MainWindow.ug_pRadioGroup); + ugd->ug_MainWindow.ug_pRadioGroup = NULL; + } + + iNaviListLen = eina_list_count(ugd->ug_MainWindow.ug_pNaviBarList); + for (index = 0; index < iNaviListLen; index++) { + ugNaviBar *pNavi_s = NULL; + pNavi_s = (ugNaviBar *)eina_list_nth(ugd->ug_MainWindow.ug_pNaviBarList, index); + evas_object_del(pNavi_s->ug_pNaviCtrlBar); + evas_object_del(pNavi_s->ug_pContent); + evas_object_del(pNavi_s->ug_pNaviLayout); + evas_object_del(pNavi_s->ug_pNaviBox); + evas_object_del(pNavi_s->ug_pNaviBar); + if (pNavi_s->ug_pNaviLabel != NULL) { + free(pNavi_s->ug_pNaviLabel); + pNavi_s->ug_pNaviLabel = NULL; + } + if (pNavi_s->ug_pNaviTitle != NULL) { + free(pNavi_s->ug_pNaviTitle); + pNavi_s->ug_pNaviTitle = NULL; + } + } + + if (ugd->ug_MainWindow.ug_pTabBar != NULL) { + mf_ug_tab_bar_remove_all_items(ugd->ug_MainWindow.ug_pTabBar); + evas_object_del(ugd->ug_MainWindow.ug_pTabBar); + ugd->ug_MainWindow.ug_pTabBar = NULL; + } + + if (ugd->ug_MainWindow.ug_pTabBackGround != NULL) { + evas_object_del(ugd->ug_MainWindow.ug_pTabBackGround); + ugd->ug_MainWindow.ug_pTabBackGround = NULL; + } + if (ugd->ug_MainWindow.ug_pTabLayout != NULL) { + evas_object_del(ugd->ug_MainWindow.ug_pTabLayout); + ugd->ug_MainWindow.ug_pTabLayout = NULL; + } + + if (ugd->ug_MainWindow.ug_pBackGround != NULL) { + evas_object_del(ugd->ug_MainWindow.ug_pBackGround); + ugd->ug_MainWindow.ug_pBackGround = NULL; + } + + if (ugd->ug_MainWindow.ug_pMainLayout != NULL) { + evas_object_del(ugd->ug_MainWindow.ug_pMainLayout); + ugd->ug_MainWindow.ug_pMainLayout = NULL; + } + UG_TRACE_END; +} + +Evas_Object *mf_ug_main_create_bg(Evas_Object *win) +{ + ug_mf_retv_if(win == NULL, NULL); + Evas_Object *bg = elm_bg_add(win); + + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(bg, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(win, bg); + evas_object_show(bg); + + return bg; +} + +/****************************** +** Prototype : _ug_mf_create_layout_main +** Description : +** Input : Evas_Object* parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_main_create_main_layout(Evas_Object *parent) +{ + UG_TRACE_BEGIN; + Evas_Object *layout = NULL; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + + layout = elm_layout_add(parent); + ug_mf_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); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_win_resize_object_add(parent, layout); + evas_object_show(layout); + UG_TRACE_END; + + return layout; +} + +Evas_Object *mf_ug_main_tab_layout_create(Evas_Object *parent) +{ + Evas_Object *layout; + + ug_mf_retv_if(parent == NULL, NULL); + + layout = elm_layout_add(parent); + ug_mf_retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n"); + elm_object_focus_set(layout, EINA_FALSE); + + //elm_layout_theme_set(layout, "layout", "application", "tabbar"); + elm_layout_theme_set(layout, "layout", "tabbar", "default"); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + evas_object_hide(layout); + return layout; +} + +/****************************** +** Prototype : __mf_ug_main_set_path_option +** Description : Samsung +** Input : void *data +** char *path +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static int __mf_ug_main_set_path_option(void *data, const char *path) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, MYFILE_ERR_SRC_ARG_INVALID, "ugd is NULL"); + ug_mf_retvm_if(path == NULL, MYFILE_ERR_SRC_ARG_INVALID, "path is NULL"); + + int error_code = MYFILE_ERR_NONE; + char *entry_path = NULL; + + if (strncmp(path, PHONE_FOLDER, strlen(PHONE_FOLDER)) == 0 || strncmp(path, MEMORY_FOLDER, strlen(MEMORY_FOLDER)) == 0) { + + /**check whether is /opt/media or /mnt/mmc */ + entry_path = strdup(path); + if (entry_path == NULL) { + return MYFILE_ERR_ALLOCATE_FAIL; + } + } else if (strncmp(path, UG_SETTING_RINGTONE_PATH, strlen(UG_SETTING_RINGTONE_PATH)) == 0 + || strncmp(path, UG_SETTING_ALERTS_PATH, strlen(UG_SETTING_ALERTS_PATH)) == 0) { + + /**check whether is setting ringtone or alerts path */ + entry_path = strdup(path); + if (entry_path == NULL) { + return MYFILE_ERR_ALLOCATE_FAIL; + } + ugd->ug_Status.ug_bInSettingView = true; + ugd->ug_Status.ug_bSettingEntry = true; + } else if (strlen(path) == 1 && strncmp(path, "/", 1)) { + /**chech the path whether is "/" */ + entry_path = strdup(PHONE_FOLDER); + if (entry_path == NULL) { + return MYFILE_ERR_ALLOCATE_FAIL; + } + } else { + /**not begin with /mnt/mmc and /opt/media , so append it to /opt/media*/ + char *temp = strdup(PHONE_FOLDER); + if (temp == NULL) { + return MYFILE_ERR_ALLOCATE_FAIL; + } + entry_path = g_strconcat(temp, path, NULL); + free(temp); + } + + if (entry_path != NULL) { + /** if there is a '/' at the end of the path, can't be recognized */ + if (entry_path[strlen(entry_path) - 1] == '/') { + entry_path[strlen(entry_path) - 1] = '\0'; + } + + if (ecore_file_exists(entry_path) == false) { + ug_mf_debug("path is not exist"); + free(entry_path); + return MYFILE_ERR_INVALID_FILE_PATH; + } + if (ecore_file_is_dir(entry_path) == false) { + ug_mf_debug("path is not a directory"); + free(entry_path); + return MYFILE_ERR_INVALID_DIR_PATH; + } + + if (ugd->ug_Status.ug_pPath) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + ugd->ug_Status.ug_pPath = g_string_new(entry_path); + free(entry_path); + } else { + return MYFILE_ERR_ALLOCATE_FAIL; + } + UG_TRACE_END; + return error_code; +} + + +/****************************** +** Prototype : __mf_ug_main_set_select_mode +** Description : Samsung +** Input : void *data +** char *select_mode +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +static void __mf_ug_main_set_select_mode(void *data, const char *select_mode) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + if (select_mode != NULL) { + if (!strncmp(select_mode, UG_SELECT_MODE_SINGLE_FILE, strlen(select_mode))) { + ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE; + } else if (!strncmp(select_mode, UG_SELECT_MODE_MULTI_FILE, strlen(select_mode))) { + ugd->ug_UiGadget.ug_iSelectMode = MULTI_FILE_MODE; + } else if (!strncmp(select_mode, UG_SELECT_MODE_SINGLE_ALL, strlen(select_mode))) { + + ugd->ug_UiGadget.ug_iSelectMode = SINGLE_ALL_MODE; + } + + else if (!strncmp(select_mode, UG_SELECT_MODE_MULTI_ALL, strlen(select_mode))) { + + ugd->ug_UiGadget.ug_iSelectMode = MULTI_ALL_MODE; + } else { + ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE; + } + } else { + ugd->ug_UiGadget.ug_iSelectMode = SINGLE_FILE_MODE; + } + UG_TRACE_END; + +} + + + +/****************************** +** Prototype : __mf_ug_main_set_filter_mode +** Description : Samsung +** Input : void *data +** char *file_filter +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +static void __mf_ug_main_set_filter_mode(void *data, const char *file_filter) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + if (file_filter != NULL) { + if (!strncmp(file_filter, UG_FILE_FILTER_ALL, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_ALL_LIST; + } else if (!strncmp(file_filter, UG_FILE_FILTER_IMAGE, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_IMAGE_LIST; + } else if (!strncmp(file_filter, UG_FILE_FILTER_SOUND, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_SOUND_LIST; + } else if (!strncmp(file_filter, UG_FILE_FILTER_VIDEO, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_VIDEO_LIST; + } else if (!strncmp(file_filter, UG_FILE_FILTER_FLASH, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_FLASH_LIST; + } else if (!strncmp(file_filter, UG_FILE_FILTER_FOLDER, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_FOLDER_LIST; + } else if (!strncmp(file_filter, UG_FILE_FILTER_IV, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_IMAGE_VIDEO_LIST; + } else if (!strncmp(file_filter, UG_FILE_FILTER_IS, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_IMAGE_SOUND_LIST; + } else if (!strncmp(file_filter, UG_FILE_FILTER_VS, strlen(file_filter))) { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_VIDEO_SOUND_LIST; + } else { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_BY_EXTENSION; + ugd->ug_UiGadget.ug_pExtension = strdup(file_filter); + } + } else { + ugd->ug_UiGadget.ug_iFilterMode = SHOW_ALL_LIST; + ugd->ug_UiGadget.ug_pExtension = NULL; + } + + if (ugd->ug_UiGadget.ug_iFilterMode != SHOW_BY_EXTENSION) { + ugd->ug_UiGadget.ug_iFileFilter = mf_ug_fm_svc_wapper_get_file_filter(ugd->ug_UiGadget.ug_iFilterMode); + } + + + if (ugd->ug_UiGadget.ug_iFilterMode == SHOW_SOUND_LIST && ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) { + ugd->ug_Status.ug_iCtrlBarType = CTRL_BAR_MUSIC; + } else { + ugd->ug_Status.ug_iCtrlBarType = CTRL_BAR_MULTI; + } + UG_TRACE_END; +} + + + +/****************************** +** Prototype : __mf_ug_main_set_marked_mode +** Description : Samsung +** Input : void *data +** char *marked_mode +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +static void __mf_ug_main_set_marked_mode(void *data, const char *marked_mode) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + if (marked_mode != NULL) { + ugd->ug_UiGadget.ug_iMarkedMode = MARKED_ON; + mf_ug_util_get_params_path(&ugd->ug_UiGadget.ug_pMultiSelectFileList, marked_mode); + } else { + ugd->ug_UiGadget.ug_iMarkedMode = MARKED_OFF; + } + UG_TRACE_END; +} + + +/****************************** +** Prototype : __mf_ug_main_set_option_status +** Description : Samsung +** Input : void *data +** bundle *option +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +static void __mf_ug_main_set_option_status(void *data, bundle * option) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + ug_mf_retm_if(option == NULL, "option is NULL"); + char *key[UG_OPTION_COUNT] = { "path", "select_type", "file_type", "marked_mode"}; + const char *path = NULL, *select_mode = NULL, *filter_mode = NULL, *marked_mode = NULL; + + path = bundle_get_val(option, key[0]); + select_mode = bundle_get_val(option, key[1]); + filter_mode = bundle_get_val(option, key[2]); + marked_mode = bundle_get_val(option, key[3]); + + __mf_ug_main_set_path_option(ugd, path); + __mf_ug_main_set_select_mode(ugd, select_mode); + __mf_ug_main_set_filter_mode(ugd, filter_mode); + __mf_ug_main_set_marked_mode(ugd, marked_mode); + UG_TRACE_END; +} + +/****************************** +** Prototype : __mf_ug_main_create_default_layout +** Description : Samsung +** Input : Evas_Object* parent +** void* data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_main_create_default_layout(Evas_Object *parent, void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + Elm_Object_Item *pItemPhone = NULL; + Elm_Object_Item *pItemMMC = NULL; + Evas_Object *pContent = NULL; + int tab_item_count = 1; + + int mmc_card = 0; + int error_code = 0; + /*/check if mmc mounted */ + error_code = mf_ug_util_get_mmc_state(&mmc_card); + if (error_code == 0 && mmc_card == 1) { + tab_item_count++; + } + /*/check if usb otg mounted + { + Todo: we need to add something to record what should on + } + create phone navi */ + ugNaviBar *pNavi_phone = calloc(1, sizeof(ugNaviBar)); + ug_mf_retvm_if(pNavi_phone == NULL, NULL, "pNavi_phone is NULL"); + + pNavi_phone->ug_pNaviBar = mf_ug_navi_bar_create_navi_bar(parent); + if (pNavi_phone->ug_pNaviBar == NULL) { + ug_debug("pNavi_phone->ug_pNaviBar is NULL"); + free(pNavi_phone); + pNavi_phone = NULL; + UG_TRACE_END; + return NULL; + } + + pNavi_phone->ug_bNaviFlagInUse = TRUE; + + UG_SAFE_FREE_CHAR(pNavi_phone->ug_pCurrentPath); + pNavi_phone->ug_pCurrentPath = g_strdup(ugd->ug_Status.ug_pPath->str); + + UG_SAFE_FREE_CHAR(pNavi_phone->ug_pNaviLabel); + pNavi_phone->ug_pNaviLabel = strdup(MF_UG_LABEL_PHONE); + /*/insert phone navi into the navi_list */ + /** Todo: if we need to check ap->mf_MainWindow.plistNaviBar?*/ + ugd->ug_MainWindow.ug_pNaviBarList = eina_list_append(ugd->ug_MainWindow.ug_pNaviBarList, pNavi_phone); + + if (tab_item_count > 1 && !ugd->ug_Status.ug_bSettingEntry) { + /*create tab bar */ + if (ugd->ug_MainWindow.ug_pTabLayout == NULL) { + ugd->ug_MainWindow.ug_pTabLayout = mf_ug_main_tab_layout_create(ugd->ug_MainWindow.ug_pWindow); + } + ugd->ug_MainWindow.ug_pTabBar = mf_ug_tab_bar_create(ugd->ug_MainWindow.ug_pWindow); + pContent = ugd->ug_MainWindow.ug_pTabBar; + pItemPhone = + mf_ug_tab_bar_append_item(pContent, UG_ICON_PHONE, MF_UG_LABEL_PHONE, ugd); + pItemMMC = mf_ug_tab_bar_append_item(pContent, UG_ICON_MEMORY, MF_UG_LABEL_MMC, ugd); + + //mf_ug_tab_bar_set_selected_item(pItemPhone); + } + UG_TRACE_END; + return pNavi_phone->ug_pNaviBar; +} + +/****************************** +** Prototype : __mf_ug_main_start +** Description : +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +static void __mf_ug_main_start(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + Evas_Object *pContent = NULL; + int error_code = 0; + int mmc_card = 0; + + pContent = __mf_ug_main_create_default_layout(ugd->ug_MainWindow.ug_pMainLayout, ugd); + + if (pContent != NULL) { + error_code = mf_ug_util_get_mmc_state(&mmc_card); + if (error_code == 0 && mmc_card == 1) { + ug_debug(" mmc is inserted"); + ugd->ug_Status.ug_iMmcFlag = MMC_ON; + if (ugd->ug_Status.ug_bSettingEntry) { + ug_debug(" entry from setting sounds"); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", pContent); + } else { + ug_debug(" not entry from setting sounds"); + evas_object_show(ugd->ug_MainWindow.ug_pTabLayout); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.content", pContent); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pTabLayout, "elm.swallow.tabbar", ugd->ug_MainWindow.ug_pTabBar); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", ugd->ug_MainWindow.ug_pTabLayout); + } + } else { + ug_debug(" mmc is not inserted"); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", pContent); + } + + mf_ug_navi_bar_create_default_view(ugd); + mf_ug_ctrl_bar_set_item_disable(ugd); + if (ugd->ug_Status.ug_bMassStorageFlag && ugd->ug_MainWindow.ug_pTabBar) { + mf_ug_tab_bar_set_item_disable(ugd->ug_MainWindow.ug_pTabBar, EINA_TRUE); + mf_ug_ctrl_bar_disable_item(ugd, true); + } + + mf_ug_navi_bar_set_blocking(data, false); + } else { + return; + } + ug_debug("done"); + UG_TRACE_END; + + return; +} + + + +/****************************** +** Prototype : on_create +** Description : Samsung +** Input : struct ui_gadget *ug +** enum ug_mode mode +** bundle *data +** void *priv +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +static void *on_create(struct ui_gadget *ug, enum ug_mode mode, bundle * data, void *priv) +{ + UG_TRACE_BEGIN; + + Evas_Object *win = NULL; + ugData *ugd = NULL; + + ug_mf_retv_if(NULL == ug, NULL); + ug_mf_retv_if(NULL == priv, NULL); + + ugd = priv; + ugd->ug = ug; + + bindtextdomain(UGPACKAGE, UGLOCALEDIR); + + win = (Evas_Object *)ug_get_window(); + ug_mf_retv_if(NULL == win, NULL); + + ugd->ug_MainWindow.ug_pWindow = win; + ugd->ug_Status.ug_bInstallFlag = false; + ugd->ug_Status.ug_bMassStorageFlag = false; + ugd->ug_Status.ug_bCancelDisableFlag = false; + ugd->ug_MainWindow.ug_pMainLayout = __mf_ug_main_create_main_layout(ugd->ug_MainWindow.ug_pWindow); + ugd->ug_MainWindow.ug_pTabLayout = mf_ug_main_tab_layout_create(ugd->ug_MainWindow.ug_pWindow); + ugd->ug_MainWindow.ug_pBackGround = mf_ug_main_create_bg(ugd->ug_MainWindow.ug_pWindow); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.bg", ugd->ug_MainWindow.ug_pBackGround); + + bool usb_state = mf_ug_util_is_mass_storage_on(); + +#ifndef UG_LAUNCH_AT_MASS_STORAGE_MODE + if (usb_state) { + mf_ug_popup_create(ugd, UG_POPMODE_TEXT, NULL, ("Please use after turn off mass storage mode"), NULL, NULL, NULL, + (Evas_Smart_Cb) mf_ug_cb_mass_storage_popup_cb, ugd); + elm_object_style_set(ugd->ug_MainWindow.ug_pBackGround, "transparent"); + UG_TRACE_END; + return (void *)ugd->ug_MainWindow.ug_pMainLayout; + } else +#else + ug_debug(); + if (usb_state) { + ugd->ug_Status.ug_bMassStorageFlag = true; + } +#endif + { + __mf_ug_main_init_data(ugd); + __mf_ug_main_set_option_status(ugd, data); + media_svc_connect(&ugd->ug_Status.ug_pMedia_svc_handle); + + __mf_ug_main_start(ugd); + UG_TRACE_END; + return ugd->ug_MainWindow.ug_pMainLayout; + } +} + +/****************************** +** Prototype : on_start +** Description : +** Input : struct ui_gadget *ug +** bundle *data +** void *priv +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void on_start(struct ui_gadget *ug, bundle * data, void *priv) +{ +} + + +/****************************** +** Prototype : on_pause +** Description : +** Input : struct ui_gadget *ug +** bundle *data +** void *priv +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void on_pause(struct ui_gadget *ug, bundle * data, void *priv) +{ + if (!priv) + return; + ugData *ugd = (ugData *)priv; + + if (0 != ugd->ug_ListPlay.ug_Player) { + mf_ug_list_play_destory_playing_file(ugd); + } +} + +/****************************** +** Prototype : on_resume +** Description : +** Input : struct ui_gadget *ug +** bundle *data +** void *priv +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +inline bool __mf_ug_main_check_exist(const char *path) +{ + if (path && (access(path, F_OK) == 0)) { + return true; + } + return false; +} + +static void on_resume(struct ui_gadget *ug, bundle * data, void *priv) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(NULL == priv, "priv is NULL"); + ugData *ugd = priv; + + if (!__mf_ug_main_check_exist(ugd->ug_Status.ug_pPath->str)) { + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + GString *parent_path = mf_ug_fm_svc_wrapper_get_file_parent_path(ugd->ug_Status.ug_pPath); + int storage = mf_ug_fm_svc_wapper_get_location(ugd->ug_Status.ug_pPath->str); + + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + free(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = NULL; + + if (parent_path && parent_path->str) { + if (__mf_ug_main_check_exist(parent_path->str)) { + ug_debug("paretn is [%s] exit", parent_path->str); + ugd->ug_Status.ug_pPath = g_string_new(parent_path->str); + pNavi_s->ug_pCurrentPath = g_strdup(parent_path->str); + } else { + ug_debug("paretn is [%s] not exit", parent_path->str); + if (storage == MF_UG_PHONE) { + ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER); + pNavi_s->ug_pCurrentPath = strdup(PHONE_FOLDER); + } else { + ugd->ug_Status.ug_pPath = g_string_new(MEMORY_FOLDER); + pNavi_s->ug_pCurrentPath = strdup(MEMORY_FOLDER); + } + } + } else { + ug_debug("get parent failed"); + if (storage == MF_UG_PHONE) { + ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER); + pNavi_s->ug_pCurrentPath = strdup(PHONE_FOLDER); + } else { + ugd->ug_Status.ug_pPath = g_string_new(MEMORY_FOLDER); + pNavi_s->ug_pCurrentPath = strdup(MEMORY_FOLDER); + } + } + + mf_ug_navi_bar_create_default_view(ugd); + mf_ug_ctrl_bar_set_item_disable(ugd); + g_string_free(parent_path, TRUE); + parent_path = NULL; + } + + UG_TRACE_END; +} + +/****************************** +** Prototype : on_message +** Description : +** Input : struct ui_gadget *ug +** bundle *msg +** bundle *data +** void *priv +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void on_message(struct ui_gadget *ug, bundle * msg, bundle * data, void *priv) +{ +} + +/****************************** +** Prototype : on_event +** Description : +** Input : struct ui_gadget *ug +** enum ug_event event +** bundle *data +** void *priv +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void on_event(struct ui_gadget *ug, enum ug_event event, bundle * data, void *priv) +{ + UG_TRACE_BEGIN; + switch (event) { + case UG_EVENT_LOW_MEMORY: + break; + + case UG_EVENT_LOW_BATTERY: + break; + + case UG_EVENT_LANG_CHANGE: + break; + + case UG_EVENT_ROTATE_PORTRAIT: + break; + + case UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN: + break; + + case UG_EVENT_ROTATE_LANDSCAPE: + break; + + case UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN: + break; + + default: + break; + } + UG_TRACE_END; +} + + + +/****************************** +** Prototype : on_key_event +** Description : Samsung +** Input : struct ui_gadget *ug +** enum ug_key_event event +** bundle *data +** void *priv +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ + +static void on_key_event(struct ui_gadget *ug, enum ug_key_event event, bundle * data, void *priv) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)priv; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + switch (event) { + case UG_KEY_EVENT_END: + if (ugd->ug_MainWindow.ug_pNormalPopup) { + evas_object_del(ugd->ug_MainWindow.ug_pNormalPopup); + ugd->ug_MainWindow.ug_pNormalPopup = NULL; + } + if (0 != ugd->ug_ListPlay.ug_Player) { + mf_ug_list_play_destory_playing_file(ugd); + } + ug_destroy_me(ug); + break; + default: + break; + } + UG_TRACE_END; +} + +/****************************** +** Prototype : on_destroy +** Description : +** Input : struct ui_gadget *ug +** bundle *data +** void *priv +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void on_destroy(struct ui_gadget *ug, bundle * data, void *priv) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)priv; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + __mf_ug_main_free_data(ugd); + + if (ugd->ug_Status.ug_bInstallFlag == true) { + mf_ug_util_destory_dir_monitor(ugd); + mf_ug_util_destory_mmc_state_cb(); + media_svc_disconnect(ugd->ug_Status.ug_pMedia_svc_handle); + mf_ug_util_destory_mass_storage_callback(); + } + + if (0 != ugd->ug_ListPlay.ug_Player) { + mf_ug_list_play_destory_playing_file(ugd); + } + if (ugd->ug_Status.ug_pThumbUpdateTimer != NULL) { + ecore_timer_del(ugd->ug_Status.ug_pThumbUpdateTimer); + ugd->ug_Status.ug_pThumbUpdateTimer = NULL; + } + __mf_ug_main_free_evas_object(ugd); + UG_TRACE_END; +} + + +/****************************** +** Prototype : UG_MODULE_INIT +** Description : +** Input : struct ug_module_ops *ops +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +UG_MODULE_API int UG_MODULE_INIT(struct ug_module_ops *ops) +{ + UG_TRACE_BEGIN; + ugData *ugd; + + if (!ops) { + return -1; + } + + ugd = calloc(1, sizeof(ugData)); + if (!ugd) { + return -1; + } + + ops->create = on_create; + ops->start = on_start; + ops->pause = on_pause; + ops->resume = on_resume; + ops->destroy = on_destroy; + ops->message = on_message; + ops->event = on_event; + ops->key_event = on_key_event; + ops->priv = ugd; + ops->opt = UG_OPT_INDICATOR_ENABLE; + UG_TRACE_END; + return 0; +} + + + +/****************************** +** Prototype : UG_MODULE_EXIT +** Description : +** Input : struct ug_module_ops *ops +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +UG_MODULE_API void UG_MODULE_EXIT(struct ug_module_ops *ops) +{ + UG_TRACE_BEGIN; + ugData *ugd; + + if (!ops) { + return; + } + ugd = ops->priv; + + if (ugd) { + free(ugd); + } + UG_TRACE_END; +} diff --git a/src/widget/mf-ug-ctrl-bar.c b/src/widget/mf-ug-ctrl-bar.c new file mode 100755 index 0000000..969d804 --- /dev/null +++ b/src/widget/mf-ug-ctrl-bar.c @@ -0,0 +1,277 @@ +/* + * 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 +#include + +#include "mf-ug-winset.h" +#include "mf-ug-cb.h" +#include "mf-ug-fm-svc-wrapper.h" +#include "mf-ug-util.h" +#include "mf-ug-resource.h" + +#define UG_CTRL_STYLE_TYPE "controlbar" + +/****************************** +** Prototype : __mf_ug_ctrl_bar_create +** Description : Samsung +** Input : Evas_Object *parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_ctrl_bar_create(Evas_Object *parent) +{ + UG_TRACE_BEGIN; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + + Evas_Object *pCtrlBar = NULL; + pCtrlBar = elm_toolbar_add(parent); + elm_toolbar_shrink_mode_set(pCtrlBar, ELM_TOOLBAR_SHRINK_EXPAND); + elm_object_style_set(pCtrlBar, "naviframe"); + elm_toolbar_homogeneous_set(pCtrlBar, EINA_TRUE); + evas_object_show(pCtrlBar); + + UG_TRACE_END; + return pCtrlBar; +} + +/****************************** +** Prototype : __mf_ug_ctrl_bar_create_button +** Description : Samsung +** Input : Evas_Object *parent +** eCtrlBarButtonType type +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +#ifndef MF_UG_FEATURE_NEW_UX +static Evas_Object *__mf_ug_ctrl_bar_create_button(Evas_Object *parent, eCtrlBarButtonType type) +{ + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + Evas_Object *button = NULL; + + + button = elm_button_add(parent); + + 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); + elm_object_style_set(button, "naviframe_control/multiline"); + + + switch (type) { + case CTRL_BUTTON_CANCEL: + elm_object_text_set(button, MF_UG_LABEL_CANCEL); + break; + case CTRL_BUTTON_ADD: + elm_object_text_set(button, MF_UG_LABEL_SET); + break; + case CTRL_BUTTON_DONE: + elm_object_text_set(button, MF_UG_LABEL_ATTACH); + break; + default: + break; + } + + evas_object_show(button); + UG_TRACE_END; + return button; +} +#endif + +/****************************** +** Prototype : __mf_ug_ctrl_bar_append_item +** Description : Samsung +** Input : void *data +** Evas_Object *ctrl_bar +** int type +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_ctrl_bar_append_item(void *data, Evas_Object *ctrl_bar, int type) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + Evas_Object *pCtrlBar = ctrl_bar; + ug_mf_retm_if(pCtrlBar == NULL, "pCtrlBar is NULL"); + + if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) + elm_toolbar_item_append(pCtrlBar, NULL, MF_UG_LABEL_SET, (Evas_Smart_Cb) mf_ug_cb_add_button_cb, ugd); + else + elm_toolbar_item_append(pCtrlBar, NULL, MF_UG_LABEL_ATTACH, (Evas_Smart_Cb) mf_ug_cb_add_button_cb, ugd); + + elm_toolbar_item_append(pCtrlBar, NULL, MF_UG_LABEL_CANCEL, (Evas_Smart_Cb) mf_ug_cb_back_button_cb, ugd); + + + UG_TRACE_END; +} + + +/****************************** +** Prototype : mf_ug_ctrl_bar_set +** Description : Samsung +** Input : void* data +** ugNaviBar *pNavi_s +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_ctrl_bar_set(void *data, ugNaviBar *pNavi_s) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + Evas_Object *pNaviBar = pNavi_s->ug_pNaviBar; + Evas_Object *pCtrlBar = NULL; + + int type = ugd->ug_Status.ug_iCtrlBarType; + pCtrlBar = __mf_ug_ctrl_bar_create(pNaviBar); + pNavi_s->ug_pNaviCtrlBar = pCtrlBar; + type = CTRL_BAR_NORMAL; + __mf_ug_ctrl_bar_append_item(ugd, pCtrlBar, type); + evas_object_show(pCtrlBar); + elm_object_item_part_content_set(pNavi_s->ug_pNaviItem, UG_CTRL_STYLE_TYPE, pCtrlBar); + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_ctrl_bar_disable_item +** Description : Samsung +** Input : void *data +** bool disable +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_ctrl_bar_disable_item(void *data, bool disable) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + Evas_Object *pCtrlBar = NULL; + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed"); + + pCtrlBar = pNavi_s->ug_pNaviCtrlBar; + + Elm_Object_Item *it = NULL; + it = elm_toolbar_first_item_get(pCtrlBar); + + while(it) { + const char *button_label = elm_object_item_text_get(it); + const char *disable_labe = NULL; + if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) + disable_labe = MF_UG_LABEL_SET; + else + disable_labe = MF_UG_LABEL_ATTACH; + if (g_strcmp0(button_label, disable_labe) == 0) { + elm_object_item_disabled_set(it, !disable); + } + it = elm_toolbar_item_next_get(it); + } +} + + +/****************************** +** Prototype : mf_ug_ctrl_bar_set_item_disable +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_ctrl_bar_set_item_disable(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + bool disable = false; + + if (ugd->ug_Status.ug_bNoContentFlag == true) { + mf_ug_ctrl_bar_disable_item(ugd, false); + } else { + disable = mf_ug_util_is_genlist_selected(ugd); + + mf_ug_ctrl_bar_disable_item(ugd, disable); + } + UG_TRACE_END; +} + +void mf_ug_ctrl_bar_recover(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retm_if(pNavi_s == NULL, "get navi failed"); + + Evas_Object *naviBar = pNavi_s->ug_pNaviBar; + Evas_Object *ctrl_bar = NULL; + + ug_mf_retm_if(naviBar == NULL, "navi is NULL"); + ctrl_bar = elm_object_item_part_content_get(pNavi_s->ug_pNaviItem, UG_CTRL_STYLE_TYPE); + pNavi_s->ug_pNaviCtrlBar = ctrl_bar; +} diff --git a/src/widget/mf-ug-genlist.c b/src/widget/mf-ug-genlist.c new file mode 100755 index 0000000..ff3db4b --- /dev/null +++ b/src/widget/mf-ug-genlist.c @@ -0,0 +1,1365 @@ +/* + * 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 +#include "mf-ug-winset.h" +#include "mf-ug-util.h" +#include "mf-ug-fm-svc-wrapper.h" +#include "mf-ug-fs-util.h" +#include "mf-ug-resource.h" + + +#define MF_UG_SELECTED_ITEM_BRING_UP_COUNT 7 +#define MF_UG_SELECTED_ITEM_BRING_UP_COUNT_MAX 8 +/****************************** +** Prototype : __mf_ug_genlist_is_file_marked +** Description : Samsung +** Input : Eina_List *source +** GString *path +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static gboolean __mf_ug_genlist_is_file_marked(Eina_List *source, GString *path) +{ + UG_TRACE_BEGIN; + ug_mf_retvm_if(source == NULL, false, "source is NULL"); + ug_mf_retvm_if(path == NULL, false, "path is NULL"); + + bool flag = false; + Eina_List *l = NULL; + void *data = NULL; + + EINA_LIST_FOREACH(source, l, data) { + char *source_path = strdup(data); + if (source_path != NULL) { + if (strcmp(source_path, path->str) == 0) { + flag = true; + free(source_path); + source_path = NULL; + break; + } else { + free(source_path); + source_path = NULL; + } + } + } + UG_TRACE_END; + return flag; +} + + +/****************************** +** Prototype : __mf_ug_genlist_set_marked_path +** Description : Samsung +** Input : Eina_List **source +** GString *path +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_genlist_set_marked_path(Eina_List **source, GString *path) +{ + UG_TRACE_BEGIN; + bool file_exist_flag = false; + char *source_path; + Eina_List *l = NULL; + void *data = NULL; + + ug_mf_retm_if(source == NULL, "source is NULL"); + ug_mf_retm_if(path == NULL, "path is NULL"); + + if (NULL == *source || eina_list_count(*source) == 0) { + *source = eina_list_append(*source, strdup(path->str)); + } else { + + EINA_LIST_FOREACH(*source, l, data) { + source_path = (char *)data; + if (source_path != NULL) { + if (strcmp(source_path, path->str) == 0) { + file_exist_flag = true; + break; + } + } + } + if (file_exist_flag == true) { + *source = eina_list_remove(*source, source_path); + } else { + *source = eina_list_append(*source, strdup(path->str)); + } + } + UG_TRACE_END; +} + + +/****************************** +** Prototype : __mf_ug_genlist_create_checkbox +** Description : Samsung +** Input : Evas_Object *parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_genlist_create_checkbox(Evas_Object *parent) +{ + UG_TRACE_BEGIN; + Evas_Object *ck_box = NULL; + + ck_box = elm_check_add(parent); + evas_object_size_hint_weight_set(ck_box, 1.0, 1.0); + evas_object_size_hint_align_set(ck_box, -1.0, 0.5); + elm_check_state_set(ck_box, 0); + evas_object_show(ck_box); + evas_object_repeat_events_set(ck_box, 0); + UG_TRACE_END; + return ck_box; +} + +static void __mf_ug_genlist_show_select_info(void *data) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retm_if(itemData == NULL, "itemData is NULL"); + + ugData *ugd = itemData->ug_pData; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + int iDirCount = 0, iFileCount = 0; + Elm_Object_Item *it = NULL; + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + Evas_Object *pGenlist = pNavi_s->ug_pContent; + + it = elm_genlist_first_item_get(pGenlist); + while (it) { + itemData = elm_object_item_data_get(it); + if (itemData->ug_bChecked) { + if (ecore_file_is_dir(itemData->ug_pItemName->str)) { + iDirCount++; + } else { + iFileCount++; + } + } + + it = elm_genlist_item_next_get(it); + } + mf_ug_navi_bar_set_select_info_label(itemData->ug_pData, iDirCount, iFileCount); + UG_TRACE_END; + +} + +/****************************** +** Prototype : __mf_ug_genlist_checkbox_cb +** Description : Samsung +** Input : void *data +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_genlist_checkbox_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retm_if(itemData == NULL, "itemData is NULL"); + + if (itemData->ug_bChecked == false) { + itemData->ug_bChecked = true; + } else { + itemData->ug_bChecked = false; + } + + if (itemData->ug_pData->ug_UiGadget.ug_iMarkedMode == MARKED_ON) { + __mf_ug_genlist_set_marked_path(&itemData->ug_pData->ug_UiGadget.ug_pMultiSelectFileList, itemData->ug_pItemName); + } + + __mf_ug_genlist_show_select_info(itemData); + mf_ug_ctrl_bar_set_item_disable(itemData->ug_pData); + + UG_TRACE_END; +} + + +/****************************** +** Prototype : __mf_ug_genlist_create_radio_box +** Description : Samsung +** Input : Evas_Object *parent +** ugListItemData *params +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_genlist_create_radio_box(Evas_Object *parent, ugListItemData *params) +{ + UG_TRACE_BEGIN; + + ugListItemData *itemData = (ugListItemData *)params; + ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL"); + + ugData *ugd = (ugData *)(itemData->ug_pData); + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + + Evas_Object *radio_box = NULL; + radio_box = elm_radio_add(parent); + elm_radio_state_value_set(radio_box, itemData->ug_iGroupValue); + elm_radio_group_add(radio_box, ugd->ug_MainWindow.ug_pRadioGroup); + elm_radio_value_set(ugd->ug_MainWindow.ug_pRadioGroup, ugd->ug_Status.ug_iRadioOn); + UG_TRACE_END; + return radio_box; +} + + + +/****************************** +** Prototype : __mf_ug_genlist_radio_box_cb +** Description : Samsung +** Input : void *data +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_genlist_radio_box_cb(void *data, Evas_Object *obj, void *event_info) +{ + + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retm_if(itemData == NULL, "ugListItemData is NULL"); + + itemData->ug_bChecked = true; + itemData->ug_pData->ug_Status.ug_iRadioOn = itemData->ug_iGroupValue; + elm_radio_value_set(itemData->ug_pData->ug_MainWindow.ug_pRadioGroup, itemData->ug_iGroupValue); + mf_ug_ctrl_bar_set_item_disable(itemData->ug_pData); + UG_TRACE_END; +} + + +/****************************** +** Prototype : __mf_ug_genlist_get_gl_label +** Description : +** Input : const void *data +** Evas_Object *obj +** const char *part +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static char *__mf_ug_genlist_get_gl_label(void *data, Evas_Object *obj, const char *part) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL"); + + if (strcmp(part, "elm.text") == 0) { + UG_TRACE_END; + return strdup(ecore_file_file_get(itemData->ug_pItemName->str)); + } else if (strcmp(part, "elm.uptitle.text") == 0) { + UG_TRACE_END; + return strdup(("Upper Level")); + } else { + UG_TRACE_END; + return strdup(""); + } +} + + +/****************************** +** Prototype : __mf_ug_genlist_get_thumbnail +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_genlist_get_thumbnail(void *data) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retm_if(itemData == NULL, "itemData is NULL"); + + const char *dir_icon_path = UG_ICON_FOLDER; + //const char *dir_create_icon_path = UG_ICON_FOLDER_CREATED; + char *icon_path = NULL; + int error_code = MYFILE_ERR_NONE; + + if (itemData->ug_pThumbPath == NULL) { + if (ecore_file_is_dir(itemData->ug_pItemName->str)) { + itemData->ug_pThumbPath = strdup(dir_icon_path); + itemData->ug_bRealThumbFlag = true; + } else { + icon_path = mf_ug_file_attr_get_file_icon(itemData->ug_pData->ug_Status.ug_pMedia_svc_handle, itemData->ug_pItemName->str, &error_code); + if (icon_path) { + itemData->ug_pThumbPath = strdup(icon_path); + itemData->ug_bRealThumbFlag = true; + free(icon_path); + icon_path = NULL; + } else { /*/must be image/video file */ + + mf_ug_fs_file_type type = UG_FILE_TYPE_NONE; + type = mf_ug_file_attr_get_file_type_by_mime(itemData->ug_pItemName->str); + + if (type == UG_FILE_TYPE_VIDEO) { + itemData->ug_pThumbPath = strdup(UG_ICON_VIDEO); + } else if (type == UG_FILE_TYPE_IMAGE) { + itemData->ug_pThumbPath = strdup(UG_ICON_IMAGE); + } else { + itemData->ug_pThumbPath = strdup(UG_DEFAULT_ICON); + } + itemData->ug_bRealThumbFlag = false; + error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED; + } + } + } else if (itemData->ug_pThumbPath && ecore_file_exists(itemData->ug_pThumbPath)) { + if (itemData->ug_bRealThumbFlag == false) { + error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED; + } + } else if (!ecore_file_exists(itemData->ug_pThumbPath)) { + + ug_debug("ug_pThumbPath[%s] is not exist", itemData->ug_pThumbPath); + free(itemData->ug_pThumbPath); + itemData->ug_pThumbPath = NULL; + /*/set default icon */ + itemData->ug_pThumbPath = strdup(UG_DEFAULT_ICON); + itemData->ug_bRealThumbFlag = false; + error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED; + } +#ifdef UG_THUMB_REAL_TIME_UPDATE + /*/check if we need to add refresh timer */ + if (error_code != 0 && itemData->ug_pData->ug_Status.ug_pThumbUpdateTimer == NULL) { + itemData->ug_pData->ug_Status.ug_pThumbUpdateTimer = ecore_timer_add(INTERVAL_THUMB_UPDATE, mf_ug_cb_thumb_timer_cb, itemData); + } +#endif + UG_TRACE_END; +} + + +/****************************** +** Prototype : __mf_ug_genlist_create_thumbnail +** Description : Samsung +** Input : void *data +** Evas_Object *parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_genlist_create_thumbnail(void *data, Evas_Object *parent) +{ + + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL"); + + Evas_Object *thumb = NULL; + +#ifdef USE_IMAGE_OBJECT + thumb = evas_object_image_add(evas_object_evas_get(parent)); +#else + thumb = elm_icon_add(parent); +#endif + if (thumb == NULL) { + ug_debug("thumb is NULL"); + } + if (thumb) { +#ifdef USE_IMAGE_OBJECT + int load_err = EVAS_LOAD_ERROR_NONE; + evas_object_image_file_set(thumb, itemData->ug_pThumbPath, NULL); + load_err = evas_object_image_load_error_get(thumb); + + if (load_err != EVAS_LOAD_ERROR_NONE) { + evas_object_del(thumb); + thumb = NULL; + } else { + evas_object_image_filled_set(thumb, EINA_TRUE); + } +#else + elm_icon_file_set(thumb, itemData->ug_pThumbPath, NULL); +#endif + } + UG_TRACE_END; + return thumb; +} + + +/****************************** +** Prototype : __mf_ug_genlist_create_mmc_icon +** Description : Samsung +** Input : Evas_Object *parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_genlist_create_mmc_icon(Evas_Object *parent) +{ + UG_TRACE_BEGIN; + Evas_Object *ic_memory = NULL; + const char *memory_icon_path = UG_ICON_MEMORY_SUB; + + ic_memory = elm_icon_add(parent); + elm_icon_file_set(ic_memory, memory_icon_path, NULL); + evas_object_show(ic_memory); + + UG_TRACE_END; + return ic_memory; +} + + +/****************************** +** Prototype : __mf_ug_genlist_add_checkbox +** Description : Samsung +** Input : void *data +** Evas_Object *parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_genlist_add_checkbox(void *data, Evas_Object *parent) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL"); + + Evas_Object *check_box = __mf_ug_genlist_create_checkbox(parent); + evas_object_propagate_events_set(check_box, 0); + + elm_check_state_set(check_box, itemData->ug_bChecked); + + itemData->ug_pCheckBox = check_box; + evas_object_smart_callback_add(check_box, "changed", __mf_ug_genlist_checkbox_cb, itemData); + + UG_TRACE_END; + return check_box; +} + + + +/****************************** +** Prototype : __mf_ug_genlist_add_radio_box +** Description : Samsung +** Input : void *data +** Evas_Object *parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_genlist_add_radio_box(void *data, Evas_Object *parent) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retvm_if(itemData == NULL, NULL, "itemData is NULL"); + + Evas_Object *radio_box = __mf_ug_genlist_create_radio_box(parent, itemData); + + evas_object_propagate_events_set(radio_box, 0); + itemData->ug_pRadioBox = radio_box; + evas_object_smart_callback_add(radio_box, "changed", __mf_ug_genlist_radio_box_cb, itemData); + + UG_TRACE_END; + return radio_box; +} + + +static Evas_Object *__mf_ug_genlist_gl_upper_icon_get(void *data, Evas_Object * obj, const char *part) +{ + UG_TRACE_BEGIN; + ugListItemData *listItemData = (ugListItemData *)data; + + ug_mf_retvm_if(listItemData == NULL, NULL, "listItemData is NULL"); + ug_mf_retvm_if(listItemData->ug_pItemName == NULL, NULL, "m_ItemName is NULL"); + ug_mf_retvm_if(part == NULL, NULL, "part is NULL"); + ug_mf_retvm_if(obj == NULL, NULL, "obj is NULL"); + + Evas_Object *thumb = NULL; + if (!strcmp(part, "elm.icon")) { + thumb = elm_icon_add(obj); + elm_object_focus_set(thumb, EINA_FALSE); + if (thumb) { + elm_icon_file_set(thumb, listItemData->ug_pThumbPath, NULL); + } + } + return thumb; +} + + +static Evas_Object *__mf_ug_genlist_upper_icon_get(void *data, Evas_Object * obj, const char *part) +{ + ug_mf_retvm_if(data == NULL, NULL, "data is NULL"); + ug_mf_retvm_if(obj == NULL, NULL, "obj is NULL"); + + ugData *ugd = (ugData *)data; + + if (!strcmp(part, "elm.icon.1")) { + Evas_Object *btn = elm_button_add(obj); + elm_object_text_set(btn, MF_UG_LABEL_HOME); + evas_object_smart_callback_add(btn, "clicked", mf_ug_cb_home_button_cb, ugd); + return btn; + } else if (!strcmp(part, "elm.icon.2")) { + Evas_Object *btn = elm_button_add(obj); + elm_object_text_set(btn, MF_UG_LABEL_UPPER); + evas_object_smart_callback_add(btn, "clicked", mf_ug_cb_upper_click_cb, ugd); + return btn; + } + return NULL; +} + +/****************************** +** Prototype : __mf_ug_genlist_get_gl_icon +** Description : Samsung +** Input : const void *data +** Evas_Object *obj +** const char *part +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_genlist_get_gl_icon(void *data, Evas_Object *obj, const char *part) +{ + UG_TRACE_BEGIN; + Evas_Object *thumb = NULL, *ic_memory = NULL; + Evas_Object *layout = NULL; + Evas_Object *selected_box = NULL; + + mf_ug_storage_type is_in_mmc = 0; + ugListItemData *listItemData = (ugListItemData *)data; + ug_mf_retv_if(listItemData == NULL, NULL); + ugData *ugd = listItemData->ug_pData; + ug_mf_retv_if(ugd == NULL, NULL); + + if (!strcmp(part, "elm.icon")) { + if (strncmp(listItemData->ug_pItemName->str, "Upper Level", strlen(listItemData->ug_pItemName->str)) == 0) { + listItemData->ug_pThumbPath = strdup(UG_ICON_UPPER); + thumb = __mf_ug_genlist_create_thumbnail(listItemData, obj); + return thumb; + } + __mf_ug_genlist_get_thumbnail(listItemData); + thumb = __mf_ug_genlist_create_thumbnail(listItemData, obj); + layout = elm_layout_add(obj); + elm_layout_file_set(layout, UG_EDJ_NAVIGATIONBAR, UG_GRP_LIST); + elm_object_part_content_set(layout, "swallow_thumb", thumb); + + mf_ug_file_attr_get_store_type_by_full(listItemData->ug_pItemName->str, &is_in_mmc); + if (is_in_mmc == MF_UG_MMC) { + ic_memory = __mf_ug_genlist_create_mmc_icon(obj); + elm_object_part_content_set(layout, "myfile.memory_icon.sub", ic_memory); + } + UG_TRACE_END; + return layout; + } else if (!strcmp(part, "elm.icon.1")) { + if (ugd->ug_UiGadget.ug_pMultiSelectFileList) { + if (__mf_ug_genlist_is_file_marked(ugd->ug_UiGadget.ug_pMultiSelectFileList, listItemData->ug_pItemName)) { + listItemData->ug_bChecked = true; + } + } + if (ecore_file_is_dir(listItemData->ug_pItemName->str)) { + if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_ALL_MODE) { + selected_box = __mf_ug_genlist_add_checkbox(listItemData, obj); + } else if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE) { + selected_box = __mf_ug_genlist_add_radio_box(listItemData, obj); + } + } else { + if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE || ugd->ug_UiGadget.ug_iSelectMode == MULTI_ALL_MODE) { + selected_box = __mf_ug_genlist_add_checkbox(listItemData, obj); + } else if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE) { + + selected_box = __mf_ug_genlist_add_radio_box(listItemData, obj); + } + } + return selected_box; + } else if (!strcmp(part, "elm.icon.2")) { + __mf_ug_genlist_get_thumbnail(listItemData); + thumb = __mf_ug_genlist_create_thumbnail(listItemData, obj); + return thumb; + } else if (!strcmp(part, "elm.icon.3")) { +#ifdef LIST_PLAY_SUPPORT + ug_debug(); + if (!ecore_file_is_dir(listItemData->ug_pItemName->str)) { + ug_debug(); + Evas_Object *music_icon = NULL; + Evas_Object *music_button = NULL; + mf_ug_launch_type launch_type = mf_ug_util_get_file_launch_type(listItemData->ug_pItemName->str); + if (launch_type == LAUNCH_TYPE_MUSIC) { + char *play_icon = NULL; + char *pause_icon = NULL; + + music_button = elm_button_add(obj); + elm_object_style_set(music_button, "circle/empty"); + + music_icon = elm_icon_add(music_button); + if (ugd->ug_ListPlay.ug_pPlayFilePath) { + if (g_strcmp0(ugd->ug_ListPlay.ug_pPlayFilePath, listItemData->ug_pItemName->str) == 0) { + if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PLAYING) { + + pause_icon = strdup(UG_ICON_MUSIC_PAUSE_WHITE); + elm_icon_file_set(music_icon, pause_icon, NULL); + } else if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PAUSED) { + play_icon = strdup(UG_ICON_MUSIC_PLAY_WHITE); + elm_icon_file_set(music_icon, play_icon, NULL); + } + } else { + play_icon = strdup(UG_ICON_MUSIC_PLAY_WHITE); + elm_icon_file_set(music_icon, play_icon, NULL); + } + } else { + play_icon = strdup(UG_ICON_MUSIC_PLAY_WHITE); + elm_icon_file_set(music_icon, play_icon, NULL); + } + evas_object_size_hint_aspect_set(music_icon, EVAS_ASPECT_CONTROL_BOTH, 1, 1); + elm_object_part_content_set(music_button, "icon", music_icon); + evas_object_propagate_events_set(music_button, EINA_FALSE); + evas_object_smart_callback_add(music_button, "clicked", (Evas_Smart_Cb)mf_ug_cb_list_play_cb, (void*)listItemData); + UG_TRACE_END; + return music_button; + } + } +#endif + UG_TRACE_END; + + return NULL; + + } else { + UG_TRACE_END; + return NULL; + } +} + +static Evas_Object *__mf_ug_genlist_get_gl_editfiled_icon(void *data, Evas_Object *obj, const char *part) +{ + ugListItemData *listItemData = (ugListItemData *)data; + ug_mf_retv_if(listItemData == NULL, NULL); + ugData *ugd = listItemData->ug_pData; + ug_mf_retv_if(ugd == NULL, NULL); + + ug_debug("listItemData is [%p]", listItemData); + + if (!strcmp(part, "elm.icon")) { + Evas_Object *button = NULL; + button = elm_button_add(obj); + elm_object_text_set(button, "Go to My files"); + evas_object_smart_callback_add(button, "clicked", mf_ug_cb_goto_myfile_button_cb, ugd); + return button; + } + return NULL; +} + +/****************************** +** Prototype : __mf_ug_genlist_get_gl_state +** Description : +** Input : const void *data +** Evas_Object *obj +** const char *part +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Eina_Bool __mf_ug_genlist_get_gl_state(void *data, Evas_Object *obj, const char *part) +{ + return EINA_FALSE; +} + + +/****************************** +** Prototype : __mf_ug_genlist_del_gl +** Description : +** Input : const void *data +** Evas_Object *obj +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_genlist_del_gl(void *data, Evas_Object *obj) +{ + UG_TRACE_BEGIN; + ugListItemData *itemData = (ugListItemData *)data; + ug_mf_retm_if(itemData == NULL, "itemData is NULL"); + if (itemData->ug_pItemName && itemData->ug_pItemName->str) { + g_string_free(itemData->ug_pItemName, TRUE); + itemData->ug_pItemName = NULL; + } + if (itemData->ug_pThumbPath) { + free(itemData->ug_pThumbPath); + itemData->ug_pThumbPath = NULL; + } + free(itemData); + itemData = NULL; + UG_TRACE_END; + return; +} + + + +/****************************** +** Prototype : __mf_ug_genlist_selected_gl +** Description : Samsung +** Input : void *data +** Evas_Object *obj +** void *event_info +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_genlist_selected_gl(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + Elm_Object_Item *item = (Elm_Object_Item *) event_info; + int error_code = 0; + int mmc_card = 0; + error_code = mf_ug_util_get_mmc_state(&mmc_card); + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + if (item != NULL) { + ugListItemData *selected = (ugListItemData *)elm_object_item_data_get(item); + fprintf(stdout, "selected text %s\n", (char *)selected->ug_pItemName->str); + elm_genlist_item_selected_set(item, EINA_FALSE); + if (ugd->ug_Status.ug_b_NaviPushFlag) + return; + if (!strcmp(selected->ug_pItemName->str, "Upper Level")) { + if (ugd->ug_Status.ug_pPath != NULL && pNavi_s->ug_pCurrentPath != NULL) { + GString *new_path = NULL; + char *file_dir = ecore_file_dir_get(pNavi_s->ug_pCurrentPath); + if (file_dir) { + new_path = g_string_new(file_dir); + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = new_path; + free(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = strdup(new_path->str); + free(file_dir); + file_dir = NULL; + } else { + ug_debug("file_dir is NULL"); + } + } else { + ugd->ug_Status.ug_pPath = g_string_new(PHONE_FOLDER); + pNavi_s->ug_pCurrentPath = strdup(PHONE_FOLDER); + } + ugd->ug_Status.ug_b_NaviPushFlag = true; + mf_ug_navi_bar_create_default_view(ugd); + } else if (!ecore_file_is_dir(selected->ug_pItemName->str)) { + + if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE) { + if (elm_radio_value_get(ugd->ug_MainWindow.ug_pRadioGroup) != selected->ug_iGroupValue) { + ugd->ug_Status.ug_iRadioOn = selected->ug_iGroupValue; + selected->ug_bChecked = true; + elm_radio_value_set(ugd->ug_MainWindow.ug_pRadioGroup, selected->ug_iGroupValue); + } + + } else { + if (selected->ug_bChecked == 0) { + selected->ug_bChecked = 1; + } else { + selected->ug_bChecked = 0; + } + elm_check_state_set(selected->ug_pCheckBox, selected->ug_bChecked); + __mf_ug_genlist_show_select_info(selected); + } + } else if (ecore_file_is_dir(selected->ug_pItemName->str) && strcmp(selected->ug_pItemName->str, "Upper Level")) { + + if (ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PLAYING || ugd->ug_ListPlay.ug_iPlayState == PLAY_STATE_PAUSED) { + mf_ug_list_play_destory_playing_file(ugd); + } + if (ugd->ug_Status.ug_pPath) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + ugd->ug_Status.ug_pPath = g_string_new(selected->ug_pItemName->str); + if (pNavi_s->ug_pCurrentPath != NULL) { + free(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = NULL; + } + pNavi_s->ug_pCurrentPath = strdup(selected->ug_pItemName->str); + ugd->ug_Status.ug_b_NaviPushFlag = true; + mf_ug_navi_bar_create_default_view(ugd); + } + + mf_ug_ctrl_bar_set_item_disable(ugd); + } + UG_TRACE_END; +} + + +/****************************** +** Prototype : __mf_ug_genlist_create_gl +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static Evas_Object *__mf_ug_genlist_create_gl(void *data) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + + ugNaviBar *pNaviInUse = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retvm_if(pNaviInUse == NULL, NULL, "pNaviInUse is NULL"); + + Evas_Object *genlist; + ug_debug("pNaviInUse->ug_pNaviBar is [%p]", pNaviInUse->ug_pNaviBar); + genlist = elm_genlist_add(pNaviInUse->ug_pNaviBar); + 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_smart_callback_add(genlist, "selected", __mf_ug_genlist_selected_gl, ugd); + +#ifdef UG_THUMB_REAL_TIME_UPDATE + if (ugd->ug_Status.ug_pThumbUpdateTimer != NULL) { + ecore_timer_del(ugd->ug_Status.ug_pThumbUpdateTimer); + ugd->ug_Status.ug_pThumbUpdateTimer = NULL; + } +#endif + + ugd->ug_Status.ug_itc.item_style = "1text.3icon"; + ugd->ug_Status.ug_itc.func.text_get = __mf_ug_genlist_get_gl_label; + ugd->ug_Status.ug_itc.func.content_get = __mf_ug_genlist_get_gl_icon; + ugd->ug_Status.ug_itc.func.state_get = __mf_ug_genlist_get_gl_state; + ugd->ug_Status.ug_itc.func.del = __mf_ug_genlist_del_gl; + + + if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) { + ugd->ug_Status.ug_normalitc.item_style = "1text.1icon.2"; + ugd->ug_Status.ug_normalitc.func.text_get = __mf_ug_genlist_get_gl_label; + ugd->ug_Status.ug_normalitc.func.content_get = __mf_ug_genlist_get_gl_icon; + ugd->ug_Status.ug_normalitc.func.state_get = __mf_ug_genlist_get_gl_state; + ugd->ug_Status.ug_normalitc.func.del = __mf_ug_genlist_del_gl; + } + + UG_TRACE_END; + + return genlist; +} + + +/****************************** +** Prototype : __mf_ug_genlist_init_item_data +** Description : Samsung +** Input : void *data +** ugListItemData **itemData +** char *fullname +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_genlist_init_item_data(void *data, ugListItemData **itemData, char *fullname) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ugListItemData **ug_ItemData = itemData; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + ug_mf_retm_if(ug_ItemData == NULL, "ug_ItemData is NULL"); + + *ug_ItemData = (ugListItemData *)malloc(sizeof(ugListItemData)); + if (*ug_ItemData == NULL) { + ug_debug("ug_ItemData malloc failed"); + } else { + memset(*ug_ItemData, 0, sizeof(ugListItemData)); + if (fullname) { + (*ug_ItemData)->ug_pItemName = g_string_new(fullname); + } else { + (*ug_ItemData)->ug_pItemName = NULL; + } + (*ug_ItemData)->ug_bChecked = false; + (*ug_ItemData)->ug_pRadioBox = NULL; + (*ug_ItemData)->ug_pCheckBox = NULL; + (*ug_ItemData)->ug_iGroupValue = 0; + (*ug_ItemData)->ug_pItem = NULL; + (*ug_ItemData)->ug_pThumbPath = NULL; + (*ug_ItemData)->ug_bRealThumbFlag = false; + (*ug_ItemData)->ug_pData = ugd; + } + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_genlist_create_content_list_view +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_genlist_upper_style_set(void *data) +{ + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + ugd->ug_Status.ug_topitc.item_style = "1text.1icon.2"; + ugd->ug_Status.ug_topitc.func.text_get = __mf_ug_genlist_get_gl_label; + ugd->ug_Status.ug_topitc.func.content_get = __mf_ug_genlist_gl_upper_icon_get; + ugd->ug_Status.ug_topitc.func.state_get = __mf_ug_genlist_get_gl_state; + ugd->ug_Status.ug_topitc.func.del = __mf_ug_genlist_del_gl; +} + +void mf_ug_genlist_goto_myfile_style_set(void *data) +{ + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + ugd->ug_Status.ug_editfileditc.item_style = "dialogue/bg/1icon"; + ugd->ug_Status.ug_editfileditc.func.text_get = NULL; + ugd->ug_Status.ug_editfileditc.func.content_get = __mf_ug_genlist_get_gl_editfiled_icon; + ugd->ug_Status.ug_editfileditc.func.state_get = NULL; + ugd->ug_Status.ug_editfileditc.func.del = __mf_ug_genlist_del_gl; + + ugd->ug_Status.ug_editfiledBottomSeperatoritc.item_style = "dialogue/separator/11/with_line"; + ugd->ug_Status.ug_editfiledBottomSeperatoritc.func.text_get = NULL; + ugd->ug_Status.ug_editfiledBottomSeperatoritc.func.content_get = NULL; + ugd->ug_Status.ug_editfiledBottomSeperatoritc.func.state_get = NULL; + ugd->ug_Status.ug_editfiledBottomSeperatoritc.func.del = NULL; + + ugd->ug_Status.ug_editfiledUpperSeperatoritc.item_style = "dialogue/separator/10"; + ugd->ug_Status.ug_editfiledUpperSeperatoritc.func.text_get = NULL; + ugd->ug_Status.ug_editfiledUpperSeperatoritc.func.content_get = NULL; + ugd->ug_Status.ug_editfiledUpperSeperatoritc.func.state_get = NULL; + ugd->ug_Status.ug_editfiledUpperSeperatoritc.func.del = NULL; + +} + +Evas_Object *mf_navi_bar_upper_create(Evas_Object *parent) +{ + UG_TRACE_BEGIN; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + + Evas_Object *upper_genlist = NULL; + upper_genlist = elm_genlist_add(parent); + ug_mf_retvm_if(upper_genlist == NULL, NULL, "upper_genlist is NULL"); + elm_object_focus_set(upper_genlist, EINA_FALSE); + evas_object_size_hint_weight_set(upper_genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(upper_genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_genlist_bounce_set(upper_genlist, EINA_FALSE, EINA_FALSE); + evas_object_show(upper_genlist); + UG_TRACE_END; + return upper_genlist; + +} + + +void mf_ug_upper_genlist_item_append(Evas_Object *pGenlist, void *data) +{ + ug_mf_retm_if(data == NULL, "data is NULL"); + ug_mf_retm_if(pGenlist == NULL, "pGenlist is NULL"); + ugData *ugd = (ugData *)data; + + Elm_Object_Item *item = NULL; + + ugd->ug_Status.ug_topitc.item_style = "dialogue/bg/2icon"; + ugd->ug_Status.ug_topitc.func.text_get = NULL; + ugd->ug_Status.ug_topitc.func.content_get = __mf_ug_genlist_upper_icon_get; + ugd->ug_Status.ug_topitc.func.state_get = NULL; + ugd->ug_Status.ug_topitc.func.del = NULL; + ugd->ug_Status.ug_separtor_no_bottom_line_itc.item_style = "dialogue/seperator.4"; + ugd->ug_Status.ug_separtor_no_bottom_line_itc.func.text_get = NULL; + ugd->ug_Status.ug_separtor_no_bottom_line_itc.func.content_get = NULL; + ugd->ug_Status.ug_separtor_no_bottom_line_itc.func.state_get = NULL; + ugd->ug_Status.ug_separtor_no_bottom_line_itc.func.del = NULL; + + ugd->ug_Status.ug_separtor_with_bottom_line_itc.item_style = "dialogue/seperator.2"; + ugd->ug_Status.ug_separtor_with_bottom_line_itc.func.text_get = NULL; + ugd->ug_Status.ug_separtor_with_bottom_line_itc.func.content_get = NULL; + ugd->ug_Status.ug_separtor_with_bottom_line_itc.func.state_get = NULL; + ugd->ug_Status.ug_separtor_with_bottom_line_itc.func.del = NULL; + + // separator with no bottom line + item = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_separtor_no_bottom_line_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + + // button for dialogue item (dialogue bg) + item = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_topitc, (void *) ugd, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + + // separator with bottom line + item = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_separtor_with_bottom_line_itc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); +} + +void mf_ug_genlist_goto_myfile_item_append(Evas_Object *pGenlist, void *data) +{ + ug_mf_retm_if(pGenlist == NULL, "pGenlist is NULL"); + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + + ugListItemData *ug_ItemData; + Elm_Object_Item *it = NULL; + + __mf_ug_genlist_init_item_data(ugd, &ug_ItemData, NULL); + ug_debug("ug_ItemData is [%p]", &ug_ItemData); + + it = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_editfiledUpperSeperatoritc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, + NULL); + elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + + it = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_editfileditc, ug_ItemData, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL); + ug_ItemData->ug_pItem = it; + elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); + + it = elm_genlist_item_append(pGenlist, &ugd->ug_Status.ug_editfiledBottomSeperatoritc, NULL, NULL, ELM_GENLIST_ITEM_NONE, NULL, + NULL); + elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY); +} +Evas_Object *mf_ug_genlist_create_content_list_view(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + ugNaviBar *pNaviInUse = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retvm_if(pNaviInUse == NULL, NULL, "pNaviInUse is NULL"); + + Evas_Object *genlist; + int groupValue = 1; + int error_code = 0; + Eina_List *dir_list = NULL; + Eina_List *file_list = NULL; + Elm_Object_Item *it = NULL; + int count = 0; + + ugListItemData *ug_ItemData; + + ugd->ug_Status.ug_iRadioOn = 0; + ugd->ug_Status.ug_bNoContentFlag = false; + + genlist = __mf_ug_genlist_create_gl(ugd); + ug_mf_retvm_if(genlist == NULL, NULL, "genlist create failed"); + pNaviInUse->ug_pContent = genlist; + + GString *fullpath = g_string_new(ugd->ug_Status.ug_pPath->str); + + + error_code = mf_ug_fm_svc_wapper_get_file_list_by_filter(ugd, fullpath, &dir_list, &file_list); + + if (error_code == 0) { + + if (ugd->ug_UiGadget.ug_pDirList) { + mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pDirList, NODE_TYPE_PNODE); + ugd->ug_UiGadget.ug_pDirList = NULL; + } + if (ugd->ug_UiGadget.ug_pFilterList) { + mf_ug_util_free_eina_list_data(&ugd->ug_UiGadget.ug_pFilterList, NODE_TYPE_PNODE); + ugd->ug_UiGadget.ug_pFilterList = NULL; + } + ugd->ug_UiGadget.ug_pFilterList = file_list; + ugd->ug_UiGadget.ug_pDirList = dir_list; + } + /* list option set */ + unsigned int dir_list_len = eina_list_count(dir_list); + unsigned int filter_file_list_len = eina_list_count(ugd->ug_UiGadget.ug_pFilterList); + ug_debug("error_code is [%d]dir_list_len is [%d]file_list_len is [%d]\n", error_code, dir_list_len, filter_file_list_len); + + + if ((dir_list_len == 0 && filter_file_list_len == 0) || (ugd->ug_Status.ug_bMassStorageFlag && !ugd->ug_Status.ug_bInSettingView)) { + Evas_Object *layout; + Evas_Object *nocontent; + nocontent = elm_layout_add(ugd->ug_MainWindow.ug_pMainLayout); + elm_layout_theme_set(nocontent, "layout", "nocontents", "text"); + elm_object_part_text_set(nocontent, "elm.text", MF_UG_LABEL_NO_FILES); + ugd->ug_Status.ug_bNoContentFlag = true; + + elm_genlist_bounce_set(genlist, EINA_FALSE, EINA_FALSE); + + layout = elm_layout_add(ugd->ug_MainWindow.ug_pMainLayout); + + elm_layout_file_set(layout, UG_EDJ_NAVIGATIONBAR, UG_GRP_NO_CONTENT); + elm_object_part_content_set(layout, "myfile.noContent.upper", genlist); + elm_object_part_content_set(layout, "myfile.noContent.content", nocontent); + if (!ugd->ug_Status.ug_bMassStorageFlag) { + mf_ug_util_add_dir_watch(fullpath->str, ugd); + g_string_free(fullpath, true); + fullpath = NULL; + } + return layout; + } + ugFsNodeInfo *pNode = NULL; + Eina_List *l = NULL; + + EINA_LIST_FOREACH(dir_list, l, pNode) { + char *real_name = NULL; + count++; + if (pNode != NULL) { + real_name = g_strconcat(pNode->path, "/", pNode->name, NULL); + } else { + if (fullpath != NULL) { + g_string_free(fullpath, TRUE); + } + return NULL; + } + + ug_debug("real_name is %s", real_name); + __mf_ug_genlist_init_item_data(ugd, &ug_ItemData, real_name); + + if (ug_ItemData == NULL) { + ug_debug("alloc memory error\n"); + if (real_name) { + free(real_name); + real_name = NULL; + } + continue; + } + if (ugd->ug_UiGadget.ug_iSelectMode == MULTI_FILE_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) { + + ug_ItemData->ug_iGroupValue = 0; + it = elm_genlist_item_append(genlist, &ugd->ug_Status.ug_normalitc, ug_ItemData, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + ug_ItemData->ug_pItem = it; + } else { + ug_ItemData->ug_iGroupValue = groupValue; + groupValue++; + it = elm_genlist_item_append(genlist, &ugd->ug_Status.ug_itc, ug_ItemData, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + ug_ItemData->ug_pItem = it; + } + + if (real_name) { + free(real_name); + real_name = NULL; + } + } + + EINA_LIST_FOREACH(file_list, l, pNode) { + char *real_name = NULL; + mf_ug_launch_type launch_type = LAUNCH_TYPE_FORK; + count++; + real_name = g_strconcat(pNode->path, "/", pNode->name, NULL); + ug_debug("real_name is %s", real_name); + + __mf_ug_genlist_init_item_data(ugd, &ug_ItemData, real_name); + if (ug_ItemData == NULL) { + ug_debug("alloc memory error\n"); + if (real_name) { + free(real_name); + real_name = NULL; + } + continue; + } + + if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) { + ug_ItemData->ug_iGroupValue = groupValue; + groupValue++; + + if (__mf_ug_genlist_is_file_marked(ugd->ug_UiGadget.ug_pMultiSelectFileList, ug_ItemData->ug_pItemName)) { + ug_ItemData->ug_bChecked = true; + ugd->ug_Status.ug_iRadioOn = ug_ItemData->ug_iGroupValue; + } + } + + it = elm_genlist_item_append(genlist, &ugd->ug_Status.ug_itc, ug_ItemData, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + ug_ItemData->ug_pItem = it; + + ug_debug(); + if (real_name) { + ug_debug("free real_name\n"); + free(real_name); + real_name = NULL; + } + } + + if (fullpath != NULL) { + mf_ug_util_add_dir_watch(fullpath->str, ugd); + g_string_free(fullpath, TRUE); + } + UG_TRACE_END; + return genlist; +} + + +/****************************** +** Prototype : mf_ug_genlist_update_main_layout_content +** Description : Samsung +** Input : void *data +** char* pItemLabel +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_genlist_update_main_layout_content(void *data, char *pItemLabel) +{ + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + ug_mf_retm_if(pItemLabel == NULL, "invalid parameter pItemLabel"); + Evas_Object *pOldContent = NULL; + /*/1. delete the sepcified item from tab bar */ + /*/1.1 get navi bar pointer from the control bar item */ + Evas_Object *pNaviBar_toDel = ug_mf_navi_bar_get_navibar_from_navilist(ugd->ug_MainWindow.ug_pNaviBarList, pItemLabel); + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_navi_struct_by_navi(ugd, pNaviBar_toDel); + /*/1.2 delete the item */ + evas_object_del(pNaviBar_toDel); + mf_ug_tab_bar_remove_item_by_label(ugd->ug_MainWindow.ug_pTabBar, pItemLabel); + /*2. delete the item from navigation bar list */ + Eina_List *plistNaviMMC = eina_list_data_find_list(ugd->ug_MainWindow.ug_pNaviBarList, pNavi_s); + /*/2.1 Todo: clear all the data in the structure. */ + mf_ug_navi_bar_reset_navi_object(pNavi_s); + /*/2.2 remove from the list. */ + ugd->ug_MainWindow.ug_pNaviBarList = eina_list_remove_list(ugd->ug_MainWindow.ug_pNaviBarList, plistNaviMMC); + /*/2.3 set first navi as navi in use */ + pNavi_s = (ugNaviBar *)eina_list_nth(ugd->ug_MainWindow.ug_pNaviBarList, 1); + pNavi_s->ug_bNaviFlagInUse = TRUE; + /*/3. check if tab bar has at least 2 items */ + if (eina_list_count(ugd->ug_MainWindow.ug_pNaviBarList) < 2) { + /*/no: tab bar delete operation */ + pOldContent = elm_object_part_content_unset(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content"); + evas_object_del(pOldContent); + /*/3.1 get pNavi Inuse */ + pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + elm_object_part_content_set(ugd->ug_MainWindow.ug_pMainLayout, "elm.swallow.content", pNavi_s->ug_pNaviBar); + } else { + /*/yes: do nothing */ + //elm_toolbar_item_selected_set(elm_toolbar_first_item_get(ugd->ug_MainWindow.ug_pTabBar), EINA_TRUE); + } +} diff --git a/src/widget/mf-ug-navi-bar.c b/src/widget/mf-ug-navi-bar.c new file mode 100755 index 0000000..b94700c --- /dev/null +++ b/src/widget/mf-ug-navi-bar.c @@ -0,0 +1,794 @@ +/* + * 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 "mf-ug-winset.h" +#include "mf-ug-cb.h" +#include "mf-ug-fm-svc-wrapper.h" +#include "mf-ug-util.h" +#include "mf-ug-fs-util.h" +#include "mf-ug-resource.h" + + +/****************************** +** Prototype : __mf_ug_navi_bar_create_group_radio_box +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_navi_bar_create_group_radio_box(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + Evas_Object *group_radio = NULL; + + if (ugd->ug_MainWindow.ug_pRadioGroup != NULL) { + evas_object_del(ugd->ug_MainWindow.ug_pRadioGroup); + ugd->ug_MainWindow.ug_pRadioGroup = NULL; + } + + group_radio = elm_radio_add(ugd->ug_MainWindow.ug_pMainLayout); + ug_mf_retm_if(group_radio == NULL, "ugd is NULL"); + + elm_radio_value_set(group_radio, 0); + evas_object_hide(group_radio); + /*/Internal/invisible Radio Objects used to group the radio buttons in the list. */ + ugd->ug_MainWindow.ug_pRadioGroup = group_radio; + UG_TRACE_END; +} + + +/****************************** +** Prototype : __mf_ug_navi_bar_push_content +** Description : Samsung +** Input : ugData *data +** Evas_Object *NaviContent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +static void __mf_ug_navi_bar_push_content(ugNaviBar *pNavi_s, Evas_Object *NaviContent) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(pNavi_s == NULL, "pNavi_s is NULL"); + + Evas_Object *NaviBar = pNavi_s->ug_pNaviBar; + char *title = pNavi_s->ug_pNaviTitle; + + pNavi_s->ug_pPreNaviItem = pNavi_s->ug_pNaviItem; + + pNavi_s->ug_pNaviItem = elm_naviframe_item_push(NaviBar, title, NULL, NULL, NaviContent, MF_UG_NAVI_STYLE_ENABLE); + + UG_TRACE_END; +} + +static Evas_Object *__mf_ug_navi_bar_create_select_info(void *data, Evas_Object *parent) +{ + + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + + Evas_Object *pSelectInfo = NULL; + pSelectInfo = elm_notify_add(parent); + elm_notify_orient_set(pSelectInfo, ELM_NOTIFY_ORIENT_BOTTOM); + + evas_object_smart_callback_add(pSelectInfo, "selectioninfo,timeout", mf_ug_cb_select_info_timeout_cb, ugd); + evas_object_event_callback_add(pSelectInfo, EVAS_CALLBACK_SHOW, mf_ug_cb_select_info_show_cb, ugd); + evas_object_event_callback_add(pSelectInfo, EVAS_CALLBACK_HIDE, mf_ug_cb_select_info_hide_cb, ugd); + UG_TRACE_END; + + return pSelectInfo; +} + +static Evas_Object *__mf_ug_navi_bar_create_select_info_layout(Evas_Object *parent, Evas_Object *select_info) +{ + UG_TRACE_BEGIN; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + ug_mf_retvm_if(select_info == NULL, NULL, "select_info is NULL"); + + Evas_Object *pSelectInfoLayout = NULL; + + pSelectInfoLayout = elm_layout_add(parent); + //elm_layout_theme_set(pSelectInfoLayout, "standard", "selectioninfo", "bottom_86"); + elm_object_content_set(select_info, pSelectInfoLayout); + + UG_TRACE_END; + return pSelectInfoLayout; +} + +void mf_ug_navi_bar_set_select_info_label(void *data, int dir_count, int file_count) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + ug_debug("dir count is [%d], file count is [%d]", dir_count, file_count); + + if (ugd->ug_MainWindow.ug_pLabel) { + if (ugd->ug_MainWindow.ug_pSelectInfoLayout) { + evas_object_del(ugd->ug_MainWindow.ug_pSelectInfoLayout); + ugd->ug_MainWindow.ug_pSelectInfoLayout = NULL; + } + if (ugd->ug_MainWindow.ug_pLabel) { + evas_object_del(ugd->ug_MainWindow.ug_pLabel); + ugd->ug_MainWindow.ug_pLabel = NULL; + } + } + + if (!ugd->ug_MainWindow.ug_pLabel) { + /*Note: selectioninfo is kind of popup, so, do not swallow it to part of layout + //And it should be attached on main layout because it calculate the position of itself by layout size (elm_layout_theme_set()) + //Evas_Object *countlabel = elm_selectioninfo_add(ugd->ug_MainWindow.ug_pMainLayout); + */ + + ugd->ug_MainWindow.ug_pLabel = __mf_ug_navi_bar_create_select_info(ugd, ugd->ug_MainWindow.ug_pMainLayout); + + ugd->ug_MainWindow.ug_pSelectInfoLayout = + __mf_ug_navi_bar_create_select_info_layout(ugd->ug_MainWindow.ug_pMainLayout, ugd->ug_MainWindow.ug_pLabel); + elm_layout_theme_set(ugd->ug_MainWindow.ug_pSelectInfoLayout, "standard", "selectioninfo", "vertical/bottom_64"); + + } + + if (dir_count + file_count > 0) { + char lable_dir[UG_LABEL_STRING_LENGTH] = { '\0', }; + char lable_file[UG_LABEL_STRING_LENGTH] = { '\0', }; + char *select_lable = NULL; + /*1 TODO: need to update for multi-language */ + if (dir_count > 1) { + snprintf(lable_dir, sizeof(lable_dir), "%d %s", dir_count, ("folders")); + } else if (dir_count == 1) { + snprintf(lable_dir, sizeof(lable_dir), "%d %s", dir_count, ("folder")); + } + + if (file_count > 1) { + snprintf(lable_file, sizeof(lable_file), "%d %s", file_count, ("files")); + } else if (file_count == 1) { + snprintf(lable_file, sizeof(lable_file), "%d %s", file_count, ("file")); + } + + if (dir_count < 1) { + select_lable = g_strconcat("Selected (", lable_file, ")", NULL); + } else if (file_count < 1) { + select_lable = g_strconcat("Selected (", lable_dir, ")", NULL); + } else { + select_lable = g_strconcat("Selected (", lable_dir, " , ", lable_file, ")", NULL); + } + + elm_object_part_text_set(ugd->ug_MainWindow.ug_pSelectInfoLayout, "elm.text", select_lable); + edje_object_part_text_set(_EDJ(ugd->ug_MainWindow.ug_pSelectInfoLayout), "elm.text", select_lable); + elm_notify_timeout_set(ugd->ug_MainWindow.ug_pLabel, 3); + evas_object_show(ugd->ug_MainWindow.ug_pLabel); + } else { + evas_object_hide(ugd->ug_MainWindow.ug_pLabel); + } + UG_TRACE_END; + + return; +} + +/****************************** +** Prototype : mf_ug_navi_bar_create_navi_bar +** Description : +** Input : Evas_Object* parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +Evas_Object *mf_ug_navi_bar_create_navi_bar(Evas_Object *parent) +{ + UG_TRACE_BEGIN; + Evas_Object *navi_bar = NULL; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + + navi_bar = elm_naviframe_add(parent); + ug_mf_retvm_if(navi_bar == NULL, NULL, "Failed elm_navigationbar_add"); + elm_naviframe_prev_btn_auto_pushed_set(navi_bar, EINA_FALSE); + + evas_object_show(navi_bar); + + UG_TRACE_END; + return navi_bar; +} + + +/****************************** +** Prototype : mf_ug_navi_bar_set_new_content +** Description : Samsung +** Input : Evas_Object *pLayout +** Evas_Object *NaviContent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_navi_bar_set_new_content(Evas_Object *pLayout, Evas_Object *NaviContent) +{ + UG_TRACE_BEGIN; + Evas_Object *unUsed = elm_object_part_content_unset(pLayout, "part1"); + evas_object_del(unUsed); + elm_object_part_content_set(pLayout, "part1", NaviContent); + UG_TRACE_END; +} + +Evas_Object *mf_ug_navi_bar_create_box(Evas_Object * parent) +{ + UG_TRACE_BEGIN; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + + Evas_Object *box = NULL; + ug_debug("parent is [%p]", parent); + box = elm_box_add(parent); + ug_mf_retvm_if(box == NULL, NULL, "box is NULL"); + elm_object_focus_set(box, EINA_FALSE); + evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_clear(box); + evas_object_show(box); + UG_TRACE_END; + return box; + +} + +Evas_Object *mf_ug_navi_bar_create_layout(Evas_Object *parent, const char *edj, const char *grp_name) +{ + UG_TRACE_BEGIN; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + ug_mf_retvm_if(edj == NULL, NULL, "edj is NULL"); + ug_mf_retvm_if(grp_name == NULL, NULL, "grp_name is NULL"); + + Evas_Object *layout = NULL; + + layout = elm_layout_add(parent); + ug_mf_retvm_if(layout == NULL, NULL, "layout is NULL"); + elm_object_focus_set(layout, EINA_FALSE); + elm_layout_file_set(layout, edj, grp_name); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(layout); + UG_TRACE_END; + return layout; + +} + +/****************************** +** Prototype : mf_ug_navi_bar_create_default_view +** Description : Samsung +** Input : void *data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +Evas_Object *mf_ug_navi_bar_pathinfo_label_create(Evas_Object *parent, char *pathinfo) +{ + UG_TRACE_BEGIN; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + ug_mf_retvm_if(pathinfo == NULL, NULL, "pathinfo is NULL"); + + Evas_Object *label = NULL; + + label = elm_label_add(parent); + elm_object_focus_set(label, EINA_FALSE); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_object_text_set(label, pathinfo); + evas_object_show(label); + UG_SAFE_FREE_CHAR(pathinfo); + UG_TRACE_END; + return label; +} + +Evas_Object *__mf_ug_navi_bar_pathinfo_create(Evas_Object *parent, char *pathinfo) +{ + UG_TRACE_BEGIN; + ug_mf_retvm_if(parent == NULL, NULL, "parent is NULL"); + ug_mf_retvm_if(pathinfo == NULL, NULL, "pathinfo is NULL"); + + Evas_Object *layout = NULL; + Evas_Object *label = NULL; + + layout = elm_layout_add(parent); + elm_object_focus_set(layout, EINA_FALSE); + elm_layout_file_set(layout, UG_EDJ_NAVIGATIONBAR, UG_GRP_PATH_INFO); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + + label = mf_ug_navi_bar_pathinfo_label_create(layout, pathinfo); + elm_object_part_content_set(layout, "info", label); + evas_object_show(layout); + UG_TRACE_END; + return layout; +} + +void mf_ug_navi_bar_create_default_view(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + + GString *title = NULL; + Evas_Object *pNaviLayout = NULL; + Evas_Object *newContent = NULL; + Evas_Object *box = NULL; + Evas_Object *top_layout = NULL; + Evas_Object *upper_genlist = NULL; + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + ug_mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed"); + + + /*if the muisc is playing, destory the play */ + if (0 != ugd->ug_ListPlay.ug_Player) { + mf_ug_list_play_destory_playing_file(ugd); + } + + box = mf_ug_navi_bar_create_box(pNavi_s->ug_pNaviBar); + pNavi_s->ug_pNaviBox = box; + + if (ugd->ug_Status.ug_bSettingEntry == true && ugd->ug_Status.ug_bInSettingView == true) { + top_layout = mf_ug_navi_bar_create_box(box); + evas_object_size_hint_min_set(top_layout, MF_UG_UPPER_WIDTH, MF_UG_UPPER_HEIGHT); + upper_genlist = mf_navi_bar_upper_create(top_layout); + mf_ug_genlist_goto_myfile_style_set(ugd); + mf_ug_genlist_goto_myfile_item_append(upper_genlist, ugd); + ugd->ug_Status.ug_bUpperFlag = true; + elm_box_pack_end(top_layout, upper_genlist); + } else if (!mf_ug_fm_svc_wapper_is_root_path(ugd)){ + Evas_Object *pathinfo_layout = NULL; + Evas_Object *upper_layout = NULL; + char *pathinfo = NULL; + char *info = NULL; + + top_layout = mf_ug_navi_bar_create_box(box); + evas_object_size_hint_weight_set(top_layout, EVAS_HINT_EXPAND, EVAS_HINT_FILL); + evas_object_size_hint_align_set(top_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + elm_box_clear(top_layout); + //evas_object_size_hint_min_set(top_layout, MF_UG_UPPER_WIDTH, MF_UG_UPPER_HEIGHT); + + pathinfo = mf_ug_fm_svc_wapper_path_info_get(ugd->ug_Status.ug_pPath->str); + info = mf_ug_fm_svc_path_info_translate(pathinfo, MF_UG_PATH_INFO_MAX_LENGTH_PORTRAIT); + pathinfo_layout = __mf_ug_navi_bar_pathinfo_create(top_layout, info); + + upper_layout = elm_layout_add(top_layout); + elm_object_focus_set(upper_layout, EINA_FALSE); + elm_layout_file_set(upper_layout, UG_EDJ_NAVIGATIONBAR, UG_GRP_UPPER_LAYOUT); + evas_object_size_hint_weight_set(upper_layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(upper_layout, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(upper_layout); + + upper_genlist = mf_navi_bar_upper_create(top_layout); + //mf_ug_genlist_upper_style_set(ugd); + mf_ug_upper_genlist_item_append(upper_genlist, ugd); + + elm_object_part_content_set(upper_layout, "upper", upper_genlist); + elm_box_pack_end(top_layout, pathinfo_layout); + elm_box_pack_end(top_layout, upper_layout); + ugd->ug_Status.ug_bUpperFlag = true; + } + + if (top_layout) { + elm_box_pack_start(box, top_layout); + } else { + ugd->ug_Status.ug_bUpperFlag = true; + } + + pNaviLayout = mf_ug_navi_bar_create_layout(box, UG_EDJ_NAVIGATIONBAR, UG_GRP_NAVI_VIEW); + pNavi_s->ug_pNaviLayout = pNaviLayout; + /*set content */ + if (ugd->ug_UiGadget.ug_iSelectMode == SINGLE_ALL_MODE || ugd->ug_UiGadget.ug_iSelectMode == SINGLE_FILE_MODE) { + __mf_ug_navi_bar_create_group_radio_box(ugd); + } + newContent = mf_ug_genlist_create_content_list_view(ugd); + pNavi_s->ug_pContent = newContent; + /*set title segment or title */ + if (mf_ug_fm_svc_wapper_is_root_path(ugd)) { + title = g_string_new(MF_UG_LABEL_MYFILES); + } else { + title = mf_ug_fm_svc_wapper_get_file_name(ugd->ug_Status.ug_pPath); + } + + if (title != NULL) { + pNavi_s->ug_pNaviTitle = g_strdup(title->str); + g_string_free(title, TRUE); + title = NULL; + } + /*navigation view integration */ + evas_object_show(newContent); + elm_object_part_content_set(pNaviLayout, "part1", newContent); + elm_box_pack_end(box, pNaviLayout); + __mf_ug_navi_bar_push_content(pNavi_s, box); + + /*add control bar for navigation bar */ + mf_ug_ctrl_bar_set(ugd, pNavi_s); +#ifdef MF_UG_FEATURE_NEW_UX + if (ugd->ug_Status.ug_iMmcFlag == MMC_ON && !(ugd->ug_Status.ug_bSettingEntry == true && ugd->ug_Status.ug_bInSettingView == true)) + elm_naviframe_item_title_visible_set(pNavi_s->ug_pNaviItem, EINA_FALSE); +#endif + mf_ug_navi_bar_remove_previous_contents(ugd); + UG_TRACE_END; +} + + +/****************************** +** Prototype : mf_ug_navi_bar_get_in_use_navi +** Description : Samsung +** Input : void* data +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +ugNaviBar *mf_ug_navi_bar_get_in_use_navi(void *data) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + + Eina_List *pNaviList = ugd->ug_MainWindow.ug_pNaviBarList; + ug_mf_retvm_if(pNaviList == NULL, NULL, "pNavi_sList is NULL"); + + ugNaviBar *ret = NULL; + Eina_List *l = NULL; + void *item; + + EINA_LIST_FOREACH(pNaviList, l, item) { + ret = (ugNaviBar *)item; + if (ret->ug_bNaviFlagInUse == TRUE) { + break; + } else { + ret = NULL; + } + } + ug_debug(" ret is [%p]", ret); + UG_TRACE_END; + return ret; +} + + +/****************************** +** Prototype : mf_ug_navi_bar_reset_navi_object +** Description : Samsung +** Input : ugNaviBar *pNavi_s +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_navi_bar_reset_navi_object(ugNaviBar *pNavi_s) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(pNavi_s == NULL, "pNavi_s is NULL"); + + UG_SAFE_FREE_OBJ(pNavi_s->ug_pNaviBar); + pNavi_s->ug_pContent = NULL; + pNavi_s->ug_pNaviCtrlBar = NULL; + pNavi_s->ug_pNaviTitle = NULL; + if (pNavi_s->ug_pCurrentPath != NULL) { + free(pNavi_s->ug_pCurrentPath); + pNavi_s->ug_pCurrentPath = NULL; + } + if (pNavi_s->ug_pNaviLabel != NULL) + free(pNavi_s->ug_pNaviLabel); + pNavi_s->ug_pNaviLabel = NULL; + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_navi_bar_get_navi_struct_by_navi +** Description : Samsung +** Input : void* data +** Evas_Object* pNaviBar +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +ugNaviBar *mf_ug_navi_bar_get_navi_struct_by_navi(void *data, Evas_Object *pNaviBar) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + ug_mf_retvm_if(pNaviBar == NULL, NULL, "pNaviBar is NULL"); + + Eina_List *pNaviList = ugd->ug_MainWindow.ug_pNaviBarList; + ug_mf_retvm_if(pNaviList == NULL, NULL, "pNavi_sList is NULL"); + + Eina_List *l = NULL; + void *item = NULL; + + ugNaviBar *ret = NULL; + EINA_LIST_FOREACH(pNaviList, l, item) { + if (((ugNaviBar *)item)->ug_pNaviBar == pNaviBar) { + ret = (ugNaviBar *)item; + break; + } + } + UG_TRACE_END; + return ret; +} + + +/****************************** +** Prototype : mf_ug_navi_bar_get_navi_struct_by_label +** Description : Samsung +** Input : void* data +** const char* pNaviLabel +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +ugNaviBar *mf_ug_navi_bar_get_navi_struct_by_label(void *data, const char *pNaviLabel) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retvm_if(ugd == NULL, NULL, "ugd is NULL"); + ug_mf_retvm_if(pNaviLabel == NULL, NULL, "pNaviLabel is NULL"); + + Eina_List *l = NULL; + void *item = NULL; + + ugNaviBar *ret = NULL; + EINA_LIST_FOREACH(ugd->ug_MainWindow.ug_pNaviBarList, l, item) { + if (g_strcmp0(((ugNaviBar *)item)->ug_pNaviLabel, pNaviLabel) == 0) { + ret = (ugNaviBar *)item; + break; + } + } + UG_TRACE_END; + return ret; +} + + +/****************************** +** Prototype : mf_ug_navi_bar_remove_navi_list_item_by_label +** Description : Samsung +** Input : void *data +** const char* pNaviLabel +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_navi_bar_remove_navi_list_item_by_label(void *data, const char *pNaviLabel) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + ug_mf_retm_if(pNaviLabel == NULL, "pNaviLabel is NULL"); + + bool bInUseFlag = FALSE; + + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_navi_struct_by_label(ugd, pNaviLabel); + + if (pNavi_s == NULL) { + return; + } + Eina_List *plistNaviMMC = eina_list_data_find_list(ugd->ug_MainWindow.ug_pNaviBarList, pNavi_s); + ugd->ug_MainWindow.ug_pNaviBarList = eina_list_remove_list(ugd->ug_MainWindow.ug_pNaviBarList, plistNaviMMC); + + if (pNavi_s->ug_bNaviFlagInUse == TRUE) { + bInUseFlag = TRUE; + } + + mf_ug_navi_bar_reset_navi_object(pNavi_s); + + if (bInUseFlag == TRUE) { + pNavi_s = (ugNaviBar *)eina_list_nth(ugd->ug_MainWindow.ug_pNaviBarList, 0); + pNavi_s->ug_bNaviFlagInUse = TRUE; + } + UG_TRACE_END; +} + + +/****************************** +** Prototype : mf_ug_navi_bar_refresh_navibar_recovered_view +** Description : Samsung +** Input : void *data +** ugNaviBar* pNaviStruct +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_navi_bar_refresh_navibar_recovered_view(void *data, ugNaviBar *pNaviStruct) +{ + UG_TRACE_BEGIN; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + ug_mf_retm_if(pNaviStruct == NULL, "pNaviStruct is NULL"); + + if (ugd->ug_Status.ug_pPath != NULL) { + g_string_free(ugd->ug_Status.ug_pPath, TRUE); + ugd->ug_Status.ug_pPath = NULL; + } + ugd->ug_Status.ug_pPath = g_string_new(pNaviStruct->ug_pCurrentPath); + Evas_Object *newContent = mf_ug_genlist_create_content_list_view(ugd); + + pNaviStruct->ug_pContent = newContent; + mf_ug_navi_bar_set_new_content(pNaviStruct->ug_pNaviLayout, newContent); + UG_TRACE_END; +} + +void mf_ug_navi_bar_transition_finished_cb(void *data, Evas_Object *obj, void *event_info) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(data == NULL, "data is NULL"); + ug_mf_retm_if(obj == NULL, "obj is NULL"); + ugData *ugd = (ugData *)data; + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + Elm_Object_Item *it = pNavi_s->ug_pPreNaviItem; + UG_SAFE_DEL_NAVI_ITEM(it); + pNavi_s->ug_pPreNaviItem = NULL; + mf_ug_navi_bar_set_blocking(data, false); + evas_object_smart_callback_del(obj, "transition,finished", mf_ug_navi_bar_transition_finished_cb); + UG_TRACE_END; +} + +void mf_ug_navi_bar_remove_previous_contents(void *data) +{ + UG_TRACE_BEGIN; + + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + Evas_Object *pNaviBar = NULL; + ugNaviBar *pNavi_s = mf_ug_navi_bar_get_in_use_navi(ugd); + if (pNavi_s && pNavi_s->ug_pNaviBar) { + pNaviBar = pNavi_s->ug_pNaviBar; + mf_ug_navi_bar_set_blocking(data, true); + evas_object_smart_callback_add(pNaviBar, "transition,finished", mf_ug_navi_bar_transition_finished_cb, ugd); + } + UG_TRACE_END; +} + +void mf_ug_navi_bar_del_item_directly(void *data) +{ + UG_TRACE_BEGIN; + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + + if (ugd->ug_Status.ug_b_NaviPushFlag) { + ugNaviBar *pNavi_s_previous = NULL; + pNavi_s_previous = mf_ug_navi_bar_get_in_use_navi(ugd) ; + if(pNavi_s_previous && pNavi_s_previous->ug_pPreNaviItem) + { + UG_SAFE_DEL_NAVI_ITEM(pNavi_s_previous->ug_pPreNaviItem); + mf_ug_navi_bar_set_blocking(ugd, false); + evas_object_smart_callback_del(pNavi_s_previous->ug_pNaviBar, "transition,finished", mf_ug_navi_bar_transition_finished_cb); + } + } + UG_TRACE_END; +} + + +void mf_ug_navi_bar_set_blocking(void *data, bool bblock_during_transition) +{ + ug_mf_retm_if(data == NULL, "data is NULL"); + ugData *ugd = (ugData *)data; + + ugd->ug_Status.ug_bCancelDisableFlag = bblock_during_transition; + ugd->ug_Status.ug_b_NaviPushFlag = bblock_during_transition; + return; +} + +ugNaviBar *ug_mf_navi_bar_get_navi_from_navilist(Eina_List *navilist, const char *label) +{ + + UG_TRACE_BEGIN; + ug_mf_retvm_if(navilist == NULL, NULL, "navilist is NULL"); + ug_mf_retvm_if(label == NULL, NULL, "label is NULL"); + + void *data = NULL; + ugNaviBar *pNavi = NULL; + Eina_List *l = NULL; + EINA_LIST_FOREACH(navilist, l, data) { + if (data) { + pNavi = (ugNaviBar *)data; + if (pNavi && pNavi->ug_pNaviLabel && g_strcmp0(label, pNavi->ug_pNaviLabel) == 0) + return pNavi; + else + continue; + } + } + return NULL; +} + +Evas_Object *ug_mf_navi_bar_get_navibar_from_navilist(Eina_List *navilist, const char *label) +{ + ugNaviBar *pNavi_s = NULL; + pNavi_s = ug_mf_navi_bar_get_navi_from_navilist(navilist, label); + if (pNavi_s && pNavi_s->ug_pNaviBar) + return pNavi_s->ug_pNaviBar; + else + return NULL; +} + diff --git a/src/widget/mf-ug-popup.c b/src/widget/mf-ug-popup.c new file mode 100755 index 0000000..cceeb69 --- /dev/null +++ b/src/widget/mf-ug-popup.c @@ -0,0 +1,95 @@ +/* + * 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 "mf-ug-util.h" +#include "mf-ug-winset.h" +#include "mf-ug-resource.h" + + +/****************************** +** Prototype : mfPopupCreate +** Description : +** Input : void *data +** ePopMode popupMode +** char *title +** char *context +** char *first_btn_text +** char *second_btn_text +** char *third_btn_text +** Evas_Smart_Cb func +** void* param +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_popup_create(void *data, mf_ug_popup_mode popupMode, char *title, char *context, char *first_btn_text, char *second_btn_text, + char *third_btn_text, Evas_Smart_Cb func, void *param) +{ + Evas_Object *popup; + ugData *ugd = (ugData *)data; + ug_mf_retm_if(ugd == NULL, "ugd is NULL"); + Evas_Object *btn1 = NULL; + Evas_Object *btn2 = NULL; + + popup = elm_popup_add(ugd->ug_MainWindow.ug_pMainLayout); + ugd->ug_MainWindow.ug_pNormalPopup = popup; + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + if (title) { + elm_object_part_text_set(popup, "elm.title", title); + } + if (context && popupMode != UG_POPMODE_PROGRESSBAR) { + elm_object_text_set(popup, context); + } + switch (popupMode) { + case UG_POPMODE_TEXT: + case UG_POPMODE_TITLE_TEXT: + elm_popup_timeout_set(popup, 3); + if (func) { + evas_object_smart_callback_add(popup, "response", (Evas_Smart_Cb) func, param); + } + break; + case UG_POPMODE_TEXT_TWO_BTN: + case UG_POPMODE_TITLE_TEXT_TWO_BTN: + btn1 = __ug_mf_popup_button_create(popup, first_btn_text); + btn2 = __ug_mf_popup_button_create(popup, second_btn_text); + + evas_object_smart_callback_add(btn1, "clicked", func, param); + evas_object_smart_callback_add(btn2, "clicked", func, param); + elm_object_part_content_set(popup, "button1", btn1); + elm_object_part_content_set(popup, "button2", btn2); + break; + case UG_POPMODE_TEXT_BTN: + case UG_POPMODE_TITLE_TEXT_BTN: + btn1 = __ug_mf_popup_button_create(popup, MF_UG_LABEL_OK); + evas_object_smart_callback_add(btn1, "clicked", func, param); + elm_object_part_content_set(popup, "button1", btn1); + break; + default: + return; + } + evas_object_show(popup); +} + diff --git a/src/widget/mf-ug-tab-bar.c b/src/widget/mf-ug-tab-bar.c new file mode 100755 index 0000000..26ea0e3 --- /dev/null +++ b/src/widget/mf-ug-tab-bar.c @@ -0,0 +1,251 @@ +/* + * 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 "mf-ug-winset.h" +#include "mf-ug-util.h" +#include "mf-ug-fm-svc-wrapper.h" + + +/****************************** +** Prototype : mf_ug_tab_bar_create +** Description : Samsung +** Input : Evas_Object *parent +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +Evas_Object *mf_ug_tab_bar_create(Evas_Object *parent) +{ + UG_TRACE_BEGIN; + ug_mf_retv_if(parent == NULL, NULL); + Evas_Object *toolbar = elm_toolbar_add(parent); + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + elm_object_style_set(toolbar, "tabbar"); + elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_toolbar_homogeneous_set(toolbar, EINA_FALSE); + + UG_TRACE_BEGIN; + return toolbar; +} + + + +/****************************** +** Prototype : mf_ug_tab_bar_append_item +** Description : Samsung +** Input : Evas_Object *pTabBar +** char *pTabIconPath +** char *pTabBarLabel +** Evas_Object *pTabView +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +Elm_Object_Item *mf_ug_tab_bar_append_item(Evas_Object *pTabBar, char *pTabIconPath, char *pTabBarLabel, void *user_data) +{ + UG_TRACE_BEGIN; + ug_mf_retv_if(pTabBar == NULL, NULL); + + Elm_Object_Item *pItem = NULL; + pItem = elm_toolbar_item_append(pTabBar, pTabIconPath, pTabBarLabel, mf_ug_cb_tab_bar_cb, user_data); + UG_TRACE_END; + return pItem; +} + + + +/****************************** +** Prototype : mf_ug_tab_bar_set_item_view +** Description : Samsung +** Input : Elm_Object_Item *it +** Evas_Object * view +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_tab_bar_set_item_view(Evas_Object *parent, Evas_Object *tab_layout, Evas_Object *view) +{ + UG_TRACE_BEGIN; + Evas_Object *layout = tab_layout; + Evas_Object *unset = elm_object_part_content_get(layout, "elm.swallow.content"); + if (unset) { + elm_object_part_content_unset(layout, "elm.swallow.content"); + evas_object_hide(unset); + } + + elm_object_part_content_set(layout, "elm.swallow.content", view); + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_tab_bar_remove_item_by_label +** Description : Samsung +** Input : Evas_Object *pTabBar +** char *pTabLabel +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_tab_bar_remove_item_by_label(Evas_Object *pTabBar, char *pTabLabel) +{ + UG_TRACE_BEGIN; + Elm_Object_Item *pItem = NULL; + pItem = elm_toolbar_first_item_get(pTabBar); + + while(pItem) { + if (g_strcmp0(pTabLabel, elm_object_item_text_get(pItem)) == 0) { + elm_object_item_del(pItem); + return; + } + pItem = elm_toolbar_item_next_get(pItem); + } + UG_TRACE_END; +} + + +/****************************** +** Prototype : mf_ug_tab_bar_remove_all_items +** Description : Samsung +** Input : Evas_Object *pTabBar +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_tab_bar_remove_all_items(Evas_Object *pTabBar) +{ + + UG_TRACE_BEGIN; + Elm_Object_Item *it = NULL; + Elm_Object_Item *pNext = NULL; + + it = elm_toolbar_first_item_get(pTabBar); + while(it) { + pNext = elm_toolbar_item_next_get(it); + elm_object_item_del(it); + it = pNext; + } + UG_TRACE_END; +} + +/****************************** +** Prototype : mf_ug_tab_bar_set_selected_item +** Description : Samsung +** Input : Elm_Object_Item* pItem +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_tab_bar_set_selected_item(Elm_Object_Item *pItem) +{ + UG_TRACE_BEGIN; + elm_toolbar_item_selected_set(pItem, EINA_TRUE); + UG_TRACE_END; +} + + + + +/****************************** +** Prototype : mf_ug_tab_bar_set_item_disable +** Description : Samsung +** Input : Evas_Object *pTabBar +** Eina_Bool disable +** Output : None +** Return Value : +** Calls : +** Called By : +** +** History : +** 1.Date : 2010/12/10 +** Author : Samsung +** Modification : Created function +** +******************************/ +void mf_ug_tab_bar_set_item_disable(Evas_Object *pTabBar, Eina_Bool disable) +{ + Elm_Object_Item *pCurrentItem = NULL; + + if (pTabBar != NULL) { + + pCurrentItem = elm_toolbar_first_item_get(pTabBar); + while(pCurrentItem) { + elm_object_item_disabled_set(pCurrentItem, disable); + pCurrentItem = elm_toolbar_item_next_get(pCurrentItem); + } + } +} + +int mf_ug_tab_bar_items_count_get(Evas_Object *pTabBar) +{ + ug_mf_retvm_if(pTabBar == NULL, 0, "pTabBar is NULL"); + + Elm_Object_Item *pCurrentItem = NULL; + int count = 0; + + pCurrentItem = elm_toolbar_first_item_get(pTabBar); + while(pCurrentItem) { + count++; + pCurrentItem = elm_toolbar_item_next_get(pCurrentItem); + } + + return count; +} + diff --git a/ug_navibar_layout.edc b/ug_navibar_layout.edc new file mode 100755 index 0000000..64c0b7d --- /dev/null +++ b/ug_navibar_layout.edc @@ -0,0 +1,448 @@ +/* + * Copyright (c) Samsung Electronics Co., Ltd. All rights reserved. + * + * Licensed under the Flora Software License (the "License"). + * + * You may obtain a copy of the License at + * http://www.tizenopensource.org/license + * + * Your use of this source code is conditioned on your acceptance of the + * terms and conditions of the License. + * If you do not agree to the terms and conditions of the License, + * do not use the source code herein. + * + * THIS SOURCE CODE IS LICENSED ONLY UNDER THE TERMS OF THE LICENSE. + * + * THIS SOURCE CODE IS DISTRIBUTED ON AN "AS-IS" BASIS AND "WITH ALL FAULTS", + * WITHOUT WARRANTIES OR REPRESENTATIONS OF ANY KIND, EXPRESS OR IMPLIED. + * + * See the License for specific language governing permissions and limitations. + */ + +#define UG_BASIC_W 480 +#define UG_BASIC_H 800 + +#define UG_MAIN_W 720 +#define UG_MAIN_H 1280 + +#define UG_MF_SCALE_W (UG_MAIN_W/UG_BASIC_W) +#define UG_MF_SCALE_H (UG_MAIN_H/UG_BASIC_H) + +#define UG_THUMBNAIL_W 50*UG_MF_SCALE_W +#define UG_THUMBNAIL_H 50*UG_MF_SCALE_H + +#define UG_MEMORY_SUB_THUMB_W 40*UG_MF_SCALE_W +#define UG_MEMORY_SUB_THUMB_H 25*UG_MF_SCALE_H + +#define UG_SOUND_BUTTON_W 240*UG_MF_SCALE_W +#define UG_SOUND_BUTTON_H 46*UG_MF_SCALE_H + +#define GENLIST_ITEM_H 71*UG_MF_SCALE_H +#define PATH_INFO_H 30*UG_MF_SCALE_H +#define PATH_INFO_LABEL_H 25 +#define PATH_INFO_BG_COLOR 200 200 200 127 +#define BOTTOM_LINE_COLOR 199 199 199 255 + + +#define MF_UG_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 MF_UG_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 MF_UG_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 EFFECT_PROGRAMS(part_name, part_state, after_name) \ + program \ + { \ + name: part_name; \ + action: STATE_SET part_state 0.0;\ + target: "icon"; \ + transition: DECELERATE 0.03; \ + after: after_name; \ + } + +collections +{ + group + { + name: "navigation_view"; + parts + { + part + { + name: "base"; + type: RECT; + description + { + state: "default" 0.0; + rel1 + { + relative: 0 0; offset: 0 0; + } + rel2 + { + relative: 1 1; offset: -1 -1; + } + color: 0 0 0 0; + } + } + part + { + name: "part1"; + type: SWALLOW; + scale: 1; + description + { + state: "default" 0.0; + visible: 1; + rel1 + { + relative: 0.0 0.0; to:"base"; + } + rel2 + { + relative: 1.0 1.0; to:"base"; + } + } + } + } + } + + group + { + name: "noContent"; + parts + { + part + { + name: "myfile.noContent.upper"; + type: SWALLOW; + scale: 1; + description + { + state: "default" 0.0; + rel1 + { + relative: 0.0 0.0; + } + rel2 + { + relative: 1.0 0.0; offset: 0 90; + } + } + } + part + { + name: "myfile.noContent.content"; + type: SWALLOW; + scale: 1; + description + { + state: "default" 0.0; + rel1 + { + relative: 0.0 1.0; + offset: 0 0; + to_y: "myfile.noContent.upper"; + } + rel2 + { + relative: 1.0 1.0; + } + } + } + + } + } + group + { + name: "effect/model/list"; + parts + { + part + { + name: "icon"; + type: RECT; + mouse_events: 0; + scale: 1; + description + { + state: "default" 0.0; + max : UG_THUMBNAIL_W UG_THUMBNAIL_H; + fixed: 1 1; + align: 0.5 0.5; + aspect: 1.0 1.0; + rel1 + { + relative: 0.0 0.0; + } + rel2 + { + relative: 1.0 1.0; + } + visible: 0; + color: 0 0 0 255; + } + description + { + state: "min" 0.0; + inherit: "default" 0.0; + max: 0 0; + } + description + { + state: "level1" 0.0; + inherit: "default" 0.0; + rel1 + { + relative: 0.0 0.0; + } + rel2 + { + relative: 1.0 1.0; + } + } + } + + part + { + name: "swallow_thumb"; + type: SWALLOW; + mouse_events: 0; + + scale: 1; + description + { + state: "default" 0.0; + align: 0.5 0.5; + rel1 + { + to: "icon"; + } + rel2 + { + to: "icon"; + } + } + } + part + { + name: "myfile.memory_icon.sub"; + type: SWALLOW; + scale: 1; + description + { + state: "default" 0.0; + max : UG_MEMORY_SUB_THUMB_W UG_MEMORY_SUB_THUMB_H; + min : UG_MEMORY_SUB_THUMB_W UG_MEMORY_SUB_THUMB_H; + fixed: 1 1; + rel1 + { + relative:0.5 0.5; to:"icon"; + } + rel2 + { + relative:1.0 1.0;to:"icon"; + } + } + } + } + programs + { + program + { + name: "effect_gen"; + signal: "effect.gen"; + source: "thumb"; + action: STATE_SET "min" 0.0; + target: "icon"; + after: "thumb_gen_1"; + } + EFFECT_PROGRAMS("thumb_gen_1", "level1", "thumb_gen_2"); + program + { + name: "thumb_gen_2"; + action: STATE_SET "default" 0.0; + target: "icon"; + transition: SINUSOIDAL 0.1; + } + } + } + group + { + name: "goto_myfile"; + parts + { + part + { + name: "gotoButton"; + type: SWALLOW; + description + { + state: "default" 0.0; + fixed: 1 1; + max : UG_SOUND_BUTTON_W UG_SOUND_BUTTON_H; + min : UG_SOUND_BUTTON_W UG_SOUND_BUTTON_H; + align: 0.5 0.5; + rel1 + { + relative: 0.0 0.0; + } + rel2 + { + relative: 1.0 1.0; + } + } + } + } + } + + group + { + name:"upper_folder"; + parts + { + part + { + name: "upper"; + type: SWALLOW; + mouse_events: 1; + scale: 1; + description { + state: "default" 0.0; + min: UG_MAIN_W GENLIST_ITEM_H; + rel1 + { + relative: 0.0 0.0; + } + rel2 + { + relative: 1.0 1.0; + } + align: 0.5 0.5; + } + } + } + } + group + { + name: "pathinfo"; + parts { + part + { + name: "base"; + type: RECT; + repeat_events: 0; + scale: 1; + description { + state: "default" 0.0; + min: UG_MAIN_W PATH_INFO_H; + color: PATH_INFO_BG_COLOR; + } + } + part + { + name: "bg"; + type: RECT; + clip_to: "disclip"; + repeat_events: 0; + mouse_events: 0; + description { + state: "default" 0.0; + color: PATH_INFO_BG_COLOR; + } + } + MF_UG_PART_PADDING_TOP(0) + MF_UG_PART_PADDING_BOTTOM( 0 ) + MF_UG_PART_PADDING_LEFT( 10 ) + part + { + name: "bottom_line"; + type: RECT; + mouse_events: 0; + description { state: "default" 0.0; + min: 0 1; + fixed: 0 1; + visible: 1; + color: BOTTOM_LINE_COLOR; + rel1 + { + relative: 0.0 1.0; + offset: 0 -1; + } + } + } + part + { + name: "info"; + clip_to: "disclip"; + type: SWALLOW; + scale: 1; + description { state: "default" 0.0; + min: 0 PATH_INFO_LABEL_H; + max: 0 PATH_INFO_LABEL_H; + fixed: 0 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: "disclip"; + type: RECT; + description + { + state: "default" 0.0; + } + } + } + } + +} + -- 2.7.4