Initialize Tizen 2.3 tizen_2.3 2.3a_release submit/tizen_2.3/20140531.103021
authorSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:55:51 +0000 (12:55 +0900)
committerSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:55:51 +0000 (12:55 +0900)
209 files changed:
CMakeLists.txt [new file with mode: 0644]
LICENSE.Flora [new file with mode: 0644]
NOTICE [new file with mode: 0644]
data/CMakeLists.txt [new file with mode: 0644]
data/edc_common.h [new file with mode: 0644]
data/icon/00_icon_select_all_dim_web.png [new file with mode: 0644]
data/icon/00_icon_select_all_press_web.png [new file with mode: 0644]
data/icon/00_icon_select_all_web.png [new file with mode: 0644]
data/icon/Controlbar/U01_controlbar_cion_home.png [new file with mode: 0644]
data/icon/Controlbar/U01_controlbar_cion_home_press.png [new file with mode: 0644]
data/icon/Controlbar/U01_controlbar_cion_up_folder.png [new file with mode: 0644]
data/icon/Controlbar/U01_controlbar_cion_up_folder_press.png [new file with mode: 0644]
data/icon/U01_1st_icon_dropbox.png [new file with mode: 0644]
data/icon/U01_1st_icon_dropbox_press.png [new file with mode: 0644]
data/icon/U01_1st_icon_external_storage.png [new file with mode: 0644]
data/icon/U01_1st_icon_external_storage_press.png [new file with mode: 0644]
data/icon/U01_1st_icon_memory_card.png [new file with mode: 0644]
data/icon/U01_1st_icon_memory_card_press.png [new file with mode: 0644]
data/icon/U01_1st_icon_phone.png [new file with mode: 0644]
data/icon/U01_1st_icon_phone_press.png [new file with mode: 0644]
data/icon/myfile_icon_USB.png [new file with mode: 0644]
data/icon/myfile_icon_control_play.png [new file with mode: 0644]
data/icon/myfile_icon_entry_folder.png [new file with mode: 0644]
data/icon/myfile_icon_entry_folder_press.png [new file with mode: 0644]
data/icon/myfile_icon_etc.png [new file with mode: 0644]
data/icon/myfile_icon_excel.png [new file with mode: 0644]
data/icon/myfile_icon_folder.png [new file with mode: 0644]
data/icon/myfile_icon_folder_open.png [new file with mode: 0644]
data/icon/myfile_icon_html.png [new file with mode: 0644]
data/icon/myfile_icon_images.png [new file with mode: 0644]
data/icon/myfile_icon_java.png [new file with mode: 0644]
data/icon/myfile_icon_mmc.png [new file with mode: 0644]
data/icon/myfile_icon_mmc_sub.png [new file with mode: 0644]
data/icon/myfile_icon_music.png [new file with mode: 0644]
data/icon/myfile_icon_pdf.png [new file with mode: 0644]
data/icon/myfile_icon_phone.png [new file with mode: 0644]
data/icon/myfile_icon_ppt.png [new file with mode: 0644]
data/icon/myfile_icon_rss.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_default_corner.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_document.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_document_press.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_image.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_image_press.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_others.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_others_press.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_sound.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_sound_press.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_video.png [new file with mode: 0644]
data/icon/myfile_icon_shortcut_video_press.png [new file with mode: 0644]
data/icon/myfile_icon_svg.png [new file with mode: 0644]
data/icon/myfile_icon_swf.png [new file with mode: 0644]
data/icon/myfile_icon_text.png [new file with mode: 0644]
data/icon/myfile_icon_video.png [new file with mode: 0644]
data/icon/myfile_icon_video_play.png [new file with mode: 0644]
data/icon/myfile_icon_word.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_excel.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_folder.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_folder_open.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_html.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_music.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_pdf.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_ppt.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_rss.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_svg.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_swf.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_text.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_unkown.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_video.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_video_play.png [new file with mode: 0644]
data/icon/myfile_thumbnail_icon_word.png [new file with mode: 0644]
data/image/myfile_icon_shortcut_default_corner.png [new file with mode: 0644]
data/myfile.edc [new file with mode: 0644]
data/po/CMakeLists.txt [new file with mode: 0644]
data/po/POTFILES.in [new file with mode: 0644]
data/po/ar.po [new file with mode: 0644]
data/po/az.po [new file with mode: 0644]
data/po/bg.po [new file with mode: 0644]
data/po/ca.po [new file with mode: 0644]
data/po/cs.po [new file with mode: 0644]
data/po/da.po [new file with mode: 0644]
data/po/de_DE.po [new file with mode: 0644]
data/po/el_GR.po [new file with mode: 0644]
data/po/en.po [new file with mode: 0644]
data/po/en_PH.po [new file with mode: 0644]
data/po/en_US.po [new file with mode: 0644]
data/po/es_ES.po [new file with mode: 0644]
data/po/es_MX.po [new file with mode: 0644]
data/po/es_US.po [new file with mode: 0644]
data/po/et.po [new file with mode: 0644]
data/po/eu.po [new file with mode: 0644]
data/po/fi.po [new file with mode: 0644]
data/po/fr_CA.po [new file with mode: 0644]
data/po/fr_FR.po [new file with mode: 0644]
data/po/ga.po [new file with mode: 0644]
data/po/gl.po [new file with mode: 0644]
data/po/hi.po [new file with mode: 0644]
data/po/hr.po [new file with mode: 0644]
data/po/hu.po [new file with mode: 0644]
data/po/hy.po [new file with mode: 0644]
data/po/is.po [new file with mode: 0644]
data/po/it_IT.po [new file with mode: 0644]
data/po/ja_JP.po [new file with mode: 0644]
data/po/ka.po [new file with mode: 0644]
data/po/kk.po [new file with mode: 0644]
data/po/ko_KR.po [new file with mode: 0644]
data/po/lt.po [new file with mode: 0644]
data/po/lv.po [new file with mode: 0644]
data/po/mk.po [new file with mode: 0644]
data/po/nb.po [new file with mode: 0644]
data/po/nl_NL.po [new file with mode: 0644]
data/po/pl.po [new file with mode: 0644]
data/po/pt_BR.po [new file with mode: 0644]
data/po/pt_PT.po [new file with mode: 0644]
data/po/ro.po [new file with mode: 0644]
data/po/ru_RU.po [new file with mode: 0644]
data/po/sk.po [new file with mode: 0644]
data/po/sl.po [new file with mode: 0644]
data/po/sr.po [new file with mode: 0644]
data/po/sv.po [new file with mode: 0644]
data/po/tr_TR.po [new file with mode: 0644]
data/po/uk.po [new file with mode: 0644]
data/po/update-po.sh [new file with mode: 0644]
data/po/uz.po [new file with mode: 0644]
data/po/zh_CN.po [new file with mode: 0644]
data/po/zh_HK.po [new file with mode: 0644]
data/po/zh_SG.po [new file with mode: 0644]
data/po/zh_TW.po [new file with mode: 0644]
desktop/org.tizen.myfile.png [new file with mode: 0755]
desktop/org.tizen.myfile.xml [new file with mode: 0644]
org.tizen.myfile.manifest [new file with mode: 0644]
org.tizen.myfile.rule [new file with mode: 0755]
packaging/org.tizen.myfile.spec [new file with mode: 0755]
src/common/file-operation/mf-cancel.c [new file with mode: 0644]
src/common/file-operation/mf-copy-internal.c [new file with mode: 0644]
src/common/file-operation/mf-copy.c [new file with mode: 0644]
src/common/file-operation/mf-delete-internal.c [new file with mode: 0644]
src/common/file-operation/mf-delete.c [new file with mode: 0644]
src/common/file-operation/mf-fo-internal.c [new file with mode: 0644]
src/common/file-operation/mf-move-internal.c [new file with mode: 0644]
src/common/file-operation/mf-move.c [new file with mode: 0644]
src/common/file-operation/mf-request.c [new file with mode: 0644]
src/common/file-operation/mf-search-internal.c [new file with mode: 0644]
src/common/file-operation/mf-search.c [new file with mode: 0644]
src/common/file-system/mf-file-attr.c [new file with mode: 0644]
src/common/file-system/mf-fs-oper.c [new file with mode: 0644]
src/common/mf-callback.c [new file with mode: 0644]
src/common/mf-drm.c [new file with mode: 0644]
src/common/mf-fm-svc-wrapper.c [new file with mode: 0644]
src/common/mf-inotify-handle.c [new file with mode: 0644]
src/common/mf-language-mgr.c [new file with mode: 0644]
src/common/mf-launch.c [new file with mode: 0644]
src/common/mf-log.c [new file with mode: 0644]
src/common/mf-media-content.c [new file with mode: 0644]
src/common/mf-otg.c [new file with mode: 0644]
src/common/mf-s-beam.c [new file with mode: 0644]
src/common/mf-sensor.c [new file with mode: 0644]
src/common/mf-share.c [new file with mode: 0644]
src/common/mf-ta.c [new file with mode: 0644]
src/common/mf-util.c [new file with mode: 0644]
src/include/mf-callback.h [new file with mode: 0644]
src/include/mf-cancel.h [new file with mode: 0644]
src/include/mf-conf.h [new file with mode: 0644]
src/include/mf-copy-internal.h [new file with mode: 0644]
src/include/mf-copy.h [new file with mode: 0644]
src/include/mf-delete-internal.h [new file with mode: 0644]
src/include/mf-delete.h [new file with mode: 0644]
src/include/mf-dlog.h [new file with mode: 0644]
src/include/mf-drm.h [new file with mode: 0644]
src/include/mf-fm-svc-wrapper.h [new file with mode: 0644]
src/include/mf-fo-common.h [new file with mode: 0644]
src/include/mf-fo-debug.h [new file with mode: 0644]
src/include/mf-fo-internal.h [new file with mode: 0644]
src/include/mf-fs-util.h [new file with mode: 0644]
src/include/mf-gadget.h [new file with mode: 0644]
src/include/mf-gengrid.h [new file with mode: 0644]
src/include/mf-inotify-handle.h [new file with mode: 0644]
src/include/mf-language-mgr.h [new file with mode: 0644]
src/include/mf-launch.h [new file with mode: 0644]
src/include/mf-log.h [new file with mode: 0644]
src/include/mf-main.h [new file with mode: 0644]
src/include/mf-media-content.h [new file with mode: 0644]
src/include/mf-move-internal.h [new file with mode: 0644]
src/include/mf-move.h [new file with mode: 0644]
src/include/mf-otg.h [new file with mode: 0644]
src/include/mf-request.h [new file with mode: 0644]
src/include/mf-resource.h [new file with mode: 0644]
src/include/mf-s-beam.h [new file with mode: 0644]
src/include/mf-search-internal.h [new file with mode: 0644]
src/include/mf-search.h [new file with mode: 0644]
src/include/mf-sensor.h [new file with mode: 0644]
src/include/mf-share.h [new file with mode: 0644]
src/include/mf-split-view.h [new file with mode: 0644]
src/include/mf-ta.h [new file with mode: 0644]
src/include/mf-tray-item.h [new file with mode: 0644]
src/include/mf-util.h [new file with mode: 0644]
src/include/mf-widget.h [new file with mode: 0644]
src/mf-main.c [new file with mode: 0644]
src/widget/mf-content.c [new file with mode: 0644]
src/widget/mf-context-popup.c [new file with mode: 0644]
src/widget/mf-ctrl-bar.c [new file with mode: 0644]
src/widget/mf-gengrid.c [new file with mode: 0644]
src/widget/mf-genlist.c [new file with mode: 0644]
src/widget/mf-navi-bar.c [new file with mode: 0644]
src/widget/mf-popup.c [new file with mode: 0644]
src/widget/mf-search-bar.c [new file with mode: 0644]
src/widget/mf-split-view.c [new file with mode: 0644]
src/widget/mf-tab-bar.c [new file with mode: 0644]
src/widget/mf-tray-item.c [new file with mode: 0644]
src/widget/mf-widget.c [new file with mode: 0644]

diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..d1feb0c
--- /dev/null
@@ -0,0 +1,169 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(myfile C)
+
+SET(DEBFILE_NAME org.tizen.myfile)
+
+#SET(MFDUGNAME ug-myfile-detail-efl)
+# End for myfile ug
+
+SET(SRC-DIR ${CMAKE_CURRENT_SOURCE_DIR}/src)
+SET(UTILITY-DIR ${SRC-DIR}/common)
+SET(FS-DIR ${UTILITY-DIR}/file-system)
+SET(FO-DIR ${UTILITY-DIR}/file-operation)
+SET(WIDGET-DIR ${SRC-DIR}/widget)
+
+SET(MAININCLUDE ${SRC-DIR}/include)
+
+SET(PKG_NAME "${CMAKE_INSTALL_PKG_NAME}")
+SET(DESKTOP_DIR ${CMAKE_DESKTOP_DIR})
+
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+SET(LIBDIR "/usr/lib")
+SET(RESDIR "${PREFIX}/res")
+SET(DATADIR "${CMAKE_INSTALL_DATA_DIR}")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(ICONDIR "${RESDIR}/icons/default/small")
+SET(IMAGEDIR "${RESDIR}/images")
+SET(EDJDIR "${RESDIR}/edje")
+SET(XMLDIR "/usr/share/packages")
+#SET(ADD_SEARCH_MODULE 1) ##value is not meaningful one
+
+#MYFILE_ADD_TO_HOME
+
+INCLUDE_DIRECTORIES(${MAININCLUDE})
+
+SET(SRCS
+       ${SRC-DIR}/mf-main.c
+       ${UTILITY-DIR}/mf-callback.c
+       ${UTILITY-DIR}/mf-util.c
+       ${UTILITY-DIR}/mf-ta.c
+       ${UTILITY-DIR}/mf-fm-svc-wrapper.c
+       ${UTILITY-DIR}/mf-inotify-handle.c
+       ${UTILITY-DIR}/mf-launch.c
+       ${UTILITY-DIR}/mf-otg.c
+       ${UTILITY-DIR}/mf-log.c
+       ${UTILITY-DIR}/mf-language-mgr.c
+       ${UTILITY-DIR}/mf-s-beam.c
+       ${UTILITY-DIR}/mf-sensor.c
+       ${UTILITY-DIR}/mf-share.c
+       ${UTILITY-DIR}/mf-drm.c
+       ${UTILITY-DIR}/mf-media-content.c
+###########    File system related     ##########
+       ${FS-DIR}/mf-file-attr.c
+       ${FS-DIR}/mf-fs-oper.c
+
+###########    File operation related  ##########
+       ${FO-DIR}/mf-cancel.c
+       ${FO-DIR}/mf-copy.c
+       ${FO-DIR}/mf-copy-internal.c
+       ${FO-DIR}/mf-delete.c
+       ${FO-DIR}/mf-delete-internal.c
+       ${FO-DIR}/mf-fo-internal.c
+       ${FO-DIR}/mf-move.c
+       ${FO-DIR}/mf-move-internal.c
+       ${FO-DIR}/mf-request.c
+       ${FO-DIR}/mf-search.c
+       ${FO-DIR}/mf-search-internal.c
+
+###########    Widget related  ##########
+#      ${WIDGET-DIR}/mf-tab-bar.c
+       ${WIDGET-DIR}/mf-ctrl-bar.c
+       ${WIDGET-DIR}/mf-search-bar.c
+       ${WIDGET-DIR}/mf-navi-bar.c
+       ${WIDGET-DIR}/mf-genlist.c
+#      ${WIDGET-DIR}/mf-content.c
+       ${WIDGET-DIR}/mf-popup.c
+       ${WIDGET-DIR}/mf-split-view.c
+       ${WIDGET-DIR}/mf-widget.c
+       ${WIDGET-DIR}/mf-gengrid.c
+       ${WIDGET-DIR}/mf-context-popup.c
+       ${WIDGET-DIR}/mf-tray-item.c
+
+       )
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED
+capi-appfw-application
+capi-content-media-content
+elementary
+vconf
+glib-2.0
+gthread-2.0
+drm-client
+ui-gadget-1
+dlog
+ecore-imf
+ecore-x
+eina
+evas
+edje
+ecore
+ecore-file
+ecore-input
+icu-i18n
+icu-io
+icu-le
+icu-lx
+icu-uc
+capi-system-power
+capi-system-runtime-info
+capi-network-nfc
+capi-system-sensor
+syspopup-caller
+status
+)
+# org.tizen.live-myfile
+# debian
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+#SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} -finstrument-functions")
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC -D_BSD_SOURCE=1 -D_XOPEN_SOURCE=600 -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64")
+SET(CMAKE_C_FLAGS_DEBUG "-O0 -g -fpie")
+SET(CMAKE_C_FLAGS_RELEASE "-O2 -Wall -g -fpie")
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie")
+
+
+ADD_DEFINITIONS("-DPREFIX=\"${CMAKE_INSTALL_PREFIX}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"")
+ADD_DEFINITIONS("-DIMAGEDIR=\"${IMAGEDIR}\"")
+
+
+ADD_DEFINITIONS("-DFACTORYFS=\"$ENV{FACTORYFS}\"")
+ADD_DEFINITIONS("-DMYFILE_USE_LOG")
+ADD_DEFINITIONS("-DMYFILE_USE_TA")
+ADD_DEFINITIONS("-DMYFILE_USB_OTG")
+#ADD_DEFINITIONS("-DMYFILE_CRITICAL_LOG")
+#ADD_DEFINITIONS("-DMYFILE_SPLIT_VIEW")
+ADD_DEFINITIONS("-DMYFILE_MOTION_FEATURE")
+ADD_DEFINITIONS("-DMYFILE_TRAY_FEATURE")
+
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+#ADD_EXECUTABLE(FSTest ${LIB_SRCS})
+#ADD_LIBRARY(${PROJECT_NAME}_fs SHARED ${LIB_SRCS})
+#TARGET_LINK_LIBRARIES(FSTest ${pkgs_LDFLAGS})
+
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} -lm -lpthread)
+
+INSTALL(TARGETS ${PROJECT_NAME} ${LIBNAME}
+               RUNTIME DESTINATION ${BINDIR}
+               LIBRARY DESTINATION ${LIBDIR})
+#INSTALL(FILES ${CMAKE_SOURCE_DIR}/tools/dumpfiles.sh DESTINATION bin)
+#INSTALL(FILES ${MAININCLUDE}/myfile_filesystem_util.h DESTINATION /usr/include)
+INSTALL(DIRECTORY DESTINATION ${DATADIR})
+
+#CONFIGURE_FILE(desktop/${PKG_NAME}.desktop.in desktop/${PKG_NAME}.desktop)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/desktop/${PKG_NAME}.xml DESTINATION ${XMLDIR})
+
+INSTALL(FILES desktop/${PKG_NAME}.png DESTINATION ${CMAKE_DESKTOP_ICON_DIR})
+INSTALL(FILES ${CMAKE_SOURCE_DIR}/org.tizen.myfile.rule DESTINATION  /opt/etc/smack/accesses.d)
+
+ADD_SUBDIRECTORY(data)
+
+#End for myfile ug
diff --git a/LICENSE.Flora b/LICENSE.Flora
new file mode 100644 (file)
index 0000000..dd1765b
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.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 Tizen Compliance Specification
+and passes the Tizen Compliance Tests 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.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/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 100644 (file)
index 0000000..b6ec43b
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,4 @@
+Copyright (c) Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Flora License, Version 1.1
+Please, see the LICENSE.Flora file for Flora License, Version 1.1 terms and conditions.
+
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f582af6
--- /dev/null
@@ -0,0 +1,24 @@
+
+ADD_CUSTOM_TARGET(myfile.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/image
+               ${CMAKE_SOURCE_DIR}/data/myfile.edc ${CMAKE_BINARY_DIR}/data/myfile.edj
+               DEPENDS ${CMAKE_SOURCE_DIR}/data/myfile.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} myfile.edj)
+
+INSTALL(FILES ${CMAKE_BINARY_DIR}/data/myfile.edj DESTINATION ${EDJDIR})
+
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data/icon/ 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)
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/data/icon/ 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)
+
+
+# install desktop file & icon
+
+
+# i18n
+ADD_SUBDIRECTORY(po)
+
diff --git a/data/edc_common.h b/data/edc_common.h
new file mode 100644 (file)
index 0000000..d936240
--- /dev/null
@@ -0,0 +1,122 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#define SHORTCUT_W 720
+#define SHORTCUT_H 96
+#define SHORTCUT_ADD 130
+#define SHORTCUT_IMG_ORI 64
+#define SHORTCUT_IMG_ORI_Y 12 
+#define SHORTCUT_BLINE 164
+#define SHORTCUT_WLINE 165
+#define SHORTCUT_Y 23
+
+
+#define BASIC_W                                480
+#define BASIC_H                                800
+
+#define MAIN_W                                 720
+#define MAIN_H                                 1280
+
+#define MF_SCALE_W                     (MAIN_W/BASIC_W)
+#define MF_SCALE_H                     (MAIN_H/BASIC_H)
+
+#define FONT_NANE                      "Tizen:style=Medium"
+#define FONT_LIST_ITEM                 "Tizen:style=Roman"
+
+#define FONT_SIZE                      22
+#define FONT_COLOR                     255 255 255 255
+
+#define MAIN_FONT_STYLE                        "Tizen"
+#define MAIN_FONT_SIZE         32
+#define MAIN_FONT_COLOR        255 255 255 255
+
+#define SUB_FONT                       "Tizen"
+#define SUB_FONT_SIZE          18
+#define SUB_FONT_COLOR         149 149 149
+
+
+#define DIR_CLASS_NAME         "myfile_dir"
+#define DIR_SIZE                               42
+
+
+#define THUMBNAIL_W                    50*MF_SCALE_W
+#define THUMBNAIL_H                    50*MF_SCALE_H
+
+#define MEMORY_SUB_THUMB_W             40*MF_SCALE_W
+#define MEMORY_SUB_THUMB_H             25*MF_SCALE_H
+
+
+#define GENLIST_ITEM_H         71*MF_SCALE_H
+#define PATH_INFO_H            48
+#define PATH_INFO_LABEL_H              25
+#define PATH_INFO_BG_COLOR             68 68 68 255
+
+#define BOTTOM_LINE_COLOR              199 199 199 255
+
+#define BTN_W                          60
+#define BTN_H                          61
+#define INDICATOR_H                    46
+#define SOFTKEY_H                      96
+#define BUTTON_W                       80
+#define CHECK_R                                50
+#define SUB_W                          104
+#define SUB_H                          32
+
+#define SEARCHBAR_BACKGROUND_COLOR_DEFAULT     36 36 36 255
+
+
+#define EDITFIELD_CANCEL_BUTTON_WITH_PADDING_W_INC 150
+#define EDITFIELD_TOP_PADDING_INC 18
+#define EDITFIELD_BOTTOM_PADDING_INC 18
+#define EDITFIELD_HEIGHT_INC 74
+#define EDITFIELD_LEFT_PADDING_INC 30
+#define EDITFIELD_RIGHT_PADDING_INC 5
+
+#define SEARCHBAR_HEIGHT_INC 74
+#define SEARCHBAR_INPUTFIELD_BORDER_INC 6 6 6 6
+#define SEARCHBAR_LEFT_ICON_PADDING_INC 16
+#define SEARCHBAR_ICON_MIN_W_INC 42
+#define SEARCHBAR_ICON_MIN_H_INC 42
+#define SEARCHBAR_LEFT_PADDING_SEARCHFIELD_INC 16
+#define SEARCHBAR_RIGHT_PADDING_SEARCHFIELD_INC 8
+#define SEARCHBAR_SEARCH_TEXTFIELD_H_INC 60
+#define SEARCHBAR_H_INC 107
+#define EDITFIELD_SEARCHBAR_TOP1_SINGLE_INC 6
+#define EDITFIELD_SEARCHBAR_TOP1_MULTI_INC 10
+#define EDITFIELD_SEARCHBAR_TOP2_INC 10
+#define EDITFIELD_SEARCHBAR_LEFT1_INC 0
+#define EDITFIELD_SEARCHBAR_LEFT2_INC 0
+#define EDITFIELD_SEARCHBAR_LEFT3_INC 1
+#define EDITFIELD_SEARCHBAR_RIGHT1_ERASER_SHOW_INC 56
+#define EDITFIELD_SEARCHBAR_RIGHT2_INC 5
+#define EDITFIELD_SEARCHBAR_BOTTOM1_SINGLE_INC 8
+#define EDITFIELD_SEARCHBAR_BOTTOM1_MULTI_INC 2
+#define EDITFIELD_SEARCHBAR_BOTTOM2_SINGLE_INC 16
+#define EDITFIELD_SEARCHBAR_BOTTOM2_MULTI_INC 2
+#define EDITFIELD_SEARCHBAR_BOTTOM3_SINGLE_INC 50
+#define EDITFIELD_SEARCHBAR_BOTTOM3_MULTI_INC 50
+
+
+#define MF_SEARCH_FOLDER_H                     300*MF_SCALE_H
+#define MF_SEARCH_FOLDER_W                     400*MF_SCALE_H
+#define DEFAULT_COLOR                  248 246 239 255
+
+/********* group index ************/
+#define GENLIST_GROUPINDEX_LIST_PRESS_COLOR              132 162 198 255
+#define GENLIST_GROUPINDEX_LIST_COLOR                    59 115 182 255
+#define GENLIST_GROUPINDEX_LIST_FOCUS_COLOR              255 255 255 255
+#define GENLIST_GROUPINDEX_LINE_COLOR                  59 115 182 255
+#define GENLIST_GROUPINDEX_LINE_FOCUS_COLOR            255 255 255 255
+
diff --git a/data/icon/00_icon_select_all_dim_web.png b/data/icon/00_icon_select_all_dim_web.png
new file mode 100644 (file)
index 0000000..46518d7
Binary files /dev/null and b/data/icon/00_icon_select_all_dim_web.png differ
diff --git a/data/icon/00_icon_select_all_press_web.png b/data/icon/00_icon_select_all_press_web.png
new file mode 100644 (file)
index 0000000..7ea5e20
Binary files /dev/null and b/data/icon/00_icon_select_all_press_web.png differ
diff --git a/data/icon/00_icon_select_all_web.png b/data/icon/00_icon_select_all_web.png
new file mode 100644 (file)
index 0000000..9c6c3db
Binary files /dev/null and b/data/icon/00_icon_select_all_web.png differ
diff --git a/data/icon/Controlbar/U01_controlbar_cion_home.png b/data/icon/Controlbar/U01_controlbar_cion_home.png
new file mode 100644 (file)
index 0000000..4f5fc58
Binary files /dev/null and b/data/icon/Controlbar/U01_controlbar_cion_home.png differ
diff --git a/data/icon/Controlbar/U01_controlbar_cion_home_press.png b/data/icon/Controlbar/U01_controlbar_cion_home_press.png
new file mode 100644 (file)
index 0000000..cc70621
Binary files /dev/null and b/data/icon/Controlbar/U01_controlbar_cion_home_press.png differ
diff --git a/data/icon/Controlbar/U01_controlbar_cion_up_folder.png b/data/icon/Controlbar/U01_controlbar_cion_up_folder.png
new file mode 100644 (file)
index 0000000..4648c37
Binary files /dev/null and b/data/icon/Controlbar/U01_controlbar_cion_up_folder.png differ
diff --git a/data/icon/Controlbar/U01_controlbar_cion_up_folder_press.png b/data/icon/Controlbar/U01_controlbar_cion_up_folder_press.png
new file mode 100644 (file)
index 0000000..2e84425
Binary files /dev/null and b/data/icon/Controlbar/U01_controlbar_cion_up_folder_press.png differ
diff --git a/data/icon/U01_1st_icon_dropbox.png b/data/icon/U01_1st_icon_dropbox.png
new file mode 100644 (file)
index 0000000..3677169
Binary files /dev/null and b/data/icon/U01_1st_icon_dropbox.png differ
diff --git a/data/icon/U01_1st_icon_dropbox_press.png b/data/icon/U01_1st_icon_dropbox_press.png
new file mode 100644 (file)
index 0000000..0f3c734
Binary files /dev/null and b/data/icon/U01_1st_icon_dropbox_press.png differ
diff --git a/data/icon/U01_1st_icon_external_storage.png b/data/icon/U01_1st_icon_external_storage.png
new file mode 100644 (file)
index 0000000..30f94a3
Binary files /dev/null and b/data/icon/U01_1st_icon_external_storage.png differ
diff --git a/data/icon/U01_1st_icon_external_storage_press.png b/data/icon/U01_1st_icon_external_storage_press.png
new file mode 100644 (file)
index 0000000..d41e1bb
Binary files /dev/null and b/data/icon/U01_1st_icon_external_storage_press.png differ
diff --git a/data/icon/U01_1st_icon_memory_card.png b/data/icon/U01_1st_icon_memory_card.png
new file mode 100644 (file)
index 0000000..277e976
Binary files /dev/null and b/data/icon/U01_1st_icon_memory_card.png differ
diff --git a/data/icon/U01_1st_icon_memory_card_press.png b/data/icon/U01_1st_icon_memory_card_press.png
new file mode 100644 (file)
index 0000000..00a0644
Binary files /dev/null and b/data/icon/U01_1st_icon_memory_card_press.png differ
diff --git a/data/icon/U01_1st_icon_phone.png b/data/icon/U01_1st_icon_phone.png
new file mode 100644 (file)
index 0000000..647b42b
Binary files /dev/null and b/data/icon/U01_1st_icon_phone.png differ
diff --git a/data/icon/U01_1st_icon_phone_press.png b/data/icon/U01_1st_icon_phone_press.png
new file mode 100644 (file)
index 0000000..bbe69cb
Binary files /dev/null and b/data/icon/U01_1st_icon_phone_press.png differ
diff --git a/data/icon/myfile_icon_USB.png b/data/icon/myfile_icon_USB.png
new file mode 100644 (file)
index 0000000..bf4dc00
Binary files /dev/null and b/data/icon/myfile_icon_USB.png differ
diff --git a/data/icon/myfile_icon_control_play.png b/data/icon/myfile_icon_control_play.png
new file mode 100644 (file)
index 0000000..e5d7928
Binary files /dev/null and b/data/icon/myfile_icon_control_play.png differ
diff --git a/data/icon/myfile_icon_entry_folder.png b/data/icon/myfile_icon_entry_folder.png
new file mode 100644 (file)
index 0000000..2df2d17
Binary files /dev/null and b/data/icon/myfile_icon_entry_folder.png differ
diff --git a/data/icon/myfile_icon_entry_folder_press.png b/data/icon/myfile_icon_entry_folder_press.png
new file mode 100644 (file)
index 0000000..f9e50d3
Binary files /dev/null and b/data/icon/myfile_icon_entry_folder_press.png differ
diff --git a/data/icon/myfile_icon_etc.png b/data/icon/myfile_icon_etc.png
new file mode 100644 (file)
index 0000000..0cc767d
Binary files /dev/null and b/data/icon/myfile_icon_etc.png differ
diff --git a/data/icon/myfile_icon_excel.png b/data/icon/myfile_icon_excel.png
new file mode 100644 (file)
index 0000000..109b7de
Binary files /dev/null and b/data/icon/myfile_icon_excel.png differ
diff --git a/data/icon/myfile_icon_folder.png b/data/icon/myfile_icon_folder.png
new file mode 100644 (file)
index 0000000..d53be43
Binary files /dev/null and b/data/icon/myfile_icon_folder.png differ
diff --git a/data/icon/myfile_icon_folder_open.png b/data/icon/myfile_icon_folder_open.png
new file mode 100644 (file)
index 0000000..85e0f19
Binary files /dev/null and b/data/icon/myfile_icon_folder_open.png differ
diff --git a/data/icon/myfile_icon_html.png b/data/icon/myfile_icon_html.png
new file mode 100644 (file)
index 0000000..78646b4
Binary files /dev/null and b/data/icon/myfile_icon_html.png differ
diff --git a/data/icon/myfile_icon_images.png b/data/icon/myfile_icon_images.png
new file mode 100644 (file)
index 0000000..4dd3be3
Binary files /dev/null and b/data/icon/myfile_icon_images.png differ
diff --git a/data/icon/myfile_icon_java.png b/data/icon/myfile_icon_java.png
new file mode 100644 (file)
index 0000000..a083ee6
Binary files /dev/null and b/data/icon/myfile_icon_java.png differ
diff --git a/data/icon/myfile_icon_mmc.png b/data/icon/myfile_icon_mmc.png
new file mode 100644 (file)
index 0000000..f486674
Binary files /dev/null and b/data/icon/myfile_icon_mmc.png differ
diff --git a/data/icon/myfile_icon_mmc_sub.png b/data/icon/myfile_icon_mmc_sub.png
new file mode 100644 (file)
index 0000000..faced52
Binary files /dev/null and b/data/icon/myfile_icon_mmc_sub.png differ
diff --git a/data/icon/myfile_icon_music.png b/data/icon/myfile_icon_music.png
new file mode 100644 (file)
index 0000000..9909d9c
Binary files /dev/null and b/data/icon/myfile_icon_music.png differ
diff --git a/data/icon/myfile_icon_pdf.png b/data/icon/myfile_icon_pdf.png
new file mode 100644 (file)
index 0000000..2480d81
Binary files /dev/null and b/data/icon/myfile_icon_pdf.png differ
diff --git a/data/icon/myfile_icon_phone.png b/data/icon/myfile_icon_phone.png
new file mode 100644 (file)
index 0000000..1c92369
Binary files /dev/null and b/data/icon/myfile_icon_phone.png differ
diff --git a/data/icon/myfile_icon_ppt.png b/data/icon/myfile_icon_ppt.png
new file mode 100644 (file)
index 0000000..42c1100
Binary files /dev/null and b/data/icon/myfile_icon_ppt.png differ
diff --git a/data/icon/myfile_icon_rss.png b/data/icon/myfile_icon_rss.png
new file mode 100644 (file)
index 0000000..1b566e2
Binary files /dev/null and b/data/icon/myfile_icon_rss.png differ
diff --git a/data/icon/myfile_icon_shortcut_default_corner.png b/data/icon/myfile_icon_shortcut_default_corner.png
new file mode 100644 (file)
index 0000000..9e1a8e3
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_default_corner.png differ
diff --git a/data/icon/myfile_icon_shortcut_document.png b/data/icon/myfile_icon_shortcut_document.png
new file mode 100644 (file)
index 0000000..fe02aa0
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_document.png differ
diff --git a/data/icon/myfile_icon_shortcut_document_press.png b/data/icon/myfile_icon_shortcut_document_press.png
new file mode 100644 (file)
index 0000000..5125c91
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_document_press.png differ
diff --git a/data/icon/myfile_icon_shortcut_image.png b/data/icon/myfile_icon_shortcut_image.png
new file mode 100644 (file)
index 0000000..f827415
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_image.png differ
diff --git a/data/icon/myfile_icon_shortcut_image_press.png b/data/icon/myfile_icon_shortcut_image_press.png
new file mode 100644 (file)
index 0000000..1417787
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_image_press.png differ
diff --git a/data/icon/myfile_icon_shortcut_others.png b/data/icon/myfile_icon_shortcut_others.png
new file mode 100644 (file)
index 0000000..2fb934a
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_others.png differ
diff --git a/data/icon/myfile_icon_shortcut_others_press.png b/data/icon/myfile_icon_shortcut_others_press.png
new file mode 100644 (file)
index 0000000..a4c7c19
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_others_press.png differ
diff --git a/data/icon/myfile_icon_shortcut_sound.png b/data/icon/myfile_icon_shortcut_sound.png
new file mode 100644 (file)
index 0000000..019a2fb
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_sound.png differ
diff --git a/data/icon/myfile_icon_shortcut_sound_press.png b/data/icon/myfile_icon_shortcut_sound_press.png
new file mode 100644 (file)
index 0000000..2125ea9
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_sound_press.png differ
diff --git a/data/icon/myfile_icon_shortcut_video.png b/data/icon/myfile_icon_shortcut_video.png
new file mode 100644 (file)
index 0000000..b135ba8
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_video.png differ
diff --git a/data/icon/myfile_icon_shortcut_video_press.png b/data/icon/myfile_icon_shortcut_video_press.png
new file mode 100644 (file)
index 0000000..27a22c5
Binary files /dev/null and b/data/icon/myfile_icon_shortcut_video_press.png differ
diff --git a/data/icon/myfile_icon_svg.png b/data/icon/myfile_icon_svg.png
new file mode 100644 (file)
index 0000000..64a841c
Binary files /dev/null and b/data/icon/myfile_icon_svg.png differ
diff --git a/data/icon/myfile_icon_swf.png b/data/icon/myfile_icon_swf.png
new file mode 100644 (file)
index 0000000..ee50e85
Binary files /dev/null and b/data/icon/myfile_icon_swf.png differ
diff --git a/data/icon/myfile_icon_text.png b/data/icon/myfile_icon_text.png
new file mode 100644 (file)
index 0000000..c937ef8
Binary files /dev/null and b/data/icon/myfile_icon_text.png differ
diff --git a/data/icon/myfile_icon_video.png b/data/icon/myfile_icon_video.png
new file mode 100644 (file)
index 0000000..a8e832a
Binary files /dev/null and b/data/icon/myfile_icon_video.png differ
diff --git a/data/icon/myfile_icon_video_play.png b/data/icon/myfile_icon_video_play.png
new file mode 100644 (file)
index 0000000..bbde433
Binary files /dev/null and b/data/icon/myfile_icon_video_play.png differ
diff --git a/data/icon/myfile_icon_word.png b/data/icon/myfile_icon_word.png
new file mode 100644 (file)
index 0000000..b399bad
Binary files /dev/null and b/data/icon/myfile_icon_word.png differ
diff --git a/data/icon/myfile_thumbnail_icon_excel.png b/data/icon/myfile_thumbnail_icon_excel.png
new file mode 100644 (file)
index 0000000..c5ff6e6
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_excel.png differ
diff --git a/data/icon/myfile_thumbnail_icon_folder.png b/data/icon/myfile_thumbnail_icon_folder.png
new file mode 100644 (file)
index 0000000..c4b91e1
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_folder.png differ
diff --git a/data/icon/myfile_thumbnail_icon_folder_open.png b/data/icon/myfile_thumbnail_icon_folder_open.png
new file mode 100644 (file)
index 0000000..d928ea2
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_folder_open.png differ
diff --git a/data/icon/myfile_thumbnail_icon_html.png b/data/icon/myfile_thumbnail_icon_html.png
new file mode 100644 (file)
index 0000000..2e99180
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_html.png differ
diff --git a/data/icon/myfile_thumbnail_icon_music.png b/data/icon/myfile_thumbnail_icon_music.png
new file mode 100644 (file)
index 0000000..54c18e7
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_music.png differ
diff --git a/data/icon/myfile_thumbnail_icon_pdf.png b/data/icon/myfile_thumbnail_icon_pdf.png
new file mode 100644 (file)
index 0000000..30ea8e9
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_pdf.png differ
diff --git a/data/icon/myfile_thumbnail_icon_ppt.png b/data/icon/myfile_thumbnail_icon_ppt.png
new file mode 100644 (file)
index 0000000..bb97df2
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_ppt.png differ
diff --git a/data/icon/myfile_thumbnail_icon_rss.png b/data/icon/myfile_thumbnail_icon_rss.png
new file mode 100644 (file)
index 0000000..8fc1384
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_rss.png differ
diff --git a/data/icon/myfile_thumbnail_icon_svg.png b/data/icon/myfile_thumbnail_icon_svg.png
new file mode 100644 (file)
index 0000000..92b89e0
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_svg.png differ
diff --git a/data/icon/myfile_thumbnail_icon_swf.png b/data/icon/myfile_thumbnail_icon_swf.png
new file mode 100644 (file)
index 0000000..8d1278d
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_swf.png differ
diff --git a/data/icon/myfile_thumbnail_icon_text.png b/data/icon/myfile_thumbnail_icon_text.png
new file mode 100644 (file)
index 0000000..39cdc23
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_text.png differ
diff --git a/data/icon/myfile_thumbnail_icon_unkown.png b/data/icon/myfile_thumbnail_icon_unkown.png
new file mode 100644 (file)
index 0000000..37a22ec
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_unkown.png differ
diff --git a/data/icon/myfile_thumbnail_icon_video.png b/data/icon/myfile_thumbnail_icon_video.png
new file mode 100644 (file)
index 0000000..b4c1c66
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_video.png differ
diff --git a/data/icon/myfile_thumbnail_icon_video_play.png b/data/icon/myfile_thumbnail_icon_video_play.png
new file mode 100644 (file)
index 0000000..4fe90b2
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_video_play.png differ
diff --git a/data/icon/myfile_thumbnail_icon_word.png b/data/icon/myfile_thumbnail_icon_word.png
new file mode 100644 (file)
index 0000000..ef5b578
Binary files /dev/null and b/data/icon/myfile_thumbnail_icon_word.png differ
diff --git a/data/image/myfile_icon_shortcut_default_corner.png b/data/image/myfile_icon_shortcut_default_corner.png
new file mode 100644 (file)
index 0000000..9e1a8e3
Binary files /dev/null and b/data/image/myfile_icon_shortcut_default_corner.png differ
diff --git a/data/myfile.edc b/data/myfile.edc
new file mode 100644 (file)
index 0000000..ac5adfa
--- /dev/null
@@ -0,0 +1,1825 @@
+#include "./edc_common.h"
+
+#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; \
+         }
+
+#define EFFECT_PROGRAMS_MINIMAL(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; \
+         }
+#define BEAT_POPUP_PART_BASE( param_item_width ,param_item_height ) \
+                        part { name: "base"; \
+                               type: RECT; \
+                               repeat_events: 1; \
+                               scale: 1; \
+                               description { state: "default" 0.0; \
+                                  min: param_item_width  param_item_height; \
+                                  color: 246 245 237 255; \
+                               } \
+                        }
+#define BEAT_POPUP_PART_DISCLIP \
+                       part { name: "disclip"; \
+                               type: RECT; \
+                               scale: 1;\
+                               description { state: "default" 0.0; \
+                                  rel1.to: "bg"; \
+                                  rel2.to: "bg"; \
+                               } \
+                               description { state: "disabled" 0.0; \
+                                  inherit: "default" 0.0; \
+                                  color: 255 255 255 64; \
+                               } \
+                        }
+#define BEAT_POPUP_PART_BG \
+         part { name: "bg"; \
+            type: RECT; \
+            clip_to: "disclip"; \
+            mouse_events: 0; \
+       scale: 1;\
+            description { state: "default" 0.0; \
+               color: 246 245 237 255; \
+            } \
+            description { state: "hide" 0.0; \
+               inherit: "default" 0.0; \
+               rel1 { relative: -0.025 0.0; } \
+               rel2 { relative: 0.975 1.0; } \
+            } \
+            description { state: "hide" 0.1;  \
+               inherit: "default" 0.0; \
+               rel1 { relative: -0.13 0.0; } \
+               rel2 { relative: 0.87 1.0; } \
+            } \
+            description { state: "hide" 0.2; \
+               inherit: "default" 0.0; \
+               rel1 { relative: -0.5 0.0; } \
+               rel2 { relative: 0.5 1.0; } \
+            } \
+            description { state: "hide" 0.3; \
+               inherit: "default" 0.0; \
+               rel1 { relative: -1.0 0.0; } \
+               rel2 { relative: 0.0 1.0; } \
+            } \
+         }
+
+#define MF_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_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_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; \
+            } \
+         }
+
+
+
+images {
+
+       image, "myfile_icon_shortcut_default_corner.png" COMP;
+
+}
+
+collections {
+
+       /** fore genlist normal_item feature icon**/
+
+
+               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;}
+
+                                       }
+                               }
+
+                       }
+               }
+       /* for genlist  multi_item style*/
+       group
+       {
+               name:"thumbnail_only";
+               min: 50 50;
+               max: 50 50;
+               parts
+               {
+                       part
+                       {
+                               name:"thumbnail";
+                               type:SWALLOW;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+                       part
+                       {
+                               name:"video_play";
+                               type:SWALLOW;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                                       rel1 { to:"thumbnail"; }
+                                       rel2 { to:"thumbnail"; }
+                               }
+                       }
+                       part
+                       {
+                               name: "myfile.memory_icon_multi.sub";
+                               type: SWALLOW;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       max : 20 25;
+                                       min : 20 25;
+                                       rel1 { relative:0.5 0.5; to:"thumbnail";}
+                                       rel2 { relative:1.0 1.0; to:"thumbnail";}
+                               }
+                       }
+               }
+       }
+
+
+
+       /************** 5 myfiles shortcut images ****************/
+       group {
+               name, "myfile_shortcut_5_images";
+
+               parts {
+                       part
+                       {
+                               name:"bg";
+                               type:IMAGE;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                                       min:680 96;
+                                       max:680 96;
+                                       fixed:1 1;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                                       image {
+                                               normal, "myfile_icon_shortcut_default_corner.png";
+                                               border, 47 47 0 0;
+                                       }
+                               }
+                       }
+                       
+                       part {
+                                       name, "mf_shortcut_image";
+                                       type, SWALLOW;
+                                       scale: 1;
+                                       mouse_events, 1;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, SHORTCUT_IMG_ORI/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, SHORTCUT_IMG_ORI/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                    
+                                               }                                       
+                                       }
+                                       description 
+                                       {
+                                               state, "clicked" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, SHORTCUT_IMG_ORI/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, SHORTCUT_IMG_ORI/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                    
+                                               }
+                                       }       
+                       }
+
+                       part {
+                                       name, "mf_shortcut_video";
+                                       type, SWALLOW;
+                                       scale: 1;
+                                       mouse_events, 1;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_IMG_ORI+SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_IMG_ORI+SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                     
+                                               }
+                                       }
+                                       description 
+                                       {
+                                               state, "clicked" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_IMG_ORI+SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_IMG_ORI+SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                     
+                                               }
+                                       }       
+                       }
+
+                       part {
+                                       name, "mf_shortcut_sound";
+                                       type, SWALLOW;
+                                       scale: 1;
+                                       mouse_events, 1;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_IMG_ORI+2*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_IMG_ORI+2*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                   
+                                               }
+
+                                       }
+                                       description 
+                                       {
+                                               state, "clicked" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0.5 0.5;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_IMG_ORI+2*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_IMG_ORI+2*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                   
+                                               }
+
+                                       }       
+                       }
+
+                       part {
+                                       name, "mf_shortcut_document";
+                                       type, SWALLOW;
+                                       scale: 1;
+                                       mouse_events, 1;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_IMG_ORI+3*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_IMG_ORI+3*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                   
+                                               }
+
+                                       }
+                                       description 
+                                       {
+                                               state, "clicked" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0.5 0.5;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_IMG_ORI+3*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_IMG_ORI+3*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                   
+                                               }
+
+                                       }       
+                       }
+
+                       part {
+                                       name, "mf_shortcut_others";
+                                       type, SWALLOW;
+                                       scale: 1;
+                                       mouse_events, 1;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_IMG_ORI+4*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_IMG_ORI+4*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                   
+                                               }
+
+                                       }
+                                       description 
+                                       {
+                                               state, "clicked" 0.0;
+                                               min, 72 72;
+                                               max, 72 72;
+                                               fixed:1 1;
+                                               align, 0.5 0.5;
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_IMG_ORI+4*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_IMG_ORI+4*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_IMG_ORI_Y/SHORTCUT_H;                                                   
+                                               }
+
+                                       }       
+                       }
+
+
+                       part {
+                                       name, "mf_shortcut_1st_vLine";
+                                       type, RECT;
+                                       scale: 1;
+                                       mouse_events, 0;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 1 50;
+                                               max, 1 50;
+                                               fixed:1 1;
+                                               color, 185 184 174 255;                                         
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, SHORTCUT_BLINE/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, SHORTCUT_BLINE/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;                                                      
+                                               }
+                                       }
+                        }
+                        part {
+                                       name, "mf_shortcut_3st_vLine";
+                                       type, RECT;
+                                       scale: 1;
+                                       mouse_events, 0;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 1 50;
+                                               max, 1 50;
+                                               fixed:1 1;
+                                               color, 185 184 174 255;                                         
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_BLINE+SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_BLINE+SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;                                                       
+                                               }
+                                       }
+                       }
+                       part {
+                                       name, "mf_shortcut_5st_vLine";
+                                       type, RECT;
+                                       scale: 1;
+                                       mouse_events, 0;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 1 50;
+                                               max, 1 50;
+                                               fixed:1 1;
+                                               color, 185 184 174 255;                                         
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_BLINE+2*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_BLINE+2*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;                                                     
+                                               }
+                                       }
+                       }
+                       part {
+                                       name, "mf_shortcut_7st_vLine";
+                                       type, RECT;
+                                       scale: 1;
+                                       mouse_events, 0;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 1 50;
+                                               max, 1 50;
+                                               fixed:1 1;
+                                               color, 185 184 174 255;                                         
+                                               align, 0 0;
+                                               rel1 {
+                                                       relative, (SHORTCUT_BLINE+3*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_BLINE+3*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;                                                     
+                                               }
+                                       }
+                       }
+                       part {
+                                       name, "mf_shortcut_2st_vLine";
+                                       type, RECT;
+                                       scale: 1;
+                                       mouse_events, 0;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 1 50;
+                                               max, 1 50;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               color, 255 255 255 255;
+                                               
+                                               rel1 {
+                                                       relative, SHORTCUT_WLINE/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, SHORTCUT_WLINE/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;                                                      
+                                               }
+                                       }
+                       }
+                       part {
+                                       name, "mf_shortcut_4st_vLine";
+                                       type, RECT;
+                                       scale: 1;
+                                       mouse_events, 0;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 1 50;
+                                               max, 1 50;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               color, 255 255 255 255;
+                                               
+                                               rel1 {
+                                                       relative, (SHORTCUT_WLINE+SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_WLINE+SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;                                                       
+                                               }
+                                       }
+                       }
+                       part {
+                                       name, "mf_shortcut_6st_vLine";
+                                       type, RECT;
+                                       scale: 1;
+                                       mouse_events, 0;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 1 50;
+                                               max, 1 50;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               color, 255 255 255 255;
+                                               
+                                               rel1 {
+                                                       relative, (SHORTCUT_WLINE+2*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_WLINE+2*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;                                                     
+                                               }
+                                       }
+                       }
+                       part {
+                                       name, "mf_shortcut_8st_vLine";
+                                       type, RECT;
+                                       scale: 1;
+                                       mouse_events, 0;
+                                       description 
+                                       {
+                                               state, "default" 0.0;
+                                               min, 1 50;
+                                               max, 1 50;
+                                               fixed:1 1;
+                                               align, 0 0;
+                                               color, 255 255 255 255;
+                                               
+                                               rel1 {
+                                                       relative, (SHORTCUT_WLINE+3*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;
+                                               }
+
+                                               rel2 {
+                                                       relative, (SHORTCUT_WLINE+3*SHORTCUT_ADD)/SHORTCUT_W SHORTCUT_Y/SHORTCUT_H;                                                     
+                                               }
+                                       }
+                       }                       
+               }
+
+               programs {
+             program {
+                               name, "button_click";
+                               signal, "mouse,clicked,1";
+                               source, "*";
+                               action, STATE_SET "clicked" 0.0;
+                               target, "mf_shortcut_document";
+             }
+          }
+}
+
+       
+
+       /************** progressbar popup****************/
+       group { name: "popup_center_progressview";
+          parts{
+                 part { name: "elm.title";
+                        type: TEXT;
+                        scale : 1;
+                        description { state: "default" 0.0;
+                               max: 200 70;
+                               text {
+                                  font: FONT_NANE;
+                                  text_class:"tizen";
+                                  size: 42;
+                                  min: 0 0;
+                                  align: 0.5 0.5;
+                                 }
+                               color: 108 108 108 255;
+                               align: 0.5 0.0;
+                               rel1 {
+                                  relative: 0.0 0.15;
+                                  //to: "elm.swallow.content";
+                               }
+                               rel2 {
+                                  relative: 1.0 0.0;
+                                  //to: "elm.swallow.content";
+                               }
+                        }
+                 }
+                 part{ name:"elm.swallow.content";
+                        type: SWALLOW;
+                        scale : 1;
+                        description { state: "default" 0.0;
+                               min: 0 128;
+                               align: 0.5 0.5;
+                               fixed: 1 0;
+                               rel1 {
+                                  relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                  relative: 1.0 1.0;
+                               }
+                        }
+                 }
+                 part { name: "elm.text.left";
+                        type: TEXT;
+                        scale : 1;
+                        description { state: "default" 0.0;
+                               max: 150 26;
+                               text {
+                                  font: FONT_NANE;
+                                  text_class:"tizen";
+                                  size: 26;
+                                  min: 0 0;
+                                  align: 0.0 1.0;
+                                 }
+                               color: 108 108 108 255;
+                               align: 0.0 1.0;
+                               rel1 {
+                                  relative: 0.0 0.0;
+                                  to: "elm.swallow.content";
+                               }
+                               rel2 {
+                                  relative: 1.0 1.0;
+                                  to: "elm.swallow.content";
+                               }
+                        }
+                 }
+                 part { name: "elm.text.right";
+                        type: TEXT;
+                        scale : 1;
+                        description { state: "default" 0.0;
+                               max: 150 26;
+                               text {
+                               font: FONT_NANE;
+                               text_class:"tizen";
+                                  size: 26;
+                                  min: 0 0;
+                                  align: 1.0 1.0;
+                                 }
+                               color: 108 108 108 255;
+                               align: 1.0 1.0;
+                               rel1 {
+                                  relative: 0.0 0.0;
+                                  to: "elm.swallow.content";
+                               }
+                               rel2 {
+                                  relative: 1.0 1.0;
+                                  to: "elm.swallow.content";
+                               }
+                        }
+                 }
+          }
+       }
+
+       group {
+               name: "effect/model/list";
+               parts {
+                       part
+                       {
+                                       name: "icon";
+                                       type: RECT;
+                                       mouse_events:  0;
+                                       scale: 1;
+                                       description
+                                       {
+                                               state:    "default" 0.0;
+                                               max : THUMBNAIL_W 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 : MEMORY_SUB_THUMB_W MEMORY_SUB_THUMB_H;
+                                       min : MEMORY_SUB_THUMB_W 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: "pathinfo";
+                 parts {
+                       part
+                       {
+                               name: "base";
+                               type: RECT;
+                               repeat_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 PATH_INFO_H;
+                                       fixed:0 1;
+                                       color: PATH_INFO_BG_COLOR;
+                               }
+                       }
+                       part
+                       {
+                               name: "bg";
+                               type: RECT;
+                               //clip_to: "disclip";
+                               repeat_events: 0;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       color: PATH_INFO_BG_COLOR;
+                               }
+                       }
+                       MF_PART_PADDING_TOP(0)
+                       MF_PART_PADDING_BOTTOM( 0 )
+                       MF_PART_PADDING_LEFT( 10 )
+                     part { name: "info";
+                           type: TEXT;
+                           scale: 1;
+                           description {
+                              state: "default" 0.0;
+                              align: 0.0 0.5;
+                              rel1
+                              {
+                                      relative: 1.0 0.0;
+                                      to_x: "elm.padding.left";
+                              }
+                              rel2
+                              {
+                                      relative: 1.0 1.0;
+                                      to_y: "elm.padding.bottom";
+                              }
+                              color: 255 255 255 255;
+                              text {
+                                 font: FONT_NANE;
+                                 text_class:"tizen";
+                                 size: 32;
+                                 min: 1 1;
+                                 align: 0.0 0.5;
+                              }
+                           }
+                        }
+                }
+       }
+       group
+            {
+                    name:"upper_folder";
+                    parts
+                    {
+
+                            part
+                            {
+                                    name: "base";
+                                    type: RECT;
+                                    repeat_events: 0;
+                                    scale: 1;
+                                    description {
+                                            state: "default" 0.0;
+                                            color: 215 225 232 255;
+                                    }
+                            }
+                            part { name: "home";
+                                       type: SWALLOW;
+                                       scale: 1;
+                                       description { state: "default" 0.0;
+                                        rel1.relative: 0.022 0.157;
+                                        rel2.relative: 0.489 0.843;
+                               }
+                            }
+                            part { name: "upper";
+                                       type: SWALLOW;
+                                       scale: 1;
+                                       description { state: "default" 0.0;
+                                        rel1.relative: 0.511 0.157;
+                                        rel2.relative: 0.978 0.843;
+                               }
+                            }
+
+                    }
+            }
+
+       group
+       {
+                 name: "pathinfo_lanscape";
+                 parts {
+                       part
+                       {
+                               name: "base";
+                               type: RECT;
+                               repeat_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       color: 200 200 200 127;
+                               }
+                       }
+                       part
+                       {
+                               name: "bg";
+                               type: RECT;
+                               clip_to: "disclip";
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       color: 200 200 200 127;
+                               }
+                       }
+                       MF_PART_PADDING_TOP(0)
+                       MF_PART_PADDING_BOTTOM( 0 )
+                       MF_PART_PADDING_LEFT( 10 )
+                       part
+                       {
+                               name: "bottom_line";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 1;
+                                       fixed: 0 1;
+                                       visible: 1;
+                                       color: 199 199 199 255;
+                                       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 52;
+                               //      max: 0 52;
+                                       fixed: 1 1;
+                                       align: 0.0 0.5;
+                                       rel1
+                                       {
+                                               relative: 1.0 1.0;
+                                               offset: 0 0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.top";
+                                       }
+                                       rel2
+                                       {
+                                               relative: 1.0 0.0;
+                                               offset: 0 0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.bottom";
+                                       }
+                               }
+                       }
+
+                       part
+                       {
+                               name: "disclip";
+                               type: RECT;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                               }
+                       }
+                }
+       }
+       group
+            {
+                    name:"upper_folder_lanscape";
+                    parts
+                    {
+                       part
+                       {
+                            name: "upper";
+                            type: SWALLOW;
+                            mouse_events: 1;
+                            scale: 1;
+                            description {
+                                    state: "default" 0.0;
+                                    rel1
+                                    {
+                                            relative: 0.0 0.0;
+                                    }
+                                    rel2
+                                    {
+                                            relative: 1.0 1.0;
+                                    }
+                                    align: 0.5 0.5;
+                            }
+                       }
+                    }
+            }
+
+
+       group
+            {
+                    name:"bottom_layout";
+                    parts
+                    {
+                       part
+                       {
+                            name: "upper";
+                            type: SWALLOW;
+                            scale: 1;
+                            description {
+                                    state: "default" 0.0;
+                                    min: 320 75;
+                                 //   max: 320 75;
+                                    fixed:1 1;
+                                    visible:1;
+                                    rel1
+                                    {
+                                            relative: 0.0 0.0;
+                                    }
+                                    rel2
+                                    {
+                                            relative: 1.0 0.16;
+                                    }
+                                    align: 0.5 0.5;
+                            }
+                            description {
+                                    state: "hide" 0.0;
+                                    min: 0 0;
+                                  //  max: 0 0;
+                                    fixed:1 1;
+                                    visible:0;
+                                    rel1
+                                    {
+                                            relative: 0.0 0.0;
+                                    }
+                                    rel2
+                                    {
+                                            relative: 0.0 0.0;
+                                    }
+                            }
+                       }
+                       part
+                       {
+                            name: "genlist_layout";
+                            type: SWALLOW;
+                            scale: 1;
+                            description {
+                                    state: "default" 0.0;
+                                    visible:1;
+                                    rel1
+                                    {
+                                            relative: 0.0 1.0;
+                                            to:"upper";
+                                    }
+                                    rel2
+                                    {
+                                            relative: 1.0 1.0;
+                                    }
+                                    align: 0.5 0.5;
+                            }
+                       }
+                    }
+                    programs
+                    {
+                            program {
+                                    name:  "hide_upper";
+                                    source: "elm";
+                                    signal:  "upper.hide";
+                                    action:  STATE_SET "hide" 0.0;
+                                    target:  "upper";
+                            }
+                            program {
+                                    name:    "show_upper";
+                                    source: "elm";
+                                    signal:  "upper.show";
+                                    action:  STATE_SET "default" 0.0;
+                                    target:  "upper";
+                            }
+
+                    }
+            }
+       group
+            {
+                    name:"left_layout";
+                    parts
+                    {
+                       part
+                       {
+                            name: "path_info";
+                            type: SWALLOW;
+                            scale: 1;
+                            description {
+                                    state: "default" 0.0;
+                                    min: 320 52;
+                                 //   max: 320 52;
+                                    fixed:1 1;
+                                    rel1
+                                    {
+                                            relative: 0.0 0.0;
+                                    }
+                                    rel2
+                                    {
+                                            relative: 1.0 0.11;
+                                    }
+                                    align: 0.5 0.5;
+                            }
+                       }
+                       part
+                       {
+                            name: "select_all";
+                            type: SWALLOW;
+                            scale: 1;
+                            description {
+                                    state: "default" 0.0;
+                                    min: 320 52;
+                                 //   max: 320 52;
+                                    fixed:1 1;
+                                    rel1
+                                    {
+                                            relative: 0.0 0.0;
+                                    }
+                                    rel2
+                                    {
+                                            relative: 1.0 0.11;
+                                    }
+                                    align: 0.5 0.5;
+                            }
+                       }
+                       part
+                       {
+                            name: "bottom";
+                            type: SWALLOW;
+                            scale: 1;
+                            description {
+                                    state: "default" 0.0;
+                                    min: 320 428;
+                                   // max: 320 428;
+                                    fixed:1 1;
+                                    rel1
+                                    {
+                                            relative: 0.0 1.0;
+                                            to_y:"path_info";
+                                    }
+                                    rel2
+                                    {
+                                            relative: 1.0 1.0;
+                                    }
+                                    align: 0.5 0.5;
+                            }
+                       }
+                    }
+            }
+
+       group {
+               name: "search_view";
+
+               parts {
+                       part {
+                               name : "result";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 450 0;
+                                       fixed:1 0;
+                                       align: 0.0 0.0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 1.0;}
+                               }
+
+                       }
+
+               }
+
+       }
+
+       group
+       {
+               name: "landscape_layout";
+
+               parts
+               {
+                       part
+                       {
+                               name: "path_info";
+                               mouse_events: 1;
+                               type: SWALLOW;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 0.07;}
+                               }
+                       }
+                       part
+                       {
+                               name: "panes";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description
+                               {
+                                       state: "default" 0.0;
+                                       visible: 1;
+                                       rel1 { relative: 0.0 1.0; to_y: "path_info";}
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+
+               }
+       }
+
+       group { name: "new_folder_layout";
+                  parts {
+                     part { name: "inputfield_rect";
+                     type: RECT;
+                        scale: 1;
+                        description { state: "default" 0.0;
+                           min: 0 SEARCHBAR_HEIGHT_INC;
+                           fixed: 0 1;
+                           align: 0.0 0.0;
+                           color: 248 246 239 255;
+                        }
+                     }
+                     part { name: "left_icon_padding_rect";
+                        type: RECT;
+                        scale: 1;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: SEARCHBAR_LEFT_ICON_PADDING_INC 0;
+                           fixed: 1 0;
+                           align: 0 0;
+                           rel1.to: "inputfield_rect";
+                           rel2 {
+                              relative: 0.0 1.0;
+                              to: "inputfield_rect";
+                           }
+                        }
+                     }
+                     part { name: "left_padding_search_textfield";
+                        type: RECT;
+                        scale: 1;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: SEARCHBAR_LEFT_PADDING_SEARCHFIELD_INC 0;
+                           fixed: 1 0;
+                           align: 0.0 0.5;
+                           rel1 {
+                              relative: 0.0 0.0;
+                              to_y: "inputfield_rect";
+                           }
+                           rel2 {
+                              relative: 0.0 1.0;
+                              to_y: "inputfield_rect";
+                           }
+                        }
+                     }
+                     part { name: "right_padding_search_textfield";
+                        type: RECT;
+                        scale: 1;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: SEARCHBAR_RIGHT_PADDING_SEARCHFIELD_INC 0;
+                           fixed: 1 0;
+                           align: 1.0 0.5;
+                           rel1 {
+                              relative: 1.0 0.0;
+                              to: "inputfield_rect";
+                           }
+                           rel2 {
+                              relative: 1.0 1.0;
+                              to: "inputfield_rect";
+                           }
+                        }
+                     }
+                     part { name: "search_textfield";
+                        type: RECT;
+                        mouse_events: 1;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           color: 0 0 0 0;
+                           min: 0 SEARCHBAR_SEARCH_TEXTFIELD_H_INC;
+                           fixed: 0 1;
+                           align: 0.0 0.5;
+                           rel1 {
+                              relative: 1.0 0.0;
+                              to: "left_padding_search_textfield";
+                           }
+                           rel2 {
+                              relative: 0.0 1.0;
+                              to: "right_padding_search_textfield";
+                           }
+                        }
+                     }
+                     part { name: "top1";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: 0 EDITFIELD_SEARCHBAR_TOP1_SINGLE_INC;
+                           fixed: 1 1;
+                           rel1 {
+                              relative: 0.0 0.0;
+                              to: "search_textfield";
+                           }
+                           rel2 {
+                              relative: 1.0 0.0;
+                              to: "search_textfield";
+                           }
+                           align: 0.5 0;
+                        }
+                     }
+                     part { name: "top2";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: 0 EDITFIELD_SEARCHBAR_TOP2_INC;
+                           fixed: 1 1;
+                           rel1 {
+                              relative: 0.0 0.0;
+                              to: "search_textfield";
+                           }
+                           rel2 {
+                              relative: 1.0 0.0;
+                              to: "search_textfield";
+                           }
+                           align: 0.5 0;
+                        }
+                     }
+                     part { name: "left1";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: EDITFIELD_SEARCHBAR_LEFT1_INC 0;
+                           fixed: 1 1;
+                           align: 0 0;
+                           rel1 {
+                              relative: 0.0 0.0;
+                              to: "search_textfield";
+                           }
+                           rel2 {
+                              relative: 0.0 1.0;
+                              to: "search_textfield";
+                           }
+                        }
+                     }
+                     part { name: "left2";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: EDITFIELD_SEARCHBAR_LEFT2_INC 0;
+                           fixed: 1 1;
+                           align: 0 0;
+                           rel1 {
+                              relative: 0.0 0.0;
+                              to: "search_textfield";
+                           }
+                           rel2 {
+                              relative: 0.0 1.0;
+                              to: "search_textfield";
+                           }
+                        }
+                     }
+                     part { name: "right1";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: EDITFIELD_SEARCHBAR_RIGHT1_ERASER_SHOW_INC 0;
+                           fixed: 1 1;
+                           align: 1 0;
+                           rel1 {
+                              relative: 1.0 0.0;
+                              to: "search_textfield";
+                           }
+                           rel2.to: "search_textfield";
+                        }
+                     }
+                     part { name: "right2";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: EDITFIELD_SEARCHBAR_RIGHT2_INC 0;
+                           fixed: 1 1;
+                           align: 1 0;
+                           rel1 {
+                              relative: 1.0 0.0;
+                              to: "search_textfield";
+                           }
+                           rel2.to: "search_textfield";
+                        }
+                     }
+                     part { name: "bottom1";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: 0 EDITFIELD_SEARCHBAR_BOTTOM1_SINGLE_INC;
+                           fixed: 1 1;
+                           align: 0 1;
+                           rel1 {
+                              relative: 0.0 1.0;
+                              to: "search_textfield";
+                           }
+                        }
+                     }
+                     part { name: "bottom2";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: 0 EDITFIELD_SEARCHBAR_BOTTOM2_SINGLE_INC;
+                           fixed: 0 1;
+                           rel1 {
+                              relative: 0.0 1.0;
+                              to: "search_textfield";
+                           }
+                           align: 0 1;
+                        }
+                     }
+                     part { name: "bottom3";
+                        type: RECT;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           visible: 0;
+                           min: 0 EDITFIELD_SEARCHBAR_BOTTOM3_SINGLE_INC;
+                           fixed: 0 1;
+                           rel1 {
+                              relative: 0.0 1.0;
+                              to: "search_textfield";
+                           }
+                           align: 0 1;
+                        }
+                     }
+                     part { name: "top_line";
+                        type: RECT;
+                        scale: 1;
+                        description { state: "default" 0.0;
+                           visible: 1;
+                           min: 0 1;
+                           fixed: 0 1;
+                           rel1 {
+                              relative : 0.0 0.0;
+                           }
+                           rel2 {
+                              relative : 1.0 0.0;
+                           }
+                           color:169 169 169 255;
+                        }
+                     }
+                     part {
+                        name: "content";
+                        type: SWALLOW;
+                        scale: 1;
+                        ignore_flags: ON_HOLD;
+                        description { state: "default" 0.0;
+                           min: 0 40;
+                          // max: 0 140;
+                           rel1 {
+                              relative : 1.0 1.0;
+                              to_x: "left1";
+                              to_y: "top1";
+                           }
+                           rel2 {
+                              relative : 0.0 0.0;
+                              to_x: "right1";
+                              to_y: "bottom1";
+                           }
+                           align: 0.0 0.5;
+                        }
+                     }
+                     part { name: "bottom_line";
+                        type: RECT;
+                        scale: 1;
+                        description { state: "default" 0.0;
+                           visible: 1;
+                           min: 0 1;
+                           fixed: 0 1;
+                           rel1 {
+                              relative : 0.0 1.0;
+                              to_y:"content";
+                           }
+                           rel2 {
+                              relative : 1.0 1.0;
+                              to_y:"content";
+                           }
+                           color:169 169 169 255;
+                        }
+                     }
+                  }
+       }
+               group {
+               name: "PAD";
+
+               parts {
+                       part {
+                               name: "content";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 1.0;}
+                                       color: 248 246 239 255;
+                               }
+                       }
+               }
+       }
+       group { name: "selectinfo_layout";
+          parts {
+               part { name: "background";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0; }
+                               rel2 { relative: 1.0 1.0; }
+                               color: 248 246 239 255;
+                       }
+               }
+             part {
+                name: "content";
+                type: SWALLOW;
+                scale: 1;
+                repeat_events: 1;
+                description { state: "default" 0.0;
+                   align: 0.5 0.0;
+                   rel1 { relative: 0.0 0.0;}
+                   rel2 { relative: 1.0 1.0;}
+                }
+             }
+
+             part {
+                     name: "sel_contents";
+                     type: SWALLOW;
+                     scale: 1;
+                     description { state: "default" 0.0;
+                             fixed: 0 1;
+                             align: 0.5 1.0;
+                             rel1 {
+                                     relative: 0.0 1.0;
+                                     to:"content";
+                             }
+                     }
+                     description { state: "hide" 0.0;
+                             inherit: "default" 0.0;
+                             visible: 0;
+                     }
+             }
+               part {
+                       name: "swallow.shortcut";
+                       type: SWALLOW;
+                       scale: 1;
+                       mouse_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: MAIN_W 96;
+                               max: MAIN_W 96;
+                               fixed: 1 1;
+                               rel1 {
+                                       relative: 0.0 1.0;
+                               }
+                               color: 0 0 0 255;
+                               align: 0.5 1.0;
+                       }
+               }
+          }
+          programs {
+             program {
+                name: "show";
+                signal: "show,selection,info";
+                source: "elm";
+                action: STATE_SET "default" 0.0;
+                target: "sel_contents";
+             }
+             program {
+                name: "hide";
+                signal: "hide,selection,info";
+                source: "elm";
+                action: STATE_SET "hide" 0.0;
+                target: "sel_contents";
+             }
+          }
+       }
+       group {
+       name: "apptray.item";
+
+       parts {
+               //MF_PART_PADDING_TOP(24 )
+               //MF_PART_PADDING_BOTTOM(24)
+               part{
+                       name: "background";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 1;
+                       description{
+                               state: "default" 0.0;
+                               min: 72 72;
+                               max: 72 72;
+                               fixed:1 1;
+                               rel1 { relative: 0.0 0.0; }
+                               rel2 { relative: 1.0 1.0; }
+                               color: 0 0 0 255;
+                               visible: 0;
+                       }
+               }
+
+               part{
+                       name: "swallow.icon";
+                       type: SWALLOW;
+                       scale: 1;
+                       mouse_events: 1;
+                       description{
+                               state: "default" 0.0;
+                               //min: 96 96;
+                               min: 72 72;
+                               max: 72 72;
+                               fixed: 1 1;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "background";
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                                       to: "background";
+                               }
+                               align: 0.5 0.5;
+                       }
+               }
+       }
+}
+               group
+               {
+                         name: "search_path";
+                         parts {
+                       part
+                       {
+                               name: "path";
+                               type: SWALLOW;
+                               scale: 1;
+                               description
+                               {
+                                       state:    "default" 0.0;
+                                       fixed: 1 1;
+                                       min : MF_SEARCH_FOLDER_W MF_SEARCH_FOLDER_H;
+                                       max : MF_SEARCH_FOLDER_W MF_SEARCH_FOLDER_H;
+                                       align: 0.5 0.5;
+                                       rel1
+                                       {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2
+                                       {
+                                               relative: 1.0 1.0;
+                                       }
+                               }
+                       }
+                        }
+               }
+       group { name: "search_view_layout";
+          parts {
+               part { name: "background";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 { relative: 0.0 0.0; }
+                               rel2 { relative: 1.0 1.0; }
+                               color: 248 246 239 255;
+                       }
+               }
+               part {
+                           name: "search_bar";
+                           type: SWALLOW;
+                           scale: 1;
+                           description {
+                              state: "default" 0.0;
+                              min: 0 SEARCHBAR_H_INC;
+                              fixed: 0 1;
+                              align: 0.0 0.0;
+                              rel1 { relative: 0.0 0.0;}
+                              rel2 { relative: 1.0 0.0;}
+                           }
+               }
+             part {
+                name: "content";
+                type: SWALLOW;
+                scale: 1;
+                repeat_events: 1;
+                description { state: "default" 0.0;
+                   align: 0.5 0.0;
+                   rel1 { relative: 0.0 1.0; to_y:"search_bar";}
+                   rel2 { relative: 1.0 1.0;}
+                }
+             }
+
+             part {
+                     name: "sel_contents";
+                     type: SWALLOW;
+                     scale: 1;
+                     description { state: "default" 0.0;
+                             fixed: 0 1;
+                             align: 0.5 1.0;
+                             rel1 {
+                                     relative: 0.0 1.0;
+                                     to:"content";
+                             }
+                     }
+                     description { state: "hide" 0.0;
+                             inherit: "default" 0.0;
+                             visible: 0;
+                     }
+             }
+          }
+          programs {
+             program {
+                name: "show";
+                signal: "show,selection,info";
+                source: "elm";
+                action: STATE_SET "default" 0.0;
+                target: "sel_contents";
+             }
+             program {
+                name: "hide";
+                signal: "hide,selection,info";
+                source: "elm";
+                action: STATE_SET "hide" 0.0;
+                target: "sel_contents";
+             }
+          }
+       }
+
+
+group { name: "popup_center_text";
+   parts{
+         part { name: "elm.title";
+                type: TEXT;
+                scale : 1;
+                description { state: "default" 0.0;
+                       max: 240 60;
+                       text {
+                          font: FONT_NANE;
+                          text_class:"tizen";
+                          size: 42;
+                          min: 0 0;
+                          align: 0.5 0.5;
+                         }
+                       color: 0 0 0 255;
+                       align: 0.5 0.0;
+                       rel1 {
+                          relative: 0.0 0.25;
+                       }
+                       rel2 {
+                          relative: 1.0 0.0;
+                       }
+                }
+         }
+         part{ name:"elm.swallow.content";
+                type: TEXT;
+                scale : 1;
+                description { state: "default" 0.0;
+                       min: 0 118;
+                       fixed: 1 0;
+                       text {
+                          font: FONT_NANE;
+                          text_class:"tizen";
+                          size: 42;
+                          min: 0 0;
+                          align: 0.5 0.5;
+                         }
+                       color: 0 0 0 255;
+                       align: 0.5 0.0;
+                       rel1 {
+                          relative: 0.0 1.0; to_y: "elm.title";
+                       }
+                       rel2 {
+                          relative: 1.0 1.0;
+                       }
+                }
+         }
+   }
+}
diff --git a/data/po/CMakeLists.txt b/data/po/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e9cc98d
--- /dev/null
@@ -0,0 +1,26 @@
+# for i18n
+
+SET(POFILES bg.po cs.po el_GR.po en_US.po et.po fr_CA.po gl.po hu.po it_IT.po kk.po
+lv.po nb.po ro.po sl.po tr_TR.po uz.po zh_SG.po az.po de_DE.po en.po es_US.po
+es_MX.po fi.po ga.po hr.po is.po ka.po lt.po pl.po pt_PT.po sk.po sv.po zh_HK.po ar.po ca.po da.po en_PH.po es_ES.po eu.po fr_FR.po hi.po hy.po ja_JP.po ko_KR.po mk.po nl_NL.po pt_BR.po ru_RU.po sr.po uk.po zh_CN.po zh_TW.po)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+       SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+       MESSAGE("PO: ${pofile}")
+       GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+       GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+       SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+       ADD_CUSTOM_COMMAND(
+                       OUTPUT ${moFile}
+                       COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+                       DEPENDS ${absPofile}
+       )
+       INSTALL(FILES ${moFile}
+                       DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+       SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/data/po/POTFILES.in b/data/po/POTFILES.in
new file mode 100644 (file)
index 0000000..d2ad8bd
--- /dev/null
@@ -0,0 +1,14 @@
+# List of source files containing translatable strings.\r
+applications/myfile.c\r
+applications/myfileCallBack.c\r
+applications/myfileUtil.c\r
+libraries/platform-wrapper/myfile_filemanagerservice_wrapper.c\r
+libraries/platform-wrapper/myfile_setting_wrapper.c\r
+libraries/winset-wrapper/myfileContent.c\r
+libraries/winset-wrapper/myfileContextPopup.c\r
+libraries/winset-wrapper/myfileControlBar.c\r
+libraries/winset-wrapper/myfileInput.c\r
+libraries/winset-wrapper/myfileLayout.c\r
+libraries/winset-wrapper/myfileListView.c\r
+libraries/winset-wrapper/myfileNavigationBar.c\r
+libraries/winset-wrapper/myfilePopup.c\r
diff --git a/data/po/ar.po b/data/po/ar.po
new file mode 100644 (file)
index 0000000..0c4b016
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "لأعلى"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "الرئيسية"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "عرض عبر اللائحة"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "عرض عبر المختصرات"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "فشل المسح"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "ملف DRM. يتعذر الإرسال"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "اسم الملف غير صالح"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "تجاوز الحد الأقصى لعدد المجلدات"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "تم رفض الإذن"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "فشل الإرسال"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "مجلد الوجهة هو مجلد فرعي من مجلد المصدر"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "هذا الملف غير موجود"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "يتعذر النسخ"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "يتعذر النقل"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "لا توجد مساحة كافية بذاكرة الهاتف. احذف بعض العناصر وحاول مرة أخرى"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "فشل النسخ"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "فشل النقل"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "الذاكرة لا تكفي. متوفر %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "نفس الاسم مستخدم مسبقا"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "يتعذر النقل. المجلد الوجهة نفس المجلد المصدر"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "إنشاء مجلد"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "لصق هنا"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "تنبيهات"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "خلفيات الشاشة"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "الهاتف"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "الصور"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "الفيديو"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "الأصوات"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "ملفات محملة"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "بطاقة الذاكرة"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "‏‫التخزين الخارجي"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "تعديل"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "مسح"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "نقل"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "أعلى"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "نقل إلى هنا"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "نسخ"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "فرز حسب"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "بحث"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "المزيد"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "إنشاء مجلد"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "اسم المجلد"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "ألبومي"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "عرض ﻜ"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "تنازليا"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "الكل"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "بحث في جميع المجلدات"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "عرض مختصر"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "إظهار امتداد الملفات"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "فرز بواسطة"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "القائمة والتفاصيل"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "اسم المجلد موجود مسبقا"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "إخفاء امتداد الملفات"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "الاسم (من أ إلى ي)‬"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "الاسم (من ي إلى أ)‬"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "التاريخ (الأحدث)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "التاريخ (الأقدم)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "ذهاب إلى ملفاتي"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "نغمات الرنين"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "لم يتم اكتشاف وجه"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "إضافة للرئيسية"
+
diff --git a/data/po/az.po b/data/po/az.po
new file mode 100644 (file)
index 0000000..989e3f1
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Yuxarı"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Ev"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Siyahı ilə görüntülə"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Miniatur goruntusu ile gozden kecir"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Silmək mümkün olmadı"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM faylı. Göndərmək mümkün deyil"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Yanlış fayl adı"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Maksimum qovluq sayına çatıldı"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "İcazə rədd edildi"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Göndərmə alınmadı"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Təyin edilmiş yer üçün qovluq mənbə qovluğunun alt qovluğudur"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Bu fayl mövcud deyil"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Surətini köçürmək mümkün deyildir"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Yerini dəyişdirmək mümkün deyil"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Telefon yaddaşında kifayət qədər yaddaş yoxdur. Bəzi elementləri silin və yenidən cəhd edin"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Köçürülmə baş tutmadı"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Keçmə alınmadı"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Yaddaş yetərsizdir. %s yerləşdirmək mümkündür"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Eyni ad hazırda istifadə edilir"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr " Yerini dəyişmək mümkün deyildir. Hədəf qovluq mənbə qovluğu ilə eynidir"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Qovluq yaradın"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Buraya yapışdırın"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Siqnallar"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Divar kağızları"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Təsvirlər"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Video"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Səslər"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Yükləmələr"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Yaddaş kartı"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Xarici yaddaş"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Redaktə et"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Sil"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Apar"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Yuxarı"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Buraya keçin"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Köçür"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Nizamla"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Axtar"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Daha çox"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Qovluq yarat"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Qovluğun adı"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mənim albomum"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "...kimi nəzərdən keçir"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Geriyə"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mənim səsli kliplərim"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Düzgün status"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Tədarükçü"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Say"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Tərkibi"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Fərdi"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "İnterval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Ad.dyş"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Vaxt"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Məhdud say"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tip"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Limitsiz"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Əvəz et"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Zəng egənin zəng tonu"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Ad"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Surəti saxlanıldı"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "He nə seçilməmişdir"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Hip yaddaşda kifayət qədər yer yoxdur"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Yaddaş kifayət etmir. Xahiş olunur bəzi elementləri silin"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Yaradılmış tarix"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS məlumatı"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS en dairəsi"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS uzunluq dairəsi"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS versiyası"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Təfsilatlar"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Hər hansı"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "İstifadəsi mümkün olanlar"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "İcra et"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Göndərilir"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Mümkün deyil"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC məlumatı başladılır..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Mümkündür"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Çap et"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Etibarlılıq"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Yeni qovluq"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Redaktə et"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Sıralama qaydası"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Buraya keç"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Davam et"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Köçürülmə..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Buraya yapışdır"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Dəstəklənməyən fayl tipi"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Təfərrüat görünüşü"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Çoxalan"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Azalan"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Hamısını"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Bütün qovluqları axtar"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniatür görüntüsü"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Fayl genişlənməsini göstər"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sıralama qaydası"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Siyahı və təfərrüatlar"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Qovluq adı hazırda mövcuddur"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Fayl uzantısını gizlət"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Ad (A-dan Z-yə)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Ad (Z-dən A-ya)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Tarix (Ən son)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Tarix (Ən köhnə)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Fayllarıma daxil ol"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Zəng tonu"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Üz göstərilmir"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Başl-a əlavə et"
+
diff --git a/data/po/bg.po b/data/po/bg.po
new file mode 100644 (file)
index 0000000..b3aadce
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Нагоре"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Начало"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Изглед в списък"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Изглед с миниатюри"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Неуспешно изтриване"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM файл. Не може да се изпрати"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Невалидно име на файл"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Максималният брой папки достигнат"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Отказано разрешение"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Неуспешно изпращане"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Папката – назначение е подпапка на папката - източник"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Файлът не съществува"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Не може да се копира"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Не може да се премести"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Няма достатъчно памет в паметта на телефона. Изтрийте някои елементи и опитайте отново"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Копиране неуспешно"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Неуспешно преместване"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Няма достатъчно памет. %s свободни"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Такова име вече се използва"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Не може да се премести. Папката – назначение е същата като папката - източник"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Създай папка"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Постави тук"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Автоматичен запис"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Тапети"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Телефон"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Изображения"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Видеоклипове"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Звуци"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Изтеглени файлове"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Карта с памет"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Външна памет за съхр."
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Редактиране"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Изтрий"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Мести"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Нагоре"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Преместване тук"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Копирай"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Сортирай по"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Търсене"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Още"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Създаване на папка"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Име на папка"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Моят албум"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Виж като"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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 "Lъзможно"
+
+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_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 "В низходящ ред"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Всички"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Търс. във всички папки"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Екран миниатюри"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Покажи разширението на файл"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Сортиране по"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Списък и подробни данни"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Името на папка вече същест- вува"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Скрий разшир. на файл"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Име (A до Я)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Име (Я до А)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Дата (най-нови)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Дата (най-стари)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Отиди Моите файлове"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Мелодии"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Не е разпознато лице"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Доб. към нач."
+
diff --git a/data/po/ca.po b/data/po/ca.po
new file mode 100644 (file)
index 0000000..53ac051
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Amunt"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Pers."
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Veure per llista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Veure per miniatura"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Error en esborrar"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Arxiu DRM. No es pot enviar"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nom de fitxer no vàlid"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "S'ha assolit el nombre màxim de carpetes"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permís denegat"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Error en enviar"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "La carpeta de destinació és una subcarpeta de la d'origen"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Aquest fitxer no existeix"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "No es pot copiar"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "No es pot moure"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "No hi ha prou espai a la memòria del telèfon. Esborri'n alguns elements i torni-ho a intentar"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Error en copiar"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Error en moure"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "No hi ha prou memòria. %s disponible"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "El mateix nom ja està en ús"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "No es pot moure. La carpeta de destinació és la mateixa que la d'origen"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Enganxar aquí"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Avisos"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fons de pantalla"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telèfon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Imatges"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Vídeos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sons"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Descàrregues"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Targeta memòria"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Emmagatzematge extern"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Esborrar"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Moure"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Amunt"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Moure aquí"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copiar"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ordenar per"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Cercar"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Més"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nom carpeta"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "El meu àlbum"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Veure com a"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Enrere"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Els meus videoclips"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Estat correcte"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Proveïdor"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Comptatge"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Conté"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individual"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Reanom"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Hora"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Compte contrarellotge"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tipus"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Il·limitat"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Substit"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Melodia de la persona que truca"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nom"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copiat"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "No s'ha seleccionat res"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "No hi ha prou memòria dinàmica"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "No hi ha prou memòria. Esborrar-ne alguns elements"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Data de creació"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "Informació 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ó GPS"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Detalls"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Qualsevol"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Usos disponibles"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Executar"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Reenviant"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "No és possible"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "S'estan inicialitzant les dades MMC..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Possible"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Imprimir"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Validesa"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Carpeta nova"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Llistar per"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Moure aquí"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Continuar"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Copiant..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Enganxar aquí"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "No s'admet el tipus de fitxer"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Vista de detall"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Ascendent"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Descendent"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Tot"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Cercar totes les carp."
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Vista de miniatura"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Mostrar extensió de fitxer"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ordenar per"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Llista i detalls"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "El nom de carpeta ja existeix"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ocultar exten fitxer"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nom (A a Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nom (Z a A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Data (més recents)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Data (més antics)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Anar a Els meus fitxers"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Melodies"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Cap cara detectada"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Afegir a l'inici"
+
diff --git a/data/po/cs.po b/data/po/cs.po
new file mode 100644 (file)
index 0000000..bf5b1d1
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Nahoru"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Domů"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Zobrazit podle seznamu"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Zobrazit podle miniatur"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Odstranění se nezdařilo"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Soubor DRM. Nelze odeslat"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Neplatný název souboru"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Bylo dosaženo maximálního počtu složek"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Povolení bylo odepřeno"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Chyba odeslání"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Cílová složka je podsložkou zdrojové složky"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Soubor neexistuje"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Nelze zkopírovat"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Nelze přesunout"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Nedostatek paměti v paměti telefonu. Odstraňte některé položky a opakujte akci"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopírování se nezdařilo"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Přesunutí se nezdařilo"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Nedostatek paměti. Zbývá: %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Stejný název je již použit"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Nelze přesunout. Cílová složka je shodná se zdrojovou složkou"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Vytvořit složku"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Vložit sem"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Výstrahy"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Pozadí"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Obrázky"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videa"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Zvuky"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Stažené položky"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Paměťová karta"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Externí úložiště"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Upravit"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Odstranit"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Přesun"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Nahoru"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Přesunout sem"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopírovat"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Seřadit podle"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Hledat"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Další"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Vytvořit složku"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Název složky"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Moje album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Zobrazit jako"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Zpět"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Moje videoklipy"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Stav práv"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Dodavatel"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Počet"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Obsahuje"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individuální"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Přejm."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Čas"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Násobek času"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Typ"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Neomezeno"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Nahradit"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Zvonění volajícího"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Jméno"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Zkopírováno"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Není nic vybráno"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Nedostatek zásobníkové paměti"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Nedostatek paměti. Odstraňte některé položky"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Datum vytvoření"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "Informace GPS"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "Zeměpisná šířka GPS"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "Zeměpisná délka GPS"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "Verze GPS"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Podrobnosti"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Vše"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Počet použití k dispozici"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Provést"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Předání"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Nemožné"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Probíhá inicializace dat MMC..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Možné"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Tisk"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Platnost"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Nová složka"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Upravit"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Seřadit podle"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Přesunout sem"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Pokračovat"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopírování..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Vložit sem"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodporovaný typ souboru"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Podrobnosti"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Vzestupně"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Sestupně"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Vše"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Hledat ve všech složk."
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Zobrazení miniatur"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Zobrazit příponu souborů"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Seřadit podle"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Seznam a detaily"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Název složky již existuje"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Skrýt příponu souborů"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Název (od A do Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Název (od Z do A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Datum (nejnovější)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Datum (nejstarší)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Jít do Moje soubory"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Vyzvánění"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nebyl rozpoznán žádný obličej"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Př. na dom. obr."
+
diff --git a/data/po/da.po b/data/po/da.po
new file mode 100644 (file)
index 0000000..e71d848
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Op"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Hjem"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Vis efter liste"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Vis efter miniature"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Sletning mislykkedes"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM-fil. Kan ikke sende"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Ugyldigt filnavn"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Det maksimale antal mapper er nået"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Tilladelse afslået"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Afsendelsen mislykkedes"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Destinationsmappen er en undermappe til kildemappen"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Fil findes ikke"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Kunne ikke kopiere"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Kunne ikke flytte"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Ikke tilstrækkelig telefonhukommelse. Slet nogle elementer, og prøv igen"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopiering mislykkedes"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Flytning mislykkedes"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Ikke tilstrækkelig hukommelse. %s er tilgængelig"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Det samme navn er allerede i brug"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Kunne ikke flytte. Destinationsmappen er den samme som kildemappen"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Opret mappe"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Sæt ind her"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Advarsler"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Baggrunde"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Billeder"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videoklip"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Lyde"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Downloads"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Hukommelseskort"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Eksternt lager"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Redigér"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Slet"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Flyt"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Op"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Flyt hertil"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopiér"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sortér efter"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Søg"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Mere"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Opret mappe"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Mappenavn"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mit album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Vis som"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Tilbage"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mine videoklip"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Status for rettigheder"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Sælger"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Antal"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Indeholder"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individuel"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Omdøb"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Tid"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Tidsforbrug"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Type"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Ubegrænset"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Erstat"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Kontakt ringetone"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Navn"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopieret"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Intet er valgt"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Der er ikke tilstrækkelig heap-hukommelse"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Der er ikke tilstrækkelig hukommelse. Slet nogle elementer"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Oprettelsesdato"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS-oplysninger"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS-breddegrad"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS-længdegrad"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS Version"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Detaljer"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Vilkårlig"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Gange tilbage"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Udfør"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Viderestiller"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Ikke mulig"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC-data initialiserer..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Muligt"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Udskriv"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Gyldighed"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Ny mappe"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Redigér"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Sortér efter"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Flyt hertil"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Fortsæt"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopierer ..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Indsæt her"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Filtype understøttes ikke"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detaljeret visning"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Stigende"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Faldende"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Alle"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Søg i alle mapper"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniaturevisning"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Vis filtypenavn"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sortér efter"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Liste og detaljer"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Mappenavnet findes allerede"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Skjul filtypenavn"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Navn (A til Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Navn (Z til A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Dato (nyeste)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Dato (ældste)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Gå til Mine filer"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Ringetoner"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Intet ansigt detekteret"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Føj til start"
+
diff --git a/data/po/de_DE.po b/data/po/de_DE.po
new file mode 100644 (file)
index 0000000..d1ce770
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Hoch"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Home"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Nach Liste anzeigen"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "In Miniaturansicht anzeigen"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Löschen fehlgeschlagen"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM-Datei. Kann nicht gesendet werden"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Dateiname ungültig"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Maximale Ordneranzahl erreicht"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Berechtigung abgelehnt"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Senden fehlgeschlagen"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Der Zielordner ist ein Unterordner des Quellordners"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Datei nicht vorhanden"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Kopieren nicht möglich"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Verschieben nicht möglich"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Nicht genügend Platz im Telefonspeicher. Löschen Sie einige Elemente und versuchen Sie es erneut."
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopieren fehlgeschlagen"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Verschieben fehlgeschlagen"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Nicht genügend Speicher. %s verfügbar"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Derselbe Name wird bereits verwendet"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Verschieben nicht möglich. Ziel- und Quellordner sind gleich"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Ordner erstellen"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Hier einfügen"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Signale"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Hintergrund"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Eigene Bilder"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Töne"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Downloads"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Speicher-\nkarte"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Externer Speicher"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Bearbeiten"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Löschen"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Verschieben"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Hoch"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Hierher verschieben"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopieren"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sortieren nach"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Suche"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Optionen"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Ordner erstellen"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Ordnername"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Eigenes Album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Anzeigen als"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Zurück"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Eigene Videos"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Copyright-Status"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Anbieter"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Anzahl"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Enthält"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individuell"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Intervall"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Umben."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Zeit"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Zeitzählung"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Typ"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Unbegrenzt"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Ersetzen"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Anruferklingelton"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Name"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopiert"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nichts ausgewählt"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Nicht genügend dynamischer Speicher"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Nicht genügend Speicher. Löschen Sie einige Elemente"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Erstellungsdatum"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS-Informationen"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS-Breite"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS-Länge"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS-Version"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Details"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Jede"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Verfügbare Nutzungen"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Ausführen"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Weiterleitung"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Nicht möglich"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC-Daten werden initialisiert..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Möglich"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Drucken"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Gültigkeit"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Neuer Ordner"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Bearbeiten"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Sortieren"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Hierher verschieben"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Weiter"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Wird kopiert..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Hier einfügen"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Nicht unterstützter Dateityp"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detailansicht"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Aufsteigend"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Absteigend"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Alle"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Alle Ordner durchsuchen"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniaturansicht"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Dateierweiterung anzeigen"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sortieren nach"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Liste und Details"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Ordnername bereits vorhanden"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Dateierweit. ausbl."
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Name (A bis Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Name (Z bis A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Datum (neueste)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Datum (älteste)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Eigene Dateien öffnen"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Klingeltöne"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Kein Gesicht erkannt"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Dem Startbildschirm hzfg."
+
diff --git a/data/po/el_GR.po b/data/po/el_GR.po
new file mode 100644 (file)
index 0000000..aa4e199
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Πάνω"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Home"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Προβολή ανά λίστα"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Προβολή μικρογραφιών"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Αποτυχία διαγραφής"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Αδύνατη αποστολή αρχείου DRM"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Μη έγκυρο όνομα αρχείου"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Μέγιστος"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Δεν έχετε δικαίωμα πρόσβασης"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Αποτυχία αποστολής"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Ο φάκελος προορισμού είναι υποφάκελος του φακέλου προέλευσης"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Δεν υπάρχει αρχείο"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Δεν είναι δυνατή η αντιγραφή"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Δεν είναι δυνατή η μετακίνηση"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Η μνήμη του τηλεφώνου δεν επαρκεί. Διαγράψτε ορισμένα στοιχεία και προσπαθήστε ξανά"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Αποτυχία αντιγραφής"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Αποτυχία μετακίνησης"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Δεν υπάρχει αρκετή μνήμη. Το στοιχείο %s είναι διαθέσιμο"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Το όνομα χρησιμοποιείται ήδη"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Δεν είναι δυνατή η μετακίνηση. Ο φάκελος προορισμού είναι ο ίδιος με το φάκελο προέλευσης"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Δημ/ργία φακέλου"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Επικόλληση εδώ"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Ειδοποιήσεις"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Θέματα φόντου"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Τηλέφωνο"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Εικόνες"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Βίντεο"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Ήχοι"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Λήψεις"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Κάρτα μνήμης"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Εξωτ. χώρος αποθήκ."
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Επεξεργ."
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Διαγραφή"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Μετακίνηση"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Πάνω"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Μετακίνηση εδώ"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Αντιγραφή"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ταξινόμ. κατά"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Αναζήτηση"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Περισσότ."
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Δημ/ργία φακέλου"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Όνομα φακέλου"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Το άλμπουμ μου"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Προβολή ως"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "Φθίνουσα"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Όλα"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Αναζ.σε όλους τους φακ."
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Προβολή μικρογραφιών"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Προβολή επέκτασης αρχείου"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ταξινόμηση κατά"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Λίστα και λεπτομέρειες"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Το όνομα φακέλου υπάρχει ήδη"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Απόκρ. επέκτασης αρχ."
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Όνομα (Α προς Ω)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Όνομα (Ω προς Α)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Ημερομηνία (Πιο πρόσφατο)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Ημερομηνία (Παλαιότερο)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Μετ. στα Αρχεία Μου"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Ήχοι κλήσης"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Δεν ανιχνεύθηκε πρόσωπο"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Προσθ. στην αρχ."
+
diff --git a/data/po/en.po b/data/po/en.po
new file mode 100644 (file)
index 0000000..be664df
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Up"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Home"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "View by list"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "View by thumbnail"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Delete failed"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM file. Cannot send"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Invalid file name"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Maximum folder reached"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permission denied"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Send failed"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "The destination folder is a subfolder of the source folder"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "This file does not exist"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Unable to copy"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Unable to move"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Not enough memory in phone memory. Delete some items and try again"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Copying failed"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Moving failed"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Not enough memory. %s available"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Same name already in use"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Unable to move. Destination folder same as source folder"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Create folder"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Paste here"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alerts"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Wallpapers"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Phone"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Images"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sounds"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Downloads"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Memory card"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "External storage"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Edit"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Delete"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Move"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Up"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Move here"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copy"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sort by"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Search"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "More"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Create folder"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Folder name"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "My album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "View as"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Back"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "My video clips"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Right status"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Vendor"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Count"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Contains"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individual"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Rename"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Time"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Timed count"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Type"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Unlimited"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Replace"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Caller ringtone"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Name"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copied"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nothing selected"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Not enough heap memory"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Not enough memory. Delete some items"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Created date"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS information"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS latitude"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS longitude"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS version"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Details"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Any"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Available uses"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Execute"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Forwarding"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Impossible"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC data is initialising..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Possible"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Print"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Validity"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "New folder"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Edit"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "List by"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Move here"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Continue"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Copying..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Paste here"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Unsupported file type"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detail view"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Ascending"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Descending"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "All"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Search all folders"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Thumbnail view"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Show file extension"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sort by"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "List and details"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Folder name already exists"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Hide file extension"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Name (A to Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Name (Z to A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Date (most recent)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Date (oldest)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Go to My Files"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Ringtones"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "No face detected"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Add to home"
+
diff --git a/data/po/en_PH.po b/data/po/en_PH.po
new file mode 100644 (file)
index 0000000..7996bb8
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Up"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Home"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "View by list"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "View by thumbnail"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Delete failed"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM file. Cannot send"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Invalid file name"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Maximum folder reached"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permission denied"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Send failed"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "The destination folder is a subfolder of the source folder"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "This file does not exist"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Unable to copy"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Unable to move"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Not enough memory in phone memory. Delete some items and try again"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Copying failed"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Moving failed"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Not enough memory. %s available"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Same name already in use"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Unable to move. Destination folder same as source folder"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Create folder"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Paste here"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alerts"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Wallpapers"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Phone"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Images"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sounds"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Downloads"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Memory card"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "External storage"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Edit"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Delete"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Move"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Up"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Move here"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copy"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sort by"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Search"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "More"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Create folder"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Folder name"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "My album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "View as"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Back"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "My video clips"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Right status"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Vendor"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Count"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Contains"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individual"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Rename"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Time"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Timed count"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Type"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Unlimited"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Replace"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Caller ringtone"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Name"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copied"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nothing selected"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Not enough heap memory"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Not enough memory. Delete some items"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Created date"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS information"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS latitude"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS longitude"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS version"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Details"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Any"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Available uses"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Execute"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Forwarding"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Impossible"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC data is initializing…"
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Possible"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Print"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Validity"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "New folder"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Edit"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "List by"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Move here"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Continue"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Copying..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Paste here"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Unsupported file type"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detail view"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Ascending"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Descending"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "All"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Search all folders"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Thumbnail view"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Show file extension"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sort by"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "List and details"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Folder name already exists"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Hide file extension"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Name (A to Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Name (Z to A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Date (Most recent)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Date (Oldest)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Go to My Files"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Ringtones"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "No face detected"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Add to home"
+
diff --git a/data/po/en_US.po b/data/po/en_US.po
new file mode 100644 (file)
index 0000000..7996bb8
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Up"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Home"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "View by list"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "View by thumbnail"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Delete failed"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM file. Cannot send"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Invalid file name"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Maximum folder reached"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permission denied"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Send failed"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "The destination folder is a subfolder of the source folder"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "This file does not exist"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Unable to copy"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Unable to move"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Not enough memory in phone memory. Delete some items and try again"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Copying failed"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Moving failed"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Not enough memory. %s available"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Same name already in use"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Unable to move. Destination folder same as source folder"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Create folder"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Paste here"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alerts"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Wallpapers"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Phone"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Images"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sounds"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Downloads"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Memory card"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "External storage"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Edit"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Delete"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Move"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Up"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Move here"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copy"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sort by"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Search"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "More"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Create folder"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Folder name"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "My album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "View as"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Back"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "My video clips"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Right status"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Vendor"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Count"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Contains"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individual"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Rename"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Time"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Timed count"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Type"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Unlimited"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Replace"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Caller ringtone"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Name"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copied"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nothing selected"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Not enough heap memory"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Not enough memory. Delete some items"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Created date"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS information"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS latitude"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS longitude"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS version"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Details"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Any"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Available uses"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Execute"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Forwarding"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Impossible"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC data is initializing…"
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Possible"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Print"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Validity"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "New folder"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Edit"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "List by"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Move here"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Continue"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Copying..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Paste here"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Unsupported file type"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detail view"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Ascending"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Descending"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "All"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Search all folders"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Thumbnail view"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Show file extension"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sort by"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "List and details"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Folder name already exists"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Hide file extension"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Name (A to Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Name (Z to A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Date (Most recent)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Date (Oldest)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Go to My Files"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Ringtones"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "No face detected"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Add to home"
+
diff --git a/data/po/es_ES.po b/data/po/es_ES.po
new file mode 100644 (file)
index 0000000..3b55ddc
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Arriba"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Inicio"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Ver por lista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Ver en miniaturas"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Error al borrar"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Archivo DRM. No se puede enviar"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nombre de archivo no válido"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Máximo"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permiso denegado"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Error de envío"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "La carpeta de destino es una subcarpeta de la carpeta de origen"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "El archivo no existe"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "No se puede copiar"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "No se puede mover"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "No hay espacio suficiente en la memoria del teléfono. Elimine algunos elementos y vuelva a intentarlo"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Error al copiar"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Error al mover"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "No hay memoria suficiente. %s disponible"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "El mismo nombre ya está en uso"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "No se puede mover. La carpeta de destino es la misma que la de origen"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Pegar aquí"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alertas"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fondos de pantalla"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Teléfono"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Imágenes"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Vídeos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sonidos"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Descargas"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Tarjeta memoria"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Almacenamiento externo"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Mover"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Arriba"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Mover aquí"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copiar"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Buscar"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Más"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nombre de carpeta"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mi álbum"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Ver como"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Atrás"
+
+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_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_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_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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Todos"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Buscar todas las carp."
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Vista en miniatura"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Mostrar extensiones de los archivos"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista y detalles"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "El nombre de carpeta ya existe"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ocultar ext archivo"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nombre (A a Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nombre (Z a A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Fecha (más reciente)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Fecha (más antiguo)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Ir a Mis archivos"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Melodías"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Ninguna cara detectada"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Añadir a inicio"
+
diff --git a/data/po/es_MX.po b/data/po/es_MX.po
new file mode 100644 (file)
index 0000000..8161633
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Arriba"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Inicio"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Ver por lista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Ver como diapositiva"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Error al eliminar"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Archivo DRM. No se puede enviar"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nombre de fichero incorrecto"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Máximo"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permiso denegado"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Error de envío"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "La carpeta de destino es una subcarpeta de la carpeta de origen"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "El archivo no existe"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "No se puede copiar"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "No se puede mover"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Memoria insuficiente en la memoria del teléfono. Elimine algunos elementos e inténtelo de nuevo"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Error al copiar"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Error al mover"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Memoria insuficiente. %s disponible"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Ya existe ese nombre"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "No se puede mover. La carpeta de destino es la misma que la de origen"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Pegar aquí"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alertas"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fondos de pantalla"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Teléfono"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Imágenes"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sonidos"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Descargas"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Tarjeta de memoria"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Almacenamiento externo"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Mover"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Arriba"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Mover aquí"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copiar"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Buscar"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Más"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nombre de carpeta"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mi álbum"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Ver por"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Atrás"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mis videos"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Estados de derechos"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Proveedor"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Recuento"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Contenido"
+
+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 "Fecha"
+
+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 "ID del llamante"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nombre"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copiado"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "No se ha seleccionado nada"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "No hay suficiente área de memoria dinámica"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Memoria insuficiente. Elimine algunos elementos"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Crear fecha"
+
+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_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 "Reenvío"
+
+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 "Ordenar 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_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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Todo"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Buscar en todas carp."
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Ver por miniatura"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Mostrar extensión del archivo"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista y detalles"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "El nombre de carpeta ya existe"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ocultar ext. del arch."
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nombre (A a Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nombre (Z a A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Fecha (más reciente)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Fecha (más antigua)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Ir a Mis Archivos"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Tonos de llamada"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Ningún rostro detectado"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Añadir al inicio"
+
diff --git a/data/po/es_US.po b/data/po/es_US.po
new file mode 100644 (file)
index 0000000..ff81b32
--- /dev/null
@@ -0,0 +1,309 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Arriba"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Inicio"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Ver por lista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Ver como diapositiva"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Error al eliminar"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Archivo DRM. No se puede enviar"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nombre de fichero incorrecto"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Máximo"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permiso denegado"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Error de envío"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "La carpeta de destino es una subcarpeta de la carpeta de origen"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "El archivo no existe"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "No se puede copiar"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "No se puede mover"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Memoria insuficiente en la memoria del teléfono. Elimine algunos elementos e inténtelo de nuevo"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Error al copiar"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Error al mover"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Memoria insuficiente. %s disponible"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Ya existe ese nombre"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "No se puede mover. La carpeta de destino es la misma que la de origen"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Pegar aquí"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alertas"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fondos de pantalla"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Teléfono"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Imágenes"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sonidos"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Descargas"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Tarjeta de memoria"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Almacenamiento externo"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Mover"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Arriba"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Mover aquí"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copiar"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Buscar"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Más"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nombre de carpeta"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mi álbum"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Ver por"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Atrás"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mis videos"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Estados de derechos"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Proveedor"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Recuento"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Contenido"
+
+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 "ID del llamante"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nombre"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copiado"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "No se ha seleccionado nada"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "No hay suficiente área de memoria dinámica"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Memoria insuficiente. Elimine algunos elementos"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Crear fecha"
+
+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_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 "Reenvío"
+
+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 "Ordenar 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_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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Todo"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Buscar en todas carp."
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Ver por miniatura"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Mostrar extensión del archivo"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista y detalles"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ocultar ext. del arch."
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nombre (A a Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nombre (Z a A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Fecha (más reciente)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Fecha (más antigua)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Ir a Mis Archivos"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Tonos de llamada"
+
diff --git a/data/po/et.po b/data/po/et.po
new file mode 100644 (file)
index 0000000..115aeb6
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Üles"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Avaleht"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Kuva loendi järgi"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Vaata pisipiltidena"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "BT-peakomplekt sees"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM kaitsega fail. Ei saa saata"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Vigane failinimi"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Saavutatud on maksimaalne kaustade arv"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Loast keelduti"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Saatmine nurjus"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Sihtkaust on lähtekausta alamkaust"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Seda faili pole olemas"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Ei saa kopeerida"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Ei saa teisaldada"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Telefoni mälus pole piisavalt vaba ruumi. Kustutage mõned üksused ja proovige uuesti"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Teisaldamine nurjus"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Teisaldamine nurjus"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Pole piisavalt mälu. %s saadaval"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "See nimi on juba kasutusel"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Ei saa teisaldada. Sihtkaust ühtib allikaga"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Loo kaust"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Kleebi siia"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Automaatne salvestamine"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Taustpildid"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Pildid"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videod"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Helid"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Allalaet. failid"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Mälukaart"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Välismälu"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Muuda"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Kustuta"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Teisalda"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Üles"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Teisalda siia"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopeeri"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sortimine:"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Otsi"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Veel"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Loo kaust"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Kausta nimi"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Minu album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Kuvamisviis"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Tagasi"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Minu videoklipid"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Õiguse olek"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Tarnija"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Loendamine"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Sisaldab"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individuaalne"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Intervall"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Nim üm"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Kellaaeg"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Piiratud aeg"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tüüp"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Piiramatu"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Asenda"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Helistaja helin"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nimi"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopeeritud"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Valik tegemata"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Ei ole piisavalt mälu"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Mälu pole piisavalt. Kustutage mõned üksused"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Loomise kuupäev"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS-teave"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS-laius"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS-pikkus"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS-i versioon"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Üksikasjad"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Ükskõik milline"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Võimalikud kasutusviisid"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Käivita"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Edastamine"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Võimatu"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC andmed lähtestatakse..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Võimalik"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Prindi"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Kehtivus"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Uus kaust"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Muuda"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Loendi järgi"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Teisalda siia"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Jätka"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopeerimine..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Kleebi siia"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Toetuseta failitüüp"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Üksikasjalik vaade"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Tõusev"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Langev"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Kõik"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Otsi kaustadest"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Pisipildivaade"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Kuva faililaiend"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sortimisalus"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Loend ja üksikasjad"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Kaustanimi on juba olemas"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Peida faililaiend"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nimi (A‒Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nimi (Z‒A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Kuupäev (kõige hilisemast)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Kuupäev (kõige vanemast)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Mine Minu Failidesse"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Helinad"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nägu pole tuvastatud"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Lisa avaekr.-le"
+
diff --git a/data/po/eu.po b/data/po/eu.po
new file mode 100644 (file)
index 0000000..f0b840a
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Gora"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Etxea"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Zerrenda bidez ikusi"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Miniatura bidez ikusi"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Akatsa ezabatzerakoan"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM artxiboa. Ezin da bidali"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Fitxategi izen baliogabea"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Gehienezko karpeta kopurura heldu da"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Baimena ukatuta"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Akatsa bidaltzerakoan"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Helburu karpeta sorburu karpetaren azpi-karpeta bat da"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Fitxategia ez dago"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Ezin da kopiatu"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Ezin da mugitu"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Ez dago nahikoa memoria telefonoan. Ezabatu hainbat elementu eta saiatu berriz"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Errorea kopiatzerakoan"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Errorea mugitzerakoan"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Ez dago memoria nahikorik. %s erabilgarri"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Izen bera dagoeneko erabiltzen"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Ezin da mugitu. Jomugako karpeta jatorrizkoa bera da"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Sortu karpeta"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Hemen erantsi"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Abisuak"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Pantaila atzealdea"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefonoa"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Irudiak"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Bideoak"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Soinuak"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Deskargak"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Memoria txartela"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Kanpo memoria"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editatu"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Ezabatu"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Mugitu"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Gora"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Hona mugitu"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopiatu"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sailkatu honela"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Bilatu"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Gehiago"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Karpeta sortu"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Karpetaren izena"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Nire albuma"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Nola ikusi"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "ATZERA"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Nire bideo klipak"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Egoera egokia"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Hornitzailea"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Kontatu"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Edukiak"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Indibiduala"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Tartea"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Berrizend."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Ordua"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Mugatutako zenbaketa"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Mota"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Mugagabea"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Ordeztu"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Dei egilearen dei doinua"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Izena"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopiatuta"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Ez da ezer aukeratu"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Ez dago pilatutako memoria nahikoa"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Ez dago memoria nahikoa. Elementu batzuk ezabatu"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Sortutako data"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS informazioa"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS latitudea"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS longitudea"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS bertsioa"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Xehetasunak"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Edozein"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Erabilera eskuragarriak"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Abiarazi"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Birbidaltzea"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Ezinezkoa"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC datuak abiarazten..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Posible"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Inprimatu"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Baliozkotasuna"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Karpeta berria"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Editatu"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Honen arabera zerrendatu"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Hona mugitu"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Jarraitu"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopiatzen..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Hemen erantsi"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Fitxategi mota ez bateragarria"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Xehetasun ikuspegia"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Goranzkoa"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Beheranzkoa"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Guztia(k)"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Bilatu karpeta guztiak"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniatura ikuspegia"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Erakutsi fitxategiaren luzapena"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Honen bidez antolatu"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Zerrenda eta xehetasunak"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Karpetaren izena dagoeneko bada"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ezkutatu fitx. luzapena"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Izena (Atik Zra)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Izena (Ztik Ara)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Data (Berriena)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Data (Zaharrena)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Joan Nire Fitxat."
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Dei doinuak"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Ez da aurpegirik detektatu"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Gehitu nagusira"
+
diff --git a/data/po/fi.po b/data/po/fi.po
new file mode 100644 (file)
index 0000000..e1725a4
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Ylös"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Koti"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Katso luettelossa"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Näytä pikkukuvina"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Poisto epäonnistui"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM-tiedosto. Ei voi lähettää"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Virheellinen tiedostonimi"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Kansioiden enimmäismäärä saavutettu"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Lupa evätty"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Lähetys epäonnistui"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Kohdekansio on lähdekansion alikansio"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Tiedostoa ei ole"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Ei voi kopioida"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Ei voi siirtää"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Puhelimen muisti ei riitä. Poista kohteita ja yritä uudelleen"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopiointi epäonnistui"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Siirto epäonnistui"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Muisti ei riitä. %s käytettävissä"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Sama nimi on jo käytössä"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Ei voi siirtää. Kohdekansio on sama kuin lähdekansio"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Luo kansio"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Liitä tänne"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Hälytykset"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Taustakuvat"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Puhelin"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Kuvat"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videot"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Äänet"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Lataukset"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Muistik."
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Ulk. tallennuslaite"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Muokkaa"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Poista"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Siirrä"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Ylös"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Siirrä tänne"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopioi"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Laj.per."
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Etsi"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Lisää"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Luo kansio"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Kansion nimi"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Oma albumi"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Katsele muodossa"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Takaisin"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Omat videoleikkeet"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Oikeustila"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Toimittaja"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Määrä"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Sisältää"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Yksittäinen"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Väli"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "N.uud."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Aika"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Ajoitettu määrä"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tyyppi"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Rajoittamaton"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Korvaa"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Soittajan soittoääni"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nimi"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopioitu"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Mitään ei valittu"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Kekomuisti ei riitä"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Muisti ei riitä. Poista joitain kohteita"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Luontipäivämäärä"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS-tiedot"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS-leveysaste"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS-pituusaste"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS-versio"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Lisätiedot"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Mikä tahansa"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Jäljellä olevat käyttökerrat"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Suorita"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Edelleenlähetys"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Mahdoton"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC-tietoja alustetaan..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Mahdollinen"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Tulosta"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Kelpoisuus"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Uusi kansio"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Muokkaa"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Lajitteluperuste"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Siirrä tänne"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Jatka"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopioidaan..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Liitä tänne"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Tiedostotyyppiä ei tueta"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Tarkka näkymä"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Nouseva"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Laskeva"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Kaikki"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Hae kaikista kansioista"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Pikkukuvanäkymä"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Näytä tiedostotunniste"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Lajitteluperuste"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Luettelo ja tiedot"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Kansion nimi on jo olemassa"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Piilota tiedostolaaj."
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nimi (A–Ö)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nimi (Ö–A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Päivämäärä (Uusimmat)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Päivämäärä (Vanhimmat)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Siirry Omiin tiedostoihin"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Soittoäänet"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Kasvoja ei tunnistettu"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Lisää etusivulle"
+
diff --git a/data/po/fr_CA.po b/data/po/fr_CA.po
new file mode 100644 (file)
index 0000000..07b8c60
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Haut"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Accueil"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Afficher par liste"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Afficher par miniature"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Échec de suppression"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Fichier GDN. Envoi impossible"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nom de fichier incorrect"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Capacité maximum atteinte"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Autorisation refusée"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Envoi échoué"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Le dossier cible est un sous-dossier du dossier source"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Fichier inexistant"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Copie impossible"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Déplacement impossible"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Mémoire du téléphone insuffisante. Supprimez certains éléments et réessayez"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Échec de copie"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Échec du déplacement"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Mémoire insuffisante. %s disponible(s)"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Nom déjà utilisé"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Déplacement impossible. Les dossiers source et cible sont identiques"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Créer dossier"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Coller ici"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alertes"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fonds d'écran"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Téléphone"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Images"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Vidéos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sons"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Télécharg."
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Carte mémoire"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Stockage externe"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Modifier"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Déplacer"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Haut"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Déplacer ici"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copier"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Trier par"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Rechercher"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Plus"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Créer un dossier"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nom de dossier"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mon album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Afficher comme"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Retour"
+
+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 "Renom."
+
+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 de l'appelant"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nom"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copié"
+
+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_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_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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Tout"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Rech. dans ts dossiers"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Affichage miniature"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Afficher l'extension du fichier"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Trier par"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Liste et détails"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Nom de dossier existe déjà"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Masq. extens. fichier"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nom (A à Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nom (Z à A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Date (les plus récents)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Date (les plus anciens)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Accès à Mes fichiers"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Sonneries"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Aucun visage détecté"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Aj. à l'accueil"
+
diff --git a/data/po/fr_FR.po b/data/po/fr_FR.po
new file mode 100644 (file)
index 0000000..64e3b3f
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Haut"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Accueil"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Afficher par liste"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Afficher par miniature"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Échec de suppression"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Fichier DRM. Envoi impossible"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nom de fichier incorrect"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Capacité maximum atteinte"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Autorisation refusée"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Envoi impossible"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Le dossier cible est un sous-dossier du dossier source"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Fichier inexistant"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Copie impossible."
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Déplacement impossible"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Mémoire du téléphone insuffisante. Supprimez certains éléments et réessayez"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Échec copie"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Échec du déplacement"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Mémoire insuffisante. %s disponible(s)"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Nom déjà utilisé"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Déplacement impossible. Les dossiers source et cible sont identiques"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Créer dossier"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Coller ici"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alertes"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fonds d'écran"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Téléphone"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Images"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Vidéos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sons"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Téléchargements"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Carte mémoire"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Stockage externe"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Modifier"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Supprimer"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Déplacer"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Haut"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Déplacer ici"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copier"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Trier par"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Chercher"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Plus"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Créer dossier"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nom de dossier"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mon album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Visualiser comme"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Retour"
+
+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 "Contenu"
+
+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 d'appelant"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nom"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copié"
+
+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_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_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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Tout"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Rech. dans ts dossiers"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Affichage miniature"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Afficher l'extension du fichier"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Trier par"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Liste et détails"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Nom de dossier déjà utilisé"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Masq. extens. fichier"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nom (A à Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nom (Z à A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Date (Les plus récents)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Date (Les plus anciens)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Accès à Mes fichiers"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Sonneries"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Aucun portrait détecté"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Aj. à l'accueil"
+
diff --git a/data/po/ga.po b/data/po/ga.po
new file mode 100644 (file)
index 0000000..340f171
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Suas"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Baile"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Amharc de réir liosta"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Amharc de réir mionsamhla"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Theip ar scriosadh"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Comhad DRL. Ní féidir seoladh"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Comhadainm neamhbhailí"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Uaslíon na bhfillteán bainte amach"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Cead séanta"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Theip ar sheoladh"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Is fo-fhillteán de chuid an fhillteáin fhoinsigh é an fillteán sprice"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Níl an comhad seo ann"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Ní féidir cóipeáil"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Ní féidir bogadh"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Easpa cuimhne san fhón. Scrios roinnt míreanna agus triail arís"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Theip ar chóipeáil"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Theip ar bhogadh"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Easpa cuimhne. %s ar fáil"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Ainm céanna in úsáid cheana"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Ní féidir bogadh. Is ionann an fillteán sprice agus an fillteán fuinseach"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Déan fillteán"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Greamaigh anseo"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Foláirimh"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Cúlbhrait"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Fón"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Íomhánna"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Físeáin"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Fuaimeanna"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Ioslódálacha"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Cárta cuimhne"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Stóras seachtrach"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Cuir in eagar"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Scrios"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Bog"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Suas"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Bog anseo"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Cóipeáil"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sórtáil de réir"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Cuardach"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Tuilleadh"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Déan fillteán"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Ainm an fhillteáin"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "M'albam"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Amharc mar"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Siar"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mo ghearrthóga físe"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Stádas ceart"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Díoltóir"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Áireamh"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Istigh tá:"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Duine aonair"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Eatramh"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Athainm"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Am"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Áireamh amaithe"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Cineál"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Gan teorainn"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Ionadú"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Clingthon glaoiteora"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Ainm"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Cóipeáilte"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Dada roghnaithe"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Easpa carnchuimhne"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Easpa cuimhne. Scrios roinnt míreanna"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Dáta cruthaithe"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "Faisnéis faoi GPS"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "Domhanleithead GPS"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "Domhanfhad GPS"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "Leagan GPS"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Sonraí"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Ceann ar bith"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Úsáidí atá ar fáil"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Rith"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Seoladh ar aghaidh"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Dodhéanta"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Sonraí MMC á dtúsú..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Indéanta"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Priontáil"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Bailíocht"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Fillteán nua"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Cuir in eagar"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Liostaigh de réir"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Bog anseo"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Ar aghaidh"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Ag cóipeáil..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Greamaigh anseo"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Cineál comhaid gan tacú"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Amharc ar shonraí"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Ardaitheach"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "In ord íslitheach"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Gach"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Cuardaigh gach fillteán"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Radharc mionsamhla"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Taispeáin iarmhír chomhadainm"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sórtáil de réir"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Liosta agus sonraí"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Ainm an fhillteáin ann cheana"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Fol. iarmhír comhaid"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Ainm (A go Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Ainm (Z go A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Dáta (Cinn is déanaí)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Dáta (Cinn is sine)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Gabh go Mo Chomhaid"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Clingthoin"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Níor aimsíodh aghaidh"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Cuir le baile"
+
diff --git a/data/po/gl.po b/data/po/gl.po
new file mode 100644 (file)
index 0000000..18a036e
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Arriba"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Particular"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Ver por lista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Ver en miniatura"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Erro ao eliminar"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Arquivo DRM. Non se pode enviar"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nome de arquivo non válido"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Número máximo de carpetas alcanzado"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permiso denegado"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Erro ao enviar"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "A carpeta de destino é unha subcarpeta da carpeta de orixe"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "O arquivo non existe"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Non se pode copiar"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Non se pode mover"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Non hai suficiente memoria no teléfono. Elimina algúns elementos e inténtao de novo"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Erro ao copiar"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Erro ao mover"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Non hai suficiente memoria. %s dispoñible"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Este nome xa está en uso"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Non se pode mover. Mesma carpeta de destino que de orixe"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Pegar aquí"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alertas"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fondos"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Teléfono"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Imaxes"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Vídeos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sons"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Descargas"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Tarx. de memoria"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Almacenamento externo"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Mover"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Arriba"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Mover aquí"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copiar"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Buscar"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Máis"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Crear carpeta"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nome de carpeta"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "O meu Álbum"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Ver como"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Atrás"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Os meus videoclips"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Estado correcto"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Provedor"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Contar"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Contén"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individual"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Intervalo"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "C nome"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Hora"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Conta restante"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tipo"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Ilimitada"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Substit"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Melodía do chamante"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nome"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copiado"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Non se seleccionou nada"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Non hai suficiente memoria dinámica"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Non hai suficiente memoria. Elimine algúns elementos"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Data de creación"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "Información GPS"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "Latitude GPS"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "Lonxitude GPS"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "Versión GPS"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Detalles"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Calquera"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Usos dispoñibles"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Executar"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Reenviando"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Non é posible"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Os datos MMC estanse 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 "Nova carpeta"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Ordenar 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_PASTE_HERE"
+msgstr "Pegar aquí"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Tipo de arquivo non admitido"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Vista detallada"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Ascendente"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Descendente"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Todo"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Buscar todas carpetas"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Vista en miniatura"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Mostrar extensión do arquivo"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista e detalles"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "O nome da carpeta xa existe"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ocult. extens. arquivo"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nome (A-Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nome (Z-A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Data (A máis recente)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Data (A máis antiga)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Ir a Os Meus Arquiv"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Melodías"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Non se detectou ningunha cara"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Engad. ao inicio"
+
diff --git a/data/po/hi.po b/data/po/hi.po
new file mode 100644 (file)
index 0000000..fb5ecce
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "ऊपर"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "घर"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "सूची से देखें"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "थंबनेल से देखें"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "हटाना विफल"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM फाइल। भेज नहीं सकते"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "फाइल नाम अवैध है"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "अधिकतम फ़ोल्‍डर पहुँचे"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "अनुमति से इनकार"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "भेजना असफल"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "गंतव्य फ़ोल्डर स्त्रोत फ़ोल्डर का उप फ़ोल्डर है"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "यह फ़ाइल मौजूद नहीं है"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "कॉपी करने में अक्षम"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "मूव करने में अक्षम"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "फ़ोन मेमोरी में पर्याप्त मेमोरी नहीं है। कुछ आइटम्स हटाएँ और फिर प्रयास करें"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "कॉपी करना विफल"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "ले जाना विफल हुआ"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "पर्याप्‍त मेमोरी नहीं है। %s उपल्‍ब्‍ध है"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "ऐसा ही नाम पहले से इस्तेमाल में है"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "मूव करने में असमर्थ। गंतव्य फोल्डर स्रोत फोल्डर की तरह है"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "फ़ोल्‍डर बनाएँ"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "यहाँ पेस्‍ट करें"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "अलर्ट्स"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "वॉलपेपर्स"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "फोन"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "छवियाँ"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "विडियो"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "ध्वनियाँ"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "डाउनलोड"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "मेमोरी कार्ड"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "बाह्य स्टोरेज"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "संपादन"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "हटाएँ"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "मूव"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "ऊपर"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "यहाँ मूव करें"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "कॉपी"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "द्वारा छाँटें"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "खोजें"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "अधिक"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "फोल्डर बनाएँ"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "फोल्डर का नाम"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "मेरी एल्बम"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "के रूप में देखें"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "अवरोही क्रम"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "सभी"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "सभी फ़ोल्डर खोजें"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "थम्बनेल दृश्य"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "फ़ाइल एक्स्टेंशन दिखाएँ"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "से छाटें"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "सूची और विवरण"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "फ़ोल्डर का नाम पहले से मौजूद है"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "फ़ाइल एक्सटेंशन छिपाएँ"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "नाम (A से Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "नाम (Z से A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "तारीख (हालही का सबसे नवीनतम)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "तारीख (सबसे पुराने)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "मेरी फाइल्स में जाएँ"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "रिंगटोन"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "कोई चेहरा पहचाना नहीं गया"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "होम में जोड़े"
+
diff --git a/data/po/hr.po b/data/po/hr.po
new file mode 100644 (file)
index 0000000..25d7730
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Gore"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Početna"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Prikaz po popisu"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Prikaži kao sličice"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Brisanje neuspješno"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Zaštićena datoteka. Nemoguće poslati"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Neispravno ime datoteke"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Dostignut maksimalan broj mapa"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Dozvola odbijena"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Slanje neuspješno"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Odredišna mapa je podmapa izvorišne mape"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Datoteka ne postoji"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Nemoguće kopirati"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Nemoguće premjestiti"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Nedovoljno memorije u telefonu. Obrišite stavke i ponovite"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopiranje neuspješno"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Premještanje neuspješno"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Nedovoljno memorije. Dostupno %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Već postoji isto ime"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Nemoguće premjestiti. Odredišna mapa ista je kao i izvorna"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Nova mapa"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Zalijepi ovdje"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Upozorenja"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Pozadine"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Slike"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Video"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Zvukovi"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Skidanja"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Mem. kartica"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Vanjska memorija"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Uredi"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Obriši"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Premjesti"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Gore"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Premjesti ovdje"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopiraj"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Poredaj po"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Traži"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Više"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Nova mapa"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Ime mape"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Moj album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Pregled kao"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Nazad"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Moj video"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Prava"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Dobavljač"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Broj"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Sadrži"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individualno"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Pr.ime"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Vrijeme"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Preostalo vrijeme"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Vrsta"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Neograničeno"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Zamijeni"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Ton pozivatelja"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Naziv"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopirano"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Ništa odabrano"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Nedovoljno pričuvne memorije"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Nedovoljno memorije. Obrišite neke datoteke"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Datum izrade"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS podaci"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS zemljopisna širina"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS zemljopisna dužina"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS inačica"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Detalji"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Bilo koji"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Preostalo upotreba"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Pokreni"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Prosljeđivanje"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Nemoguće"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Učitavanje podataka mem. kartice..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Moguće"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Ispis"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Valjanost"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Nova mapa"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Uredi"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Sortiraj po"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Premjesti ovdje"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Nastavak"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopiranje..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Zalijepi ovdje"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodržana datoteka"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detaljni prikaz"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "A-Z"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Z-A"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Sve"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Pretraži sve mape"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Sličice"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Prikaz ekstenzija datoteka"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sortiraj po"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Popis i detalji"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Ime mape već postoji"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Sakrij datotečni nast."
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Naziv (A do Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Naziv (Z do A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Datum (najnoviji)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Datum (najstariji)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Idi u Datoteke"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Tonovi zvona"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Lice nije prepoznato"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Dodaj na početnu"
+
diff --git a/data/po/hu.po b/data/po/hu.po
new file mode 100644 (file)
index 0000000..0bb3f28
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Fel"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Kezdőkép."
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Listanézet"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Megtekintés miniatűr képként"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Törlés sikertelen"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM-fájl. Küldés nem lehetséges"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Érvénytelen fájlnév"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Maximum mappaszám elérve"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Engedély megtagadva"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Sikertelen küldés"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "A célmappa a forrásmappa almappája"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "A fájl nem létezik"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Nem lehet átmásolni"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Nem helyezhető át"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Kevés a memória a telefonban. Töröljön néhány tételt, és próbálja újra"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "A másolás sikertelen."
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Az áthelyezés sikertelen"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Kevés a memória. A szabad memória %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Már van ilyen név"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Nem lehet áthelyezni. A célmappa azonos a forrásmappával"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Mappát létrehoz"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Beilleszt ide"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Jelzések"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Háttérképek"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Képek"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videók"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Hangok"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Letöltések"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Memória- kártya"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Külső tároló"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Szerkeszt"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Töröl"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Áthelyez"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Fel"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Áthelyez ide"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Másol"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Rendezés szemp."
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Keres"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Egyebek"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Mappa létrehozása"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Mappa neve"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Saját album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Megtekintés"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Vissza"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Saját videofelvételek"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Jogi státusz"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Szállító"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Számláló"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Tartalmazott elem"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Egyéni"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Intervallum"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Átnev."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Idő"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Időszámláló"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Típus"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Korlátlan"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Csere"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Hívó csengőhangja"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Név"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Átmásolva"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Semmi nincs kiválasztva"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Kevés a halommemória"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Kevés a memória. Töröljön néhány tételt"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Létrehozás dátuma"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS-adatok"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS-szélesség"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS-hosszúság"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS-verzió"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Részletek"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Bármely"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Lehetséges felhasználás"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Végrehajt"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Továbbítás"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Nem lehetséges"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC-adatok inicializálása..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Lehetséges"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Nyomtatás"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Érvényesség"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Új mappa"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Szerkeszt"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Rendezés"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Áthelyezés ide"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Tovább"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Másolás..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Beillesztés ide"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "A fájltípus\nnem támogatott"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Részletes nézet"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Növekvő"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Csökkenő"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Mind"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Ker. az összes mappában"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniatűrnézet"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Fájlkiterjesztés megjelenítése"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Rendezés"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista és részletek"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "A mappanév már létezik."
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Kiterjesztés elrejtése"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Név (A-tól Z-ig)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Név (Z-től A-ig)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Dátum (legújabb)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Dátum (legrégebbi)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Saját fájlok megny."
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Csengőhangok"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nincs észlelt arc"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Kezdőképernyőre"
+
diff --git a/data/po/hy.po b/data/po/hy.po
new file mode 100644 (file)
index 0000000..76b1287
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Վեր"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Տուն"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Դիտել ըստ ցանկի"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Դիտել ըստ մանրապատկերների"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Ջնջումը ձախողվեց"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM ֆայլ: Հնարավոր չէ ուղարկել"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Անվավեր ֆայլի անուն"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Հասել եք թղթապանակների առավելագույն քանակի"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Թույլտվությունը մերժվեց"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Ուղարկման ձախողում"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Նշանակման թղթապանակը հանդիսանում է սկզբնական թղթապանակի ենթաթղթապանակ"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Այս ֆայլը գոյություն չունի"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Հնարավոր չէ պատճենել"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Անհնար է տեղափոխել"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Բավարար տեղ չկա հեռախոսի հիշողության մեջ: Վերացրեք որոշ տարրեր և նորից փորձեք"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Պատճենումը ձախողվեց"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Տեղափոխումը ձախողվեց"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Չկա բավական հիշողություն: %s-ը հասանելի է"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Նույն անունն արդեն օգտագործվում է"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Հնարավոր չէ տեղափոխել: Նշանակման թղթապանակը նույնն է, ինչ որ սկզբնական թղթապանակը"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Ստեղծել թղթպանակ"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Տեղադրել այստեղ"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Ազդանշաններ"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Պաստառներ"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Հեռախոս"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Պատկերներ"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Տեսահոլովակներ"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Ձայներ"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Բեռնումներ"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Հիշաքարտ"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Արտաքին պահոց"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Խմբագրել"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Ջնջել"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Տեղափխել"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Վերև"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Տեղափոխել այստեղ"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Պատճենել"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Տեսակավորել ըստ"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Որոնում"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Ավելի"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Ստեղծել թղթապանակ"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Թղթապանակի անունը"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Իմ ալբոմը"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Դիտել որպեսշ"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "Նվազող"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Բոլոր"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Որոնեք բոլոր թղթպնկները"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Փոքրացված պատկերների տեսք"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Ցույց տալ ֆայլի ընդլայնումը"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Տեսակավորել ըստ"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Ցուցակ և մանրամասներ"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Թղթապանակի անունն արդեն գոյություն ունի"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Թքցնլ ֆայլի ընդլայնում"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Անուն (Ա-ից Ֆ)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Անուն (Ֆ-ից Ա)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Ամսաթիվ (առավել վերջին)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Ամսաթիվ (ամենահին)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Գնալ Իմ Ֆայլերը"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Մեղեդիներ"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Ոչ մի դեմք չի ճանաչվել"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Ավ. հիմն. էկրնին"
+
diff --git a/data/po/is.po b/data/po/is.po
new file mode 100644 (file)
index 0000000..6d02be8
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Upp"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Heima"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Birta lista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Birta eftir smámyndum"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Ekki tókst að eyða"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM skrá. Ekki hægt að senda"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Ógilt skráarheiti"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Komið að hámarki möppu"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Leyfi var hafnað"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Sending mistókst"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Áfangamappa er undirmappa í upprunamöppunni"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Skráin er ekki til"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Mistókst að afrita"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Ekki hægt að flytja"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Það er of lítið minni í símanum. Eyddu einhverjum hlutum og reyndu aftur"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Afritun mistókst"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Ekki tókst að flytja"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Ekki er nægt minni. %s tiltækt"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Þetta heiti er þegar í notkun"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Ekki tókst að flytja. Áfangamappa sú sama og upprunamappa"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Búa til möppu"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Líma hér"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Áminningar"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Veggfóður"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Sími"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Myndir"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Myndskeið"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Hljóð"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Niðurhal"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Minnisk."
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Ytri geymsla"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Breyta"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Eyða"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Flytja"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Upp"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Færa hingað"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Afrita"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Raða eftir"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Leit"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Meira"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Búa til möppu"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Heiti möppu"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Albúm notanda"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Sjá sem"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "BAKKA"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Myndskeiðin mín"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Rétt staða"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Seljandi"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Fjöldi"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Inniheldur"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Stakt"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Bil"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Endurn"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Tími"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Tímasett"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tegund"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Án takmarkana"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Skip. út"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Hringitónn hringjanda"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Heiti"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Afritað"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Ekkert er valið"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Of lítið safnminni"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Ekki er nægt minni. Eyðið nokkrum atriðum"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Búið til"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS-upplýsingar"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS-breiddargráða"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS-lengdargráða"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS-útgáfa"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Upplýsingar"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Hvað sem er"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Tiltæk notkun"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Framkvæma"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Framsending"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Ekki hægt"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC-gögn ræsast..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Mögulegt"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Prenta"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Gildistími"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Ný mappa"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Breyta"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Raða eftir"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Færa hingað"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Halda áfram"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Afritun stendur yfir..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Líma hingað"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Óstutt skrársnið"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Upplýsingaskjár"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Hækkandi"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Lækkandi"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Allt"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Leita í öllum möppum"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Smámyndir"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Sýna skráargerð"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Raða eftir"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Listi og upplýsingar"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Sama skrárheiti er til fyrir"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Fela skráarendingu"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Heiti (A til Ö)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Heiti (Ö til A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Dagsetning (nýjasta)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Dagsetning (elsta)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Opna Skrárnar mínar"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Hringitónar"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Ekkert andlit greindist"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Bæta á heimaskjá"
+
diff --git a/data/po/it_IT.po b/data/po/it_IT.po
new file mode 100644 (file)
index 0000000..c3890e8
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Su"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Home"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Visualizza elenco"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Visualizza miniature"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Eliminazione non riuscita"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "File DRM. Impossibile inviare"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nome file non valido"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Massimo cartella raggiunto"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permesso negato"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Impossibile inviare"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "La cartella di destinazione è una sottocartella della cartella di origine"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "File inesistente"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Impossibile copiare"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Impossibile spostare"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Memoria insufficiente. Disinstallare alcuni elementi e riprovare"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Copia non eseguita"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Spostamento non riuscito"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Spazio insufficiente in memoria. %s disponibili"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Stesso nome già in uso"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Impossibile spostare. La cartella di destinazione coincide con la cartella di origine"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Crea cartella"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Incolla qui"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Avvisi"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Sfondi"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefono"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Immagini"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Video"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Suoni"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Download"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Scheda memoria"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Memoria esterna"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Modifica"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Elimina"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Sposta"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Su"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Sposta qui"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copia"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ordina per"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Cerca"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Altro"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Crea cartella"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nome cartella"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Visualizza come"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Indietro"
+
+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_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_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..."
+
+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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Tutto"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Cerca in tutte le cartelle"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Vista miniature"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Mostra estensione file"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ordina per"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Elenco e dettagli"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Nome cartella già esistente"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Nascondi estensione file"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nome (A - Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nome (Z - A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Data (Più recente)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Data (Più vecchia)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Vai all'Archivio"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Suonerie"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nessun volto rilevato"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Aggiungi a Home"
+
diff --git a/data/po/ja_JP.po b/data/po/ja_JP.po
new file mode 100644 (file)
index 0000000..65b1fae
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "戻る"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "ホーム"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "リスト表示"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "サムネイル表示"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "削除できませんでした。"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRMファイルです。送信できません。"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "ファイル名が正しくありません。"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "最大フォルダ数に達しました。"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "承認が拒否されました。"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "送信に失敗しました"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "移動元と移動先のフォルダが同じです。"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "このファイルは存在しません。"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "コピーできません。"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "移動できません。"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "システムメモリ(本体)が不足しています。不要なアイテムを削除し、再度実行してください。"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "コピーに失敗しました。"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "移動に失敗しました。"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "メモリ不足です。%s使用可能"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "同じ名前が既に使用されています"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "移動できません。移動元と移動先のフォルダが同じです。"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "フォルダ作成"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "ここに貼付"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "通知"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "壁紙"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "本体"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "画像"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "動画"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "サウンド"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "ダウンロード"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "メモリカード"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "外部ストレージ"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "編集"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "削除"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "移動"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "上"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "ここに移動"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "コピー"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "並べ替え"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "検索"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "その他"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "フォルダ作成"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "フォルダ名"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "マイアルバム"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "表示形式"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "降順"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "全て"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "全てのフォルダを検索"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "サムネイル表示"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "ファイル拡張子を表示"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "ソート"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "リストおよび詳細"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "このフォルダ名は既に使用されています。"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "ファイル拡張子を非表示"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "名前(A~Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "名前(Z~A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "日付(新しい順)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "日付(古い順)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "マイ​ファイル​に​移動"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "着信音"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "顔が検出されません。"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "ホームに追加"
+
diff --git a/data/po/ka.po b/data/po/ka.po
new file mode 100644 (file)
index 0000000..d8549f7
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "ზევით"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "საწყისი გვერდი"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "დათვალიერება სიით"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "დათვალიერება პიქტოგრამებით"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "წაშლა არ მოხერხდა"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM ფაილი. ვერ გაგზავნით"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "ფაილის არასწორი დასახელება"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "საქაღალდეების რაოდენობამ მაქსიმუმს მიაღწია"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "ნებართვა უარყოფილია"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "ვერ გაიგზავნა"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "საბოლოო საქაღალდე დევს საწყის საქაღალდეში"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "ფაილი არ არსებობს"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "ვერ დაკოპირდება"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "ვერ გადაადგილდება"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "ტელეფონში არ არის საკმარისი მეხსიერება. წაშალეთ ზოგიერთი ელემენტი და ისევ ცადეთ"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "გადაწერა არ მოხერხდა"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "გადატანა ვერ შესრულდა"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "მეხსიერება არ არის საკმარისი. დარჩენილია %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "იგივე სახელი უკვე გამოყენებულია"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "ვერ გადაიტანთ. საბოლოო და საწყისი საქაღალდეები ერთიდაიგივეა"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "საქაღალდის შექმნა"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "ჩასვით აქ"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "სიგნალები"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "ფონები"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "ტელეფონი"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "გამოსახულებები"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "ვიდეოები"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "ხმები"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "გადმოწერილები"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "მეხსიერ. ბარათი"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "გარე მეხსიერება"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "რედაქტირება"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "წაშლა"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "გადატანა"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "ზემოთ"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "გადაიტანეთ აქ"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "ასლი"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "დალაგება"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "ძიება"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "სხვა"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "შექმენი საქაღალდე"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "საქაღალდის სახელი"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "ჩემი ალბომი"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "დათვალიერება როგორც"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "კლებადი"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "ყველა"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "ყველა საქაღალდის ძებნა"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "მიკროასლების ნახვა"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "ჩანდეს ფაილის გაფართოება"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "გადარჩევა"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "სია და დეტალები"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "საქაღალდის სახელი უკვე არსებობს"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "გაფართოების დამალვა"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "სახელი (ა-დან ჰ-მდე)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "სახელი (ჰ-დან ა-მდე)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "თარიღი (უახლესი)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "თარიღი (ყველაზე ძველი)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "ჩემს ფაილებზე გადას."
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "ზარის მელოდიები"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "სახე არ არის დადგენილი"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "დაამატე საწყისზე"
+
diff --git a/data/po/kk.po b/data/po/kk.po
new file mode 100644 (file)
index 0000000..31081ea
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Жоғары"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Үй парағы"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Тізімді қарап шығу"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Нұсқадан көру"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Жою үстінде үзіліп кетті"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM файлы. Жіберу мүмкін емес"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Файлдың аты  қате"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Қапшықтар ең көп саны артты"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Рұқсаттан бас тартылды"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Жіберудің сәті түспеді"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Тағайындау қалтасы кіріс қалтасына салынған болып табылады"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Файл жоқ"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Көшіру мүмкін емес"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Жылжытуға мүмкіндік жоқ"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Телефон жадында жад жеткілікті емес. Біраз элементті жойып, қайталап көріңіз"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Көшірілу үзіліп кетті"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Орналастырылмады"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Жадында орын жетіспейді. %s бар"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Мұндай атау қолданыста бар"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Жылжытылмайды.Мақсатты қалта бастапқы қалтамен бірдей"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Қалта жасау"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Осында қою"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Дабыл қағу"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Түсқағаз"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Телефон"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Суреттер"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Бейнежазбалар"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Дыбыстар"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Жазылған"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Жад картасы"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Сыртқы жад"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Өзгер."
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Жою"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Ауыстыру"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Жоғары"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Осында ауыстыру"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Көшіру"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Сұрыптау"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Тізім"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Қосымша"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Қалтаны құру"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Папка аты"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Альбомым"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "түрінде көру"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "Кему"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Барлығы"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Барлық қалталарды іздеу"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Нобай көрінісі"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Файл кеңейтімін көрсету"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Бойынша сұрыптау"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Тізім және мәліметтер"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Қалтаның аты бар"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Файл кеңейтімін жасыру"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Аты (A-дан Я-ға дейін)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Аты (Я-дан А-ға дейін)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Күні (Ең соңғы)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Күні (Ең алдыңғы)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Менің файлдарыма өту"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Әуендер"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Бетті көрсетуге болмайды"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Баст. бетке қосу"
+
diff --git a/data/po/ko_KR.po b/data/po/ko_KR.po
new file mode 100644 (file)
index 0000000..e2e4572
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "위로"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "홈"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "목록 보기"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "썸네일 보기"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "삭제하지 못하였습니다"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM 파일은 전송할 수 없습니다"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "파일 이름이 바르지 않습니다"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "최대 폴더 수를 초과하였습니다"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "허가가 거부되었습니다"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "전송하지 못하였습니다"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "대상 폴더가 현재 폴더의 하위 폴더입니다"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "파일이 존재하지 않습니다"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "복사할 수 없습니다"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "이동시킬 수 없습니다"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "내장 메모리에 저장 공간이 부족합니다. 일부 항목을 삭제한 후 다시 시도하세요"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "복사하지 못하였습니다"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "이동하지 못하였습니다"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "메모리가 부족합니다. %s을(를) 사용할 수 있습니다"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "사용 중인 이름입니다"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "이동시킬 수 없습니다. 소스 폴더와 이름이 같습니다"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "폴더 추가"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "여기로 복사"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "알림"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "배경화면"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "휴대폰"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "이미지"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "동영상"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "사운드"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "다운로드 관리"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "메모리 카드"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "외장 메모리"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "편집"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "삭제"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "이동"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "상위"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "여기로 이동"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "복사"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "정렬"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "검색"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "더보기"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "폴더 추가"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "폴더 이름"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "내 앨범"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "보기 방식"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "내림차순"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "모두"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "모든 폴더 검색"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "썸네일 보기"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "파일 확장자 보기"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "정렬"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "목록 및 상세 정보"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "사용 중인 폴더 이름입니다"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "파일 확장자 숨기기"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "이름(가나다순)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "이름(가나다역순)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "날짜(최신순)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "날짜(오래된순)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "내 파일로 이동"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "벨소리"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "인식된 얼굴이 없습니다"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "홈에 추가"
+
diff --git a/data/po/lt.po b/data/po/lt.po
new file mode 100644 (file)
index 0000000..7e3e239
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Į viršų"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Pradž."
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Peržiūrėti pagal sąrašą"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Žiūrėti miniatiūras"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Ištrinti nepavyko"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM failas. Negalima siųsti"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Neleistinas failo pavadinimas"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Pasiektas maksimalus aplankų skaičius"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Leidimas atmestas"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Išsiųsti nepavyko"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Paskirties aplankas yra vidinis originaliojo aplanko aplankas"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Tokio failo nėra"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Negalima kopijuoti"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Negalima perkelti"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Nepakanka atminties telefone. Ištrinkite kai kuriuos elementus ir bandykite dar kartą"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Perkelti nepavyko"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Perkelti nepavyko"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Nepakanka atminties. Liko %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Toks pavadinimas jau yra"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Neįmanoma perkelti. Paskirties aplankas yra toks pat kaip ir originalus aplankas"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Kurti aplanką"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Įklijuoti čia"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Perspėjimai"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Ekrano fonai"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefonas"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Vaizdai"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Vaizdo įrašai"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Garsai"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Atsisiųsti elem."
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Atminties kort."
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Išorinė laikmena"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Redaguoti"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Trinti"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Perkelti"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Aukštyn"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Perkelti čia"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopijuoti"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Rūšiuoti pagal"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Ieškoti"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Daugiau"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Kurti aplanką"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Aplanko pavadinimas"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mano albumas"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Peržiūrėti kaip"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Atgal"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mano vaizdo įrašai"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Teisių būsena"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Tiekėjas"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Skaičiuoti"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Yra"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Atskiras"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Intervalas"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Perv."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Laikas"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Laiko skaičiavimas"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tipas"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Neribota"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Pakeisti"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Skambintojo skambėjimo tonas"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Pavadinimas"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Nukopijuota"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Niekas nepasirinkta"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Nepakanka kaupiamosios atminties"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Nepakanka atminties. Ištrinkite kai kuriuos elementus"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Sukurta data"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS informacija"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS platuma"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS ilguma"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS versija"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Išsami informacija"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Bet kuris"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Galimi panaudojimai"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Vykdyti"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Persiuntimas"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Neįmanoma"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Inicijuojami MMC duomenys..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Įmanoma"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Spausdinti"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Galiojimas"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Naujas aplankas"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Redaguoti"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Rūšiuoti pagal"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Perkelti čia"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Tęsti"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopijuojama..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Įklijuoti čia"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepalaikomas failo tipas"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detalus rodinys"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Didėjimo tvarka"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Mažėjimo tvarka"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Visi"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Ieškoti visų aplankų"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniatiūrų rodinys"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Rodyti failo plėtinį"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Rūšiuoti pagal"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Sąrašas ir išsami inf."
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Toks aplanko pavadinimas jau yra"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Slėpti failo plėtinį"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Pavadinimas (A–Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Pavadinimas (Z–A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Data (naujausi)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Data (seniausi)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Eiti į „Mano failus“"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Skambėjimo tonai"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Veidas neaptiktas"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Įd. į pradž.psl."
+
diff --git a/data/po/lv.po b/data/po/lv.po
new file mode 100644 (file)
index 0000000..fc7e8d7
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Uz augšu"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Mājas"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Skatīt pēc saraksta"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Skatīt sīktēlus"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Neizdevās izdzēst"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM fails. Nevar nosūtīt"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nederīgs faila nosaukums"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Sasniegts maksimālais mapes skaits"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Atļauja liegta"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Neizdevās nosūtīt"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Mērķa mape ir avota mapes apakšmape"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Šāda faila nav."
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Nevar kopēt"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Nevar pārvietot"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Tālruņa atmiņā nepietiek vietas. Izdzēsiet dažus objektus un mēģiniet vēlreiz"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Neizdevās kopēt"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Pārvietošana neizdevās"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Nepietiek atmiņas. Pieejamā atmiņa: %s."
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Šāds nosaukums jau tiek lietots"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Nevar pārvietot. Mērķa mape ir tāda pati kā avota mape"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Izveidot mapi"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Ielīmēt šeit"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Brīdinājumi"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fona attēli"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Tālrunis"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Attēli"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Video"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Skaņas"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Lejupielādes"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Atmiņas karte"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Ārējā krātuve"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Rediģēt"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Dzēst"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Pārvietot"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Uz augšu"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Pārvietot šeit"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopēt"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Kārtot pēc"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Meklēt"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Citi"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Izveidot mapi"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Mapes nosaukums"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mans albums"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Skatīt kā"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Atpakaļ"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mani videoklipi"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Pareizais statuss"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Piegādātājs"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Skaits"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Ietver"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individuāls"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Intervāls"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Pārd."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Laiks"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Skaits ar laika uzskaiti"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Veids"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Neierobežots"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Aizstāt"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Zvanītāja zvana signāls"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nosaukums"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Nokopēts"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nekas nav izvēlēts"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Nepietiekama sistēmas atmiņa"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Nepietiek atmiņas. Izdzēsiet dažus vienumus"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Izveidošanas datums"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS informācija"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS ģeogrāfiskais platums"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS ģeogrāfiskais garums"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS versija"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Dati"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Jebkurš"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Atlikušās lietošanas reizes"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Izpildīt"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Pārsūtīšana"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Nav iespējams"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Tiek inicializēti MMC dati..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Iespējams"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Drukāt"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Derīgums"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Jauna mape"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Rediģēt"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Kārtot pēc"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Pārvietot šeit"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Turpināt"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopē..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Ielīmēt šeit"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Neatbalstīts faila veids"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detalizēts skats"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Augošā secībā"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Dilstošā secībā"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Visas"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Meklēt visās mapēs"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Sīktēlu skats"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Rādīt faila paplašinājumu"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Kārtot pēc"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Saraksts un dati"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Mapes nosaukums jau pastāv"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Slēpt faila paplaš."
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nosaukums (no A līdz Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nosaukums (no Z līdz A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Datums (jaunākais)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Datums (vecākais)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Atv.mapi Mani faili"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Zvana signāli"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Neviena seja nav noteikta"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Pievien. sākumam"
+
diff --git a/data/po/mk.po b/data/po/mk.po
new file mode 100644 (file)
index 0000000..22c6265
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Горе"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Дома"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Прегледај по листата"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Прегледај по сликички"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Неуспешно бришење"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Заштитен фајл. Не може да се прати"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Неправилно име на фајл"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Достигнат е максималниот број папки"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Нема дозвола"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Неуспешно праќање"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Одредишната папка е под-папка на изворната"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Фајлот не постои."
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Не може да се копира"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Не може да се премести"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Нема доволно меморија во меморијата на телефонот. Избришете некој запис и обидете се повторно"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Неуспешно копирање"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Неуспешно преместување"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Нема доволно меморија. Достапни се %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Истото име веќе се користи"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Не може да се премести. Одредишната папка е иста како и изворната"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Нова папка"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Пресликај тука"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Известувања"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Заднини"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Телефон"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Слики"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Видео-записи"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Звуци"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Преземено"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Мем. картичка"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Надворешен мем. уред"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Измени"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Избриши"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Премести"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Отворање"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Премести тука"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Копирај"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Подреди според"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Пребарај"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Повеќе"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Направи папка"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Име на папката"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Мој албум"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Прикажи како"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "Надолен редослед"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Сите"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Пребарај ги сите папки"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Икони"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Прикажи наставки на фајловите"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Подреди според"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Листа со детали"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Името на папката веќе постои"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Сокриј наст. на фајл"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Име (од А до Ш)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Име (од Ш до А)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Датум (Најнов)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Датум (Најстар)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Оди во Мои фајлови"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Тонови на ѕвонење"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Не е откриено лице"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Додај дома"
+
diff --git a/data/po/nb.po b/data/po/nb.po
new file mode 100644 (file)
index 0000000..d3039ba
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Opp"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Hjem"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Vis etter liste"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Vis etter miniatyr"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Kunne ikke slette"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM-fil. Kan ikke sende"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Ugyldig filnavn"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Det maksimale antall mapper er nådd"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Tillatelse avslått"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Sendingen mislyktes"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Målmappen er en undermappe til kildemappen"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Filen eksisterer ikke"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Kan ikke kopiere"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Kan ikke flytte"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Ikke nok minne i telefonminnet. Slett noen elementer og prøv på nytt"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kunne ikke kopiere"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Flyttingen mislyktes"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Ikke tilstreklig med minne. %s er ledig"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Samme navn allerede i bruk"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Kan ikke flytte. Målmappen er den samme som kildemappen"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Lag mappe"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Lim inn her"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Varsler"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Bakgrunn"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Bilder"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videoklipp"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Lyder"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Nedlastinger"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Minnekort"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Ekstern lagring"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Rediger"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Slett"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Flytt"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Opp"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Flytt hit"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopier"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sorter etter"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Søk"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Mer"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Opprett mappe"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Mappenavn"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mitt album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Vis som"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Tilbake"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mine videoklipp"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Rettighetsstatus"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Leverandør"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Antall"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Inneholder"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individuell"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Intervall"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Endre navn"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Tid"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Gjenværende tid"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Type"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Ubegrenset"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Erstatt"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Anropsringetone"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Navn"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopiert"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Ingenting valgt"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Ikke nok frilagerminne"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Ikke nok minne. Slett noen elementer"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Opprettingsdato"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS-informasjon"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS-breddegrad"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS-lengdegrad"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS-versjon"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Detaljer"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Alle"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Kan brukes antall ganger"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Utfør"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Videresending"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Umulig"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC-data initialiserer..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Mulig"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Skriv ut"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Gyldighet"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Ny mappe"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Rediger"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Sorter etter"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Flytt hit"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Fortsett"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopierer..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Lim inn her"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Filtypen støttes ikke"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detaljvisning"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Stigende"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Synkende"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Alle"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Søk i alle mapper"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniatyrvisning"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Vis filendelse"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sorter etter"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Liste og detaljer"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Mappenavnet finnes allerede"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Skjul filendelse"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Navn (A til Å)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Navn (Å til A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Dato (nyeste)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Dato (eldste)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Gå til Mine Filer"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Ringetoner"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Ingen ansikter gjenkjent"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Legg på startskj"
+
diff --git a/data/po/nl_NL.po b/data/po/nl_NL.po
new file mode 100644 (file)
index 0000000..3953207
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Omhoog"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Startpagina"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Lijstweergave"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Miniatuurweergave"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Verwijderen mislukt"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM-bestand. Kan niet verzonden worden"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Ongeldige bestandsnaam"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Maximum aantal mappen bereikt"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Toestemming geweigerd"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Verzenden mislukt"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "De doelmap is een submap van de bronmap"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Dit bestand bestaat niet"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Kan niet kopiëren"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Kan niet verplaatsen"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Onvoldoende ruimte in telefoongeheugen. Verwijder een aantal items en probeer het opnieuw"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopiëren is mislukt"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Verplaatsen is mislukt"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Onvoldoende geheugen. %s beschikbaar"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Naam is al in gebruik"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Kan niet verplaatsen. Doelmap zelfde als bronmap"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Map maken"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Hier kopiëren"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Waarschuwingen"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Achtergronden"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefoon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Afbeeldingen"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Video's"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Geluiden"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Downloads"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Geheugen-\nkaart"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Externe opslag"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Wijzigen"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Wissen"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Verplaatsen"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Omhoog"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Hier plaatsen"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopiëren"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sorteren op"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Zoeken"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Meer"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Map maken"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Mapnaam"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mijn album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Tonen als"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Terug"
+
+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_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_SK_DETAILS"
+msgstr "Gegevens"
+
+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 "Bewerken"
+
+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_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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Alles"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Zoeken in alle mappen"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniatuurweergave"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Bestandsextensie weergeven"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sorteren op"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lijst en details"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Mapnaam bestaat al"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Bestandsext. verbergen"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Naam (A tot Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Naam (Z tot A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Datum (meest recent)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Datum (oudste)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Naar Mijn bestanden"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Beltonen"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Geen gezicht gedetecteerd"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Toev aan startpg"
+
diff --git a/data/po/pl.po b/data/po/pl.po
new file mode 100644 (file)
index 0000000..4ec8a30
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Góra"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Ekran główny"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Sortuj wg listy"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Sortuj wg miniatur"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Błąd usuwania"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Plik DRM. Nie można wysłać"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nieprawidłowa nazwa pliku"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Osiągnięto maksymalną wielkość katalogu"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Nie udzielono zezwolenia"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Błąd wysyłania"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Katalog docelowy jest podkatalogiem katalogu źródłowego"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Plik nie istnieje"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Nie można skopiować"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Nie można przenieść"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Za mało pamięci w telefonie. Usuń niektóre elementy i spróbuj ponownie"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Błąd kopiowania"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Błąd przenoszenia"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Brak pamięci. Dostępne: %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Ta sama nazwa jest już w użyciu"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Nie można przenieść. Katalog docelowy taki sam jak katalog źródłowy"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Utwórz katalog"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Wklej tutaj"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alarmy"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Tapety"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Obrazy"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Filmy"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Dźwięki"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Pobrane"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Karta pamięci"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Pamięć zewnętrzna"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Edytuj"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Usuń"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Przenieś"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "W górę"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Przenieś tutaj"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopiuj pozycję"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sortuj według"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Szukaj"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Więcej"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Utwórz katalog"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nazwa katalogu"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mój album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Wyświetl jako"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Wstecz"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Moje wideoklipy"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Status uprawnienia"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Dostawca"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Liczba"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Zawiera"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Osobiste"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Okres"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Zm.naz."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Godzina"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Licznik synchronizowany"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Typ"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Nieograniczony"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Zamień"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Dzwonek kontaktu"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nazwa"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Skopiowano"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Niczego nie zaznaczono"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Brak pamięci heap"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Brak pamięci. Usuń niektóre elementy"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Data utworzenia"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "Informacje GPS"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "Szerokość geograficzna GPS"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "Długość geograficzna GPS"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "Wersja GPS"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Szczegóły"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Dowolny"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Dostępne zastosowania"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Wykonaj"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Przesyłanie"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Niemożliwe"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Trwa inicjowanie karty pamięci..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Możliwe"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Drukuj"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Ważność"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Nowy katalog"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Edytuj"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Sortuj wg"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Przenieś tutaj"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Kontynuuj"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopiowanie..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Wklej tutaj"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Nieobsługiwany typ pliku"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Wyświetlanie szczegółów"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Rosnąco"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Malejąco"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Wszystkie"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Przesz. wszystkie kat."
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniatury"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Pokaż rozszerzenia plików"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sortuj wg"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista i szczegóły"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Nazwa katalogu już istnieje"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ukryj rozszerz. plików"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nazwa (od A do Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nazwa (od Z do A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Data (od najnowszych)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Data (od najstarszych)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Idź do Moich plików"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Dzwonki"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nie wykryto twarzy"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Dod.do ekr.start"
+
diff --git a/data/po/pt_BR.po b/data/po/pt_BR.po
new file mode 100644 (file)
index 0000000..6250f91
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Para cima"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Início"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Visualizar por lista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Visualizar por miniatura"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Erro ao apagar"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Arquivo DRM. Impossível enviar"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nome de arquivo\ninválido"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Número máximo de pasta atingido"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permissão negada"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Erro ao enviar"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "A pasta de destino é uma subpasta da pasta de origem"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Este arquivo não existe"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Impossível copiar"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Impossível mover"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Memória insuficiente no telefone. Apague alguns itens e tente novamente"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Erro ao copiar"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Erro ao mover"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Memória insuficiente. %s disponível"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "O mesmo nome já está sendo utilizado"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Impossível mover. Pasta de destino é a mesma do arquivo de origem"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Criar pasta"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Colar aqui"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alertas"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Papéis de parede"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefone"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Imagens"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Vídeos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Tons"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Downloads"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Cartão de memória"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Armazenamento externo"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Apagar"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Mover"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Para cima"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Mover para cá"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copiar"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Procurar"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Mais"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Criar pasta"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nome da pasta"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Meu álbum"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Visualizar como"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Voltar"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Meus vídeos"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Status de direitos"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Fornecedor"
+
+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 "Renom."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Hora"
+
+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 "Substit."
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Toque para um contato"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nome"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copiado"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nada selecionado"
+
+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_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 "Encaminhamento"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Impossível"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Os dados MMC estão sendo 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 "Ordenar por"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Mover para cá"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Continuar"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Copiando..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Colar aqui"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Tipo de arquivo não suportado"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Visualização de detalhes"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Crescente"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Descendente"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Todos"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Pesq. todas as pastas"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Ver por miniaturas"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Exibir extensão do arquivo"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista e detalhes"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Nome de pasta já existente"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ocultar ext. arquivo"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nome (De A a Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nome (De Z a A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Data (mais recente)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Data (mais antiga)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Ir p/ Meus Arquivos"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Toques"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nenhum rosto detectado"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Adic. ao início"
+
diff --git a/data/po/pt_PT.po b/data/po/pt_PT.po
new file mode 100644 (file)
index 0000000..3336ea7
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Para cima"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Início"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Ver por lista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Vista por miniatura"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Falha ao apagar"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Ficheiro DRM. Impossível enviar"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nome do ficheiro inválido"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Máximo alcançado"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permissão negada"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Falha de envio"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "A pasta de destino é uma sub-pasta da pasta de origem"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Ficheiro inexistente"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Impossível copiar"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Impossível mover"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Memória insuficiente na memória do telefone. Elimine alguns items e tente novamente"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Falha ao copiar"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Falha ao mover"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Memória insuficiente. %s disponíveis"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Já está a ser utilizado o mesmo nome"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Impossível mover. Pasta de destino igual à pasta de origem"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Criar pasta"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Colar aqui"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Alertas"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fundos"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefone"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Imagens"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Vídeos"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sons"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Transferências"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Cartão de memór."
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Armazenamento externo"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editar"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Eliminar"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Mover"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Para cima"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Mover para aqui"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copiar"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Procurar"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Mais"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Criar pasta"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nome da pasta"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "O meu álbum"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Visualizar como"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Voltar"
+
+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 "Hora"
+
+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_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_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_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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Tudo"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Proc. em todas pastas"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Vista de miniatura"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Mostrar extensão de ficheiro"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Ordenar por"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista e detalhes"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Nome de pasta já existente"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ocultar ext. ficheiro"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nome (de A a Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nome (de Z a A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Data (mais recente)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Data (mais antiga)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Ir para Os Meus Ficheiros"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Tons de toque"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nenhum rosto detectado"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Adic ecrã princi"
+
diff --git a/data/po/ro.po b/data/po/ro.po
new file mode 100644 (file)
index 0000000..20f1db6
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Sus"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Acasă"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Vizualizare tip listă"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Vizualizare imagini în format redus"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Ştergerea nu a reuşit"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Fişier DRM. Imposibil de trimis"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Nume fişier incorect"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "S-a atins nivelul maxim pentru folder"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Permisiunea a fost refuzată"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Trimitere nereuşită"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Fişierul de destinaţie este un subfişier al fişierului sursă"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Acest fişier nu există"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Imposibil de copiat"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Imposibil de mutat"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Memoria telefonului este insuficientă. Ştergeţi câteva elemente şi încercaţi din nou"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Copierea nu a reuşit"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Mutarea nu a reuşit"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Memorie insuficientă. %s disponibil"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Acelaşi nume deja în uz"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Imposbil de mutat. Folderul de destinaţie acelaşi cu folderul sursă"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Creare folder"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Lipire aici"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Avertizări"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fundaluri"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Imagini"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videoclipuri"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sunete"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Descărcări"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Cartelă de memorie"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Stocare externă"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Editare"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Ştergere"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Mutare"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Sus"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Mutare aici"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Copiere"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sortare după"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Căutare"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Mai multe"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Creare director"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Nume director"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Albumul meu"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Vizualizare ca"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Înapoi"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Clipurile mele video"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Stare drepturi"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Distribuitor"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Contor"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Conţine"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individual"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Reden."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Oră"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Numărătoare temporizată"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tip"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Nelimitat"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Înloc."
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Ton sonerie apelant"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nume"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Copiat"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nimic selectat"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Memorie heap insuficientă"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Memorie insuficientă. Ştergeţi câteva elemente"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Dată creare"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "Informaţii 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 "Versiune GPS"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Detalii"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Oricare"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Utilizări disponibile"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Executare"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Redirecţionare"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Imposibil"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Se iniţializează datele MMC..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Posibil"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Imprimare"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Valabilitate"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Folder nou"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Editare"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Listare după"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Mutare aici"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Continuare"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Copiere..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Lipire aici"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Tip fişier neacceptat"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Afişare detaliată"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Crescător"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Descrescător"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Toate"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Căutare totală foldere"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Vizualizare pictograme"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Afişare extensie de fişier"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sortare după"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Listă şi detalii"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Numele directorului există deja"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Ascundere ext. fişier"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nume (de la A la Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nume (de la Z la A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Dată (cele mai recente)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Dată (cele mai vechi)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Accesare Fişierele mele"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Tonuri sonerie"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nicio faţă detectată"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Ad. la ec. prin."
+
diff --git a/data/po/ru_RU.po b/data/po/ru_RU.po
new file mode 100644 (file)
index 0000000..a519987
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Вверх"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Домой"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Просмотр в виде списка"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Просмотр по эскизам"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Сбой удаления"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Файл DRM. Невозможно отправить"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Неверное имя файла"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Достигнуто макс. количество папок"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Разрешение не получено"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Сбой передачи"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Папка назначения является вложенной в исходной папке"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Файл не существует"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Невозможно скопировать"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Невозможно переместить"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Недостаточно памяти телефона. Удалите ненужные элементы и повторите попытку"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Сбой копирования"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Сбой перемещения"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Недостаточно памяти. Свободная память: %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Имя уже используется"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Невозможно переместить. Папка назначения совпадает с исходной папкой"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Создать папку"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Вставить сюда"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Оповещения"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Обои"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Телефон"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Картинки"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Видео"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Звуки"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Загрузки"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Карта памяти"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Внешний носитель"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Изменить"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Удалить"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Переместить"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Вверх"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Переместить сюда"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Копир."
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Сортировка"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Поиск"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Опции"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Создать папку"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Имя папки"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Мой альбом"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Просмотреть как"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "По убыванию"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Все"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Поиск по всем папкам"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Эскизы"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Показать расширение файла"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Сортировка"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Подробный список"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Имя папки уже существует"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Скрыть расширение"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Имя (от А до Я)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Имя (от Я до А)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Дата (сначала последние)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Дата (сначала старые)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Перейти в Мои файлы"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Мелодии звонка"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Лицо не обнаружено"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Доб. на главный"
+
diff --git a/data/po/sk.po b/data/po/sk.po
new file mode 100644 (file)
index 0000000..ce31035
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Hore"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Domov"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Zobraziť podľa zoznamu"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Zobraziť podľa miniatúr"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Vymazanie sa nepodarilo"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Súbor DRM. Nedá sa odoslať"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Neplatný názov súboru"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Dosiahol sa maximálny počet priečinkov"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Povolenie odmietnuté"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Odoslanie zlyhalo"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Cieľový priečinok je podpriečinkom zdrojového priečinka"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Súbor neexistuje"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Nedá sa kopírovať"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Nedá sa presunúť"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Nedostatok pamäte telefónu. Vymažte niektoré položky a skúste to znova"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopírovanie sa nepodarilo"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Presunutie sa nepodarilo"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Nedostatok pamäte. K dispozícii je %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Rovnaký názov sa už používa"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Nedá sa premiestniť. Cieľový priečinok je zhodný so zdrojovým priečinkom"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Vytvoriť priečinok"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Prilepiť sem"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Výstrahy"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Tapety"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefón"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Obrázky"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videá"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Zvuky"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Stiahnuté položky"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Pamäťová karta"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Exter. úložný priestor"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Upraviť"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Odstrániť"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Presun."
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Hore"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Presunúť sem"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopírovať"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Zoradiť podľa"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Hľadať"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Ďalšie"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Vytvoriť priečinok"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Názov priečinka"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Môj album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Zobraziť ako"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Späť"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Moje videoklipy"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Stav práv"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Dodávateľ"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Počet"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Obsahuje"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Jednotlivé"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Prem."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Čas"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Časovaný počet"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Typ"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Neobmedzené"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Nahradiť"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Zvonenie volajúceho"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Meno"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Skopírované"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nič nie je vybrané"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Nedostatok odkladacej pamäte"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Nedostatok pamäte. Vymažte niektoré položky"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Dátum vytvorenia"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS informácie"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "Zemepisná šírka GPS"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "Zemepisná dĺžka GPS"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "Verzia GPS"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Podrobnosti"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Všetko"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Počet použití k dispozícii"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Vykonať"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Preposlanie"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Nemožné"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Inicializujú sa údaje MMC..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Možné"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Tlač"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Platnosť"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Nový priečinok"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Upraviť"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Zoradiť podľa"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Presunúť sem"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Pokračovať"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopírovanie..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Vložiť sem"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodporovaný typ súboru"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detailné zobrazenie"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Vzostupne"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Zostupne"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Všetko"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Hľadať vo všet. prieč."
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Zobrazenie miniatúr"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Zobraziť príponu súboru"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Usporiadať podľa"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Zoznam a podrobnosti"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Názov priečinka už existuje"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Skryť príponu súboru"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Názov (od A po Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Názov (od Z po A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Dátum (najnovšie)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Dátum (najstaršie)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Ísť na Moje súbory"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Zvonenia"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Nedetekovala sa žiadna tvár"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Prid. na dom. s."
+
diff --git a/data/po/sl.po b/data/po/sl.po
new file mode 100644 (file)
index 0000000..8935058
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Gor"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Domov"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Pregled po seznamu"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Prikaži s sličicami"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Brisanje ni uspelo"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Datoteka DRM. Ni mogoče shraniti"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Neveljavno ime datoteke"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Doseženo je največje dovoljeno število map"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Dovoljenje zavrnjeno"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Pošiljanje ni uspelo"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Ciljna mapa je podmapa izvorne"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Ta datoteka ne obstaja"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Ni mogoče kopirati"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Premikanje ni mogoče"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Ni dovolj pomnilnika v telefonskem polnilniku. Zbrišite nekaj elementov in poskusite znova"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopiranje ni uspelo"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Premikanje ni uspelo"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Ni dovolj pomnilnika. Na voljo je %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "XXX se že uporablja"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Ni mogoče premakniti. Ciljna mapa je enaka izvorni"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Ustvari mapo"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Prilepi sem"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Opozorila"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Ozadja"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Slike"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videoposnetki"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Zvoki"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Prenosi"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Pomniln. kartica"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Zunanji pomnilnik"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Uredi"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Izbriši"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Premik"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Gor"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Premakni sem"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopiraj"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Razvrsti po"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Iskanje"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Več"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Ustvari mapo"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Ime mape"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Moj album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Prikaži kot"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Nazaj"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Moji videoposnetki"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Stanje pravic"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Ponudnik"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Štetje"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Vsebuje"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Posamezno"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Preim."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Čas"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Časovno število"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Vrsta"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Neomejeno"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Zamenjaj"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Melodija kličočega"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Ime"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopirano"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Nič ni izbrano"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Ni dovolj pomnilnika sklada"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Ni dovolj pomnilnika. Izbrišite nekaj predmetov"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Datum ustvarjanja"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "Informacije GPS"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "Zemljepisna širina GPS"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "Zemljepisna dolžina GPS"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "Različica GPS"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Podrob."
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Karkoli"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Število uporab"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Izvedi"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Posredovanje"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Nemogoče"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "Podatki MMC se inicializirajo ..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Mogoče"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Tiskanje"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Veljavnost"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Nova mapa"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Uredi"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Razvrsti po"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Premakni sem"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Nadaljuj"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopiram ..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Prilepi sem"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodprta vrsta datoteke"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Podroben ogled"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Naraščajoče"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Padajoče"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Vse"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Iskanje po vseh mapah"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Prikaz sličice"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Prikaži končnico datoteke"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Uredi po"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Seznam in podrobnosti"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Ime mape že obstaja"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Skrij pripono datoteke"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Ime (od A proti Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Ime (od Z proti A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Datum (Najnovejši)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Datum (Najstarejši)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Pojdi na Moje datot."
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Zvonjenja"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Obraz ni zaznan"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Dod. na dom.zas."
+
diff --git a/data/po/sr.po b/data/po/sr.po
new file mode 100644 (file)
index 0000000..0b47b9e
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Gore"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Početak"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Prikaži po listi"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Prikaži kao indeksne sličice"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Brisanje neuspešno"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM fajl. Ne može se poslati"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Neispravan naziv fajla"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Dostignut maksimalan broj foldera"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Dozvola odbijena"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Slanje neuspešno"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Odredišni folder je podfolder izvornog foldera"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Fajl ne postoji"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Nemoguće kopirati"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Nemoguće premestiti"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Nedovoljno memorije u memoriji telefona. Obriši neke stavke i probaj opet"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopiranje neuspešno"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Premeštanje neuspešno"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Nedovoljna memorija. %s dostupno"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Taj naziv je već u upotrebi"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Nemoguće premestiti. Odredišni folder isti kao izvorni"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Kreiraj folder"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Zalepi ovde"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Upozorenja"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Tapeti"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Slike"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Video zapisi"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Zvuci"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Preuzimanja"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Memor. kartica"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Spoljna memorija"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Izmeni"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Obriši"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Premesti"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Gore"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Premesti ovde"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopiraj"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sortiraj po"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Pretraga"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Još"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Kreiraj folder"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Naziv foldera"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Moj album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Videti kao"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Nazad"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Moji video klipovi"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Pravni status"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Dobavljač"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Broj"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Sadrži"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Pojedinačno"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Preim."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Vreme"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Preostalo vreme"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tip"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Neograničeno"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Zameni"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Ton zvona pozivaoca"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Ime"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Iskopirano"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Ništa nije izabrano"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Nedovoljna memorija"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Nedovoljno memorije. Obriši neke od stavki"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Datum kreiranja"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS informacije"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "Geografska širina za GPS"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "Geografska dužina za GPS"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "Verzija GPS-a"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Detalji"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Sve"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Moguće upotrebe"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Izvrši"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Prosleđivanje"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Nemoguće"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC podaci se inicijalizuju..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "moguće"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Štampaj"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Važenje"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Novi folder"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Izmeni"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Listaj po"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Premesti ovde"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Nastavi"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopiranje..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Zalepi ovde"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodržani tip fajla"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Prikaz detalja"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Rastuće"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Opadajuće"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Sve"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Pretraži sve foldere"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Indeksni prikaz"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Prikaži ekstenziju fajla"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sortiraj po"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista sa detaljima"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Ime foldera već postoji"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Sakrij det. tipa fajla"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Ime (od A do Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Ime (od Z do A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Datumu (najnovije)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Datumu (najstarije)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Idi u Moje fajlove"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Tonovi zvona"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Lice nije detektovano"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Dodaj na početnu"
+
diff --git a/data/po/sv.po b/data/po/sv.po
new file mode 100644 (file)
index 0000000..0bc4a3b
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Uppåt"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Hem"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Visa som lista"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Visa som miniatyrbilder"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Radering misslyckades"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM-fil. Kan inte skicka"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Ogiltigt filnamn"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Max antal mappar"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Tillstånd nekades"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Sändning misslyckades"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Målmappen är en undermapp till källmappen"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Filen finns inte"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Det går inte att kopiera"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Det går inte att flytta"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Otillräckligt telefonminne. Radera några filer och försök igen"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopieringen misslyckades"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Det gick inte att flytta"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "För lite minne. %s tillgängligt"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Detta namn används redan"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Kan inte flytta. Målmappen är densamma som källmappen"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Skapa mapp"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Klistra in här"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Påminnelser"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Bakgrunder"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Bilder"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videoklipp"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Ljud"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Nedladdningar"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Minneskort"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Externt minne"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Redigera"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Radera"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Flytta"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Upp"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Flytta hit"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopiera"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sortera efter"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Sök"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Mer"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Skapa mapp"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Mappnamn"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mitt album"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Visa som"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Åter"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mina videoklipp"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Rättighetsstatus"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Leverantör"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Antal"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Innehåller"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individuell"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Intervall"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Namnb."
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Tid"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Tidsgräns för räkning"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Typ"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Obegränsad"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Ersätt"
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Ringsignal till Foto-ID"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Namn"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Kopierad"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Inget markerat"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "För lite heap-minne"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Minnet räcker inte. Radera några objekt"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Skapad den"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS-information"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS-latitud"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS-longitud"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS-version"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Info"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Alla"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Tillgängliga tillämpningar"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Exekvera"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Vidarebefordra"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Ej möjlig"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC-data initieras..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Möjlig"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Skriv ut"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Giltighet"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Ny mapp"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Redigera"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Sortera efter"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Flytta hit"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Fortsätt"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Kopierar..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Klistra in här"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Filtypen stöds inte"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Detaljvy"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "Stigande"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Fallande"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Alla"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Sök i alla mappar"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Miniatyrer"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Visa filtillägg"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sortera efter"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Lista och information"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Mappnamnet finns redan"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Dölj filtillägg"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Namn (A till Ö)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Namn (Ö till A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Datum (senaste)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Datum (äldsta)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Gå till Mina filer"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Ringsignaler"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Inget ansikte hittades"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Lägg till på hem"
+
diff --git a/data/po/tr_TR.po b/data/po/tr_TR.po
new file mode 100644 (file)
index 0000000..da32618
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Yukarı"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "A.Syf"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Liste şeklinde göster"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Küçük resim görünümü"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Silinemedi"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM dosyası gönderilemiyor"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Geçersiz dosya adı"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Maksimum"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "İzin reddedildi"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Gönderme Başarısız"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Hedef klasör kaynak klasörün alt klasörü"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Dosya yok"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Kopyalanamıyor"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Taşınamıyor"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Telefon belleğinde yeterli yer yok. Bazı öğeleri silin ve tekrar deneyin"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Kopyalama başarısız"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Taşıma başarısız"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Yeterli hafıza yok. %s kullanılabilir"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "İsim zaten kullanımda"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Taşınamıyor. Hedef klasör kaynak klasörle aynı"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Klasör oluştur"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Buraya yapıştır"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Uyarılar"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Duvar kağıtları"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Resimler"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videolar"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Sesler"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "İndirilenler"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Hafıza kartı"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Harici bellek"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Düzenle"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Sil"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Taşı"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Yukarı"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Buraya taşı"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Kopyala"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Sırala"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Bul"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Diğer"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Klasör oluştur"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Klasör adı"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Albümüm"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Başka adla görüntüle"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Geri"
+
+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_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_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_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"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Hepsi"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Tüm klasörleri ara"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Küçük resim görünümü"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Dosya uzantılarını göster"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Sırala"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Liste ve ayrıntılar"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Dosya adı zaten var"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Dosya uzntılrını gizle"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Ad (A'dan Z'ye)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Ad (Z'den A'ya)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Tarih (En yeni)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Tarih (En eski)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Dosyalarım’a git"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Zil sesleri"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Yüz algılanamadı"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Ana sayfaya ekle"
+
diff --git a/data/po/uk.po b/data/po/uk.po
new file mode 100644 (file)
index 0000000..6fc3ab7
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Вгору"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Домашній"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Переглянути за списком"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Переглянути ескізи"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Збій видалення"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "Файл DRM. Неможливо надіслати"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Хибна назва файла"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Досягнуто максимальної кількості папок"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "У дозволі відмовлено"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Збій передачи"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Папка призначення є підпапкою вихідної папки"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Файл не існує"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Неможливо скопіювати"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Неможливо перемістити"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Недостатньо місця в пам’яті телефону. Видаліть декілька об’єктів і спробуйте ще раз"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Збій копіювання"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Збій переміщення"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Недостатньо пам’яті. %s доступно"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Ім’я вже використовується"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Неможливо перемістити. Папка призначення та вихідна папка однакові"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Створити папку"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Вставити сюди"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Сигнали"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Заставки"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Телефон"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Зображення"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Відео"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Звуки"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Завантаження"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Карта пам’яті"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Зовн. місце збереження"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Редагу-\nвати"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "Видал."
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Переміст."
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Вгору"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Перемістити сюди"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Копіювати"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Сорт. за"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Пошук"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Додатково"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Створити папку"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Ім'я папки"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Мій альбом"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Переглянути як"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_SK_DETAILS"
+msgstr "Деталі"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Any"
+
+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_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 "За спаданням"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Всі"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Шукати в усіх папках"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Ескіз"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Показати розширення файла"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Сортувати за"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Список і відомості"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Ім’я папки вже існує"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Приховати розшир.файлу"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Назва (А-Я)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Назва (Я-А)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Дата (остання)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Дата (найдавніша)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Пер. до моїх файлів"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Звуки дзвінка"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Обличчя не розпізнано"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Дод.на гол.екран"
+
diff --git a/data/po/update-po.sh b/data/po/update-po.sh
new file mode 100644 (file)
index 0000000..5e49f90
--- /dev/null
@@ -0,0 +1,57 @@
+#!/bin/sh
+
+PACKAGE=myfile
+SRCROOT=../../source
+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="te"
+
+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/data/po/uz.po b/data/po/uz.po
new file mode 100644 (file)
index 0000000..0ddeffd
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "Yuqoriga"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "Asosiy"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "Ro‘yxat bo‘yicha ko‘rib chiqish"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "Eskiz bo‘y. ko‘r."
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "Yo‘q qilish bajarilmadi"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM fayl. Yuborib bo‘lmaydi"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "Noto‘g‘ri fayl nomi"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "Jildlar soni maksimal miqdorga yetdi"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "Ruxsat rad etildi"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "Yuborish bajarilmadi"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "Yakuniy jild manba jildining tagjildi hisoblanadi"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "Ushbu fayl mavjud emas"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "Nusxa ko‘chirib bo‘lmaydi"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "Ko‘chirib bo‘lmaydi"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "Telefonda xotira yetarli emas. Ba’zi elementlarni yo‘q qiling va qayta urinib ko‘ring"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "Nusxa olish bajarilmadi"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "Ko‘chirib bo‘lmadi"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "Xotira yetarli emas. %s mavjud"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "Bunday nom avvaldan ishlatilmoqda"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "Ko‘chirib bo‘lmaydi. Yakuniy jild manba jildi bilan bir xil"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "Jild yaratish"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "Bu yerga qo‘yish"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "Signallar"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "Fon rasmlari"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "Telefon"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "Tasvirlar"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "Videolar"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "Ovozlar"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "Yuklanishlar"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "Xotira kartasi"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "Tashqi xotira"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "Tahrirlash"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "O'chirish"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "Ko‘chirish"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "Yuqoriga"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "Bu yerga ko‘ch."
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "Nusxa olish"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "Quyid. bo‘y. sar"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "Qidirish"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "Yana"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "Jild yaratish"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "Jild nomi"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "Mening albomim"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "Quyidagi sifatida ko‘rib chiqish"
+
+msgid "IDS_MF_SK3_BACK"
+msgstr "Orqaga"
+
+msgid "IDS_MF_BODY_MY_VIDEO_CLIPS"
+msgstr "Mening video kliplarim"
+
+msgid "IDS_MF_BODY_RIGHT_STATUS"
+msgstr "Huquq holati"
+
+msgid "IDS_MF_BODY_VENDOR"
+msgstr "Ta’minotchi"
+
+msgid "IDS_MF_HEADER_COUNT"
+msgstr "Hisob"
+
+msgid "IDS_MF_BODY_CONTAINS"
+msgstr "Tarkibi:"
+
+msgid "IDS_MF_BODY_INDIVIDUAL"
+msgstr "Individual"
+
+msgid "IDS_MF_BODY_INTERVAL"
+msgstr "Interval"
+
+msgid "IDS_MF_BODY_RENAME_ABB"
+msgstr "Nm/o‘z"
+
+msgid "IDS_MF_BODY_TIME"
+msgstr "Vaqt"
+
+msgid "IDS_MF_BODY_TIMED_COUNT"
+msgstr "Vaqti belgilangan sanoq"
+
+msgid "IDS_MF_BODY_TYPE"
+msgstr "Tur"
+
+msgid "IDS_MF_BODY_UNLIMITED"
+msgstr "Cheklanmagan"
+
+msgid "IDS_MF_BUTTON_REPLACE_ABB"
+msgstr "Almasht."
+
+msgid "IDS_MF_OPT_CALLER_RINGTONE"
+msgstr "Qo‘ng‘iroq qiluvchi ringtoni"
+
+msgid "IDS_MF_OPT_LISTBY_NAME"
+msgstr "Nom"
+
+msgid "IDS_MF_POP_COPIED"
+msgstr "Nusxa olindi"
+
+msgid "IDS_MF_POP_NOTHING_SELECTED"
+msgstr "Hech narsa tanlanmagan"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "Xip xotira yetarli emas"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "Xotira yetarli emas. Ba’zi elementlarni o'chiring"
+
+msgid "IDS_MF_BODY_CREATED_DATE"
+msgstr "Yaratilgan sana"
+
+msgid "IDS_MF_BODY_GPS_INFORMATION"
+msgstr "GPS ma’lumotlari"
+
+msgid "IDS_MF_BODY_GPS_LATITUDE"
+msgstr "GPS kengligi"
+
+msgid "IDS_MF_BODY_GPS_LONGITUDE"
+msgstr "GPS uzunligi"
+
+msgid "IDS_MF_BODY_GPS_VERSION"
+msgstr "GPS versiyasi"
+
+msgid "IDS_MF_SK_DETAILS"
+msgstr "Tafsilot"
+
+msgid "IDS_MF_BODY_ANY"
+msgstr "Har qanday"
+
+msgid "IDS_MF_BODY_AVAILABLE_USES"
+msgstr "Mavjud foydalanishlar"
+
+msgid "IDS_MF_BODY_EXECUTE"
+msgstr "Amalga oshirish"
+
+msgid "IDS_MF_BODY_FORWARDING"
+msgstr "Boshqaga yo‘naltirish"
+
+msgid "IDS_MF_BODY_IMPOSSIBLE"
+msgstr "Imkonsiz"
+
+msgid "IDS_MF_BODY_MMC_DATA_IS_INITIALIZING_ING"
+msgstr "MMC ma’lumoti initsializatsiyalanmoqda..."
+
+msgid "IDS_MF_BODY_POSSIBLE"
+msgstr "Taxminiy"
+
+msgid "IDS_MF_BODY_PRINT"
+msgstr "Chop etish"
+
+msgid "IDS_MF_BODY_VALIDITY"
+msgstr "Amal qilish"
+
+msgid "IDS_MF_HEADER_NEW_FOLDER"
+msgstr "Yangi jild"
+
+msgid "IDS_MF_OPT_EDIT"
+msgstr "Tahrirlash"
+
+msgid "IDS_MF_OPT_LIST_BY"
+msgstr "Quyidagi bo‘yicha ro‘yxat"
+
+msgid "IDS_MF_OPT_MOVE_HERE"
+msgstr "Bu yerga ko‘chiring"
+
+msgid "IDS_MF_POP_CONTINUE"
+msgstr "Davom ettirish"
+
+msgid "IDS_MF_POP_COPYING"
+msgstr "Nusxa ko‘chirilmoqda..."
+
+msgid "IDS_MF_POP_PASTE_HERE"
+msgstr "Bu yerga qo‘shing"
+
+msgid "IDS_MF_POP_UNSUPPORTED_FILE_TYPE"
+msgstr "Qo‘llab-quvvatlanmaydigan fayl turi"
+
+msgid "IDS_MF_OPT_DETAIL_VIEW"
+msgstr "Batafsil"
+
+msgid "IDS_MF_POP_ASCENDING"
+msgstr "O‘sish tartibida"
+
+msgid "IDS_MF_POP_DESCENDING"
+msgstr "Kamayib borish"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "Barcha"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "Barcha jildlarni qidir"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "Eskizli ko'rinish"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "Fayl kengaytmasini ko‘rsatish"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "Saralash"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "Ro‘yxat va tafsilotlar"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "Jild nomi avvaldan mavjud"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "Fayl kengaytma. yashir"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "Nom (A dan Z ga)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "Nom (Z dan A ga)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "Sana (Eng oxirgi)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "Sana (Eng eski)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "Fayllarimga o‘ting"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "Ringtonlar"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "Yuz tanilmadi"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "Asosiyga qo‘sh"
+
diff --git a/data/po/zh_CN.po b/data/po/zh_CN.po
new file mode 100644 (file)
index 0000000..bad94d9
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "向上"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "主屏"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "通过列表查看"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "通过缩略图查看"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "删除失败"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM 文件。无法发送"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "文件名无效"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "已达最大文件夹数"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "许可被拒绝"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "发送失败"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "目标文件夹是源文件夹的子文件夹"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "此文件不存在"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "无法复制"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "无法移动"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "手机内存不足。请删除部分项目并重试"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "复制失败"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "移动失败"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "存储空间不足。 剩余 %s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "相同名字已使用"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "无法移动。目的地文件夹与源文件夹相同"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "新文件夹"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "粘贴到此处"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "提示"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "墙纸"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "话机"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "图片"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "视频"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "声音"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "下载列表"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "存储卡"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "外部存储器"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "编辑"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "删除"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "移动"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "上"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "移动到这里"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "复制"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "排序方式"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "搜索"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "更多"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "新建文件夹"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "文件夹名称"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "我的相册"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "查看方式"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "降序"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "全部"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "搜索所有文件夹"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "缩略图查看"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "显示文件扩展名"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "排序方式"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "列表和详情"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "文件夹名称已经存在"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "隐藏文件扩展名"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "名称(A 至 Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "名称(Z 至 A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "日期(最近)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "日期(最早)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "转到我的文件"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "铃声"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "未侦测到脸部"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "添加至主页"
+
diff --git a/data/po/zh_HK.po b/data/po/zh_HK.po
new file mode 100644 (file)
index 0000000..03fa8aa
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "向上"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "首頁"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "按清單檢視"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "按縮圖檢視"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "刪除失敗"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM 檔案。無法發送"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "檔案名稱無效"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "資料夾數目已達上限"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "權限被拒絕"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "發送失敗"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "目標資料夾是來源資料夾的子資料夾"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "此檔案不存在"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "無法複製"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "無法移動"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "手機記憶體不足。刪除一些項目並再試"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "複製失敗"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "移動失敗"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "記憶體不足。%s 可用"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "相同名稱已被使用"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "無法移動。目的地資料夾與來源資料夾相同"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "建立資料夾"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "貼在這裡"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "提示"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "螢幕牆紙"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "手機"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "圖像"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "影片"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "聲音"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "下載項目"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "記憶卡"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "外置儲存裝置"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "編輯"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "刪除"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "移動"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "上"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "移到這裡"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "複製"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "排序方式"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "搜尋"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "更多"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "建立資料夾"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "資料夾名稱"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "我的相簿"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "檢視為"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "降序"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "全部"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "搜尋所有資料夾"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "縮圖檢視"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "顯示檔案伸展內容"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "排序方式"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "清單及詳情"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "資料夾名稱已存在"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "隱藏副檔名"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "名稱 (A 至 Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "名稱 (Z 至 A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "日期(最近的)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "日期 (最舊的)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "前往我的檔案"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "鈴聲"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "未偵測到臉部"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "加入至首頁"
+
diff --git a/data/po/zh_SG.po b/data/po/zh_SG.po
new file mode 100644 (file)
index 0000000..60441f7
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "向上"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "首页"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "通过列表查看"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "通过缩略图查看"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "删除失败"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM文件。无法发送"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "文件名无效"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "已达最大文件夹数"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "许可被拒绝"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "发送失败"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "目标文件夹是源文件夹的子文件夹"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "此文件不存在"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "无法复制"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "无法移动"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "手机内存不足。请删除部分项目并重试"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "复制失败"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "移动失败"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "存储空间不足. 剩余%s"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "相同名称已在使用"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "无法移动。目的地文件夹与源文件夹相同"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "创建文件夹"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "粘贴到此"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "提示"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "墙纸"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "手机"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "图像"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "录像"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "声音"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "下载"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "存储卡"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "外部存储器"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "编辑"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "删除"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "移动"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "上"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "移到这儿"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "复制"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "排序方式"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "搜寻"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "更多"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "创建文件夹"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "文件夹名称"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "我的相册"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "查看作为"
+
+msgid "IDS_MF_SK3_BACK"
+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_NOTHING_SELECTED"
+msgstr "未选择"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+msgstr "堆存储器容量不足"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+msgstr "内存已满\n请删除项目"
+
+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_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_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 "降序"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "全部"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "搜索所有文件夹"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "缩略图查看"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "显示文件扩展名"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "排序通过"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "列表和详情"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "文件夹名称已经存在"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "隐藏文件扩展名"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "名称(A 至 Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "名称(Z 至 A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "日期(最近)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "日期(最晚)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "转到我的文件"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "铃声"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "未侦测到脸部"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "添加至主页"
+
diff --git a/data/po/zh_TW.po b/data/po/zh_TW.po
new file mode 100644 (file)
index 0000000..9554728
--- /dev/null
@@ -0,0 +1,318 @@
+msgid "IDS_MF_TAB_UP"
+msgstr "向上"
+
+msgid "IDS_MF_BUTTON_HOME"
+msgstr "主目錄"
+
+msgid "IDS_MF_OPT_VIEW_BY_LIST"
+msgstr "依清單檢視"
+
+msgid "IDS_MF_OPT_VIEW_BY_THUMBNAIL"
+msgstr "以縮圖檢視"
+
+msgid "IDS_MF_POP_DELETE_FAILED"
+msgstr "刪除失敗"
+
+msgid "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+msgstr "DRM 檔案。無法傳送"
+
+msgid "IDS_MF_POP_INVALID_FILE_NAME"
+msgstr "檔案名稱無效"
+
+msgid "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+msgstr "資料夾數目已達上限"
+
+msgid "IDS_MF_POP_PERMISSION_DENIED"
+msgstr "權限被拒絕"
+
+msgid "IDS_MF_POP_SEND_FAILED"
+msgstr "傳送失敗"
+
+msgid "IDS_MF_POP_THE_DESTINATION_FOLDER_IS_A_SUBFOLDER_OF_THE_SOURCE_FOLDER"
+msgstr "目標資料夾為來源資料夾的子資料夾"
+
+msgid "IDS_MF_POP_THIS_FILE_DOES_NOT_EXIST"
+msgstr "此檔案不存在"
+
+msgid "IDS_MF_POP_UNABLE_TO_COPY"
+msgstr "無法複製"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE"
+msgstr "無法移動"
+
+msgid "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+msgstr "沒有足夠的記憶體在手機上。刪除某些項目,然後再試一次"
+
+msgid "IDS_MF_POP_COPYING_FAILED"
+msgstr "複製失敗"
+
+msgid "IDS_MF_POP_MOVING_FAILED"
+msgstr "移動失敗"
+
+msgid "IDS_MF_POP_NOT_ENOUGH_MEMORY_PS_AVAILABLE"
+msgstr "記憶體不足。%s 可用"
+
+msgid "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+msgstr "相同名稱已在使用中"
+
+msgid "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+msgstr "無法移動。目標資料夾與來源資料夾相同"
+
+msgid "IDS_MF_SK3_CREATE_FOLDER"
+msgstr "建立資料夾"
+
+msgid "IDS_MF_SK3_PASTE_HERE"
+msgstr "複製到這裡"
+
+msgid "IDS_MF_BODY_ALERTS"
+msgstr "提醒"
+
+msgid "IDS_MF_BODY_WALLPAPERS"
+msgstr "桌布"
+
+msgid "IDS_MF_TAB_PHONE"
+msgstr "電話"
+
+msgid "IDS_MF_BODY_IMAGES"
+msgstr "圖像"
+
+msgid "IDS_MF_BODY_VIDEOS"
+msgstr "影片"
+
+msgid "IDS_MF_BODY_SOUNDS"
+msgstr "聲音"
+
+msgid "IDS_MF_BODY_DOWNLOADS"
+msgstr "下載"
+
+msgid "IDS_MF_TAB_MEMORY_CARD"
+msgstr "記憶卡"
+
+msgid "IDS_MF_TAB_EXTERNAL_STORAGE"
+msgstr "外部儲存裝置"
+
+msgid "IDS_MF_SK3_EDIT"
+msgstr "編輯"
+
+msgid "IDS_MF_SK3_DELETE"
+msgstr "刪除"
+
+msgid "IDS_MF_SK3_MOVE"
+msgstr "移動"
+
+msgid "IDS_MF_BODY_UP"
+msgstr "上"
+
+msgid "IDS_MF_SK3_MOVE_HERE"
+msgstr "移到這裡"
+
+msgid "IDS_MF_SK3_COPY"
+msgstr "複製"
+
+msgid "IDS_MF_SK3_SORT_BY"
+msgstr "排序依據"
+
+msgid "IDS_MF_SK3_SEARCH"
+msgstr "搜尋"
+
+msgid "IDS_MF_SK3_MORE"
+msgstr "更多"
+
+msgid "IDS_MF_OPT_CREATE_FOLDER"
+msgstr "建立資料夾"
+
+msgid "IDS_MF_BODY_FOLDER_NAME"
+msgstr "資料夾名稱"
+
+msgid "IDS_MF_BODY_ACCESS_MORE_MY_ALBUM"
+msgstr "我的相簿"
+
+msgid "IDS_MF_OPT_VIEW_AS"
+msgstr "檢視為"
+
+msgid "IDS_MF_SK3_BACK"
+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_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_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_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 "遞減"
+
+msgid "IDS_MF_TAB_ALL"
+msgstr "全部"
+
+msgid "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+msgstr "搜尋所有資料夾"
+
+msgid "IDS_MF_OPT_THUMBNAIL_VIEW"
+msgstr "縮圖檢視"
+
+msgid "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+msgstr "顯示文件擴展名"
+
+msgid "IDS_MF_OPT_SORT_BY"
+msgstr "排序依據"
+
+msgid "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+msgstr "清單及詳情"
+
+msgid "IDS_MF_POP_FOLDER_NAME_ALREADY_EXISTS"
+msgstr "資料夾名稱已存在"
+
+msgid "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+msgstr "隱藏副檔名"
+
+msgid "IDS_MF_OPT_NAME_HA_TO_Z"
+msgstr "名稱 (A 至 Z)"
+
+msgid "IDS_MF_OPT_NAME_HZ_TO_A"
+msgstr "名稱 (Z 至 A)"
+
+msgid "IDS_MF_OPT_DATE_HMOST_RECENT"
+msgstr "日期 (最近的)"
+
+msgid "IDS_MF_OPT_DATE_HOLDEST"
+msgstr "日期 (最舊的)"
+
+msgid "IDS_MF_BUTTON_GO_TO_MY_FILES"
+msgstr "前往我的檔案"
+
+msgid "IDS_MF_BODY_RINGTONES"
+msgstr "鈴聲"
+
+msgid "IDS_MF_BODY_NO_FACE_DETECTED"
+msgstr "未偵測到臉部"
+
+msgid "IDS_MF_BUTTON_ADD_TO_HOME"
+msgstr "新增至首頁"
+
diff --git a/desktop/org.tizen.myfile.png b/desktop/org.tizen.myfile.png
new file mode 100755 (executable)
index 0000000..85a1dcf
Binary files /dev/null and b/desktop/org.tizen.myfile.png differ
diff --git a/desktop/org.tizen.myfile.xml b/desktop/org.tizen.myfile.xml
new file mode 100644 (file)
index 0000000..6bff1b6
--- /dev/null
@@ -0,0 +1,67 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.myfile" version="0.1" install-location="internal-only">
+       <label>My Files</label>
+       <author email="gliang.wang@samsung.com" href="www.samsung.com">Guangliang Wang</author>
+       <description>Myfiles Application</description>
+       <ui-application appid="org.tizen.myfile" exec="/usr/apps/org.tizen.myfile/bin/myfile" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+               <icon>org.tizen.myfile.png</icon>
+               <label>My Files</label>
+               <label xml:lang="hy-am">Իմ Ֆայլերը</label>
+               <label xml:lang="az-az">Mənim fayllarım</label>
+               <label xml:lang="eu-es">Nire Fitxategiak</label>
+               <label xml:lang="bg-bg">Моите файлове</label>
+               <label xml:lang="ca-es">Els meus fitxers</label>
+               <label xml:lang="zh-cn">我的文件</label>
+               <label xml:lang="zh-hk">我的檔案</label>
+               <label xml:lang="zh-tw">我的檔案</label>
+               <label xml:lang="hr-hr">Moje datoteke</label>
+               <label xml:lang="cs-cz">Moje soubory</label>
+               <label xml:lang="da-dk">Mine filer</label>
+               <label xml:lang="nl-nl">Mijn bestanden</label>
+               <label xml:lang="en-gb">My Files</label>
+               <label xml:lang="en-us">My Files</label>
+               <label xml:lang="et-ee">Minu Failid</label>
+               <label xml:lang="fi-fi">Omat tiedostot</label>
+               <label xml:lang="fr-fr">Mes fichiers</label>
+               <label xml:lang="gl-es">Os Meus Arquivos</label>
+               <label xml:lang="ka-ge">ჩემი ფაილები</label>
+               <label xml:lang="de-de">Eigene Dateien</label>
+               <label xml:lang="el-gr">Τα Αρχεία Μου</label>
+               <label xml:lang="hu-hu">Saját fájlok</label>
+               <label xml:lang="is-is">Skrárnar mínar</label>
+               <label xml:lang="ga-ie">Mo Chomhaid</label>
+               <label xml:lang="it-it">Archivio</label>
+               <label xml:lang="ja-jp">マイ​ファイル</label>
+               <label xml:lang="kk-kz">Менің файлдарым</label>
+               <label xml:lang="ko-kr">내 파일</label>
+               <label xml:lang="lv-lv">Mani faili</label>
+               <label xml:lang="lt-lt">Mano failai</label>
+               <label xml:lang="mk-mk">Мои фајлови</label>
+               <label xml:lang="nb-no">Mine Filer</label>
+               <label xml:lang="pl-pl">Moje pliki</label>
+               <label xml:lang="pt-pt">Os Meus Ficheiros</label>
+               <label xml:lang="pt-br">Meus Arquivos</label>
+               <label xml:lang="ro-ro">Fişierele mele</label>
+               <label xml:lang="ru-ru">Мои файлы</label>
+               <label xml:lang="sr-rs">Moji fajlovi</label>
+               <label xml:lang="sk-sk">Moje súbory</label>
+               <label xml:lang="sl-si">Moje datoteke</label>
+               <label xml:lang="es-es">Mis archivos</label>
+               <label xml:lang="es-us">Mis Archivos</label>
+               <label xml:lang="sv-se">Mina filer</label>
+               <label xml:lang="tr-tr">Dosyalarım</label>
+               <label xml:lang="uk-ua">Мої файли</label>
+               <label xml:lang="uz-uz">Mening fayllarim</label>
+               <label xml:lang="ar-ae">ملفاتي</label>
+               <label xml:lang="zh-sg">我的文件</label>
+               <label xml:lang="hi-in">मेरी फाइलें</label>
+               <label xml:lang="en-ph">My Files</label>
+               <label xml:lang="fr-ca">Mes fichiers</label>
+               <application-service>
+                       <operation name="http://tizen.org/appcontrol/operation/pick"/>
+               </application-service>
+               <application-service>
+                       <operation name="http://tizen.org/appcontrol/operation/view"/>
+               </application-service>
+       </ui-application>
+</manifest>
diff --git a/org.tizen.myfile.manifest b/org.tizen.myfile.manifest
new file mode 100644 (file)
index 0000000..9c925cb
--- /dev/null
@@ -0,0 +1,12 @@
+<manifest>
+        <define>
+              <domain name="org.tizen.myfile" />
+        </define>
+        <assign>
+              <filesystem path="/usr/share/icons/default/small/org.tizen.myfile.png" label="_" />
+                         <filesystem path="/usr/share/applications/org.tizen.myfile.desktop" label="_" />
+        </assign>
+        <request>
+                <domain name="org.tizen.myfile" />
+        </request>
+</manifest>
diff --git a/org.tizen.myfile.rule b/org.tizen.myfile.rule
new file mode 100755 (executable)
index 0000000..2379224
--- /dev/null
@@ -0,0 +1,214 @@
+org.tizen.myfile system::vconf rwxat
+org.tizen.myfile system::homedir rwxat
+org.tizen.myfile system::media rwxat
+org.tizen.myfile system::home rwxat
+org.tizen.myfile system::share rwxat
+org.tizen.myfile pulseaudio rwxat
+org.tizen.myfile device::video rw---
+org.tizen.myfile system::crash -wx--
+org.tizen.myfile system::use_internet rwxat
+org.tizen.myfile ail::db rw---
+org.tizen.myfile media-data::db rw---
+org.tizen.myfile app-svc::db rw---
+org.tizen.myfile email-service::db rw---
+org.tizen.myfile org.tizen.indicator rwx--
+org.tizen.myfile org.tizen.message rwx--
+org.tizen.myfile org.tizen.cluster-home rwx--
+org.tizen.myfile org.tizen.setting rwx--
+org.tizen.myfile org.tizen.email rwx--
+org.tizen.myfile wifi_direct_manager rw---
+org.tizen.myfile power_manager rwx--
+org.tizen.myfile email-service rwx--
+org.tizen.myfile media-server rwx--
+org.tizen.myfile contacts-service rwx--
+org.tizen.myfile sound_server rwx--
+org.tizen.myfile msg-service rwx--
+org.tizen.myfile thumb-server rw---
+org.tizen.myfile system-server rwxa-
+org.tizen.myfile mdm-server rwx--
+org.tizen.myfile efreet r-x--
+org.tizen.myfile xorg rwx--
+org.tizen.myfile isf rwx--
+org.tizen.myfile dbus rwxat
+org.tizen.myfile nfc-manager rwx--
+org.tizen.myfile pkgmgr::db rw---
+org.tizen.myfile syslogd rwx--
+org.tizen.myfile data-provider-master::shortcut rw---
+org.tizen.myfile data-provider-master::shortcut.shortcut -w---
+org.tizen.myfile data-provider-master::utility rw---
+org.tizen.myfile data-provider-master::notification rw---
+org.tizen.myfile data-provider-master::notification.client -w---
+org.tizen.myfile data-provider-master::badge rw---
+org.tizen.myfile data-provider-master::badge.client -w---
+org.tizen.myfile crash-worker r-x--
+org.tizen.myfile net.wifi-qs rwx--
+org.tizen.myfile sys-assert::info -wx--
+org.tizen.myfile sys-assert::core rwxat
+org.tizen.myfile cbhm rwx--
+org.tizen.myfile drmfw rw---
+org.tizen.myfile deviced rwxa-
+org.tizen.myfile org.tizen.admin-data rw---
+org.tizen.myfile org.tizen.setting::default-resources r-x--
+e17 org.tizen.myfile rw---
+system::use_internet org.tizen.myfile -w---
+org.tizen.data-provider-slave org.tizen.myfile rwx--
+org.tizen.contacts org.tizen.myfile rwx--
+org.tizen.email org.tizen.myfile rwx--
+org.tizen.app-tray org.tizen.myfile r-x--
+org.tizen.music-player org.tizen.myfile rwx--
+org.tizen.volume org.tizen.myfile --x--
+org.tizen.quickpanel org.tizen.myfile --x--
+org.tizen.lockscreen org.tizen.myfile --x--
+org.tizen.cluster-home org.tizen.myfile r-x--
+context-service org.tizen.myfile r-x--
+media-server org.tizen.myfile -w---
+nfc-share-service org.tizen.myfile rw---
+isf org.tizen.myfile r-x--
+net.wifi-qs org.tizen.myfile --x--
+org.tizen.image-viewer org.tizen.myfile rwx--
+org.tizen.dailybriefing-agent org.tizen.myfile --x--
+org.tizen.indicator org.tizen.myfile --x--
+org.tizen.miniapp-tray org.tizen.myfile --x--
+org.tizen.add-viewer org.tizen.myfile --x--
+org.tizen.draglock org.tizen.myfile --x--
+org.tizen.menu-screen org.tizen.myfile --x--
+felicalock org.tizen.myfile --x--
+net.netpopup org.tizen.myfile --x--
+org.tizen.lowbat-syspopup org.tizen.myfile --x--
+org.tizen.app-selector org.tizen.myfile --x--
+org.tizen.myfile xorg::screencapture r----
+org.tizen.myfile system::vconf rwxat
+org.tizen.myfile contacts-service::db rwx--
+org.tizen.myfile device::app_logging -w---
+org.tizen.myfile csc-manager rwx--
+org.tizen.myfile org.tizen.smemo rwx--
+org.tizen.myfile org.tizen.gallery rwxa-
+org.tizen.myfile ims-service::db rw---
+org.tizen.myfile system::vconf_inhouse rwxat
+org.tizen.myfile system::vconf_setting rwxat
+org.tizen.myfile system::vconf_system rw---
+org.tizen.myfile contacts-service::svc rw---
+org.tizen.myfile ug-msg-composer-efl rwxat
+org.tizen.myfile contacts-service::phonelog rw---
+org.tizen.myfile msg-service::read rw---
+org.tizen.myfile msg-service::write rw---
+org.tizen.myfile msg-service::wappush rw---
+org.tizen.myfile telephony_framework::api_manager r----
+org.tizen.myfile telephony_framework::api_modem -w---
+org.tizen.myfile org.tizen.gallery::web-media.db rwx--
+org.tizen.myfile org.tizen.gallery::gallery-media.db rwx--
+org.tizen.myfile org.tizen.gallery-service rwx--
+org.tizen.myfile org.tizen.contacts rwx--
+org.tizen.myfile ug-image-viewer-efl rwxat
+org.tizen.myfile download-provider rw---
+org.tizen.myfile data-provider-master rw---
+org.tizen.myfile allshare::svc rwx--
+org.tizen.myfile net-config r-x--
+org.tizen.myfile pkgmgr r----
+org.tizen.myfile org.tizen.myfile rw---
+org.tizen.myfile dali rwxat
+org.tizen.myfile cloud-content-sync::db rw---
+org.tizen.myfile cloud-content-sync rwx--
+org.tizen.myfile device::hwcodec rw---
+org.tizen.myfile org.tizen.gallery::face-svc.db rwx--
+org.tizen.myfile ug-email-viewer-efl rwx--
+org.tizen.myfile ug-email-docsearch-efl --x--
+org.tizen.myfile camera-external-engine rw---
+org.tizen.myfile system::vconf_inouse r----
+org.tizen.myfile system::vconf_privacy rw---
+org.tizen.myfile system::vconf_multimedia rw---
+org.tizen.myfile system::vconf_network rw---
+org.tizen.myfile system::vconf_misc rw---
+aul org.tizen.myfile rwx--
+org.tizen.gallery-service org.tizen.myfile rwx--
+org.tizen.cluster-home ug-image-viewer-efl r-x--
+org.tizen.lockscreen ug-image-viewer-efl r-x--
+org.tizen.myfile smemo::db rw---
+org.tizen.myfile org.tizen.browser rw---
+org.tizen.myfile org.tizen.image-editor r----
+org.tizen.myfile org.tizen.calendar rwx--
+org.tizen.myfile calendar-service rwx--
+org.tizen.myfile device::sys_logging -w---
+org.tizen.myfile webkit2-efl r-x--
+org.tizen.myfile resman::db rw---
+org.tizen.myfile map-efl rwxat
+org.tizen.myfile ug-email-composer-efl rwxat
+org.tizen.myfile ui-gadget::client --x--
+org.tizen.myfile secure-storage::pkcs12 r----
+org.tizen.myfile email-service::write rw---
+org.tizen.myfile calendar-service::svc rw---
+org.tizen.myfile ug_bluetooth r-x--
+org.tizen.myfile syspopup::db rwx--
+org.tizen.myfile bt-service::admin -w---
+org.tizen.myfile bt-service::gap -w---
+org.tizen.myfile bt-service::manager -w---
+org.tizen.myfile system::app_logging -w---
+org.tizen.myfile svi-data rwxat
+org.tizen.myfile immvibed rwx--
+org.tizen.myfile libaccounts-svc::db rw---
+org.tizen.myfile org.tizen.volume rwx--
+org.tizen.myfile device::camera rw---
+org.tizen.myfile device::mdnie rw---
+org.tizen.myfile location_fw::client rwx--
+org.tizen.myfile pkgmer::db r----
+org.tizen.myfile stt-server rwx--
+org.tizen.myfile tts-server rwx--
+org.tizen.myfile ug-camera-efl rwxat
+org.tizen.myfile vcs-server rwx--
+org.tizen.myfile image-filter-d::db rw---
+org.tizen.myfile location_fw::db rw---
+org.tizen.myfile pkgmgr::db rw---
+org.tizen.myfile org.tizen.svoice rwx--
+org.tizen.myfile org.tizen.dropbox r-x--
+org.tizen.myfile org.tizen.facebook r-x--
+org.tizen.myfile oma-ds-agent rwx--
+oma-ds-agent org.tizen.myfile rwx--
+org.tizen.myfile oma-ds-agent::cfg rwxat
+org.tizen.setting org.tizen.myfile r-x--
+org.tizen.setting oma-ds-agent::cfg rwx--
+system::use_internet oma-ds-agent rwx--
+oma-ds-agent system::use_internet rwx--
+org.tizen.myfile syslogd rwx--
+org.tizen.myfile e17 r----
+org.tizen.myfile dlogutil r-x--
+org.tizen.myfile telephony_framework r-x--
+org.tizen.myfile aul r-x--
+org.tizen.myfile ode r-x--
+org.tizen.myfile sensor-framework r-x--
+org.tizen.myfile secure-storage r-x--
+org.tizen.myfile starter r-x--
+org.tizen.myfile osp-app-service r-x--
+org.tizen.myfile osp-security-service r-x--
+org.tizen.myfile osp-channel-service r-x--
+org.tizen.myfile org.tizen.app-tray r-x--
+org.tizen.myfile org.tizen.quickpanel r-x--
+org.tizen.myfile connman rwx--
+org.tizen.myfile mobicore-daemon r-x--
+org.tizen.myfile alarm-server rwx--
+org.tizen.myfile brcm_daemon r-x--
+org.tizen.myfile resman r-x--
+org.tizen.myfile osp-connectivity-service rwx--
+org.tizen.myfile push-service rwx--
+org.tizen.myfile eas-engine rwx--
+org.tizen.myfile org.tizen.data-provider-slave rwx--
+org.tizen.myfile org.tizen.data-provider-slave rwx--
+org.tizen.myfile usb-server rwx--
+org.tizen.myfile mtp-responder rwx--
+org.tizen.myfile sdbd rwx--
+org.tizen.myfile org.tizen.volume rwx--
+ui-gadget::client oma-ds-agent::svc rw---
+org.tizen.myfile samsung-account-front r-x--
+org.tizen.myfile worldclock::db rw---
+org.tizen.myfile location_fw::client rwx--
+org.tizen.myfile org.tizen.smartsearch --x--
+org.tizen.myfile ug-map-efl rwxat
+org.tizen.myfile obexd r-x--
+org.tizen.myfile org.tizen.fileshare-service rwxat
+org.tizen.fileshare-service org.tizen.myfile r-x--
+org.tizen.myfile nfc-manager::p2p rwx--
+org.tizen.myfile nfc-manager::admin rwx--
+org.tizen.myfile ug-setting-gallery-efl rwxat
+org.tizen.myfile org.tizen.music-player --x--
+org.tizen.myfile phone-misc::db rw---
+org.tizen.myfile msg-service::db rw---
+org.tizen.myfile ug-msg-viewer-efl rwxat
diff --git a/packaging/org.tizen.myfile.spec b/packaging/org.tizen.myfile.spec
new file mode 100755 (executable)
index 0000000..08b5096
--- /dev/null
@@ -0,0 +1,83 @@
+#sbs-git:slp/pkgs/m/myfiles myfiles 0.1.6 2caccae458123f3effccfcf34469f363593d375e
+Name:       org.tizen.myfile
+Summary:    Myfile Application v1.0
+Version:    0.2.10
+Release:    1
+Group:      TO_BE/FILLED_IN
+License:    Flora
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires:  pkgconfig(capi-appfw-application)
+BuildRequires:  pkgconfig(elementary)
+BuildRequires:  pkgconfig(vconf)
+BuildRequires:  pkgconfig(glib-2.0)
+BuildRequires:  pkgconfig(gthread-2.0)
+BuildRequires:  pkgconfig(drm-client)
+BuildRequires:  pkgconfig(ui-gadget-1)
+BuildRequires:  pkgconfig(libmedia-service)
+BuildRequires:  pkgconfig(dlog)
+BuildRequires:  pkgconfig(ecore-imf)
+BuildRequires:  pkgconfig(ecore-x)
+BuildRequires:  pkgconfig(eina)
+BuildRequires:  pkgconfig(evas)
+BuildRequires:  pkgconfig(edje)
+BuildRequires:  pkgconfig(ecore)
+BuildRequires:  pkgconfig(ecore-file)
+BuildRequires:  pkgconfig(ecore-input)
+BuildRequires:  pkgconfig(icu-i18n)
+BuildRequires:  pkgconfig(icu-io)
+BuildRequires:  pkgconfig(icu-le)
+BuildRequires:  pkgconfig(icu-lx)
+BuildRequires:  pkgconfig(icu-uc)
+BuildRequires:  pkgconfig(capi-system-power)
+BuildRequires:  pkgconfig(capi-system-runtime-info)
+BuildRequires:  pkgconfig(capi-content-media-content)
+BuildRequires:  pkgconfig(capi-network-nfc)
+BuildRequires:  pkgconfig(capi-system-sensor)
+BuildRequires:  pkgconfig(syspopup-caller)
+BuildRequires:  pkgconfig(status)
+
+BuildRequires:  cmake
+BuildRequires:  edje-bin
+BuildRequires:  embryo-bin
+BuildRequires:  gettext-devel
+
+%description
+Myfile Application v1.0.
+
+%prep
+%setup -q
+
+%define PREFIX    "/usr/apps/org.tizen.myfile"
+%define RESDIR    "/usr/apps/org.tizen.myfile/res"
+%define DATADIR    "/opt/usr/apps/org.tizen.myfile/data"
+
+%build
+cmake . -DCMAKE_INSTALL_PREFIX="%{PREFIX}" -DCMAKE_DESKTOP_ICON_DIR="/usr/share/icons/default/small" -DCMAKE_DESKTOP_DIR="/usr/share/applications" -DCMAKE_INSTALL_PKG_NAME="%{name}" -DCMAKE_INSTALL_DATA_DIR="%{DATADIR}"
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+mkdir -p %{buildroot}/usr/share/license
+cp LICENSE.Flora %{buildroot}/usr/share/license/%{name}
+%make_install
+
+%post
+chown -R 5000:5000 /opt/usr/apps/org.tizen.myfile/data
+
+/usr/bin/vconftool set -t int db/private/org.tizen.myfile/list_by 7 -i -g 5000 -f
+/usr/bin/vconftool set -t int db/private/org.tizen.myfile/view_style 0 -i -g 5000 -f
+/usr/bin/vconftool set -t int db/private/org.tizen.myfile/extension_state 1 -i -g 5000 -f
+/usr/bin/vconftool set -t string db/private/org.tizen.myfile/recent_file "" -s -g 5000 -f
+
+%files
+%manifest org.tizen.myfile.manifest
+%defattr(-,root,root,-)
+/opt/etc/smack/accesses.d/org.tizen.myfile.rule
+/usr/apps/org.tizen.myfile/bin/myfile
+/usr/apps/org.tizen.myfile/res/locale/*
+/usr/apps/org.tizen.myfile/res/images/*
+/usr/apps/org.tizen.myfile/res/edje/*
+/opt/usr/apps/org.tizen.myfile/data
+/usr/share/packages/*
+/usr/share/icons/default/small/org.tizen.myfile.png
+/usr/share/license/%{name}
diff --git a/src/common/file-operation/mf-cancel.c b/src/common/file-operation/mf-cancel.c
new file mode 100644 (file)
index 0000000..729b273
--- /dev/null
@@ -0,0 +1,90 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <glib.h>
+#include "mf-cancel.h"
+
+
+
+mf_cancel *mf_cancel_new(void)
+{
+       mf_cancel *cancel = NULL;
+
+       cancel = g_new0(mf_cancel, 1);
+       if (cancel) {
+               cancel->is_cancel = FALSE;
+               cancel->do_cancel = FALSE;
+               g_static_mutex_init(&cancel->s_mutex);
+       }
+       return cancel;
+}
+
+void mf_cancel_free(mf_cancel *cancel)
+{
+       if (cancel) {
+               cancel->is_cancel = FALSE;
+               g_static_mutex_free(&cancel->s_mutex);
+       }
+       return;
+}
+
+void mf_cancel_do_cancel(mf_cancel *cancel)
+{
+       if (cancel) {
+               g_static_mutex_lock(&cancel->s_mutex);
+               cancel->do_cancel = TRUE;
+               g_static_mutex_unlock(&cancel->s_mutex);
+       }
+       return;
+}
+
+gboolean mf_cancel_check_cancel(mf_cancel *cancel)
+{
+       gboolean do_cancel = FALSE;
+       if (cancel) {
+               g_static_mutex_lock(&cancel->s_mutex);
+               if (cancel->do_cancel)
+                       do_cancel = TRUE;
+               g_static_mutex_unlock(&cancel->s_mutex);
+       }
+       return do_cancel;
+}
+
+
+void mf_cancel_set_cancelled(mf_cancel *cancel)
+{
+       if (cancel) {
+               g_static_mutex_lock(&cancel->s_mutex);
+               cancel->is_cancel = TRUE;
+               g_static_mutex_unlock(&cancel->s_mutex);
+       }
+       return;
+}
+
+gboolean mf_cancel_is_cancelled(mf_cancel *cancel)
+{
+       gboolean is_cancelled = FALSE;
+       if (cancel) {
+               g_static_mutex_lock(&cancel->s_mutex);
+               if (cancel->is_cancel)
+                       is_cancelled = TRUE;
+               g_static_mutex_unlock(&cancel->s_mutex);
+       }
+       return is_cancelled;
+}
diff --git a/src/common/file-operation/mf-copy-internal.c b/src/common/file-operation/mf-copy-internal.c
new file mode 100644 (file)
index 0000000..40f8de4
--- /dev/null
@@ -0,0 +1,821 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <stdio.h>
+#include <glib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+#include <ftw.h>
+
+#include "mf-copy-internal.h"
+#include "mf-cancel.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+#include "mf-media-content.h"
+#include "mf-fo-debug.h"
+
+struct _mf_copy_handle_intenal {
+       GList *src_items;
+       char *dst_dir;
+       mf_cancel *cancel;
+       void *u_data;
+       Ecore_Pipe *pipe;
+       gboolean sync;
+
+       GMutex *lock;
+       GCond *cond;
+
+       mf_fo_msg msg;
+       mf_fo_request *req;
+};
+
+GSList *copy_list = NULL;
+
+#ifndef SAFE_FREE
+#define SAFE_FREE(x) do {\
+                               if ((x) != NULL) {\
+                                       free(x); x = NULL;\
+                               } \
+                       } while (0)
+#endif
+
+#define MSG_REPORT_PERIOD (1)
+#define DEF_ALLLOC_SIZE 16384  /*((4)*(1024))*/
+#define DIR_MODE_BIT (01777)
+#define FILE_MODE_BIT (S_IRWXU | S_IRWXG | S_IRWXO)
+#define PER_HANDLE_MAX_SIZE (10*1024*1204)
+#define PER_HANDLE_MIN_SIZE (1024*1024)
+
+
+static gchar *__mf_copy_change_root_name(const char *name, const char *old_root, const char *new_root)
+{
+       gchar *new_name = NULL;
+
+       if (name && old_root && new_root) {
+               int old_len = strlen(old_root);
+               int new_len = strlen(new_root);
+               int name_len = strlen(name);
+               const char *base = NULL;
+               GString *n = NULL;
+
+               if ((strstr(name, old_root) == NULL)
+                   || (name_len <= old_len)
+                   || ((name[old_len] == '/' && name[old_len + 1] == '\0'))
+                   || FALSE) {
+                       mf_fo_loge("invaild args - name : [%s], old_root : [%s]", name, old_root);
+                       return NULL;
+               }
+
+               base = name + old_len;
+               if (name[old_len] == '/') {
+                       base += 1;
+               }
+
+               n = g_string_new(new_root);
+               if (n) {
+                       if (n->str[new_len - 1] == '/') {
+                               g_string_append_printf(n, "%s", base);
+                       } else {
+                               g_string_append_printf(n, "/%s", base);
+                       }
+                       new_name = g_string_free(n, FALSE);
+               }
+       }
+       return new_name;
+}
+
+
+int _mf_copy_copy_regfile(const char *src, struct stat *src_statp, const char *dst, unsigned long buf_size, mf_cancel *cancel, _mf_fo_msg_cb msg_cb,
+                         void *msg_data)
+{
+       FO_TRACE_BEGIN;
+       FILE *src_f = NULL;
+       FILE *dst_f = NULL;
+       void *buf = NULL;
+       unsigned long alloc_size = DEF_ALLLOC_SIZE;
+       ssize_t r_size = 0;
+       mode_t src_mode = 0;
+       int err = 0;
+       char err_buf[MF_ERR_BUF] = { 0, };
+
+       if (!src) {
+               mf_fo_loge("check argument src");
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+       if (!dst) {
+               mf_fo_loge("check argument dst");
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (src_statp) {
+               src_mode = src_statp->st_mode;
+       } else {
+               struct stat src_info;
+               if (stat(src, &src_info)) {
+                       mf_fo_loge("Fail to stat src file : %s", src);
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+                       }
+                       return err;
+               }
+               src_mode = src_info.st_mode;
+       }
+
+
+       if (!S_ISREG(src_mode)) {
+               mf_fo_loge("src[%s] is not regular file", src);
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_TYPE);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+               }
+               return err;
+       }
+       src_f = fopen(src, "rb");
+       if (!src_f) {
+               mf_fo_loge("Fail to fopen %s file", src);
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       dst_f = fopen(dst, "wb");
+       if (!dst_f) {
+               mf_fo_loge("Fail to fopen %s file", dst);
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+               }
+               goto ERROR_CLOSE_FD;
+       }
+       if (buf_size == 0) {
+               struct stat dst_info;
+               if (stat(dst, &dst_info)) {
+                       MF_FILE_ERROR_LOG(err_buf, "Fail to stat dst file", dst);
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+                       }
+                       goto ERROR_CLOSE_FD;
+               }
+               if (dst_info.st_blksize > 0) {
+                       alloc_size = dst_info.st_blksize;
+               }
+       } else {
+               alloc_size = buf_size;
+       }
+       alloc_size = DEF_ALLLOC_SIZE;
+
+       buf = malloc(alloc_size);
+       if (!buf) {
+               mf_fo_loge("fail to alloc buf, alloc_size : %lu", alloc_size);
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_MEM);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+               }
+               goto ERROR_CLOSE_FD;
+       }
+
+       int count = 0;
+       ssize_t msg_size = 0;
+
+       struct _mf_copy_handle_intenal *cp_handle = NULL;
+       cp_handle = (struct _mf_copy_handle_intenal *)msg_data;
+       mf_debug("cp_handle->msg.total_size=%lld", cp_handle->msg.total_size);
+       int dynamic_size = 0;
+       if (cp_handle->msg.total_size > PER_HANDLE_MAX_SIZE) {
+               dynamic_size = 64;
+       } else if (cp_handle->msg.total_size <= PER_HANDLE_MAX_SIZE &&
+                  cp_handle->msg.total_size > PER_HANDLE_MIN_SIZE) {
+               dynamic_size = 8;
+       } else {
+               dynamic_size = 1;
+       }
+
+       while ((r_size = fread(buf, 1, alloc_size, src_f)) > 0)
+       {
+               ssize_t total = r_size;
+               void *buf_p = buf;
+
+               count++;
+               while (total > 0) {
+                       ssize_t w_size = 0;
+                       w_size = fwrite(buf_p, 1, total, dst_f);
+                       if (ferror(dst_f) != 0 || (r_size != w_size)) {
+                               MF_FILE_ERROR_LOG(err_buf, "fail to write", dst_f);
+                               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                               if (msg_cb) {
+                                       msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+                               }
+                               goto ERROR_CLOSE_FD;
+                       }
+
+                       buf_p += w_size;
+                       total -= w_size;
+               }
+               if (cancel && mf_cancel_check_cancel(cancel)) {
+                       goto CANCEL_CLOSE_FD;
+               }
+
+               if (count == dynamic_size && msg_cb) {
+                       msg_size += r_size;
+                       msg_cb(MF_MSG_DOING, src, msg_size, 0, msg_data);
+                       msg_size = 0;
+               } else {
+                       msg_size += r_size;
+               }
+
+               count = count % dynamic_size;
+               //g_usleep(10000);
+       }
+
+       if (msg_size > 0 && msg_cb) {
+               msg_size += r_size;
+               msg_cb(MF_MSG_DOING, src, msg_size, 0, msg_data);
+               msg_size = 0;
+       }
+
+       free(buf);
+
+       fclose(src_f);
+       fclose(dst_f);
+       mf_fo_logd("success to copy file %s to %s", src, dst);
+
+       return 0;
+
+ERROR_CLOSE_FD:
+
+
+       if (src_f) {
+               fclose(src_f);
+               src_f = NULL;
+       }
+       if (dst_f) {
+               fclose(dst_f);
+               dst_f = NULL;
+               remove(dst);
+       }
+       if (buf) {
+               free(buf);
+       }
+       return err;
+
+
+CANCEL_CLOSE_FD:
+       if (buf) {
+               free(buf);
+       }
+       if (src_f) {
+               fclose(src_f);
+               src_f = NULL;
+       }
+       if (dst_f) {
+               fclose(dst_f);
+               dst_f = NULL;
+               remove(dst);
+       }
+       return 1;
+}
+
+static int __get_copy_directory_hierarchies( const char *pathname, const struct stat *statptr, int type)
+{
+       mf_fo_dir_list_info *info = NULL;
+       mf_debug("pathname is [%s]\t type is [%d]\t",
+               pathname, type);
+
+       switch (type) {
+
+       case FTW_F:
+               info = calloc(sizeof(mf_fo_dir_list_info), 1);
+               info->ftw_path = g_strdup(pathname);
+               info->type = type;
+               copy_list = g_slist_append(copy_list, info);
+               mf_debug("File pathname is [%s]", pathname);
+               break;
+       case FTW_D:
+               info = calloc(sizeof(mf_fo_dir_list_info), 1);
+               info->ftw_path = g_strdup(pathname);
+               info->type = type;
+               copy_list = g_slist_append(copy_list, info);
+               mf_debug("Directory pathname is [%s]", pathname);
+               //process file
+               break;
+       default:
+               mf_debug("Default pathname is [%s]", pathname);
+       }
+
+       return 0;
+}
+
+int _mf_copy_copy_directory(const char *src, struct stat *src_statp, const char *dst, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data)
+{
+       int ret = -1;
+       mode_t src_mode = 0;
+       int err = 0;
+       char err_buf[MF_ERR_BUF] = { 0, };
+       if (!src) {
+               mf_fo_loge("check argument src");
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+       if (!dst) {
+               mf_fo_loge("check argument dst");
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (src_statp) {
+               src_mode = src_statp->st_mode;
+       } else {
+               struct stat src_info;
+               if (stat(src, &src_info)) {
+                       mf_fo_loge("Fail to stat src file : %s", src);
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+                       }
+                       return err;
+               }
+               src_mode = src_info.st_mode;
+       }
+
+       if (access(dst, F_OK)) {
+               if (mkdir(dst, (src_mode & DIR_MODE_BIT))) {
+                       MF_FILE_ERROR_LOG(err_buf, "Fail to make directory", dst);
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+                       }
+                       return err;
+               } else {
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_DOING, dst, MF_VISUAL_FOLDER_SIZE, 0, msg_data);
+                       }
+               }
+       } else {
+               mf_fo_logd("directory[%s] is already existed", dst);
+       }
+
+       ret = ftw(src, __get_copy_directory_hierarchies, 16);
+       if (ret == 0) {
+               mf_debug();
+               mf_fo_dir_list_info *ent = NULL;
+               GSList *list = NULL;
+               list = copy_list;
+               while (list) {
+                       if (cancel && mf_cancel_check_cancel(cancel)) {
+                               goto DO_CANCEL;
+                       }
+                       ent = (mf_fo_dir_list_info *)list->data;
+                       mf_debug("name is [%s] type is [%d]", ent->ftw_path, ent->type);
+                       if (ent->type == FTW_D) {
+                               if (ent->ftw_path == NULL || strlen(ent->ftw_path) == 0) {
+                                       list = g_slist_next(list);
+                                       continue;
+                               }
+                               if (g_strcmp0(ent->ftw_path, src) == 0) {
+                                       list = g_slist_next(list);
+                                       continue;
+                               }
+                               char *new_dir = __mf_copy_change_root_name(ent->ftw_path, src, dst);
+                               mf_fo_logi("copy dir %s to %s", ent->ftw_path, new_dir);
+                               if (new_dir) {
+                                       if (!_mf_fo_check_exist(new_dir)) {
+                                               struct stat info;
+                                               if (stat(ent->ftw_path, &info) == 0) {
+                                                       if (mkdir(new_dir, (info.st_mode & DIR_MODE_BIT))) {
+                                                               /* fts_set(fts, ent, FTS_SKIP); */
+                                                               mf_fo_loge("Fail to make directory [%s]", new_dir);
+                                                               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                                                               if (msg_cb) {
+                                                                       msg_cb(MF_MSG_ERROR, new_dir, 0, err, msg_data);
+                                                               }
+                                                               free(new_dir);
+                                                               goto ERROR_CLOSE_FD;
+                                                       } else {
+                                                               if (msg_cb) {
+                                                                       msg_cb(MF_MSG_DOING, ent->ftw_path, 0, 0, msg_data);
+                                                               }
+                                                       }
+                                               } else {
+                                                       MF_FILE_ERROR_LOG(err_buf, "Fail to stat ", ent->ftw_path);
+                                                       /* fts_set(fts, ent, FTS_SKIP); */
+                                                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                                                       if (msg_cb) {
+                                                               msg_cb(MF_MSG_ERROR, ent->ftw_path, 0, err, msg_data);
+                                                       }
+                                                       free(new_dir);
+                                                       goto ERROR_CLOSE_FD;
+                                               }
+                                       } else {
+                                               struct stat new_dst_info;
+                                               if (stat(new_dir, &new_dst_info) == 0) {
+                                                       if (S_ISDIR(new_dst_info.st_mode)) {
+                                                               if (msg_cb) {
+                                                                       msg_cb(MF_MSG_DOING, ent->ftw_path, 0, 0, msg_data);
+                                                               }
+                                                       } else {
+                                                               mf_fo_loge("[%s] is already existed, and this one is not directory", new_dir);
+                                                               /*set FTS_SKIP to skip children of current*/
+                                                               /*fts_set(fts, ent, FTS_SKIP);*/
+                                                               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_ARGUMENT);
+                                                               if (msg_cb) {
+                                                                       msg_cb(MF_MSG_ERROR, new_dir, 0, err, msg_data);
+                                                               }
+                                                               free(new_dir);
+                                                               goto ERROR_CLOSE_FD;
+                                                       }
+                                               } else {
+                                                       MF_FILE_ERROR_LOG(err_buf, "Fail to stat ", new_dir);
+                                                       /*fts_set(fts, ent, FTS_SKIP);*/
+                                                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                                                       if (msg_cb) {
+                                                               msg_cb(MF_MSG_ERROR, new_dir, 0, err, msg_data);
+                                                       }
+                                                       free(new_dir);
+                                                       goto ERROR_CLOSE_FD;
+                                               }
+                                       }
+                                       free(new_dir);
+                               } else {
+                                       err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+                                       if (msg_cb) {
+                                               msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                                       }
+                                       goto ERROR_CLOSE_FD;
+                               }
+                       } else if (ent->type == FTW_F) {
+                               if (ent->ftw_path == NULL || strlen(ent->ftw_path) == 0) {
+                                       list = g_slist_next(list);
+                                       continue;
+                               }
+                               char *new_file = __mf_copy_change_root_name(ent->ftw_path, src, dst);
+                               if (new_file) {
+                                       err = _mf_copy_copy_regfile(ent->ftw_path, NULL, new_file, 0, cancel, msg_cb, msg_data);
+                                       if (err == 0) {
+                                               mf_media_content_scan_file(new_file);
+                                       }
+                                       free(new_file);
+                                       if (err > 0) {
+                                               goto DO_CANCEL;
+                                       } else if (err < 0) {
+                                               goto ERROR_CLOSE_FD;
+                                       }
+                               } else {
+                                       err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+                                       if (msg_cb) {
+                                               msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                                       }
+                                       goto ERROR_CLOSE_FD;
+                               }
+                       }
+                       mf_debug("ent->path is [%s]", ent->ftw_path);
+                       list = g_slist_next(list);
+               }
+
+       } else {
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+               }
+               _mf_fo_free_directory_hierarchies(&copy_list);
+               return err;
+
+       }
+       _mf_fo_free_directory_hierarchies(&copy_list);
+       return 0;
+
+ERROR_CLOSE_FD:
+       _mf_fo_free_directory_hierarchies(&copy_list);
+       return err;
+
+DO_CANCEL:
+       _mf_fo_free_directory_hierarchies(&copy_list);
+       return 1;
+}
+
+int _mf_copy_copy_internal(const char *src, const char *dst_dir, mf_cancel *cancel, _mf_fo_msg_cb msg_func, mf_req_callback req_func, void *msg_data)
+{
+       int err = 0;
+       char *src_basename = NULL;
+       char *new_dst = NULL;
+       char *next_name = NULL;
+       int base_size = 0;
+       int root_size = 0;
+       int with_slash = 1;
+       int alloc_size = 1;     /*for null*/
+       struct stat src_info;
+       char err_buf[MF_ERR_BUF] = { 0, };
+
+       if (!src || strlen(src) <= 1) {
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_func) {
+                       msg_func(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (!dst_dir) {
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_func) {
+                       msg_func(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (access(dst_dir, R_OK | W_OK)) {
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_PERMISSION);
+               if (msg_func) {
+                       msg_func(MF_MSG_ERROR, dst_dir, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (stat(src, &src_info)) {
+               MF_FILE_ERROR_LOG(err_buf, "Fail to stat src ", src);
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_func) {
+                       msg_func(MF_MSG_ERROR, src, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (S_ISDIR(src_info.st_mode)) {
+               if (g_strcmp0(dst_dir, src) == 0) {
+                       mf_fo_loge("dst is child of src - src : %s, dst : %s", src, dst_dir);
+                       err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_ARGUMENT);
+                       if (msg_func) {
+                               msg_func(MF_MSG_ERROR, dst_dir, 0, err, msg_data);
+                       }
+                       return err;
+               }
+       }
+       src_basename = g_path_get_basename(src);
+       if (!src_basename) {
+               mf_fo_loge("fail to get basename from src[%s]", src);
+               err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+               if (msg_func) {
+                       msg_func(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       base_size = strlen(src_basename);
+       root_size = strlen(dst_dir);
+
+       if (dst_dir[root_size - 1] != '/') {
+               alloc_size += 1;
+               with_slash = 0;
+       }
+
+       alloc_size += (base_size + root_size);
+
+       new_dst = malloc(sizeof(char) * (alloc_size));
+       if (!new_dst) {
+               mf_fo_loge("fail to alloc new dst");
+               err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+               if (msg_func) {
+                       msg_func(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               goto ERROR_FREE_MEM;
+       }
+
+       if (with_slash) {
+               snprintf(new_dst, alloc_size, "%s%s", dst_dir, src_basename);
+       } else {
+               snprintf(new_dst, alloc_size, "%s/%s", dst_dir, src_basename);
+       }
+       SAFE_FREE(src_basename);
+
+       if (cancel && mf_cancel_check_cancel(cancel)) {
+               goto CANCEL_FREE_MEM;
+       }
+
+       if (access(new_dst, F_OK)) {
+               if (S_ISDIR(src_info.st_mode)) {
+                       err = _mf_copy_copy_directory(src, &src_info, new_dst, cancel, msg_func, msg_data);
+                       if (err == 0) {
+                               mf_media_content_scan_folder(new_dst);
+                       }
+               } else if (S_ISREG(src_info.st_mode)) {
+                       /*just copy*/
+                       err = _mf_copy_copy_regfile(src, &src_info, new_dst, 0, cancel, msg_func, msg_data);
+                       if (err == 0) {
+                               mf_media_content_scan_file(new_dst);
+                       }
+               } else {
+                       mf_fo_loge("item[%s] is not file or directory", src);
+                       err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_TYPE | MF_FO_ERR_REPORT_CLASS);
+                       if (msg_func) {
+                               msg_func(MF_MSG_ERROR, src, 0, err, msg_data);
+                       }
+                       goto ERROR_FREE_MEM;
+               }
+       } else {
+               mf_request_type result = MF_REQ_NONE;
+               if (req_func) {
+                       mf_fo_request *req = mf_request_new();
+                       if (req) {
+                               mf_request_set_path(req, new_dst);
+                               mf_fo_logd("~~~~~~ waiting for request");
+                               req_func(req, msg_data);
+                               result = mf_request_get_result(req);
+                               mf_fo_logd("~~~~~~ get request : %d", result);
+                               if (result == MF_REQ_RENAME) {
+                                       next_name = mf_request_get_new_name(req);
+                               }
+                               mf_request_free(req);
+                       } else {
+                               mf_fo_loge("Fail to alloc request");
+                               err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+                               if (msg_func) {
+                                       msg_func(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                               }
+                               goto ERROR_FREE_MEM;
+                       }
+               }
+
+               switch (result) {
+               case MF_REQ_NONE:
+               case MF_REQ_MERGE:
+                       {
+                               struct stat dst_info;
+                               if (stat(new_dst, &dst_info)) {
+                                       MF_FILE_ERROR_LOG(err_buf, "Fail to stat new_dst ", new_dst);
+                                       if (msg_func) {
+                                               msg_func(MF_MSG_ERROR, NULL, 0, errno, msg_data);
+                                       }
+                                       goto ERROR_FREE_MEM;
+                               }
+
+                               if (S_ISDIR(src_info.st_mode)) {
+                                       if (!S_ISDIR(dst_info.st_mode)) {
+                                               mf_fo_loge("src[%s] is directory, but dst[%s] is already existed and not a directory", src, new_dst);
+
+                                               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_TYPE);
+                                               if (msg_func) {
+                                                       msg_func(MF_MSG_ERROR, new_dst, 0, err, msg_data);
+                                               }
+                                               goto ERROR_FREE_MEM;
+                                       }
+                                       /*just copy*/
+                                       err = _mf_copy_copy_directory(src, &src_info, new_dst, cancel, msg_func, msg_data);
+                                       if (err == 0) {
+                                               mf_media_content_scan_folder(new_dst);
+                                       }
+                               } else if (S_ISREG(src_info.st_mode)) {
+                                       if (!S_ISREG(dst_info.st_mode)) {
+                                               mf_fo_loge("src[%s] is file, but dst[%s] is already existed and not a file", src, new_dst);
+                                               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_TYPE);
+                                               if (msg_func) {
+                                                       msg_func(MF_MSG_ERROR, new_dst, 0, err, msg_data);
+                                               }
+                                               goto ERROR_FREE_MEM;
+                                       }
+                                       /*just copy*/
+                                       err = _mf_copy_copy_regfile(src, &src_info, new_dst, dst_info.st_blksize, cancel, msg_func, msg_data);
+                                       if (err == 0) {
+                                               mf_media_content_scan_file(new_dst);
+                                       }
+                               }
+
+                       }
+                       break;
+               case MF_REQ_RENAME:
+                       {
+                               if (next_name) {
+                                       if (S_ISDIR(src_info.st_mode)) {
+                                               err = _mf_copy_copy_directory(src, &src_info, next_name, cancel, msg_func, msg_data);
+                                               if (err == 0) {
+                                                       mf_media_content_scan_folder(next_name);
+                                               }
+                                       } else if (S_ISREG(src_info.st_mode)) {
+                                               err = _mf_copy_copy_regfile(src, &src_info, next_name, 0, cancel, msg_func, msg_data);
+                                               if (err == 0) {
+                                                       mf_media_content_scan_file(next_name);
+                                               }
+                                       }
+                                       SAFE_FREE(next_name);
+                               } else {
+                                       if (S_ISDIR(src_info.st_mode)) {
+                                               int errcode = 0;
+                                               next_name = _mf_fo_get_next_unique_dirname(new_dst, &errcode);
+                                               if (!next_name) {
+                                                       mf_fo_loge("Fail to get next directory name [%s]", new_dst);
+                                                       err = (_mf_fo_errno_to_mferr(errcode) | MF_FO_ERR_DST_CLASS);
+                                                       if (msg_func) {
+                                                               msg_func(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                                                       }
+                                                       goto ERROR_FREE_MEM;
+                                               }
+                                               err = _mf_copy_copy_directory(src, &src_info, next_name, cancel, msg_func, msg_data);
+                                               if (err == 0) {
+                                                       mf_media_content_scan_folder(next_name);
+                                               }
+                                       } else if (S_ISREG(src_info.st_mode)) {
+                                               int errcode = 0;
+                                               next_name = _mf_fo_get_next_unique_filename(new_dst, &errcode);
+                                               if (!next_name) {
+                                                       mf_fo_loge("Fail to get next file name [%s]", new_dst);
+                                                       err = (_mf_fo_errno_to_mferr(errcode) | MF_FO_ERR_DST_CLASS);
+                                                       if (msg_func) {
+                                                               msg_func(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                                                       }
+                                                       goto ERROR_FREE_MEM;
+                                               }
+                                               err = _mf_copy_copy_regfile(src, &src_info, next_name, 0, cancel, msg_func, msg_data);
+                                               if (err == 0) {
+                                                       mf_media_content_scan_file(next_name);
+                                               }
+                                       }
+                                       SAFE_FREE(next_name);
+                               }
+                       }
+                       break;
+               case MF_REQ_SKIP:
+                       {
+                               if (msg_func) {
+                                       unsigned long long size = 0;
+                                       /*1 TODO : Do i need to report error, if i fail to get size ?*/
+                                       _mf_fo_get_total_item_size(src, &size);
+                                       msg_func(MF_MSG_SKIP, NULL, size, 0, msg_data);
+                               }
+                       }
+                       break;
+               case MF_REQ_CANCEL:
+                       {
+                               if (cancel) {
+                                       mf_cancel_do_cancel(cancel);
+                               }
+                               goto CANCEL_FREE_MEM;
+                       }
+                       break;
+               default:
+                       abort();
+                       break;
+
+               }
+       }
+       SAFE_FREE(new_dst);
+
+       if (err > 0) {
+               goto CANCEL_FREE_MEM;
+       } else if (err < 0) {
+               goto ERROR_FREE_MEM;
+       }
+
+       return 0;
+
+ERROR_FREE_MEM:
+       mf_fo_logi("Copy error");
+       SAFE_FREE(src_basename);
+       SAFE_FREE(new_dst);
+
+       return err;
+
+CANCEL_FREE_MEM:
+
+       mf_fo_logi("Copy cancelled");
+       SAFE_FREE(new_dst);
+       SAFE_FREE(next_name);
+
+       return 1;
+}
diff --git a/src/common/file-operation/mf-copy.c b/src/common/file-operation/mf-copy.c
new file mode 100644 (file)
index 0000000..ae09dcd
--- /dev/null
@@ -0,0 +1,464 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <stdio.h>
+#include <glib.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/syscall.h>
+
+#include "mf-copy.h"
+#include "mf-copy-internal.h"
+#include "mf-cancel.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+#include "mf-fo-debug.h"
+#include "mf-callback.h"
+
+extern int flagMsg;
+extern pthread_mutex_t gLockMsg;
+extern pthread_cond_t gCondMsg;
+
+
+struct _mf_copy_handle {
+       GList *src_items;
+       char *dst_dir;
+       mf_cancel *cancel;
+       void *u_data;
+       Ecore_Pipe *pipe;
+       gboolean sync;
+
+       GMutex *lock;
+       GCond *cond;
+
+       mf_fo_msg msg;
+       mf_fo_request *req;
+};
+
+static double __mf_copy_get_time(void)
+{
+       struct timeval timev;
+
+       gettimeofday(&timev, NULL);
+       return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000);
+}
+
+static gboolean __mf_copy_msg_publish_callback(gpointer data)
+{
+       FO_TRACE_BEGIN;
+       struct _mf_copy_handle *cp_handle = NULL;
+       cp_handle = (struct _mf_copy_handle *)data;
+       mf_fo_msg msg;
+       memset(&msg, 0, sizeof(mf_fo_msg));
+
+       MYFILE_MAGIC_SET(&msg, MYFILE_MAGIC_PIPE_DATA);
+       if (!cp_handle) {
+               goto EXIT;
+       }
+
+       g_mutex_lock(cp_handle->lock);
+       msg.msg_type = cp_handle->msg.msg_type;
+       msg.error_code = cp_handle->msg.error_code;
+       msg.current = cp_handle->msg.current;
+       msg.current_index = cp_handle->msg.current_index;
+       msg.total_index = cp_handle->msg.total_index;
+       msg.current_size = cp_handle->msg.current_size;
+       msg.total_size = cp_handle->msg.total_size;
+       msg.current_real = cp_handle->msg.current_real;
+       msg.request = NULL;
+       msg.pipe = cp_handle->pipe;
+       g_mutex_unlock(cp_handle->lock);
+
+       ecore_pipe_write(cp_handle->pipe, &msg, sizeof(msg));
+
+EXIT:
+       FO_TRACE_END;
+       return FALSE;
+}
+
+static void __mf_copy_msg_cb(mf_msg_type msg_type, const char *real, unsigned long long size, int error_code, void *data)
+{
+       struct _mf_copy_handle *cp_handle = NULL;
+       cp_handle = (struct _mf_copy_handle *)data;
+
+       pthread_mutex_lock(&gLockMsg);
+       while (flagMsg == 0) {
+               mf_fo_loge("!!!!!!!!!!!! wait");
+               pthread_cond_wait(&gCondMsg, &gLockMsg);
+       }
+       flagMsg = 0;
+       pthread_mutex_unlock(&gLockMsg);
+
+       if (cp_handle) {
+               g_mutex_lock(cp_handle->lock);
+               cp_handle->msg.msg_type = msg_type;
+               if (msg_type == MF_MSG_ERROR) {
+                       cp_handle->msg.error_code = error_code;
+                       if (real) {
+                               if (cp_handle->msg.current_real) {
+                                       free(cp_handle->msg.current_real);
+                               }
+                               cp_handle->msg.current_real = strdup(real);
+                       }
+               } else {
+                       cp_handle->msg.error_code = 0;
+                       if (msg_type == MF_MSG_DOING) {
+                               if (real) {
+                                       if (cp_handle->msg.current_real) {
+                                               free(cp_handle->msg.current_real);
+                                       }
+                                       cp_handle->msg.current_real = strdup(real);
+                               }
+                               cp_handle->msg.current_size += size;
+                               cp_handle->msg.error_code = 0;
+                       } else if (msg_type == MF_MSG_SKIP) {
+                               cp_handle->msg.total_size -= size;
+                               cp_handle->msg.error_code = 0;
+                       }
+               }
+               g_mutex_unlock(cp_handle->lock);
+
+               __mf_copy_msg_publish_callback(cp_handle);
+       }
+       FO_TRACE_END;
+       return;
+}
+
+static gboolean __mf_copy_req_msg_callback(gpointer data)
+{
+       FO_TRACE_BEGIN;
+
+       struct _mf_copy_handle *cp_handle = NULL;
+       cp_handle = (struct _mf_copy_handle *)data;
+       mf_fo_msg msg;
+       memset(&msg, 0, sizeof(mf_fo_msg));
+
+       MYFILE_MAGIC_SET(&msg, MYFILE_MAGIC_PIPE_DATA);
+       if (!cp_handle) {
+               goto EXIT;
+       }
+
+       g_mutex_lock(cp_handle->lock);
+       msg.msg_type = MF_MSG_REQUEST;
+       msg.error_code = cp_handle->msg.error_code;
+       msg.current = cp_handle->msg.current;
+       msg.current_index = cp_handle->msg.current_index;
+       msg.total_index = cp_handle->msg.total_index;
+       msg.current_size = cp_handle->msg.current_size;
+       msg.total_size = cp_handle->msg.total_size;
+       msg.current_real = cp_handle->msg.current_real;
+       msg.request = cp_handle->req;
+       g_mutex_unlock(cp_handle->lock);
+       ecore_pipe_write(cp_handle->pipe, &msg, sizeof(msg));
+
+EXIT:
+
+       FO_TRACE_END;
+       return FALSE;
+}
+
+static void __mf_copy_req_cb(mf_fo_request *req, void *data)
+{
+       FO_TRACE_BEGIN;
+       struct _mf_copy_handle *cp_handle = NULL;
+       cp_handle = (struct _mf_copy_handle *)data;
+
+       if (cp_handle) {
+
+               cp_handle->req = req;
+               mf_request_set_cond(req, cp_handle->cond);
+               __mf_copy_req_msg_callback(cp_handle);
+               g_mutex_lock(cp_handle->lock);
+               while (mf_request_flag_get(req)) {
+                       g_cond_wait(cp_handle->cond, cp_handle->lock);
+               }
+               mf_request_flag_set(req, 1);
+               g_mutex_unlock(cp_handle->lock);
+       }
+       return;
+}
+
+static void __mf_copy_free_handle(struct _mf_copy_handle *handle)
+{
+       if (handle) {
+               if (handle->lock) {
+                       g_mutex_free(handle->lock);
+               }
+               if (handle->cond) {
+                       g_cond_free(handle->cond);
+               }
+               if (handle->dst_dir) {
+                       free(handle->dst_dir);
+               }
+               if (handle->src_items) {
+                       g_list_foreach(handle->src_items, (GFunc) free, NULL);
+                       g_list_free(handle->src_items);
+               }
+               if (handle->msg.current_real) {
+                       g_free(handle->msg.current_real);
+                       handle->msg.current_real = NULL;
+               }
+               free(handle);
+       }
+
+       return;
+}
+
+static void *__mf_copy_thread_func(void *data)
+{
+       FO_TRACE_BEGIN;
+       struct _mf_copy_handle *cp_handle = NULL;
+       cp_handle = (struct _mf_copy_handle *)data;
+
+       gboolean cancelled = FALSE;
+       double s_start = 0.0;
+       double s_stop = 0.0;
+       double c_start = 0.0;
+       double c_stop = 0.0;
+       if (cp_handle) {
+               GList *tmp_src_list = NULL;
+               unsigned long long t_size = 0;
+               unsigned long long r_size = 0;
+               int errcode = 0;
+
+               s_start = __mf_copy_get_time();
+               tmp_src_list = cp_handle->src_items;
+
+               errcode = _mf_fo_get_remain_space(cp_handle->dst_dir, &r_size);
+               if (errcode < 0) {
+
+                       __mf_copy_msg_cb(MF_MSG_ERROR, cp_handle->dst_dir, 0, (MF_FO_ERR_DST_CLASS | _mf_fo_errno_to_mferr(-errcode)), cp_handle);
+
+                       goto ERROR_END_THREAD;
+               }
+
+               if (r_size == 0) {
+                       int err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_SPACE);
+                       __mf_copy_msg_cb(MF_MSG_ERROR, cp_handle->dst_dir, 0, err, cp_handle);
+
+                       goto ERROR_END_THREAD;
+               }
+
+
+               while (tmp_src_list) {
+                       if (tmp_src_list->data) {
+                               const char *s_path = NULL;
+                               unsigned long long size = 0;
+
+                               s_path = tmp_src_list->data;
+                               if (access(s_path, R_OK) == 0) {
+                                       errcode = _mf_fo_get_total_item_size(s_path, &size);
+                                       if (errcode < 0) {
+                                               mf_fo_loge("Fail to get size of %s", s_path);
+
+                                               __mf_copy_msg_cb(MF_MSG_ERROR, s_path, 0,
+                                                                (MF_FO_ERR_SRC_CLASS | _mf_fo_errno_to_mferr(-errcode)), cp_handle);
+
+                                               goto ERROR_END_THREAD;
+                                       } else {
+                                               mf_fo_logi("size of %s - %lld", s_path, size);
+                                               t_size += size;
+                                       }
+                               } else {
+                                       mf_fo_loge("Unable to access [%s]. error - %s", s_path, strerror(errno));
+                                       __mf_copy_msg_cb(MF_MSG_ERROR, s_path, 0, (MF_FO_ERR_SRC_CLASS | _mf_fo_errno_to_mferr(errno)), cp_handle);
+                                       goto ERROR_END_THREAD;
+                               }
+                       }
+                       tmp_src_list = g_list_next(tmp_src_list);
+               }
+               s_stop = __mf_copy_get_time();
+               g_mutex_lock(cp_handle->lock);
+               cp_handle->msg.total_size = t_size;
+               g_mutex_unlock(cp_handle->lock);
+
+               if (r_size < t_size) {
+                       mf_fo_loge("total size [%lld], remain size [%lld] -[%s]", t_size, r_size, cp_handle->dst_dir);
+
+                       int err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_SPACE);
+                       __mf_copy_msg_cb(MF_MSG_ERROR, cp_handle->dst_dir, 0, err, cp_handle);
+
+                       goto ERROR_END_THREAD;
+               }
+               /* copy items */
+               c_start = __mf_copy_get_time();
+               tmp_src_list = cp_handle->src_items;
+               while (tmp_src_list) {
+                       if (tmp_src_list->data) {
+                               const char *s_path = NULL;
+                               s_path = tmp_src_list->data;
+                               int ret = 0;
+                               g_mutex_lock(cp_handle->lock);
+                               cp_handle->msg.current_index++;
+                               cp_handle->msg.current = s_path;
+                               g_mutex_unlock(cp_handle->lock);
+                               ret = _mf_copy_copy_internal(s_path, cp_handle->dst_dir, cp_handle->cancel,
+                                                            __mf_copy_msg_cb, __mf_copy_req_cb, cp_handle);
+
+                               if (ret > 0) {
+                                       if (cp_handle->cancel) {
+                                               mf_cancel_set_cancelled(cp_handle->cancel);
+                                       }
+                                       cancelled = TRUE;
+                                       break;
+                               }
+                               if (ret < 0) {
+                                       mf_fo_loge("Fail to copy [%s] to [%s]", s_path, cp_handle->dst_dir);
+                                       break;
+                               }
+                       }
+                       tmp_src_list = g_list_next(tmp_src_list);
+               }
+               c_stop = __mf_copy_get_time();
+               mf_fo_logi("## Total src size - %lld byte, size time : %lf sec, copy time : %lf sec",
+                          cp_handle->msg.total_size, s_stop - s_start, c_stop - c_start);
+               if (cancelled) {
+                       __mf_copy_msg_cb(MF_MSG_CANCELLED, NULL, 0, 0, cp_handle);
+               }
+
+ERROR_END_THREAD:
+               if (cp_handle->sync) {
+                       double start = 0.0;
+                       double stop = 0.0;
+
+                       __mf_copy_msg_cb(MF_MSG_SYNC, NULL, 0, 0, cp_handle);
+
+                       start = __mf_copy_get_time();
+                       sync();
+                       stop = __mf_copy_get_time();
+                       mf_fo_logi("sync time : %lf sec", stop - start);
+               }
+               __mf_copy_msg_cb(MF_MSG_END, NULL, 0, 0, cp_handle);
+               __mf_copy_free_handle(cp_handle);
+               cp_handle = NULL;
+       } else {
+               mf_fo_loga("handle is NULL");
+               abort();
+       }
+
+       mf_fo_logd("The end of __mf_copy_thread_func");
+       return NULL;
+}
+
+int mf_copy_copy_items(GList *item_list, const char *dst_dir, mf_cancel *cancel, gboolean sync, void *u_data)
+{
+       FO_TRACE_BEGIN;
+       struct _mf_copy_handle *cp_handle = NULL;
+       GList *tmp_list = NULL;
+       int err = 0;
+
+       if (!item_list) {
+               mf_fo_loge("item_list is NULL");
+               return -(MF_FO_ERR_ARGUMENT);
+       }
+       if (!dst_dir) {
+               mf_fo_loge("dst_dir is NULL");
+               return -(MF_FO_ERR_ARGUMENT);
+       }
+
+       if (!_mf_fo_check_exist(dst_dir)) {
+               mf_fo_loge("dst_dir[%s] is not existed", dst_dir);
+               return -(MF_FO_ERR_ARGUMENT);
+       }
+
+       if (!g_thread_supported()) {
+               g_thread_init(NULL);
+       }
+
+       cp_handle = malloc(sizeof(struct _mf_copy_handle));
+       if (!cp_handle) {
+               mf_fo_loge("Fail to allocate handle");
+               return -(MF_FO_ERR_MEM);
+       }
+       memset(cp_handle, 0x00, sizeof(struct _mf_copy_handle));
+
+       cp_handle->lock = g_mutex_new();
+       if (!cp_handle->lock) {
+               mf_fo_loge("Fail to allocate mutex");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+       cp_handle->cond = g_cond_new();
+       if (!cp_handle->cond) {
+               mf_fo_loge("Fail to allocate cond");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+
+       cp_handle->dst_dir = strdup(dst_dir);
+       if (!cp_handle->dst_dir) {
+               mf_fo_loge("Fail to allocate memory");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+
+       cp_handle->cancel = cancel;
+       cp_handle->u_data = u_data;
+       cp_handle->sync = sync;
+
+       pthread_mutex_lock(&gLockMsg);
+       flagMsg = 1;
+       pthread_mutex_unlock(&gLockMsg);
+
+       tmp_list = item_list;
+       while (tmp_list) {
+               if (tmp_list->data) {
+                       char *src_item = NULL;
+                       src_item = strdup((char *)tmp_list->data);
+                       if (src_item) {
+                               if (_mf_fo_check_exist(src_item)) {
+                                       cp_handle->src_items = g_list_append(cp_handle->src_items, src_item);
+                               } else {
+                                       mf_fo_loge("src_item[%s] is not existed", src_item);
+                                       err = MF_FO_ERR_ARGUMENT;
+                                       free(src_item);
+                                       src_item = NULL;
+                                       /* goto ERROR_FREE_MEM; */
+                               }
+                       } else {
+                               mf_fo_loge("Fail to allocate memory");
+                               err = MF_FO_ERR_MEM;
+                               goto ERROR_FREE_MEM;
+                       }
+               }
+               tmp_list = g_list_next(tmp_list);
+       }
+
+       if (!cp_handle->src_items) {
+               mf_fo_loge("Fail to create src list");
+               err = MF_FO_ERR_ARGUMENT;
+               goto ERROR_FREE_MEM;
+       }
+
+       cp_handle->pipe = ecore_pipe_add(mf_callback_thread_pipe_cb, u_data);
+       if (!g_thread_create((GThreadFunc) __mf_copy_thread_func, cp_handle, FALSE, NULL)) {
+               mf_fo_loge("Fail to create copy thread");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+
+       return 0;
+
+ERROR_FREE_MEM:
+       __mf_copy_free_handle(cp_handle);
+       return -(err);
+}
diff --git a/src/common/file-operation/mf-delete-internal.c b/src/common/file-operation/mf-delete-internal.c
new file mode 100644 (file)
index 0000000..1b38fa1
--- /dev/null
@@ -0,0 +1,290 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+#include <stdio.h>
+#include <glib.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <stdlib.h>
+//#include <fts.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <ftw.h>
+
+#include "mf-delete-internal.h"
+#include "mf-cancel.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+#include "mf-fo-debug.h"
+#include "mf-media-content.h"
+
+GSList *delete_list = NULL;
+
+#ifndef SAFE_FREE
+#define SAFE_FREE(x) do {\
+                               if ((x) != NULL) {\
+                                       free(x); \
+                                       x = NULL;\
+                               } \
+                       } while (0)
+#endif
+
+int _mf_delete_delete_regfile(const char *file, struct stat *file_statp, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data)
+{
+       mode_t mode = 0;
+       off_t size = 0;
+       int err = 0;
+       char err_buf[MF_ERR_BUF] = {0,};
+       if (!file) {
+               mf_fo_loge("file is NULL");
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (cancel && mf_cancel_check_cancel(cancel)) {
+               return 1;
+       }
+
+       if (file_statp) {
+               mode = file_statp->st_mode;
+               size = file_statp->st_size;
+       } else {
+               struct stat info;
+               if (stat(file, &info)) {
+                       MF_FILE_ERROR_LOG(err_buf, "Fail to stat file ", file);
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, file, 0, err, msg_data);
+                       }
+                       return err;
+               }
+               mode = info.st_mode;
+               size = info.st_size;
+       }
+
+       if (!S_ISREG(mode)) {
+               mf_fo_loge("[%s] is not regular file", file);
+
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_TYPE);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, file, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (remove(file)) {
+               MF_FILE_ERROR_LOG(err_buf, "Fail to delete ", file);
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, file, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       mf_fo_logd("success to delete FILE : %s", file);
+       /*success message*/
+       if (msg_cb) {
+               msg_cb(MF_MSG_DOING, file, size, 0, msg_data);
+       }
+
+       return 0;
+}
+
+static int __get_delete_directory_hierarchies( const char *pathname, const struct stat *statptr, int type)
+{
+       mf_fo_dir_list_info *info = NULL;
+       mf_debug("pathname is [%s]\t type is [%d]\t",
+               pathname, type);
+
+       switch (type) {
+
+       case FTW_F:
+               info = calloc(sizeof(mf_fo_dir_list_info), 1);
+               info->ftw_path = g_strdup(pathname);
+               info->type = type;
+               delete_list = g_slist_prepend(delete_list, info);
+               mf_debug("File pathname is [%s]", pathname);
+               break;
+       case FTW_D:
+               info = calloc(sizeof(mf_fo_dir_list_info), 1);
+               info->ftw_path = g_strdup(pathname);
+               info->type = type;
+               delete_list = g_slist_prepend(delete_list, info);
+               mf_debug("Directory pathname is [%s]", pathname);
+               //process file
+               break;
+       default:
+               mf_debug("Default pathname is [%s]", pathname);
+       }
+
+       return 0;
+}
+
+int _mf_delete_delete_directory(const char *dir, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data)
+{
+       int err = 0;
+       int ret = -1;
+       char err_buf[MF_ERR_BUF] = {0,};
+       if (!dir) {
+               mf_fo_loge("check argument dir");
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       ret = ftw(dir, __get_delete_directory_hierarchies, 16);
+       if (ret == 0) {
+               mf_debug();
+               mf_fo_dir_list_info *ent = NULL;
+               GSList *list = NULL;
+               list = delete_list;
+               while (list) {
+                       if (cancel && mf_cancel_check_cancel(cancel)) {
+                               goto DO_CANCEL;
+                       }
+                       ent = (mf_fo_dir_list_info *)list->data;
+                       if (ent->type == FTW_F) {
+                               if (ent->ftw_path == NULL || strlen(ent->ftw_path) == 0) {
+                                       list = g_slist_next(list);
+                                       continue;
+                               }
+                               err = _mf_delete_delete_regfile(ent->ftw_path, NULL, cancel, msg_cb, msg_data);
+                               if (err == 0) {
+                                       mf_media_content_scan_file(ent->ftw_path);
+                               }
+                               if (err > 0) {
+                                       goto DO_CANCEL;
+                               } else if (err < 0) {
+                                       goto ERROR_CLOSE_FD;
+                               }
+
+                       } else if (ent->type == FTW_D) {
+                               if (cancel && mf_cancel_check_cancel(cancel)) {
+                                       goto DO_CANCEL;
+                               }
+                               if (ent->ftw_path == NULL || strlen(ent->ftw_path) == 0) {
+                                       list = g_slist_next(list);
+                                       continue;
+                               }
+
+                               if (remove(ent->ftw_path)) {
+                                       MF_FILE_ERROR_LOG(err_buf, "Fail to delete ", ent->ftw_path);
+                                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                                       if (msg_cb) {
+                                               msg_cb(MF_MSG_ERROR, ent->ftw_path, 0, err, msg_data);
+                                       }
+                                       goto ERROR_CLOSE_FD;
+                               } else {
+                                       mf_fo_logd("success to delete DIR : %s", ent->ftw_path);
+                                       if (msg_cb) {
+                                               msg_cb(MF_MSG_DOING, ent->ftw_path, 0, 0, msg_data);
+                                       }
+                               }
+                       }
+                       mf_debug("ent->path is [%s]", ent->ftw_path);
+                       list = g_slist_next(list);
+               }
+       } else {
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, dir, 0, err, msg_data);
+               }
+               _mf_fo_free_directory_hierarchies(&delete_list);
+               return err;
+       }
+
+       _mf_fo_free_directory_hierarchies(&delete_list);
+
+       return 0;
+
+ERROR_CLOSE_FD:
+       _mf_fo_free_directory_hierarchies(&delete_list);
+       return err;
+
+DO_CANCEL:
+       _mf_fo_free_directory_hierarchies(&delete_list);
+       return 1;
+}
+
+int _mf_delete_del_internal(const char *item, mf_cancel *cancel, _mf_fo_msg_cb msg_callback, void *msg_data)
+{
+       struct stat info;
+       int err = 0;
+       char err_buf[MF_ERR_BUF] = {0,};
+       if (!item || strlen(item) <= 1) {
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (stat(item, &info)) {
+               MF_FILE_ERROR_LOG(err_buf, "Fail to stat item ", item);
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, item, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (cancel && mf_cancel_check_cancel(cancel)) {
+               goto DO_CANCEL;
+       }
+
+       if (S_ISDIR(info.st_mode)) {
+               err = _mf_delete_delete_directory(item, cancel, msg_callback, msg_data);
+               if (err == 0) {
+                       mf_media_content_scan_folder(item);
+               }
+       } else if (S_ISREG(info.st_mode)) {
+               err = _mf_delete_delete_regfile(item, &info, cancel, msg_callback, msg_data);
+               if (err == 0) {
+                       mf_media_content_scan_file(item);
+               }
+       } else {
+
+               mf_fo_loge("item[%s] is not file or directory", item);
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_TYPE | MF_FO_ERR_REPORT_CLASS);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, item, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (err > 0) {
+               goto DO_CANCEL;
+       } else if (err < 0) {
+               goto ERROR_RETURN;
+       }
+
+       return 0;
+
+ERROR_RETURN:
+       return err;
+
+DO_CANCEL:
+       return 1;
+}
diff --git a/src/common/file-operation/mf-delete.c b/src/common/file-operation/mf-delete.c
new file mode 100644 (file)
index 0000000..592f48d
--- /dev/null
@@ -0,0 +1,365 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <stdio.h>
+#include <glib.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/syscall.h>
+
+#include "mf-delete.h"
+#include "mf-delete-internal.h"
+#include "mf-cancel.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+#include "mf-fo-debug.h"
+#include "mf-callback.h"
+
+extern int flagMsg;
+extern pthread_mutex_t gLockMsg;
+extern pthread_cond_t gCondMsg;
+
+struct _mf_del_handle {
+       GList *src_items;
+       mf_cancel *cancel;
+       void *u_data;
+       gboolean sync;
+
+       GMutex *lock;
+       GCond *cond;
+       guint msg_idle_cb;
+
+       mf_fo_msg msg;
+       Ecore_Pipe *pipe;
+};
+
+static double get_time(void)
+{
+       struct timeval timev;
+
+       gettimeofday(&timev, NULL);
+       return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000);
+}
+
+static void __mf_delete_free_handle(struct _mf_del_handle *handle)
+{
+       if (handle) {
+               /*free cp_handle*/
+               if (handle->lock) {
+                       g_mutex_free(handle->lock);
+               }
+               if (handle->cond) {
+                       g_cond_free(handle->cond);
+               }
+               if (handle->src_items) {
+                       g_list_foreach(handle->src_items, (GFunc)free, NULL);
+                       g_list_free(handle->src_items);
+               }
+               if (handle->msg.current_real) {
+                       g_free(handle->msg.current_real);
+                       handle->msg.current_real = NULL;
+               }
+               free(handle);
+       }
+
+       return;
+}
+
+static gboolean _del_msg_publish(gpointer data)
+{
+       struct _mf_del_handle *handle = NULL;
+       handle = (struct _mf_del_handle *)data;
+       mf_fo_msg msg;
+
+       if (!handle) {
+               goto EXIT;
+       }
+       MYFILE_MAGIC_SET(&msg, MYFILE_MAGIC_PIPE_DATA);
+
+       g_mutex_lock(handle->lock);
+       msg.msg_type = handle->msg.msg_type;
+       msg.error_code = handle->msg.error_code;
+       msg.current = handle->msg.current;
+       msg.current_index = handle->msg.current_index;
+       msg.total_index = handle->msg.total_index;
+       msg.current_size = handle->msg.current_size;
+       msg.total_size = handle->msg.total_size;
+       msg.current_real = handle->msg.current_real;
+       msg.pipe = handle->pipe;
+       g_mutex_unlock(handle->lock);
+
+       /*pulish message*/
+       ecore_pipe_write(handle->pipe, &msg, sizeof(msg));
+
+EXIT:
+       return FALSE;
+}
+
+static void _del_msg_cb(mf_msg_type msg_type, const char *real, unsigned long long size, int error_code, void *data)
+{
+       struct _mf_del_handle *handle = NULL;
+       handle = (struct _mf_del_handle *)data;
+
+       pthread_mutex_lock(&gLockMsg);
+       while (flagMsg == 0) {
+               mf_fo_loge("!!!!!!!!!!!! wait");
+               pthread_cond_wait(&gCondMsg, &gLockMsg);
+       }
+       flagMsg = 0;
+       pthread_mutex_unlock(&gLockMsg);
+
+       if (handle) {
+               g_mutex_lock(handle->lock);
+               handle->msg.msg_type = msg_type;
+               if (msg_type == MF_MSG_ERROR) {
+                       handle->msg.error_code = error_code;
+                       if (real) {
+                               if (handle->msg.current_real) {
+                                       free(handle->msg.current_real);
+                               }
+                               handle->msg.current_real = strdup(real);
+                       }
+               } else {
+                       handle->msg.error_code = 0;
+                       if (msg_type == MF_MSG_DOING) {
+                               if (real) {
+                                       if (handle->msg.current_real) {
+                                               free(handle->msg.current_real);
+                                       }
+                                       handle->msg.current_real = strdup(real);
+                               }
+                               handle->msg.current_size += size;
+                               handle->msg.error_code = 0;
+                       } else if (msg_type == MF_MSG_SKIP) {
+                               handle->msg.total_size -= size;
+                               handle->msg.error_code = 0;
+                       }
+               }
+               g_mutex_unlock(handle->lock);
+
+               _del_msg_publish(handle);
+       }
+       return;
+}
+
+
+static void *delete_thread(void *data)
+{
+       struct _mf_del_handle *handle = NULL;
+       handle = (struct _mf_del_handle *)data;
+
+       _mf_fo_msg_cb msg_cb = NULL;
+       gboolean cancelled = FALSE;
+       double s_start = 0.0;
+       double s_stop = 0.0;
+       double c_start = 0.0;
+       double c_stop = 0.0;
+       char err_buf[MF_ERR_BUF] = { 0, };
+
+       if (handle) {
+               GList *tmp_src_list = NULL;
+               unsigned long long t_size = 0;
+
+               msg_cb = _del_msg_cb;
+
+               s_start = get_time();
+               tmp_src_list = handle->src_items;
+               while (tmp_src_list) {
+                       if (tmp_src_list->data) {
+                               const char *s_path = NULL;
+                               unsigned long long size = 0;
+
+                               s_path = tmp_src_list->data;
+                               if (access(s_path, R_OK) == 0) {
+                                       int err = _mf_fo_get_total_item_size(s_path, &size);
+                                       if (err < 0) {
+                                               mf_fo_loge("Fail to get size of %s", s_path);
+                                               /*handle->src_items = g_list_remove(handle->src_items, s_path);*/
+
+                                               _del_msg_cb(MF_MSG_ERROR, s_path, 0, (MF_FO_ERR_SRC_CLASS | _mf_fo_errno_to_mferr(-err)), handle);
+
+                                               goto ERROR_END_THREAD;
+                                       } else {
+                                               mf_fo_logi("size of %s - %lld", s_path, size);
+                                               t_size += size;
+                                       }
+                               } else {
+                                       MF_FILE_ERROR_LOG(err_buf, "Unable to access ", s_path);
+                                       /*handle->src_items = g_list_remove(handle->src_items, s_path);*/
+
+                                       _del_msg_cb(MF_MSG_ERROR, s_path, 0, (MF_FO_ERR_SRC_CLASS | _mf_fo_errno_to_mferr(errno)), handle);
+
+                                       goto ERROR_END_THREAD;
+                               }
+                       }
+                       tmp_src_list = g_list_next(tmp_src_list);
+               }
+               s_stop = get_time();
+               g_mutex_lock(handle->lock);
+               handle->msg.total_size = t_size;
+               g_mutex_unlock(handle->lock);
+
+               /*delete items*/
+               c_start = get_time();
+               tmp_src_list = handle->src_items;
+               while (tmp_src_list) {
+                       if (tmp_src_list->data) {
+                               const char *s_path = NULL;
+                               s_path = tmp_src_list->data;
+                               int ret = 0;
+                               g_mutex_lock(handle->lock);
+                               handle->msg.current_index++;
+                               handle->msg.current = s_path;
+                               g_mutex_unlock(handle->lock);
+                               ret = _mf_delete_del_internal(s_path, handle->cancel, msg_cb, handle);
+
+                               if (ret > 0) {
+                                       if (handle->cancel) {
+                                               mf_cancel_set_cancelled(handle->cancel);
+                                       }
+                                       cancelled = TRUE;
+                                       break;
+                               }
+                               if (ret < 0) {
+                                       mf_fo_loge("Fail to delete [%s]", s_path);
+                               }
+                       }
+                       tmp_src_list = g_list_next(tmp_src_list);
+               }
+               c_stop = get_time();
+               mf_fo_logi("## Total src size - %lld byte, size time : %lf sec, delete time : %lf sec",
+                          handle->msg.total_size, s_stop - s_start, c_stop - c_start);
+
+               if (cancelled) {
+                       /*cancel message*/
+                       _del_msg_cb(MF_MSG_CANCELLED, NULL, 0, 0, handle);
+               }
+
+ERROR_END_THREAD:
+               if (handle->sync) {
+                       double start = 0.0;
+                       double stop = 0.0;
+                       _del_msg_cb(MF_MSG_SYNC, NULL, 0, 0, handle);
+                       start = get_time();
+                       sync();
+                       stop = get_time();
+                       mf_fo_logi("sync time : %lf sec", stop - start);
+               }
+
+               _del_msg_cb(MF_MSG_END, NULL, 0, 0, handle);
+
+               __mf_delete_free_handle(handle);
+               handle = NULL;
+       } else {
+               mf_fo_loga("handle is NULL");
+               abort();
+       }
+
+       mf_fo_logd("The end of del_thread");
+       return NULL;
+}
+
+int mf_delete_items(GList *item_list, mf_cancel *cancel, gboolean sync, void *u_data)
+{
+       struct _mf_del_handle *handle = NULL;
+       GList *tmp_list = NULL;
+       int err = 0;
+
+       if (!item_list) {
+               mf_fo_loge("item_list is NULL");
+               return -(MF_FO_ERR_ARGUMENT);
+       }
+
+       if (!g_thread_supported()) {
+               g_thread_init(NULL);
+       }
+
+       handle = malloc(sizeof(struct _mf_del_handle));
+       if (!handle) {
+               mf_fo_loge("Fail to allocate handle");
+               return -(MF_FO_ERR_MEM);
+       }
+       memset(handle, 0x00, sizeof(struct _mf_del_handle));
+
+       handle->lock = g_mutex_new();
+       if (!handle->lock) {
+               mf_fo_loge("Fail to allocate mutex");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+       handle->cond = g_cond_new();
+       if (!handle->cond) {
+               mf_fo_loge("Fail to allocate cond");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+
+       handle->cancel = cancel;
+       handle->u_data = u_data;
+       handle->sync = sync;
+       pthread_mutex_lock(&gLockMsg);
+       flagMsg = 1;
+       pthread_mutex_unlock(&gLockMsg);
+
+       tmp_list = item_list;
+       while (tmp_list) {
+               if (tmp_list->data) {
+                       char *src_item = NULL;
+                       src_item = strdup((char *)tmp_list->data);
+                       if (src_item) {
+                               if (_mf_fo_check_exist(src_item)) {
+                                       handle->src_items = g_list_append(handle->src_items, src_item);
+                               } else {
+                                       mf_fo_loge("src_item[%s] is not existed", src_item);
+                                       err = MF_FO_ERR_ARGUMENT;
+                                       free(src_item);
+                                       src_item = NULL;
+                               }
+                       } else {
+                               mf_fo_loge("Fail to allocate memory");
+                               err = MF_FO_ERR_MEM;
+                               goto ERROR_FREE_MEM;
+                       }
+               }
+               tmp_list = g_list_next(tmp_list);
+       }
+
+       if (!handle->src_items) {
+               mf_fo_loge("Fail to create src list");
+               err = MF_FO_ERR_ARGUMENT;
+               goto ERROR_FREE_MEM;
+       }
+
+       handle->pipe = ecore_pipe_add(mf_callback_thread_pipe_cb, u_data);
+
+       if (!g_thread_create((GThreadFunc) delete_thread, handle, FALSE, NULL)) {
+               mf_fo_loge("Fail to create delete thread");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+
+       return 0;
+
+ERROR_FREE_MEM:
+       __mf_delete_free_handle(handle);
+       return -(err);
+}
diff --git a/src/common/file-operation/mf-fo-internal.c b/src/common/file-operation/mf-fo-internal.c
new file mode 100644 (file)
index 0000000..2831116
--- /dev/null
@@ -0,0 +1,515 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <stdio.h>
+#include <errno.h>
+#include <sys/stat.h>
+#include <sys/statfs.h>
+#include <sys/types.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/syscall.h>       /*__NR_gettid*/
+#include <unistd.h>
+#include <ftw.h>
+
+#include "mf-fo-internal.h"
+#include "mf-fo-common.h"
+#include "mf-fo-debug.h"
+
+GSList *dir_list = NULL;
+#ifndef SAFE_FREE
+#define SAFE_FREE(x) do { \
+                               if ((x) != NULL) {\
+                                       free(x); \
+                                       x = NULL;\
+                               } \
+                       } while (0)
+#endif
+
+#ifndef NAME_MAX
+#define NAME_MAX 255
+#endif
+
+#ifndef FILENAME_MAX
+#define FILENAME_MAX 4096
+#endif
+
+static inline long __mf_fo_get_name_max(void)
+{
+       long max = 0;
+
+#ifdef _PC_NAME_MAX
+       max = pathconf("/", _PC_NAME_MAX);
+#endif
+
+       if (max < 1) {
+               max = NAME_MAX + 1;
+       }
+
+       return max;
+}
+
+static inline long __mf_fo_get_path_max(void)
+{
+       long max = 0;
+
+#ifdef _PC_PATH_MAX
+       max = pathconf("/", _PC_PATH_MAX);
+#endif
+
+       if (max < 1) {
+               max = FILENAME_MAX;
+       }
+
+       return max;
+}
+
+static const char *__mf_fo_get_base_name(const char *path)
+{
+       const char *base = NULL;
+
+
+       if (path && (path[0] != '\0')) {
+               char *tmp = NULL;
+               tmp = strrchr(path, '/');
+               if (tmp[1] == '\0') {
+                       if (tmp == path) {
+                               mf_fo_loge("path is ROOT - %s", path);
+                       } else {
+                               mf_fo_loge("invaild arg - %s", path);
+                       }
+               } else {
+                       base = tmp + 1;
+               }
+       }
+       return base;
+}
+
+static int __get_directory_hierarchies( const char *pathname, const struct stat *statptr, int type)
+{
+       mf_fo_dir_list_info *info = NULL;
+       mf_debug("pathname is [%s]\t type is [%d]\t size is [%ld]",
+               pathname, type, statptr->st_size);
+
+       switch (type) {
+
+       case FTW_F:
+               info = calloc(sizeof(mf_fo_dir_list_info), 1);
+               info->ftw_path = g_strdup(pathname);
+               info->size = statptr->st_size;
+               info->type = type;
+               dir_list = g_slist_append(dir_list, info);
+               mf_debug("File pathname is [%s]", pathname);
+               break;
+       case FTW_D:
+               info = calloc(sizeof(mf_fo_dir_list_info), 1);
+               info->ftw_path = g_strdup(pathname);
+               info->size = statptr->st_size;
+               info->type = type;
+               dir_list = g_slist_append(dir_list, info);
+               mf_debug("Directory pathname is [%s]", pathname);
+               //process file
+               break;
+       default:
+               mf_debug("Default pathname is [%s]", pathname);
+       }
+
+       return 0;
+}
+
+static int __mf_fo_get_total_dir_size(const char *dir, unsigned long long *size)
+{
+       int ret = -1;
+       if (!dir) {
+               return -EINVAL;
+       }
+       ret = ftw(dir, __get_directory_hierarchies, 16);
+       if (ret == 0) {
+               mf_debug();
+               mf_fo_dir_list_info *ent = NULL;
+               GSList *list = NULL;
+               list = dir_list;
+               while (list) {
+                       ent = (mf_fo_dir_list_info *)list->data;
+                       if (ent->type == FTW_D) {
+                               *size += MF_VISUAL_FOLDER_SIZE;
+                       } else if (ent->type == FTW_F) {
+                               *size += ent->size;
+                       }
+                       list = g_slist_next(list);
+               }
+       } else {
+               _mf_fo_free_directory_hierarchies(&dir_list);
+               return -(errno);
+       }
+       _mf_fo_free_directory_hierarchies(&dir_list);
+
+       return 0;
+}
+
+
+#if 0
+static char *_get_unique_dirname(const char *name)
+{
+       char *new_name = NULL;
+       long max = 0;
+       unsigned int i = 0;
+       char *num_area = NULL;
+       gboolean has_num = FALSE;
+       int next_num = 1;
+
+       if ((num_area = strrchr(name, NEW_NAME_SEPARATOR)) != NULL) {
+               num_area += 1;
+               has_num = TRUE;
+               for (i = (num_area - name); name[i] != '\0'; i++) {
+                       if (!isdigit(name[i])) {
+                               has_num = FALSE;
+                               break;
+                       }
+               }
+       }
+       max = __mf_fo_get_path_max();
+       new_name = malloc(sizeof(char) * max);
+       if (new_name) {
+               int write_len = 0;
+               int prefix_len = (int)(num_area - name - 1);
+               if (has_num) {
+                       next_num = atoi(num_area) + 1;
+                       write_len = snprintf(new_name, max, "%.*s_%d", (int)(num_area - name - 1), name, next_num);
+                       if (write_len > max) {
+                               snprintf(new_name, max, "%.*s_%d", (int)(num_area - name - 1), name, next_num);
+                       }
+                       while (_mf_fo_check_exist(new_name)) {
+                               next_num++;
+                               snprintf(new_name, max, "%.*s_%d", (int)(num_area - name - 1), name, next_num);
+                       }
+               } else {
+                       snprintf(new_name, max, "%s_%d", name, next_num);
+                       while (_mf_fo_check_exist(new_name)) {
+                               next_num++;
+                               snprintf(new_name, max, "%s_%d", name, next_num);
+                       }
+               }
+       }
+       return new_name;
+}
+#else
+char *_mf_fo_get_next_unique_dirname(const char *name, int *errcode)
+{
+       char *new_name = NULL;
+       char *tmp_name = NULL;
+       int name_len = 0;
+       long p_max = 0;
+
+       if (!name) {
+               *errcode = EINVAL;
+               return NULL;
+       }
+
+       name_len = strlen(name);
+       if (name_len <= 1) {
+               *errcode = EINVAL;
+               return NULL;
+       }
+
+       p_max = __mf_fo_get_path_max();
+
+       if (name[name_len - 1] == '/') {
+               tmp_name = strndup(name, name_len - 1);
+               if (!tmp_name) {
+                       *errcode = ENOMEM;
+                       return NULL;
+               }
+       }
+
+       new_name = malloc(sizeof(char) * p_max);
+
+       if (new_name) {
+               int next_num = 0;
+               long n_max = 0;
+
+               n_max = __mf_fo_get_name_max();
+
+               do {
+                       int write_len = 0;
+                       next_num++;
+                       write_len = snprintf(new_name, p_max, "%s_%d", tmp_name ? tmp_name : name, next_num);
+                       if (write_len > p_max) {
+                               mf_fo_loge("write_len[%u] is greater than max[%ld]", write_len, p_max);
+                               *errcode = ENAMETOOLONG;
+                               goto ERROR_FREE_RETURN;
+                       } else {
+                               const char *b_name = 0;
+                               b_name = __mf_fo_get_base_name(new_name);
+                               if (b_name && (mf_util_character_count_get(b_name) > n_max)) {
+                                       mf_fo_loge("b_name length[%u] is greater than name max[%ld]", strlen(b_name), n_max);
+                                       *errcode = ENAMETOOLONG;
+                                       goto ERROR_FREE_RETURN;
+                               }
+                       }
+               } while (_mf_fo_check_exist(new_name));
+       } else {
+               *errcode = ENOMEM;
+       }
+
+       SAFE_FREE(tmp_name);
+       return new_name;
+
+ERROR_FREE_RETURN:
+       SAFE_FREE(tmp_name);
+       SAFE_FREE(new_name);
+
+       return NULL;
+}
+#endif
+
+char *_mf_fo_get_next_unique_filename(const char *name, int *errcode)
+{
+       char *new_name = NULL;
+       int name_len = 0;
+       long p_max = 0;
+       const char *base = NULL;
+
+       if (!name) {
+               *errcode = EINVAL;
+               return NULL;
+       }
+
+       name_len = strlen(name);
+       if (name_len <= 1) {
+               *errcode = EINVAL;
+               return NULL;
+       }
+
+       base = __mf_fo_get_base_name(name);
+       if (!base) {
+               *errcode = EINVAL;
+               return NULL;
+       }
+
+       p_max = __mf_fo_get_path_max();
+
+       new_name = malloc(sizeof(char) * p_max);
+
+       if (new_name) {
+               int next_num = 0;
+               long n_max = 0;
+               int dir_len = 0;
+               int base_len = 0;
+               const char *ext = NULL;
+
+               n_max = __mf_fo_get_name_max();
+               dir_len = (int)(base - name);
+
+               if ((ext = strrchr(name, '.')) != NULL) {
+                       base_len = (int)(ext - base);
+               } else {
+                       base_len = strlen(base);
+               }
+
+               do {
+                       int write_len = 0;
+                       next_num++;
+                       if (ext) {
+                               write_len = snprintf(new_name, p_max, "%.*s%.*s_%d%s", dir_len, name, base_len, base, next_num, ext);
+                       } else {
+                               write_len = snprintf(new_name, p_max, "%.*s%.*s_%d", dir_len, name, base_len, base, next_num);
+                       }
+
+                       if (write_len > p_max) {
+                               mf_fo_loge("write_len[%u] is greater than max[%ld]", write_len, p_max);
+                               *errcode = ENAMETOOLONG;
+                               goto ERROR_FREE_RETURN;
+                       } else {
+                               const char *b_name = NULL;
+                               b_name = __mf_fo_get_base_name(new_name);
+                               if (b_name && (strlen(b_name) > n_max)) {
+                                       mf_fo_loge("b_name length[%u] is greater than name max[%ld]", strlen(b_name), n_max);
+                                       *errcode = ENAMETOOLONG;
+                                       goto ERROR_FREE_RETURN;
+                               }
+                       }
+               } while (_mf_fo_check_exist(new_name));
+       } else {
+               *errcode = ENOMEM;
+       }
+
+       return new_name;
+
+ERROR_FREE_RETURN:
+       SAFE_FREE(new_name);
+
+       return NULL;
+}
+
+int _mf_fo_get_total_item_size(const char *item, unsigned long long *size)
+{
+       struct stat info;
+       if (!item || !size) {
+               return -EINVAL;
+       }
+       if (stat(item, &info)) {
+               mf_fo_loge("Fail to stat item : %s", item);
+               return -(errno);
+       }
+
+       if (S_ISREG(info.st_mode)) {
+               *size = (unsigned long long)info.st_size;
+       } else if (S_ISDIR(info.st_mode)) {
+               int ret = __mf_fo_get_total_dir_size(item, size);
+               if (ret < 0) {
+                       mf_fo_loge("Fail to get size of directory(%s)", item);
+                       *size = 0;
+                       return ret;
+               }
+       } else {
+               mf_fo_loge("item(%s) is not file or directory", item);
+               *size = (unsigned long long)info.st_size;
+               return -EINVAL;
+       }
+       return 0;
+}
+
+int _mf_fo_get_remain_space(const char *path, unsigned long long *size)
+{
+       FO_TRACE_BEGIN;
+       struct statfs dst_fs;
+
+       if (!path || !size) {
+               FO_TRACE_END;
+               return -EINVAL;
+       }
+
+       if (statfs(path, &dst_fs) == 0) {
+               *size = ((unsigned long long)(dst_fs.f_bsize) * (unsigned long long)(dst_fs.f_bavail));
+       } else {
+               FO_TRACE_END;
+               return -errno;
+       }
+       FO_TRACE_END;
+
+       return 0;
+}
+
+inline bool _mf_fo_check_exist(const char *path)
+{
+       if (path && (access(path, F_OK) == 0)) {
+               return true;
+       }
+       return false;
+}
+
+int _mf_fo_errno_to_mferr(int err_no)
+{
+       int err = MF_FO_ERR_SET(MF_FO_ERR_UNKNOWN);
+       switch (err_no) {
+#ifdef EINVAL
+       case EINVAL:
+               err = MF_FO_ERR_SET(MF_FO_ERR_ARGUMENT);
+               break;
+#endif
+#ifdef EACCES                  /*The requested access to the file is not allowed*/
+       case EACCES:            /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_PERMISSION);
+               break;
+#endif
+#ifdef EFAULT                  /* pathname points outside your accessible address space*/
+       case EFAULT:
+               err = MF_FO_ERR_SET(MF_FO_ERR_FAULT);
+               break;
+#endif
+#ifdef EISDIR                  /*pathname refers to a directory and the access requested involved writing*/
+       case EISDIR:            /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_TYPE);
+               break;
+#endif
+#ifdef EMFILE                  /*The process already has the maximum number of files open.*/
+       case EMFILE:
+               err = MF_FO_ERR_SET(MF_FO_ERR_MAX_OPEN);
+               break;
+#endif
+#ifdef ENOSPC                  /*pathname was to be created but the device containing pathname has no room for the new file*/
+       case ENOSPC:            /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_SPACE);
+               break;
+#endif
+#ifdef ENOTDIR                 /* A component used as a directory in pathname is not*/
+       case ENOTDIR:           /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_TYPE);
+               break;
+#endif
+#ifdef EROFS                   /*pathname refers to a file on a read-only filesystem and write access was requested*/
+       case EROFS:             /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_RO);
+               break;
+#endif
+#ifdef ELOOP                   /* Too many symbolic links were encountered in resolving pathname */
+       case ELOOP:
+               err = MF_FO_ERR_SET(MF_FO_ERR_LOOP);
+               break;
+#endif
+#ifdef ENOMEM                  /* Insufficient kernel memory was available */
+       case ENOMEM:            /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_MEM);
+               break;
+#endif
+#ifdef ENOENT                  /* O_CREAT is not set and the named file does not exist*/
+       case ENOENT:            /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_NOT_EXIST);
+               break;
+#endif
+#ifdef ENAMETOOLONG            /*pathname was too long.*/
+       case ENAMETOOLONG:      /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_LONG_NAME);
+               break;
+#endif
+#ifdef EFBIG                   /* An attempt was made to write a file that exceeds the implementation-defined maximum
+                               file size or the process file size limit*/
+       case EFBIG:             /*report*/
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_BIG_SIZE);
+               break;
+#endif
+#ifdef EIO                     /* I/O error */
+       case EIO:
+               err = MF_FO_ERR_SET(MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_IO);
+               break;
+#endif
+       default:
+               break;
+       }
+
+       return err;
+}
+
+void _mf_fo_free_directory_hierarchies(GSList **glist)
+{
+       if (*glist == NULL)
+               return;
+       GSList *list = *glist;
+       while (list) {
+               mf_fo_dir_list_info *info = NULL;
+               info = (mf_fo_dir_list_info *)list->data;
+               g_free(info->ftw_path);
+               g_free(info);
+               list = g_slist_next(list);
+       }
+       g_slist_free(*glist);
+       *glist = NULL;
+}
+
diff --git a/src/common/file-operation/mf-move-internal.c b/src/common/file-operation/mf-move-internal.c
new file mode 100644 (file)
index 0000000..ee26ad2
--- /dev/null
@@ -0,0 +1,800 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+
+#include <stdio.h>
+#include <glib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <fcntl.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/syscall.h>
+#include <unistd.h>
+#include <ftw.h>
+
+#include "mf-move-internal.h"
+#include "mf-cancel.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+#include "mf-copy-internal.h"
+#include "mf-delete-internal.h"
+#include "mf-fo-debug.h"
+#include "mf-media-content.h"
+
+GSList *move_list = NULL;
+
+#ifndef SAFE_FREE
+#define SAFE_FREE(x) do {\
+                               if ((x) != NULL) {\
+                                       free(x); \
+                                       x = NULL;\
+                               } \
+                       } while (0)
+#endif
+
+#define DIR_MODE_BIT (01777)
+
+static gchar *__mf_move_change_root_name(const char *name, const char *old_root, const char *new_root)
+{
+       gchar *new_name = NULL;
+
+       if (name && old_root && new_root) {
+               int old_len = strlen(old_root);
+               int new_len = strlen(new_root);
+               int name_len = strlen(name);
+               const char *base = NULL;
+               GString *n = NULL;
+
+               if ((strstr(name, old_root) == NULL)
+                   || (name_len <= old_len)
+                   || ((name[old_len] == '/' && name[old_len + 1] == '\0'))
+                   || FALSE) {
+                       mf_fo_loge("invaild args - name : [%s], old_root : [%s]", name, old_root);
+                       return NULL;
+               }
+
+               base = name + old_len;
+               if (name[old_len] == '/') {
+                       base += 1;
+               }
+
+               n = g_string_new(new_root);
+               if (n) {
+                       if (n->str[new_len - 1] == '/') {
+                               g_string_append_printf(n, "%s", base);
+                       } else {
+                               g_string_append_printf(n, "/%s", base);
+                       }
+                       new_name = g_string_free(n, FALSE);
+               }
+       }
+       return new_name;
+}
+
+
+int _mf_move_move_regfile(const char *src, struct stat *src_statp, const char *dst,
+                         unsigned long buf_size, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data)
+{
+       mode_t src_mode = 0;
+       dev_t src_dev = 0;
+       off_t src_size = 0;
+       struct stat dst_dir_i;
+       char *dst_dir = NULL;
+       int err = 0;
+       char err_buf[MF_ERR_BUF] = {0,};
+
+       if (!src) {
+               mf_fo_loge("check argument src");
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+       if (!dst) {
+               mf_fo_loge("check argument dst");
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (src_statp) {
+               src_size = src_statp->st_size;
+               src_dev = src_statp->st_dev;
+               src_mode = src_statp->st_mode;
+       } else {
+               struct stat src_info;
+               if (stat(src, &src_info)) {
+                       mf_fo_loge("Fail to stat src file : %s", src);
+
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+                       }
+                       return err;
+               }
+               src_size = src_info.st_size;
+               src_dev = src_info.st_dev;
+               src_mode = src_info.st_mode;
+       }
+
+       if (!S_ISREG(src_mode)) {
+               mf_fo_loge("src[%s] is not regular file", src);
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_TYPE);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+               }
+               return err;
+       }
+
+
+       dst_dir = g_path_get_dirname(dst);
+       if (dst_dir) {
+               if (stat(dst_dir, &dst_dir_i)) {
+                       mf_fo_loge("Fail to stat dst dir file : %s", dst_dir);
+
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+                       }
+                       free(dst_dir);
+                       return err;
+               }
+               free(dst_dir);
+       } else {
+               mf_fo_loge("fail to get dirname from dst[%s]", dst);
+               err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (src_dev == dst_dir_i.st_dev) {
+               if (rename(src, dst)) {
+                       MF_FILE_ERROR_LOG(err_buf, "Fail to rename item ", dst);
+
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+                       }
+                       return err;
+               } else {
+                       mf_fo_logd("success to move file from [%s] to [%s]", src, dst);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_DOING, src, src_size, 0, msg_data);
+                       }
+               }
+       } else {
+               err = _mf_copy_copy_regfile(src, src_statp, dst, 0, cancel, msg_cb, msg_data);
+               if (err == 0) {
+                       mf_media_content_scan_file(dst);
+               }
+               if (err > 0) {
+                       goto CANCEL_RETURN;
+               } else if (err < 0) {
+                       goto ERROR_RETURN;
+               }
+
+               err = _mf_delete_delete_regfile(src, src_statp, cancel, NULL, NULL);
+               if (err == 0) {
+                       mf_media_content_scan_file(src);
+               }
+               if (err > 0) {
+                       goto CANCEL_RETURN;
+               } else if (err < 0) {
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+                       }
+                       goto ERROR_RETURN;
+               }
+               mf_fo_logd("[copy/del]success to move file from [%s] to [%s]", src, dst);
+       }
+
+       return 0;
+
+ERROR_RETURN:
+       return err;
+
+
+CANCEL_RETURN:
+       return 1;
+}
+
+static int __get_move_directory_hierarchies( const char *pathname, const struct stat *statptr, int type)
+{
+       MF_TRACE_BEGIN;
+       mf_fo_dir_list_info *info = NULL;
+       mf_debug("pathname is [%s]\t type is [%d]\t",
+               pathname, type);
+       switch (type) {
+
+       case FTW_F:
+               info = calloc(sizeof(mf_fo_dir_list_info), 1);
+               info->ftw_path = g_strdup(pathname);
+               info->type = type;
+               move_list = g_slist_append(move_list, info);
+               mf_debug("File pathname is [%s]", pathname);
+               break;
+       case FTW_D:
+               info = calloc(sizeof(mf_fo_dir_list_info), 1);
+               info->ftw_path = g_strdup(pathname);
+               info->type = type;
+               move_list = g_slist_append(move_list, info);
+               mf_debug("File pathname is [%s]", pathname);
+               //process file
+               break;
+       default:
+               mf_debug("Default pathname is [%s]", pathname);
+       }
+
+       return 0;
+}
+
+
+int _mf_move_move_directory(const char *src, struct stat *src_statp, const char *dst, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data)
+{
+       mode_t src_mode = 0;
+       dev_t src_dev = 0;
+       int ret = -1;
+       int err = 0;
+       gboolean is_same_dev = FALSE;
+       char err_buf[MF_ERR_BUF] = {0,};
+
+       if (!src) {
+               mf_fo_loge("check argument src");
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+       if (!dst) {
+               mf_fo_loge("check argument dst");
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (src_statp) {
+               src_dev = src_statp->st_dev;
+               src_mode = src_statp->st_mode;
+       } else {
+               struct stat src_info;
+               if (stat(src, &src_info)) {
+                       mf_fo_loge("Fail to stat src file : %s", src);
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+                       }
+                       return err;
+               }
+               src_dev = src_info.st_dev;
+               src_mode = src_info.st_mode;
+       }
+
+       if (access(dst, F_OK)) {
+               if (mkdir(dst, (src_mode & DIR_MODE_BIT))) {
+                       MF_FILE_ERROR_LOG(err_buf, "Fail to make directory ", dst);
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+                       }
+                       return err;
+               }
+       } else {
+               mf_fo_logi("directory[%s] is already existed", dst);
+               struct stat dst_info;
+               if (stat(dst, &dst_info)) {
+                       mf_fo_loge("Fail to stat dst dir : %s", dst);
+                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                       if (msg_cb) {
+                               msg_cb(MF_MSG_ERROR, dst, 0, err, msg_data);
+                       }
+                       return err;
+               }
+
+               if (src_dev == dst_info.st_dev) {
+                       mf_fo_logd("src and dst is same dev");
+                       is_same_dev = TRUE;
+               }
+       }
+       ret = ftw(src, __get_move_directory_hierarchies, 16);
+       if (ret == 0) {
+               mf_fo_dir_list_info *ent = NULL;
+               GSList *list = move_list;
+               list = move_list;
+               while (list) {
+                       if (cancel && mf_cancel_check_cancel(cancel)) {
+                               goto DO_CANCEL;
+                       }
+                       ent = (mf_fo_dir_list_info *)list->data;
+                       if (ent->type == FTW_D) {
+                               if (g_strcmp0(ent->ftw_path, src) == 0) {
+                                       list = g_slist_next(list);
+                                       continue;
+                               }
+                               char *new_dir = __mf_move_change_root_name(ent->ftw_path, src, dst);
+                               mf_fo_logd("move dir %s to %s", ent->ftw_path, new_dir);
+                               if (new_dir) {
+                                       if (is_same_dev) {
+                                               if (!_mf_fo_check_exist(new_dir)) {
+                                                       unsigned long long size = 0;
+                                                       int err_code = 0;
+                                                       err_code = _mf_fo_get_total_item_size(ent->ftw_path, &size);
+                                                       if (err_code < 0) {
+                                                               err = (_mf_fo_errno_to_mferr(err_code) | MF_FO_ERR_SRC_CLASS);
+                                                               if (msg_cb) {
+                                                                       msg_cb(MF_MSG_ERROR, ent->ftw_path, 0, err, msg_data);
+                                                               }
+                                                               free(new_dir);
+                                                               goto ERROR_CLOSE_FD;
+                                                       } else {
+                                                               if (msg_cb) {
+                                                                       msg_cb(MF_MSG_DOING, ent->ftw_path, 0, 0, msg_data);
+                                                               }
+                                                       }
+                                               } else {
+                                                       mf_fo_logi("directory[%s] is already existed", new_dir);
+                                               }
+                                       } else {
+                                               if (!_mf_fo_check_exist(new_dir)) {
+                                                       struct stat info;
+                                                       if (stat(ent->ftw_path, &info) == 0) {
+                                                               if (mkdir(new_dir, (info.st_mode & DIR_MODE_BIT))) {
+                                                                       mf_fo_loge("Fail to make directory [%s]", new_dir);
+                                                                       /*set FTS_SKIP to skip children of current*/
+                                                                       /*fts_set(fts, ent, FTS_SKIP);*/
+                                                                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                                                                       if (msg_cb) {
+                                                                               msg_cb(MF_MSG_ERROR, new_dir, 0, err, msg_data);
+                                                                       }
+                                                                       free(new_dir);
+                                                                       goto ERROR_CLOSE_FD;
+                                                               } else {
+                                                                       if (msg_cb) {
+                                                                               msg_cb(MF_MSG_DOING, ent->ftw_path, 0, 0, msg_data);
+                                                                       }
+                                                               }
+                                                       } else {
+                                                               MF_FILE_ERROR_LOG(err_buf, "Fail to stat ", ent->ftw_path);
+                                                               /*fts_set(fts, ent, FTS_SKIP);*/
+                                                               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+                                                               if (msg_cb) {
+                                                                       msg_cb(MF_MSG_ERROR, ent->ftw_path, 0, err, msg_data);
+                                                               }
+
+                                                               free(new_dir);
+                                                               goto ERROR_CLOSE_FD;
+                                                       }
+                                               } else {
+                                                       struct stat new_dst_info;
+                                                       if (stat(new_dir, &new_dst_info) == 0) {
+                                                               if (S_ISDIR(new_dst_info.st_mode)) {
+                                                                       if (msg_cb) {
+                                                                               msg_cb(MF_MSG_DOING, ent->ftw_path, 0, 0, msg_data);
+                                                                       }
+                                                               } else {
+                                                                       mf_fo_loge("[%s] is already existed, and this one is not directory", new_dir);
+                                                                       err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_ARGUMENT);
+                                                                       if (msg_cb) {
+                                                                               msg_cb(MF_MSG_ERROR, new_dir, 0, err, msg_data);
+                                                                       }
+                                                                       free(new_dir);
+                                                                       goto ERROR_CLOSE_FD;
+                                                               }
+                                                       } else {
+                                                               MF_FILE_ERROR_LOG(err_buf, "Fail to stat ", new_dir);
+                                                               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                                                               if (msg_cb) {
+                                                                       msg_cb(MF_MSG_ERROR, new_dir, 0, err, msg_data);
+                                                               }
+                                                               free(new_dir);
+                                                               goto ERROR_CLOSE_FD;
+                                                       }
+                                               }
+                                               free(new_dir);
+                                       }
+                               } else {
+
+                                       err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+                                       if (msg_cb) {
+                                               msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                                       }
+                                       goto ERROR_CLOSE_FD;
+                               }
+                       } else if (ent->type == FTW_F) {
+                               char *new_file = __mf_move_change_root_name(ent->ftw_path, src, dst);
+                               if (new_file) {
+                                       err = _mf_move_move_regfile(ent->ftw_path, NULL, new_file, 0, cancel, msg_cb, msg_data);
+                                       if (err == 0) {
+                                               mf_media_content_scan_file(new_file);
+                                       }
+                                       free(new_file);
+                                       if (err > 0) {
+                                               goto DO_CANCEL;
+                                       } else if (err < 0) {
+                                               goto ERROR_CLOSE_FD;
+                                       }
+                               } else {
+                                       err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+                                       if (msg_cb) {
+                                               msg_cb(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                                       }
+                                       goto ERROR_CLOSE_FD;
+                               }
+                       }
+                       mf_debug("ent->path is [%s]", ent->ftw_path);
+                       list = g_slist_next(list);
+               }
+
+       } else {
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_cb) {
+                       msg_cb(MF_MSG_ERROR, src, 0, err, msg_data);
+               }
+               _mf_fo_free_directory_hierarchies(&move_list);
+               return err;
+       }
+       _mf_fo_free_directory_hierarchies(&move_list);
+       return 0;
+
+ERROR_CLOSE_FD:
+       _mf_fo_free_directory_hierarchies(&move_list);
+       return err;
+
+DO_CANCEL:
+       _mf_fo_free_directory_hierarchies(&move_list);
+       return 1;
+}
+
+int _mf_move_move_internal(const char *src, const char *dst_dir,
+                          mf_cancel *cancel, mf_req_callback request_callback, _mf_fo_msg_cb msg_callback, void *msg_data)
+{
+       char *src_basename = NULL;
+       char *new_dst = NULL;
+       char *next_name = NULL;
+       int base_size = 0;
+       int root_size = 0;
+       int with_slash = 1;
+       int alloc_size = 1;     /*for null*/
+       int err = 0;
+       struct stat src_info;
+       struct stat dst_dir_i;
+       char err_buf[MF_ERR_BUF] = {0,};
+
+       if (!src || strlen(src) <= 1) {
+               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (!dst_dir) {
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_ARGUMENT);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (access(dst_dir, R_OK | W_OK)) {
+
+               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_PERMISSION);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, dst_dir, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (stat(src, &src_info)) {
+               MF_FILE_ERROR_LOG(err_buf, "Fail to stat src", src);
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, src, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (stat(dst_dir, &dst_dir_i)) {
+               MF_FILE_ERROR_LOG(err_buf, "Fail to stat dst_dir", src);
+
+               err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_SRC_CLASS);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, dst_dir, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       if (S_ISDIR(src_info.st_mode)) {
+               if (g_strcmp0(dst_dir, src) == 0) {
+                       mf_fo_loge("dst is child of src - src : %s, dst : %s", src, dst_dir);
+
+                       err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_REPORT_CLASS | MF_FO_ERR_ARGUMENT);
+                       if (msg_callback) {
+                               msg_callback(MF_MSG_ERROR, dst_dir, 0, err, msg_data);
+                       }
+                       return err;
+               }
+       }
+       src_basename = g_path_get_basename(src);
+       if (!src_basename) {
+               mf_fo_loge("fail to get basename from src[%s]", src);
+               err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               return err;
+       }
+
+       base_size = strlen(src_basename);
+       root_size = strlen(dst_dir);
+
+       if (dst_dir[root_size - 1] != '/') {
+               alloc_size += 1;
+               with_slash = 0;
+       }
+
+       alloc_size += (base_size + root_size);
+
+       new_dst = malloc(sizeof(char) * (alloc_size));
+       if (!new_dst) {
+               mf_fo_loge("fail to alloc new dst");
+               err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+               if (msg_callback) {
+                       msg_callback(MF_MSG_ERROR, NULL, 0, err, msg_data);
+               }
+               goto ERROR_FREE_MEM;
+       }
+
+       if (with_slash) {
+               snprintf(new_dst, alloc_size, "%s%s", dst_dir, src_basename);
+       } else {
+               snprintf(new_dst, alloc_size, "%s/%s", dst_dir, src_basename);
+       }
+       SAFE_FREE(src_basename);
+
+       if (cancel && mf_cancel_check_cancel(cancel)) {
+               goto CANCEL_FREE_MEM;
+       }
+
+       if (access(new_dst, F_OK)) {
+
+               if (src_info.st_dev == dst_dir_i.st_dev) {
+                       unsigned long long size = 0;
+                       int ret = _mf_fo_get_total_item_size(src, &size);
+                       if (ret < 0) {
+                               MF_FILE_ERROR_LOG(err_buf, "Fail to get item size", new_dst);
+
+                               err = (_mf_fo_errno_to_mferr(-ret) | MF_FO_ERR_SRC_CLASS);
+                               if (msg_callback) {
+                                       msg_callback(MF_MSG_ERROR, src, 0, err, msg_data);
+                               }
+                               goto ERROR_FREE_MEM;
+                       } else {
+                               if (rename(src, new_dst)) {
+                                       MF_FILE_ERROR_LOG(err_buf, "Fail to rename item", new_dst);
+
+                                       err = (_mf_fo_errno_to_mferr(errno) | MF_FO_ERR_DST_CLASS);
+                                       if (msg_callback) {
+                                               msg_callback(MF_MSG_ERROR, new_dst, 0, err, msg_data);
+                                       }
+                                       goto ERROR_FREE_MEM;
+                               } else {
+                                       if (err == 0) {
+                                               mf_media_content_scan_file(new_dst);
+                                       }
+                                       if (msg_callback) {
+                                               msg_callback(MF_MSG_DOING, src, size, 0, msg_data);
+                                       }
+                               }
+                       }
+               } else {
+                       if (S_ISDIR(src_info.st_mode)) {
+                               err = _mf_move_move_directory(src, &src_info, new_dst, cancel, msg_callback, msg_data);
+                               if (err == 0) {
+                                       mf_media_content_scan_folder(new_dst);
+                               }
+                       } else if (S_ISREG(src_info.st_mode)) {
+                               err = _mf_move_move_regfile(src, &src_info, new_dst, 0, cancel, msg_callback, msg_data);
+                               if (err == 0) {
+                                       mf_media_content_scan_file(new_dst);
+                               }
+                       } else {
+                               mf_fo_loge("item[%s] is not file or directory", src);
+                               err = MF_FO_ERR_SET(MF_FO_ERR_SRC_CLASS | MF_FO_ERR_TYPE | MF_FO_ERR_REPORT_CLASS);
+                               if (msg_callback) {
+                                       msg_callback(MF_MSG_ERROR, src, 0, err, msg_data);
+                               }
+                               goto ERROR_FREE_MEM;
+                       }
+               }
+       } else {
+               mf_request_type result = MF_REQ_NONE;
+               if (request_callback) {
+                       mf_fo_request *req = mf_request_new();
+                       if (req) {
+                               mf_request_set_path(req, new_dst);
+                               mf_fo_logi("~~~~~~ waiting for request");
+                               request_callback(req, msg_data);
+                               result = mf_request_get_result(req);
+                               mf_fo_logi("~~~~~~ get request : %d", result);
+
+                               if (result == MF_REQ_RENAME) {
+                                       next_name = mf_request_get_new_name(req);
+                               }
+                               mf_request_free(req);
+                       } else {
+                               mf_fo_loge("Fail to alloc request");
+                               err = MF_FO_ERR_SET(MF_FO_ERR_COMMON_CLASS | MF_FO_ERR_MEM);
+                               if (msg_callback) {
+                                       msg_callback(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                               }
+                               goto ERROR_FREE_MEM;
+                       }
+               }
+
+               switch (result) {
+               case MF_REQ_NONE:
+               case MF_REQ_MERGE:
+                       {
+                               struct stat dst_info;
+                               if (stat(new_dst, &dst_info)) {
+                                       MF_FILE_ERROR_LOG(err_buf, "Fail to stat new_dst", new_dst);
+                                       if (msg_callback) {
+                                               msg_callback(MF_MSG_ERROR, NULL, 0, errno, msg_data);
+                                       }
+                                       goto ERROR_FREE_MEM;
+                               }
+
+                               if (S_ISDIR(src_info.st_mode)) {
+                                       if (!S_ISDIR(dst_info.st_mode)) {
+                                               mf_fo_loge("src[%s] is directory, but dst[%s] is already existed and not a directory", src, new_dst);
+
+                                               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_TYPE);
+                                               if (msg_callback) {
+                                                       msg_callback(MF_MSG_ERROR, new_dst, 0, err, msg_data);
+                                               }
+                                               goto ERROR_FREE_MEM;
+                                       }
+                                       err = _mf_move_move_directory(src, &src_info, new_dst, cancel, msg_callback, msg_data);
+                                       if (err == 0) {
+                                               mf_media_content_scan_folder(new_dst);
+                                       }
+                               } else if (S_ISREG(src_info.st_mode)) {
+                                       if (!S_ISREG(dst_info.st_mode)) {
+                                               mf_fo_loge("src[%s] is file, but dst[%s] is already existed and not a file", src, new_dst);
+                                               err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_TYPE);
+                                               if (msg_callback) {
+                                                       msg_callback(MF_MSG_ERROR, new_dst, 0, err, msg_data);
+                                               }
+                                               goto ERROR_FREE_MEM;
+                                       }
+                                       err = _mf_move_move_regfile(src, &src_info, new_dst, dst_info.st_blksize, cancel, msg_callback, msg_data);
+                                       if (err == 0) {
+                                               mf_media_content_scan_file(new_dst);
+                                       }
+                               }
+
+                       }
+                       break;
+               case MF_REQ_RENAME:
+                       {
+                               if (next_name) {
+                                       if (S_ISDIR(src_info.st_mode)) {
+                                               err = _mf_move_move_directory(src, &src_info, next_name, cancel, msg_callback, msg_data);
+                                               if (err == 0) {
+                                                       mf_media_content_scan_folder(next_name);
+                                               }
+                                       } else if (S_ISREG(src_info.st_mode)) {
+                                               err = _mf_move_move_regfile(src, &src_info, next_name, 0, cancel, msg_callback, msg_data);
+                                               if (err == 0) {
+                                                       mf_media_content_scan_file(next_name);
+                                               }
+                                       }
+                                       SAFE_FREE(next_name);
+                               } else {
+                                       if (S_ISDIR(src_info.st_mode)) {
+                                               int errcode = 0;
+                                               next_name = _mf_fo_get_next_unique_dirname(new_dst, &errcode);
+                                               if (!next_name) {
+                                                       mf_fo_loge("Fail to get next directory name [%s]", new_dst);
+                                                       err = (_mf_fo_errno_to_mferr(errcode) | MF_FO_ERR_DST_CLASS);
+                                                       if (msg_callback) {
+                                                               msg_callback(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                                                       }
+                                                       goto ERROR_FREE_MEM;
+                                               }
+                                               err = _mf_move_move_directory(src, &src_info, next_name, cancel, msg_callback, msg_data);
+                                               if (err == 0) {
+                                                       mf_media_content_scan_folder(next_name);
+                                               }
+                                       } else if (S_ISREG(src_info.st_mode)) {
+                                               int errcode = 0;
+                                               next_name = _mf_fo_get_next_unique_filename(new_dst, &errcode);
+                                               if (!next_name) {
+                                                       mf_fo_loge("Fail to get next file name [%s]", new_dst);
+                                                       err = (_mf_fo_errno_to_mferr(errcode) | MF_FO_ERR_DST_CLASS);
+                                                       if (msg_callback) {
+                                                               msg_callback(MF_MSG_ERROR, NULL, 0, err, msg_data);
+                                                       }
+                                                       goto ERROR_FREE_MEM;
+                                               }
+                                               err = _mf_move_move_regfile(src, &src_info, next_name, 0, cancel, msg_callback, msg_data);
+                                               if (err == 0) {
+                                                       mf_media_content_scan_file(next_name);
+                                               }
+                                       }
+                                       SAFE_FREE(next_name);
+                               }
+                       }
+                       break;
+               case MF_REQ_SKIP:
+                       {
+                               if (msg_callback) {
+                                       unsigned long long size = 0;
+                                       _mf_fo_get_total_item_size(src, &size);
+                                       msg_callback(MF_MSG_SKIP, NULL, size, 0, msg_data);
+                               }
+                       }
+                       break;
+               case MF_REQ_CANCEL:
+                       {
+                               if (cancel) {
+                                       mf_cancel_do_cancel(cancel);
+                               }
+                               goto CANCEL_FREE_MEM;
+                       }
+                       break;
+               default:
+                       abort();
+                       break;
+
+               }
+       }
+       SAFE_FREE(new_dst);
+
+       if (err > 0) {
+               goto CANCEL_FREE_MEM;
+       } else if (err < 0) {
+               goto ERROR_FREE_MEM;
+       }
+
+       return 0;
+
+ERROR_FREE_MEM:
+       SAFE_FREE(src_basename);
+       SAFE_FREE(new_dst);
+
+       return err;
+
+CANCEL_FREE_MEM:
+
+       mf_fo_logi("move cancelled");
+       SAFE_FREE(new_dst);
+
+       return 1;
+}
diff --git a/src/common/file-operation/mf-move.c b/src/common/file-operation/mf-move.c
new file mode 100644 (file)
index 0000000..111ce74
--- /dev/null
@@ -0,0 +1,488 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <stdio.h>
+#include <glib.h>
+#include <unistd.h>
+#include <stdlib.h>
+#include <errno.h>
+#include <string.h>
+#include <sys/time.h>
+#include <sys/syscall.h>
+
+#include "mf-move.h"
+#include "mf-move-internal.h"
+#include "mf-cancel.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+#include "mf-fo-debug.h"
+#include "mf-callback.h"
+
+extern int flagMsg;
+extern pthread_mutex_t gLockMsg;
+extern pthread_cond_t gCondMsg;
+
+struct _mf_move_handle {
+       GList *src_items;
+       char *dst_dir;
+       mf_cancel *cancel;
+       void *u_data;
+       gboolean sync;
+
+       GMutex *lock;
+       GCond *cond;
+
+       mf_fo_msg msg;
+       mf_fo_request *req;
+       Ecore_Pipe *pipe;
+};
+
+static double __mf_move_get_time(void)
+{
+       struct timeval timev;
+
+       gettimeofday(&timev, NULL);
+       return (double)timev.tv_sec + (((double)timev.tv_usec) / 1000000);
+}
+
+static void __mf_move_free_handle(struct _mf_move_handle *handle)
+{
+       if (handle) {
+               if (handle->lock) {
+                       g_mutex_free(handle->lock);
+               }
+               if (handle->cond) {
+                       g_cond_free(handle->cond);
+               }
+               if (handle->dst_dir) {
+                       free(handle->dst_dir);
+               }
+               if (handle->src_items) {
+                       g_list_foreach(handle->src_items, (GFunc) free, NULL);
+                       g_list_free(handle->src_items);
+               }
+               if (handle->msg.current_real) {
+                       g_free(handle->msg.current_real);
+                       handle->msg.current_real = NULL;
+               }
+               free(handle);
+       }
+
+       return;
+}
+
+static gboolean __mf_move_msg_publish(gpointer data)
+{
+       struct _mf_move_handle *handle = NULL;
+       handle = (struct _mf_move_handle *)data;
+       mf_fo_msg msg;
+
+       if (!handle) {
+               goto EXIT;
+       }
+       MYFILE_MAGIC_SET(&msg, MYFILE_MAGIC_PIPE_DATA);
+
+       g_mutex_lock(handle->lock);
+       msg.msg_type = handle->msg.msg_type;
+       msg.error_code = handle->msg.error_code;
+       msg.current = handle->msg.current;
+       msg.current_index = handle->msg.current_index;
+       msg.total_index = handle->msg.total_index;
+       msg.current_size = handle->msg.current_size;
+       msg.total_size = handle->msg.total_size;
+       msg.current_real = handle->msg.current_real;
+       msg.request = NULL;
+       msg.pipe = handle->pipe;
+       g_mutex_unlock(handle->lock);
+
+       ecore_pipe_write(handle->pipe, &msg, sizeof(msg));
+
+EXIT:
+       return FALSE;
+}
+
+static void __mf_move_msg_cb(mf_msg_type msg_type, const char *real, unsigned long long size, int error_code, void *data)
+{
+       struct _mf_move_handle *handle = NULL;
+       handle = (struct _mf_move_handle *)data;
+
+       pthread_mutex_lock(&gLockMsg);
+       while (flagMsg == 0) {
+               mf_fo_loge("!!!!!!!!!!!! wait");
+               pthread_cond_wait(&gCondMsg, &gLockMsg);
+       }
+       flagMsg = 0;
+       pthread_mutex_unlock(&gLockMsg);
+
+       if (handle) {
+               g_mutex_lock(handle->lock);
+               handle->msg.msg_type = msg_type;
+               if (msg_type == MF_MSG_ERROR) {
+                       handle->msg.error_code = error_code;
+                       if (real) {
+                               if (handle->msg.current_real) {
+                                       free(handle->msg.current_real);
+                               }
+                               handle->msg.current_real = strdup(real);
+                       }
+               } else {
+                       handle->msg.error_code = 0;
+                       if (msg_type == MF_MSG_DOING) {
+                               if (real) {
+                                       if (handle->msg.current_real) {
+                                               free(handle->msg.current_real);
+                                       }
+                                       handle->msg.current_real = strdup(real);
+                               }
+                               handle->msg.current_size += size;
+                               handle->msg.error_code = 0;
+                       } else if (msg_type == MF_MSG_SKIP) {
+                               handle->msg.total_size -= size;
+                               handle->msg.error_code = 0;
+                       }
+               }
+               g_mutex_unlock(handle->lock);
+               __mf_move_msg_publish(handle);
+       }
+       return;
+}
+
+static gboolean __mf_move_req_msg_callback(gpointer data)
+{
+       FO_TRACE_BEGIN;
+
+       struct _mf_move_handle *mv_handle = NULL;
+       mv_handle = (struct _mf_move_handle *)data;
+       mf_fo_msg msg;
+       memset(&msg, 0, sizeof(mf_fo_msg));
+
+       MYFILE_MAGIC_SET(&msg, MYFILE_MAGIC_PIPE_DATA);
+       if (!mv_handle) {
+               goto EXIT;
+       }
+
+       g_mutex_lock(mv_handle->lock);
+       msg.msg_type = MF_MSG_REQUEST;
+       msg.error_code = mv_handle->msg.error_code;
+       msg.current = mv_handle->msg.current;
+       msg.current_index = mv_handle->msg.current_index;
+       msg.total_index = mv_handle->msg.total_index;
+       msg.current_size = mv_handle->msg.current_size;
+       msg.total_size = mv_handle->msg.total_size;
+       msg.current_real = mv_handle->msg.current_real;
+       msg.request = mv_handle->req;
+       g_mutex_unlock(mv_handle->lock);
+       ecore_pipe_write(mv_handle->pipe, &msg, sizeof(msg));
+
+EXIT:
+
+       FO_TRACE_END;
+       return FALSE;
+}
+
+static void __mf_move_req_cb(mf_fo_request *req, void *data)
+{
+       struct _mf_move_handle *handle = NULL;
+       handle = (struct _mf_move_handle *)data;
+
+       if (handle) {
+
+               handle->req = req;
+               mf_request_set_cond(req, handle->cond);
+               __mf_move_req_msg_callback(handle);
+               g_mutex_lock(handle->lock);
+               while (mf_request_flag_get(req)) {
+                       g_cond_wait(handle->cond, handle->lock);
+               }
+               mf_request_flag_set(req, 1);
+               g_mutex_unlock(handle->lock);
+       }
+       return;
+}
+
+static void *__mf_move_thread_func(void *data)
+{
+       struct _mf_move_handle *handle = NULL;
+       handle = (struct _mf_move_handle *)data;
+
+       gboolean cancelled = FALSE;
+       double s_start = 0.0;
+       double s_stop = 0.0;
+       double c_start = 0.0;
+       double c_stop = 0.0;
+       char err_buf[MF_ERR_BUF] = {0,};
+
+       if (handle) {
+               GList *tmp_src_list = NULL;
+               unsigned long long t_size = 0;
+               unsigned long long r_size = 0;
+               unsigned long long n_size = 0;
+               int errcode = 0;
+               struct stat dst_info;
+
+               errcode = _mf_fo_get_remain_space(handle->dst_dir, &r_size);
+               if (errcode < 0) {
+
+                       __mf_move_msg_cb(MF_MSG_ERROR, handle->dst_dir, 0, (MF_FO_ERR_DST_CLASS | _mf_fo_errno_to_mferr(-errcode)), handle);
+
+                       goto ERROR_END_THREAD;
+               }
+
+               if (r_size == 0) {
+
+                       int err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_SPACE);
+                       __mf_move_msg_cb(MF_MSG_ERROR, handle->dst_dir, 0, err, handle);
+
+                       goto ERROR_END_THREAD;
+               }
+
+               n_size = r_size;
+
+               if (stat(handle->dst_dir, &dst_info)) {
+
+                       __mf_move_msg_cb(MF_MSG_ERROR, handle->dst_dir, 0, (MF_FO_ERR_DST_CLASS | _mf_fo_errno_to_mferr(errno)), handle);
+
+                       goto ERROR_END_THREAD;
+               }
+
+               s_start = __mf_move_get_time();
+               tmp_src_list = handle->src_items;
+               while (tmp_src_list) {
+                       if (tmp_src_list->data) {
+                               const char *s_path = NULL;
+                               unsigned long long size = 0;
+
+                               s_path = tmp_src_list->data;
+                               if (access(s_path, R_OK) == 0) {
+                                       errcode = _mf_fo_get_total_item_size(s_path, &size);
+                                       if (errcode < 0) {
+                                               mf_fo_loge("Fail to get size of %s", s_path);
+
+                                               __mf_move_msg_cb(MF_MSG_ERROR, s_path, 0,
+                                                                (MF_FO_ERR_SRC_CLASS | _mf_fo_errno_to_mferr(-errcode)), handle);
+
+
+                                               goto ERROR_END_THREAD;
+                                       } else {
+                                               struct stat src_info;
+                                               mf_fo_logi("size of %s - %lld", s_path, size);
+                                               t_size += size;
+
+                                               if (stat(s_path, &src_info)) {
+
+                                                       __mf_move_msg_cb(MF_MSG_ERROR, handle->dst_dir, 0,
+                                                                        (MF_FO_ERR_DST_CLASS | _mf_fo_errno_to_mferr(errno)), handle);
+
+                                                       goto ERROR_END_THREAD;
+                                               }
+
+                                               if (dst_info.st_dev != src_info.st_dev) {
+                                                       if (n_size > size) {
+                                                               n_size -= size;
+                                                       } else {
+                                                               mf_fo_loge("remain size [%lld], needed size [%lld], current item size [%lld] -[%s]",
+                                                                          r_size, n_size, size, s_path);
+
+
+                                                               int err = MF_FO_ERR_SET(MF_FO_ERR_DST_CLASS | MF_FO_ERR_SPACE);
+                                                               __mf_move_msg_cb(MF_MSG_ERROR, handle->dst_dir, 0, err, handle);
+
+                                                               goto ERROR_END_THREAD;
+                                                       }
+                                               }
+                                       }
+                               } else {
+                                       MF_FILE_ERROR_LOG(err_buf, "Unable to access", s_path);
+
+                                       __mf_move_msg_cb(MF_MSG_ERROR, s_path, 0, (MF_FO_ERR_SRC_CLASS | _mf_fo_errno_to_mferr(errno)), handle);
+
+                                       goto ERROR_END_THREAD;
+                               }
+                       }
+                       tmp_src_list = g_list_next(tmp_src_list);
+               }
+               s_stop = __mf_move_get_time();
+               g_mutex_lock(handle->lock);
+               handle->msg.total_size = t_size;
+               g_mutex_unlock(handle->lock);
+
+               mf_fo_logi("total size [%lld], remain size [%lld] -[%s]", t_size, r_size, handle->dst_dir);
+
+               c_start = __mf_move_get_time();
+               tmp_src_list = handle->src_items;
+               while (tmp_src_list) {
+                       if (tmp_src_list->data) {
+                               const char *s_path = NULL;
+                               s_path = tmp_src_list->data;
+                               int ret = 0;
+                               g_mutex_lock(handle->lock);
+                               handle->msg.current_index++;
+                               handle->msg.current = s_path;
+                               g_mutex_unlock(handle->lock);
+                               ret = _mf_move_move_internal(s_path, handle->dst_dir, handle->cancel, __mf_move_req_cb, __mf_move_msg_cb, handle);
+
+                               if (ret > 0) {
+                                       if (handle->cancel) {
+                                               mf_cancel_set_cancelled(handle->cancel);
+                                       }
+                                       cancelled = TRUE;
+                                       break;
+                               }
+                               if (ret < 0) {
+                                       mf_fo_loge("Fail to move [%s] to [%s]", s_path, handle->dst_dir);
+                                       break;
+                               }
+                       }
+                       tmp_src_list = g_list_next(tmp_src_list);
+
+               }
+               c_stop = __mf_move_get_time();
+               mf_fo_logi("## Total src size - %lld byte, size time : %lf sec, move time : %lf sec",
+                          handle->msg.total_size, s_stop - s_start, c_stop - c_start);
+
+               if (cancelled) {
+                       __mf_move_msg_cb(MF_MSG_CANCELLED, NULL, 0, 0, handle);
+               }
+
+ERROR_END_THREAD:
+
+               if (handle->sync) {
+                       double start = 0.0;
+                       double stop = 0.0;
+                       __mf_move_msg_cb(MF_MSG_SYNC, NULL, 0, 0, handle);
+                       start = __mf_move_get_time();
+                       sync();
+                       stop = __mf_move_get_time();
+                       mf_fo_logi("sync time : %lf sec", stop - start);
+               }
+
+               __mf_move_msg_cb(MF_MSG_END, NULL, 0, 0, handle);
+
+               __mf_move_free_handle(handle);
+               handle = NULL;
+       } else {
+               mf_fo_loge("handle is NULL");
+               abort();
+       }
+
+       mf_fo_logd("The end of __mf_move_thread_func");
+       return NULL;
+}
+
+
+int mf_move_move_items(GList *item_list, const char *dst_dir, mf_cancel *cancel, gboolean sync, void *u_data)
+{
+       struct _mf_move_handle *handle = NULL;
+       GList *tmp_list = NULL;
+       int err = 0;
+
+       if (!item_list) {
+               mf_fo_loge("item_list is NULL");
+               return -(MF_FO_ERR_ARGUMENT);
+       }
+       if (!dst_dir) {
+               mf_fo_loge("dst_dir is NULL");
+               return -(MF_FO_ERR_ARGUMENT);
+       }
+
+       if (!_mf_fo_check_exist(dst_dir)) {
+               mf_fo_loge("dst_dir[%s] is not existed", dst_dir);
+               return -(MF_FO_ERR_ARGUMENT);
+       }
+
+       if (!g_thread_supported()) {
+               g_thread_init(NULL);
+       }
+
+       handle = malloc(sizeof(struct _mf_move_handle));
+       if (!handle) {
+               mf_fo_loge("Fail to allocate handle");
+               return -(MF_FO_ERR_MEM);
+       }
+       memset(handle, 0x00, sizeof(struct _mf_move_handle));
+
+       handle->lock = g_mutex_new();
+       if (!handle->lock) {
+               mf_fo_loge("Fail to allocate mutex");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+       handle->cond = g_cond_new();
+       if (!handle->cond) {
+               mf_fo_loge("Fail to allocate cond");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+
+       handle->dst_dir = strdup(dst_dir);
+       if (!handle->dst_dir) {
+               mf_fo_loge("Fail to allocate memory");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+       handle->cancel = cancel;
+       handle->u_data = u_data;
+       handle->sync = sync;
+
+       pthread_mutex_lock(&gLockMsg);
+       flagMsg = 1;
+       pthread_mutex_unlock(&gLockMsg);
+
+       tmp_list = item_list;
+       while (tmp_list) {
+               if (tmp_list->data) {
+                       char *src_item = NULL;
+                       src_item = strdup((char *)tmp_list->data);
+                       if (src_item) {
+                               if (_mf_fo_check_exist(src_item)) {
+                                       handle->src_items = g_list_append(handle->src_items, src_item);
+                               } else {
+                                       mf_fo_loge("src_item[%s] is not existed", src_item);
+                                       err = MF_FO_ERR_ARGUMENT;
+                                       free(src_item);
+                                       src_item = NULL;
+                               }
+                       } else {
+                               mf_fo_loge("Fail to allocate memory");
+                               err = MF_FO_ERR_MEM;
+                               goto ERROR_FREE_MEM;
+                       }
+               }
+               tmp_list = g_list_next(tmp_list);
+       }
+
+       if (!handle->src_items) {
+               mf_fo_loge("Fail to create src list");
+               err = MF_FO_ERR_ARGUMENT;
+               goto ERROR_FREE_MEM;
+       }
+
+       handle->pipe = ecore_pipe_add(mf_callback_thread_pipe_cb, u_data);
+       if (!g_thread_create((GThreadFunc) __mf_move_thread_func, handle, FALSE, NULL)) {
+               mf_fo_loge("Fail to create move thread");
+               err = MF_FO_ERR_MEM;
+               goto ERROR_FREE_MEM;
+       }
+
+       return 0;
+
+ERROR_FREE_MEM:
+       __mf_move_free_handle(handle);
+       return -(err);
+}
diff --git a/src/common/file-operation/mf-request.c b/src/common/file-operation/mf-request.c
new file mode 100644 (file)
index 0000000..8c4c858
--- /dev/null
@@ -0,0 +1,164 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <glib.h>
+#include <stdlib.h>
+#include <string.h>
+#include <pthread.h>
+#include "mf-request.h"
+
+int flagMsg = 1;
+pthread_mutex_t gLockMsg;
+pthread_cond_t gCondMsg;
+
+struct _mf_fo_req {
+       GCond *cond;
+       GMutex *lock;
+       const char *path;
+       char *new_name;
+       int flagCond;
+       mf_request_type request;
+};
+
+mf_fo_request *mf_request_new(void)
+{
+       mf_fo_request *result = NULL;
+
+       result = malloc(sizeof(mf_fo_request));
+       if (result) {
+               result->cond = NULL;
+               result->path = NULL;
+               result->new_name = NULL;
+               result->flagCond = 1;
+               result->request = MF_REQ_MERGE;
+       }
+       return result;
+}
+
+void mf_request_free(mf_fo_request *req)
+{
+       if (req) {
+               if (req->new_name) {
+                       free(req->new_name);
+               }
+               free(req);
+       }
+       return;
+}
+
+void mf_request_set_result(mf_fo_request *req, mf_request_type result)
+{
+       if (req) {
+               req->request = result;
+
+               if (req->cond) {
+                       if (req->flagCond == 1) {
+                               req->flagCond = 0;
+                               g_cond_broadcast(req->cond);
+                       }
+               }
+       }
+
+       return;
+}
+
+void mf_request_set_result_rename(mf_fo_request *req, const char *new_name)
+{
+       if (req) {
+               req->request = MF_REQ_RENAME;
+               if (new_name) {
+                       req->new_name = strdup(new_name);
+               }
+
+               if (req->cond) {
+                       g_cond_broadcast(req->cond);
+               }
+       }
+
+       return;
+}
+
+void mf_request_set_cond(mf_fo_request *req, GCond * cond)
+{
+       if (req) {
+               req->cond = cond;
+       }
+       return;
+}
+
+void mf_request_set_path(mf_fo_request *req, const char *path)
+{
+       if (req) {
+               req->path = path;
+       }
+       return;
+}
+
+char *mf_request_get_new_name(mf_fo_request *req)
+{
+       char *new_name = NULL;
+       if (req) {
+               new_name = req->new_name;
+               req->new_name = NULL;
+       }
+       return new_name;
+}
+
+const char *mf_request_get_path(mf_fo_request *req)
+{
+       if (req) {
+               return req->path;
+       }
+       return NULL;
+}
+
+mf_request_type mf_request_get_result(mf_fo_request *req)
+{
+       mf_request_type request = MF_REQ_NONE;
+       if (req) {
+               request = req->request;
+       }
+       return request;
+}
+
+
+void mf_msg_request_handled_send()
+{
+       pthread_mutex_lock(&gLockMsg);
+       if (flagMsg == 0) {
+               flagMsg = 1;
+               pthread_cond_signal(&gCondMsg);
+       }
+       pthread_mutex_unlock(&gLockMsg);
+}
+
+int mf_request_flag_get(mf_fo_request *req)
+{
+       if (req) {
+               return req->flagCond;
+       }
+       return -1;
+}
+
+void mf_request_flag_set(mf_fo_request *req, int value)
+{
+       if (req) {
+               req->flagCond = value;
+       }
+}
diff --git a/src/common/file-operation/mf-search-internal.c b/src/common/file-operation/mf-search-internal.c
new file mode 100644 (file)
index 0000000..8a47352
--- /dev/null
@@ -0,0 +1,848 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <glib.h>
+#include <stdio.h>
+#include <errno.h>
+#include <string.h>
+#include <dirent.h>
+#include <pthread.h>
+#include <Ecore.h>
+
+#include "mf-main.h"
+#include "mf-search.h"
+#include "mf-search-internal.h"
+#include "mf-fs-util.h"
+
+#define APPEND_SIZE 2          /* for null and slash */
+
+#define NORMALIZE_OPTION G_NORMALIZE_NFD
+
+#ifdef CHECK_RESTRICTED_PATH
+/* TODO
+ *  This code should be revised.
+ *  How to get restricted path information?
+ *  I think this module should not depend on other lib(except glib and stdlib).
+*/
+#define ROOT_UMS "/opt/usr/media"
+#define ROOT_MMC "/opt/storage/sdcard"
+#endif /* CHECK_RESTRICTED_PATH */
+
+int flagSearchMsg = 1;
+pthread_mutex_t gLockSearchMsg;
+pthread_cond_t gCondSearchMsg;
+
+static void __mf_search_tx_wait();
+static void __mf_search_result_publish_msg(mf_search_pipe_msg_type type, void *result, void *user_data);
+
+inline static void __mf_search_cmd_lock(ms_handle_t *handle)
+{
+       if (handle && handle->cmd_lock) {
+               g_mutex_lock(handle->cmd_lock);
+       }
+       return;
+}
+
+inline static void __mf_search_cmd_unlock(ms_handle_t *handle)
+{
+       if (handle && handle->cmd_lock) {
+               g_mutex_unlock(handle->cmd_lock);
+       }
+       return;
+}
+
+inline static void __mf_search_thread_lock(ms_handle_t *handle)
+{
+       if (handle && handle->thread_mutex) {
+               g_mutex_lock(handle->thread_mutex);
+       }
+       return;
+}
+
+inline static void __mf_search_thread_unlock(ms_handle_t *handle)
+{
+       if (handle && handle->thread_mutex) {
+               g_mutex_unlock(handle->thread_mutex);
+       }
+       return;
+}
+
+inline static void __mf_search_args_free(ms_args_t *args)
+{
+       if (args) {
+               if (args->root_path) {
+                       g_list_foreach(args->root_path, (GFunc) g_free, NULL);
+                       g_list_free(args->root_path);
+                       args->root_path = NULL;
+               }
+
+               if (args->needle)
+                       g_free(args->needle);
+
+               g_free(args);
+       }
+       return;
+}
+
+inline static void __mf_search_result_free(mf_search_result_t *result)
+{
+       if (result) {
+               if (result->current_dir) {
+                       g_free(result->current_dir);
+                       result->current_dir = NULL;
+               }
+               if (result->dir_list) {
+                       g_list_foreach(result->dir_list, (GFunc) g_free, NULL);
+                       g_list_free(result->dir_list);
+                       result->dir_list = NULL;
+               }
+               if (result->file_list) {
+                       g_list_foreach(result->file_list, (GFunc) g_free, NULL);
+                       g_list_free(result->file_list);
+                       result->file_list = NULL;
+               }
+               g_free(result);
+       }
+       return;
+}
+
+#ifdef CHECK_RESTRICTED_PATH
+gboolean __mf_search_check_licet_path(const char *path)
+{
+       return (gboolean) (strstr(path, ROOT_UMS) || strstr(path, ROOT_MMC));
+}
+#endif /*CHECK_RESTRICTED_PATH*/
+
+
+ /*This function is for testing and should be revised for performance before applying*/
+static inline gboolean __has_nonspacing_mark(const char *nstr)
+{
+       if (nstr) {
+               const char *p_str = nstr;
+               while (p_str && *p_str) {
+                       gunichar uc;
+                       uc = g_utf8_get_char(p_str);
+                       if (g_unichar_type(uc) == G_UNICODE_NON_SPACING_MARK) {
+                               return TRUE;
+                       } else {
+                               p_str = g_utf8_next_char(p_str);
+                       }
+               }
+       }
+       return FALSE;
+}
+
+static gboolean __mf_search_NFD_strstr(const char *str, const char *needle)
+{
+       int s_len = 0;
+       int n_len = 0;
+
+       if (!str) {
+               return FALSE;
+       }
+       s_len = strlen(str);
+
+       if (!needle) {
+               return FALSE;
+       } else {
+               n_len = strlen(needle);
+               if (n_len == 0) {
+                       return FALSE;
+               }
+       }
+
+       if (s_len < n_len)
+               return FALSE;
+
+       if (__has_nonspacing_mark(str)) {
+               const char *p_str = str;
+               const char *end = p_str + s_len - n_len;
+
+               while (p_str && p_str <= end && *p_str) {
+                       const char *s = p_str;
+                       const char *n = needle;
+                       while (n && *n) {
+                               if (s && *s) {
+                                       gunichar sc, nc;
+                                       sc = g_utf8_get_char(s);
+                                       nc = g_utf8_get_char(n);
+                                       if (g_unichar_type(sc) == G_UNICODE_NON_SPACING_MARK) {
+                                               if (g_unichar_type(nc) == G_UNICODE_NON_SPACING_MARK) {
+                                                       if (sc != nc) {
+                                                               goto next;
+                                                       } else {
+                                                               s = g_utf8_next_char(s);
+                                                               n = g_utf8_next_char(n);
+                                                       }
+                                               } else {
+                                                       s = g_utf8_next_char(s);
+                                               }
+                                       } else if (sc != nc) {
+                                               goto next;
+                                       } else {
+                                               s = g_utf8_next_char(s);
+                                               n = g_utf8_next_char(n);
+                                       }
+                               } else {
+                                       return FALSE;
+                               }
+                       }
+
+                       return TRUE;
+next:
+                       p_str = g_utf8_next_char(p_str);
+               }
+       } else {
+               return (gboolean) (!(!strstr(str, needle)));
+       }
+       return FALSE;
+}
+
+static GList *__mf_search_do_find(const char *root,
+       const char *needle,
+       mf_search_option option,
+       ms_handle_t *handle)
+{
+       DIR *directory = NULL;
+       GList *candidate = NULL;
+
+       char *up_needle = NULL;
+       char *up_name = NULL;
+       char err_buf[MF_ERR_BUF] = {0,};
+
+       if (!handle) {
+               ms_error("handle is NULL");
+               return NULL;
+       }
+
+       if (!handle->result) {
+               ms_error("handle->result is NULL");
+               return NULL;
+       }
+
+       if (!root) {
+               ms_error("invaild args");
+               return NULL;
+       }
+
+       if (!needle && !handle->args->func) {
+               return NULL;
+       }
+
+       if (!g_file_test(root, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)) {
+               ms_error("invaild root_path : %s", root);
+               return NULL;
+       }
+
+       directory = opendir(root);
+       if (directory) {
+               mf_search_result_t *result = NULL;
+               struct dirent *entry = NULL;
+
+               result = handle->result;
+               __mf_search_thread_lock(handle);
+               if (result->current_dir) {
+                       g_free(result->current_dir);
+               }
+               result->current_dir = g_strdup(root);
+               __mf_search_thread_unlock(handle);
+               while ((entry = readdir(directory)) != NULL) {
+                       if (!(option & MF_SEARCH_OPT_HIDDEN) && (0 == strncmp(entry->d_name, ".", 1))) {
+                               ms_debug("[%s] is hidden file. Skip it", entry->d_name);
+                               continue;
+                       }
+
+                       if (handle->is_stop == TRUE) {
+                               mf_debug("break from do find");
+                               break;
+                       }
+
+                       if (entry->d_type & DT_REG) {
+                               if (option & MF_SEARCH_OPT_FILE) {
+                                       __mf_search_thread_lock(handle);
+                                       result->total_count++;
+                                       __mf_search_thread_unlock(handle);
+
+                                       up_name = g_utf8_strup(entry->d_name, strlen(entry->d_name));
+                                       gchar *nor_str = g_utf8_normalize(up_name, -1, NORMALIZE_OPTION);
+                                       if (handle->args->func) {
+                                               gchar *path = NULL;
+                                               gssize len = strlen(root) + strlen(entry->d_name) + APPEND_SIZE;        /* for null and slash*/
+                                               path = g_malloc(sizeof(gchar) * len);
+                                               if (path) {
+                                                       g_snprintf(path, len, "%s/%s", root, entry->d_name);
+                                                       int category = handle->args->func(nor_str);
+                                                       if (category == handle->args->category) {
+                                                               g_snprintf(path, len, "%s/%s", root, entry->d_name);
+
+                                                               __mf_search_thread_lock(handle);
+                                                               result->file_list = g_list_append(result->file_list, (gpointer) path);
+                                                               result->is_end = FALSE;
+                                                               __mf_search_thread_unlock(handle);
+
+                                                               __mf_search_tx_wait();
+                                                               __mf_search_result_publish_msg(MF_SEARCH_PIPE_MSG_RESULT_REPORT, result,
+                                                                                              handle->args->user_data);
+                                                       }
+                                                       /*1  TODO: how can i handle else case?*/
+                                               }
+                                       } else if (needle){
+                                               up_needle = g_utf8_strup(needle, strlen(needle));
+                                               /*      should we check the return value for further use? */
+                                               if (__mf_search_NFD_strstr(nor_str, up_needle))
+                                               {
+                                                       gchar *path = NULL;
+                                                       gssize len = strlen(root) + strlen(entry->d_name) + APPEND_SIZE;        /* for null and slash*/
+                                                       path = g_malloc(sizeof(gchar) * len);
+                                                       if (path) {
+                                                               g_snprintf(path, len, "%s/%s", root, entry->d_name);
+
+                                                               __mf_search_thread_lock(handle);
+                                                               result->file_list = g_list_append(result->file_list, (gpointer) path);
+                                                               result->is_end = FALSE;
+                                                               __mf_search_thread_unlock(handle);
+
+                                                               __mf_search_tx_wait();
+                                                               __mf_search_result_publish_msg(MF_SEARCH_PIPE_MSG_RESULT_REPORT, result,
+                                                                                              handle->args->user_data);
+                                                       }
+                                                       /*1  TODO: how can i handle else case?*/
+                                               }
+                                       }
+
+                                       /*Todo:*/
+                                       g_free(nor_str);
+                                       free(up_needle);
+                                       up_needle = NULL;
+                                       free(up_name);
+                                       up_name = NULL;
+                               }
+                       } else if (entry->d_type & DT_DIR) {
+                               gchar *path = NULL;
+                               gssize len = 0;
+
+                               len = strlen(entry->d_name);
+                               /*skip current and upper directory*/
+                               if (0 == strncmp(entry->d_name, ".", strlen(".")) || 0 == strncmp(entry->d_name, "..", strlen(".."))) {
+                                       continue;
+                               }
+                               /* we are not going to search /opt/media/SLP_Debug folder */
+                               if ((strlen(result->current_dir) == strlen(PHONE_FOLDER)) && (strcmp(result->current_dir, PHONE_FOLDER) == 0)
+                                   && (strlen(entry->d_name) == strlen(DEBUG_FOLDER)) && (strcmp(entry->d_name, DEBUG_FOLDER) == 0)) {
+                                       ms_debug("[%s] is hidden folder. Skip it", entry->d_name);
+                                       continue;
+                               }
+
+                               len = strlen(root) + strlen(entry->d_name) + APPEND_SIZE;       /* for null and slash */
+                               path = g_malloc(sizeof(gchar) * len);
+                               if (path) {
+                                       g_snprintf(path, len, "%s/%s", root, entry->d_name);
+                                       candidate = g_list_append(candidate, (gpointer) path);
+                               }
+                               /*1  TODO: how can i handle else case?*/
+                               if (option & MF_SEARCH_OPT_DIR) {
+                                       __mf_search_thread_lock(handle);
+                                       result->total_count++;
+                                       __mf_search_thread_unlock(handle);
+
+                                       up_name = g_utf8_strup(entry->d_name, strlen(entry->d_name));
+                                       if (up_name && needle) {
+                                               up_needle = g_utf8_strup(needle, strlen(needle));
+                                               gchar *nor_str = g_utf8_normalize(up_name, -1, NORMALIZE_OPTION);
+                                               if (__mf_search_NFD_strstr(nor_str, up_needle))
+                                               {
+                                                       __mf_search_thread_lock(handle);
+                                                       result->dir_list = g_list_append(result->dir_list, (gpointer) g_strdup(path));
+                                                       result->is_end = FALSE;
+                                                       __mf_search_thread_unlock(handle);
+                                                       __mf_search_tx_wait();
+                                                       __mf_search_result_publish_msg(MF_SEARCH_PIPE_MSG_RESULT_REPORT, result, handle->args->user_data);
+                                               }
+                                               g_free(nor_str);
+                                               free(up_name);
+                                               up_name = NULL;
+
+                                               free(up_needle);
+                                               up_needle = NULL;
+                                       }
+                               }
+                       }
+               }
+               closedir(directory);
+               directory = NULL;
+       } else {
+               MF_FILE_ERROR_LOG(err_buf, "open failed", root);
+       }
+
+       return candidate;
+}
+
+static gpointer __mf_search_find_thread(gpointer data)
+{
+       ms_handle_t *handle = (ms_handle_t *) data;
+       if (handle) {
+               ms_args_t *args = NULL;
+               mf_search_result_t *result = NULL;
+
+               result = handle->result;
+               args = handle->args;
+
+               if (args && result) {
+                       GList *root = NULL;
+                       GList *candidate = NULL;        /*use this list as stack*/
+                       root = args->root_path;
+                       while (root) {
+                               char *path = (char *)root->data;
+                               if (path) {
+                                       /*push root paths to stack*/
+                                       candidate = g_list_append(candidate, (gpointer) g_strdup(path));
+                               }
+                               root = g_list_next(root);
+                       }
+
+                       while (candidate) {
+                               GList *new_list = NULL;
+                               GList *list = NULL;
+                               gchar *item = NULL;
+
+                               __mf_search_thread_lock(handle);
+                               if (handle->is_stop) {
+                                       __mf_search_thread_unlock(handle);
+                                       result->is_end = TRUE;
+                                       goto MF_FIND_THREAD_EXIT;
+                               }
+                               __mf_search_thread_unlock(handle);
+
+                               list = g_list_first(candidate);
+                               /*pop one path from stack*/
+                               candidate = g_list_remove_link(candidate, list);
+                               item = (gchar *) list->data;
+                               if (item) {
+                                       ms_debug("current : %s", item);
+#if 0
+                                       __mf_search_thread_lock(handle);
+                                       if (result->current_dir) {
+                                               g_free(result->current_dir);
+                                       }
+                                       result->current_dir = g_strdup(item);
+                                       __mf_search_thread_unlock(handle);
+#endif
+                                       /*publish root change message here*/
+                                       __mf_search_tx_wait();
+                                       if (handle->is_stop) {
+                                               result->is_end = TRUE;
+                                               goto MF_FIND_THREAD_EXIT;
+                                       }
+                                       __mf_search_result_publish_msg(MF_SEARCH_PIPE_MSG_ROOT_CHANGE, item, args->user_data);
+                                       new_list = __mf_search_do_find(item, args->needle, args->option, handle);
+                                       g_free(item);
+                                       item = NULL;
+                                       g_list_free(list);
+                                       list = NULL;
+                               }
+                               /*push new paths to stack*/
+                               candidate = g_list_concat(new_list, candidate);
+                       }
+
+                       __mf_search_thread_lock(handle);
+                       result->is_end = TRUE;
+                       __mf_search_thread_unlock(handle);
+                       __mf_search_tx_wait();
+                       __mf_search_result_publish_msg(MF_SEARCH_PIPE_MSG_FINISHED, handle->result, args->user_data);
+MF_FIND_THREAD_EXIT:
+                       if (candidate) {
+                               g_list_foreach(candidate, (GFunc) g_free, NULL);
+                               g_list_free(candidate);
+                               candidate = NULL;
+                       }
+               } else {
+                       ms_error("args : %p or result : %p is not allocated yet!!", handle->args, handle->result);
+               }
+       }
+       /*g_thread_exit(NULL);*/
+       return NULL;
+}
+
+int _mf_search_init(ms_handle_t **handle)
+{
+       GMutex *lock = NULL;
+       ms_handle_t *ms_handle = NULL;
+
+       ms_debug("");
+
+       if (!handle) {
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+
+       ms_handle = g_malloc0(sizeof(ms_handle_t));
+       if (ms_handle == NULL) {
+               ms_error("Fail to allocate memory for handle ");
+               *handle = NULL;
+               return MF_SEARCH_ERROR_ALLOC;
+       }
+
+       ms_handle->state = MF_SEARCH_STATE_INIT;
+       ms_handle->is_stop = FALSE;
+
+       lock = g_mutex_new();
+       if (!lock) {
+               ms_error("Fail to create cmd_lock");
+               g_free(ms_handle);
+               return MF_SEARCH_ERROR_ALLOC;
+       }
+       ms_handle->cmd_lock = lock;
+
+       *handle = ms_handle;
+
+       ms_info("Success to make search handle : %p", ms_handle);
+       return MF_SEARCH_ERROR_NONE;
+}
+
+int _mf_search_start(ms_handle_t *handle,
+       const char **root_path,
+       unsigned int path_num,
+       const char *needle,
+       mf_search_option option,
+       void *user_data,
+       mf_search_filter_cb func,
+       int category)
+{
+       ms_args_t *args = NULL;
+       mf_search_result_t *result = NULL;
+       mf_search_option l_opt = MF_SEARCH_OPT_NONE;
+       int ret = MF_SEARCH_ERROR_NONE;
+       int i = 0;
+
+       if (!handle) {
+               ms_error("handle is NULL");
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+
+       if (handle->state != MF_SEARCH_STATE_INIT) {
+               ms_error("invaild state : %d", handle->state);
+               return MF_SEARCH_ERROR_INVAL_S;
+       }
+
+       if (!root_path || path_num < 1) {
+               ms_error("invaild arguments - root[%p], path_num[%d], needle[%p]", root_path, path_num, needle);
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+       if (!needle && !func) {
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+
+       __mf_search_cmd_lock(handle);
+
+       if (handle->args) {
+               __mf_search_args_free(handle->args);
+               handle->args = NULL;
+       }
+       handle->args = args = g_malloc0(sizeof(ms_args_t));
+       if (!args) {
+               ms_error("fail to alloc args");
+               ret = MF_SEARCH_ERROR_ALLOC;
+               goto FAIL_FREE_MEM;
+       }
+
+       if (option == MF_SEARCH_OPT_NONE) {
+               ms_warn("option is MF_SEARCH_OPT_NONE, set all option automatically ");
+               l_opt = MF_SEARCH_OPT_HIDDEN | MF_SEARCH_OPT_DIR | MF_SEARCH_OPT_FILE;
+       } else {
+               l_opt = option;
+       }
+
+       for (i = 0; i < path_num; i++) {
+               const char *path = root_path[i];
+               mf_debug("%d th root path is %s", i, path);
+#ifdef CHECK_RESTRICTED_PATH
+               if (!__mf_search_check_licet_path(path)) {
+                       ms_error("%dth root path[%s] is invaild", i, path);
+                       ret = MF_SEARCH_ERROR_INVAL_P;
+                       goto FAIL_FREE_MEM;
+               }
+#endif /*CHECK_RESTRICTED_PATH*/
+               if (g_file_test(path, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)
+                   && ((l_opt & MF_SEARCH_OPT_HIDDEN) || strncmp(path, ".", 1))
+                   && TRUE) {
+                       gchar *new_path = NULL;
+                       gssize len = strlen(path);
+
+                       if (path[len - 1] == '/') {
+                               new_path = g_strndup(path, len - 1);
+                       } else {
+                               new_path = g_strndup(path, len);
+                       }
+                       args->root_path = g_list_append(args->root_path, (gpointer) new_path);
+               } else {
+                       ms_error("Fail to test %dth root path[%s]", i, path);
+                       ret = MF_SEARCH_ERROR_INVAL_P;
+                       goto FAIL_FREE_MEM;
+               }
+       }
+       args->user_data = user_data;
+
+       if (needle) {
+               args->needle = g_utf8_normalize(needle, -1, NORMALIZE_OPTION);
+               if (!args->needle) {
+                       ms_error("fail to alloc args->needle");
+                       goto FAIL_FREE_MEM;
+               }
+       }
+       args->option = l_opt;
+       args->func = func;
+       args->category = category;
+       if (handle->result) {
+               __mf_search_result_free(handle->result);
+               handle->result = NULL;
+       }
+       handle->result = result = g_malloc0(sizeof(mf_search_result_t));
+       if (!result) {
+               ms_error("fail to alloc result");
+               ret = MF_SEARCH_ERROR_ALLOC;
+               goto FAIL_FREE_MEM;
+       }
+
+       handle->thread_mutex = g_mutex_new();
+       if (!handle->thread_mutex) {
+               ms_error("fail to alloc handle->thread_mutex");
+               ret = MF_SEARCH_ERROR_ALLOC;
+               goto FAIL_FREE_MEM;
+       }
+
+       handle->is_stop = FALSE;
+       handle->result->is_end = FALSE;
+
+       /*create thread for find item.*/
+       handle->thread_h = g_thread_create(__mf_search_find_thread, handle, TRUE, NULL);
+       if (!handle->thread_h) {
+               ms_error("fail to create __mf_search_find_thread");
+               ret = MF_SEARCH_ERROR_INTERNAL;
+               goto FAIL_FREE_MEM;
+       }
+       /*create idler for reporting find result.*/
+       handle->state = MF_SEARCH_STATE_SEARCH;
+       __mf_search_cmd_unlock(handle);
+       return MF_SEARCH_ERROR_NONE;
+
+FAIL_FREE_MEM:
+       if (args) {
+               __mf_search_args_free(args);
+               handle->args = NULL;
+       }
+
+       if (result) {
+               __mf_search_result_free(result);
+               handle->result = NULL;
+       }
+
+       if (handle->thread_mutex) {
+               g_mutex_free(handle->thread_mutex);
+               handle->thread_mutex = NULL;
+       }
+
+       if (handle->thread_h) {
+               __mf_search_thread_lock(handle);
+               handle->is_stop = TRUE;
+               __mf_search_thread_unlock(handle);
+               g_thread_join(handle->thread_h);
+               handle->thread_h = NULL;
+       }
+       __mf_search_cmd_unlock(handle);
+
+       return ret;
+}
+
+int _mf_search_stop(ms_handle_t *handle)
+{
+       ms_debug("");
+
+       if (!handle) {
+               ms_error("handle is NULL");
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+
+       if (handle->state != MF_SEARCH_STATE_SEARCH) {
+               ms_error("invaild state : %d", handle->state);
+               return MF_SEARCH_ERROR_INVAL_S;
+       }
+
+       __mf_search_cmd_lock(handle);
+
+       __mf_search_thread_lock(handle);
+       handle->is_stop = TRUE;
+       __mf_search_thread_unlock(handle);
+
+       pthread_mutex_lock(&gLockSearchMsg);
+       if (flagSearchMsg == 0) {
+               flagSearchMsg = 1;
+               pthread_cond_signal(&gCondSearchMsg);
+       }
+       pthread_mutex_unlock(&gLockSearchMsg);
+
+       if (handle->thread_h) {
+               g_thread_join(handle->thread_h);
+               handle->thread_h = NULL;
+       }
+
+       if (handle->thread_mutex) {
+               g_mutex_free(handle->thread_mutex);
+               handle->thread_mutex = NULL;
+       }
+
+       if (handle->args) {
+               __mf_search_args_free(handle->args);
+               handle->args = NULL;
+       }
+       if (handle->result) {
+               __mf_search_result_free(handle->result);
+               handle->result = NULL;
+       }
+
+       handle->state = MF_SEARCH_STATE_INIT;
+       handle->is_stop = FALSE;
+
+       __mf_search_cmd_unlock(handle);
+
+       return MF_SEARCH_ERROR_NONE;
+}
+
+void _mf_search_finalize(ms_handle_t **handle)
+{
+       ms_handle_t *ms_handle = *handle;
+
+       ms_debug("");
+
+       if (!ms_handle) {
+               ms_warn("invaild handle");
+               return;
+       }
+
+       if (ms_handle->state == MF_SEARCH_STATE_SEARCH) {
+               mf_search_stop(ms_handle);
+       }
+/*      __mf_search_cmd_lock(ms_handle); */
+/*      __mf_search_cmd_unlock(ms_handle); */
+
+       if (ms_handle->cmd_lock) {
+               g_mutex_free(ms_handle->cmd_lock);
+               ms_handle->cmd_lock = NULL;
+       }
+       g_free(ms_handle);
+       *handle = NULL;
+
+       return;
+}
+
+/*+++++++++++++++++++++++++ UTIL APIs ++++++++++++++++++++++++++++++ */
+static void __mf_search_tx_wait()
+{
+       pthread_mutex_lock(&gLockSearchMsg);
+       while (flagSearchMsg == 0) {
+               pthread_cond_wait(&gCondSearchMsg, &gLockSearchMsg);
+       }
+       flagSearchMsg = 0;
+       pthread_mutex_unlock(&gLockSearchMsg);
+}
+
+static void __mf_search_result_publish_msg(mf_search_pipe_msg_type type, void *result, void *user_data)
+{
+       struct appdata *ap = (struct appdata *)user_data;
+       /*generate message block*/
+       mf_search_pipe_msg msg;
+       memset(&msg, 0, sizeof(mf_search_pipe_msg));
+
+       msg.mf_sp_msg_type = type;
+       if (msg.mf_sp_msg_type == MF_SEARCH_PIPE_MSG_RESULT_REPORT) {
+               msg.report_result = g_strdup((gchar *) result);
+               msg.current_path = NULL;
+       } else if (msg.mf_sp_msg_type == MF_SEARCH_PIPE_MSG_ROOT_CHANGE) {
+               msg.report_result = NULL;
+               msg.current_path = g_strdup((gchar *) result);
+               mf_debug("current path is %s", msg.current_path);
+       } else if (msg.mf_sp_msg_type == MF_SEARCH_PIPE_MSG_FINISHED) {
+               msg.report_result = result;
+               msg.current_path = NULL;
+       } else {
+               msg.report_result = NULL;
+               msg.current_path = NULL;
+       }
+
+       /*write message to pipe*/
+       ecore_pipe_write(ap->mf_FileOperation.sync_pipe, &msg, sizeof(msg));
+}
+
+gchar *_mf_search_result_dir_get(mf_search_result_t * result)
+{
+       gchar *name = NULL;
+       if (result) {
+               GList *list = NULL;
+               list = result->dir_list;
+               if (list && list->data) {
+                       gchar *item = (gchar *) list->data;
+                       result->dir_list = g_list_remove(list, item);
+                       name = item;
+               }
+       }
+       return name;
+}
+
+gchar *_mf_search_result_file_get(mf_search_result_t * result)
+{
+       gchar *name = NULL;
+       if (result) {
+               GList *list = NULL;
+               list = result->file_list;
+               if (list && list->data) {
+                       gchar *item = (gchar *) list->data;
+                       result->file_list = g_list_remove(list, item);
+                       name = item;
+               }
+       }
+       return name;
+}
+
+gboolean _mf_search_result_is_end(mf_search_result_t *result)
+{
+       gboolean end = FALSE;
+       if (result) {
+               end = result->is_end;
+       }
+       return end;
+}
+
+guint _mf_search_result_total_count_get(mf_search_result_t *result)
+{
+       guint count = 0;
+       if (result) {
+               count = result->total_count;
+       }
+       return count;
+}
+
+gchar *_mf_search_result_current_dir_get(mf_search_result_t * result)
+{
+       gchar *c_dir = NULL;
+       if (result) {
+               if (result->current_dir) {
+                       c_dir = result->current_dir;
+                       result->current_dir = NULL;
+               }
+       }
+       return c_dir;
+}
diff --git a/src/common/file-operation/mf-search.c b/src/common/file-operation/mf-search.c
new file mode 100644 (file)
index 0000000..e44b557
--- /dev/null
@@ -0,0 +1,137 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <stdio.h>
+#include <dirent.h>
+#include <sys/types.h>
+#include <string.h>
+#include <glib.h>
+
+#include "mf-dlog.h"
+#include "mf-search.h"
+#include "mf-search-internal.h"
+
+
+/*+++++++++++++++++++++++ APIs +++++++++++++++++++++++*/
+
+int mf_search_init(mf_search_handle *handle)
+{
+       int ret = 0;
+       ms_handle_t *ms_handle = NULL;
+
+       if (!handle) {
+               return -1;
+       }
+       if (!g_thread_supported()) {
+               g_thread_init(NULL);
+       }
+       ret = _mf_search_init(&ms_handle);
+       if (ret < 0) {
+               ms_error("Fail to init search handle ");
+               *handle = (mf_search_handle) 0;
+               return ret;
+       }
+
+       *handle = (mf_search_handle) ms_handle;
+
+       return MF_SEARCH_ERROR_NONE;
+}
+
+int mf_search_start(mf_search_handle handle,
+                   const char **root_path,
+                   unsigned int path_num,
+                   const char *needle,
+                   mf_search_option option,
+                   void *user_data,
+                   mf_search_filter_cb func,
+                   int category)
+{
+       int ret = 0;
+       if (!handle) {
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+
+       if (!root_path || path_num < 1) {
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+
+       if (!needle && !func) {
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+       ret = _mf_search_start((ms_handle_t *) handle, root_path, path_num, needle, option, user_data, func, category);
+
+       if (ret < 0) {
+               ms_error("Fail to start search ");
+       }
+       return ret;
+}
+
+int mf_search_stop(mf_search_handle handle)
+{
+       int ret = 0;
+
+       ret = _mf_search_stop((ms_handle_t *) handle);
+       if (ret < 0) {
+               ms_error("Fail to stop search ");
+       }
+       return ret;
+}
+
+void mf_search_finalize(mf_search_handle *handle)
+{
+       _mf_search_finalize((ms_handle_t **) handle);
+       return;
+}
+
+/*+++++++++++++++++++++++ UTIL APIs +++++++++++++++++++++++*/
+
+char *mf_search_result_dir_get(mf_search_result_t *result)
+{
+       return _mf_search_result_dir_get(result);
+}
+
+char *mf_search_result_file_get(mf_search_result_t *result)
+{
+       return _mf_search_result_file_get(result);
+}
+
+int mf_search_result_is_end(mf_search_result_t *result, int *is_end)
+{
+       if (result) {
+               *is_end = _mf_search_result_is_end(result);
+       } else {
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+       return MF_SEARCH_ERROR_NONE;
+}
+
+int mf_search_result_total_count_get(mf_search_result_t *result, unsigned int *count)
+{
+       if (result) {
+               *count = _mf_search_result_total_count_get(result);
+       } else {
+               return MF_SEARCH_ERROR_INVAL_P;
+       }
+       return MF_SEARCH_ERROR_NONE;
+}
+
+char *mf_search_result_current_dir_get(mf_search_result_t *result)
+{
+       return _mf_search_result_current_dir_get(result);
+}
diff --git a/src/common/file-system/mf-file-attr.c b/src/common/file-system/mf-file-attr.c
new file mode 100644 (file)
index 0000000..35f0c37
--- /dev/null
@@ -0,0 +1,1344 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <regex.h>
+#include <sys/types.h>
+#include <media_content.h>
+#include <assert.h>
+#include <app.h>
+
+
+#include "mf-fs-util.h"
+#include "mf-util.h"
+#include "mf-ta.h"
+#include "mf-conf.h"
+#include "mf-drm.h"
+#include "mf-media-content.h"
+
+#define MF_UDATE_NUM   1000
+#define MF_PHONE_DEFAULT_LEVEL         3   /*the phone path is /opt/usr/media, it consists of opt and media two parts*/
+#define MF_MMC_DEFAULT_LEVEL           3   /*the mmc path is /opt/storage/sdcard, it consists of opt and storage and sdcard three parts*/
+typedef struct __mf_filter_s mf_filter_s;
+struct __mf_filter_s {
+       char *cond;                              /*set media type or favorite type, or other query statement*/
+       media_content_collation_e collate_type;  /*collate type*/
+       media_content_order_e sort_type;         /*sort type*/
+       char *sort_keyword;                      /*sort keyword*/
+       int offset;                              /*offset*/
+       int count;                               /*count*/
+       bool with_meta;                          /*whether get image or video info*/
+};
+#define CONDITION_LENGTH 200
+#define MF_CONDITION_IMAGE_VIDEO "(MEDIA_TYPE=0 OR MEDIA_TYPE=1)"
+
+struct _ftype_by_mime {
+       const char *mime;
+       fsFileType ftype;
+};
+
+static struct _ftype_by_mime mime_type[] = {
+       {"image/png", FILE_TYPE_IMAGE},
+       {"image/jpeg", FILE_TYPE_IMAGE},
+       {"image/gif", FILE_TYPE_IMAGE},
+       {"image/bmp", FILE_TYPE_IMAGE},
+       {"image/vnd.wap.wbmp", FILE_TYPE_IMAGE},
+
+       /*FILE_TYPE_VIDEO */
+       {"video/x-msvideo", FILE_TYPE_VIDEO},
+       {"video/mp4", FILE_TYPE_VIDEO},
+       {"video/3gpp", FILE_TYPE_VIDEO},
+       {"video/x-ms-asf", FILE_TYPE_VIDEO},
+       {"video/x-ms-wmv", FILE_TYPE_VIDEO},
+       {"video/x-matroska", FILE_TYPE_VIDEO},
+
+       /*FILE_TYPE_MUSIC */
+       {"audio/mpeg", FILE_TYPE_MUSIC},
+       {"audio/x-wav", FILE_TYPE_MUSIC},
+       {"application/x-smaf", FILE_TYPE_MUSIC},
+       {"audio/mxmf", FILE_TYPE_MUSIC},
+       {"audio/midi", FILE_TYPE_MUSIC},
+       {"audio/x-xmf", FILE_TYPE_MUSIC},
+       {"audio/x-ms-wma", FILE_TYPE_MUSIC},
+       {"audio/aac", FILE_TYPE_MUSIC},
+       {"audio/ac3", FILE_TYPE_MUSIC},
+       {"audio/ogg", FILE_TYPE_MUSIC},
+       {"audio/vorbis", FILE_TYPE_MUSIC},
+       {"audio/imelody", FILE_TYPE_MUSIC},
+       {"audio/iMelody", FILE_TYPE_MUSIC},
+       {"audio/x-rmf", FILE_TYPE_MUSIC},
+       {"application/vnd.smaf", FILE_TYPE_MUSIC},
+       {"audio/mobile-xmf", FILE_TYPE_MUSIC},
+       {"audio/mid", FILE_TYPE_MUSIC},
+       {"audio/vnd.ms-playready.media.pya", FILE_TYPE_MUSIC},
+       {"audio/imy", FILE_TYPE_MUSIC},
+       {"audio/m4a", FILE_TYPE_MUSIC},
+       {"audio/melody", FILE_TYPE_MUSIC},
+       {"audio/mmf", FILE_TYPE_MUSIC},
+       {"audio/mp3", FILE_TYPE_MUSIC},
+       {"audio/mp4", FILE_TYPE_MUSIC},
+       {"audio/MP4A-LATM", FILE_TYPE_MUSIC},
+       {"audio/mpeg3", FILE_TYPE_MUSIC},
+       {"audio/mpeg4", FILE_TYPE_MUSIC},
+       {"audio/mpg", FILE_TYPE_MUSIC},
+       {"audio/mpg3", FILE_TYPE_MUSIC},
+       {"audio/smaf", FILE_TYPE_MUSIC},
+       {"audio/sp-midi", FILE_TYPE_MUSIC},
+       {"audio/wav", FILE_TYPE_MUSIC},
+       {"audio/wave", FILE_TYPE_MUSIC},
+       {"audio/wma", FILE_TYPE_MUSIC},
+       {"audio/xmf", FILE_TYPE_MUSIC},
+       {"audio/x-mid", FILE_TYPE_MUSIC},
+       {"audio/x-midi", FILE_TYPE_MUSIC},
+       {"audio/x-mp3", FILE_TYPE_MUSIC},
+       {"audio/-mpeg", FILE_TYPE_MUSIC},
+       {"audio/x-mpeg", FILE_TYPE_MUSIC},
+       {"audio/x-mpegaudio", FILE_TYPE_MUSIC},
+       {"audio/x-mpg", FILE_TYPE_MUSIC},
+       {"audio/x-ms-asf", FILE_TYPE_MUSIC},
+       {"audio/x-wave", FILE_TYPE_MUSIC},
+
+       /*FILE_TYPE_PDF */
+       {"application/pdf", FILE_TYPE_PDF},
+
+       /*FILE_TYPE_DOC */
+       {"application/msword", FILE_TYPE_DOC},
+       {"application/vnd.openxmlformats-officedocument.wordprocessingml.document", FILE_TYPE_DOC},
+
+       /*FILE_TYPE_PPT */
+       {"application/vnd.ms-powerpoint", FILE_TYPE_PPT},
+       {"application/vnd.openxmlformats-officedocument.presentationml.presentation", FILE_TYPE_PPT},
+
+       /*FILE_TYPE_EXCEL */
+       {"application/vnd.ms-excel", FILE_TYPE_EXCEL},
+       {"application/vnd.openxmlformats-officedocument.spreadsheetml.sheet", FILE_TYPE_EXCEL},
+
+       /*FILE_TYPE_VOICE */
+       {"audio/AMR", FILE_TYPE_VOICE},
+       {"audio/AMR-WB", FILE_TYPE_VOICE},
+       {"audio/amr", FILE_TYPE_VOICE},
+       {"audio/amr-wb", FILE_TYPE_VOICE},
+       {"audio/x-amr", FILE_TYPE_VOICE},
+
+       /*FILE_TYPE_HTML */
+       {"text/html", FILE_TYPE_HTML},
+
+       /*FILE_TYPE_FLASH */
+       {"application/x-shockwave-flash", FILE_TYPE_FLASH},
+       {"video/x-flv", FILE_TYPE_FLASH},
+
+       /*FILE_TYPE_TXT */
+       {"text/plain", FILE_TYPE_TXT},
+
+       /*FILE_TYPE_RSS */
+       {"text/x-opml+xml", FILE_TYPE_RSS},
+
+       /*FILE_TYPE_JAVA */
+       {"text/vnd.sun.j2me.app-descriptor", FILE_TYPE_JAVA},
+       {"application/x-java-archive", FILE_TYPE_JAVA},
+
+       /*FILE_TYPE_ETC */
+       {NULL, FILE_TYPE_ETC},
+};
+
+static char *icon_array[FILE_TYPE_MAX] = {
+       [FILE_TYPE_DIR] = MF_ICON_FOLDER,
+       [FILE_TYPE_IMAGE] = MF_ICON_IMAGE,
+       [FILE_TYPE_VIDEO] = MF_ICON_VIDEO,
+       [FILE_TYPE_MUSIC] = MF_ICON_MUSIC,
+       [FILE_TYPE_SOUND] = MF_ICON_SOUND,
+       [FILE_TYPE_PDF] = MF_ICON_PDF,
+       [FILE_TYPE_DOC] = MF_ICON_DOC,
+       [FILE_TYPE_PPT] = MF_ICON_PPT,
+       [FILE_TYPE_EXCEL] = MF_ICON_EXCEL,
+       [FILE_TYPE_VOICE] = MF_ICON_VOICE,
+       [FILE_TYPE_HTML] = MF_ICON_HTML,
+       [FILE_TYPE_FLASH] = MF_ICON_FLASH,
+       [FILE_TYPE_TXT] = MF_ICON_TXT,
+       [FILE_TYPE_VCONTACT] = MF_ICON_VCONTACT,
+       [FILE_TYPE_VCALENDAR] = MF_ICON_VCALENDAR,
+       [FILE_TYPE_VNOTE] = MF_ICON_VNOTE,
+       [FILE_TYPE_RSS] = MF_ICON_RSS,
+       [FILE_TYPE_JAVA] = MF_ICON_JAVA,
+};
+
+static char *thumbnail_array[FILE_TYPE_MAX] = {
+       [FILE_TYPE_DIR] = MF_ICON_THUMBNAIL_FOLDER,
+       [FILE_TYPE_IMAGE] = MF_ICON_IMAGE,
+       [FILE_TYPE_VIDEO] = MF_ICON_THUMBNAIL_VIDEO,
+       [FILE_TYPE_MUSIC] = MF_ICON_THUMBNAIL_MUSIC,
+       [FILE_TYPE_SOUND] = MF_ICON_THUMBNAIL_RINGTONE,
+       [FILE_TYPE_PDF] = MF_ICON_THUMBNAIL_PDF,
+       [FILE_TYPE_DOC] = MF_ICON_THUMBNAIL_DOC,
+       [FILE_TYPE_PPT] = MF_ICON_THUMBNAIL_PPT,
+       [FILE_TYPE_EXCEL] = MF_ICON_THUMBNAIL_EXCEL,
+       [FILE_TYPE_VOICE] = MF_ICON_VOICE,
+       [FILE_TYPE_HTML] = MF_ICON_THUMBNAIL_HTML,
+       [FILE_TYPE_FLASH] = MF_ICON_THUMBNAIL_FLASH,
+       [FILE_TYPE_TXT] = MF_ICON_THUMBNAIL_TXT,
+       [FILE_TYPE_VCONTACT] = MF_ICON_VCONTACT,
+       [FILE_TYPE_VCALENDAR] = MF_ICON_VCALENDAR,
+       [FILE_TYPE_VNOTE] = MF_ICON_VNOTE,
+       [FILE_TYPE_RSS] = MF_ICON_THUMBNAIL_RSS,
+       [FILE_TYPE_JAVA] = MF_ICON_JAVA,
+};
+
+/*********************
+**Function name:       __mf_file_attr_get_category_by_file_ext
+**Parameter:           const char* file_ext
+**Return value:                fsFileType
+**
+**Action:
+**     Get file category by extention
+**
+*********************/
+static fsFileType __mf_file_attr_get_category_by_file_ext(const char *file_ext, const char *fullpath)
+{
+       int i = 0;
+
+       if (file_ext == NULL) {
+               return 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 FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("AMR", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VOICE;
+               }
+               if (strcasecmp("AWB", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VOICE;
+               }
+               if (strcasecmp("AAC", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MUSIC;
+               }
+               if (strcasecmp("AVI", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("AAC", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MUSIC;
+               }
+
+               break;
+       case 'b':
+       case 'B':
+               if (strcasecmp("BMP", &file_ext[i]) == 0) {
+                       return FILE_TYPE_IMAGE;
+               }
+               break;
+       case 'd':
+       case 'D':
+               if (strcasecmp("DOC", &file_ext[i]) == 0) {
+                       return FILE_TYPE_DOC;
+               }
+               if (strcasecmp("DOCX", &file_ext[i]) == 0) {
+                       return FILE_TYPE_DOC;
+               }
+               if (strcasecmp("DIVX", &file_ext[i]) == 0) {
+                       if (mf_drm_is_drm_file(fullpath) == 0) {
+                               return FILE_TYPE_DRM;
+                       } else {
+                               return FILE_TYPE_VIDEO;
+                       }
+               }
+               if (strcasecmp("DCF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_DRM;
+               }
+               break;
+       case 'g':
+       case 'G':
+               if (strcasecmp("GIF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_IMAGE;
+               }
+               if (strcasecmp("G72", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MUSIC;
+               }
+               break;
+       case 'h':
+       case 'H':
+               if (strcasecmp("H263", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MUSIC;
+               }
+               if (strcasecmp("HTML", &file_ext[i]) == 0) {
+                       return FILE_TYPE_HTML;
+               }
+               if (strcasecmp("HTM", &file_ext[i]) == 0) {
+                       return FILE_TYPE_HTML;
+               }
+               break;
+       case 'i':
+       case 'I':
+               if (strcasecmp("IMY", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("IPK", &file_ext[i]) == 0) {
+                       return FILE_TYPE_APP;
+               }
+               break;
+       case 'j':
+       case 'J':
+               if (strcasecmp("JAD", &file_ext[i]) == 0) {
+                       return FILE_TYPE_JAVA;
+               }
+               if (strcasecmp("JAR", &file_ext[i]) == 0) {
+                       return FILE_TYPE_JAVA;
+               }
+
+               if (strcasecmp("JPG", &file_ext[i]) == 0) {
+                       return FILE_TYPE_IMAGE;
+               }
+               if (strcasecmp("JPEG", &file_ext[i]) == 0) {
+                       return FILE_TYPE_IMAGE;
+               }
+               if (strcasecmp("JPE", &file_ext[i]) == 0) {
+                       return FILE_TYPE_IMAGE;
+               }
+               break;
+       case 'm':
+       case 'M':
+               if (strcasecmp("MMF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("MP3", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MUSIC;
+               }
+               if (strcasecmp("MID", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("MIDI", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("MP4", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("MPG", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("MPEG", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("M4A", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MUSIC;
+               }
+               if (strcasecmp("M3G", &file_ext[i]) == 0) {
+                       return FILE_TYPE_FLASH;
+               }
+               if (strcasecmp("MXMF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("MKV", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("MKA", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MUSIC;
+               }
+               break;
+       case 'o':
+       case 'O':
+               if (strcasecmp("opml", &file_ext[i]) == 0) {
+                       return FILE_TYPE_RSS;
+               }
+               break;
+       case 'p':
+       case 'P':
+               if (strcasecmp("PNG", &file_ext[i]) == 0) {
+                       return FILE_TYPE_IMAGE;
+               }
+               if (strcasecmp("PJPEG", &file_ext[i]) == 0) {
+                       return FILE_TYPE_IMAGE;
+               }
+               if (strcasecmp("PDF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_PDF;
+               }
+               if (strcasecmp("PPT", &file_ext[i]) == 0) {
+                       return FILE_TYPE_PPT;
+               }
+               if (strcasecmp("PPTX", &file_ext[i]) == 0) {
+                       return FILE_TYPE_PPT;
+               }
+               if (strcasecmp("PEM", &file_ext[i]) == 0) {
+                       return FILE_TYPE_CERTIFICATION;
+               }
+               break;
+       case 'r':
+       case 'R':
+               break;
+       case 's':
+       case 'S':
+               if (strcasecmp("SDP", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("SPM", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("SMP", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("SPF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("SWF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_FLASH;
+               }
+               if (strcasecmp("SCN", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MOVIE_MAKER;
+               }
+               if (strcasecmp("SVG", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SVG;
+               }
+               if (strcasecmp("SVGZ", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SVG;
+               }
+               break;
+       case 't':
+       case 'T':
+               if (strcasecmp("TXT", &file_ext[i]) == 0) {
+                       return FILE_TYPE_TXT;
+               }
+               if (strcasecmp("THM", &file_ext[i]) == 0) {
+                       return FILE_TYPE_THEME;
+               }
+               break;
+       case 'v':
+       case 'V':
+               if (strcasecmp("VCF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VCONTACT;
+               }
+               if (strcasecmp("VCS", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VCALENDAR;
+               }
+               if (strcasecmp("VNT", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VNOTE;
+               }
+               if (strcasecmp("VBM", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VBOOKMARK;
+               }
+               break;
+       case 'w':
+       case 'W':
+               if (strcasecmp("WAV", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("WBMP", &file_ext[i]) == 0) {
+                       return FILE_TYPE_IMAGE;
+               }
+               if (strcasecmp("WGT", &file_ext[i]) == 0) {
+                       return FILE_TYPE_WGT;
+               }
+               if (strcasecmp("WMA", &file_ext[i]) == 0) {
+                       return FILE_TYPE_MUSIC;
+               }
+               if (strcasecmp("WMV", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               break;
+       case 'x':
+       case 'X':
+               if (strcasecmp("XLS", &file_ext[i]) == 0) {
+                       return FILE_TYPE_EXCEL;
+               }
+               if (strcasecmp("XLSX", &file_ext[i]) == 0) {
+                       return FILE_TYPE_EXCEL;
+               }
+               if (strcasecmp("XMF", &file_ext[i]) == 0) {
+                       return FILE_TYPE_SOUND;
+               }
+               if (strcasecmp("XHTML", &file_ext[i]) == 0) {
+                       return FILE_TYPE_HTML;
+               }
+               break;
+       case '3':
+               if (strcasecmp("3GP", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("3GPP", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               if (strcasecmp("3G2", &file_ext[i]) == 0) {
+                       return FILE_TYPE_VIDEO;
+               }
+               break;
+       }
+
+       return FILE_TYPE_ETC;
+}
+
+/*********************
+**Function name:       mf_get_category
+**Parameter:
+**     const char* filepath:   file fullpath
+**     fsFileType *category:   output parameter of category
+**Return value:
+**     error code
+**
+**Action:
+**     Get file category by file full path
+**
+*********************/
+int mf_file_attr_get_file_category(const char *filepath, fsFileType * category)
+{
+       int i = 0;
+       int flag = 0;
+
+       if (mf_file_attr_is_dir(filepath)) {
+               *category = FILE_TYPE_DIR;
+               return MYFILE_ERR_NONE;
+       }
+
+       const char *filename = NULL;
+       filename = ecore_file_file_get(filepath);
+       if (filename == NULL) {
+               *category = FILE_TYPE_NONE;
+               return MYFILE_ERR_SRC_ARG_INVALID;
+       }
+       char *file_ext = NULL;
+       /*ToDo: error file name like the last letter is "." */
+       for (i = strlen(filename); i >= 0; i--) {
+               if (filename[i] == '.') {
+                       file_ext = g_strdup(&filename[i + 1]);
+                       flag = 1;
+                       break;
+               }
+
+               if (filename[i] == '/') {
+                       flag = 0;
+                       break;
+               }
+       }
+
+       if (flag == 1) {
+               *category = __mf_file_attr_get_category_by_file_ext(file_ext, filepath);
+               SAFE_FREE_CHAR(file_ext);
+               return MYFILE_ERR_NONE;
+       } else {
+               *category = FILE_TYPE_NONE;
+               SAFE_FREE_CHAR(file_ext);
+               return MYFILE_ERR_GET_CATEGORY_FAIL;
+       }
+}
+
+/*********************
+**Function name:       mf_file_attr_get_file_stat
+**Parameter:
+**     const char* filename:   file name
+**     fsNodeInfo **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_file_attr_get_file_stat(const char *filename, fsNodeInfo **node)
+{
+       struct stat statbuf;
+
+       mf_retvm_if(filename == NULL, MYFILE_ERR_INVALID_ARG, "filename is null");
+       mf_retvm_if(node == NULL, MYFILE_ERR_INVALID_ARG, "node is null");
+
+       if (stat(filename, &statbuf) == -1) {
+               return MYFILE_ERR_GET_STAT_FAIL;
+       }
+       time_t tempdate = statbuf.st_mtime;
+       (*node)->size = statbuf.st_size;
+       (*node)->date = (UDate) tempdate * MF_UDATE_NUM;
+
+       return MYFILE_ERR_NONE;
+}
+
+/*********************
+**Function name:       mf_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_file_attr_is_dir(const char *filepath)
+{
+       return ecore_file_is_dir(filepath);
+}
+
+/*********************
+**Function name:       mf_file_attr_get_store_type_by_full
+**Parameter:
+**     const char* filepath:   file full path
+**     MF_STORAGE *store_type:         output parameter of storage type
+**Return value:
+**     error code
+**
+**Action:
+**     Get file storage type by file path
+**
+*********************/
+int mf_file_attr_get_store_type_by_full(const char *filepath, MF_STORAGE * 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 = MYFILE_PHONE;
+               return MYFILE_ERR_NONE;
+       } else if (strncmp(filepath, MEMORY_FOLDER, strlen(MEMORY_FOLDER)) == 0) {
+               *store_type = MYFILE_MMC;
+               return MYFILE_ERR_NONE;
+       } else {
+               *store_type = MYFILE_NONE;
+               return MYFILE_ERR_STORAGE_TYPE_ERROR;
+       }
+}
+
+
+/*********************
+**Function name:       mf_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_file_attr_get_file_ext(const char *filepath, char **file_ext)
+{
+       assert(filepath);
+       assert(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) {
+               *file_ext = g_strdup(pdot + 1);
+               return MYFILE_ERR_NONE;
+       } else {
+               return MYFILE_ERR_EXT_GET_ERROR;
+       }
+}
+
+/*********************
+**Function name:       mf_file_attr_is_duplicated_name
+**Parameter:
+**     const char* dir:        dir which we need to check
+**     const char *name:       the file/dir name we need to check
+**
+**Return value:
+**     -23 if the name is already existed
+**     0       if the name is not existed
+**
+**Action:
+**     check if the name is existed in the specified dir
+**
+*********************/
+int mf_file_attr_is_duplicated_name(const char *dir, const char *name)
+{
+
+       char *file_path = g_strconcat(dir, "/", name, NULL);
+       if (ecore_file_exists(file_path)) {
+               SAFE_FREE_CHAR(file_path);
+               return MYFILE_ERR_DUPLICATED_NAME;
+       } else {
+               SAFE_FREE_CHAR(file_path);
+               return MYFILE_ERR_NONE;
+       }
+}
+
+/*********************
+**Function name:       mf_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
+**
+*********************/
+int mf_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(&reg, pattern, cflags);
+
+       if (z != 0) {
+               regerror(z, &reg, ebuf, sizeof(ebuf));
+               fprintf(stderr, "%s: pattern '%s' \n", ebuf, pattern);
+               return MYFILE_ERR_INVALID_FILE_NAME;
+       }
+
+       z = regexec(&reg, filename, nmatch, pm, 0);
+       if (z == REG_NOMATCH) {
+               ret = MYFILE_ERR_NONE;
+       } else {
+               ret = MYFILE_ERR_INVALID_FILE_NAME;
+       }
+       regfree(&reg);
+       return ret;
+}
+
+/*********************
+**Function name:       mf_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_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_file_attr_is_valid_name(file_name);
+
+       if (result != MYFILE_ERR_NONE) {
+               mf_error("Is NOT Valid dir path name");
+       }
+
+       return result;
+}
+
+/*********************
+**Function name:       mf_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_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_file_attr_is_valid_name(file_name);
+       if (result != MYFILE_ERR_NONE) {
+               mf_error("Is NOT Valid dir path name");
+       }
+
+       return result;
+}
+
+/*********************
+**Function name:       mf_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_file_attr_get_parent_path(const char *path, char **parent_path)
+{
+       assert(path);
+       assert(parent_path);
+       mf_debug("Path :::: [%s]", path);
+
+       *parent_path = g_strdup(path);
+       if (*parent_path == NULL)
+               return MYFILE_ERR_ALLOCATE_MEMORY_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_file_attr_get_logical_path_by_full
+**Parameter:
+**     const char *full_path:  the full path
+**     char* path:                             logic path of output parameter
+**
+**Return value:
+**     error code
+**
+**Action:
+**     get logic path by full path
+**
+*********************/
+int mf_file_attr_get_logical_path_by_full(const char *full_path, char **path)
+{
+       assert(full_path);
+       assert(path);
+       MF_STORAGE store_type = 0;
+       int root_len = 0;
+       int error_code = 0;
+
+       error_code = mf_file_attr_get_store_type_by_full(full_path, &store_type);
+
+       *path = g_strdup(full_path);
+       if (*path == NULL) {
+               return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+       }
+
+       memset(*path, 0, strlen(*path));
+       switch (store_type) {
+       case MYFILE_PHONE:
+               root_len = strlen(PHONE_FOLDER);
+               break;
+       case MYFILE_MMC:
+               root_len = strlen(MEMORY_FOLDER);
+               break;
+       default:
+               return MYFILE_ERR_STORAGE_TYPE_ERROR;
+       }
+
+       /*
+       **      *path has the same length with full_path
+       **      strlen(*path) is 0 since the memset called
+       **      we use length of full_path to reprecent the *path's
+       */
+       g_strlcpy(*path, full_path + root_len, strlen(full_path));
+       if (strlen(*path) == 0) {
+               SAFE_FREE_CHAR(*path);
+               *path = g_strdup("/");
+       }
+
+       return MYFILE_ERR_NONE;
+}
+
+
+typedef struct __mf_transfer_data_s mf_transfer_data_s;
+
+struct __mf_transfer_data_s {
+       const char *file_path;
+       char *thumbnail_path;
+       media_info_h *media;
+};
+
+static bool __mf_local_data_get_media_thumbnail_cb(media_info_h media, void *data)
+{
+       mf_retvm_if(data == NULL, -1, "filter is NULL");
+       mf_transfer_data_s *tmp_data = (mf_transfer_data_s *)data;
+
+
+       media_info_clone(tmp_data->media, media);
+       media_info_get_thumbnail_path(media, &(tmp_data->thumbnail_path));
+
+       return false;
+}
+
+int mf_file_attr_get_file_icon(const char *file_path, int *error_code, int view_type, const char **thumbnail, media_info_h *media_info)
+{
+       int index = 0;
+       const char *icon_path = DEFAULT_ICON;
+       fsFileType ftype = FILE_TYPE_NONE;
+       const char *mime = NULL;
+       int thumbnail_type = MF_THUMBNAIL_TYPE_DEFAULT;
+       mf_retvm_if(file_path == NULL, thumbnail_type, "file_path is NULL");
+
+       mime = efreet_mime_type_get(file_path);
+       if (mime == NULL) {
+               mf_warnig("Fail to efreet_mime_type_get(), set etc icon");
+
+               return thumbnail_type;
+       }
+
+       for (index = 0; mime_type[index].mime; index++) {
+               if (strncmp(mime, mime_type[index].mime, strlen(mime)) == 0) {
+                       ftype = mime_type[index].ftype;
+                       break;
+               }
+       }
+
+       if (view_type == 0) {
+               icon_path = mf_file_attr_get_default_icon_by_type(ftype);
+               thumbnail_type = MF_THUMBNAIL_TYPE_DEFAULT;
+       } else {
+               icon_path = mf_file_attr_get_default_thumbnail_by_type(ftype);
+               thumbnail_type = MF_THUMBNAIL_TYPE_DEFAULT;
+       }
+
+       switch (ftype) {
+       case FILE_TYPE_IMAGE:
+       case FILE_TYPE_VIDEO:
+               {
+
+                       int err = 0;
+                       mf_transfer_data_s tmp_data;
+                       memset(&tmp_data,0x00,sizeof(mf_transfer_data_s));
+                       tmp_data.file_path = file_path;
+                       tmp_data.media = media_info;
+                       //err = mf_file_attr_get_thumbnail(&tmp_data);
+                       char *condition = NULL;
+                       condition = g_strdup_printf("%s and MEDIA_PATH=\"%s\"", MF_CONDITION_IMAGE_VIDEO, tmp_data.file_path);
+                       err = mf_media_content_data_get(&tmp_data, condition, __mf_local_data_get_media_thumbnail_cb);
+                       if (err == 0) {
+                               icon_path = g_strdup(tmp_data.thumbnail_path);
+                               thumbnail_type = MF_THUMBNAIL_TYPE_THUMBNAIL;
+                       } else {
+                               icon_path = NULL;
+                               if (error_code)
+                                       *error_code = err;
+                       }
+                       SAFE_FREE_CHAR(tmp_data.thumbnail_path);
+               }
+               break;
+       default:
+               break;
+       }
+
+       *thumbnail = icon_path;
+       return thumbnail_type;
+}
+
+fsFileType mf_file_attr_get_file_type(const char *mime)
+{
+       int index;
+       fsFileType ftype = FILE_TYPE_NONE;
+       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;
+
+}
+
+fsFileType mf_file_attr_get_file_type_by_mime(const char *file_path)
+{
+       int index;
+       fsFileType ftype = FILE_TYPE_NONE;
+       const char *mime = NULL;
+
+       mime = efreet_mime_type_get(file_path);
+       if (mime == NULL) {
+               mf_warnig("Fail to efreet_mime_type_get(), 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;
+}
+
+const char *mf_file_attr_get_default_icon_by_type(fsFileType ftype)
+{
+       const char *icon_path = DEFAULT_ICON;
+
+       if (icon_array[ftype]) {
+               icon_path = icon_array[ftype];
+       } else {
+               icon_path = DEFAULT_ICON;
+       }
+
+       return icon_path;
+}
+
+const char *mf_file_attr_get_default_thumbnail_by_type(fsFileType ftype)
+{
+
+       const char *thumbnail_path = DEFAULT_ICON;
+
+       if (thumbnail_array[ftype]) {
+               thumbnail_path = thumbnail_array[ftype];
+       } else {
+               thumbnail_path = DEFAULT_ICON;
+       }
+
+       return thumbnail_path;
+}
+/*********************
+**Function name:       mf_file_attr_get_path_level
+**Parameter:
+**     const char *file_fullpath:      the full path
+**     int* level:                                     level which the specified path under(this is output parameter)
+**
+**Return value:
+**     error code
+**
+**Action:
+**     get level of specified path under
+**
+*********************/
+int mf_file_attr_get_path_level(const char *fullpath, int *level)
+{
+       if (fullpath == NULL) {
+               return MYFILE_ERR_SRC_ARG_INVALID;
+       }
+
+       if (mf_file_attr_is_right_dir_path(fullpath) != 0) {
+               return MYFILE_ERR_INVALID_PATH;
+       }
+
+       MF_STORAGE storage_t = 0;
+       int start_level = 0;
+       int error_code = mf_file_attr_get_store_type_by_full(fullpath, &storage_t);
+       if (error_code != 0) {
+               return error_code;
+       }
+
+       if (storage_t == MYFILE_PHONE) {
+               start_level = MF_PHONE_DEFAULT_LEVEL;
+       } else if (storage_t == MYFILE_MMC) {
+               start_level = MF_MMC_DEFAULT_LEVEL;
+       }
+
+       char *temp = strdup(fullpath);
+       if (temp == NULL) {
+               return MYFILE_ERR_UNKNOWN_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_UNKNOWN_ERROR;
+       }
+       for (params = result; *params; params++) {
+               mf_debug("*params is [%s]", *params);
+               count++;
+       }
+
+       g_strfreev(result);
+       *level = count - start_level - 1;
+       mf_debug("cout is [%d] start level is [%d]", count, start_level);
+       free(temp);
+       return MYFILE_ERR_NONE;
+
+}
+
+/*********************
+**Function name:       mf_file_attr_is_in_system_folder
+**Parameter:
+**     const char *file_fullpath:      the full path
+**     int* level:                                     level which the specified path under
+**     bool* result:                           output parameter for the result
+**
+**Return value:
+**     error code
+**
+**Action:
+**     check if the specified path is under system folder
+**
+*********************/
+int mf_file_attr_is_in_system_folder(char *fullpath, int level, bool * result)
+{
+       if (fullpath == NULL) {
+               return MYFILE_ERR_SRC_ARG_INVALID;
+       }
+
+       MF_STORAGE storage_t = 0;
+       int error_code = mf_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 = NULL;
+       error_code = mf_file_attr_get_parent_path(fullpath, &parent_path);
+
+       if (error_code != 0) {
+               return error_code;
+       }
+
+       if (storage_t == MYFILE_PHONE || storage_t == MYFILE_MMC) {
+               if (level == 1) {
+                       if ((strlen(name) == strlen(DEFAULT_FOLDER_CAMERA_SHOTS)) && strcmp(name, DEFAULT_FOLDER_CAMERA_SHOTS) == 0) {
+                               *result = true;
+                       } else if ((strlen(name) == strlen(DEFAULT_FOLDER_IMAGE)) && strcmp(name, DEFAULT_FOLDER_IMAGE) == 0) {
+                               *result = true;
+                       } else if ((strlen(name) == strlen(DEFAULT_FOLDER_VIDEO)) && strcmp(name, DEFAULT_FOLDER_VIDEO) == 0) {
+                               *result = true;
+                       } else if ((strlen(name) == strlen(DEFAULT_FOLDER_MUSIC)) && strcmp(name, DEFAULT_FOLDER_MUSIC) == 0) {
+                               *result = true;
+                       } else if ((strlen(name) == strlen(DEFAULT_FOLDER_DOWNLOADS)) && strcmp(name, DEFAULT_FOLDER_DOWNLOADS) == 0) {
+                               *result = true;
+                       } else {
+                               if (storage_t == MYFILE_PHONE) {
+                                       if ((strlen(name) == strlen(DEFAULT_FOLDER_ALERTS_AND_RINGTONES)) && strcmp(name, DEFAULT_FOLDER_ALERTS_AND_RINGTONES) == 0) {
+                                               *result = true;
+                                       } else if ((strlen(name) == strlen(DEFAULT_FOLDER_BOOKMARK)) && strcmp(name, DEFAULT_FOLDER_BOOKMARK) == 0) {
+                                               *result = true;
+                                       } else if ((strlen(name) == strlen(DEFAULT_FOLDER_RSS)) && strcmp(name, DEFAULT_FOLDER_RSS) == 0) {
+                                               *result = true;
+                                       } else {
+                                               *result = false;
+                                       }
+                               } else {
+                                       *result = false;
+                               }
+                       }
+
+               } else if (level == 2) {
+                       const char *parent_name = NULL;
+                       parent_name = ecore_file_file_get(parent_path);
+                       if (storage_t == MYFILE_PHONE) {
+                               if (!g_strcmp0(parent_name, DEFAULT_FOLDER_IMAGE) && !g_strcmp0(name, SUB_FODER_WALLPAPER)) {
+                                       *result = true;
+                               } else if (!g_strcmp0(parent_name, DEFAULT_FOLDER_ALERTS_AND_RINGTONES)
+                                          && (!g_strcmp0(name, SUB_FODER_ALERTS) || !g_strcmp0(name, SUB_FODER_RINGTONES))) {
+                                       *result = true;
+                               } else if (!g_strcmp0(parent_name, DEFAULT_FOLDER_MUSIC)
+                                          && (!g_strcmp0(name, SUB_FODER_FM) || !g_strcmp0(name, SUB_FODER_VOICE_RECORD))) {
+                                       *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;
+}
+
+/*********************
+**Function name:       mf_file_attr_is_system_dir
+**Parameter:
+**     const char *file_fullpath:      the full path
+**     bool* result:                           output parameter for the result
+**
+**Return value:
+**     error code
+**
+**Action:
+**     check if the specified path is system folder
+**
+*********************/
+int mf_file_attr_is_system_dir(char *fullpath, bool * result)
+{
+       if (fullpath == NULL) {
+               mf_error("source argument invalid");
+               return MYFILE_ERR_SRC_ARG_INVALID;
+       }
+
+       if (mf_file_attr_is_dir(fullpath) == 0) {
+               mf_error("source is not exist");
+               return MYFILE_ERR_SRC_NOT_EXIST;
+       }
+
+       int level = 0;
+       int error_code = 0;
+
+       error_code = mf_file_attr_get_path_level(fullpath, &level);
+       if (error_code != 0) {
+               mf_error("Fail to get path level");
+               return error_code;
+       }
+
+       if (level >= 3 || level <= 0) {
+               *result = false;
+               mf_error("Path Level is wrong");
+               return MYFILE_ERR_NONE;
+       }
+       error_code = mf_file_attr_is_in_system_folder(fullpath, level, result);
+
+       if (error_code != 0) {
+               mf_error("Fail .. is in system folder err :: %d", error_code);
+               return error_code;
+       }
+
+       return MYFILE_ERR_NONE;
+}
+
+#ifdef MYFILE_USB_OTG
+int mf_file_attr_is_disk_link(const char *fullpath, bool *result)
+{
+       if (fullpath == NULL) {
+               mf_error("source argument invalid");
+               return MYFILE_ERR_SRC_ARG_INVALID;
+       }
+       assert(result);
+       if (mf_file_attr_is_dir(fullpath) == 0) {
+               mf_error("source is not exist");
+               return MYFILE_ERR_SRC_NOT_EXIST;
+       }
+
+       int error_code = 0;
+       char *parent_path = NULL;
+       *result = false;
+       error_code = mf_file_attr_get_parent_path(fullpath, &parent_path);
+
+       if(error_code == 0){
+               if(g_strcmp0(parent_path, OTG_FOLDER) == 0)
+                       *result = true;
+               else
+                       *result = false;
+       }
+       SAFE_FREE_CHAR(parent_path);
+       return error_code;
+}
+#endif
+
+#define MF_ROUND_D(x, dig) (floor((x)*pow(10, dig+1)+0.5)/pow(10, dig+1))
+void mf_file_attr_get_file_size_info(char **file_size, fsNodeInfo *pNode)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(file_size == NULL, "file_size is NULL");
+       mf_retm_if(pNode == NULL, "pNode is NULL");
+       unsigned long long original_size = 0;
+       double size = 0;
+       int index = 0;
+       int len = 0;
+
+       original_size = pNode->size;
+       size = (double)original_size;
+
+       while (size >= MYFILE_BASIC_SIZE) {
+               size /= MYFILE_BASIC_SIZE;
+               index++;
+       }
+
+       if (index == SIZE_BYTE) {
+               snprintf(NULL, 0, "%llu B%n", original_size, &len);
+       } else {
+               size = MF_ROUND_D(size, 1);
+               snprintf(NULL, 0, "%0.1lf XB%n", size, &len);
+       }
+
+       if (len <= 0) {
+               *file_size = NULL;
+               return;
+       }
+       len += 1;
+       *file_size = (char *)calloc(len, sizeof(char));
+       if (*file_size == NULL) {
+               return;
+
+       }
+
+       if (index == SIZE_BYTE) {
+               snprintf(*file_size, len, "%llu B", original_size);
+       } else {
+               if (index == SIZE_KB) {
+                       snprintf(*file_size, len, "%0.1lf KB", size);
+               } else if (index == SIZE_MB) {
+                       snprintf(*file_size, len, "%0.1lf MB", size);
+               } else if (index == SIZE_GB) {
+                       snprintf(*file_size, len, "%0.1lf GB", size);
+               } else {
+                       free(*file_size);
+                       *file_size = NULL;
+               }
+       }
+       MF_TRACE_END;
+       return;
+}
diff --git a/src/common/file-system/mf-fs-oper.c b/src/common/file-system/mf-fs-oper.c
new file mode 100644 (file)
index 0000000..7c3d213
--- /dev/null
@@ -0,0 +1,803 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <libgen.h>
+#include <glib.h>
+#include <errno.h>
+
+#include "mf-fs-util.h"
+#include "mf-util.h"
+
+static mode_t default_mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH;
+static int __mf_fs_oper_sort_by_date_cb_O2R(const void *d1, const void *d2);
+static int __mf_fs_oper_sort_by_name_cb_A2Z(const void *d1, const void *d2);
+static int __mf_fs_oper_sort_by_type_cb_A2Z(const void *d1, const void *d2);
+static int __mf_fs_oper_sort_by_size_cb_S2L(const void *d1, const void *d2);
+static int __mf_fs_oper_sort_by_name_cb_Z2A(const void *d1, const void *d2);
+static int __mf_fs_oper_sort_by_date_cb_R2O(const void *d1, const void *d2);
+static int __mf_fs_oper_sort_by_type_cb_Z2A(const void *d1, const void *d2);
+static int __mf_fs_oper_sort_by_size_cb_L2S(const void *d1, const void *d2);
+
+/*********************
+**Function name:       mf_fs_oper_print_node
+**Parameter:
+**     fsNodeInfo *pNode:      the file system node information need to print
+**
+**Return value:
+**     void
+**
+**Action:
+**     printf the file system node information for debug
+**
+*********************/
+void mf_fs_oper_print_node(fsNodeInfo *pNode)
+{
+       if (pNode) {
+               /*mf_debug("path is [%s]\nname is [%s]\ndate is [%s]\ntype is [%d]\nsize is [%u]\nextension is [%s]\n\n",pNode->path,
+                  pNode->name,asctime(gmtime(&(pNode->date))),pNode->type,pNode->size, pNode->ext);
+                */
+       }
+}
+
+/*********************
+**Function name:       mf_fs_oper_get_file
+**Parameter:
+**     const char *path:       full path to get file name
+**
+**Return value:
+**     const char*:    file name
+**
+**Action:
+**     get file name from full path
+**
+*********************/
+static const char *mf_fs_oper_get_file(const char *path)
+{
+       char *result = NULL;
+
+       if (!path) {
+               return NULL;
+       }
+       if ((result = strrchr(path, '/'))) {
+               result++;
+       } else {
+               result = (char *)path;
+       }
+       return result;
+}
+
+/*********************
+**Function name:       mf_fs_oper_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
+**
+*********************/
+int mf_fs_oper_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_DST_ARG_VALID) && (dst == NULL)) {
+               return MYFILE_ERR_DST_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_DST_EXIST) && (!ecore_file_exists(dst))) {
+               return MYFILE_ERR_DST_NOT_EXIST;
+       }
+
+       if (check_option & MF_ERROR_CHECK_SRC_PATH_VALID) {
+               if (!ecore_file_is_dir(src)) {
+                       if (mf_file_attr_is_right_file_path(src)) {
+                               return MYFILE_ERR_INVALID_FILE_PATH;
+                       }
+               } else {
+                       if (mf_file_attr_is_right_dir_path(src)) {
+                               return MYFILE_ERR_INVALID_DIR_PATH;
+                       }
+               }
+       }
+       if (check_option & MF_ERROR_CHECK_DST_PATH_VALID) {
+               if (!ecore_file_is_dir(dst)) {
+                       int ret = mf_file_attr_is_right_file_path(dst);
+                       if (ret != 0) {
+                               return ret;
+                       }
+               } else {
+                       int ret = mf_file_attr_is_right_dir_path(dst);
+                       if (ret != 0) {
+                               return ret;
+                       }
+               }
+       }
+
+       if (check_option & MF_ERROR_CHECK_SRC_PARENT_DIR_EXIST) {
+               char *parent_path = NULL;
+               if (mf_file_attr_get_parent_path(src, &parent_path)) {
+                               if (!ecore_file_exists(parent_path)) {
+                               SAFE_FREE_CHAR(parent_path);
+                                       return MYFILE_ERR_DIR_NOT_FOUND;
+                               }
+                       }
+               SAFE_FREE_CHAR(parent_path);
+       }
+
+       if (check_option & MF_ERROR_CHECK_DST_PARENT_DIR_EXIST) {
+               char *parent_path = NULL;
+               if (mf_file_attr_get_parent_path(dst, &parent_path)) {
+                               if (!ecore_file_exists(parent_path)) {
+                               SAFE_FREE_CHAR(parent_path);
+                                       return MYFILE_ERR_DIR_NOT_FOUND;
+                               }
+                       }
+               SAFE_FREE_CHAR(parent_path);
+       }
+
+       if (check_option & MF_ERROR_CHECK_DUPLICATED) {
+               char *parent_path = NULL;
+
+               if (!mf_file_attr_get_parent_path(dst, &parent_path)) {
+                       if (mf_file_attr_is_duplicated_name(parent_path, mf_fs_oper_get_file(dst))) {
+                               SAFE_FREE_CHAR(parent_path);
+                               return MYFILE_ERR_DUPLICATED_NAME;
+                       }
+                       SAFE_FREE_CHAR(parent_path);
+               } else {
+                       SAFE_FREE_CHAR(parent_path);
+                       return MYFILE_ERR_GET_PARENT_PATH_FAIL;
+               }
+       }
+
+       return MYFILE_ERR_NONE;
+}
+
+/*********************
+**Function name:       mf_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_fs_oper_read_dir(const char *path, Eina_List ** dir_list, Eina_List ** file_list)
+{
+       DIR *pDir = NULL;
+       struct dirent *ent;
+
+       mf_retvm_if(path == NULL, MYFILE_ERR_INVALID_ARG, "path is null");
+       mf_retvm_if(dir_list == NULL, MYFILE_ERR_INVALID_ARG, "dir_list is null");
+       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_fs_oper_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;
+               fsNodeInfo *pNode = NULL;
+
+               if (strncmp(ent->d_name, ".", strlen(".")) == 0 || strncmp(ent->d_name, "..", strlen("..")) == 0) {
+                       continue;
+               }
+
+               if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
+                       continue;
+               }
+               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;
+                       }
+               }
+
+               pNode = (fsNodeInfo *) malloc(sizeof(fsNodeInfo));
+
+               if (pNode == NULL) {
+                       continue;
+               }
+               memset(pNode, 0, sizeof(fsNodeInfo));
+               /*set path */
+               pNode->path = g_strdup(path);
+               /*set name */
+               pNode->name = g_strdup(ent->d_name);
+               /*set type */
+               if (ent->d_type & DT_DIR) {
+                       pNode->type = FILE_TYPE_DIR;
+               } else if (ent->d_type & DT_REG) {
+                       mf_file_attr_get_file_category(ent->d_name, &(pNode->type));
+               }
+               /*set date & size */
+               childpath = g_string_new(path);
+               if (childpath == NULL) {
+
+                       free(pNode);
+                       pNode = NULL;
+                       continue;
+               }
+               g_string_append_printf(childpath, "/%s", ent->d_name);
+               mf_file_attr_get_file_stat(childpath->str, &pNode);
+               if (pNode->type == FILE_TYPE_DIR) {
+                       *dir_list = eina_list_append(*dir_list, pNode);
+               } else {
+                       ret = mf_file_attr_get_file_ext(childpath->str, &pNode->ext);
+                       if (ret != MYFILE_ERR_NONE) {
+                               pNode->ext = NULL;
+                       }
+                       *file_list = eina_list_append(*file_list, pNode);
+               }
+
+               g_string_free(childpath, TRUE);
+       }
+       closedir(pDir);
+
+       return MYFILE_ERR_NONE;
+}
+
+
+static int __mf_fs_oper_sort_by_priority(const void *d1, const void *d2, int sequence_type)
+{
+       int ret = 0;
+       switch(sequence_type) {
+       case MF_SORT_BY_PRIORITY_TYPE_A2Z:
+               ret = __mf_fs_oper_sort_by_date_cb_O2R(d1, d2);
+               if (ret == 0) {
+                       ret = __mf_fs_oper_sort_by_size_cb_S2L(d1, d2);
+                       if (ret == 0) {
+                               ret = __mf_fs_oper_sort_by_name_cb_A2Z(d1, d2);
+                       }
+               }
+               break;
+       case MF_SORT_BY_PRIORITY_TYPE_Z2A:
+               ret = __mf_fs_oper_sort_by_date_cb_R2O(d1, d2);
+               if (ret == 0) {
+                       ret = __mf_fs_oper_sort_by_size_cb_L2S(d1, d2);
+                       if (ret == 0) {
+                               ret = __mf_fs_oper_sort_by_name_cb_Z2A(d1, d2);
+                       }
+               }
+               break;
+       case MF_SORT_BY_PRIORITY_DATE_O2R:
+               ret = __mf_fs_oper_sort_by_size_cb_S2L(d1, d2);
+               if (ret == 0) {
+                       ret = __mf_fs_oper_sort_by_name_cb_A2Z(d1, d2);
+               }
+               break;
+       case MF_SORT_BY_PRIORITY_DATE_R2O:
+               ret = __mf_fs_oper_sort_by_size_cb_L2S(d1, d2);
+               if (ret == 0) {
+                       ret = __mf_fs_oper_sort_by_name_cb_Z2A(d1, d2);
+               }
+               break;
+       case MF_SORT_BY_PRIORITY_SIZE_S2L:
+               ret = __mf_fs_oper_sort_by_name_cb_A2Z(d1, d2);
+               break;
+       case MF_SORT_BY_PRIORITY_SIZE_L2S:
+               ret = __mf_fs_oper_sort_by_name_cb_Z2A(d1, d2);
+               break;
+       default:
+               break;
+       }
+       return ret;
+}
+/*********************
+**Function name:       __sort_by_name_cb
+**Parameter:
+**     const void *d1: node1 to compare
+**     const void *d2: node2 to compare
+**
+**Return value:
+**     -1      if d1 > d2
+**     0       if d1 = d2
+**     1       if d1 > d2
+**
+**Action:
+**     sort the list order by the Assic table
+
+**
+*********************/
+static int __mf_fs_oper_sort_by_name_cb_A2Z(const void *d1, const void *d2)
+{
+       fsNodeInfo *txt1 = (fsNodeInfo *) d1;
+       fsNodeInfo *txt2 = (fsNodeInfo *) d2;
+       gchar *name1 = NULL;
+       gchar *name2 = NULL;
+       int result = 0;
+
+       if (!txt1 || !txt1->name) {
+               return (1);
+       }
+       if (!txt2 || !txt2->name) {
+               return (-1);
+       }
+
+       name1 = g_ascii_strdown(txt1->name, strlen(txt1->name));
+       if (name1 == NULL) {
+               return (-1);
+       }
+       name2 = g_ascii_strdown(txt2->name, strlen(txt2->name));
+       if (name2 == NULL) {
+               g_free(name1);
+               name1 = NULL;
+               return (-1);
+       }
+       result = g_strcmp0(name1, name2);
+
+       g_free(name1);
+       name1 = NULL;
+       g_free(name2);
+       name2 = NULL;
+       return result;
+
+}
+
+/*********************
+**Function name:       __sort_by_date_cb
+**Parameter:
+**     const void *d1: node1 to compare
+**     const void *d2: node2 to compare
+**
+**Return value:
+**     -1      if d1 > d2
+**     0       if d1 = d2
+**     1       if d1 > d2
+**
+**Action:
+**     sort the list order by the later created the later shown
+*********************/
+static int __mf_fs_oper_sort_by_date_cb_O2R(const void *d1, const void *d2)
+{
+       int ret = 0;
+       fsNodeInfo *time1 = (fsNodeInfo *) d1;
+       fsNodeInfo *time2 = (fsNodeInfo *) d2;
+
+       if (!d1) {
+               return 1;
+       }
+       if (!d2) {
+               return -1;
+       }
+
+       if (time1->date > time2->date) {
+               ret = 1;
+       } else if (time1->date < time2->date) {
+               ret = -1;
+       } else {
+               ret = 0;
+       }
+
+       if (ret == 0) {
+               ret = __mf_fs_oper_sort_by_priority(d1, d2, MF_SORT_BY_PRIORITY_DATE_O2R);
+       }
+       return ret;
+}
+
+/*********************
+**Function name:       __sort_by_type_cb
+**Parameter:
+**     const void *d1: node1 to compare
+**     const void *d2: node2 to compare
+**
+**Return value:
+**     -1      if d1 < d2
+**     0       if d1 = d2
+**     1       if d1 > d2
+**
+**Action:
+**     sort the list order by the category type value
+*********************/
+static int __mf_fs_oper_sort_by_type_cb_A2Z(const void *d1, const void *d2)
+{
+       fsNodeInfo *type1 = (fsNodeInfo *) d1;
+       fsNodeInfo *type2 = (fsNodeInfo *) d2;
+       gchar *ext1 = NULL;
+       gchar *ext2 = NULL;
+       int result = 0;
+
+       if (type1 == NULL || type1->ext == NULL) {
+               return 1;
+       }
+
+       if (type2 == NULL || type2->ext == NULL) {
+               return -1;
+       }
+       ext1 = g_ascii_strdown(type1->ext, strlen(type1->ext));
+       if (ext1 == NULL) {
+               return (-1);
+       }
+       ext2 = g_ascii_strdown(type2->ext, strlen(type2->ext));
+       if (ext2 == NULL) {
+               g_free(ext1);
+               ext1 = NULL;
+               return (-1);
+       }
+       result = g_strcmp0(ext1, ext2);
+
+       g_free(ext1);
+       ext1 = NULL;
+       g_free(ext2);
+       ext2 = NULL;
+
+       if (result == 0) {
+               result = __mf_fs_oper_sort_by_priority(d1, d2, MF_SORT_BY_PRIORITY_TYPE_A2Z);
+       }
+
+       return result;
+}
+
+/*order:       the one with smaller size will be shown earlier*/
+/*********************
+**Function name:       __sort_by_name_cb
+**Parameter:
+**     const void *d1: node1 to compare
+**     const void *d2: node2 to compare
+**
+**Return value:
+**     -1      if d1 > d2
+**     0       if d1 = d2
+**     1       if d1 > d2
+**
+**Action:
+**     sort the list order by size, rule is the smaller the later shown
+*********************/
+static int __mf_fs_oper_sort_by_size_cb_S2L(const void *d1, const void *d2)
+{
+       int ret = 0;
+       fsNodeInfo *size1 = (fsNodeInfo *) d1;
+       fsNodeInfo *size2 = (fsNodeInfo *) d2;
+
+       if (!d1) {
+               return 1;
+       }
+
+       if (!d2) {
+               return -1;
+       }
+
+       if (size1->size > size2->size) {
+               ret = 1;
+       } else if (size1->size < size2->size) {
+               ret = -1;
+       } else {
+               ret = 0;
+       }
+
+       if (ret == 0) {
+               ret = __mf_fs_oper_sort_by_priority(d1, d2, MF_SORT_BY_PRIORITY_SIZE_S2L);
+       }
+       return ret;
+}
+
+/*********************
+**Function name:       __mf_fs_oper_sort_by_name_cb_Z2A
+**Parameter:
+**     const void *d1: node1 to compare
+**     const void *d2: node2 to compare
+**
+**Return value:
+**     1       if d1 > d2
+**     -1      if d1 <= d2
+**
+**Action:
+**     sort the list order by the Assic table
+
+**
+*********************/
+static int __mf_fs_oper_sort_by_name_cb_Z2A(const void *d1, const void *d2)
+{
+       fsNodeInfo *txt1 = (fsNodeInfo *) d1;
+       fsNodeInfo *txt2 = (fsNodeInfo *) d2;
+
+       int result = 0;
+
+       if (!txt1 || !txt1->name) {
+               return (1);
+       }
+       if (!txt2 || !txt2->name) {
+               return (-1);
+       }
+       result = strcasecmp(txt1->name, txt2->name);
+
+       if (result < 0) {
+               return (1);
+       } else {
+               return (-1);
+       }
+}
+
+/*********************
+**Function name:       __sort_by_date_cb
+**Parameter:
+**     const void *d1: node1 to compare
+**     const void *d2: node2 to compare
+**
+**Return value:
+**     -1      if d1 > d2
+**     0       if d1 = d2
+**     1       if d1 < d2
+**
+**Action:
+**     sort the list order by the later created the later shown
+*********************/
+static int __mf_fs_oper_sort_by_date_cb_R2O(const void *d1, const void *d2)
+{
+       int ret = 0;
+       fsNodeInfo *time1 = (fsNodeInfo *) d1;
+       fsNodeInfo *time2 = (fsNodeInfo *) d2;
+
+       if (!d1) {
+               return -1;
+       }
+       if (!d2) {
+               return 1;
+       }
+       if (time1->date > time2->date) {
+               ret = -1;
+       } else if (time1->date < time2->date) {
+               ret = 1;
+       } else {
+               ret = 0;
+       }
+
+       if (ret == 0) {
+               ret = __mf_fs_oper_sort_by_priority(d1, d2, MF_SORT_BY_PRIORITY_DATE_R2O);
+       }
+       return ret;
+}
+
+/*********************
+**Function name:       __sort_by_type_cb
+**Parameter:
+**     const void *d1: node1 to compare
+**     const void *d2: node2 to compare
+**
+**Return value:
+**     -1      if d1 > d2
+**     0       if d1 = d2
+**     1       if d1 < d2
+**
+**Action:
+**     sort the list order by the category type value
+*********************/
+static int __mf_fs_oper_sort_by_type_cb_Z2A(const void *d1, const void *d2)
+{
+       fsNodeInfo *type1 = (fsNodeInfo *) d1;
+       fsNodeInfo *type2 = (fsNodeInfo *) d2;
+       gchar *ext1 = NULL;
+       gchar *ext2 = NULL;
+       int result = 0;
+
+       if (type1 == NULL || type1->ext == NULL) {
+               return -1;
+       }
+
+       if (type2 == NULL || type2->ext == NULL) {
+               return 1;
+       }
+
+       ext1 = g_ascii_strdown(type1->ext, strlen(type1->ext));
+       if (ext1 == NULL) {
+               return (1);
+       }
+       ext2 = g_ascii_strdown(type2->ext, strlen(type2->ext));
+       if (ext2 == NULL) {
+               g_free(ext1);
+               ext1 = NULL;
+               return (-1);
+       }
+       result = g_strcmp0(ext1, ext2);
+       g_free(ext1);
+       ext1 = NULL;
+       g_free(ext2);
+       ext2 = NULL;
+       if (result == 0) {
+               result = __mf_fs_oper_sort_by_priority(d1, d2, MF_SORT_BY_PRIORITY_TYPE_Z2A);
+       }
+
+       return -result;
+}
+
+/*order:       the one with smaller size will be shown earlier*/
+/*********************
+**Function name:       __sort_by_name_cb
+**Parameter:
+**     const void *d1: node1 to compare
+**     const void *d2: node2 to compare
+**
+**Return value:
+**     -1      if d1 > d2
+**     0       if d1 = d2
+**     1       if d1 < d2
+**
+**Action:
+**     sort the list order by size, rule is the smaller the later shown
+*********************/
+static int __mf_fs_oper_sort_by_size_cb_L2S(const void *d1, const void *d2)
+{
+       int ret = 0;
+       fsNodeInfo *size1 = (fsNodeInfo *) d1;
+       fsNodeInfo *size2 = (fsNodeInfo *) d2;
+
+       if (!d1) {
+               return -1;
+       }
+
+       if (!d2) {
+               return 1;
+       }
+
+       if (size1->size > size2->size) {
+               ret = -1;
+       } else if (size1->size < size2->size) {
+               ret = 1;
+       } else {
+               ret = 0;
+       }
+
+       if (ret == 0) {
+               ret = __mf_fs_oper_sort_by_priority(d1, d2, MF_SORT_BY_PRIORITY_SIZE_L2S);
+       }
+       return ret;
+}
+
+/*********************
+**Function name:       mf_fs_oper_sort_list
+**Parameter:
+**     Eina_List **list:       the list we need to sort
+**     int sort_opt:           sort option
+**
+**Return value:
+**     void
+**
+**Action:
+**     sort the list order by sort option with the call back
+*********************/
+void mf_fs_oper_sort_list(Eina_List **list, int sort_opt)
+{
+       Eina_Compare_Cb sort_func = NULL;
+       Eina_List *l = NULL;
+       fsNodeInfo *data = NULL;
+       if (!(*list)) {
+               return;
+       }
+       switch (sort_opt) {
+       case MYFILE_SORT_BY_NAME_A2Z:
+               sort_func = __mf_fs_oper_sort_by_name_cb_A2Z;
+               break;
+       case MYFILE_SORT_BY_TYPE_A2Z:
+               sort_func = __mf_fs_oper_sort_by_type_cb_A2Z;
+               break;
+       case MYFILE_SORT_BY_SIZE_S2L:
+               sort_func = __mf_fs_oper_sort_by_size_cb_S2L;
+               break;
+       case MYFILE_SORT_BY_DATE_O2R:
+               sort_func = __mf_fs_oper_sort_by_date_cb_O2R;
+               break;
+       case MYFILE_SORT_BY_NAME_Z2A:
+               sort_func = __mf_fs_oper_sort_by_name_cb_Z2A;
+               break;
+       case MYFILE_SORT_BY_TYPE_Z2A:
+               sort_func = __mf_fs_oper_sort_by_type_cb_Z2A;
+               break;
+       case MYFILE_SORT_BY_SIZE_L2S:
+               sort_func = __mf_fs_oper_sort_by_size_cb_L2S;
+               break;
+       case MYFILE_SORT_BY_DATE_R2O:
+               sort_func = __mf_fs_oper_sort_by_date_cb_R2O;
+               break;
+       default:
+               sort_func = __mf_fs_oper_sort_by_type_cb_A2Z;
+               break;
+       }
+       EINA_LIST_FOREACH(*list, l, data) {
+               mf_fs_oper_print_node(data);
+       }
+       *list = eina_list_sort(*list, eina_list_count(*list), sort_func);
+       EINA_LIST_FOREACH(*list, l, data) {
+               mf_fs_oper_print_node(data);
+       }
+}
+
+
+/*********************
+**Function name:       mf_fs_oper_create_dir
+**Parameter:
+**     const char *file:       dir need to be operation
+**
+**Return value:
+**     error code
+**
+**Action:
+**     create dir
+*********************/
+int mf_fs_oper_create_dir(const char *dir)
+{
+       int option = MF_ERROR_CHECK_SRC_ARG_VALID | MF_ERROR_CHECK_DUPLICATED;
+       int ret = mf_fs_oper_error(dir, dir, option);
+
+       if (ret != 0) {
+               return ret;
+       }
+
+       ret = mf_file_attr_is_right_dir_path(dir);
+
+       if (ret != 0) {
+               return ret;
+       }
+
+       if (mkdir(dir, default_mode) < 0) {
+               return MYFILE_ERR_DIR_CREATE_FAIL;
+       }
+       return MYFILE_ERR_NONE;
+}
+
+/*********************
+**Function name:       mf_fs_oper_rename_file
+**Parameter:
+**     const char *src:        source file need to rename
+**     const char *dst:        destination file which is to be renamed
+
+**
+**Return value:
+**     error code
+**
+**Action:
+**     rename a file
+*********************/
+int mf_fs_oper_rename_file(const char *src, const char *dst)
+{
+       mf_debug();
+       int option = MF_ERROR_CHECK_SRC_ARG_VALID | MF_ERROR_CHECK_DST_ARG_VALID |
+               MF_ERROR_CHECK_SRC_EXIST | MF_ERROR_CHECK_DST_PATH_VALID |
+               MF_ERROR_CHECK_SRC_PATH_VALID | MF_ERROR_CHECK_SRC_PATH_VALID | MF_ERROR_CHECK_DST_PARENT_DIR_EXIST | MF_ERROR_CHECK_DUPLICATED;
+       int ret = mf_fs_oper_error(src, dst, option);
+
+       if (ret != 0) {
+               return ret;
+       }
+
+       mf_debug("src is %s\ndst is %s\n", src, dst);
+       if (rename(src, dst)) {
+               return MYFILE_ERR_RENAME_FAIL;
+       } else {
+               return MYFILE_ERR_NONE;
+       }
+}
diff --git a/src/common/mf-callback.c b/src/common/mf-callback.c
new file mode 100644 (file)
index 0000000..1a93d3c
--- /dev/null
@@ -0,0 +1,4995 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+
+#include <stdio.h>
+
+
+#include <dbus/dbus.h>
+
+#include <pthread.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include "mf-main.h"
+#include "mf-conf.h"
+#include "mf-util.h"
+#include "mf-callback.h"
+#include "mf-fm-svc-wrapper.h"
+
+#include "mf-widget.h"
+#include "mf-fs-util.h"
+#include "mf-launch.h"
+#include "mf-dlog.h"
+#include "mf-inotify-handle.h"
+#include "mf-copy.h"
+#include "mf-delete.h"
+#include "mf-move.h"
+#include "mf-otg.h"
+#include "mf-resource.h"
+#include "mf-language-mgr.h"
+#include "mf-s-beam.h"
+#include "mf-share.h"
+
+
+struct appdata *temp_data;
+pthread_mutex_t pb_mutex = PTHREAD_MUTEX_INITIALIZER;
+/* mutex for refresh */
+pthread_mutex_t refresh_mutex = PTHREAD_MUTEX_INITIALIZER;
+/* mutex for dbus message */
+pthread_mutex_t refresh_lock;
+pthread_cond_t refresh_finished;
+unsigned int refresh_flag = 0;
+typedef struct _mf_dir_event_t {
+       int event;
+       char *name;
+} mf_dir_event_t;
+
+void mf_callback_save_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_cancel_cb(void *data, Evas_Object * obj, void *event_info);
+static void __mf_callback_mmc_removed(void *data, MF_STORAGE storage);
+
+/******************************
+** Prototype    : mf_callback_warning_popup_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_callback_warning_popup_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       Evas_Object *btn = (Evas_Object *)obj;
+       const char *label = elm_object_text_get(btn);
+
+       if (g_strcmp0(label, GET_SYS_STR(MF_BUTTON_LABEL_OK)) == 0 ) {
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+               ap->mf_MainWindow.pNormalPopup = NULL;
+       }
+}
+
+/******************************
+** Prototype    : mf_callback_app_rotate_cb
+** Description  :
+** Input        : enum appcore_rm mode
+**                void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+#ifdef MYFILE_SPLIT_VIEW
+
+static Eina_Bool __mf_callback_do_rotation_cb (void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = data;
+       assert(ap);
+
+       mf_widget_create(ap);
+       mf_widget_set_main_layout_content(ap);
+
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                       mf_split_view_refresh(ap);
+               }
+       }
+
+       if (ap->mf_Status.more == MORE_RENAME || ap->mf_Status.more == MORE_SEARCH || ap->mf_Status.more == MORE_CREATE_FOLDER || (ap->mf_Status.more == MORE_RENAME && ap->mf_Status.preMore == MORE_SEARCH)) {
+               if (ap->mf_MainWindow.pEntry) {
+                       if (ap->mf_Status.flagIME != EINA_FALSE) {
+                               if (ap->mf_MainWindow.pNormalPopup == NULL) {
+                                       elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_TRUE);
+                               }
+                       }
+               }
+       }
+       if (ap->mf_Status.more == MORE_SEARCH) {
+               if (ap->mf_MainWindow.pSearchEntry) {
+                       if (ap->mf_Status.flagIME != EINA_FALSE) {
+                               if (ap->mf_MainWindow.pNormalPopup == NULL) {
+                                       elm_object_focus_set(ap->mf_MainWindow.pSearchEntry, EINA_TRUE);
+                               }
+                       }
+               }
+       }
+       MF_TRACE_END;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void mf_callback_app_rotate_cb(app_device_orientation_e  mode, void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = data;
+       assert(ap);
+
+       if (ap->mf_Status.pre_rotate_type == mode)
+               return;
+
+        const char *config = elm_config_profile_get();
+        if (!strcmp(config, "desktop"))
+                return;
+
+       enum ug_event evt = UG_EVENT_NONE;
+
+       switch (mode) {
+       case APP_DEVICE_ORIENTATION_270:
+               ap->mf_Status.rotation_angle = -90;
+               ap->mf_Status.view_mode_end = FALSE;
+               ap->mf_Status.pre_rotate_type = APP_DEVICE_ORIENTATION_270;
+               evt = UG_EVENT_ROTATE_LANDSCAPE;
+               break;
+
+       case APP_DEVICE_ORIENTATION_90:
+               ap->mf_Status.rotation_angle = 90;
+               ap->mf_Status.view_mode_end = FALSE;
+               ap->mf_Status.pre_rotate_type = APP_DEVICE_ORIENTATION_90;
+               evt = UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN;
+               break;
+
+       case APP_DEVICE_ORIENTATION_180:
+               ap->mf_Status.rotation_angle = 180;
+               ap->mf_Status.view_mode_end = TRUE;
+               ap->mf_Status.pre_rotate_type = APP_DEVICE_ORIENTATION_180;
+               evt = UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN;
+               break;
+
+       case APP_DEVICE_ORIENTATION_0 :
+       default:
+               ap->mf_Status.rotation_angle = 0;
+               ap->mf_Status.view_mode_end = TRUE;
+               ap->mf_Status.pre_rotate_type = APP_DEVICE_ORIENTATION_0;
+               evt = UG_EVENT_ROTATE_PORTRAIT;
+               break;
+       }
+
+       ug_send_event(evt);
+
+       if (ap->mf_MainWindow.pContextPopup) {
+               evas_object_del(ap->mf_MainWindow.pContextPopup);
+               ap->mf_MainWindow.pContextPopup = NULL;
+               ap->mf_Status.flagCtxPopShow = EINA_TRUE;
+       } else {
+               ap->mf_Status.flagCtxPopShow = EINA_FALSE;
+       }
+
+       if (mode == APP_DEVICE_ORIENTATION_270 || mode == APP_DEVICE_ORIENTATION_90) {
+               ap->mf_Status.rotation_type = MF_ROTATE_LANDSCAPE;
+       } else {
+               ap->mf_Status.rotation_type = MF_ROTATE_PORTRAIT;
+       }
+       if (ap->mf_Status.flagNoContent) {
+               elm_object_signal_emit(ap->mf_MainWindow.pConformant, "elm,state,virtualkeypad,disable", "");
+               elm_object_signal_emit(ap->mf_MainWindow.pConformant, "elm,state,clipboard,disable", "");
+       }
+       elm_win_rotation_with_resize_set(ap->mf_MainWindow.pWindow, ap->mf_Status.rotation_angle);
+       __mf_callback_do_rotation_cb(ap);
+
+       MF_TRACE_END;
+}
+
+#else
+
+void mf_callback_app_rotate_cb(app_device_orientation_e  mode, void *data)
+{
+       struct appdata *ap = data;
+       assert(ap);
+
+       ap->mf_Status.rotation_type = mode;
+
+       if (ap->mf_FileOperation.ugImageViewer) {
+               enum ug_mode md = ug_get_mode(ap->mf_FileOperation.ugImageViewer);
+               enum ug_event ev = UG_EVENT_ROTATE_LANDSCAPE;
+               if (md == UG_MODE_FULLVIEW) {
+                       switch (mode) {
+                       case APP_DEVICE_ORIENTATION_0 :
+                               elm_win_rotation_with_resize_set(ap->mf_MainWindow.pWindow, 0);
+                               ev = UG_EVENT_ROTATE_PORTRAIT;
+                               break;
+                       case APP_DEVICE_ORIENTATION_180:
+                               elm_win_rotation_with_resize_set(ap->mf_MainWindow.pWindow, 180);
+                               ev = UG_EVENT_ROTATE_PORTRAIT_UPSIDEDOWN;
+                               break;
+                       case APP_DEVICE_ORIENTATION_270:
+                               elm_win_rotation_with_resize_set(ap->mf_MainWindow.pWindow, 270);
+                               ev = UG_EVENT_ROTATE_LANDSCAPE;
+                               break;
+                       case APP_DEVICE_ORIENTATION_90:
+                               elm_win_rotation_with_resize_set(ap->mf_MainWindow.pWindow, 90);
+                               ev = UG_EVENT_ROTATE_LANDSCAPE_UPSIDEDOWN;
+                               break;
+                       default:
+                               break;
+                       }
+                       /*send event to ug */
+                       ug_send_event(ev);
+               }
+       }
+}
+#endif
+
+#ifdef MYFILE_SPLIT_VIEW
+void mf_callback_storage_cb(void *data, const char *label)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(label == NULL, "label is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap->mf_Status.path == NULL, "ap->mf_Status.path is NULL");
+       mf_retm_if(ap->mf_Status.path->str == NULL, "ap->mf_Status.path->str is NULL");
+       Evas_Object *pNaviBar = NULL;
+       myfileNaviBar *pNavi_s_inuse = NULL;
+       myfileNaviBar *pNavi_s_toshow = NULL;
+       myfileNaviBar *pNaviBarStruct = NULL;
+       char *rootpath = NULL;
+       int current_storage = MYFILE_PHONE;
+       int current_more = ap->mf_Status.more;
+       pNavi_s_inuse = mf_navi_bar_get_in_use(ap);
+
+       current_storage = mf_fm_svc_wrapper_get_location(ap->mf_Status.path->str);
+
+       if (ap->mf_Status.more == MORE_SEARCH) {
+               ap->mf_Status.more = MORE_DEFAULT;
+       }
+       pNavi_s_inuse->naviFlagInUse = FALSE;
+       pNaviBarStruct = mf_navi_bar_get_navi_from_navilist(ap->mf_MainWindow.plistNaviBar, label);
+
+
+       if (pNaviBarStruct == NULL) {
+               /*2.0   get root path by storage label */
+               rootpath = mf_fm_svc_wrapper_get_root_path_by_tab_label(label);
+               CHAR_CHECK_NULL_GOTO(rootpath, ERROR_EXIT);
+
+               /*2.1   create the navi for the tab */
+               pNavi_s_toshow = malloc(sizeof(myfileNaviBar));
+               CHAR_CHECK_NULL_GOTO(pNavi_s_toshow, ERROR_EXIT);
+               memset(pNavi_s_toshow, 0, sizeof(myfileNaviBar));
+
+               pNavi_s_toshow->naviFlagInUse = TRUE;
+               /*2.2   set path as root path of the storage */
+               pNavi_s_toshow->pCurrentPath = g_strdup(rootpath);
+               pNavi_s_toshow->pNaviLabel = strdup(label);
+               free(rootpath);
+               /*2.3   insert phone navi into the navi_list */
+               ap->mf_MainWindow.plistNaviBar = eina_list_append(ap->mf_MainWindow.plistNaviBar, pNavi_s_toshow);
+
+               g_string_free(ap->mf_Status.path, TRUE);
+               ap->mf_Status.path = NULL;
+               ap->mf_Status.path = g_string_new(pNavi_s_toshow->pCurrentPath);
+               if (ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                   || ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE) {
+                       SAFE_FREE_GSTRING(pNavi_s_toshow->pre_operation.path);
+                               pNavi_s_toshow->pre_operation.path = g_string_new(pNavi_s_toshow->pCurrentPath);
+               }
+               if (ap->mf_Status.more == MORE_DEFAULT) {
+                       mf_navi_bar_create_default_view(ap);
+                       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+               } else if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                          || ap->mf_Status.more == MORE_DATA_COPYING || ap->mf_Status.more == MORE_DATA_MOVING) {
+                       mf_navi_bar_create_path_select_view(ap);
+                       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+               }
+
+               ap->mf_Status.more = current_more;
+               goto SUCCESS_EXIT;
+       } else {
+               /*2.1   get the navi of the tab */
+               pNaviBar = ap->mf_MainWindow.pNaviBar;
+               pNavi_s_toshow = mf_navi_bar_get_struct_by_label(ap, label);
+               pNavi_s_toshow->naviFlagInUse = TRUE;
+
+               /*2.2   set related status value. */
+               g_string_free(ap->mf_Status.path, TRUE);
+               ap->mf_Status.path = NULL;
+
+               ap->mf_Status.path = g_string_new(pNavi_s_toshow->pCurrentPath);
+               /*2.3   update the content to catch update */
+               /*Todo: How to ensure insert only once */
+               if (ap->mf_Status.more == MORE_DEFAULT) {
+                       mf_navi_bar_create_default_view(ap);
+                       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+               } else if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                          || ap->mf_Status.more == MORE_DATA_COPYING || ap->mf_Status.more == MORE_DATA_MOVING) {
+                       mf_navi_bar_create_path_select_view(ap);
+                       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+               }
+               goto SUCCESS_EXIT;
+       }
+
+
+ERROR_EXIT:
+       SAFE_FREE_CHAR(pNavi_s_toshow);
+       SAFE_FREE_CHAR(rootpath);
+       MF_TRACE_END;
+       return;
+
+SUCCESS_EXIT:
+       MF_TRACE_END;
+       return;
+
+}
+#endif
+
+/******************************
+** 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_callback_tab_cb(void *data, const char * path)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(path == NULL, "path is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       const char *label = NULL;
+       Evas_Object *pNaviBar = NULL;
+       myfileNaviBar *pNavi_s_toshow = NULL;
+       myfileNaviBar *pNavi_s_inuse = NULL;
+#if 0
+       Elm_Object_Item *it = NULL;
+       it = (Elm_Object_Item *)event_info;
+       label = elm_object_item_text_get(it);
+#endif
+       int optStorage = 0;
+       optStorage = mf_fm_svc_wrapper_get_location(path);
+       switch (optStorage) {
+       case MYFILE_PHONE:
+               label = GET_SYS_STR(MF_LABEL_PHONE);
+               break;
+       case MYFILE_MMC:
+               label = GET_SYS_STR(MF_LABEL_MMC);
+               break;
+       case MYFILE_OTG:
+               label = GET_STR(MF_LABEL_OTG);
+               break;
+       default:
+               break;
+       }
+
+
+       if (ap->mf_Status.more == MORE_RENAME)
+               mf_callback_destory_rename(ap);
+
+       if (label != NULL) {
+               pNavi_s_inuse = mf_navi_bar_get_in_use(ap);
+               if (pNavi_s_inuse == NULL || pNavi_s_inuse->pNaviLabel == NULL) {
+                       MF_TRACE_END;
+                       return;
+               }
+
+
+#ifdef MYFILE_SPLIT_VIEW
+               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                       mf_callback_storage_cb(ap, label);
+                       MF_TRACE_END;
+                       return;
+               }
+#endif
+               /*0. set the previous navi to be out of use */
+               pNavi_s_inuse->naviFlagInUse = FALSE;
+               /*1. get navi bar pointer by the label */
+               pNaviBar = ap->mf_MainWindow.pNaviBar;
+               pNavi_s_toshow = mf_navi_bar_get_navi_from_navilist(ap->mf_MainWindow.plistNaviBar, label);
+               /*2. create navi bar if not created, otherwise get it by pNaviBar */
+               if (pNavi_s_toshow == NULL) {
+                       /*2.0   get root path by storage label */
+                       char *rootpath = mf_fm_svc_wrapper_get_root_path_by_tab_label(label);
+                       if (rootpath == NULL) {
+                               MF_TRACE_END;
+                               return;
+                       }
+                       /*2.1   create the navi for the tab */
+                       pNavi_s_toshow = malloc(sizeof(myfileNaviBar));
+                       if (pNavi_s_toshow == NULL) {
+                               free(rootpath);
+                               rootpath = NULL;
+                               mf_debug("pNavi_s_toshow is NULL");
+                               MF_TRACE_END;
+                               return;
+                       }
+                       memset(pNavi_s_toshow, 0, sizeof(myfileNaviBar));
+
+                       pNavi_s_toshow->naviFlagInUse = TRUE;
+                       /*2.2   set path as root path of the storage */
+                       pNavi_s_toshow->pCurrentPath = g_strdup(rootpath);
+                       pNavi_s_toshow->pNaviLabel = strdup(label);
+                       free(rootpath);
+                       /*2.3   insert phone navi into the navi_list */
+                       ap->mf_MainWindow.plistNaviBar = eina_list_append(ap->mf_MainWindow.plistNaviBar, pNavi_s_toshow);
+
+                       if (ap->mf_Status.path != NULL) {
+                               g_string_free(ap->mf_Status.path, TRUE);
+                               ap->mf_Status.path = NULL;
+                       }
+                       ap->mf_Status.path = g_string_new(pNavi_s_toshow->pCurrentPath);
+                       if (ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                           || ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE) {
+                               pNavi_s_toshow->pre_operation.path = g_string_new(pNavi_s_toshow->pCurrentPath);
+                               mf_navi_bar_create_path_select_view(ap);
+                               mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+                       } else {
+                               mf_navi_bar_create_default_view(ap);
+                               mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+                       }
+                       MF_TRACE_END;
+
+
+               } else {
+                       /*2.1   get the navi of the tab */
+                       pNavi_s_toshow = mf_navi_bar_get_struct_by_label(ap, label);
+                       pNavi_s_toshow->naviFlagInUse = TRUE;
+                       char *rootpath = mf_fm_svc_wrapper_get_root_path_by_tab_label(label);
+
+                       /*2.2   set related status value. */
+                       SAFE_FREE_GSTRING(ap->mf_Status.path);
+                       SAFE_FREE_CHAR(pNavi_s_toshow->pCurrentPath);
+                       ap->mf_Status.path = g_string_new(rootpath);
+                       pNavi_s_toshow->pCurrentPath = rootpath;
+                       /*2.3   update the content to catch update */
+                       /*Todo: How to ensure insert only once */
+                       if ((ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                            || ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE)) {
+                               mf_navi_bar_create_path_select_view(ap);
+                       } else {
+                               mf_navi_bar_create_default_view(ap);
+                       }
+                       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+                       MF_TRACE_END;
+               }
+
+       }
+
+}
+
+/******************************
+** Prototype    : click_callback
+** Description  :
+** Input        : struct appdata* data
+**                mfAction key
+**                GString* path
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void mf_callback_upper_folder_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       GString *parent_path = NULL;
+       int error_code = 0;
+       int mmc_card = 0;
+       error_code = mf_util_is_mmc_on(&mmc_card);
+
+       parent_path = mf_fm_svc_wrapper_get_file_parent_path(ap->mf_Status.path);
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navi structure failed");
+       if (ap->mf_Status.path != NULL) {
+               g_string_free(ap->mf_Status.path, TRUE);
+               ap->mf_Status.path = NULL;
+       }
+       ap->mf_Status.path = parent_path;
+
+       if (pNavi_s->pCurrentPath != NULL) {
+               free(pNavi_s->pCurrentPath);
+               pNavi_s->pCurrentPath = NULL;
+       }
+       pNavi_s->pCurrentPath = g_strdup(parent_path->str);
+
+       if (ap->mf_Status.more == MORE_DEFAULT) {
+               mf_navi_bar_create_default_view(ap);
+       }
+       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+}
+
+void mf_callback_upper_button_pressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *upper_button_ic = (Evas_Object *)data;
+       elm_image_file_set(upper_button_ic, MF_TITLE_ICON_UPPER_PRESS, NULL);
+}
+
+void mf_callback_upper_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *upper_button_ic = (Evas_Object *)data;
+       elm_image_file_set(upper_button_ic, MF_TITLE_ICON_UPPER, NULL);
+}
+
+void mf_callback_upper_click_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       assert(data);
+       struct appdata *ap = data;
+
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       if (ap->mf_Status.more == MORE_CREATE_FOLDER) {
+               return;
+       }
+
+       if (ap->mf_Status.view_type == mf_view_root) {
+               return;
+       }
+       mf_callback_remove_dir_watch();
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_callback_destory_rename(ap);
+       }
+
+       if (ap->mf_MainWindow.pNaviItem) {
+               mf_navi_bottom_item_del(&ap->mf_MainWindow.pNaviItem);
+       }
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navi structure failed");
+       GString *parent_path = NULL;
+
+       if (mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+               ap->mf_Status.view_type = mf_view_root;
+#ifdef MYFILE_SPLIT_VIEW
+               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                       mf_navi_bar_set_panes_navi_to_main(ap);
+               }
+#endif
+
+       } else {
+               parent_path = mf_fm_svc_wrapper_get_file_parent_path(ap->mf_Status.path);
+
+               g_string_free(ap->mf_Status.path, TRUE);
+               ap->mf_Status.path = NULL;
+               ap->mf_Status.path = parent_path;
+#ifdef MYFILE_USB_OTG
+               /* if click items under otg root path, it means some disk take into use*/
+               int storage = mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str);
+               if (storage == MYFILE_OTG) {    /* a usb disk take into use */
+                       char *dev_in_use = mf_otg_get_node_in_use(ap);
+                       if (dev_in_use != NULL)
+                               mf_otg_set_node_using_flag(ap, dev_in_use, FALSE);
+               } else {
+               }
+#endif
+               if (pNavi_s->pCurrentPath != NULL) {
+                       free(pNavi_s->pCurrentPath);
+                       pNavi_s->pCurrentPath = NULL;
+               }
+               pNavi_s->pCurrentPath = g_strdup(parent_path->str);
+
+       }
+
+
+       mf_widget_refresh_view(ap);
+
+
+}
+
+#ifdef MYFILE_SPLIT_VIEW
+void mf_callback_left_click_cb(struct appdata *data, GString * path, Elm_Object_Item *item)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(path == NULL, "path is NULL");
+       mf_retm_if(path->str == NULL, "path->str is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL) {
+               return;
+       }
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       Evas_Object *pGenlist = NULL;
+
+       int locate = mf_fm_svc_wrapper_get_location(ap->mf_Status.path->str);
+       int click_locate = MYFILE_PHONE;
+
+       pGenlist = ap->mf_MainWindow.sSplitData.pSplitLeftGenlist;
+
+       click_locate = mf_fm_svc_wrapper_get_location(path->str);
+
+       if (locate == click_locate) {
+
+               int error_code = 0;
+               int mmc_card = 0;
+               bool result = FALSE;
+
+               myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+               mf_retm_if(pNavi_s == NULL, "get navi structure failed");
+               error_code = mf_util_is_mmc_on(&mmc_card);
+               if (ap->mf_Status.more == MORE_DEFAULT || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                   || ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_SEARCH) {
+                       SAFE_FREE_GSTRING(ap->mf_Status.path);
+                       ap->mf_Status.path = g_string_new(path->str);
+                       SAFE_FREE_CHAR(pNavi_s->pCurrentPath);
+                       pNavi_s->pCurrentPath = g_strdup(path->str);
+#ifdef MYFILE_USB_OTG
+                       /* if click items under otg root path, it means some disk take into use*/
+                       error_code = 0;
+                       error_code = mf_file_attr_is_disk_link(path->str, &result);
+                       if (error_code == 0 && result == TRUE) {        /* a usb disk take into use */
+                               /*
+                               **we don't need to set the previous device flag to be false
+                               **because click cannot jump from one device to another
+                               */
+                               mf_otg_set_node_using_flag(ap, path->str,TRUE);
+                       }
+#endif
+                       /*set new path */
+                       if (ap->mf_Status.more == MORE_DEFAULT) {
+                               mf_navi_bar_create_default_view(ap);
+                               mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+                       } else if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                                  || ap->mf_Status.more == MORE_DATA_COPYING || ap->mf_Status.more == MORE_DATA_MOVING) {
+                               mf_navi_bar_create_path_select_view(ap);
+                               mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+                       }
+               }
+
+       } else {
+
+               if (g_strcmp0(path->str, PHONE_FOLDER) == 0) {
+                       mf_callback_storage_cb(ap, GET_SYS_STR(MF_LABEL_PHONE));
+               } else if (g_strcmp0(path->str, MEMORY_FOLDER) == 0) {
+                       mf_callback_storage_cb(ap, GET_SYS_STR(MF_LABEL_MMC));
+               } else if (g_strcmp0(path->str, OTG_FOLDER) == 0) {
+                       mf_callback_storage_cb(ap, GET_STR(MF_LABEL_OTG));
+               }
+       }
+
+       MF_TRACE_END;
+}
+#endif
+void mf_callback_click_cb(struct appdata *data, mfAction key, GString * path)
+{
+       mf_debug("Start");
+       assert(data);
+       mf_debug("key:%d path:%s\n", key, path->str);
+
+       struct appdata *ap = data;
+       if (ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL) {
+               return;
+       }
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+       if (ap->mf_Status.view_type == mf_view_root) {
+               ap->mf_Status.view_type = mf_view_normal;
+               mf_callback_tab_cb(ap, path->str);
+               return;
+       }
+       GString *new_path = NULL;
+
+       int error_code = 0;
+       int mmc_card = 0;
+       bool result = FALSE;
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navi structure failed");
+
+       error_code = mf_util_is_mmc_on(&mmc_card);
+       if (ap->mf_Status.more == MORE_DEFAULT || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+           || ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_SEARCH) {
+               if (key == MFACTION_CLICK) {
+                       if (mf_fm_svc_wrapper_is_dir(path)) {
+                               if (ap->mf_Status.more == MORE_SEARCH) {
+                                       if (ap->mf_FileOperation.search_result_list) {
+                                               mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.search_result_list), MYFILE_TYPE_CHAR);
+                                       }
+                                       elm_object_focus_set(ap->mf_MainWindow.pSearchEntry, EINA_FALSE);
+                                       ap->mf_Status.more = MORE_DEFAULT;
+
+                               }
+                               new_path = g_string_new(path->str);
+
+#ifdef MYFILE_USB_OTG
+                               /* if click items under otg root path, it means some disk take into use*/
+                               error_code = 0;
+                               error_code = mf_file_attr_is_disk_link(new_path->str, &result);
+                               if (error_code == 0 && result == TRUE) {        /* a usb disk take into use */
+                                       /*
+                                       **we don't need to set the previous device flag to be false
+                                       **because click cannot jump from one device to another
+                                       */
+                                       mf_otg_set_node_using_flag(ap, new_path->str,TRUE);
+                               }
+#endif
+                               /*set new path */
+                               if (ap->mf_Status.path != NULL) {
+                                       g_string_free(ap->mf_Status.path, TRUE);
+                                       ap->mf_Status.path = NULL;
+                               }
+                               ap->mf_Status.path = new_path;
+
+                               if (pNavi_s->pCurrentPath != NULL) {
+                                       free(pNavi_s->pCurrentPath);
+                                       pNavi_s->pCurrentPath = NULL;
+                               }
+                               pNavi_s->pCurrentPath = g_strdup(new_path->str);
+                               mf_widget_refresh_view(ap);
+                       } else {
+                               struct timeval mytime;
+                               gettimeofday(&mytime, NULL);
+                               mf_debug("[myfiles click time] %ld sec %ld usec \n", mytime.tv_sec, mytime.tv_usec);
+
+                               int ret = 0;
+                               ret = mf_launch_service(ap, path->str);
+                               mf_debug("ret is %d\n", ret);
+                       }
+               }
+
+               else if (key == MFACTION_FLICK) {
+                       mf_debug("flick\n");
+               }
+       }
+}
+
+/******************************
+** Prototype    : __mf_callback_imk_cancel_cb
+** 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_callback_imk_cancel_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       mf_callback_cancel_cb(ap, NULL, NULL);
+       return 0;
+}
+
+/******************************
+** Prototype    : mf_callback_illegal_char_popup_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_callback_illegal_char_popup_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       Evas_Object *btn = (Evas_Object *)obj;
+       const char *label = elm_object_text_get(btn);
+
+       if (g_strcmp0(label, GET_SYS_STR(MF_BUTTON_LABEL_YES)) == 0 ) {
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+               ap->mf_MainWindow.pNormalPopup = NULL;
+
+               Evas_Object *entry = ap->mf_MainWindow.pEntry;
+               if (entry != NULL)
+                       elm_object_focus_set(entry, EINA_TRUE);
+       } else if (g_strcmp0(label, GET_SYS_STR(MF_BUTTON_LABEL_NO)) == 0 ) {
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+               ap->mf_MainWindow.pNormalPopup = NULL;
+               ecore_idler_add((Ecore_Task_Cb) __mf_callback_imk_cancel_cb, ap);
+       }
+
+}
+
+/******************************
+** Prototype    : __mf_ime_mkdir_cb
+** Description  :
+** Input        : void *data
+**                char* fileName
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static int __mf_callback_ime_mkdir_cb(void *data, char *fileName)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       assert(fileName);
+
+       int ret = 0;
+       const char *message = NULL;
+       const char *left_label = NULL;
+       const char *right_label = NULL;
+
+       left_label = GET_SYS_STR(MF_BUTTON_LABEL_YES);
+       right_label = GET_SYS_STR(MF_BUTTON_LABEL_NO);
+       if (strlen(fileName)) {
+
+               if (ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL) {
+                       mf_debug("ap->mf_Status.path is NULL\n");
+                       return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+               }
+               GString *fullpathdir = g_string_new(ap->mf_Status.path->str);
+
+               if (fullpathdir == NULL) {
+                       mf_util_operation_alloc_failed(ap);
+                       return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+               }
+               /*check the space */
+               gchar *test_space = g_strstrip(fileName);
+               if (test_space == NULL) {
+                       g_string_free(fullpathdir, TRUE);
+                       fullpathdir = NULL;
+                       mf_util_operation_alloc_failed(ap);
+                       return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+               }
+               mf_debug("====================================fileName is [%s] test_space is [%s]", fileName, test_space);
+
+               GString *fullpathname = g_string_new(test_space);
+
+               if (fullpathname == NULL) {
+                       g_string_free(fullpathdir, TRUE);
+                       fullpathdir = NULL;
+                       mf_util_operation_alloc_failed(ap);
+                       return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+               }
+
+               if (strlen(test_space) == 0) {
+                       message = GET_STR(MF_POPUP_MSG_NAME_INVALID);   /*TODO */
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_TWO_BTN, NULL, message,
+                                                                              left_label, right_label, NULL,
+                                                                              mf_callback_illegal_char_popup_cb, ap);
+
+                       g_string_free(fullpathdir, TRUE);
+                       fullpathdir = NULL;
+                       g_string_free(fullpathname, TRUE);
+                       fullpathname = NULL;
+                       return MYFILE_ERR_DIR_CREATE_FAIL;
+               }
+
+               /*check if input name is valid */
+               if (mf_file_attr_is_valid_name(fullpathname->str) == MYFILE_ERR_INVALID_FILE_NAME) {
+
+                       message = GET_STR(MF_MSG_ILLEGAL_CHAR);
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_TWO_BTN, NULL, message,
+                                                                              left_label, right_label, NULL,
+                                                                              mf_callback_illegal_char_popup_cb, ap);
+                       mf_debug("Name contains illegal character!!!");
+                       g_string_free(fullpathdir, TRUE);
+                       fullpathdir = NULL;
+                       g_string_free(fullpathname, TRUE);
+                       fullpathname = NULL;
+
+                       return MYFILE_ERR_DIR_CREATE_FAIL;
+               }
+
+               GString *fullpath = NULL;
+               char *temp_fullpath = g_strconcat(fullpathdir->str, "/", fullpathname->str, NULL);
+               if (temp_fullpath) {
+                       fullpath = g_string_new(temp_fullpath);
+
+                       free(temp_fullpath);
+                       temp_fullpath = NULL;
+                       if (fullpath == NULL) {
+                               g_string_free(fullpathdir, TRUE);
+                               fullpathdir = NULL;
+                               g_string_free(fullpathname, TRUE);
+                               fullpathname = NULL;
+                               mf_util_operation_alloc_failed(ap);
+                               return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+                       }
+               } else {
+                       g_string_free(fullpathdir, TRUE);
+                       fullpathdir = NULL;
+                       g_string_free(fullpathname, TRUE);
+                       fullpathname = NULL;
+                       return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+               }
+
+               mf_debug("length is %d\n", strlen(fileName));
+               mf_debug("fullpath is %s\n", fullpath->str);
+               /*check whether DIR name is override(DIR name has no extention) */
+               /*check whether path length is override */
+               if ((strlen(fullpathdir->str) + strlen(fullpathname->str)) > MYFILE_FILE_PATH_LEN_MAX) {
+
+                       message = GET_STR(MF_MSG_PATH_REACH_MAX_LEN);
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_TWO_BTN, NULL, message,
+                                                                              left_label, right_label, NULL,
+                                                                              mf_callback_illegal_char_popup_cb, ap);
+                       mf_debug("Full path length should be  less than 4096 Retry!!!");
+                       g_string_free(fullpathdir, TRUE);
+                       fullpathdir = NULL;
+                       g_string_free(fullpathname, TRUE);
+                       fullpathname = NULL;
+                       ret = MYFILE_ERR_DIR_CREATE_FAIL;
+               }
+               /*check if duplicated name */
+               else if (mf_file_attr_is_duplicated_name(ap->mf_Status.path->str, test_space) == MYFILE_ERR_DUPLICATED_NAME) {
+                       message = GET_STR(MF_MSG_DUP_NAME);
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_TWO_BTN, NULL, message,
+                                                                              left_label, right_label, NULL,
+                                                                              mf_callback_illegal_char_popup_cb, ap);
+
+                       mf_debug("Duplicated Name, Retry?");
+                       g_string_free(fullpathdir, TRUE);
+                       fullpathdir = NULL;
+                       g_string_free(fullpathname, TRUE);
+                       fullpathname = NULL;
+                       ret = MYFILE_ERR_DIR_CREATE_FAIL;
+               }
+               /*check if DIR name is all spaces */
+               else {
+                       ret = mf_fm_svc_wrapper_create_service(ap, fullpath);
+                       /*check whether operate on read only area */
+                       if (errno == EROFS) {
+                               message = GET_STR(MF_MSG_OPER_READ_ONLY);
+                               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message, NULL, NULL, NULL, NULL, NULL);
+                               ret = MYFILE_ERR_DIR_CREATE_FAIL;
+                       } else if (ret) {
+                               message = GET_STR(MF_MSG_CREATE_DIR_FAILED);
+                               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message, NULL, NULL, NULL, NULL, NULL);
+                               mf_debug("create folder error   %d      \n", ret);
+                       }
+
+                       g_string_free(fullpathdir, TRUE);
+                       fullpathdir = NULL;
+                       g_string_free(fullpathname, TRUE);
+                       fullpathname = NULL;
+                       g_string_free(fullpath, TRUE);
+                       fullpath = NULL;
+
+               }
+       } else {
+               message = GET_STR(MF_MSG_EMPTY_FOLDER_NAME);
+
+               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_TWO_BTN, NULL, message,
+                                                                      left_label, right_label, NULL, mf_callback_illegal_char_popup_cb, ap);
+               ret = MYFILE_ERR_DIR_CREATE_FAIL;
+       }
+       return ret;
+}
+
+/******************************
+** Prototype    : mf_callback_cancel_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_callback_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       mf_retm_if(ap->mf_Status.path == NULL, "ap->mf_Status.path is NULL");
+       mf_retm_if(ap->mf_Status.path->str == NULL, "ap->mf_Status.path->str is NULL");
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       Evas_Object *newContent;
+
+       Eina_List *l = NULL;
+       void *item = NULL;
+       myfileNaviBar *pNavi_s = NULL;
+       myfileNaviBar *pNavi_toshow = NULL;
+       int flagTabbar = 0;
+       switch (ap->mf_Status.more) {
+       case MORE_INTERNAL_COPY:
+       case MORE_INTERNAL_MOVE:
+       case MORE_INTERNAL_COPY_MOVE:
+               mf_debug();
+               if (ap->mf_FileOperation.source != NULL) {
+                       g_string_free(ap->mf_FileOperation.source, TRUE);
+                       ap->mf_FileOperation.source = NULL;
+               }
+               /*1.    state set */
+               /*1.1   status set to default */
+               ap->mf_Status.preMore = ap->mf_Status.more;
+               ap->mf_Status.more = MORE_EDIT;
+               flagTabbar = mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str);
+               /*1.2   free the path to set it to the one just when edit clicked later */
+               g_string_free(ap->mf_Status.path, TRUE);
+               ap->mf_Status.path = NULL;
+               /*2.    navigation bar state recovery */
+               EINA_LIST_FOREACH(ap->mf_MainWindow.plistNaviBar, l, item) {
+                       pNavi_s = (myfileNaviBar *) item;
+                       /*2.2   pop all the temprory views */
+                       /*2.3   recover the path just before when edit click */
+                       pNavi_s->pCurrentPath = strdup(pNavi_s->pre_operation.path->str);
+                       /*2.5   set navi related status */
+                       if (pNavi_s->naviFlagEditStart == TRUE) {
+                               /*2.5-1 set path in mf_status */
+                               ap->mf_Status.path = g_string_new(pNavi_s->pCurrentPath);
+                               /*2.5-2 set InUse flag */
+                               pNavi_s->naviFlagInUse = TRUE;
+                               /*2.5-3 set pNavi_toshow for refreshing */
+                               pNavi_toshow = pNavi_s;
+                       } else {
+                               pNavi_s->naviFlagInUse = FALSE;
+                       }
+               }
+
+               if (pNavi_toshow == NULL) {
+                       mf_debug("pNavi_toshow is NULL");
+                       return;
+               }
+
+
+               ap->mf_Status.more = MORE_DEFAULT;
+               if (ap->mf_Status.view_type == mf_view_root) {
+                       ap->mf_Status.view_type = ap->mf_Status.preViewType;
+#ifdef MYFILE_SPLIT_VIEW
+                       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                               if (ap->mf_Status.preViewType != mf_view_root_category) {
+                                       mf_navi_bar_reset_panes_main(ap);
+                               }
+                       }
+#endif
+               } else {
+                       ap->mf_Status.view_type = ap->mf_Status.preViewType;
+#ifdef MYFILE_SPLIT_VIEW
+                       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                               if (ap->mf_Status.preViewType == mf_view_root_category) {
+                                       mf_navi_bar_set_panes_navi_to_main(ap);
+                               }
+                       }
+#endif
+               }
+
+               mf_navi_bar_create_default_view(ap);
+               mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+
+               ap->mf_Status.more = MORE_EDIT;
+               mf_widget_refresh_view(ap);
+
+               ap->mf_Status.preMore = MORE_DEFAULT;
+               return;
+       case MORE_RENAME:
+               mf_callback_destory_rename(ap);
+               if (ap->mf_Status.preMore == MORE_SEARCH) {
+                       goto SEARCH_CANCEL;
+               }
+               break;
+               /* when cancle rename, just destory the rename relative, and then the mode will change to Edit
+                  then do what cancle edit do, so here not need "break" */
+       case MORE_EDIT:
+       case MORE_SHARE_EDIT:
+               /*1     pop edit view */
+               if (ap->mf_MainWindow.pLabelLayout) {
+                       mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout, "sel_contents");
+                       if (ap->mf_MainWindow.pLabelLayout)
+                               evas_object_del(ap->mf_MainWindow.pLabelLayout);
+
+                       ap->mf_MainWindow.pLabelLayout = NULL;
+               }
+               ap->mf_Status.flagFolderSelect = FALSE;
+               ap->mf_Status.flagFileSelect = FALSE;
+               pNavi_toshow = mf_navi_bar_get_in_use(ap);
+               mf_retm_if(pNavi_toshow == NULL, "get navi in use failed");
+               ap->mf_Status.more = MORE_DEFAULT;
+                       /*3.    refresh the content of the view */
+
+               mf_navi_bar_recover_info_box(ap, pNavi_toshow);
+               Evas_Object *btn = NULL;
+               btn = elm_object_item_part_content_unset(ap->mf_MainWindow.pNaviItem, TITLE_LEFT_BTN);
+               SAFE_FREE_OBJ(btn);
+
+               mf_genlist_update_default_view_item_style(ap);
+               newContent = mf_navi_bar_content_create(ap);
+               mfNaviBarSetContent(ap, ap->mf_MainWindow.pNaviLayout, newContent);
+
+               //mf_ctrl_bar_reset(ap);
+               mf_navi_bar_reset_ctrl_button(ap);
+               mf_navi_add_back_button(ap);
+               /*4.    set tab enable */
+               mf_navi_bar_title_set(ap);
+               break;
+       case MORE_SEARCH:
+            SEARCH_CANCEL:
+#ifdef MYFILE_SPLIT_VIEW
+               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                       /**** 1. unset naviframe from mainlayout **/
+                       if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                               mf_navi_bar_reset_panes_main(ap);
+                       }
+               }
+#endif
+
+               if (ap->mf_FileOperation.search_IME_hide_timer != NULL) {
+                       ecore_timer_del(ap->mf_FileOperation.search_IME_hide_timer);
+                       ap->mf_FileOperation.search_IME_hide_timer = NULL;
+               }
+
+               if (ap->mf_FileOperation.search_result_list) {
+                       mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.search_result_list), MYFILE_TYPE_CHAR);
+               }
+
+               if (ap->mf_Status.search_handler > 0) {
+                       mf_search_stop(ap->mf_Status.search_handler);
+                       mf_search_finalize(&ap->mf_Status.search_handler);
+               }
+               ap->mf_Status.more = MORE_DEFAULT;
+               elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_FALSE);
+               evas_object_del(ap->mf_MainWindow.pEntry);
+               ap->mf_MainWindow.pSearchEntry = NULL;
+
+               mf_widget_refresh_view(ap);
+               ap->mf_Status.preMore = MORE_DEFAULT;
+
+               break;
+       case MORE_CREATE_FOLDER:
+#ifdef MYFILE_SPLIT_VIEW
+               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                       if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                               mf_navi_bar_reset_panes_main(ap);
+                       }
+               }
+#endif
+               ap->mf_Status.more = ap->mf_Status.preMore;
+               elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_FALSE);
+               evas_object_del(ap->mf_MainWindow.pEntry);
+               ap->mf_MainWindow.pEntry = NULL;
+               mf_widget_imf_hide_callback_del(ap->mf_MainWindow.pConformant);
+
+               mf_widget_refresh_view(ap);
+
+               mf_callback_imf_state_callback_del(ap);
+
+               break;
+       case MORE_THUMBNAIL_RENAME:
+#ifdef MYFILE_SPLIT_VIEW
+               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                       if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                               mf_navi_bar_reset_panes_main(ap);
+                       }
+               }
+#endif
+               ap->mf_Status.more = MORE_DEFAULT;//ap->mf_Status.preMore;
+               ap->mf_Status.preMore = MORE_THUMBNAIL_RENAME;
+               elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_FALSE);
+               evas_object_del(ap->mf_MainWindow.pEntry);
+               ap->mf_MainWindow.pEntry = NULL;
+               mf_widget_imf_hide_callback_del(ap->mf_MainWindow.pConformant);
+               mf_callback_imf_state_callback_del(ap);
+
+               mf_widget_refresh_view(ap);
+               ap->mf_Status.preMore = MORE_DEFAULT;
+               break;
+       default:
+               ap->mf_Status.more = MORE_DEFAULT;
+               /*4.    set tab enable */
+               break;
+       }
+
+       if (ap->mf_MainWindow.pLabel) {
+               evas_object_del(ap->mf_MainWindow.pLabel);
+               ap->mf_MainWindow.pLabel = NULL;
+       }
+}
+
+/******************************
+** Prototype    : __mf_popup_show_vk_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_popup_show_vk_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       Evas_Object *pEntry = NULL;
+
+       evas_object_del(ap->mf_MainWindow.pNormalPopup);
+
+       ap->mf_MainWindow.pNormalPopup = NULL;
+
+       pEntry = ap->mf_MainWindow.pEntry;
+       elm_entry_cursor_end_set(ap->mf_MainWindow.pEntry);
+
+       elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_TRUE);
+       MF_TRACE_END;
+
+}
+
+static void __mf_callback_refresh_rename(void *data, GString *pre_name, GString *new_name)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(pre_name == NULL, "pre_name is NULL");
+       mf_retm_if(pre_name->str == NULL, "pre_name->str is NULL");
+       mf_retm_if(new_name == NULL, "new_name is NULL");
+       mf_retm_if(new_name->str == NULL, "new_name->str is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       mfItemData_s *item_data = NULL;
+
+       item_data = elm_object_item_data_get(ap->mf_FileOperation.rename_item);
+       if (item_data == NULL) {
+               return;
+       }
+
+       if (g_string_equal(item_data->m_ItemName, pre_name)) {
+               g_string_free(item_data->m_ItemName, TRUE);
+               item_data->m_ItemName = g_string_new(new_name->str);
+               elm_object_item_data_set(ap->mf_FileOperation.rename_item, item_data);
+               elm_genlist_item_update(ap->mf_FileOperation.rename_item);
+               if (ap->mf_Status.view_type == mf_view_root_category) {
+                       mf_util_update_item_from_list_by_name(&ap->mf_FileOperation.category_list, pre_name->str, new_name->str);
+               }
+       }
+       mf_callback_destory_rename(ap);
+}
+
+void mf_callback_destory_rename(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is null");
+
+       if (ap->mf_Status.more != MORE_RENAME) {
+               return;
+       }
+
+       myfileNaviBar *pNavi_toshow = NULL;
+       pNavi_toshow = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_toshow == NULL, "get navi in use failed");
+
+       ap->mf_Status.more = ap->mf_Status.preMore;
+       elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_FALSE);
+       if (ap->mf_FileOperation.file_name_suffix != NULL) {
+               SAFE_FREE_CHAR(ap->mf_FileOperation.file_name_suffix);
+       }
+       if (ap->mf_FileOperation.to_rename) {
+               SAFE_FREE_GSTRING(ap->mf_FileOperation.to_rename);
+       }
+       if (ap->mf_FileOperation.rename_item) {
+               elm_genlist_item_flip_set(ap->mf_FileOperation.rename_item, EINA_FALSE);
+               elm_genlist_item_select_mode_set(ap->mf_FileOperation.rename_item,  ELM_OBJECT_SELECT_MODE_DEFAULT);
+               elm_genlist_item_update(ap->mf_FileOperation.rename_item);
+               ap->mf_FileOperation.rename_item = NULL;
+       }
+
+       if (ap->mf_MainWindow.pEntry) {
+               ap->mf_MainWindow.pEntry = NULL;
+       }
+
+       if (ap->mf_Status.preMore == MORE_DEFAULT) {
+               mf_navi_bar_set_upper_item_disable(ap, FALSE);
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_DEFAULT_ALL, FALSE);
+               //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_DEFAULT_ALL, FALSE);
+       } else {
+               int count_dir = 0;
+               int count_file = 0;
+               ap->mf_Status.flagFolderSelect = FALSE;
+               ap->mf_Status.flagFileSelect = FALSE;
+               if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+                       Evas_Object *pGenlist = ap->mf_MainWindow.pEditView.pGenlist;
+                       mf_genlist_genlist_item_select(ap, pGenlist, &count_file, &count_dir);
+
+               } else {
+                       Evas_Object *pGengrid = ap->mf_MainWindow.pEditView.pGengrid;
+                       mf_gengrid_item_select(ap, pGengrid, &count_file, &count_dir);
+               }
+
+               if (ap->mf_Status.flagFolderSelect) {
+                       mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_EDIT_ALL, true);
+                       mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_USER_FOLDER_SEL, false);
+               } else if (ap->mf_Status.flagFileSelect){
+                       mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_EDIT_ALL, false);
+               } else {
+                       mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_EDIT_ALL, true);
+               }
+       }
+       MF_TRACE_END;
+}
+
+
+/******************************
+** Prototype    : mf_callback_rename_save_cb
+** Description  :
+** Input        : void *ad
+**                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_callback_rename_save_cb(void *ad, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)ad;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       char *name = NULL;
+       Evas_Object *pEntry = NULL;
+       const char *entry_data = NULL;
+       int ret = MYFILE_ERR_NONE;
+       const char *message = NULL;
+       GString *from = NULL;
+       GString *to = NULL;
+       char *pFullPath = NULL;
+       char *pName = NULL;
+       if (ap->mf_Status.more != MORE_RENAME && ap->mf_Status.more != MORE_THUMBNAIL_RENAME) {
+               MF_TRACE_END;
+               return;
+       }
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               MF_TRACE_END;
+               return;
+       }
+
+       pEntry = ap->mf_MainWindow.pEntry;
+       if (pEntry == NULL && ap->mf_Status.more == MORE_RENAME) {
+               mf_callback_destory_rename(ap);
+               MF_TRACE_END;
+               return;
+       }
+       entry_data = elm_entry_entry_get(pEntry);
+       if (entry_data) {
+               name = elm_entry_markup_to_utf8(entry_data);
+               if (name == NULL) {
+                       message = GET_STR(MF_RENAME_MSG_GET_NAME_FAILED);
+                       goto INVAILD_NAME_EXIT;
+               }
+               if (strlen(name) == 0 && ap->mf_Status.more == MORE_THUMBNAIL_RENAME)
+               {
+                       SAFE_FREE_CHAR(name);
+                       message = GET_STR(MF_MSG_GET_NAME_FAILED);
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_TWO_BTN, NULL, message,
+                                                                              GET_SYS_STR(MF_BUTTON_LABEL_YES), GET_SYS_STR(MF_BUTTON_LABEL_NO), NULL,
+                                                                              mf_callback_illegal_char_popup_cb, ap);
+                       return;
+               }
+       } else {
+               message = GET_STR(MF_RENAME_MSG_GET_NAME_FAILED);
+               goto INVAILD_NAME_EXIT;
+       }
+
+       if (strlen(name)) {
+
+               if (ap->mf_FileOperation.file_name_suffix != NULL && strlen(ap->mf_FileOperation.file_name_suffix) > 0) {
+                       pName = g_strconcat(name, ".", ap->mf_FileOperation.file_name_suffix, NULL);
+                       CHAR_CHECK_NULL_GOTO(pName, ALLOC_FAILED_EXIT);
+               } else {
+                       pName = g_strdup(name);
+                       CHAR_CHECK_NULL_GOTO(pName, ALLOC_FAILED_EXIT);
+               }
+
+               GString *parent_path = mf_fm_svc_wrapper_get_file_parent_path(ap->mf_FileOperation.to_rename);
+               GSTRING_CHECK_NULL_GOTO(parent_path, ALLOC_FAILED_EXIT);
+               pFullPath = g_strconcat(parent_path->str, "/", pName, NULL);
+               CHAR_CHECK_NULL_GOTO(pFullPath, ALLOC_FAILED_EXIT);
+               SAFE_FREE_GSTRING(parent_path);
+
+               switch (mf_util_is_valid_name_check(pName)) {
+
+               case MF_INTERNAL_FILE_NAME_EMPTY:
+               case MF_INTERNAL_FILE_NAME_IGNORE:
+                       message = GET_STR(MF_MSG_SET_NAME_DOT);
+                       goto INVAILD_NAME_EXIT;
+               case MF_INTERNAL_FILE_NAME_CHUG:
+                       message = GET_STR(MF_MSG_SET_NAME_ALL_SPACE);
+                       goto INVAILD_NAME_EXIT;
+               case MF_INTERNAL_FILE_NAME_MAX_LENGTH:
+                       message = GET_STR(MF_MSG_NAME_REACH_MAX_LEN);
+                       goto INVAILD_NAME_EXIT;
+               case MF_INTERNAL_FILE_NAME_INVALID_CHAR:
+                       message = GET_STR(MF_MSG_ILLEGAL_CHAR);
+                       goto INVAILD_NAME_EXIT;
+               case MF_INTERNAL_FILE_NAME_NULL:
+                       message = GET_STR(MF_MSG_NO_NAME_WARNING);
+                       goto INVAILD_NAME_EXIT;
+               default:
+                       break;
+               }
+
+
+               if (strlen(pFullPath) > MYFILE_FILE_PATH_LEN_MAX) {
+                       message = GET_STR(MF_MSG_PATH_REACH_MAX_LEN);
+                       goto INVAILD_NAME_EXIT;
+               }
+
+               from = g_string_new(ap->mf_FileOperation.to_rename->str);
+               GSTRING_CHECK_NULL_GOTO(from, ALLOC_FAILED_EXIT);
+               to = g_string_new(pFullPath);
+               GSTRING_CHECK_NULL_GOTO(from, ALLOC_FAILED_EXIT);
+
+               if (!g_string_equal(from, to)) {
+                       ret = mf_fm_svc_wrapper_rename_service(ap, from, to);
+                       if (ret != MYFILE_ERR_NONE) {
+                               if (errno == EROFS) {
+                                       message = GET_STR(MF_MSG_OPER_READ_ONLY);
+                                       goto INVAILD_NAME_EXIT;
+                               } else if (ret == MYFILE_ERR_INVALID_DIR_NAME || ret == MYFILE_ERR_INVALID_FILE_NAME) {
+                                       message = GET_STR(MF_MSG_ILLEGAL_CHAR);
+                                       goto INVAILD_NAME_EXIT;
+                               } else if (ret == MYFILE_ERR_DUPLICATED_NAME) {
+                                       message = GET_STR(MF_RENAME_MSG_DUP_NAME);
+                                       goto INVAILD_NAME_EXIT;
+                               } else {
+                                       message = GET_STR(MF_MSG_UNKNOW_REASON_RENAME_FAILED);
+                                       goto INVAILD_NAME_EXIT;
+                               }
+                       } else {
+                               if (ap->mf_Status.more == MORE_RENAME)
+                                       __mf_callback_refresh_rename(ap, from, to);
+                               else if (ap->mf_Status.more == MORE_THUMBNAIL_RENAME){
+#ifdef MYFILE_SPLIT_VIEW
+                                       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                               mf_navi_bar_reset_panes_main(ap);
+                                       }
+#endif
+                                       ap->mf_Status.more = MORE_DEFAULT;
+                                       ap->mf_Status.preMore = MORE_THUMBNAIL_RENAME;
+                                       elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_FALSE);
+                                       evas_object_del(ap->mf_MainWindow.pEntry);
+                                       ap->mf_MainWindow.pEntry = NULL;
+                                       mf_widget_imf_hide_callback_del(ap->mf_MainWindow.pConformant);
+                                       if (ap->mf_Status.view_type == mf_view_root_category) {
+                                               mf_util_update_item_from_list_by_name(&ap->mf_FileOperation.category_list, from->str, to->str);
+                                       }
+
+                                       mf_widget_refresh_view(ap);
+                                       ap->mf_Status.preMore = MORE_DEFAULT;
+                               }
+                               goto NORMAL_EXIT;
+                       }
+               } else {
+
+                       if (ap->mf_Status.more == MORE_RENAME)
+                               mf_callback_destory_rename(ap);
+                       else if (ap->mf_Status.more == MORE_THUMBNAIL_RENAME){
+                               mf_callback_cancel_cb(ap, NULL, NULL);
+                       }
+                       goto NORMAL_EXIT;
+               }
+       }else {
+               mf_callback_destory_rename(ap);
+               goto NORMAL_EXIT;
+       }
+NORMAL_EXIT:
+       SAFE_FREE_CHAR(name);
+       SAFE_FREE_CHAR(pName);
+       SAFE_FREE_CHAR(pFullPath);
+       SAFE_FREE_GSTRING(from);
+       SAFE_FREE_GSTRING(to);
+       MF_TRACE_END;
+       return;
+
+INVAILD_NAME_EXIT:
+       SAFE_FREE_CHAR(name);
+       SAFE_FREE_CHAR(pName);
+       SAFE_FREE_CHAR(pFullPath);
+       SAFE_FREE_GSTRING(from);
+       SAFE_FREE_GSTRING(to);
+
+       if (ap->mf_Status.more == MORE_THUMBNAIL_RENAME)
+       {
+               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_TWO_BTN, NULL, message,
+                                                                      GET_SYS_STR(MF_BUTTON_LABEL_YES), GET_SYS_STR(MF_BUTTON_LABEL_NO), NULL,
+                                                                      mf_callback_illegal_char_popup_cb, ap);
+               return;
+       } else {
+               mf_callback_destory_rename(ap);
+               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message, NULL, NULL, NULL, mf_popup_show_vk_cb, ap);
+       }
+
+       MF_TRACE_END;
+       return;
+
+ALLOC_FAILED_EXIT:
+       SAFE_FREE_CHAR(name);
+       SAFE_FREE_CHAR(pName);
+       SAFE_FREE_CHAR(pFullPath);
+       SAFE_FREE_GSTRING(from);
+       mf_util_operation_alloc_failed(ap);
+       MF_TRACE_END;
+       return;
+
+}
+
+
+/******************************
+** Prototype    : mf_callback_save_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_callback_save_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       int ret = 0;
+       int noContentFlag = 0;
+       const char *message = NULL;
+       const char *left_label = NULL;
+       const char *right_label = NULL;
+
+       if (ap->mf_Status.more == MORE_RENAME || ap->mf_Status.more == MORE_THUMBNAIL_RENAME) {
+               mf_callback_rename_save_cb(ap, NULL, NULL);
+               if (ap->mf_Status.more == MORE_THUMBNAIL_RENAME) {
+                       mf_callback_imf_state_callback_del(ap);
+               }
+       } else if (ap->mf_Status.more == MORE_CREATE_FOLDER) {
+               {
+                       const char *entry_data = NULL;
+                       char *name = NULL;
+
+                       /*hide IMF*/
+                       if (ap->mf_MainWindow.pEntry != NULL) {
+                               Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(ap->mf_MainWindow.pEntry);
+                               if (imf_context != NULL)
+                                       ecore_imf_context_hide(imf_context);
+                       }
+
+                       entry_data = elm_entry_entry_get(ap->mf_MainWindow.pEntry);
+
+                       if (entry_data) {
+                               name = elm_entry_markup_to_utf8(entry_data);
+                       } else {
+                               message = GET_STR(MF_MSG_GET_NAME_FAILED);
+                               left_label = GET_SYS_STR(MF_BUTTON_LABEL_YES);
+                               right_label = GET_SYS_STR(MF_BUTTON_LABEL_NO);
+                               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_TWO_BTN, NULL, message,
+                                                                                      left_label, right_label, NULL,
+                                                                                      mf_callback_illegal_char_popup_cb, ap);
+                               return;
+                       }
+
+                       if (name == NULL)
+                               return;
+
+                       ret = __mf_callback_ime_mkdir_cb(ap, name);
+                       if (ret == 0) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                                               mf_navi_bar_reset_panes_main(ap);
+                                       }
+                               }
+#endif
+                               ap->mf_Status.more = ap->mf_Status.preMore;
+                               elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_FALSE);
+                               evas_object_del(ap->mf_MainWindow.pEntry);
+                               ap->mf_MainWindow.pEntry = NULL;
+                               mf_widget_imf_hide_callback_del(ap->mf_MainWindow.pConformant);
+
+                               mf_widget_refresh_view(ap);
+                       mf_callback_imf_state_callback_del(ap);
+
+                               if (ap->mf_Status.more == MORE_DEFAULT && noContentFlag) {
+                                       mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_NOCONTENT_VIEW, false);
+                                       //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_NOCONTENT_VIEW, false);
+                               }
+                       }
+
+                       if (name != NULL) {
+                               free(name);
+                               name = NULL;
+                       }
+               }
+       }
+}
+
+
+void mf_callback_popup_deleted_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       if (ap->mf_MainWindow.pNormalPopup != NULL) {
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+       }
+       ap->mf_MainWindow.pNormalPopup = NULL;
+
+}
+
+/******************************
+** Prototype    : mf_callback_launch_send_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_callback_launch_send_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       {
+               if (ap->mf_FileRecordList.selected_files && mf_util_get_eina_list_len(ap->mf_FileRecordList.selected_files) > 0) {
+                       switch (ap->mf_Status.more) {
+                       case MORE_SENDVIABLUETOOTH:
+                       case MORE_SENDVIAEMAIL:
+                       case MORE_SENDVIAMESSAGE:
+                               mf_share_launch_multi_file(data);
+                               break;
+                       default:
+                               break;
+                       }
+               } else {
+                       const char *message = GET_SYS_STR(MF_LABEL_NOTHING_SELECTED);
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message, NULL, NULL, NULL, NULL, NULL);
+               }
+       }
+       ap->mf_Status.more = MORE_SHARE_EDIT;
+}
+
+/******************************
+** Prototype    : __mf_callback_idle_launch_send_cb
+** 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_callback_idle_launch_send_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       mf_callback_launch_send_cb(ap, NULL, NULL);
+       return 0;
+}
+
+
+/******************************
+** Prototype    : mf_callback_send_view_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_callback_send_response_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       if (ap->mf_MainWindow.pContextPopup != NULL) {
+               evas_object_del(ap->mf_MainWindow.pContextPopup);
+       }
+       ap->mf_MainWindow.pContextPopup = NULL;
+
+       __mf_callback_idle_launch_send_cb(ap);
+}
+
+
+/******************************
+** Prototype    : __mf_callback_refresh_list_by
+** 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_callback_refresh_list_by(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       Evas_Object *playout = ap->mf_MainWindow.pNaviLayout;
+       mf_retvm_if(playout == NULL, 0, "get conformant failed");
+       Evas_Object *newContent = NULL;
+#ifdef MYFILE_SPLIT_VIEW
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               mf_split_view_left_genlist_refresh(ap);
+       }
+#endif
+
+       if (ap->mf_Status.flagNoContent != EINA_TRUE) {
+               newContent = mf_navi_bar_content_create(ap);
+               mfNaviBarSetContent(ap, playout, newContent);
+       }
+       ap->mf_Status.more = MORE_DEFAULT;
+       return 0;
+}
+
+/******************************
+** Prototype    : __mf_callback_list_by_response_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_callback_list_by_response_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       if (ap->mf_MainWindow.pNormalPopup != NULL) {
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+       }
+       ap->mf_MainWindow.pNormalPopup = NULL;
+
+       ecore_idler_add((Ecore_Task_Cb) __mf_callback_refresh_list_by, ap);
+
+}
+
+/******************************
+** Prototype    : mf_callback_list_by_view_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_callback_list_by_view_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TITLE_LIST_BTN, GET_STR(LABEL_SORT_BY),
+                                                              NULL, NULL, NULL, NULL, mf_callback_popup_deleted_cb, ap);
+}
+
+/******************************
+** Prototype    : mf_callback_edit_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
+**
+******************************/
+#ifdef MYFILE_SPLIT_VIEW
+static void __mf_callback_edit_init(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata*)data;
+       //ap->mf_MainWindow.pEditView.pBox = NULL;
+       ap->mf_MainWindow.pEditView.pGenlist = NULL;
+       ap->mf_MainWindow.pEditView.pGengrid = NULL;
+       //ap->mf_MainWindow.pEditView.pSelectAllCheckBox = NULL;
+       //ap->mf_MainWindow.pEditView.pSelectAllLayout = NULL;
+       //ap->mf_MainWindow.pEditView.pPathInfo = NULL;
+       //ap->mf_MainWindow.pEditView.pInfoBox = NULL;
+       ap->mf_MainWindow.pEditView.bSelectAllChecked = FALSE;;
+       ap->mf_MainWindow.pEditView.iTotalCount = 0;
+       ap->mf_MainWindow.pEditView.iCheckedCount = 0;
+       MF_TRACE_END;
+}
+
+#endif
+
+static void __mf_callback_set_select_all_total_count(void *data)
+{
+
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata*)data;
+       int folder_len = 0;
+       int file_len = 0;
+
+       folder_len = eina_list_count(ap->mf_FileOperation.folder_list);
+       file_len = eina_list_count(ap->mf_FileOperation.file_list);
+       if (ap->mf_Status.more == MORE_EDIT) {
+               ap->mf_MainWindow.pEditView.iTotalCount = (folder_len + file_len);
+       } else if (ap->mf_Status.more == MORE_SHARE_EDIT) {
+               ap->mf_MainWindow.pEditView.iTotalCount = file_len;
+       }
+}
+
+static void __mf_callback_save_edit_view_status(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata*)data;
+       myfileNaviBar *pNavi_s = NULL;
+       Eina_List *l = NULL;
+       void *item = NULL;
+       /*backup the edit point for every navigation bar to get recovery */
+       EINA_LIST_FOREACH(ap->mf_MainWindow.plistNaviBar, l, item) {
+               pNavi_s = (myfileNaviBar *) item;
+               if(pNavi_s == NULL)
+                       continue;
+
+               if (pNavi_s->pre_operation.path != NULL)
+                       g_string_free(pNavi_s->pre_operation.path, TRUE);
+                       pNavi_s->pre_operation.path = g_string_new(pNavi_s->pCurrentPath);
+
+               if (pNavi_s->naviFlagInUse == TRUE) {
+                       pNavi_s->naviFlagEditStart = TRUE;
+               } else {
+                       pNavi_s->naviFlagEditStart = FALSE;
+               }
+       }
+       ap->mf_Status.preViewType = ap->mf_Status.view_type;
+
+       MF_TRACE_END;
+}
+
+
+void mf_callback_edit_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+
+       Evas_Object *btn = (Evas_Object *)obj;
+       const char *label = elm_object_text_get(btn);
+
+       if (g_strcmp0(label, GET_SYS_STR(MF_LABEL_EDIT)) == 0 ) {
+               ap->mf_Status.more = MORE_EDIT;
+
+       } else if (g_strcmp0(label, GET_SYS_STR(LABEL_SHARE)) == 0 ) {
+               ap->mf_Status.more = MORE_SHARE_EDIT;
+       } else {
+               return;
+       }
+
+
+       mf_callback_remove_dir_watch();
+#ifdef MYFILE_SPLIT_VIEW
+       __mf_callback_edit_init(ap);
+#endif
+       /*backup the edit point for every navigation bar to get recovery */
+       __mf_callback_save_edit_view_status(ap);
+#ifdef MYFILE_USB_OTG
+       /* if start from OTG, set node editstart flag */
+       if (mf_fm_svc_wrapper_get_location(ap->mf_Status.path->str)== MYFILE_OTG) {
+               char *dev_in_use = mf_otg_get_node_in_use(ap);
+               mf_otg_set_node_editstart_flag(ap, dev_in_use, TRUE);
+       }
+#endif
+
+       mf_navi_bar_create_edit_view(ap);
+
+       mf_navi_bar_edit_list_update(ap);
+
+       __mf_callback_set_select_all_total_count(ap);
+       ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_FALSE;
+       //elm_check_state_pointer_set(ap->mf_MainWindow.pEditView.pSelectAllCheckBox, &ap->mf_MainWindow.pEditView.bSelectAllChecked);
+
+       /*disable all the tab item if tab exists */
+       MF_TRACE_END;
+}
+
+
+/******************************
+** Prototype    : mf_callback_icu_update_cb
+** Description  :
+** Input        : void *data
+** Output       : int
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2011/06/30
+**    Author       : Samsung
+**    Modification : Created function
+**/
+void mf_callback_icu_update_cb(void *data)
+{
+       ug_send_event(UG_EVENT_REGION_CHANGE);
+
+       mf_debug("region changed");
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.flagIcuInit == FALSE)
+               return;
+       /* finalize the previous icu session */
+       mf_util_icu_finalize(ap);
+       /* start a new icu session*/
+       mf_util_icu_init(ap);
+       /* check if we should refresh the list */
+       int iSortTypeValue = 0;
+       mf_util_get_vconf_value(VCONF_TYPE_SORT_TYPE, &iSortTypeValue);
+       if (iSortTypeValue != MYFILE_SORT_BY_DATE_R2O && iSortTypeValue != MYFILE_SORT_BY_DATE_O2R) {
+               return ;
+       }
+
+       if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE)
+               return ;
+
+       myfileNaviBar *pNaviInUse = mf_navi_bar_get_in_use(ap);
+       if (pNaviInUse == NULL || ap->mf_MainWindow.pNaviLayout == NULL)
+               return ;
+
+       /*get current genlist */
+       Evas_Object *currgenlist = ap->mf_MainWindow.pNaviGenlist;
+       if (currgenlist == NULL)
+               return ;
+
+       evas_object_del(currgenlist);
+       /*create new genlist */
+       Evas_Object *newgenlist = mf_navi_bar_content_create(ap);
+       mfNaviBarSetContent(ap, ap->mf_MainWindow.pNaviLayout, newgenlist);
+
+       return ;
+}
+
+
+/******************************
+** Prototype    : mf_callback_new_folder_create_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_callback_new_folder_create_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+
+       if (ap->mf_Status.more == MORE_CREATE_FOLDER)
+               return;
+       {
+               int ret = 0;
+               if (ap->mf_Status.folder_count >= MAX_FOLDER_COUNT) {
+                       const char *message = GET_STR(MF_MSG_FOLDER_NUM_MAX);
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message, NULL, NULL, NULL, NULL, NULL);
+                       return;
+               }
+               ap->mf_Status.preMore = ap->mf_Status.more;
+               ap->mf_Status.more = MORE_CREATE_FOLDER;
+
+               ret = mf_util_check_disk_space(ap);
+               if (ret == MYFILE_ERR_NO_FREE_SPACE) {
+                       ap->mf_Status.more = MORE_DEFAULT;
+                       return;
+               }
+
+               mf_navi_bar_create_new_folder_view(ap);
+               mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+       }
+
+}
+
+
+void mf_callback_rename_create_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       mfItemData_s *params = (mfItemData_s *) data;
+       struct appdata *ap = (struct appdata *)params->ap;
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+
+       if (ap->mf_Status.more == MORE_THUMBNAIL_RENAME)
+               return;
+       mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout, "sel_contents");
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pLabelLayout);
+       int ret = 0;
+
+       ap->mf_Status.preMore = ap->mf_Status.more;
+       ap->mf_Status.more = MORE_THUMBNAIL_RENAME;
+
+       ret = mf_util_check_disk_space(ap);
+
+       mf_navi_bar_create_rename_view(params);
+       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+       MF_TRACE_END;
+
+}
+
+void mf_callback_max_len_reached_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       mf_popup_indicator_popup(ap, mf_util_get_text(MF_LABEL_MAX_CHARACTER_REACHED));
+       MF_TRACE_END;
+}
+
+
+
+
+/******************************
+** Prototype    : mf_callback_init_operation_cancel
+** 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_callback_init_operation_cancel(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (ap->mf_FileOperation.pCancel) {
+               mf_cancel_free(ap->mf_FileOperation.pCancel);
+               ap->mf_FileOperation.pCancel = NULL;
+       }
+
+       ap->mf_FileOperation.pCancel = mf_cancel_new();
+       MF_TRACE_END;
+}
+
+/******************************
+** Prototype    : __mf_callback_idle_refresh
+** Description  : Samsung
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static int __mf_callback_idle_refresh(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, 0, "ap is NULL");
+       mf_util_refresh_screen(ap);
+
+       MF_TRACE_END;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+
+/******************************
+** Prototype    : __mf_callback_progress_bar_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
+**
+******************************/
+static void __mf_callback_progress_bar_state_cb(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       mf_fo_msg *msg = ap->mf_FileOperation.pMessage;
+       char lable[10] = { '\0', };
+       double value = 0.0;
+       char count_label[10] = { '\0' };
+       int count = 0;
+       int total_count = 0;
+       Evas_Object *layout = ap->mf_MainWindow.pProgressLayout;
+       mf_retm_if(layout == NULL, "layout is NULL");
+
+       value = (double)msg->current_size / msg->total_size;
+       elm_progressbar_value_set(ap->mf_FileOperation.progress_bar, value);
+
+       snprintf(lable, sizeof(lable), "%d%s", (int)(value * 100), "%");
+
+       edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text.left", lable);
+
+
+       total_count = ap->mf_FileOperation.iTotalCount;
+       count = msg->current_index;
+
+       if (count <= total_count) {
+               snprintf(count_label, sizeof(count_label), "%d/%d", count, total_count);
+       }
+       edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text.right", count_label);
+
+       MF_TRACE_END;
+}
+
+
+
+/******************************
+** Prototype    : mf_callback_progress_bar_cancel_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_callback_progress_bar_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       mf_cancel_do_cancel(ap->mf_FileOperation.pCancel);
+       mf_msg_request_handled_send();
+
+       MF_TRACE_END;
+}
+
+
+/******************************
+** Prototype    : mfCopyCB
+** 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_callback_copy_move_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       mf_retm_if(event_info == NULL, "event_info is NULL");
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       const char *label = elm_object_item_text_get(item);
+
+       printf("label is [%s]\n", label);
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+       if (label) {
+               ap->mf_Status.flagFolderSelect = FALSE;
+               ap->mf_Status.flagFileSelect = FALSE;
+
+               if (ap->mf_FileRecordList.value_saver != NULL) {
+                       mf_util_free_eina_list_with_data(&ap->mf_FileRecordList.value_saver, MYFILE_TYPE_GSTRING);
+                       ap->mf_FileRecordList.value_saver = NULL;
+               }
+               ap->mf_FileRecordList.value_saver = mf_util_get_all_selected(ap);
+
+               if (mf_util_get_eina_list_len(ap->mf_FileRecordList.value_saver) < 1) {
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_BTN, NULL, GET_SYS_STR(MF_LABEL_NOTHING_SELECTED),
+                                                                              GET_SYS_STR(MF_BUTTON_LABEL_OK), NULL, NULL, mf_callback_warning_popup_cb, ap);
+                       return;
+               }
+
+               if (ap->mf_FileOperation.source != NULL) {
+                       g_string_free(ap->mf_FileOperation.source, TRUE);
+                       ap->mf_FileOperation.source = NULL;
+               }
+               ap->mf_FileOperation.source = g_string_new(ap->mf_Status.path->str);
+               if (g_strcmp0(label, GET_SYS_STR(LABEL_MOVE)) == 0) {
+                       ap->mf_Status.more = MORE_INTERNAL_MOVE;
+               } else if (g_strcmp0(label, GET_SYS_STR(LABEL_COPY)) == 0) {
+                       ap->mf_Status.more = MORE_INTERNAL_COPY;
+               } else {
+                       return;
+               }
+
+               if (ap->mf_MainWindow.pLabelLayout) {
+                       mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout, "sel_contents");
+                       if (ap->mf_MainWindow.pLabelLayout)
+                               evas_object_del(ap->mf_MainWindow.pLabelLayout);
+                       ap->mf_MainWindow.pLabelLayout = NULL;
+               }
+               /*pop select view*/
+               /*set Navigation Bar for Destination selection */
+               ap->mf_Status.view_type = mf_view_root;
+#ifdef MYFILE_SPLIT_VIEW
+               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                       mf_split_view_unset_right_content(ap);
+                       mf_widget_unset_main_layout_content(ap->mf_MainWindow.pMainLayout);
+                       mf_split_view_hide(ap);
+                       evas_object_show(ap->mf_MainWindow.pMainLayout);
+                       elm_object_part_content_set(ap->mf_MainWindow.pMainLayout, "elm.swallow.content", ap->mf_MainWindow.pNaviBar);
+               }
+#endif
+               mf_widget_refresh_view(ap);
+       }
+       MF_TRACE_END;
+}
+
+
+/******************************
+** Prototype    : mf_callback_paste_here_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_callback_paste_here_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       int source_len = 0;
+       int dest_len = 0;
+       GList *pSourceList = NULL;
+       int count = 0;
+       gchar *pDestPath = NULL;
+
+       mf_retm_if(ap->mf_FileOperation.source == NULL, "ap->mf_FileOperation.source is NULL");
+       mf_retm_if(ap->mf_FileOperation.source->str == NULL, "ap->mf_FileOperation.source is NULL");
+
+       mf_retm_if(ap->mf_Status.path == NULL, "ap->mf_Status.path is NULL");
+       mf_retm_if(ap->mf_Status.path->str == NULL, "ap->mf_Status.path->str is NULL");
+
+       ap->mf_Status.more = MORE_DATA_COPYING;
+       ap->mf_FileOperation.destination = ap->mf_Status.path;
+
+       if (ap->mf_FileOperation.source && ap->mf_FileOperation.source->str) {
+               source_len = strlen(ap->mf_FileOperation.source->str);
+       }
+
+       if (ap->mf_FileOperation.destination && ap->mf_FileOperation.destination->str) {
+               dest_len = strlen(ap->mf_FileOperation.destination->str);
+       }
+
+       if (source_len == 0 || dest_len == 0) {
+               MF_TRACE_END;
+               return;
+       }
+       /*glib api change */
+
+       if (!mf_util_check_forbidden_operation(ap)) {
+               return;
+       }
+       if (source_len == dest_len && strcmp(ap->mf_FileOperation.destination->str, ap->mf_FileOperation.source->str) == 0) {
+               ap->mf_FileOperation.refresh_type = TRUE;
+       } else {
+               ap->mf_FileOperation.refresh_type = FALSE;
+       }
+
+       mf_util_merge_eina_list_to_glist(ap->mf_FileRecordList.value_saver, &pSourceList);
+
+       if (pSourceList) {
+               count = g_list_length(pSourceList);
+       } else {
+               MF_TRACE_END;
+               return;
+       }
+
+       ap->mf_FileOperation.iTotalCount = count;
+       pDestPath = g_strdup(ap->mf_Status.path->str);
+       if (pDestPath == NULL) {
+               g_list_free(pSourceList);
+               pSourceList = NULL;
+               MF_TRACE_END;
+               return;
+       }
+
+       mf_callback_init_operation_cancel(ap);
+       ap->mf_FileOperation.iRequestType = MF_REQ_NONE;
+
+       ap->mf_FileOperation.pSourceList = pSourceList;
+
+       if (mf_copy_copy_items(pSourceList, pDestPath, ap->mf_FileOperation.pCancel, TRUE, ap) == 0) {
+               ap->mf_FileOperation.iOperationSuccessFlag = TRUE;
+               mf_callback_remove_dir_watch();
+               ap->mf_MainWindow.pProgressPopup = mf_popup_create_pb_popup(ap, GET_SYS_STR(MF_MSG_COPYING), count, mf_callback_progress_bar_cancel_cb, ap);
+       } else {
+               mf_util_exception_func(ap);
+       }
+
+       g_free(pDestPath);
+       pDestPath = NULL;
+
+       MF_TRACE_END;
+}
+
+
+/******************************
+** Prototype    : mf_move_here_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_callback_move_here_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       int source_len = 0;
+       int dest_len = 0;
+       GList *pSourceList = NULL;
+       int count = 0;
+       gchar *pDestPath = NULL;
+
+       mf_retm_if(ap->mf_FileOperation.source == NULL, "ap->mf_FileOperation.source is NULL");
+       mf_retm_if(ap->mf_FileOperation.source->str == NULL, "ap->mf_FileOperation.source is NULL");
+
+       mf_retm_if(ap->mf_Status.path == NULL, "ap->mf_Status.path is NULL");
+       mf_retm_if(ap->mf_Status.path->str == NULL, "ap->mf_Status.path->str is NULL");
+       ap->mf_Status.more = MORE_DATA_MOVING;
+
+       ap->mf_FileOperation.destination = ap->mf_Status.path;
+
+       if (ap->mf_FileOperation.source && ap->mf_FileOperation.source->str) {
+               source_len = strlen(ap->mf_FileOperation.source->str);
+       }
+
+       if (ap->mf_FileOperation.destination && ap->mf_FileOperation.destination->str) {
+               dest_len = strlen(ap->mf_FileOperation.destination->str);
+       }
+
+       if (source_len == 0 || dest_len == 0) {
+               MF_TRACE_END;
+               return;
+       }
+       /*glib api change */
+       if (!mf_util_check_forbidden_operation(ap)) {
+               return;
+       } else {
+               ap->mf_FileOperation.refresh_type = FALSE;
+       }
+
+       mf_util_merge_eina_list_to_glist(ap->mf_FileRecordList.value_saver, &pSourceList);
+
+       if (pSourceList) {
+               count = g_list_length(pSourceList);
+       } else {
+               MF_TRACE_END;
+               return;
+       }
+
+       ap->mf_FileOperation.iTotalCount = count;
+       pDestPath = g_strdup(ap->mf_Status.path->str);
+       if (pDestPath == NULL) {
+               g_list_free(pSourceList);
+               pSourceList = NULL;
+               MF_TRACE_END;
+               return;
+       }
+
+       mf_callback_init_operation_cancel(ap);
+       ap->mf_FileOperation.iRequestType = MF_REQ_NONE;
+
+       ap->mf_FileOperation.pSourceList = pSourceList;
+       if (mf_move_move_items(pSourceList, pDestPath, ap->mf_FileOperation.pCancel, true, ap) == 0) {
+               ap->mf_FileOperation.iOperationSuccessFlag = TRUE;
+               mf_callback_remove_dir_watch();
+               ap->mf_MainWindow.pProgressPopup = mf_popup_create_pb_popup(ap, GET_SYS_STR(MF_MSG_MOVING), count, mf_callback_progress_bar_cancel_cb, ap);
+       } else {
+               mf_util_exception_func(ap);
+       }
+       g_free(pDestPath);
+       pDestPath = NULL;
+}
+
+/******************************
+** Prototype    : __mf_callback_confirm_delete
+** 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
+**
+******************************/
+static void __mf_callback_confirm_delete(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       Evas_Object *btn = (Evas_Object *)obj;
+       const char *label = elm_object_text_get(btn);
+
+       if (g_strcmp0(label, GET_SYS_STR(LABEL_CANCEL)) == 0 ) {
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+               ap->mf_MainWindow.pNormalPopup = NULL;
+               return;
+       } else if (g_strcmp0(label, GET_SYS_STR(LABEL_DELETE)) == 0) {
+               if (ap->mf_MainWindow.pNormalPopup) {
+                       evas_object_del(ap->mf_MainWindow.pNormalPopup);
+                       ap->mf_MainWindow.pNormalPopup = NULL;
+               }
+
+               if (ap->mf_MainWindow.pLabelLayout) {
+                       mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout, "sel_contents");
+                       if (ap->mf_MainWindow.pLabelLayout)
+                               evas_object_del(ap->mf_MainWindow.pLabelLayout);
+                       ap->mf_MainWindow.pLabelLayout = NULL;
+               }
+
+               ap->mf_FileOperation.refresh_type = TRUE;
+
+               /*setting item check */
+               Eina_List *selected_list = mf_util_get_all_selected(ap);
+
+               if (ap->mf_FileRecordList.value_saver != NULL) {
+                       mf_util_free_eina_list_with_data(&ap->mf_FileRecordList.value_saver, MYFILE_TYPE_GSTRING);
+                       ap->mf_FileRecordList.value_saver = NULL;
+               }
+               ap->mf_FileRecordList.value_saver = selected_list;
+
+               if (mf_util_get_eina_list_len(ap->mf_FileRecordList.value_saver) < 1) {
+                       ap->mf_MainWindow.pNormalPopup =
+                               mf_popup_create_popup(ap, POPMODE_TEXT_BTN, NULL, GET_SYS_STR(MF_LABEL_NOTHING_SELECTED),
+                                                     GET_SYS_STR(MF_BUTTON_LABEL_OK), NULL, NULL, mf_callback_warning_popup_cb, ap);
+               } else {
+                       GList *pSourceList = NULL;
+                       int count = 0;
+
+                       mf_util_merge_eina_list_to_glist(ap->mf_FileRecordList.value_saver, &pSourceList);
+                       if (pSourceList) {
+                               count = g_list_length(pSourceList);
+                       } else {
+                               MF_TRACE_END;
+                               return;
+                       }
+
+                       ap->mf_FileOperation.iTotalCount = count;
+                       mf_callback_init_operation_cancel(ap);
+                       ap->mf_Status.more = MORE_DELETE;
+                       ap->mf_FileOperation.iRequestType = MF_REQ_NONE;
+
+                       ap->mf_FileOperation.pSourceList = pSourceList;
+                       mf_callback_remove_dir_watch();
+
+                       if (mf_delete_items(pSourceList, ap->mf_FileOperation.pCancel, TRUE, ap) == 0) {
+                               ap->mf_FileOperation.iOperationSuccessFlag = TRUE;
+                               mf_callback_remove_dir_watch();
+                               ap->mf_MainWindow.pProgressPopup =
+                                       mf_popup_create_pb_popup(ap, GET_SYS_STR(MF_MSG_DELETING), count, mf_callback_progress_bar_cancel_cb, ap);
+                       } else {
+                               mf_util_exception_func(ap);
+                       }
+               }
+       }
+}
+
+/******************************
+** Prototype    : mf_callback_delete_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_callback_delete_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+       mf_debug("delete clicked\n");
+       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TITLE_TEXT_TWO_BTN,
+                                                              NULL,
+                                                              GET_SYS_STR(MF_BUTTON_LABEL_DEL),
+                                                              GET_SYS_STR(LABEL_DELETE), GET_SYS_STR(LABEL_CANCEL), NULL, __mf_callback_confirm_delete, ap);
+}
+
+
+/******************************
+** Prototype    : mf_callback_thread_pipe_cb
+** Description  :
+** 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_callback_operation_request_rename_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       mf_fo_request *request = ap->mf_FileOperation.pRequest;
+
+       if (ap->mf_MainWindow.pProgressPopup) {
+               evas_object_show(ap->mf_MainWindow.pProgressPopup);
+       }
+
+       ap->mf_FileOperation.iRequestType = MF_REQ_RENAME;
+       mf_request_set_result(request, MF_REQ_RENAME);
+       MF_TRACE_END;
+
+}
+
+void mf_callback_operation_request_replace_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       mf_fo_request *request = ap->mf_FileOperation.pRequest;
+
+       if (ap->mf_MainWindow.pProgressPopup) {
+               evas_object_show(ap->mf_MainWindow.pProgressPopup);
+       }
+
+       ap->mf_FileOperation.iRequestType = MF_REQ_MERGE;
+       if (ap->mf_FileOperation.refresh_type == TRUE) {
+               mf_request_set_result(request, MF_REQ_SKIP);
+       } else {
+               mf_request_set_result(request, MF_REQ_MERGE);
+       }
+       MF_TRACE_END;
+
+}
+
+void mf_callback_operation_request_cancel_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       mf_fo_request *request = ap->mf_FileOperation.pRequest;
+
+       if (ap->mf_MainWindow.pProgressPopup) {
+               evas_object_show(ap->mf_MainWindow.pProgressPopup);
+       }
+
+       mf_request_set_result(request, MF_REQ_CANCEL);
+       MF_TRACE_END;
+
+}
+
+
+void mf_callback_thread_pipe_cb(void *data, void *buffer, unsigned int nbyte)
+{
+       MF_TRACE_BEGIN;
+       mf_debug(":::::::::: Main thread id = %d ::::::::::", (int)pthread_self());
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       mf_fo_msg *pPipeMsg = (mf_fo_msg *) buffer;
+       char *message = NULL;
+       int error_type = 0;
+
+       if (!MYFILE_MAGIC_CHECK(pPipeMsg, MYFILE_MAGIC_PIPE_DATA)) {
+               mf_error(":::::::::::::p_pipe_data ERROR:::::::::::::");
+               return;
+       }
+       ap->mf_FileOperation.pMessage = pPipeMsg;
+       ap->mf_FileOperation.pRequest = pPipeMsg->request;
+       ap->mf_FileOperation.sync_pipe = pPipeMsg->pipe;
+       mf_debug("::::::::::: pPipeMsg->msg_type is [%d]", pPipeMsg->msg_type);
+
+       mf_util_set_pm_lock(ap, EINA_TRUE);
+       switch (pPipeMsg->msg_type) {
+       case MF_MSG_NONE:
+       case MF_MSG_SKIP:
+       case MF_MSG_SYNC:
+               mf_msg_request_handled_send();
+               break;
+       case MF_MSG_CANCELLED:
+               if (ap->mf_MainWindow.pProgressPopup) {
+                       evas_object_del(ap->mf_MainWindow.pProgressPopup);
+                       ap->mf_MainWindow.pProgressPopup = NULL;
+               }
+               ap->mf_MainWindow.pFinishPopup = mf_popup_create_popup(ap, POPMODE_TEXT_NOT_DISABLED, NULL,
+                                                                      "Canceling...", NULL, NULL, NULL, NULL, NULL);
+               mf_msg_request_handled_send();
+               ap->mf_FileOperation.iOperationSuccessFlag = FALSE;
+               break;
+       case MF_MSG_DOING:
+               if (ap->mf_Status.view_type == mf_view_root_category && (ap->mf_Status.more == MORE_DELETE || ap->mf_Status.more == MORE_IDLE_DELETE)) {
+                       mf_util_remove_item_from_list_by_name(&ap->mf_FileOperation.category_list, pPipeMsg->current_real);
+               }
+               __mf_callback_progress_bar_state_cb(ap);
+               mf_msg_request_handled_send();
+               break;
+       case MF_MSG_REQUEST:
+               if (ap->mf_FileOperation.iRequestType == MF_REQ_RENAME) {
+                       mf_request_set_result(pPipeMsg->request, MF_REQ_RENAME);
+
+               } else if (ap->mf_FileOperation.iRequestType == MF_REQ_MERGE) {
+                       if (ap->mf_FileOperation.refresh_type == TRUE) {
+                               mf_request_set_result(pPipeMsg->request, MF_REQ_SKIP);
+                       } else {
+                               mf_request_set_result(pPipeMsg->request, MF_REQ_MERGE);
+                       }
+               } else {
+                       ap->mf_FileOperation.iRequestType = MF_REQ_RENAME;
+                       mf_request_set_result(pPipeMsg->request, MF_REQ_RENAME);
+               }
+               break;
+       case MF_MSG_ERROR:
+               error_type = FO_ERROR_CHECK(pPipeMsg->error_code);
+               switch (error_type) {
+               case MF_FO_ERR_PERMISSION:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_PERMISSION_ERR), NULL);
+                       break;
+               case MF_FO_ERR_ARGUMENT:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_ARG_ERR), NULL);
+                       break;
+               case MF_FO_ERR_FAULT:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_FAULT_ERR), NULL);
+                       break;
+               case MF_FO_ERR_TYPE:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_FILE_TYPE_ERR), NULL);
+                       break;
+               case MF_FO_ERR_MAX_OPEN:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_MAX_OPEN_ERR), NULL);
+                       break;
+               case MF_FO_ERR_SPACE:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_NO_SPACE), NULL);
+                       break;
+               case MF_FO_ERR_RO:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_RO_ERR), NULL);
+                       break;
+               case MF_FO_ERR_LOOP:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_LOOP_ERR), NULL);
+                       break;
+               case MF_FO_ERR_MEM:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_MEM_ERR), NULL);
+                       break;
+               case MF_FO_ERR_NOT_EXIST:
+                       message = g_strconcat("Operation failed<br>", GET_SYS_STR(MF_LABEL_FILE_NOT_EXIST), NULL);
+                       break;
+               case MF_FO_ERR_LONG_NAME:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_LONG_NAME_ERR), NULL);
+                       break;
+               case MF_FO_ERR_BIG_SIZE:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_BIG_SIZE_ERR), NULL);
+                       break;
+               case MF_FO_ERR_UNKNOWN:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_UNKNOWN_ERR), NULL);
+                       break;
+               case MF_FO_ERR_IO:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_IO_ERR), NULL);
+                       break;
+               default:
+                       message = g_strconcat("Operation failed<br>", GET_STR(MF_MSG_DEFAULT_ERR), NULL);
+                       break;
+               }
+
+               if (ap->mf_MainWindow.pProgressPopup) {
+                       evas_object_del(ap->mf_MainWindow.pProgressPopup);
+                       ap->mf_MainWindow.pProgressPopup = NULL;
+               }
+
+               if (ap->mf_MainWindow.pFinishPopup) {
+                       evas_object_del(ap->mf_MainWindow.pFinishPopup);
+                       ap->mf_MainWindow.pFinishPopup = NULL;
+               }
+
+               SAFE_FREE_CHAR(ap->mf_FileOperation.pOperationMsg);
+               if (error_type ==  MF_FO_ERR_SPACE) {
+                       ap->mf_FileOperation.pOperationMsg = message;
+               } else {
+                       if (ap->mf_Status.more == MORE_DATA_COPYING) {
+                               ap->mf_FileOperation.pOperationMsg = g_strdup(GET_STR(MF_MSG_COPY_FAILED));
+                       } else if (ap->mf_Status.more == MORE_DATA_MOVING) {
+                               ap->mf_FileOperation.pOperationMsg = g_strdup(GET_SYS_STR(MF_MSG_MOVE_FAILED));
+                       } else if (ap->mf_Status.more == MORE_DELETE || ap->mf_Status.more == MORE_IDLE_DELETE) {
+                               ap->mf_FileOperation.pOperationMsg = g_strdup(GET_SYS_STR(MF_LABEL_DELETE_FAILED));
+                       } else {
+                               ap->mf_FileOperation.pOperationMsg = message;
+                       }
+               }
+
+
+               ap->mf_FileOperation.pGenlistItem = NULL;
+               ap->mf_FileOperation.iOperationSuccessFlag = FALSE;
+               mf_msg_request_handled_send();
+               break;
+       case MF_MSG_END:
+               if (ap->mf_FileOperation.source) {
+                       g_string_free(ap->mf_FileOperation.source, TRUE);
+                       ap->mf_FileOperation.source = NULL;
+               }
+               if (ap->mf_FileOperation.pSourceList) {
+                       g_list_free(ap->mf_FileOperation.pSourceList);
+                       ap->mf_FileOperation.pSourceList = NULL;
+               }
+               if (ap->mf_MainWindow.pProgressPopup) {
+                       evas_object_del(ap->mf_MainWindow.pProgressPopup);
+                       ap->mf_MainWindow.pProgressPopup = NULL;
+               }
+               ecore_idler_add((Ecore_Task_Cb)__mf_callback_idle_refresh, ap);
+               if (pPipeMsg->pipe) {
+                       ecore_pipe_del(pPipeMsg->pipe);
+                       pPipeMsg->pipe = NULL;
+               }
+               mf_msg_request_handled_send();
+
+               mf_util_set_pm_lock(ap, EINA_FALSE);
+               if (ap->mf_FileRecordList.value_saver != NULL) {
+                       mf_util_free_eina_list_with_data(&ap->mf_FileRecordList.value_saver, MYFILE_TYPE_GSTRING);
+                       ap->mf_FileRecordList.value_saver = NULL;
+               }
+               break;
+       default:
+               mf_msg_request_handled_send();
+               break;
+       }
+
+}
+
+
+void mf_callback_exception_popup_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (ap->mf_MainWindow.pNormalPopup) {
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+               ap->mf_MainWindow.pNormalPopup = NULL;
+       }
+
+       mf_callback_cancel_cb(ap, NULL, NULL);
+}
+
+/******                Memory card connection/removal handler          ******/
+static void __mf_callback_mmc_connected(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+       mf_retm_if(ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL, "mf_Status.path is NULL");
+
+       Evas_Object *entry = NULL;
+       ap->mf_Status.iStorageState |= MYFILE_MMC;
+
+       if (ap->mf_Status.more == MORE_CREATE_FOLDER || ap->mf_Status.more == MORE_SEARCH || (ap->mf_Status.more == MORE_RENAME && ap->mf_Status.preMore == MORE_SEARCH))
+               return;
+
+       if (ap->mf_Status.view_type != mf_view_root) {
+               return;
+       }
+
+       mf_util_action_storage_insert(ap, GET_SYS_STR(MF_LABEL_MMC));
+       if (ap->mf_Status.more == MORE_RENAME) {
+               entry = ap->mf_MainWindow.pEntry;
+               if (entry != NULL) {
+                       elm_object_focus_set(entry, EINA_TRUE);
+               }
+       }
+       mf_navi_bar_title_set(ap);
+
+}
+
+void mf_callback_storage_remove_view_operation(void *data, int optStorage)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+
+       Evas_Object *parent = NULL;
+       const char *labelStorage = NULL;
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               parent = ap->mf_MainWindow.pNaviGenlist;
+       } else {
+               parent = ap->mf_MainWindow.pNaviGengrid;
+       }
+       switch (optStorage) {
+       case MYFILE_PHONE:
+               labelStorage = PHONE_FOLDER;
+               break;
+       case MYFILE_MMC:
+               labelStorage = MEMORY_FOLDER;
+               break;
+       case MYFILE_OTG:
+               labelStorage = OTG_FOLDER;
+               break;
+       default:
+               break;
+       }
+       mf_widget_item_remove(parent, labelStorage, ap->mf_Status.flagViewType);
+#ifdef MYFILE_SPLIT_VIEW
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               if (optStorage == MYFILE_MMC) {
+                       elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                       ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+               }
+       }
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               if (optStorage == MYFILE_OTG) {
+                       elm_object_item_del(ap->mf_MainWindow.sSplitData.otg_item);
+                       ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+               }
+       }
+#endif
+
+}
+
+void mf_callback_storage_remove_category_view_items(void *data, int optStorage)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+
+       Evas_Object *parent = NULL;
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               parent = ap->mf_MainWindow.pNaviGenlist;
+       } else {
+               parent = ap->mf_MainWindow.pNaviGengrid;
+       }
+       mf_widget_items_remove(parent, optStorage, ap->mf_Status.flagViewType);
+       mf_util_remove_item_from_list_by_location(&ap->mf_FileOperation.category_list, optStorage);
+}
+
+static void __mf_callback_mmc_removed(void *data, MF_STORAGE storage)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+       mf_retm_if(ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL, "mf_Status.path is NULL");
+
+       Evas_Object *entry = NULL;
+       char *labelStorage = NULL;
+       MF_STORAGE optStorage = MYFILE_NONE;
+       myfileNaviBar *pNaviInUseStruct = NULL;
+       myfileNaviBar *pNaviToShowStruct = NULL;
+       Evas_Object *pNaviBarStorageView = NULL;
+       bool bEditStartFlag = FALSE;
+
+       optStorage = storage;
+       switch (optStorage) {
+       case MYFILE_PHONE:
+               labelStorage = GET_SYS_STR(MF_LABEL_PHONE);
+               break;
+       case MYFILE_MMC:
+               labelStorage = GET_SYS_STR(MF_LABEL_MMC);
+               break;
+       default:
+               break;
+       }
+       /*1.2.1 check if mmc is editstar navi */
+       pNaviBarStorageView = ap->mf_MainWindow.pNaviBar;
+
+       mf_debug("before remove is [%d]", ap->mf_Status.iStorageState);
+       ap->mf_Status.iStorageState = (ap->mf_Status.iStorageState ^ optStorage);
+       mf_debug("after remove is [%d]", ap->mf_Status.iStorageState);
+
+       /*3 factors; */
+       /*
+        **     1.      status                          ap->mf_Status.more
+        **     2.      is storage in Use       ap->mf_Status.path
+        **     3.      is source path in storage in inter-storage operation    flagEditStartView
+        */
+
+       if (ap->mf_Status.view_type == mf_view_root) {
+               if(mf_fm_svc_wrapper_get_location(ap->mf_Status.path->str) != optStorage) {
+                       switch (ap->mf_Status.more) {
+                       case MORE_DEFAULT:
+                               mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                               mf_callback_storage_remove_view_operation(ap, optStorage);
+                               break;
+                       case MORE_INTERNAL_COPY_MOVE:
+                       case MORE_INTERNAL_COPY:
+                       case MORE_INTERNAL_MOVE:
+                               bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                               if (bEditStartFlag == TRUE) {
+                                       pNaviToShowStruct = mf_navi_bar_recover_list(ap);
+                                       mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+                               } else {
+                                       mf_callback_storage_remove_view_operation(ap, optStorage);
+                               }
+                               break;
+                       default:
+                               break;
+                       }
+               }else {
+                       switch (ap->mf_Status.more) {
+                       case MORE_DEFAULT:
+                               ap->mf_Status.more = MORE_DEFAULT;
+                               mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                               mf_callback_storage_remove_view_operation(ap, optStorage);
+                               break;
+                       case MORE_INTERNAL_COPY_MOVE:
+                       case MORE_INTERNAL_COPY:
+                       case MORE_INTERNAL_MOVE:
+                               bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                               if (bEditStartFlag == TRUE) {
+                                       mf_navi_bar_recover_list(ap);
+                               }
+
+                               pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+#ifdef MYFILE_SPLIT_VIEW
+
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                               mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+                               break;
+                       default:
+                               break;
+                       }
+               }
+       } else if (ap->mf_Status.view_type == mf_view_root_category) {
+               switch (ap->mf_Status.more) {
+               case MORE_DEFAULT:
+               case MORE_EDIT:
+               case MORE_SHARE_EDIT:
+               case MORE_RENAME:
+                       mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       mf_callback_storage_remove_category_view_items(ap, optStorage);
+                       break;
+               default:
+                       break;
+               }
+       } else if(mf_fm_svc_wrapper_get_location(ap->mf_Status.path->str) != optStorage) {
+               switch (ap->mf_Status.more) {
+               case MORE_DEFAULT:
+               case MORE_EDIT:
+               case MORE_SHARE_EDIT:
+               case MORE_IDLE_DELETE:
+               case MORE_DELETE:
+               case MORE_RENAME:
+                       /*      not a inter-storage operation */
+                       mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+
+                       if (ap->mf_Status.more == MORE_RENAME) {
+                               entry = ap->mf_MainWindow.pEntry;
+                               if (entry != NULL) {
+                                       elm_object_focus_set(entry, EINA_TRUE);
+                               }
+                       }
+                       break;
+               case MORE_SEARCH:
+               case MORE_THUMBNAIL_RENAME:
+                       mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       break;
+               case MORE_CREATE_FOLDER:
+                       if (ap->mf_Status.preMore == MORE_DEFAULT) {
+                               mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                               break;
+                       } else if (ap->mf_Status.preMore == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.preMore == MORE_INTERNAL_COPY
+                                  || ap->mf_Status.preMore == MORE_INTERNAL_MOVE) {
+                               bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                               if (bEditStartFlag == TRUE) {
+                                       ap->mf_Status.more = MORE_DEFAULT;
+                                       pNaviToShowStruct = mf_navi_bar_recover_list(ap);
+                                       mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+                               }
+                       }
+                       if (bEditStartFlag == TRUE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                                               mf_navi_bar_reset_panes_main(ap);
+                                       }
+                               }
+#endif
+                       }
+                       break;
+               case MORE_INTERNAL_COPY:
+               case MORE_INTERNAL_MOVE:
+               case MORE_INTERNAL_COPY_MOVE:
+                       bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       if (bEditStartFlag == TRUE) {
+                               pNaviToShowStruct = mf_navi_bar_recover_list(ap);
+                               mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+                       }
+
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+                       break;
+
+               case MORE_DATA_COPYING:
+               case MORE_DATA_MOVING:
+                       bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       if (bEditStartFlag == TRUE) {
+                               ap->mf_Status.flagStorageRemoved = EINA_TRUE;
+
+                               ap->mf_MainWindow.pMmcRemovedPopup = mf_popup_create_popup(ap, POPMODE_TEXT_NOT_DISABLED, NULL,
+                                                                                          "Mmc removed...", NULL, NULL, NULL, NULL, NULL);
+                       } else {
+                               ap->mf_Status.flagStorageRemoved = EINA_FALSE;
+                       }
+
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+
+                       break;
+               default:
+                       break;
+               }
+       } else {
+               switch (ap->mf_Status.more) {
+               case MORE_DEFAULT:
+                       ap->mf_Status.more = MORE_DEFAULT;
+                       mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+                       /*set status path && refresh the screen */
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+                       break;
+               case MORE_SEARCH:
+               case MORE_THUMBNAIL_RENAME:
+                       if (ap->mf_FileOperation.search_IME_hide_timer != NULL) {
+                               ecore_timer_del(ap->mf_FileOperation.search_IME_hide_timer);
+                               ap->mf_FileOperation.search_IME_hide_timer = NULL;
+                       }
+                       ap->mf_Status.more = MORE_DEFAULT;
+                       ap->mf_Status.preMore = MORE_DEFAULT;
+                       mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+
+#ifdef MYFILE_SPLIT_VIEW
+                       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                               if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                                       mf_navi_bar_reset_panes_main(ap);
+                               }
+                       }
+#endif
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+
+                       break;
+               case MORE_EDIT:
+               case MORE_SHARE_EDIT:
+                       bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       if (bEditStartFlag == TRUE) {
+                               mf_navi_bar_recover_list(ap);
+                       }
+
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+                       break;
+               case MORE_IDLE_DELETE:
+
+                       ap->mf_MainWindow.pMmcRemovedPopup = mf_popup_create_popup(ap, POPMODE_TEXT_NOT_DISABLED, NULL,
+                                                                                  "Mmc removed...", NULL, NULL, NULL, NULL, NULL);
+                       /*ToDo: check whether get the error before this; */
+                       if (ap->mf_FileOperation.pCancel) {
+                               mf_cancel_do_cancel(ap->mf_FileOperation.pCancel);
+                       }
+
+                       mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+
+                       ap->mf_Status.flagStorageRemoved = EINA_TRUE;
+
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+                       break;
+               case MORE_RENAME:
+                       if (ap->mf_Status.preMore == MORE_DEFAULT) {
+                               ap->mf_Status.more = MORE_DEFAULT;
+                               mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       } else if (ap->mf_Status.preMore == MORE_EDIT) {
+                               mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                               ap->mf_Status.more = MORE_DEFAULT;
+                               mf_navi_bar_recover_list(ap);
+                       }
+
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+                       break;
+               case MORE_CREATE_FOLDER:
+                       if (ap->mf_MainWindow.pEditField != NULL) {
+                               evas_object_hide(ap->mf_MainWindow.pEditField);
+                       }
+                       if (ap->mf_Status.preMore == MORE_DEFAULT) {
+                               ap->mf_Status.more = MORE_DEFAULT;
+                               mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       } else if (ap->mf_Status.preMore == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.preMore == MORE_INTERNAL_COPY
+                                  || ap->mf_Status.preMore == MORE_INTERNAL_MOVE) {
+                               bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                               if (bEditStartFlag == TRUE) {
+                                       ap->mf_Status.more = MORE_DEFAULT;
+                                       pNaviToShowStruct = mf_navi_bar_recover_list(ap);
+                                       mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+                               } else {
+                                       ap->mf_Status.more = ap->mf_Status.preMore;
+                               }
+
+                       }
+
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+#ifdef MYFILE_SPLIT_VIEW
+                       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                               if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                                       mf_navi_bar_reset_panes_main(ap);
+                               }
+                       }
+#endif
+
+                       break;
+               case MORE_INTERNAL_COPY:
+               case MORE_INTERNAL_MOVE:
+               case MORE_INTERNAL_COPY_MOVE:
+                       bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       if (bEditStartFlag == TRUE) {
+                               mf_navi_bar_recover_list(ap);
+                       }
+
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+                       break;
+
+               case MORE_DATA_COPYING:
+               case MORE_DATA_MOVING:
+                       ap->mf_MainWindow.pMmcRemovedPopup = mf_popup_create_popup(ap, POPMODE_TEXT_NOT_DISABLED, NULL,
+                                                                                  "Mmc removed...", NULL, NULL, NULL, NULL, NULL);
+                       bEditStartFlag = mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       if (bEditStartFlag == TRUE) {
+                               ap->mf_Status.flagStorageRemoved = EINA_TRUE;
+                       } else {
+                               ap->mf_Status.flagStorageRemoved = EINA_FALSE;
+                       }
+
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+                       /*reset the path for the navigation bar to show*/
+                       if (ap->mf_Status.path != NULL) {
+                               g_string_free(ap->mf_Status.path, TRUE);
+                               ap->mf_Status.path = NULL;
+                       }
+                       ap->mf_Status.path = g_string_new(pNaviInUseStruct->pCurrentPath);
+
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+                       /*check navigation bar count to decide the main layout content*/
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+                       break;
+               case MORE_DELETE:
+                       ap->mf_MainWindow.pMmcRemovedPopup = mf_popup_create_popup(ap, POPMODE_TEXT_NOT_DISABLED, NULL,
+                                                                                  "Mmc removed...", NULL, NULL, NULL, NULL, NULL);
+                       if (ap->mf_FileOperation.pCancel) {
+                               mf_cancel_do_cancel(ap->mf_FileOperation.pCancel);
+                       }
+                       mf_navi_bar_remove_list_item_by_label(ap, labelStorage);
+                       pNaviInUseStruct = mf_navi_bar_get_in_use(ap);
+
+                       if (ap->mf_Status.iStorageState == MYFILE_PHONE) {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+
+                       } else {
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (optStorage == MYFILE_MMC) {
+                                               elm_object_item_del(ap->mf_MainWindow.sSplitData.mmc_item);
+                                               ap->mf_MainWindow.sSplitData.mmc_item = NULL;
+                                       }
+                               }
+#endif
+                       }
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviInUseStruct);
+                       break;
+               default:
+                       break;
+               }
+
+       }
+       if (ap->mf_MainWindow.pMmcRemovedPopup) {
+               mf_debug();
+               evas_object_del(ap->mf_MainWindow.pMmcRemovedPopup);
+               ap->mf_MainWindow.pMmcRemovedPopup = NULL;
+       }
+       mf_navi_bar_title_set(ap);
+
+}
+static void __mf_callback_storage_changed_cb(keynode_t *key, void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+       mf_retm_if(ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL, "mf_Status.path is NULL");
+       int optStorage = MYFILE_NONE;
+
+       if (VCONF_TYPE_INT == vconf_keynode_get_type(key)
+           && VCONFKEY_SYSMAN_MMC_MOUNTED == vconf_keynode_get_int(key)) {
+               if (!(ap->mf_Status.iStorageState & MYFILE_MMC)) {
+                       __mf_callback_mmc_connected(ap);
+               }
+               return;
+       }
+
+       if (VCONFKEY_SYSMAN_MMC_REMOVED == vconf_keynode_get_int(key)
+           || VCONFKEY_SYSMAN_MMC_INSERTED_NOT_MOUNTED == vconf_keynode_get_int(key)) {
+               mf_debug("mmc removed");
+               optStorage = MYFILE_MMC;
+               ap->mf_Status.flagStorageRemoved = EINA_TRUE;
+       }
+
+       if (optStorage == MYFILE_NONE) {
+               mf_debug("get removed storage failed\n");
+               return;
+       }
+       /*here we handle the remove action */
+       if (ap->mf_Status.iStorageState & optStorage) {
+               __mf_callback_mmc_removed(ap, optStorage);
+       }
+       return;
+}
+
+
+int mf_callback_set_mmc_state_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       int mmc_state = 0;
+       mf_retvm_if(ap == NULL, -1, "appdata is NULL");
+
+       mf_util_is_mmc_on(&mmc_state);
+       return vconf_notify_key_changed(VCONFKEY_SYSMAN_MMC_STATUS, __mf_callback_storage_changed_cb, ap);
+}
+/******                end of Memory card connection/removal handler   ******/
+
+/******                USB otg connection/removal handler              ******/
+#ifdef MYFILE_USB_OTG
+static void __mf_callback_otg_removal_cb(keynode_t *key, void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+       mf_retm_if(ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL, "mf_Status.path is NULL");
+
+       myfileNaviBar *pNaviStorageStruct = NULL;
+       Evas_Object *pNaviBarStorageView = NULL;
+       bool bAllRemovedFlag = FALSE;   /*all otg devices are removed*/
+       /* first generated the removed node list */
+       mf_otg_generate_removed_list(ap);
+       int count_original = eina_list_count(ap->mf_FileOperation.otg_dev_list);
+       int count_removed = eina_list_count(ap->mf_FileOperation.otg_dev_removed_list);
+       if(count_original > count_removed)
+               bAllRemovedFlag = FALSE;
+       else
+               bAllRemovedFlag = TRUE;
+       /*1.2.1 check if otg is editstar navi */
+       char *labelStorage = NULL;
+       labelStorage = GET_SYS_STR(MF_LABEL_OTG);
+
+       pNaviStorageStruct = mf_navi_bar_get_struct_by_label(ap, labelStorage);
+       pNaviBarStorageView = ap->mf_MainWindow.pNaviBar;
+       mf_debug("before remove is [%d]", ap->mf_Status.iStorageState);
+       if(bAllRemovedFlag == TRUE)
+               ap->mf_Status.iStorageState = (ap->mf_Status.iStorageState ^ MYFILE_OTG);
+
+       /*3 factors; */
+       /*
+        **     1.      status                          ap->mf_Status.more
+        **     2.      is storage in Use       ap->mf_Status.path
+        **     3.      is source path in storage in inter-storage operation    flagEditStartView
+        */
+
+
+       if (bAllRemovedFlag == TRUE) {  /*1. otg storage all removed*/
+                                       /*we should check if tab bar need to be removed */
+               mf_error(">>>>>>>>>>>>>>>>>>Remove all");
+               switch (ap->mf_Status.more) {
+               case MORE_DEFAULT:
+                       mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_NOR_POPUP_DEL);
+                       break;
+               case MORE_SEARCH:
+                       if (pNaviStorageStruct && pNaviStorageStruct->naviFlagInUse == TRUE) {
+                               if (ap->mf_FileOperation.sync_pipe != NULL) {
+                                       ecore_pipe_del(ap->mf_FileOperation.sync_pipe);
+                                       ap->mf_FileOperation.sync_pipe = NULL;
+                               }
+
+                               if (ap->mf_FileOperation.search_IME_hide_timer != NULL) {
+                                       ecore_timer_del(ap->mf_FileOperation.search_IME_hide_timer);
+                                       ap->mf_FileOperation.search_IME_hide_timer = NULL;
+                               }
+
+                               if (ap->mf_Status.search_handler > 0) {
+                                       mf_search_stop(ap->mf_Status.search_handler);
+                               }
+
+                               if (ap->mf_Status.search_handler > 0) {
+                                       mf_search_finalize(&ap->mf_Status.search_handler);
+                               }
+
+                       }
+                       mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_NOR_POPUP_DEL);
+                       break;
+               case MORE_EDIT:
+               case MORE_SHARE_EDIT:
+                       mf_debug();
+                       if (pNaviStorageStruct && pNaviStorageStruct->naviFlagInUse == TRUE)
+                               mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_TABBAR_ENABLE | MF_OTG_OPT_THEME_RESET | MF_OTG_OPT_NOR_POPUP_DEL);
+                       else
+                               mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_THEME_RESET | MF_OTG_OPT_NOR_POPUP_DEL);
+                       break;
+               case MORE_IDLE_DELETE:
+               case MORE_DELETE:
+                       mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_NONE);
+                       break;
+               case MORE_RENAME:
+               case MORE_CREATE_FOLDER:
+                       if (pNaviStorageStruct && (pNaviStorageStruct->naviFlagInUse == TRUE || pNaviStorageStruct->naviFlagEditStart == TRUE))
+                               mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_TABBAR_ENABLE | MF_OTG_OPT_NOR_POPUP_DEL);
+                       else
+                               mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_NONE);
+                       break;
+               case MORE_INTERNAL_COPY:
+               case MORE_INTERNAL_MOVE:
+               case MORE_INTERNAL_COPY_MOVE:
+                       mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_NONE);
+                       break;
+               case MORE_DATA_COPYING:
+               case MORE_DATA_MOVING:
+                       mf_otg_dev_all_removed_update(ap, MF_OTG_OPT_REQ_POPUP_DEL);
+                       break;
+               default:
+                       break;
+               }
+       } else {        /*otg storages part removed*/
+                       /*we don't need to check tab bar status*/
+               mf_error(">>>>>>>>>>>>>>>>>>not all removed");
+               switch (ap->mf_Status.more) {
+               case MORE_DEFAULT:
+                       mf_otg_dev_removed_update(ap, MF_OTG_OPT_NOR_POPUP_DEL);
+                       break;
+               case MORE_SEARCH:
+                       mf_otg_dev_removed_update(ap, MF_OTG_OPT_NOR_POPUP_DEL);
+                       break;
+               case MORE_EDIT:
+               case MORE_SHARE_EDIT:
+                       if (pNaviStorageStruct && pNaviStorageStruct->naviFlagInUse == TRUE)
+                               mf_otg_dev_removed_update(ap, MF_OTG_OPT_TABBAR_ENABLE | MF_OTG_OPT_THEME_RESET | MF_OTG_OPT_NOR_POPUP_DEL);
+                       else
+                               mf_otg_dev_removed_update(ap, MF_OTG_OPT_THEME_RESET | MF_OTG_OPT_NOR_POPUP_DEL);
+                       break;
+               case MORE_IDLE_DELETE:
+               case MORE_DELETE:
+                       mf_otg_dev_removed_update(ap, MF_OTG_OPT_NONE);
+                       break;
+               case MORE_RENAME:
+               case MORE_CREATE_FOLDER:
+                       if (pNaviStorageStruct && (pNaviStorageStruct->naviFlagInUse == TRUE || pNaviStorageStruct->naviFlagEditStart == TRUE))
+                               mf_otg_dev_removed_update(ap, MF_OTG_OPT_TABBAR_ENABLE | MF_OTG_OPT_NOR_POPUP_DEL);
+                       else
+                               mf_otg_dev_removed_update(ap, MF_OTG_OPT_NONE);
+                       break;
+               case MORE_INTERNAL_COPY:
+               case MORE_INTERNAL_MOVE:
+               case MORE_INTERNAL_COPY_MOVE:
+                       mf_otg_dev_removed_update(ap, MF_OTG_OPT_NONE);
+                       break;
+               case MORE_DATA_COPYING:
+               case MORE_DATA_MOVING:
+                       mf_otg_dev_removed_update(ap, MF_OTG_OPT_REQ_POPUP_DEL);
+                       break;
+               default:
+                       break;
+               }
+       }
+
+
+       MF_TRACE_END;
+       mf_debug("after remove is [%d]", ap->mf_Status.iStorageState);
+}
+
+
+static void __mf_callback_otg_connected_cb(keynode_t *key, void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+       mf_retm_if(ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL, "mf_Status.path is NULL");
+       Evas_Object *entry = NULL;
+
+       /* otg-dev-list update */
+       mf_debug("before update: [%d]", eina_list_count(ap->mf_FileOperation.otg_dev_list));
+       mf_otg_list_update(ap, true);
+       mf_debug("after update: [%d]", eina_list_count(ap->mf_FileOperation.otg_dev_list));
+       /* we have 2 cases:
+        * 1. otg tab already exists -- update the genlist
+        * 2. otg tab does not exist -- add tab
+       */
+       if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+               mf_debug("path is %s", ap->mf_Status.path->str);
+               if (g_strcmp0(ap->mf_Status.path->str, OTG_FOLDER) == 0) {
+                       mf_debug();
+                       mf_util_ex_disk_list_update(ap);
+                       mf_debug();
+               }
+       } else {
+               mf_debug();
+               ap->mf_Status.iStorageState |= MYFILE_OTG;
+               mf_util_action_storage_insert(ap, GET_STR(MF_LABEL_OTG));
+               mf_debug();
+       }
+
+       mf_debug();
+       if (ap->mf_Status.more == MORE_RENAME) {
+               entry = ap->mf_MainWindow.pEntry;
+               if (entry != NULL) {
+                       elm_object_focus_set(entry, EINA_TRUE);
+               }
+       }
+       return;
+}
+
+void mf_callback_set_otg_state_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+       mf_retm_if(ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL, "mf_Status.path is NULL");
+
+       mf_debug("path is %s", ap->mf_Status.path->str);
+
+       if (ap->mf_FileOperation.otg_dev_list != NULL) {
+               mf_otg_list_clean(ap, MF_OTG_LIST_DEV);
+       }
+
+       mf_otg_init(ap);
+       vconf_notify_key_changed(VCONFKEY_SYSMAN_ADDED_USB_STORAGE, __mf_callback_otg_connected_cb, ap);
+       vconf_notify_key_changed(VCONFKEY_SYSMAN_REMOVED_USB_STORAGE, __mf_callback_otg_removal_cb, ap);
+}
+#endif
+/******                end of USB otg connection/removal handler       ******/
+
+
+static GString *__mf_callback_dir_pipe_get_parent(GString *path)
+{
+
+       mf_retvm_if(path == NULL, NULL, "path is NULL");
+       mf_retvm_if(path->str == NULL, NULL, "path->str is NULL");
+
+       if (ecore_file_exists(path->str)) {
+               return path;
+       } else if (mf_fm_svc_wrapper_is_root_path(path->str)) {
+               return path;
+       } else {
+               GString *parent = mf_fm_svc_wrapper_get_file_parent_path(path);
+               SAFE_FREE_GSTRING(path);
+               __mf_callback_dir_pipe_get_parent(parent);
+       }
+       return path;
+}
+static void __mf_callback_dir_pipe_cb(void *data, void *buffer, unsigned int nbyte)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+
+       if (ap->mf_Status.more != MORE_DEFAULT)
+                       return;
+       if (ap->mf_Status.view_type == mf_view_root || ap->mf_Status.view_type == mf_view_root_category) {
+               return;
+       }
+       if (g_strcmp0(ap->mf_Status.monitor_path, ap->mf_Status.path->str)) {
+               return;
+       }
+       if (buffer) {
+               mf_dir_event_t *msg = (mf_dir_event_t *) buffer;
+               mf_debug("event : %d, name : %s", msg->event, msg->name);
+
+               int iIsNoContent = 0;
+               Evas_Object *newContent = NULL;
+
+               iIsNoContent = ap->mf_Status.flagNoContent;
+               mfItemData_s *itemData = NULL;
+               Elm_Object_Item *it = NULL;
+               GString *parent = NULL;
+               GString *current = NULL;
+               Evas_Object *parent_obj = NULL;
+               char *path = NULL;
+               int count = 0;
+
+               switch (msg->event) {
+               case MF_INOTI_CREATE:
+               case MF_INOTI_MOVE_IN:
+                       if(msg->name) {
+                               path = g_strconcat(ap->mf_Status.path->str, "/", msg->name, NULL);
+                               int file_type = 0;
+                               if (mf_file_attr_is_dir(path)) {
+                                       file_type = FILE_TYPE_DIR;
+                               } else {
+                                       file_type = FILE_TYPE_FILE;
+                               }
+                               fsNodeInfo *pNode = mf_util_generate_pnode(path, file_type);
+                               if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+                                       if (ap->mf_MainWindow.pNaviGenlist == NULL) {
+                                               ap->mf_MainWindow.pNaviGenlist = mf_widget_create_genlist(ap->mf_MainWindow.pNaviBar);
+                                               evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,start,right", mf_genlist_gl_mode_sweep_set, ap);
+                                               evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,start,left", mf_genlist_gl_mode_sweep_unset, ap);
+                                               evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,start,up", mf_genlist_gl_mode_cancel, ap);
+                                               evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,start,down", mf_genlist_gl_mode_cancel, ap);
+                                               evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "selected", mf_genlist_gl_selected, ap);
+
+                                               evas_object_del(elm_object_part_content_unset(ap->mf_MainWindow.pNaviLayout, "content"));
+                                               elm_object_part_content_set(ap->mf_MainWindow.pNaviLayout, "content", ap->mf_MainWindow.pNaviGenlist);
+                                       }
+                                       parent_obj = ap->mf_MainWindow.pNaviGenlist;
+                               } else {
+                                       if (ap->mf_MainWindow.pNaviGengrid == NULL) {
+                                               ap->mf_MainWindow.pNaviGengrid = mf_gengrid_create(ap->mf_MainWindow.pNaviBar);
+                                               evas_object_del(elm_object_part_content_unset(ap->mf_MainWindow.pNaviLayout, "content"));
+                                               elm_object_part_content_set(ap->mf_MainWindow.pNaviLayout, "content", ap->mf_MainWindow.pNaviGengrid);
+                                       }
+                                       parent_obj = ap->mf_MainWindow.pNaviGengrid;
+                               }
+                               mf_widget_item_append(parent_obj, pNode, ap);
+
+                               if (pNode != NULL) {
+                                       SAFE_FREE_CHAR(pNode->path);
+                                       SAFE_FREE_CHAR(pNode->name);
+                                       SAFE_FREE_CHAR(pNode->ext);
+                                       free(pNode);
+                                       pNode = NULL;
+                               }
+                       }
+                       /*1 TODO:  add new item to list */
+                       if (ap->mf_Status.more == MORE_DEFAULT && iIsNoContent) {
+                               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_NOCONTENT_VIEW, false);
+                               //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_NOCONTENT_VIEW, false);
+                       }
+                       break;
+               case MF_INOTI_DELETE:
+               case MF_INOTI_MOVE_OUT:
+                       path = g_strconcat(ap->mf_Status.path->str, "/", msg->name, NULL);
+                       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+                               it = elm_genlist_first_item_get(ap->mf_MainWindow.pNaviGenlist);
+                               while (it) {
+                                       itemData = elm_object_item_data_get(it);
+                                       if (itemData->m_ItemName == NULL || itemData->m_ItemName->str == NULL) {
+                                               mf_debug();
+                                               continue;
+                                       }
+                                       if (g_strcmp0(path, itemData->m_ItemName->str) == 0) {
+                                               elm_object_item_del(it);
+                                               break;
+                                       }
+
+                                       it = elm_genlist_item_next_get(it);
+                               }
+                               count = elm_genlist_items_count(ap->mf_MainWindow.pNaviGenlist);
+                               ap->mf_Status.flagNoContent = !count;
+
+                       } else {
+                               it = elm_gengrid_first_item_get(ap->mf_MainWindow.pNaviGengrid);
+                               while (it) {
+                                       itemData = elm_object_item_data_get(it);
+                                       if (itemData->m_ItemName == NULL || itemData->m_ItemName->str == NULL) {
+                                               continue;
+                                       }
+                                       if (g_strcmp0(path, itemData->m_ItemName->str) == 0) {
+                                               elm_object_item_del(it);
+                                               break;
+                                       }
+
+                                       it = elm_gengrid_item_next_get(it);
+                               }
+                               count = elm_gengrid_items_count(ap->mf_MainWindow.pNaviGengrid);
+                               ap->mf_Status.flagNoContent = !count;
+
+                       }
+                       /*1 TODO:  remove item from list */
+                       if (ap->mf_Status.more == MORE_DEFAULT && ap->mf_Status.flagNoContent) {
+                               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_NOCONTENT_VIEW, true);
+                       }
+                       break;
+               case MF_INOTI_MODIFY:
+#ifdef MYFILE_SPLIT_VIEW
+                       //todo: optmize the refresh
+                       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                               mf_widget_refresh_view(ap);
+                       }
+                       else
+#endif
+                       {
+                               newContent = mf_navi_bar_content_create(ap);
+                               Evas_Object *pConformant = mfNaviBarConformGet(ap);
+                               mfNaviBarSetContent(ap, pConformant, newContent);
+                       }
+                       /*1 TODO:  update item in list */
+                       break;
+               case MF_INOTI_DELETE_SELF:
+               case MF_INOTI_MOVE_SELF:
+               {
+                       current = g_string_new(ap->mf_Status.path->str);
+                       parent = __mf_callback_dir_pipe_get_parent(current);
+
+                       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+
+                       g_string_free(ap->mf_Status.path, TRUE);
+                       ap->mf_Status.path = NULL;
+                       ap->mf_Status.path = parent;
+#ifdef MYFILE_USB_OTG
+                       /* if click items under otg root path, it means some disk take into use*/
+                       int storage = mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str);
+                       if (storage == MYFILE_OTG) {    /* a usb disk take into use */
+                               char *dev_in_use = mf_otg_get_node_in_use(ap);
+                               if (dev_in_use != NULL)
+                                       mf_otg_set_node_using_flag(ap, dev_in_use, FALSE);
+                       }
+#endif
+                       if (pNavi_s->pCurrentPath != NULL) {
+                               free(pNavi_s->pCurrentPath);
+                               pNavi_s->pCurrentPath = NULL;
+                       }
+                       pNavi_s->pCurrentPath = g_strdup(parent->str);
+
+
+
+                       mf_widget_refresh_view(ap);
+               }
+                       break;
+               default:
+                       mf_error("Unknown event");
+                       break;
+               }
+
+
+               if (msg->name)
+                       free(msg->name);
+               SAFE_FREE_CHAR(path);
+               mf_inotify_handle_request_handled_send();
+       }
+}
+
+static void __mf_callback_dir_update_cb(mf_inotify_event event, char *name, void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+
+       mf_debug("event : %d, name : %s", event, name);
+
+       mf_dir_event_t buffer;
+
+       buffer.event = event;
+       buffer.name = strdup(name);
+
+       ecore_pipe_write(ap->mf_FileOperation.inotify_pipe, &buffer, sizeof(buffer));
+
+       return;
+}
+
+int mf_callback_add_dir_watch(const char *path, void *data)
+{
+       mf_retvm_if(data == NULL, 0, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       SAFE_FREE_CHAR(ap->mf_Status.monitor_path);
+       ap->mf_Status.monitor_path = g_strdup(path);
+       return mf_inotify_handle_add_watch(path, __mf_callback_dir_update_cb, data);
+}
+
+int mf_callback_remove_dir_watch(void)
+{
+       return mf_inotify_handle_rm_watch();
+}
+
+int mf_callback_create_dir_monitor(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, -1, "appdata is NULL");
+
+       if (ap->mf_FileOperation.inotify_pipe)
+               ecore_pipe_del(ap->mf_FileOperation.inotify_pipe);
+
+       ap->mf_FileOperation.inotify_pipe = ecore_pipe_add(__mf_callback_dir_pipe_cb, (const void *)ap);
+
+       return mf_inotify_handle_init_inotify();
+}
+
+void mf_callback_destory_dir_monitor(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "appdata is NULL");
+
+       if (ap->mf_FileOperation.inotify_pipe) {
+               ecore_pipe_del(ap->mf_FileOperation.inotify_pipe);
+               ap->mf_FileOperation.inotify_pipe = NULL;
+       }
+
+       mf_inotify_handle_finalize_inotify();
+
+       return;
+}
+
+void mf_callback_backbutton_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.more == MORE_DEFAULT) {
+               if (ap->mf_Status.view_type == mf_view_root) {
+                       Evas_Object *win = ap->mf_MainWindow.pWindow;
+                       elm_win_lower(win);
+               } else if (ap->mf_Status.view_type == mf_view_root_category) {
+                       ap->mf_Status.view_type = mf_view_root;
+                       mf_widget_refresh_view(ap);
+               } else {
+                       mf_callback_upper_click_cb(ap, NULL, NULL);
+               }
+       } else {
+               mf_callback_cancel_cb(ap, NULL, NULL);
+       }
+}
+
+void mf_callback_new_folder_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is null");
+
+       Eina_Bool entry_empty = elm_entry_is_empty(ap->mf_MainWindow.pEntry);
+
+       if (entry_empty) {
+               elm_object_signal_emit(ap->mf_MainWindow.pEditField, "elm,state,eraser,hide", "elm");
+       } else {
+               elm_object_signal_emit(ap->mf_MainWindow.pEditField, "elm,state,eraser,show", "elm");
+       }
+       MF_TRACE_END;
+
+}
+void mf_callback_imf_changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is null");
+
+       const char *entry_data = NULL;
+       char *name = NULL;
+       char new_str[MYFILE_FILE_NAME_LEN_MAX] = { '\0', };
+
+       entry_data = elm_entry_entry_get(ap->mf_MainWindow.pEntry);
+       mf_retm_if(entry_data == NULL, "entry_data is null");
+       name = elm_entry_markup_to_utf8(entry_data);
+       mf_retm_if(name == NULL, "name is null");
+
+       Eina_Bool entry_empty = elm_entry_is_empty(ap->mf_MainWindow.pEntry);
+
+       if (entry_empty) {
+               elm_object_signal_emit(ap->mf_MainWindow.pEditField, "elm,state,eraser,hide", "elm");
+       } else {
+               elm_object_signal_emit(ap->mf_MainWindow.pEditField, "elm,state,eraser,show", "elm");
+       }
+
+       if (mf_file_attr_is_valid_name(name) != MYFILE_ERR_NONE) {
+               strncpy(new_str, name, MYFILE_FILE_NAME_LEN_MAX - 1);
+               if (strlen(name) > 0)
+                       new_str[strlen(name) - 1] = '\0';
+               elm_entry_entry_set(ap->mf_MainWindow.pEntry, new_str);
+               elm_entry_cursor_end_set(ap->mf_MainWindow.pEntry);
+               elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_FALSE);
+
+               if (ap->mf_MainWindow.pNormalPopup) {
+                       SAFE_FREE_OBJ(ap->mf_MainWindow.pNormalPopup);
+               }
+               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, GET_STR(MF_MSG_RENAME_ILLEGAL_CHAR), NULL, NULL,
+                                                                      NULL, mf_popup_show_vk_cb, ap);
+       }
+       SAFE_FREE_CHAR(name);
+       MF_TRACE_END;
+}
+
+
+void mf_callback_rename_button_callback(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mfItemData_s *params = (mfItemData_s *)data;
+       mf_retm_if(params == NULL, "input data is NULL");
+
+       struct appdata *ap = (struct appdata *)params->ap;
+       mf_retm_if(ap == NULL, "input ap is NULL");
+
+       Elm_Object_Item *it = params->item;
+       mf_retm_if(it == NULL, "input item is NULL");
+
+       myfileNaviBar *pNavi_toshow = NULL;
+       pNavi_toshow = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_toshow == NULL, "get navi in use failed");
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_callback_rename_save_cb(ap, NULL, NULL);
+       }
+       mf_genlist_sweep_item_recover(ap->mf_MainWindow.pNaviGenlist);
+
+       ap->mf_Status.preMore = ap->mf_Status.more;
+       ap->mf_Status.more = MORE_RENAME;
+       elm_genlist_item_flip_set(it, EINA_TRUE);
+       elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_NONE);
+       ap->mf_FileOperation.rename_item = it;
+
+       if (ap->mf_Status.preMore == MORE_DEFAULT) {
+
+               mf_navi_bar_set_upper_item_disable(ap, true);
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_DEFAULT_ALL, true);
+               //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_DEFAULT_ALL, TRUE);
+       } else {
+               ap->mf_Status.iCtrlDisableItem = mf_navi_bar_button_get_disable(ap->mf_MainWindow.pNaviItem);
+               mf_debug("ap->mf_Status.iCtrlDisableItem is [%d]", ap->mf_Status.iCtrlDisableItem);
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_EDIT_ALL, true);
+               //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_EDIT_ALL, TRUE);
+       }
+
+
+       MF_TRACE_END;
+}
+void mf_callback_detail_ctx_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       mfItemData_s *itemData = (mfItemData_s *)data;
+       struct appdata* ap = (struct appdata *)itemData->ap;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+       mf_launch_load_ug(ap, itemData->m_ItemName->str, MF_LOAD_UG_DETAIL, NULL);
+}
+static void __mf_callback_delete_in_idle(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+
+       Evas_Object *btn = (Evas_Object *)obj;
+       const char *label = elm_object_text_get(btn);
+
+       if (g_strcmp0(label, GET_SYS_STR(LABEL_CANCEL)) == 0 ) {
+               SAFE_FREE_OBJ(ap->mf_MainWindow.pNormalPopup);
+               return;
+       } else if (g_strcmp0(label, GET_SYS_STR(LABEL_DELETE)) == 0 ) {
+               SAFE_FREE_OBJ(ap->mf_MainWindow.pNormalPopup);
+
+               GList *pSourceList = NULL;
+               int count = 0;
+
+               mf_util_merge_eina_list_to_glist(ap->mf_FileRecordList.value_saver, &pSourceList);
+
+               if (pSourceList) {
+                       count = g_list_length(pSourceList);
+               } else {
+                       MF_TRACE_END;
+                       return;
+               }
+               mf_callback_init_operation_cancel(ap);
+               ap->mf_FileOperation.iTotalCount = count;
+               ap->mf_Status.preMore = ap->mf_Status.more;
+               ap->mf_Status.more = MORE_IDLE_DELETE;
+               ap->mf_FileOperation.pSourceList = pSourceList;
+               ap->mf_FileOperation.iOperationSuccessFlag = TRUE;
+               mf_delete_items(pSourceList, ap->mf_FileOperation.pCancel, TRUE, ap);
+               SAFE_FREE_OBJ(ap->mf_MainWindow.pProgressPopup);
+               ap->mf_MainWindow.pProgressPopup = mf_popup_create_pb_popup(ap, GET_SYS_STR(MF_MSG_DELETING), count, mf_callback_progress_bar_cancel_cb, ap);
+       }
+}
+
+void mf_callback_delete_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+
+       mfItemData_s *params = (mfItemData_s *) data;
+       struct appdata *ap = (struct appdata *)params->ap;
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+
+       if (ap->mf_FileRecordList.value_saver != NULL) {
+               mf_util_free_eina_list_with_data(&ap->mf_FileRecordList.value_saver, MYFILE_TYPE_GSTRING);
+               ap->mf_FileRecordList.value_saver = NULL;
+       }
+       ap->mf_FileRecordList.value_saver = eina_list_append(ap->mf_FileRecordList.value_saver, g_string_new(params->m_ItemName->str));
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pNormalPopup);
+       ap->mf_FileOperation.idle_delete_item = params->item;
+       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TITLE_TEXT_TWO_BTN,
+                                                              NULL,
+                                                              GET_SYS_STR(MF_BUTTON_LABEL_DEL),
+                                                              GET_SYS_STR(LABEL_DELETE), GET_SYS_STR(LABEL_CANCEL),
+                                                              NULL, __mf_callback_delete_in_idle, ap);
+}
+
+void mf_callback_view_as_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_VIEW_AS_LIST, GET_STR(LABEL_VIEW_AS), NULL, NULL, NULL, NULL, mf_callback_popup_deleted_cb, ap);
+}
+void mf_callback_view_style_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST) {
+               ap->mf_Status.flagViewType = MF_VIEW_STYLE_THUMBNAIL;
+       } else {
+               ap->mf_Status.flagViewType = MF_VIEW_STYLE_LIST;
+       }
+
+       mf_util_set_view_style(ap->mf_Status.flagViewType);
+
+       if (ap->mf_Status.flagNoContent != EINA_TRUE) {
+               mf_widget_refresh_view(ap);
+       }
+       MF_TRACE_END;
+}
+
+void mf_callback_home_button_pressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *home_button_ic = (Evas_Object *)data;
+       elm_image_file_set(home_button_ic, MF_TITLE_ICON_HOME_PRESS, NULL);
+}
+
+void mf_callback_home_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *home_button_ic = (Evas_Object *)data;
+       elm_image_file_set(home_button_ic, MF_TITLE_ICON_HOME, NULL);
+}
+
+void mf_callback_select_all_button_pressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *select_all_button_ic = (Evas_Object *)data;
+       elm_image_file_set(select_all_button_ic, MF_TITLE_ICON_SELECT_ALL_PRESS, NULL);
+}
+
+void mf_callback_select_all_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *select_all_button_ic = (Evas_Object *)data;
+       elm_image_file_set(select_all_button_ic, MF_TITLE_ICON_SELECT_ALL, NULL);
+}
+
+void mf_callback_home_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       int storage = MYFILE_PHONE;
+       myfileNaviBar *pNavi_s = NULL;
+
+
+       pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "pNavi_s is NULL");
+
+       mf_callback_remove_dir_watch();
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_callback_destory_rename(ap);
+       }
+
+#ifdef MYFILE_SPLIT_VIEW
+
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               mf_navi_bar_set_panes_navi_to_main(ap);
+
+       }
+#endif
+       {
+               storage = mf_fm_svc_wrapper_get_location(ap->mf_Status.path->str);
+               mf_error("storage is [%d] ap->mf_Status.path->str is [%s]", storage, ap->mf_Status.path->str);
+               switch (storage) {
+                       case MYFILE_PHONE:
+                               SAFE_FREE_GSTRING(ap->mf_Status.path);
+                               ap->mf_Status.path = g_string_new(PHONE_FOLDER);
+                               break;
+                       case MYFILE_MMC:
+                               SAFE_FREE_GSTRING(ap->mf_Status.path);
+                               ap->mf_Status.path = g_string_new(MEMORY_FOLDER);
+                               break;
+                       case MYFILE_OTG:
+                               SAFE_FREE_GSTRING(ap->mf_Status.path);
+                               ap->mf_Status.path = g_string_new(OTG_FOLDER);
+                               break;
+                       default:
+                               return;
+               }
+       }
+       ap->mf_Status.view_type = mf_view_root;
+#ifdef MYFILE_USB_OTG
+       /* if click items under otg root path, it means some disk take into use*/
+       if (storage == MYFILE_OTG) {    /* a usb disk take into use */
+               char *dev_in_use = mf_otg_get_node_in_use(ap);
+               if (dev_in_use != NULL)
+                       mf_otg_set_node_using_flag(ap, dev_in_use, FALSE);
+       }
+#endif
+       SAFE_FREE_CHAR(pNavi_s->pCurrentPath);
+       pNavi_s->pCurrentPath = g_strdup(ap->mf_Status.path->str);
+
+       if (ap->mf_MainWindow.pNaviItem) {
+               mf_navi_bottom_item_del(&ap->mf_MainWindow.pNaviItem);
+       }
+       mf_widget_refresh_view(ap);
+       MF_TRACE_END;
+}
+
+void mf_callback_more_button_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       ap->mf_Status.navi_item_selected = MF_NAVI_BTN_MORE;
+       mf_context_popup_create_more(ap, obj);
+       return;
+}
+
+void mf_callback_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source)
+{
+       elm_entry_entry_set(data, "");
+}
+
+void mf_callback_list_by_button_callback(void *data, Evas_Object * obj, void *event_info)
+{
+       assert(data);
+       assert(obj);
+       struct appdata *ap = (struct appdata *)data;
+
+       Evas_Object *btn = (Evas_Object *)obj;
+       const char *label = elm_object_text_get(btn);
+       int iListBySortType = 0;
+
+       if (g_strcmp0(label, GET_STR(MF_LABEL_DESCENDING)) == 0 ) {
+               switch(ap->mf_Status.iSelectedSortType) {
+                       case 0:
+                               iListBySortType = MYFILE_SORT_BY_NAME_Z2A;
+                               break;
+                       case 1:
+                               iListBySortType = MYFILE_SORT_BY_DATE_R2O;
+                               break;
+
+                       case 2:
+                               iListBySortType = MYFILE_SORT_BY_SIZE_L2S;
+                               break;
+                       case 3:
+                               iListBySortType = MYFILE_SORT_BY_TYPE_Z2A;
+                               break;
+                       default:
+                               iListBySortType = MYFILE_SORT_BY_DATE_R2O;
+                               break;
+               }
+       } else if(g_strcmp0(label, GET_STR(MF_LABEL_ASCENDING)) == 0 ) {
+               switch(ap->mf_Status.iSelectedSortType) {
+                       case 0:
+                               iListBySortType = MYFILE_SORT_BY_NAME_A2Z;
+                               break;
+                       case 1:
+                               iListBySortType = MYFILE_SORT_BY_DATE_O2R;
+                               break;
+
+                       case 2:
+                               iListBySortType = MYFILE_SORT_BY_SIZE_S2L;
+                               break;
+                       case 3:
+                               iListBySortType = MYFILE_SORT_BY_TYPE_A2Z;
+                               break;
+                       default:
+                               iListBySortType = MYFILE_SORT_BY_DATE_O2R;
+                               break;
+               }
+
+       }
+       mf_util_set_sort_type(iListBySortType);
+       mf_callback_list_by_response_cb(ap);
+}
+
+void mf_callback_sbeam_cb(void *user_data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(user_data == NULL, "user_data is NULL");
+
+       struct appdata *ap = (struct appdata *)user_data;
+
+       if (ap->mf_FileRecordList.selected_files) {
+               mf_util_free_eina_list_with_data(&ap->mf_FileRecordList.selected_files, MYFILE_TYPE_GSTRING);
+       }
+       ap->mf_FileRecordList.selected_files = mf_util_get_all_selected(ap);
+
+       Eina_List *files = NULL;
+
+       if (ap->mf_Status.more == MORE_EDIT) {
+               files = mf_util_get_all_selected(ap);
+       }
+
+       mf_sbeam_share_files(ap->mf_MainWindow.pWindow, files);
+       mf_util_free_eina_list_with_data(&files, MYFILE_TYPE_GSTRING);
+       files = NULL;
+}
+
+void mf_callback_extension_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "user_data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       Evas_Object *playout = ap->mf_MainWindow.pNaviLayout;
+       mf_retm_if(playout == NULL, "get conformant failed");
+       Evas_Object *newContent = NULL;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       const char *label = elm_object_item_text_get(item);
+       if (g_strcmp0(label, GET_STR(MF_LABEL_SHOW_EXTENSION)) == 0) {
+               mf_util_set_extension_state(MF_EXTENSION_SHOW);
+               ap->mf_Status.iExtensionState = MF_EXTENSION_SHOW;
+       } else if (g_strcmp0(label, GET_STR(MF_LABEL_HIDE_EXTENSION)) == 0) {
+               mf_util_set_extension_state(MF_EXTENSION_HIDE);
+               ap->mf_Status.iExtensionState = MF_EXTENSION_HIDE;
+       } else {
+               SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+               return;
+       }
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+       if (ap->mf_Status.flagNoContent != EINA_TRUE) {
+               newContent = mf_navi_bar_content_create(ap);
+               mfNaviBarSetContent(ap, playout, newContent);
+       }
+       ap->mf_Status.more = MORE_DEFAULT;
+}
+
+/******************************
+** Prototype    : mf_callback_nofity_show_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_callback_nofity_show_callback(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       edje_object_signal_emit(_EDJ(ap->mf_MainWindow.pLabelLayout), "elm,state,show,default", "elm");
+       return;
+}
+
+/******************************
+** Prototype    : mf_callback_nofity_hide_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_callback_nofity_hide_callback(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "invalid parameter ap is NULL");
+
+       edje_object_signal_emit(_EDJ(ap->mf_MainWindow.pLabelLayout), "elm,state,hide,default", "elm");
+       return;
+}
+
+void mf_callback_operation_timeout_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       if (obj) {
+               evas_object_del(obj);
+               ap->mf_MainWindow.pLabelLayout = NULL;
+               ap->mf_MainWindow.pOperationNotify = NULL;
+       }
+       MF_TRACE_END;
+       return;
+}
+
+Eina_Bool mf_callback_popup_del_idler_cb(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, ECORE_CALLBACK_CANCEL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pNormalPopup);
+       ap->mf_Status.popup_del_idler = NULL;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+#ifdef MYFILE_MOTION_FEATURE
+
+void mf_callback_motion_double_tap(Evas_Object *genlist)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(genlist == NULL, "genlist is NULL");
+       Elm_Object_Item *item = elm_genlist_first_item_get(genlist);
+       elm_genlist_item_bring_in(item, ELM_GENLIST_ITEM_SCROLLTO_TOP);
+
+}
+#endif
+
+void mf_callback_profile_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+        MF_TRACE_BEGIN;
+        mf_retm_if(data == NULL, "data is NULL");
+        struct appdata *ap = (struct appdata *)data;
+        const char *profile = elm_config_profile_get();
+
+        if (!strcmp(profile, "desktop")) {
+                elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, "prev_btn", NULL);
+                elm_win_indicator_mode_set(ap->mf_MainWindow.pWindow, ELM_WIN_INDICATOR_HIDE);
+        }
+        else {   // mobile
+                Evas_Object *btn = elm_button_add(ap->mf_MainWindow.pNaviBar);
+                elm_object_style_set(btn, "naviframe/end_btn/default");
+                evas_object_smart_callback_add(btn, "clicked", mf_callback_backbutton_clicked_cb, ap);
+                elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, "prev_btn", btn);
+
+                elm_win_indicator_mode_set(ap->mf_MainWindow.pWindow, ELM_WIN_INDICATOR_SHOW);
+        }
+}
+
+void mf_callback_share_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       int share_mode = SHARE_MODE_NORMAL;
+       int file_mode = 0;
+
+       {
+               if (ap->mf_FileRecordList.selected_files) {
+                       mf_util_free_eina_list_with_data(&ap->mf_FileRecordList.selected_files, MYFILE_TYPE_GSTRING);
+               }
+               ap->mf_FileRecordList.selected_files = mf_util_get_all_selected(ap);
+
+               file_mode = mf_share_mode_get(ap->mf_FileRecordList.selected_files);
+
+               if ((file_mode & SHARE_FILE_MODE_OTHERS) || ((file_mode & SHARE_FILE_MODE_IMAGE) && (file_mode & SHARE_FILE_MODE_VIDEO))) {
+                       share_mode = SHARE_MODE_NORMAL;
+               } else if (file_mode & SHARE_FILE_MODE_MULTI_IMAGE) {
+                       share_mode = SHARE_MODE_MULTI_IMAGE;
+               } else if (file_mode & SHARE_FILE_MODE_MULTI_VIDEO) {
+                       share_mode = SHARE_MODE_MULTI_VIDEO;
+               } else if (file_mode & SHARE_FILE_MODE_IMAGE) {
+                       share_mode = SHARE_MODE_IMAGE;
+               } else if (file_mode & SHARE_FILE_MODE_VIDEO) {
+                       share_mode = SHARE_MODE_VIDEO;
+               } else {
+                       share_mode = SHARE_MODE_NORMAL;
+               }
+                       mf_context_popup_create_share(ap, share_mode, obj);
+
+       }
+}
+
+void mf_callback_thumb_created_cb(media_content_error_e error, const char *path, void *user_data)
+{
+       mf_retm_if(user_data == NULL, "user_data is NULL");
+       mf_retm_if(path == NULL, "path is NULL");
+       mfItemData_s *pListData = (mfItemData_s *)user_data;
+       mf_retm_if(pListData->item == NULL, "pListData->item is NULL");
+
+       if (ecore_file_exists(path)) {
+               mf_debug("Update item with new thumbnail[%s]", path);
+               SAFE_FREE_CHAR(pListData->thumb_path);
+               pListData->thumb_path = g_strdup(path);
+               pListData->real_thumb_flag = TRUE;
+               if (pListData->ap->mf_Status.flagViewType == MF_VIEW_STYLE_THUMBNAIL) {
+                       elm_gengrid_item_update(pListData->item);
+               } else {
+                       elm_genlist_item_update(pListData->item);
+               }
+       } else {
+               mf_debug("Invalid thumb path!");
+       }
+}
+
+bool mf_callback_create_thumbnail(void *data, media_thumbnail_completed_cb callback)
+{
+       mf_retvm_if(data == NULL, -1, "filter is NULL");
+       mfItemData_s *pListData = (mfItemData_s *)data;
+
+       int ret = -1;
+
+       ret = media_info_create_thumbnail(pListData->media, callback,
+                                         pListData);
+       if (ret != MEDIA_CONTENT_ERROR_NONE) {
+               mf_debug("Failed to create thumbnail! ret is [%d]", ret);
+               return -1;
+       }
+       return 0;
+
+       return false;
+}
+void mf_callback_entry_button_pressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *entry_button_ic = (Evas_Object *)data;
+       elm_image_file_set(entry_button_ic, MF_ICON_ENTRY_FOLDER_PRESS, NULL);
+}
+
+void mf_callback_entry_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       Evas_Object *entry_button_ic = (Evas_Object *)data;
+       elm_image_file_set(entry_button_ic, MF_ICON_ENTRY_FOLDER, NULL);
+}
+
+void mf_callback_entry_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       mfItemData_s *pItemData = (mfItemData_s *)data;
+
+       struct appdata *ap = pItemData->ap;
+
+       if (ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL) {
+               return;
+       }
+
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       GString *path = mf_fm_svc_wrapper_get_file_parent_path(pItemData->m_ItemName);
+       mf_retm_if(path == NULL, "path is NULL");
+       mf_retm_if(path->str == NULL, "path->str is NULL");
+
+       int error_code = 0;
+       int mmc_card = 0;
+       bool result = FALSE;
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navi structure failed");
+
+       error_code = mf_util_is_mmc_on(&mmc_card);
+       if (ap->mf_Status.more == MORE_DEFAULT
+           || ap->mf_Status.more == MORE_INTERNAL_COPY
+           || ap->mf_Status.more == MORE_INTERNAL_MOVE
+           || ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE) {
+               if (mf_fm_svc_wrapper_is_dir(path)) {
+
+#ifdef MYFILE_USB_OTG
+                       /* if click items under otg root path, it means some disk take into use*/
+                       error_code = 0;
+                       error_code = mf_file_attr_is_disk_link(path->str, &result);
+                       if (error_code == 0 && result == TRUE) {        /* a usb disk take into use */
+                               /*
+                               **we don't need to set the previous device flag to be false
+                               **because click cannot jump from one device to another
+                               */
+                               mf_otg_set_node_using_flag(ap, path->str,TRUE);
+                       }
+#endif
+                       /*set new path */
+                       if (ap->mf_Status.path != NULL) {
+                               g_string_free(ap->mf_Status.path, TRUE);
+                               ap->mf_Status.path = NULL;
+                       }
+                       ap->mf_Status.path = path;
+
+                       if (pNavi_s->pCurrentPath != NULL) {
+                               free(pNavi_s->pCurrentPath);
+                               pNavi_s->pCurrentPath = NULL;
+                       }
+                       pNavi_s->pCurrentPath = g_strdup(path->str);
+                       ap->mf_Status.view_type = mf_view_normal;
+                       mf_widget_refresh_view(ap);
+               }
+       }
+}
+
+void mf_callback_imf_preedit_change_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_Bool entry_empty = elm_entry_is_empty(ap->mf_MainWindow.pEntry);
+
+       if (entry_empty) {
+               elm_object_signal_emit(ap->mf_MainWindow.pEditField, "elm,state,eraser,hide", "elm");
+       } else {
+               elm_object_signal_emit(ap->mf_MainWindow.pEditField, "elm,state,eraser,show", "elm");
+       }
+
+       return;
+#if 0
+       SAFE_FREE(view_data->editing_text);
+       const char *preedit_str = elm_entry_entry_get(obj);
+       view_data->editing_text = g_strdup(preedit_str);
+#endif
+}
+void mf_callback_imf_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Evas_Object *entry = (Evas_Object *)data;
+       elm_object_focus_set(entry, EINA_FALSE);
+}
+
+void mf_callback_naviframe_title_clicked_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *navi_it = event_info;
+       if (!navi_it) return;
+
+
+       Evas_Object *label = elm_object_item_part_content_get(navi_it, "elm.swallow.title");
+       if (!label)
+               return;
+       elm_label_slide_go(label);
+}
+
+static void __mf_callback_sip_imf_show_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+
+       Evas_Object *nf = ap->mf_MainWindow.pNaviBar;
+
+       if (!nf) return;
+
+       Elm_Object_Item *navi_it = elm_naviframe_top_item_get(nf);
+
+       if (!navi_it) return;
+
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               elm_naviframe_item_title_visible_set(navi_it, EINA_TRUE);
+       }
+       elm_object_item_signal_emit(navi_it, "elm,state,toolbar,instant_open", "");
+       MF_TRACE_END;
+}
+
+
+static void __mf_callback_sip_imf_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+
+       Evas_Object *nf = ap->mf_MainWindow.pNaviBar;
+
+       if (!nf) return;
+
+       Elm_Object_Item *navi_it = elm_naviframe_top_item_get(nf);
+
+       if (!navi_it) return;
+
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               elm_naviframe_item_title_visible_set(navi_it, EINA_FALSE);
+       }
+       elm_object_item_signal_emit(navi_it, "elm,state,toolbar,instant_close", "");
+       MF_TRACE_END;
+}
+
+
+void mf_callback_imf_state_callback_register(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       Evas_Object *conform = ap->mf_MainWindow.pConformant;
+       evas_object_smart_callback_add(conform, "virtualkeypad,state,off", __mf_callback_sip_imf_hide_cb, ap);
+
+       evas_object_smart_callback_add(conform, "virtualkeypad,state,on", __mf_callback_sip_imf_show_cb, ap);
+
+       evas_object_smart_callback_add(conform, "clipboard,state,off", __mf_callback_sip_imf_hide_cb, ap);
+
+       evas_object_smart_callback_add(conform, "clipboard,state,on", __mf_callback_sip_imf_show_cb, ap);
+
+       MF_TRACE_END;
+}
+
+void mf_callback_imf_state_callback_del(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       Evas_Object *conform = ap->mf_MainWindow.pConformant;
+       evas_object_smart_callback_del(conform, "virtualkeypad,state,on", __mf_callback_sip_imf_show_cb);
+
+       evas_object_smart_callback_del(conform, "virtualkeypad,state,off", __mf_callback_sip_imf_hide_cb);
+
+       evas_object_smart_callback_del(conform, "clipboard,state,on", __mf_callback_sip_imf_show_cb);
+
+       evas_object_smart_callback_del(conform, "clipboard,state,off", __mf_callback_sip_imf_hide_cb);
+
+       MF_TRACE_END;
+
+}
+
diff --git a/src/common/mf-drm.c b/src/common/mf-drm.c
new file mode 100644 (file)
index 0000000..1f89b8c
--- /dev/null
@@ -0,0 +1,87 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <Eina.h>
+#include <Evas.h>
+#include <Ethumb.h>
+#include <assert.h>
+
+
+#include <drm_client.h>
+#include <drm_client_types.h>
+
+#include "mf-main.h"
+#include "mf-fs-util.h"
+#include "mf-drm.h"
+
+int mf_drm_is_converted_fl(char *path)
+{
+       drm_bool_type_e is_allowed = 0;
+       drm_action_type_e action = DRM_IS_FORWARDING_ALLOWED;
+       drm_action_allowed_data_s action_data;
+
+       int ret = -1;
+       memset(&action_data,0x0,sizeof(drm_action_allowed_data_s));
+
+       SAFE_STRCPY(action_data.file_path, path);
+
+       ret = drm_is_action_allowed(action,&action_data,&is_allowed);
+       if(DRM_RETURN_SUCCESS == ret && DRM_TRUE == is_allowed){
+               return true;
+       }else{
+               return false;
+       }
+}
+
+int mf_drm_is_drm_file(const char *file_fullpath)
+{
+       if (file_fullpath == NULL)
+               return MYFILE_ERR_DRM_PERMISSION_DENY;
+       drm_bool_type_e drmFlag = DRM_FALSE;
+       int res = 0;
+       res = drm_is_drm_file(file_fullpath, &drmFlag);
+
+       if (res == DRM_RETURN_SUCCESS && drmFlag == DRM_TRUE)
+               return 0;
+       else
+               return MYFILE_ERR_DRM_PERMISSION_DENY;
+}
+
+drm_file_mime_type_e mf_drm_check_drm_mime_type(char *mime_type)
+{
+       gchar **result = NULL;
+       if (mime_type != NULL) {
+               result = g_strsplit(mime_type, "/", 0);
+               if (result && *result) {
+                       if (g_strcmp0(*result, "audio") == 0) {
+                               g_strfreev(result);
+                               return MYFILE_DRM_RINGTONE_FILE;
+                       } else if (g_strcmp0(*result, "image") == 0) {
+                               g_strfreev(result);
+                               return MYFILE_DRM_IMAGE_FILE;
+                       } else {
+                               g_strfreev(result);
+                               return MYFILE_DRM_UNKNOW_FILE;
+                       }
+               } else {
+                       g_strfreev(result);
+                       return MYFILE_DRM_UNKNOW_FILE;
+               }
+       } else {
+               return MYFILE_DRM_UNKNOW_FILE;
+       }
+}
+
diff --git a/src/common/mf-fm-svc-wrapper.c b/src/common/mf-fm-svc-wrapper.c
new file mode 100644 (file)
index 0000000..164af1f
--- /dev/null
@@ -0,0 +1,1183 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <pthread.h>
+#include <sys/vfs.h>
+#include <sys/statvfs.h>
+#include <vconf.h>
+
+#include "mf-util.h"
+#include "mf-callback.h"
+#include "mf-widget.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-inotify-handle.h"
+#include "mf-media-content.h"
+
+#define MF_PATH_INFO_RETRENCH                  128
+#define MF_PATH_INFO_HEAD_LEN(x)               strlen(x)
+#define MF_PATH_INFO_TRANS_OMIT                        elm_entry_utf8_to_markup("..")
+#define        MF_PATH_INFO_LEVEL_BOUNDARY             3
+#define MF_PATH_INFO_LEN_THRESHOLD             4
+#define MF_PATH_INFO_SEP                       elm_entry_utf8_to_markup("/")
+typedef struct {
+         int len_orig;
+         int len_trans;
+         char *original;
+         char *transfer;
+         bool flag_trans;
+}pNode;
+extern pthread_mutex_t pb_mutex;
+static int __mf_fm_svc_wrapper_get_unique_name(const char *default_dir_full_path, char *original_file_name, char **unique_file_name,
+                                        int file_name_type, void *data);
+/*********************
+**Function name:       __mf_fm_svc_wrapper_COMESFROM
+**Parameter:
+**     GString* fullpath:      fullpath to check the location
+**
+**Return value:
+**     location of the path
+**
+**Action:
+**     get storage type by fullpath
+*********************/
+static int __mf_fm_svc_wrapper_COMESFROM(const char *fullpath)
+{
+
+       int len_phone = strlen(PHONE_FOLDER);
+       int len_memory = strlen(MEMORY_FOLDER);
+#ifdef MYFILE_USB_OTG
+       int len_otg = strlen(OTG_FOLDER);
+#endif
+
+       if (strncmp(fullpath, PHONE_FOLDER, len_phone) == 0) {
+               return MYFILE_PHONE;
+       } else if (strncmp(fullpath, MEMORY_FOLDER, len_memory) == 0) {
+               return MYFILE_MMC;
+#ifdef MYFILE_USB_OTG
+       } else if (strncmp(fullpath, OTG_FOLDER, len_otg) == 0) {
+               return MYFILE_OTG;
+#endif
+       } else {
+               return MYFILE_ERR_STORAGE_TYPE_ERROR;
+       }
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_get_location
+**Parameter:
+**     GString* fullpath:      fullpath to check the location
+**
+**Return value:
+**     location of the path
+**
+**Action:
+**     get storage type by fullpath
+*********************/
+
+int mf_fm_svc_wrapper_get_location(const char *fullpath)
+{
+       return __mf_fm_svc_wrapper_COMESFROM(fullpath);
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_detect_duplication
+**Parameter:
+**     GString* fullpath:      fullpath to check the duplication
+**
+**Return value:
+**     TRUE    if duplication detected
+**     FALSE   if duplication not detected
+**
+**Action:
+**     check if the destination is duplicated
+*********************/
+bool mf_fm_svc_wrapper_detect_duplication(GString *to)
+{
+       int existing = MYFILE_ERR_NONE;
+       if (to == NULL) {
+               return false;
+       }
+       GString *parent_path = mf_fm_svc_wrapper_get_file_parent_path(to);
+       GString *file_name = mf_fm_svc_wrapper_get_file_name(to);
+
+       mf_debug("full path and file name %s", to->str);
+       if (file_name == NULL || parent_path == NULL || file_name->len == 0) {
+               return false;
+       }
+
+       if (parent_path->str != NULL) {
+               mf_debug("parent_path->str is %s", parent_path->str);
+       }
+       if (file_name->str != NULL) {
+               mf_debug("file_name->str is %s", file_name->str);
+       }
+
+       existing = mf_file_attr_is_duplicated_name(parent_path->str, file_name->str);
+
+       mf_debug("EXIST result is %d", existing);
+
+       if (parent_path != NULL) {
+               g_string_free(parent_path, TRUE);
+       }
+       parent_path = NULL;
+
+       if (file_name != NULL) {
+               g_string_free(file_name, TRUE);
+       }
+       file_name = NULL;
+
+       if (existing == MYFILE_ERR_NONE) {
+               return false;
+       } else {
+               return true;
+       }
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_detect_recursion
+**Parameter:
+**     GString* from:  the dir to check
+**     GString* to:    the dir to operate
+**
+**Return value:
+**     error code
+**
+**Action:
+**     check if the to path is recursive with the from path
+*********************/
+int mf_fm_svc_wrapper_detect_recursion(GString *from, GString *to)
+{
+       /* recurion detection */
+       int ret = 0;
+       mf_debug();
+       int lensrc = from->len;
+       int lendst = to->len;
+
+       if (lensrc == 0 || lendst == 0 || lensrc > lendst) {
+               return MYFILE_REPORT_NONE;
+       }
+       MF_STORAGE from_store_type = MYFILE_NONE;
+       MF_STORAGE to_store_type = MYFILE_NONE;
+
+       if ((ret = mf_file_attr_get_store_type_by_full(from->str, &from_store_type)) != 0) {
+               return ret;
+       }
+       if ((ret = mf_file_attr_get_store_type_by_full(to->str, &to_store_type)) != 0) {
+               return ret;
+       }
+
+       if (from_store_type != to_store_type) {
+               return MYFILE_REPORT_NONE;
+       }
+
+       GString *from_parent = mf_fm_svc_wrapper_get_file_parent_path(from);
+       GString *to_parent = mf_fm_svc_wrapper_get_file_parent_path(to);
+       if (g_string_equal(from_parent, to_parent)) {
+               SAFE_FREE_GSTRING(from_parent);
+               SAFE_FREE_GSTRING(to_parent);
+               return MYFILE_REPORT_NONE;
+       }
+       if (strncmp(from->str, to->str, lensrc) == 0) {
+               return MYFILE_REPORT_RECURSION_DETECT;
+       } else {
+               return MYFILE_REPORT_NONE;
+       }
+}
+
+char *mf_fm_svc_wrapper_get_root_path_by_tab_label(const char *label)
+{
+       if (g_strcmp0(label, GET_SYS_STR(MF_LABEL_PHONE)) == 0)
+               return g_strdup(PHONE_FOLDER);
+       else if (g_strcmp0(label, GET_SYS_STR(MF_LABEL_MMC)) == 0)
+               return g_strdup(MEMORY_FOLDER);
+#ifdef MYFILE_USB_OTG
+       else if (g_strcmp0(label, GET_STR(MF_LABEL_OTG)) == 0)
+               return g_strdup(OTG_FOLDER);
+#endif
+       else
+               return NULL;
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_file_auto_rename
+**Parameter:
+**     GString* from:  the dir to check
+**     GString* to:    the dir to operate
+**
+**Return value:
+**     error code
+**
+**Action:
+**     check if the to path is recursive with the from path
+*********************/
+int mf_fm_svc_wrapper_file_auto_rename(void *data, GString *fullpath, int file_name_type, GString **filename)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       GString *parent_path = mf_fm_svc_wrapper_get_file_parent_path(fullpath);
+       GString *file_name = mf_fm_svc_wrapper_get_file_name(fullpath);
+
+       if (parent_path == NULL || file_name == NULL) {
+               return MYFILE_ERR_GENERATE_NAME_FAIL;
+       }
+       if (parent_path->str == NULL || file_name->str == NULL) {
+               g_string_free(parent_path, TRUE);
+               parent_path = NULL;
+               g_string_free(file_name, TRUE);
+               file_name = NULL;
+               return MYFILE_ERR_GENERATE_NAME_FAIL;
+       }
+
+       char *name = NULL;
+       int error_code = 0;
+
+       if (parent_path->str != NULL) {
+               //mf_debug("parent_full_path is [%s]", parent_path->str);
+       }
+
+       if (file_name->str != NULL) {
+               //mf_debug("original_file_name is [%s]", file_name->str);
+       }
+       error_code = __mf_fm_svc_wrapper_get_unique_name(parent_path->str, file_name->str, &name, file_name_type, ap);
+       if (error_code) {
+               SAFE_FREE_CHAR(name);
+               return MYFILE_ERR_GENERATE_NAME_FAIL;
+       }
+       g_string_append_printf(parent_path, "/%s", name);
+       mf_debug("After gstring append, PATH ::: [%s]", parent_path->str);
+
+       if (file_name != NULL) {
+               g_string_free(file_name, TRUE);
+       }
+
+       file_name = NULL;
+       if (name != NULL) {
+               free(name);
+               name = NULL;
+       }
+
+       *filename = parent_path;
+       return MYFILE_ERR_NONE;
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_get_folder_foldersystem
+**Parameter:
+**     GString* path:
+**             path need to check
+**     bool *result:
+**             output result
+**
+**Return value:
+**     error code
+**
+**Action:
+**     check if the to path is system folder
+*********************/
+gint mf_fm_svc_wrapper_get_folder_foldersystem(GString *path, bool *result)
+{
+
+       int error_code = 0;
+       mf_debug("Start");
+       /*ToDo: How to tell if the folder is System folder? */
+       error_code = mf_file_attr_is_system_dir(path->str, result);
+       mf_debug("nerror_code is %d\nresult is %d", error_code, *result);
+#ifdef MYFILE_USB_OTG
+       if(*result == false)
+               error_code = mf_file_attr_is_disk_link(path->str, result);
+#endif
+       return error_code;
+
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_get_file_list
+**Parameter:
+**     GString* folder_name:
+**             path to read
+**     Eina_List** dir_list:
+**             output value of dir element
+**     Eina_List** file_list
+**             output value of file element
+**
+**Return value:
+**     error code
+**
+**Action:
+**     read elements under the specified dir
+*********************/
+int mf_fm_svc_wrapper_get_file_list(const char *folder_name, Eina_List **dir_list, Eina_List **file_list)
+{
+       mf_debug("Start");
+       int error_code = 0;
+
+       mf_retvm_if(folder_name == NULL, MYFILE_ERR_INVALID_PATH, "folder_name is NULL");
+       error_code = mf_fs_oper_read_dir(folder_name, dir_list, file_list);
+       if (error_code != 0) {
+               mf_error("error_code is [%d]\n", error_code);
+       } else {
+               mf_error("success get the file list\n");
+       }
+
+       return error_code;
+}
+
+/******************************
+** Prototype    : mf_fm_svc_wrapper_classify_dir_list
+** Description  : classify the dir list into default and user defined
+** Input        : Eina_List *dir_list
+**                Eina_List **default_dir_list
+**                Eina_List **user_dir_list
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+int mf_fm_svc_wrapper_classify_dir_list(Eina_List *dir_list, Eina_List **default_dir_list, Eina_List **user_dir_list)
+{
+       int error_code = MYFILE_ERR_NONE;
+       fsNodeInfo *pNode = NULL;
+       Eina_List *l = NULL;
+
+       EINA_LIST_FOREACH(dir_list, l, pNode) {
+               char *real_name = NULL;
+               bool result = false;
+               GString *foldername = NULL;
+               real_name = g_strconcat(pNode->path, "/", pNode->name, NULL);
+
+               if (real_name) {
+                       foldername = g_string_new(real_name);
+               } else {
+                       continue;
+               }
+               int error_code = mf_fm_svc_wrapper_get_folder_foldersystem(foldername, &result);
+
+               if (error_code == 0 && result == true) {
+                       mf_debug("in default");
+                       *default_dir_list = eina_list_append(*default_dir_list, pNode);
+               } else {
+                       mf_debug("in else");
+                       *user_dir_list = eina_list_append(*user_dir_list, pNode);
+               }
+       }
+       return error_code;
+}
+
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_is_root_path
+**Parameter:
+**     void *data:
+**             global variable to keep status
+**
+**Return value:
+**     Non-Zero if it's the root path
+**     MYFILE_NONE if not
+**
+**Action:
+**     check if current path is root path
+*********************/
+int mf_fm_svc_wrapper_is_root_path(const char *fullpath)
+{
+       assert(fullpath);
+       mf_debug("path is [%s]\n", fullpath);
+
+       if (!g_strcmp0(fullpath, PHONE_FOLDER)) {
+               mf_debug("PHONE_FOLDER");
+               return MYFILE_PHONE;
+       } else if (!g_strcmp0(fullpath, MEMORY_FOLDER)) {
+               mf_debug("MEMORY_FOLDER");
+               return MYFILE_MMC;
+#ifdef MYFILE_USB_OTG
+       } else if (!g_strcmp0(fullpath, OTG_FOLDER)){
+               mf_debug("OTG_FOLDER");
+               return MYFILE_OTG;
+#endif
+
+       } else {
+               mf_debug("Not root path");
+               return MYFILE_NONE;
+       }
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_is_dir
+**Parameter:
+**     GString* path:
+**             full path of the file
+**
+**Return value:
+**     TRUE    if path is a directory
+**     FALSE   if not
+**
+**Action:
+**     check if the path is a directory
+*********************/
+gboolean mf_fm_svc_wrapper_is_dir(GString *path)
+{
+       return mf_file_attr_is_dir(path->str);
+}
+
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_get_file_name
+**Parameter:
+**     GString* path:
+**             full path of the file
+**
+**Return value:
+**     file name
+**
+**Action:
+**     get file name from full path
+*********************/
+GString *mf_fm_svc_wrapper_get_file_name(GString *path)
+{
+       GString *ret = g_string_new(ecore_file_file_get(path->str));
+       return ret;
+}
+
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_get_file_parent_path
+**Parameter:
+**     GString* path:
+**             full path of the file
+**
+**Return value:
+**     parent path of the current path
+**
+**Action:
+**     get parent path from the full path
+*********************/
+GString *mf_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_file_attr_get_parent_path(fullpath->str, &path);
+       if (error_code != 0) {
+               return NULL;
+       }
+
+       ret = g_string_new(path);
+       SAFE_FREE_CHAR(path);
+       return ret;
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_get_free_space
+**Parameter:
+**     int state:
+**             storage to check
+**
+**Return value:
+**     free space on the storage
+**
+**Action:
+**     get free space on the storage
+*********************/
+unsigned long mf_fm_svc_wrapper_get_free_space(int state)
+{
+       struct statvfs info;
+       char *path = NULL;
+
+       if (state == MYFILE_PHONE) {
+               path = PHONE_FOLDER;
+       } else if (state == MYFILE_MMC) {
+               path = MEMORY_FOLDER;
+       } else {
+               return -1;
+       }
+
+       if (-1 == statvfs(path, &info)) {
+               return -2;
+       }
+       return (info.f_bsize) * info.f_bfree;
+}
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_create_service
+**Parameter:
+**     void *data:
+**             global variable to store data
+**     GString* fullpath
+**             the path to create
+**
+**Return value:
+**     error code
+**
+**Action:
+**     create the specified path
+*********************/
+int mf_fm_svc_wrapper_create_service(void *data, GString *fullpath)
+{
+       int error_code;
+
+       mf_callback_remove_dir_watch();
+       error_code = mf_fs_oper_create_dir(fullpath->str);
+
+       if (error_code != 0) {
+               mf_debug("Make DIR error\n");
+       } else {
+;              mf_media_content_scan_folder(fullpath->str);
+       }
+
+       return error_code;
+}
+
+
+/*********************
+**Function name:       mf_fm_svc_wrapper_rename_service
+**Parameter:
+**     void *data:
+**             global variable to store data
+**     GString* from:
+**             source file
+**     GString* to:
+**             destination file
+**
+**Return value:
+**     error code
+**
+**Action:
+**     rename the specified file to the destination
+*********************/
+int mf_fm_svc_wrapper_rename_service(void *data, GString *from_fullpath, GString *to)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       int error_code = 0;
+
+       mf_callback_remove_dir_watch();
+
+       error_code = mf_fs_oper_rename_file(from_fullpath->str, to->str);
+       if (error_code != 0) {
+               mf_debug("rename failed %d\n", error_code);
+       } else {
+               if (mf_fm_svc_wrapper_is_dir(to)) {
+                       mf_media_content_scan_folder(to->str);
+               } else {
+                       mf_media_content_scan_file(to->str);
+               }
+       }
+
+       return error_code;
+}
+
+/*********************
+**Function name:       __mf_fm_svc_wrapper_get_next_number
+**Parameter:
+**     char* file_name_without_ext:
+**             file name
+**     int file_name_type:
+**             file name type
+**
+**Return value:
+**     error code
+**
+**Action:
+**     get the next file number
+*********************/
+static int __mf_fm_svc_wrapper_get_next_number(char *file_name_without_ext, int file_name_type)
+{
+       int nCount = 0;
+       int nLength = 0;
+       int nUnderline = 0;
+       bool bAllDigits = true;
+       int i;
+
+       /* check _02d format */
+       nLength = strlen(file_name_without_ext);
+
+       if (file_name_type == FILE_NAME_WITH_UNDERLINE) {
+               if (nLength < 3) {      /*4 means the # of minimum characters (*_n) */
+                       return 1;       /*doesn't match */
+               } else {        /* input is more than 3 bytes */
+                       /* find '_' */
+                       for (nUnderline = nLength - 1; nUnderline >= 0; nUnderline--) {
+                               if (file_name_without_ext[nUnderline] == '_') {
+                                       break;
+                               }
+                       }
+
+                       if (nUnderline == 0 && file_name_without_ext[0] != '_') {
+                               return 1;       /* doesn't match */
+                       }
+                       /* check the right characters are all digits */
+                       for (i = nUnderline + 1; i < nLength; i++) {
+                               if (file_name_without_ext[i] < '0' || file_name_without_ext[i] > '9') {
+                                       bAllDigits = false;
+                                       break;
+                               }
+                       }
+
+                       if (bAllDigits) {
+                               for (i = nUnderline + 1; i < nLength; i++) {
+                                       nCount *= 10;
+                                       nCount += file_name_without_ext[i] - '0';
+                               }
+
+                               file_name_without_ext[nUnderline] = '\0';       /* truncate the last  '_dd' */
+                       }
+               }
+       } else {
+
+               if (nLength < 5) {      /* 5 means the # of minimum characters (*_(n)) */
+                       return 1;       /*doesn't match */
+               } else {        /* input is more than 3 bytes */
+                       /* find '_' */
+                       for (nUnderline = nLength - 1; nUnderline >= 0; nUnderline--) {
+                               if (file_name_without_ext[nUnderline] == '(') {
+                                       break;
+                               }
+                       }
+
+                       if (nUnderline == 0 && file_name_without_ext[0] != '(') {
+                               return 1;       /* doesn't match */
+                       }
+                       /* check the right characters are all digits */
+                       for (i = nUnderline + 1; i < nLength - 1; i++) {
+                               if (file_name_without_ext[i] < '0' || file_name_without_ext[i] > '9') {
+                                       bAllDigits = false;
+                                       break;
+                               }
+                       }
+
+                       /* and more than 2 columns. */
+                       if (bAllDigits) {
+                               for (i = nUnderline + 1; i < nLength - 1; i++) {
+                                       nCount *= 10;
+                                       nCount += file_name_without_ext[i] - '0';
+                               }
+
+                               file_name_without_ext[nUnderline] = '\0';       /* truncate the last  '_dd' */
+                       }
+               }
+       }
+
+       /* increase nCount by 1 */
+       nCount++;
+
+       return nCount;
+}
+
+
+char *mf_fm_svc_path_info_retrench(const char *string)
+{
+       mf_retvm_if(string == NULL, g_strdup(MF_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_PATH_INFO_LEN_THRESHOLD) {
+               if (g_utf8_strlen(utf8_string, -1) > 2) {
+                       retrench = calloc(1, MF_PATH_INFO_RETRENCH);
+                       if (retrench) {
+                               char *omit = MF_PATH_INFO_TRANS_OMIT;
+                               char *temp = g_utf8_strncpy(retrench, utf8_string, 2);
+                               retrench = g_strconcat(temp, omit, NULL);
+                               SAFE_FREE_CHAR(omit);
+                               SAFE_FREE_CHAR(temp);
+                       }
+                       SAFE_FREE_CHAR(utf8_string);
+
+               } else {
+                       retrench = utf8_string;
+               }
+               return retrench;
+       } else {
+               return utf8_string;
+       }
+}
+
+static void __mf_fm_svc_wrapper_path_info_node_free(Eina_List *list)
+{
+       mf_retm_if(list == NULL, "list is NULL");
+       const Eina_List *l = NULL;
+       void *data = NULL;
+       EINA_LIST_FOREACH(list, l, data) {
+               pNode *node = (pNode *)data;
+               if (node != NULL) {
+                       SAFE_FREE_CHAR(node->original);
+                       SAFE_FREE_CHAR(node->transfer);
+                       SAFE_FREE_CHAR(node);
+               }
+       }
+       eina_list_free(list);
+}
+
+char *mf_fm_svc_path_info_translate(char *path_info, int path_info_max_len)
+{
+
+       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_PATH_INFO_TRANS_OMIT;
+
+       if (strlen(path_info) < path_info_max_len) {
+               SAFE_FREE_CHAR(omit);
+               return path_info;
+       }
+
+       result = g_strsplit(path_info, "/", 0);
+       if (result == NULL) {
+               free(path_info);
+               path_info = NULL;
+               SAFE_FREE_CHAR(omit);
+               return g_strdup(dgettext("sys_string", "IDS_COM_BODY_UNKNOWN"));
+       }
+
+       params = result;
+       count = g_strv_length(result);
+
+       if (count > MF_PATH_INFO_LEVEL_BOUNDARY)
+       {
+               top = MF_PATH_INFO_LEVEL_BOUNDARY;
+               flag = FALSE;
+               max_len = path_info_max_len - MF_PATH_INFO_LEVEL_BOUNDARY - MF_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--)
+       {
+               pNode *nodeB = calloc(sizeof(pNode), 1);
+               nodeB->original = elm_entry_utf8_to_markup(params[count -i]);
+               nodeB->len_orig = strlen(params[count - i]);
+               nodeB->transfer = mf_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)
+               {
+                       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_PATH_INFO_SEP;
+       EINA_LIST_FOREACH(temp_list, l, pnode)
+       {
+               pNode *node = (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);
+               }
+               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) {
+                       mf_debug();
+
+                       const char *end = NULL;
+                       gboolean ret = FALSE;
+                       ret = g_utf8_validate(utf8_last, d_value, &end);
+                       if (ret == TRUE) {
+                               d_value = last_len - strlen(end);
+                               utf8_last[d_value] = '\0';
+                               output = g_strconcat(output, sep, utf8_last, omit, NULL);
+                               SAFE_FREE_CHAR(temp);
+                       }
+               } else {
+                       output = g_strconcat(output, sep, utf8_last, NULL);
+                       SAFE_FREE_CHAR(temp);
+               }
+       }
+       else {
+               output = g_strdup(utf8_last);
+               SAFE_FREE_CHAR(temp);
+       }
+       SAFE_FREE_CHAR(utf8_last);
+
+       SAFE_FREE_CHAR(sep);
+       SAFE_FREE_CHAR(omit);
+       SAFE_FREE_CHAR(path_info);
+       __mf_fm_svc_wrapper_path_info_node_free(temp_list);
+       temp_list = NULL;
+       g_strfreev(result);
+       result = NULL;
+       return output;
+}
+/*********************
+**Function name:       __mf_fm_svc_wrapper_get_unique_name
+**Parameter:
+**     const char* default_dir_full_path
+**     char* original_file_name,
+**     char* unique_file_name,
+**     int file_name_type,
+**     void* data
+**
+**Return value:
+**     error code
+**
+**Action:
+**     get the unique name of the file name
+*********************/
+static int __mf_fm_svc_wrapper_get_unique_name(const char *default_dir_full_path, char *original_file_name, char **unique_file_name,
+                                        int file_name_type, void *data)
+{
+       //mf_debug("%s %d\n", __func__, __LINE__);
+       assert(unique_file_name);
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       Eina_List *l = NULL;
+       GString *content = NULL;
+       const char *file_name = NULL;
+
+       char *file_name_without_ext = NULL;
+       char *file_ext = NULL;
+       char *new_file_name = NULL;
+       bool result = false;
+       char *dir_rel_path = NULL;
+       int slash = 1;
+       int nCount = 0;
+       bool bExt = false;
+       int error_code = 0;
+
+       if (default_dir_full_path == NULL || original_file_name == NULL) {
+               MYFILE_TRACE_DEBUG("default_dir_full_path == NULL || \
+                                               original_file_name == NULL ||   \
+                                               unique_file_name == NULL || \
+                                               error_code == NULL ");
+               error_code =  MYFILE_ERR_SRC_ARG_INVALID;
+               goto Exception;
+       }
+       result = mf_file_attr_get_logical_path_by_full(default_dir_full_path, &dir_rel_path);
+
+       if (result) {
+               error_code = MYFILE_ERR_GET_LOGIC_PATH_FAIL;
+               goto Exception;
+       }
+
+       if (strncmp(dir_rel_path, "/", strlen(dir_rel_path)) == 0) {
+               slash = 0;
+       }
+#ifdef MYFILE_CHECK_DIR_FILE_PATH_MAXIMUM_LENGTH
+       if (mf_util_character_count_get(dir_rel_path) + mf_util_charactor_count_get(original_file_name) + slash > MYFILE_FILE_PATH_LEN_MAX) {
+               MYFILE_TRACE_DEBUG("......(%s/%s) exceeds maximum length: %d...", dir_rel_path, original_file_name, MYFILE_FILE_PATH_LEN_MAX);
+               error_code = MYFILE_ERR_EXCEED_MAX_LENGTH;
+               goto Exception;
+       }
+#endif
+       error_code = mf_file_attr_is_duplicated_name(default_dir_full_path, original_file_name);
+       if (error_code == 0) {
+               mf_debug("unique_file_name [%s]", *unique_file_name);
+               mf_debug("original_file_name [%s]", new_file_name);
+               *unique_file_name = g_strdup(original_file_name);
+               mf_debug("unique_file_name [%s]", *unique_file_name);
+       }
+
+       while (error_code < 0) {
+               error_code = 0;
+               bExt = mf_file_attr_get_file_ext(original_file_name, &file_ext);
+               file_name_without_ext = g_strdup(original_file_name);
+
+               if (file_name_without_ext == NULL) {
+                       error_code = MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+                       goto Exception;
+               }
+
+               /* add a condition, whether extention is or not. */
+               if (bExt == 0) {
+                       file_name_without_ext[strlen(file_name_without_ext) - strlen(file_ext) - 1] = '\0';
+               }
+
+               nCount = __mf_fm_svc_wrapper_get_next_number(file_name_without_ext, file_name_type);
+               if (nCount == 1 && file_name_type == FILE_NAME_WITH_BRACKETS) {
+                       char *file_name_with_space = g_strconcat(file_name_without_ext, " ", NULL);
+                       if (file_name_with_space) {
+                               SAFE_FREE_CHAR(file_name_without_ext);
+                               file_name_without_ext = file_name_with_space;
+                               file_name_with_space = NULL;
+                       }
+               }
+
+               if (bExt == 0) {
+                       if (file_name_type == FILE_NAME_WITH_BRACKETS)
+                               new_file_name = g_strdup_printf("%s(%d).%s", file_name_without_ext, nCount, file_ext);
+                       else
+                               new_file_name = g_strdup_printf("%s_%d.%s", file_name_without_ext, nCount, file_ext);
+                       } else {
+
+                       if (file_name_type == FILE_NAME_WITH_BRACKETS)
+                               new_file_name = g_strdup_printf("%s(%d)", file_name_without_ext, nCount);
+                       else
+                               new_file_name = g_strdup_printf("%s_%d", file_name_without_ext, nCount);
+               }
+                               //mf_debug("new_file_name [%s]", new_file_name);
+                               //mf_debug("original_file_name [%s]", new_file_name);
+               SAFE_FREE_CHAR(file_name_without_ext);
+
+#ifdef MYFILE_CHECK_DIR_FILE_PATH_MAXIMUM_LENGTH
+               if (mf_util_character_count_get(new_file_name) > MYFILE_FILE_NAME_LEN_MAX ||
+                   mf_util_character_count_get(dir_rel_path) + slash + mf_util_charactor_count_get(new_file_name) > MYFILE_FILE_PATH_LEN_MAX) {
+                       MYFILE_TRACE_DEBUG("......(%s/%s) exceeds maximum length: %d...", dir_rel_path, new_file_name, MYFILE_FILE_PATH_LEN_MAX);
+                       error_code = MYFILE_ERR_EXCEED_MAX_LENGTH;
+                       goto Exception;
+               }
+#endif
+               mf_debug("new name is %s\n", new_file_name);
+               if ((ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                    || ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE) && (ap->mf_FileRecordList.selected_dest_files != NULL)
+                   && (eina_list_count(ap->mf_FileRecordList.selected_dest_files) > 0))
+                       EINA_LIST_FOREACH(ap->mf_FileRecordList.selected_dest_files, l, content) {
+                       if (content == NULL || content->str == NULL) {
+                               continue;
+                       }
+                       //mf_debug("dest is %s\n", content->str);
+                       file_name = ecore_file_file_get(content->str);
+                       //mf_debug("file_name is %s\n", file_name);
+
+                       error_code = ((strlen(file_name) == strlen(new_file_name)) && !strcmp(file_name, new_file_name));
+                       mf_debug("error_code is %d\n", error_code);
+                       if (error_code == 1) {
+                               break;
+                       }
+                       }
+
+               if (error_code != 0) {
+                       original_file_name = g_strdup(new_file_name);
+                       error_code = MYFILE_ERR_DUPLICATED_NAME;
+                       SAFE_FREE_CHAR(new_file_name);
+                       SAFE_FREE_CHAR(file_ext);
+                       continue;
+               } else {
+                       error_code = mf_file_attr_is_duplicated_name(default_dir_full_path, new_file_name);
+                       if (error_code == 0) {
+                               *unique_file_name = g_strdup(new_file_name);
+                               //mf_debug("rename finished\n");
+                               error_code =  MYFILE_ERR_NONE;
+                               goto Exception;
+                       } else {
+                               //mf_debug("rename continue\n");
+                               original_file_name = g_strdup(new_file_name);
+                               SAFE_FREE_CHAR(new_file_name);
+                       }
+               }
+               SAFE_FREE_CHAR(file_ext);
+       }
+
+       return MYFILE_ERR_NONE;
+
+Exception:
+       SAFE_FREE_CHAR(dir_rel_path);
+       SAFE_FREE_CHAR(file_ext);
+       SAFE_FREE_CHAR(new_file_name);
+       return error_code;
+}
+
+char *mf_fm_svc_path_info_get(const char *original_path)
+{
+       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_fm_svc_wrapper_translate_path(original_path, MF_TRANS_OPTION_LABEL);
+       if (path_info) {
+               len = strlen(path_info);
+               if (len > 0 && path_info[len - 1] == '/') {
+                       path_info[len - 1] = '\0';
+               }
+       }
+       return path_info;
+
+}
+
+char *mf_fm_svc_wrapper_translate_path(const char *original_path, MF_TRANS_OPTION option)
+{
+       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_fm_svc_wrapper_get_location(original_path) == MYFILE_PHONE) {
+               switch (option) {
+               case MF_TRANS_OPTION_POPUP:
+                       if (strlen(original_path) > MF_TRANSLATE_LENGTH) {
+                               new_path =
+                                       g_strconcat(GET_SYS_STR(MF_LABEL_PHONE), MF_TRANSLATE_OMIT_PART, ecore_file_file_get(original_path), "/",
+                                                   NULL);
+                       } else {
+                               root_len = strlen(PHONE_FOLDER);
+                               new_path = g_strconcat(GET_SYS_STR(MF_LABEL_PHONE), original_path + root_len, "/", NULL);
+                       }
+                       break;
+               case MF_TRANS_OPTION_LABEL:
+                       root_len = strlen(PHONE_FOLDER);
+                       new_path = g_strconcat(GET_SYS_STR(MF_LABEL_PHONE), original_path + root_len, "/", NULL);
+                       break;
+               default:
+                       new_path = g_strdup(original_path);
+                       break;
+               }
+
+
+       } else if (mf_fm_svc_wrapper_get_location(original_path) == MYFILE_MMC) {
+               switch (option) {
+               case MF_TRANS_OPTION_POPUP:
+                       if (strlen(original_path) > MF_TRANSLATE_LENGTH) {
+                               new_path =
+                                       g_strconcat(GET_SYS_STR(MF_LABEL_MMC), MF_TRANSLATE_OMIT_PART, ecore_file_file_get(original_path),
+                                                   NULL);
+                       } else {
+                               root_len = strlen(MEMORY_FOLDER);
+                               new_path = g_strconcat(GET_SYS_STR(MF_LABEL_MMC), original_path + root_len, "/", NULL);
+                       }
+                       break;
+               case MF_TRANS_OPTION_LABEL:
+                       root_len = strlen(MEMORY_FOLDER);
+                       new_path = g_strconcat(GET_SYS_STR(MF_LABEL_MMC), original_path + root_len, "/", NULL);
+                       break;
+               default:
+                       new_path = g_strdup(original_path);
+                       break;
+               }
+#ifdef MYFILE_USB_OTG
+       } else if (mf_fm_svc_wrapper_get_location(original_path) == MYFILE_OTG) {
+               switch (option) {
+               case MF_TRANS_OPTION_POPUP:
+                       if (strlen(original_path) > MF_TRANSLATE_LENGTH) {
+                               new_path =
+                                       g_strconcat(GET_STR(MF_LABEL_OTG), MF_TRANSLATE_OMIT_PART, ecore_file_file_get(original_path),
+                                                   NULL);
+                       } else {
+                               root_len = strlen(OTG_FOLDER);
+                               new_path = g_strconcat(GET_STR(MF_LABEL_OTG), original_path + root_len, "/", NULL);
+                       }
+                       break;
+               case MF_TRANS_OPTION_LABEL:
+                       root_len = strlen(OTG_FOLDER);
+                       new_path = g_strconcat(GET_STR(MF_LABEL_OTG), original_path + root_len, "/", NULL);
+                       break;
+               default:
+                       new_path = g_strdup(original_path);
+                       break;
+               }
+#endif
+       } else {
+               new_path = g_strdup(original_path);
+       }
+
+       mf_debug("new path is %s", new_path);
+       return new_path;
+}
+
+
+char *mf_fm_svc_get_file_name_without_ext(const char *name)
+{
+       mf_retv_if(name == NULL, NULL);
+       char *name_without_ext = NULL;
+       char *guide_text = NULL;
+       char *ext = NULL;
+
+       name_without_ext = g_strdup(name);
+       mf_file_attr_get_file_ext(name, &ext);
+       mf_debug("ext is %s", ext);
+       if (ext && strlen(ext) != 0) {
+               name_without_ext[strlen(name_without_ext) - strlen(ext) - 1] = '\0';
+               mf_debug("name_without_ext is [%s]\n", name_without_ext);
+               if (strlen(name_without_ext)) {
+                       guide_text = elm_entry_utf8_to_markup(ecore_file_file_get(name_without_ext));
+               } else {
+                       guide_text = elm_entry_utf8_to_markup(name);
+               }
+       } else {
+               guide_text = elm_entry_utf8_to_markup(name);
+       }
+       SAFE_FREE_CHAR(ext);
+       SAFE_FREE_CHAR(name_without_ext);
+       return guide_text;
+}
+
+char *mf_fm_svc_get_file_name(GString *path)
+{
+       mf_retv_if(path == NULL, NULL);
+
+       GString *filename = NULL;
+       char *guide_text = NULL;
+       filename = mf_fm_svc_wrapper_get_file_name(path);
+
+       guide_text = mf_fm_svc_get_file_name_without_ext(filename->str);
+       SAFE_FREE_GSTRING(filename);
+       return guide_text;
+}
+
diff --git a/src/common/mf-inotify-handle.c b/src/common/mf-inotify-handle.c
new file mode 100644 (file)
index 0000000..856f474
--- /dev/null
@@ -0,0 +1,373 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <stdio.h>
+#include <glib.h>
+#include <sys/inotify.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <stdint.h>
+#include <fcntl.h>
+#include <errno.h>
+#include <pthread.h>
+
+#include "mf-dlog.h"
+#include "mf-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))
+#define MF_U32_MAX     0xFFFFFFFF
+
+int flagInotifyMsg = 1;
+pthread_cond_t g_cond_inotify_msg;
+
+typedef struct _mf_inotify_t {
+       int fd;
+       int wd;
+       gchar *path;
+       unsigned int prev_event;
+       pthread_t monitor;
+       mf_inotify_cb callback;
+       void *u_data;
+} mf_inotify_t;
+
+static pthread_mutex_t mf_noti_lock;
+static mf_inotify_t *g_handle = NULL;
+
+static void __mf_inotify_handle_free(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_inotify_handle_init(void)
+{
+       __mf_inotify_handle_free();
+       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_inotify_handle_thread_clean_up(void *data)
+{
+       pthread_mutex_t *lock = (pthread_mutex_t *) data;
+       mf_debug("Thread cancel Clean_up function");
+       if (lock) {
+               pthread_mutex_unlock(lock);
+       }
+       return;
+}
+
+
+static gpointer __mf_inotify_handle_watch_thread(gpointer user_data)
+{
+       mf_inotify_t *handle = (mf_inotify_t *) user_data;
+       int oldtype = 0;
+
+       mf_retvm_if(handle == NULL, NULL, "handle is NULL");
+       mf_debug("Create __mf_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) {
+                       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) {
+                       mf_error("Fail to read() -fd : %d,  len : %d", handle->fd, len);
+                       continue;
+               }
+
+               flagInotifyMsg = 1;
+
+               while (i < len) {
+                       struct inotify_event *pevent = (struct inotify_event *)&event_buff[i];
+                       mf_inotify_event s_event = MF_INOTI_NONE;
+                       mf_debug("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 = MF_INOTI_NONE;
+                       } else if (pevent->mask & IN_ISDIR) {
+                               if (pevent->mask & IN_DELETE_SELF)
+                                       s_event = MF_INOTI_DELETE_SELF;
+
+                               if (pevent->mask & IN_MOVE_SELF)
+                                       s_event = MF_INOTI_MOVE_SELF;
+
+                               if (pevent->mask & IN_CREATE)
+                                       s_event = MF_INOTI_CREATE;
+
+                               if (pevent->mask & IN_DELETE)
+                                       s_event = MF_INOTI_DELETE;
+
+                               if (pevent->mask & IN_MOVED_FROM)
+                                       s_event = MF_INOTI_MOVE_OUT;
+
+                               if (pevent->mask & IN_MOVED_TO)
+                                       s_event = MF_INOTI_MOVE_IN;
+                       } else {
+                               if (pevent->mask & IN_CREATE) {
+                                       s_event = MF_INOTI_NONE;
+                                       handle->prev_event = IN_CREATE;
+                               }
+
+                               if (pevent->mask & IN_CLOSE_WRITE) {
+                                       if (handle->prev_event == IN_CREATE) {
+                                               s_event = MF_INOTI_CREATE;
+                                       } else {
+                                               s_event = MF_INOTI_MODIFY;
+                                       }
+                                       handle->prev_event = 0;
+                               }
+
+                               if (pevent->mask & IN_DELETE)
+                                       s_event = MF_INOTI_DELETE;
+
+                               if (pevent->mask & IN_MOVED_FROM)
+                                       s_event = MF_INOTI_MOVE_OUT;
+
+                               if (pevent->mask & IN_MOVED_TO)
+                                       s_event = MF_INOTI_MOVE_IN;
+                       }
+
+                       mf_debug("s_event : %d, prev_event: %x, callback : %p", s_event, handle->prev_event, handle->callback);
+                       if (s_event != MF_INOTI_NONE) {
+                               pthread_cleanup_push(__mf_inotify_handle_thread_clean_up, (void *)&mf_noti_lock);
+                               pthread_mutex_lock(&mf_noti_lock);
+
+                               while (flagInotifyMsg == 0) {
+                                       mf_debug("!!!!!!!!!!!! wait");
+                                       pthread_cond_wait(&g_cond_inotify_msg, &mf_noti_lock);
+                               }
+                               flagInotifyMsg = 0;
+
+                               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);
+                       }
+
+                       if ((MF_U32_MAX - pevent->len) >=  MF_EVENT_SIZE) {
+                               i += sizeof(struct inotify_event) + pevent->len;
+                       } else {
+                               break;
+                       }
+               }
+       }
+
+       mf_debug("end __mf_inotify_handle_watch_thread!!! ");
+
+       return NULL;
+}
+
+void mf_inotify_handle_request_handled_send()
+{
+       pthread_mutex_lock(&mf_noti_lock);
+       if (flagInotifyMsg == 0) {
+               flagInotifyMsg = 1;
+               pthread_cond_signal(&g_cond_inotify_msg);
+       }
+       pthread_mutex_unlock(&mf_noti_lock);
+}
+
+int mf_inotify_handle_init_inotify(void)
+{
+       mf_inotify_t *handle = NULL;
+       handle = __mf_inotify_handle_init();
+       mf_retvm_if(handle == NULL, -1, "fail to __mf_inotify_handle_init()");
+
+       handle->fd = inotify_init();
+
+       if (handle->fd < 0) {
+               switch (errno) {
+               case EMFILE:
+                       mf_error("The user limit on the total number of inotify instances has been reached.\n");
+                       break;
+               case ENFILE:
+                       mf_error("The system limit on the total number of file descriptors has been reached.\n");
+                       break;
+               case ENOMEM:
+                       mf_error("Insufficient kernel memory is available.\n");
+                       break;
+               default:
+                       mf_error("Fail to inotify_init(), Unknown error.\n");
+                       break;
+               }
+               return -1;
+       }
+       pthread_create(&handle->monitor, NULL, __mf_inotify_handle_watch_thread, handle);
+       return 0;
+}
+
+int mf_inotify_handle_add_watch(const char *path, mf_inotify_cb callback, void *user_data)
+{
+       mf_inotify_t *handle = NULL;
+       handle = g_handle;
+       mf_retvm_if(handle == NULL, -1, "handle is NULL");
+
+       if (handle->wd >= 0) {
+               mf_warnig("The mf_notify module supports single instance, the watch descript [%d] is removed automatically\n", handle->wd);
+               mf_inotify_handle_rm_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:
+                       mf_error("Read access to the given file is not permitted.\n");
+                       break;
+               case EBADF:
+                       mf_error("The given file descriptor is not valid.\n");
+                       handle->fd = -1;
+                       break;
+               case EFAULT:
+                       mf_error("pathname points outside of the process's accessible address space.\n");
+                       break;
+               case EINVAL:
+                       mf_error("The given event mask contains no legal events; or fd is not an inotify file descriptor.\n");
+                       break;
+               case ENOMEM:
+                       mf_error("Insufficient kernel memory is available.\n");
+                       break;
+               case ENOSPC:
+                       mf_error("User limit on the total number of inotify watches was reached or the kernel failed to alloc a needed resource.\n");
+                       break;
+               default:
+                       mf_error("Fail to mf_inotify_handle_add_watch(), Unknown error.\n");
+                       break;
+               }
+               pthread_mutex_unlock(&mf_noti_lock);
+               return -1;
+       }
+
+       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_inotify_handle_rm_watch(void)
+{
+       int ret = -1;
+       mf_inotify_t *handle = NULL;
+
+       handle = g_handle;
+       mf_retvm_if(handle == NULL, -1, "handle is NULL");
+
+       if (handle->fd < 0 || handle->wd < 0) {
+               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:
+                       mf_error("fd is not a valid file descriptor\n");
+                       handle->fd = -1;
+                       break;
+               case EINVAL:
+                       mf_error("The watch descriptor wd is not valid; or fd is not an inotify file descriptor.\n");
+                       handle->wd = -1;
+                       break;
+               default:
+                       mf_error("Fail to mf_inotify_handle_add_watch(), Unknown error.\n");
+                       break;
+               }
+               pthread_mutex_unlock(&mf_noti_lock);
+               return -1;
+       }
+       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_inotify_handle_finalize_inotify(void)
+{
+       mf_inotify_t *handle = NULL;
+       handle = g_handle;
+
+       mf_retm_if(handle == NULL, "handle is NULL");
+
+       if (handle->fd >= 0 && handle->wd >= 0) {
+               mf_inotify_handle_rm_watch();
+       }
+
+       pthread_cancel(handle->monitor);
+       pthread_join(handle->monitor, NULL);
+
+       __mf_inotify_handle_free();
+
+       return;
+}
diff --git a/src/common/mf-language-mgr.c b/src/common/mf-language-mgr.c
new file mode 100644 (file)
index 0000000..8afa0f5
--- /dev/null
@@ -0,0 +1,310 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <libintl.h>
+#include <glib.h>
+
+#include "mf-language-mgr.h"
+#include "mf-dlog.h"
+#include "mf-util.h"
+
+typedef struct
+{
+       Evas_Object *obj;
+       obj_type type;
+       const char *text_id;
+       const char *part;
+}obj_data;
+
+typedef struct
+{
+       Elm_Object_Item *obj_item;
+       const char *text_id;
+       item_type type;
+}obj_item_data;
+
+typedef struct _lang_mgr *lang_mgr;
+struct  _lang_mgr{
+       GList *objs;
+       GList *obj_items;
+       GList *glist_items;
+       GList *grid_items;
+}_lang_mgr;
+
+
+static lang_mgr g_lang_mgr;
+
+#define G_LIST_FOREACH(list, l, data) \
+  for (l = list,                         \
+       data = g_list_nth_data(l, 0);     \
+       l;                                \
+       l = g_list_next(l),            \
+       data = g_list_nth_data(l, 0))
+
+static void __glist_free(void *data)
+{
+       obj_data *item = data;
+       MF_CHECK(item);
+       //if(item->text_id)
+               //free(item->text_id);
+       free(item);
+}
+
+
+static void __update_obj(void *data, void *userdata)
+{
+       char *text;
+       obj_data *item = data;
+       MF_CHECK(item);
+       mf_debug("handle: 0x%x, ID:%s",item->obj, item->text_id);
+
+       text = mf_util_get_text(item->text_id);
+
+       if(item->type == OBJ_TYPE_ELM_OBJECT)
+               elm_object_text_set(item->obj, text);
+       else if(item->type == OBJ_TYPE_EDJE_OBJECT)
+               edje_object_part_text_set(elm_layout_edje_get(item->obj), item->part, text);
+       else
+               mf_debug("Unhandled case");
+}
+
+static void __update_obj_item(void *data, void *userdata)
+{
+       char *text;
+       obj_item_data *item_data = data;
+       MF_CHECK(item_data);
+       mf_debug("handle: 0x%x, ID:%s",item_data->obj_item, item_data->text_id);
+       text = mf_util_get_text(item_data->text_id);
+       elm_object_item_text_set(item_data->obj_item, text);
+}
+
+static void __update_list(void *data, void *userdata)
+{
+       Elm_Object_Item *item = data;
+       MF_CHECK(item);
+       mf_debug("handle: 0x%x",item);
+       elm_genlist_item_update(item);
+}
+
+static void __update_grid(void *data, void *userdata)
+{
+       Elm_Object_Item *item = data;
+       MF_CHECK(item);
+       mf_debug("handle: 0x%x",item);
+       elm_gengrid_item_update(item);
+}
+
+static void __obj_del_cb(void *data, Evas * e, Evas_Object * eo, void *event_info)
+{
+       obj_data *item = data;
+       MF_CHECK(g_lang_mgr);
+       MF_CHECK(item);
+
+       g_lang_mgr->objs =
+               g_list_delete_link(g_lang_mgr->objs, g_list_find(g_lang_mgr->objs, item));
+
+       free(item);
+}
+
+#if 0
+static void __obj_item_del_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       mf_debug("");
+       obj_item_data *item = data;
+       MF_CHECK(g_lang_mgr);
+       MF_CHECK(item);
+
+       g_lang_mgr->obj_items=
+               g_list_delete_link(g_lang_mgr->obj_items, g_list_find(g_lang_mgr->obj_items, item));
+
+       free(item);
+}
+#endif
+
+int mf_language_mgr_create(void)
+{
+       mf_debug("");
+       if(!g_lang_mgr)
+       {
+               lang_mgr mgr = calloc(1, sizeof(_lang_mgr));
+               if(!mgr)
+               {
+                       mf_debug("Error: calloc");
+                       return -1;
+               }
+               g_lang_mgr = mgr;
+       }
+       return 0;
+}
+
+int mf_language_mgr_destroy(void)
+{
+       MF_CHECK_VAL(g_lang_mgr, -1);
+       g_list_free_full(g_lang_mgr->objs, __glist_free);
+       g_lang_mgr->objs = NULL;
+
+       g_list_free(g_lang_mgr->glist_items);
+       g_lang_mgr->glist_items = NULL;
+
+       g_list_free(g_lang_mgr->grid_items);
+       g_lang_mgr->grid_items = NULL;
+
+       free(g_lang_mgr);
+       g_lang_mgr = NULL;
+
+       return 0;
+}
+
+void mf_language_mgr_register_object(Evas_Object *obj, obj_type type, const char *part, const char *text_id)
+{
+       MF_CHECK(g_lang_mgr);
+       obj_data *item = calloc(1, sizeof(obj_data));
+       MF_CHECK(item);
+
+       item->type = type;
+       item->part = part;
+       item->text_id = text_id;
+       item->obj = obj;
+
+       evas_object_event_callback_add(obj, EVAS_CALLBACK_DEL, __obj_del_cb, item);
+
+       g_lang_mgr->objs = g_list_append(g_lang_mgr->objs, item);
+}
+
+void mf_language_mgr_register_object_item(Elm_Object_Item *object_item, const char *text_ID, item_type type)
+{
+       mf_debug();
+       MF_CHECK(g_lang_mgr);
+       mf_debug();
+       obj_item_data *data = calloc(1, sizeof(obj_item_data));
+       mf_debug();
+       MF_CHECK(data);
+       mf_debug();
+
+       mf_debug("text id is [%s] item is [%p]", text_ID, object_item);
+       data->obj_item = object_item;
+       data->text_id = text_ID;
+       data->type = type;
+
+       g_lang_mgr->obj_items= g_list_append(g_lang_mgr->obj_items, data);
+       mf_debug("======================length is [%d]", g_list_length(g_lang_mgr->obj_items));
+
+}
+
+void mf_language_mgr_unregister_object_item(Elm_Object_Item *object_item)
+{
+       GList *l;
+       obj_item_data *data;
+
+       G_LIST_FOREACH(g_lang_mgr->obj_items, l, data)
+       {
+               if (data == NULL || data->obj_item == NULL) {
+                       continue;
+               }
+               if(data->obj_item == object_item)
+               {
+                       g_lang_mgr->obj_items = g_list_delete_link(g_lang_mgr->obj_items, l);
+                       free(data);
+                       data = NULL;
+                       break;
+               }
+       }
+}
+
+void mf_language_mgr_unregister_object_item_by_type(item_type type)
+{
+       MF_TRACE_BEGIN;
+       GList *l;
+       obj_item_data *data;
+       GList *temp = NULL;
+       G_LIST_FOREACH(g_lang_mgr->obj_items, l, data)
+       {
+               if (data == NULL) {
+                       continue;
+               }
+               if(data->type == type)
+               {
+                       free(data);
+                       data = NULL;
+               } else {
+                       temp = g_list_append(temp, data);
+               }
+       }
+
+       g_list_free(g_lang_mgr->obj_items);
+       g_lang_mgr->obj_items = temp;
+
+       MF_TRACE_END;
+}
+
+
+void mf_language_mgr_object_item_text_ID_set(Elm_Object_Item *object_item, const char *text_ID)
+{
+       MF_CHECK(g_lang_mgr);
+       GList *l;
+       obj_item_data *data;
+
+       G_LIST_FOREACH(g_lang_mgr->obj_items, l, data)
+       {
+               if(data->obj_item == object_item)
+               {
+                       mf_debug("set ID: %s", text_ID);
+                       data->text_id = text_ID;
+                       break;
+               }
+       }
+
+}
+
+void mf_language_mgr_register_genlist_item(Elm_Object_Item *item)
+{
+       MF_CHECK(g_lang_mgr);
+       g_lang_mgr->glist_items =
+               g_list_append(g_lang_mgr->glist_items, item);
+}
+
+void mf_language_mgr_unregister_genlist_item(Elm_Object_Item *item)
+{
+       MF_CHECK(g_lang_mgr);
+       g_lang_mgr->glist_items =
+               g_list_delete_link(g_lang_mgr->glist_items, g_list_find(g_lang_mgr->glist_items, item));
+}
+
+void mf_language_mgr_register_gengrid_item(Elm_Object_Item *item)
+{
+       MF_CHECK(g_lang_mgr);
+       g_lang_mgr->grid_items =
+               g_list_append(g_lang_mgr->grid_items, item);
+}
+
+void mf_language_mgr_unregister_gengrid_item(Elm_Object_Item *item)
+{
+       MF_CHECK(g_lang_mgr);
+       g_lang_mgr->grid_items =
+               g_list_delete_link(g_lang_mgr->grid_items, g_list_find(g_lang_mgr->grid_items, item));
+}
+
+void mf_language_mgr_update()
+{
+       mf_debug("language changed. update text");
+       MF_CHECK(g_lang_mgr);
+       g_list_foreach(g_lang_mgr->objs, __update_obj, NULL);
+       g_list_foreach(g_lang_mgr->obj_items, __update_obj_item, NULL);
+       g_list_foreach(g_lang_mgr->glist_items, __update_list, NULL);
+       g_list_foreach(g_lang_mgr->grid_items, __update_grid, NULL);
+}
+
diff --git a/src/common/mf-launch.c b/src/common/mf-launch.c
new file mode 100644 (file)
index 0000000..2a7563c
--- /dev/null
@@ -0,0 +1,482 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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-main.h"
+#include "mf-conf.h"
+#include "mf-fs-util.h"
+#include "mf-launch.h"
+#include "mf-resource.h"
+#include "mf-widget.h"
+#include "mf-fm-svc-wrapper.h"
+
+#ifndef SAFE_STRING_FREE
+#define SAFE_STRING_FREE(x) do { if ((x) != NULL) { free(x); x = NULL; } } while (0)
+#endif
+
+#define EMAIL_UG_NAME                  "email-composer-efl"
+#define MESSAGE_UG_NAME                        "msg-composer-efl"
+#define BLUETOOTH_UG_NAME              "setting-bluetooth-efl"
+#define DETAIL_UG_NAME                 "myfile-detail-efl"
+#define MYFILE_UG_NAME                 "myfile-efl"
+
+
+
+#define MF_SHARE_INTERNAL_LEN  12
+#define MF_ARGV_SNS_XWINDOW_ID "XWINDOW_ID"
+
+static void mf_launch_send_via_appcontrol(void *data, char *path, MF_LOAD_UG_TYPE type);
+
+
+static void __mf_launch_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(priv == NULL, "priv is NULL");
+
+       Evas_Object *base = NULL;
+
+       base = ug_get_layout(ug);
+       if (!base) {
+               ug_destroy(ug);
+               return;
+       }
+
+       switch (mode) {
+       case UG_MODE_FULLVIEW:
+               evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               //elm_win_resize_object_add(ap->mf_MainWindow.pWindow, base);
+               evas_object_show(base);
+               break;
+       default:
+               break;
+       }
+}
+
+#if 0
+static void __mf_launch_ug_result_cb(ui_gadget_h ug, bundle * result, void *priv)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(ug == NULL, "ug is NULL");
+       mf_retm_if(priv == NULL, "priv is NULL");
+
+       ug_destroy(ug);
+       MF_TRACE_END;
+}
+#endif
+
+static void __mf_launch_ug_myfile_result_cb(ui_gadget_h ug, service_h service, void *priv)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(priv == NULL, "priv is NULL");
+
+       struct appdata *ap = (struct appdata *)priv;
+
+       service_h service_r = ap->mf_Bundle.recv_service;
+       service_h reply = NULL;
+       char *ret = NULL;
+       int service_ret = -1;
+
+       if (service_create(&reply) != SERVICE_ERROR_NONE) {
+               mf_debug("service_create failed!");
+               return;
+       }
+
+       service_get_extra_data(service, "result", &ret);
+
+       if (ret) {
+               service_add_extra_data(reply, SERVICE_DATA_SELECTED, ret);
+               service_ret = service_reply_to_launch_request(reply, service_r,
+                                                             SERVICE_RESULT_SUCCEEDED);
+       } else {
+               service_ret = service_reply_to_launch_request(reply, service_r,
+                                                             SERVICE_RESULT_CANCELED);
+       }
+
+       service_destroy(reply);
+       if (service_ret != SERVICE_ERROR_NONE)
+               mf_debug("service_reply_to_launch_request failed!");
+
+
+       ap->mf_SharedGadget.ug = NULL;
+
+       if (mf_navi_bar_is_navi_empty(ap, GET_SYS_STR(MF_LABEL_PHONE)) == TRUE) {
+               elm_exit();
+       } else {
+               elm_win_lower(ap->mf_MainWindow.pWindow);
+       }
+
+       MF_TRACE_END;
+}
+
+Eina_Bool mf_launch_myfile_ug_exist(void *data)
+{
+       mf_retvm_if(data == NULL, EINA_FALSE, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       if (mf_fm_svc_wrapper_get_location(ap->mf_Status.path->str) == MYFILE_PHONE
+           && mf_navi_bar_is_navi_empty(ap, GET_SYS_STR(MF_LABEL_PHONE)) == TRUE) {
+               return EINA_TRUE;
+       } else {
+               return EINA_FALSE;
+       }
+}
+
+static void __mf_launch_ug_destory_cb(ui_gadget_h ug, void *priv)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(priv == NULL, "priv is NULL");
+
+       ug_destroy(ug);
+       struct appdata *ap = (struct appdata *)priv;
+       ap->mf_SharedGadget.ug = NULL;
+       ap->mf_Status.flagIME = EINA_TRUE;
+       MF_TRACE_END;
+}
+
+static void __mf_launch_ug_myfile_ug_destory_cb(ui_gadget_h ug, void *priv)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(priv == NULL, "priv is NULL");
+
+       ug_destroy(ug);
+       struct appdata *ap = (struct appdata *)priv;
+       ap->mf_SharedGadget.ug = NULL;
+
+       if (mf_launch_myfile_ug_exist(ap)) {
+               elm_exit();
+       } else {
+               elm_win_lower(ap->mf_MainWindow.pWindow);
+       }
+       MF_TRACE_END;
+}
+
+
+ui_gadget_h mf_launch_load_ug_myfile(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       ui_gadget_h ug = NULL;
+       struct ug_cbs cbs = { 0, };
+       if (ap->mf_SharedGadget.ug) {
+               mf_debug("Already exits some Gallery UG called by me, destroy it first!");
+               ug_destroy(ap->mf_SharedGadget.ug);
+               ap->mf_SharedGadget.ug = NULL;
+       }
+
+       service_h service;
+       int ret = 0;
+       ret = service_create(&service);
+
+       mf_retvm_if(ret != SERVICE_ERROR_NONE, NULL, "service create failed");
+
+       cbs.layout_cb = __mf_launch_ug_layout_cb;
+       cbs.result_cb = __mf_launch_ug_myfile_result_cb;
+       cbs.destroy_cb = __mf_launch_ug_myfile_ug_destory_cb;
+       cbs.priv = ap;
+
+       UG_INIT_EFL(ap->mf_MainWindow.pWindow, UG_OPT_INDICATOR_ENABLE);
+
+       service_add_extra_data(service, "path", ap->mf_Bundle.path);
+       service_add_extra_data(service, "select_type", ap->mf_Bundle.select_type);
+       service_add_extra_data(service, "file_type", ap->mf_Bundle.file_type);
+       service_add_extra_data(service, "marked_mode", ap->mf_Bundle.marked_mode);
+       service_add_extra_data(service, "drm_type", ap->mf_Bundle.drm_type);
+       ug = ug_create(NULL, MYFILE_UG_NAME, UG_MODE_FULLVIEW, service, &cbs);
+
+       if (ug == NULL) {
+               mf_debug("Fail to Create UG");
+               service_destroy(service);
+               MF_TRACE_END;
+               return NULL;
+       } else {
+               service_destroy(service);
+               MF_TRACE_END;
+               return ug;
+       }
+}
+
+void mf_launch_sns_load(void *data, char *path, MF_LOAD_UG_TYPE type, char *file_count)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(path == NULL, "path is NULL");
+
+       const char *pkg_name = NULL;
+       service_h service = NULL;
+       service_create(&service);
+       if (service == NULL) {
+               return;
+       }
+       switch (type) {
+       default:
+               break;
+       }
+       service_set_package(service, pkg_name);
+       int ret = service_send_launch_request(service, NULL, NULL);
+
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_debug("service_send_launch_request failed[%d]!", ret);
+       }
+
+       service_destroy(service);
+
+       return;
+}
+ui_gadget_h mf_launch_load_ug(void *data, char *path, MF_LOAD_UG_TYPE type, char *file_count)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       mf_retvm_if(path == NULL, NULL, "path is NULL");
+
+       if (type == MF_LOAD_UG_EMAIL
+       ) {
+               mf_launch_send_via_appcontrol(data, path, type);
+               return NULL;
+       }
+       struct appdata *ap = (struct appdata *)data;
+       ui_gadget_h ug = NULL;
+       struct ug_cbs cbs = { 0, };
+
+       service_h service;
+       int ret = 0;
+       ret = service_create(&service);
+
+       mf_retvm_if(ret != SERVICE_ERROR_NONE, NULL, "service create failed");
+
+       cbs.layout_cb = __mf_launch_ug_layout_cb;
+       //cbs.result_cb = __mf_launch_ug_result_cb;
+       cbs.destroy_cb = __mf_launch_ug_destory_cb;
+       cbs.priv = ap;
+
+       UG_INIT_EFL(ap->mf_MainWindow.pWindow, UG_OPT_INDICATOR_ENABLE);
+
+       switch (type) {
+       case MF_LOAD_UG_MESSAGE:
+               service_add_extra_data(service, "ATTACHFILE", path);
+               ug = ug_create(NULL, MESSAGE_UG_NAME, UG_MODE_FULLVIEW, service, &cbs);
+               break;
+       case MF_LOAD_UG_BLUETOOTH:
+               service_add_extra_data(service, "launch-type", "send");
+               service_add_extra_data(service, "filecount", file_count);
+               service_add_extra_data(service, "files", path);
+               ug = ug_create(NULL, BLUETOOTH_UG_NAME, UG_MODE_FULLVIEW, service, &cbs);
+               break;
+       case MF_LOAD_UG_DETAIL:
+               service_add_extra_data(service, "Path", path);
+               ug = ug_create(NULL, DETAIL_UG_NAME, UG_MODE_FULLVIEW, service, &cbs);
+               break;
+
+       default:
+               break;
+       }
+
+       if (ug == NULL) {
+               mf_debug("Fail to Create UG : %d", type);
+               service_destroy(service);
+               MF_TRACE_END;
+               return NULL;
+       } else {
+               if (type == MF_LOAD_UG_DETAIL) {
+                       ap->mf_Status.flagIME = EINA_FALSE;
+               }
+               service_destroy(service);
+               MF_TRACE_END;
+               return ug;
+       }
+}
+
+static void __mf_launch_service_reply_cb(service_h request, service_h reply, service_result_e result, void *user_data)
+{
+       MF_TRACE_BEGIN;
+       switch(result) {
+       case SERVICE_RESULT_SUCCEEDED:
+               mf_debug("SERVICE_RESULT_SUCCEEDED");
+               break;
+       case SERVICE_RESULT_FAILED:
+               mf_debug("SERVICE_RESULT_FAILED");
+               break;
+       case SERVICE_RESULT_CANCELED:
+               mf_debug("SERVICE_RESULT_CANCELED");
+               break;
+       default:
+               mf_debug("Unhandled value: %d!", result);
+               break;
+       }
+       MF_TRACE_END;
+}
+
+static void mf_launch_send_via_appcontrol(void *data, char *path, MF_LOAD_UG_TYPE type)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(path == NULL, "path is NULL");
+
+
+       struct appdata *ap = (struct appdata *)data;
+       const char *pkg_name = NULL;
+        service_h service = NULL;
+        int ret = service_create(&service);
+        if (ret != SERVICE_ERROR_NONE) {
+                mf_debug("service_create()... [0x%x]", ret);
+                goto END;
+        }
+
+        ret = service_set_operation(service, SERVICE_OPERATION_SEND);
+        if (ret != SERVICE_ERROR_NONE) {
+                mf_debug("service_set_operation()... [0x%x]", ret);
+                goto END;
+        }
+
+        switch (type) {
+        case MF_LOAD_UG_EMAIL:
+                ret = service_add_extra_data(service, "RUN_TYPE", "5");
+                if (ret != SERVICE_ERROR_NONE) {
+                        mf_debug("service_add_extra_data()... [0x%x]", ret);
+                        goto END;
+                }
+               pkg_name = EMAIL_UG_NAME;
+
+               ret = service_set_app_id(service, pkg_name);
+               if (ret != SERVICE_ERROR_NONE) {
+                       mf_debug("service_set_app_id()... [0x%x]", ret);
+                       goto END;
+               }
+                /* set window */
+               ret = service_set_window(service, elm_win_xwindow_get(ap->mf_MainWindow.pWindow));
+               if (ret != SERVICE_ERROR_NONE) {
+                       mf_debug("service_set_window()... [0x%x]", ret);
+                       goto END;
+               }
+                break;
+       default:
+                mf_debug("Not supported type.. [%d]", type);
+                goto END;
+        }
+
+        /* attatchment */
+        ret = service_set_uri(service, path);
+        if (ret != SERVICE_ERROR_NONE) {
+                mf_debug("service_set_uri()... [0x%x]", ret);
+                goto END;
+        }
+
+        /* appcontrol name */
+
+       ret = service_send_launch_request(service, __mf_launch_service_reply_cb, NULL);
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_debug("service_send_launch_request()... [0x%x]", ret);
+               goto END;
+       }
+
+
+END:
+       if (service) {
+               service_destroy(service);
+               service = NULL;
+       }
+
+}
+
+
+
+
+/******************************
+** Prototype    : mf_launch_service
+** Description  :
+** Input        : void *data
+**                char *path
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void result_cb(service_h request, service_h reply, service_result_e result, void *user_data)
+{
+       mf_debug("result is [%d]", result);
+}
+
+int mf_launch_service(void *data, char *path)
+{
+       mf_retvm_if(data == NULL, LAUNCH_TYPE_FAIL, "data is NULL");
+       mf_retvm_if(path == NULL, LAUNCH_TYPE_FAIL, "path is NULL");
+
+       fsFileType category = FILE_TYPE_NONE;
+       int ret = 0;
+       /* defence code */
+       if (ecore_file_file_get(path) == NULL) {
+               return LAUNCH_TYPE_FAIL;
+       }
+       if (mf_file_attr_is_dir(path)) {
+               return LAUNCH_TYPE_DIR;
+       }
+
+
+       service_h service;
+
+       ret = service_create(&service);
+        if (ret != SERVICE_ERROR_NONE) {
+                mf_debug("service_create()... [0x%x]", ret);
+                goto END;
+        }
+       mf_file_attr_get_file_category(path, &category);
+       if (category == FILE_TYPE_HTML) {
+               char *html_path = g_strconcat("file://", path, NULL);
+               ret = service_set_uri(service, html_path);
+               SAFE_FREE_CHAR(html_path);
+       } else if (category == FILE_TYPE_IMAGE) {
+               service_add_extra_data(service, "View By", "By Folder");
+               ret = service_set_uri(service, path);
+       } else {
+               ret = service_set_uri(service, path);
+       }
+
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_debug("service_set_uri()... [0x%x]", ret);
+               goto END;
+       }
+       ret = service_set_operation(service, SERVICE_OPERATION_VIEW);
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_debug("service_set_operation()... [0x%x]", ret);
+               goto END;
+       }
+       ret = service_send_launch_request(service, result_cb, NULL);
+       if (ret == SERVICE_ERROR_APP_NOT_FOUND) {
+               mf_popup_create_popup(data, POPMODE_TEXT, NULL, GET_SYS_STR(MF_LABEL_NO_APP), NULL, NULL, NULL, NULL, NULL);
+       } else if (ret != SERVICE_ERROR_NONE) {
+               mf_debug("service_send_launch_request()... [0x%x]", ret);
+       } else {
+               mf_util_set_recent_file(path);
+               mf_debug("service_send_launch_request()... [0x%x]", ret);
+       }
+
+END:
+       if (service) {
+               service_destroy(service);
+       }
+       return LAUNCH_TYPE_FORK;
+
+}
+
diff --git a/src/common/mf-log.c b/src/common/mf-log.c
new file mode 100644 (file)
index 0000000..6dfb302
--- /dev/null
@@ -0,0 +1,80 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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.
+ */
+
+
+
+#ifdef MYFILE_CRITICAL_LOG
+#include <stdio.h>
+#include <stdio.h>
+#include <malloc.h>
+#include <string.h>
+#include <unistd.h>
+#include <stdarg.h>
+
+#include "mf-log.h"
+#include "mf-dlog.h"
+#include "mf-util.h"
+
+static FILE *g_fp = NULL;
+
+int mf_log_init()
+{
+       pid_t process_id = 0;
+       process_id = getpid();
+
+       char *result_file = g_strdup_printf("%s-%d", MF_LOG_RESULT_FILE, (int)process_id);
+       if (result_file == NULL)
+               return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+
+       g_fp = fopen(result_file, "at+");
+
+       if(g_fp == NULL) {
+               free(result_file);
+               return MYFILE_ERR_FILE_OPEN_FAIL;
+       }
+
+       free(result_file);
+       return MYFILE_ERR_NONE;
+}
+void mf_log_finalize()
+{
+       if (g_fp != NULL) {
+               fclose(g_fp);
+               g_fp = NULL;
+       }
+
+}
+
+int mf_log_record(char *filename, const char *function, int line, char *fmt, ...)
+{
+       if (g_fp == NULL)
+               return MYFILE_ERR_INVALID_ARG;
+
+       char *message = NULL;
+       va_list arg_ptr;
+       va_start(arg_ptr, fmt);
+       message = g_strdup_vprintf(fmt, arg_ptr);
+       va_end(arg_ptr);
+
+       fprintf(g_fp, MF_LOG_FORMAT, filename, function, line, message);
+       if (message != NULL) {
+               free(message);
+               message = NULL;
+       }
+
+       return MYFILE_ERR_NONE;
+}
+#endif
diff --git a/src/common/mf-media-content.c b/src/common/mf-media-content.c
new file mode 100644 (file)
index 0000000..9a7581e
--- /dev/null
@@ -0,0 +1,161 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <media_content.h>
+
+#include "mf-dlog.h"
+#include "mf-util.h"
+#include "mf-media-content.h"
+
+mf_condition_s *mf_media_content_condition_create(const char *condition)
+{
+       mf_condition_s *filter = NULL;
+
+       filter = (mf_condition_s *)calloc(1, sizeof(mf_condition_s));
+
+       if (filter == NULL) {
+               return NULL;
+       }
+
+       memset(filter, 0, sizeof(mf_condition_s));
+
+       mf_debug("condition [%s]", condition);
+       filter->cond = condition;
+       filter->collate_type = MEDIA_CONTENT_COLLATE_DEFAULT;
+       filter->sort_type = MEDIA_CONTENT_ORDER_DESC;
+       filter->sort_keyword = MEDIA_MODIFIED_TIME;
+       filter->with_meta = true;
+
+       return filter;
+}
+
+void mf_media_conte_free_condition(mf_condition_s **condition)
+{
+       mf_retm_if(condition == NULL, "condition is NULL");
+       if (*condition) {
+               SAFE_FREE_CHAR((*condition)->cond);
+               SAFE_FREE_CHAR(*condition);
+       }
+}
+
+int mf_media_content_create_filter(filter_h *filter, mf_condition_s *condition)
+{
+       mf_retvm_if(filter == NULL, -1, "filter is NULL");
+       mf_retvm_if(condition == NULL, -1, "condition is NULL");
+
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       filter_h tmp_filter = NULL;
+       ret = media_filter_create(&tmp_filter);
+       if(ret != MEDIA_CONTENT_ERROR_NONE) {
+               mf_debug("Fail to create filter");
+               return ret;
+       }
+       if (condition->cond) {
+               ret = media_filter_set_condition(tmp_filter, condition->cond,
+                                                condition->collate_type);
+               if(ret != MEDIA_CONTENT_ERROR_NONE) {
+                       mf_debug("Fail to set condition");
+                       goto ERROR;
+               }
+       }
+
+       if (condition->sort_keyword) {
+               ret = media_filter_set_order(tmp_filter, condition->sort_type,
+                                            condition->sort_keyword,
+                                            condition->collate_type);
+               if(ret != MEDIA_CONTENT_ERROR_NONE) {
+                       mf_debug("Fail to set order");
+                       goto ERROR;
+               }
+       }
+
+       mf_debug("offset is %d, count is %d", condition->offset, condition->count);
+       if (condition->offset != -1 && condition->count != -1 &&
+           condition->count > condition->offset) {
+               ret = media_filter_set_offset(tmp_filter, condition->offset,
+                                             condition->count);
+               if(ret != MEDIA_CONTENT_ERROR_NONE) {
+                       mf_debug("Fail to set offset");
+                       goto ERROR;
+               }
+       }
+       *filter = tmp_filter;
+       return ret;
+ ERROR:
+       if (tmp_filter) {
+               media_filter_destroy(tmp_filter);
+               tmp_filter = NULL;
+       }
+       return ret;
+}
+
+int mf_media_content_destroy_filter(filter_h filter)
+{
+       mf_retvm_if(filter == NULL, -1, "filter is NULL");
+       int ret = MEDIA_CONTENT_ERROR_NONE;
+       ret = media_filter_destroy(filter);
+
+       return ret;
+}
+
+int mf_media_content_data_get(void *data, char *condition, bool (*func) (media_info_h media, void *data))
+{
+
+       mf_condition_s *temp_condition = NULL;
+       filter_h filter = NULL;
+       temp_condition = mf_media_content_condition_create(condition);
+
+       int ret = -1;
+       ret = mf_media_content_create_filter(&filter, temp_condition);
+
+       if (ret != 0) {
+               mf_debug("Create filter failed");
+               mf_media_conte_free_condition(&temp_condition);
+               return ret;
+       }
+
+
+       ret = media_info_foreach_media_from_db(filter,
+                                              (media_info_cb)func,
+                                              data);
+       if (ret != 0) {
+               mf_debug("media_info_foreach_media_from_db failed: %d", ret);
+       } else {
+               mf_debug("media_info_foreach_media_from_db success!", ret);
+       }
+
+       mf_media_content_destroy_filter(filter);
+       mf_media_conte_free_condition(&temp_condition);
+
+       return ret;
+
+}
+
+void mf_media_content_scan_file(const char *path)
+{
+       mf_retm_if(path == NULL, "path is NULL");
+
+       media_content_scan_file(path);
+}
+
+void mf_media_content_scan_folder(const char *path)
+{
+       mf_retm_if(path == NULL, "path is NULL");
+
+       media_content_scan_folder(path, false, NULL, NULL);
+}
+
diff --git a/src/common/mf-otg.c b/src/common/mf-otg.c
new file mode 100644 (file)
index 0000000..9ba106c
--- /dev/null
@@ -0,0 +1,685 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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.
+ */
+
+
+
+#ifdef MYFILE_USB_OTG
+#include "mf-main.h"
+#include "mf-otg.h"
+#include "mf-widget.h"
+#include "mf-fs-util.h"
+#include "mf-fm-svc-wrapper.h"
+
+void mf_otg_list_clean(void *data, mf_otg_list_e list_type)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_List *l = NULL;
+       void *node = NULL;
+       switch (list_type) {
+       case MF_OTG_LIST_DEV:
+               EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+                       if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                               free(((mf_otg_node *)node)->name);
+                               ((mf_otg_node *)node)->name = NULL;
+                       }
+               }
+
+               if (ap->mf_FileOperation.otg_dev_list) {
+                       eina_list_free(ap->mf_FileOperation.otg_dev_list);
+                       ap->mf_FileOperation.otg_dev_list = NULL;
+               }
+               break;
+       case MF_OTG_LIST_REMOVED:
+               EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_removed_list, l, node) {
+                       if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                               free(((mf_otg_node *)node)->name);
+                               ((mf_otg_node *)node)->name = NULL;
+                       }
+               }
+
+               eina_list_free(ap->mf_FileOperation.otg_dev_removed_list);
+               ap->mf_FileOperation.otg_dev_removed_list = NULL;
+               break;
+       default:
+               break;
+       }
+}
+
+int mf_otg_init(void *data)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_FileOperation.otg_dev_list != NULL)
+               mf_otg_list_clean(ap, MF_OTG_LIST_DEV);
+
+       if(ap->mf_FileOperation.otg_dev_removed_list != NULL)
+               mf_otg_list_clean(ap, MF_OTG_LIST_REMOVED);
+
+       DIR *pDir = NULL;
+       struct dirent *ent;
+       pDir = opendir(OTG_FOLDER);
+
+       if (pDir == NULL) {
+               return  MYFILE_ERR_DIR_OPEN_FAIL;
+       }
+
+       while ((ent = readdir(pDir)) != NULL) {
+               mf_otg_node *pNode = NULL;
+
+               if (g_strcmp0(ent->d_name, ".") == 0 || g_strcmp0(ent->d_name, "..") == 0) {
+                       continue;
+               }
+
+               if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
+                       continue;
+               }
+
+               pNode = (mf_otg_node *) malloc(sizeof(mf_otg_node));
+
+               if (pNode == NULL) {
+                       continue;
+               }
+               memset(pNode, 0, sizeof(mf_otg_node));
+               /* set name */
+               pNode->name = g_strconcat(OTG_FOLDER, "/", ent->d_name, NULL);
+               /* set flag */
+               pNode->flag_using = false;
+               pNode->flag_editstart = false;
+
+               ap->mf_FileOperation.otg_dev_list = eina_list_append(ap->mf_FileOperation.otg_dev_list, pNode);
+       }
+       closedir(pDir);
+       return MYFILE_ERR_NONE;
+}
+
+bool mf_otg_is_in_list(void *data, const char *dev_name)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_List *l = NULL;
+       void *node = NULL;
+
+       EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+               if (node && g_strcmp0(((mf_otg_node *)node)->name, dev_name) == 0)
+                       return true;
+       }
+       return false;
+}
+
+int mf_otg_insert_node(void *data, const char *name)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       if (mf_otg_is_in_list(ap, name)) {
+               return MYFILE_ERR_NONE;
+       } else {
+               mf_otg_node *pNode = NULL;
+               pNode = (mf_otg_node *)malloc(sizeof(mf_otg_node));
+
+               if (pNode == NULL) {
+                       return MYFILE_ERR_ALLOCATE_MEMORY_FAIL;
+               }
+               memset(pNode, 0, sizeof(mf_otg_node));
+
+               /* set name */
+               pNode->name = g_strdup(name);
+               /* set flag */
+               pNode->flag_using = false;
+               pNode->flag_editstart = false;
+
+               ap->mf_FileOperation.otg_dev_list = eina_list_append(ap->mf_FileOperation.otg_dev_list, pNode);
+       }
+       return MYFILE_ERR_NONE;
+}
+int mf_otg_delete_node(void *data, const char *name)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       if (!mf_otg_is_in_list(ap, name)) {
+               mf_debug();
+               return MYFILE_ERR_NONE;
+       } else {
+               Eina_List *l = NULL;
+               void *node = NULL;
+               EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+                       if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                               if (g_strcmp0(((mf_otg_node *)node)->name, name) == 0){
+                                       free(((mf_otg_node *)node)->name);
+                                       ((mf_otg_node *)node)->name = NULL;
+                               }
+                               ap->mf_FileOperation.otg_dev_list = eina_list_remove_list(ap->mf_FileOperation.otg_dev_list, l);
+                               break;
+                       }
+               }
+       }
+       return MYFILE_ERR_NONE;
+}
+
+/*
+ *     flag_inc_dec:
+ *             true:   insert node
+ *             false:  delete node
+*/
+int mf_otg_list_update(void *data, bool flag_inc_dec)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       mf_debug();
+       if (flag_inc_dec == TRUE) {
+               DIR *pDir = NULL;
+               struct dirent *ent;
+               pDir = opendir(OTG_FOLDER);
+
+               if (pDir == NULL) {
+                       return MYFILE_ERR_DIR_OPEN_FAIL;
+               }
+
+               while ((ent = readdir(pDir)) != NULL) {
+                       if (g_strcmp0(ent->d_name, ".") == 0 || g_strcmp0(ent->d_name, "..") == 0) {
+                               continue;
+                       }
+
+                       if ((ent->d_type & DT_DIR) == 0 && (ent->d_type & DT_REG) == 0) {
+                               mf_debug();
+                               continue;
+                       }
+
+                       mf_debug();
+                       char *test_name = g_strconcat(OTG_FOLDER, "/", ent->d_name, NULL);
+                       mf_debug("current test_name is %s", test_name);
+                       if (test_name != NULL) {
+                               mf_debug();
+                               /*we will check if the device is already in the list in mf_otg_insert_node*/
+                               if (flag_inc_dec == true) {
+                                       mf_otg_insert_node(ap, test_name);
+                                       mf_debug();
+                               }
+
+                               free(test_name);
+                               test_name = NULL;
+                       }
+               }
+               closedir(pDir);
+       } else {
+               Eina_List *l = NULL;
+               void *node = NULL;
+
+               EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+                       if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                               mf_debug("name is %s", ((mf_otg_node *)node)->name);
+                               if (ecore_file_exists(((mf_otg_node *)node)->name) == false)
+                                       mf_otg_delete_node(ap, ((mf_otg_node *)node)->name);
+                               }
+                       }
+       }
+       return MYFILE_ERR_NONE;
+}
+
+bool mf_otg_is_empty(void *data)
+{
+       return ecore_file_exists(OTG_FOLDER) && ecore_file_dir_is_empty(OTG_FOLDER);
+}
+
+char *mf_otg_get_node_in_use(void *data)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_List *l = NULL;
+       void *node = NULL;
+
+       EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+               if ((mf_otg_node *)node != NULL) {
+                       if (((mf_otg_node *)node)->flag_using == true) {
+                               return ((mf_otg_node *)node)->name;
+                       }
+               }
+       }
+       return NULL;
+}
+
+void mf_otg_set_node_using_flag(void *data, char *dev_name, bool status)
+{
+       assert(data);
+       /*g_strcmp0 used, no need to check dev_name here*/
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_List *l = NULL;
+       void *node = NULL;
+
+       mf_debug("dev_name is %s", dev_name);
+       EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+
+               if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                       if (g_strcmp0(((mf_otg_node *)node)->name, dev_name) == 0) {
+                               ((mf_otg_node *)node)->flag_using = status;
+                       }
+               }
+       }
+}
+
+int mf_otg_get_node_using_flag(void *data, char *dev_name, bool *status)
+{
+       assert(data);
+       assert(status);
+       /*g_strcmp0 used, no need to check dev_name here*/
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_List *l = NULL;
+       void *node = NULL;
+
+       EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+               if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                       if (g_strcmp0(((mf_otg_node *)node)->name, dev_name) == 0) {
+                               *status = ((mf_otg_node *)node)->flag_using;
+                               return MYFILE_ERR_NONE;
+                       }
+               }
+       }
+       return MYFILE_ERR_GET_STAT_FAIL;
+}
+
+void mf_otg_set_node_editstart_flag(void *data, char *dev_name, bool status)
+{
+       assert(data);
+       /*g_strcmp0 used, no need to check dev_name here*/
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_List *l = NULL;
+       void *node = NULL;
+
+       mf_debug("dev_name is %s", dev_name);
+       EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+
+               if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                       if (g_strcmp0(((mf_otg_node *)node)->name, dev_name) == 0) {
+                               ((mf_otg_node *)node)->flag_editstart = status;
+                       }
+               }
+       }
+}
+
+int mf_otg_get_node_editstart_flag(void *data, char *dev_name, bool *status)
+{
+       assert(data);
+       assert(status);
+       /*g_strcmp0 used, no need to check dev_name here*/
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_List *l = NULL;
+       void *node = NULL;
+
+       EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+
+               if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                       if (g_strcmp0(((mf_otg_node *)node)->name, dev_name) == 0) {
+                                               *status = ((mf_otg_node *)node)->flag_editstart;
+                                               return MYFILE_ERR_NONE;
+                       }
+               }
+       }
+       return MYFILE_ERR_GET_STAT_FAIL;
+}
+
+void mf_otg_generate_removed_list(void *data)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_FileOperation.otg_dev_removed_list != NULL) {
+               mf_debug();
+               mf_otg_list_clean(ap, MF_OTG_LIST_REMOVED);
+       }
+       Eina_List *l = NULL;
+       void *node = NULL;
+
+       mf_otg_node *pNode = NULL;
+       EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+
+               if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                       if (ecore_file_exists(((mf_otg_node *)node)->name) == false) {
+                               pNode = (mf_otg_node *) malloc(sizeof(mf_otg_node));
+
+                               if (pNode == NULL) {
+                                       continue;
+                               }
+                               memset(pNode, 0, sizeof(mf_otg_node));
+                               /* set name */
+                               pNode->name = g_strdup(((mf_otg_node *)node)->name);
+                               /* set flag */
+                               pNode->flag_using = ((mf_otg_node *)node)->flag_using;
+                               pNode->flag_editstart = ((mf_otg_node *)node)->flag_editstart;
+
+                               ap->mf_FileOperation.otg_dev_removed_list = eina_list_append(ap->mf_FileOperation.otg_dev_removed_list, pNode);
+                       }
+               }
+
+       }
+}
+
+void mf_otg_clear_removed_device(void *data)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       const Eina_List *l = NULL;
+       void *node = NULL;
+
+       EINA_LIST_FOREACH(ap->mf_FileOperation.otg_dev_list, l, node) {
+               if ((mf_otg_node *)node != NULL && ((mf_otg_node *)node)->name != NULL) {
+                       if (ecore_file_exists(((mf_otg_node *)node)->name) == false) {
+                               mf_otg_delete_node(ap, ((mf_otg_node *)node)->name);
+                       }
+               }
+       }
+}
+
+/*do external operation according to the opt*/
+static void __mf_otg_dev_removed_ex_operation(void *data, mf_otg_ex_opt_e opt)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       /* try to remove all the popup and give an notice popup */
+       if (opt & MF_OTG_OPT_REQ_POPUP_DEL) {   /*delete request popup in data transmit period*/
+               ap->mf_MainWindow.pMmcRemovedPopup = mf_popup_create_popup(ap, POPMODE_TEXT_NOT_DISABLED, NULL,
+                                                                          "OTG device removed...", NULL, NULL, NULL, NULL, NULL);
+       }
+
+       if (opt & MF_OTG_OPT_NOR_POPUP_DEL) {   /*delete normal popup*/
+               if (ap->mf_MainWindow.pNormalPopup) {
+                       evas_object_del(ap->mf_MainWindow.pNormalPopup);
+                       ap->mf_MainWindow.pNormalPopup = NULL;
+               }
+       }
+
+}
+
+void mf_otg_dev_all_removed_update(void *data, mf_otg_ex_opt_e opt)
+{
+       mf_debug();
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       mf_debug();
+       Evas_Object *entry = NULL;
+       myfileNaviBar *pNaviToShowStruct = NULL;
+       myfileNaviBar *pNaviOTG = NULL;
+       Evas_Object *pNaviBarStorageView = NULL;
+
+       /*otg tab destroyed, finalize otg*/
+       mf_otg_finalize(ap);
+
+       MF_STORAGE optStorage = MYFILE_OTG;
+
+       pNaviBarStorageView = ap->mf_MainWindow.pNaviBar;
+       pNaviOTG = mf_navi_bar_get_struct_by_label(ap, GET_STR(MF_LABEL_OTG));
+
+       char status = MF_OTG_STATUS_NONE;
+
+       if (pNaviOTG != NULL && pNaviOTG->naviFlagEditStart == TRUE)
+               status |= MF_OTG_STATUS_EDIT;
+
+       if (pNaviOTG != NULL && pNaviOTG->naviFlagInUse == TRUE)
+               status |= MF_OTG_STATUS_USING;
+
+       /*destroy otg navi bar*/
+       mf_debug("navi count is %d", eina_list_count(ap->mf_MainWindow.plistNaviBar));
+       mf_navi_bar_remove_list_item_by_label(ap, GET_STR(MF_LABEL_OTG));
+       mf_debug();
+
+       if (status & MF_OTG_STATUS_EDIT) {
+               mf_navi_bar_recover_list(ap);
+       }
+
+       pNaviToShowStruct = mf_navi_bar_get_struct_by_label(ap, GET_SYS_STR(MF_LABEL_PHONE));
+
+       if (ap->mf_Status.view_type == mf_view_root) {
+               mf_callback_storage_remove_view_operation(ap, optStorage);
+               if (status & MF_OTG_STATUS_EDIT) {
+                       ap->mf_Status.more = MORE_DEFAULT;
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+               } else if (status & MF_OTG_STATUS_USING){
+                       if ( ap->mf_Status.more == MORE_CREATE_FOLDER
+                            && (ap->mf_Status.preMore == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.preMore == MORE_INTERNAL_COPY || ap->mf_Status.preMore == MORE_INTERNAL_MOVE)) {
+                               ap->mf_Status.more = ap->mf_Status.preMore;
+                       } else if (ap->mf_Status.more != MORE_INTERNAL_COPY_MOVE && ap->mf_Status.preMore != MORE_INTERNAL_COPY && ap->mf_Status.preMore != MORE_INTERNAL_MOVE) {
+                               ap->mf_Status.more = MORE_DEFAULT;
+                       }
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+               }
+       } else if (ap->mf_Status.view_type == mf_view_root_category) {
+               mf_callback_storage_remove_category_view_items(ap, optStorage);
+       } else {
+               if (status & MF_OTG_STATUS_EDIT) {
+                       ap->mf_Status.more = MORE_DEFAULT;
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+               } else if (status & MF_OTG_STATUS_USING){
+                       if ( ap->mf_Status.more == MORE_CREATE_FOLDER
+                            && (ap->mf_Status.preMore == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.preMore == MORE_INTERNAL_COPY || ap->mf_Status.preMore == MORE_INTERNAL_MOVE)) {
+                               ap->mf_Status.more = ap->mf_Status.preMore;
+                       } else if (ap->mf_Status.more != MORE_INTERNAL_COPY_MOVE && ap->mf_Status.preMore != MORE_INTERNAL_COPY && ap->mf_Status.preMore != MORE_INTERNAL_MOVE) {
+                               ap->mf_Status.more = MORE_DEFAULT;
+                       }
+                       mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+               }
+
+       }
+
+       /*delete external storage from tab bar*/
+       mf_debug("navi count is %d", eina_list_count(ap->mf_MainWindow.plistNaviBar));
+       /*check tab bar item to decide if delete tab bar*/
+       mf_debug("navi count is %d", eina_list_count(ap->mf_MainWindow.plistNaviBar));
+
+       /*clear some external detail after remove otg device*/
+       mf_debug();
+       if (status) {
+               __mf_otg_dev_removed_ex_operation(ap, opt);
+       } else {
+               mf_otg_ex_opt_e updated_opt = opt;
+               if (updated_opt & MF_OTG_OPT_NOR_POPUP_DEL)
+                       updated_opt ^= MF_OTG_OPT_NOR_POPUP_DEL;
+
+               if (updated_opt & MF_OTG_OPT_REQ_POPUP_DEL)
+                       updated_opt ^= MF_OTG_OPT_REQ_POPUP_DEL;
+
+               __mf_otg_dev_removed_ex_operation(ap, updated_opt);
+       }
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               entry = ap->mf_MainWindow.pEntry;
+               if (entry != NULL) {
+                       elm_object_focus_set(entry, EINA_TRUE);
+               }
+       }
+}
+
+void mf_otg_dev_removed_update(void *data, mf_otg_ex_opt_e opt)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       Evas_Object *pNaviBarStorageView = NULL;
+       myfileNaviBar *pNavi_s = NULL;
+       myfileNaviBar *pNaviToShowStruct = NULL;
+
+       pNaviBarStorageView = ap->mf_MainWindow.pNaviBar;
+       pNavi_s = mf_navi_bar_get_struct_by_label(ap, GET_STR(MF_LABEL_OTG));
+       if (pNavi_s == NULL) {
+               return;
+       }
+       Eina_List *l = NULL;
+       void *node = NULL;
+
+       int error_code = 0;
+       char status = MF_OTG_STATUS_NONE;
+       EINA_LIST_FOREACH (ap->mf_FileOperation.otg_dev_removed_list, l, node) {
+               if (node) {
+                       bool using_status = FALSE;
+                       error_code = mf_otg_get_node_using_flag(ap, ((mf_otg_node *)node)->name, &using_status);
+                       if (error_code == 0 && using_status == TRUE)
+                               status |= MF_OTG_STATUS_USING;
+                       bool edit_status = FALSE;
+                       error_code = mf_otg_get_node_editstart_flag(ap, ((mf_otg_node *)node)->name, &edit_status);
+                       if (error_code == 0 && edit_status == TRUE)
+                               status |= MF_OTG_STATUS_EDIT;
+               }
+       }
+
+       /*check both flags*/
+       mf_debug("status is %d", status);
+       mf_debug("status & MF_OTG_STATUS_EDIT is %d", status & MF_OTG_STATUS_EDIT);
+
+       if (status & MF_OTG_STATUS_EDIT) {
+               mf_debug();
+               /*pop edit related view for each navi bar*/
+               pNaviToShowStruct = mf_navi_bar_recover_list(ap);
+
+               /*pop to the root view of OTG*/
+               Elm_Object_Item *bottom_it = elm_naviframe_bottom_item_get(pNaviBarStorageView);
+
+               elm_naviframe_item_pop_to(bottom_it);
+
+               /* set the navi's currentpath to be root path*/
+               if (pNavi_s->pCurrentPath != NULL) {
+                       free(pNavi_s->pCurrentPath);
+               }
+               pNavi_s->pCurrentPath = g_strdup(OTG_FOLDER);
+               ap->mf_MainWindow.pNaviLayout = ap->mf_Otg.rootpath_layout;
+               ap->mf_MainWindow.pNaviBox = ap->mf_Otg.rootpath_box;
+
+               if (pNavi_s->naviFlagInUse == TRUE){
+                       if (ap->mf_Status.path != NULL) {
+                               g_string_free(ap->mf_Status.path, TRUE);
+                       }
+                       ap->mf_Status.path = g_string_new(OTG_FOLDER);
+               }
+       }else if (status & MF_OTG_STATUS_USING) {
+               if (ap->mf_Status.more == MORE_SEARCH) {
+                       if (ap->mf_FileOperation.sync_pipe != NULL) {
+                               ecore_pipe_del(ap->mf_FileOperation.sync_pipe);
+                               ap->mf_FileOperation.sync_pipe = NULL;
+                       }
+
+                       if (ap->mf_FileOperation.search_IME_hide_timer != NULL) {
+                               ecore_timer_del(ap->mf_FileOperation.search_IME_hide_timer);
+                               ap->mf_FileOperation.search_IME_hide_timer = NULL;
+                       }
+
+                       if (ap->mf_Status.search_handler > 0) {
+                               mf_search_stop(ap->mf_Status.search_handler);
+                       }
+
+                       if (ap->mf_Status.search_handler > 0) {
+                               mf_search_finalize(&ap->mf_Status.search_handler);
+                       }
+               }
+               if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                   || (ap->mf_Status.more == MORE_CREATE_FOLDER && (ap->mf_Status.preMore == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE))) {
+                       /*pop unused path select view*/
+                       /*create and push root view of OTG*/
+                       SAFE_FREE_GSTRING(ap->mf_Status.path);
+                       ap->mf_Status.path = g_string_new(OTG_FOLDER);
+
+                       SAFE_FREE_CHAR(pNavi_s->pCurrentPath);
+                       pNavi_s->pCurrentPath = g_strdup(OTG_FOLDER);
+
+                       if (ap->mf_Status.more == MORE_CREATE_FOLDER)
+                               ap->mf_Status.more = ap->mf_Status.preMore;
+
+                       mf_navi_bar_create_path_select_view_otg_root(ap);
+                       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+               } else {
+                       ap->mf_Status.more = MORE_DEFAULT;
+
+                       /*pop to the root view of OTG*/
+                       Elm_Object_Item *bottom_it = elm_naviframe_bottom_item_get(pNaviBarStorageView);
+
+                       elm_naviframe_item_pop_to(bottom_it);
+
+                       /* set the navi's currentpath to be root path*/
+                       if (pNavi_s->pCurrentPath != NULL) {
+                               free(pNavi_s->pCurrentPath);
+                       }
+                       pNavi_s->pCurrentPath = g_strdup(OTG_FOLDER);
+                       ap->mf_MainWindow.pNaviLayout = ap->mf_Otg.rootpath_layout;
+                       ap->mf_MainWindow.pNaviBox = ap->mf_Otg.rootpath_box;
+                       ap->mf_MainWindow.pNaviItem = ap->mf_Otg.rootpath_navi_item;
+
+                       if (pNavi_s->naviFlagInUse == TRUE){
+                               if (ap->mf_Status.path != NULL) {
+                                       g_string_free(ap->mf_Status.path, TRUE);
+                               }
+                               ap->mf_Status.path = g_string_new(OTG_FOLDER);
+                       }
+               }
+       }
+
+       if ((status & MF_OTG_STATUS_EDIT)
+           || (pNavi_s && pNavi_s->naviFlagInUse && ((status & MF_OTG_STATUS_USING) || mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str) == MYFILE_OTG))) {
+               mf_debug("status is %d", status);
+               /*refresh the list*/
+               mf_debug("status & MF_OTG_STATUS_EDIT is %d", status & MF_OTG_STATUS_EDIT);
+               if (status & MF_OTG_STATUS_USING) {
+                       mf_debug();
+                       pNaviToShowStruct = pNavi_s;
+
+                       if ( ap->mf_Status.more == MORE_CREATE_FOLDER && (ap->mf_Status.preMore == MORE_INTERNAL_COPY_MOVE
+                            || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE)) {
+                               ap->mf_Status.more = ap->mf_Status.preMore;
+                       } else if (ap->mf_Status.more != MORE_INTERNAL_COPY_MOVE && ap->mf_Status.more != MORE_INTERNAL_COPY && ap->mf_Status.more != MORE_INTERNAL_MOVE) {
+                               ap->mf_Status.more = MORE_DEFAULT;
+                       }
+               }
+               mf_navi_bar_refresh_recovered_view(ap, pNaviToShowStruct);
+       }
+
+       /*clear some external detail after remove otg device*/
+       mf_debug();
+       if (status) {
+               __mf_otg_dev_removed_ex_operation(ap, opt);
+       } else {
+               mf_otg_ex_opt_e updated_opt = opt;
+               if (updated_opt & MF_OTG_OPT_NOR_POPUP_DEL)
+                       updated_opt ^= MF_OTG_OPT_NOR_POPUP_DEL;
+
+               if (updated_opt & MF_OTG_OPT_REQ_POPUP_DEL)
+                       updated_opt ^= MF_OTG_OPT_REQ_POPUP_DEL;
+
+               __mf_otg_dev_removed_ex_operation(ap, updated_opt);
+       }
+       mf_debug("dev list count is %d", eina_list_count(ap->mf_FileOperation.otg_dev_list));
+       mf_otg_list_update(ap, FALSE);
+       mf_debug("dev list count is %d", eina_list_count(ap->mf_FileOperation.otg_dev_list));
+
+}
+void mf_otg_finalize(void *data)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       mf_otg_list_clean(ap, MF_OTG_LIST_DEV);
+       mf_otg_list_clean(ap, MF_OTG_LIST_REMOVED);
+}
+
+#endif
diff --git a/src/common/mf-s-beam.c b/src/common/mf-s-beam.c
new file mode 100644 (file)
index 0000000..c2567da
--- /dev/null
@@ -0,0 +1,263 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <nfc.h>
+#include <app_service.h>
+#include <vconf.h>
+
+#include "mf-s-beam.h"
+#include "mf-dlog.h"
+#include "mf-util.h"
+
+#define S_BEAM_SEPERATOR       "|"
+
+typedef struct {
+       bool initialized;
+       bool enabled;
+
+       Mf_Sbeam_Cb callback;
+       void *user_data;
+} mf_sbeam_s;
+
+static mf_sbeam_s *g_sbeam_data = NULL;
+
+bool __mf_sbeam_is_on()
+{
+       bool ready = false;
+
+       int value = 0;
+       if (vconf_get_bool(VCONFKEY_NFC_SBEAM, &value) == 0) {
+               if (value == VCONFKEY_NFC_SBEAM_ON)
+                       ready = true;
+               else
+                       mf_debug("sbeam is off");
+       } else {
+               mf_error("vconf_get_int()");
+       }
+
+       return ready;
+}
+
+static void
+__mf_sbeam_target_discovered_cb(nfc_discovered_type_e type, nfc_p2p_target_h target, void *user_data)
+{
+       MF_TRACE_BEGIN;
+       MF_CHECK(g_sbeam_data);
+       MF_CHECK(g_sbeam_data->enabled);
+
+       if (type == NFC_DISCOVERED_TYPE_ATTACHED && g_sbeam_data->callback)
+       {
+               mf_debug("NFC_DISCOVERED_TYPE_ATTACHED");
+               g_sbeam_data->callback(g_sbeam_data->user_data);
+       }
+       else if (type == NFC_DISCOVERED_TYPE_DETACHED)
+       {
+               mf_debug("NFC_DISCOVERED_TYPE_DETACHED");
+       }
+}
+
+
+static bool
+__mf_sbeam_nfc_mgr_init()
+{
+       MF_CHECK_FALSE(g_sbeam_data);
+
+       int ret = 0;
+       if (!g_sbeam_data->initialized) {
+               ret = nfc_manager_initialize(NULL, NULL);
+               if (ret == NFC_ERROR_NONE) {
+                       mf_debug("NFC initializing is success. activating");
+                       g_sbeam_data->initialized = true;
+               } else {
+                       mf_error("nfc_manager_initialize().. [0x%x]");
+                       return false;
+               }
+       }
+
+       ret = nfc_manager_set_p2p_target_discovered_cb(__mf_sbeam_target_discovered_cb, g_sbeam_data);
+       if (ret != NFC_ERROR_NONE) {
+               mf_debug("nfc_manager_set_p2p_target_discovered_cb()..[0x%x]", ret);
+               return false;
+       }
+
+       return true;
+}
+
+static bool
+__mf_sbeam_nfc_mgr_deinit()
+{
+       MF_CHECK_FALSE(g_sbeam_data);
+
+       int ret = 0;
+       if (g_sbeam_data->initialized) {
+               ret = nfc_manager_deinitialize();
+               if (ret != NFC_ERROR_NONE) {
+                       mf_error("nfc_manager_deinitialize().. [0x%x]", ret);
+                       return false;
+               }
+               g_sbeam_data->initialized = false;
+       }
+
+       return true;
+}
+
+static void
+__mf_sbeam_state_changed_cb(keynode_t *node, void *user_data)
+{
+       MF_TRACE_BEGIN;
+       mf_sbeam_s *sbeam_data = user_data;
+       MF_CHECK(sbeam_data);
+
+       if (__mf_sbeam_is_on() && sbeam_data->enabled)
+               __mf_sbeam_nfc_mgr_init();
+       else
+               __mf_sbeam_nfc_mgr_deinit();
+}
+
+bool
+mf_sbeam_init()
+{
+       MF_TRACE_BEGIN;
+       g_sbeam_data = calloc(1, sizeof(mf_sbeam_s));
+       MF_CHECK_VAL(g_sbeam_data, false);
+
+       if (vconf_notify_key_changed(VCONFKEY_NFC_SBEAM, __mf_sbeam_state_changed_cb, g_sbeam_data) < 0) {
+               mf_error("fail to vconf_notify_key_changed()");
+               mf_sbeam_finalize();
+               return false;
+       }
+
+       if (__mf_sbeam_is_on())
+               mf_sbeam_enable();
+
+       return true;
+}
+
+void
+mf_sbeam_finalize()
+{
+       MF_TRACE_BEGIN;
+       mf_sbeam_disable();
+       SAFE_FREE_CHAR(g_sbeam_data);
+}
+
+bool
+mf_sbeam_enable()
+{
+       MF_TRACE_BEGIN;
+       MF_CHECK_FALSE(g_sbeam_data);
+
+       g_sbeam_data->enabled = true;
+
+       return __mf_sbeam_nfc_mgr_init();
+}
+bool mf_sbeam_disable()
+{
+       MF_TRACE_BEGIN;
+       MF_CHECK_FALSE(g_sbeam_data);
+
+       g_sbeam_data->enabled = false;
+
+       return __mf_sbeam_nfc_mgr_deinit();
+}
+
+bool mf_sbeam_set_callback(Mf_Sbeam_Cb callback, void *user_data)
+{
+       MF_TRACE_BEGIN;
+       MF_CHECK_FALSE(g_sbeam_data);
+
+       g_sbeam_data->callback = callback;
+       g_sbeam_data->user_data = user_data;
+
+       return true;
+}
+
+bool mf_sbeam_share_files(Evas_Object *win, Eina_List *file_list)
+{
+       MF_CHECK_FALSE(win);
+
+       int ret = 0;
+       service_h svc_handle;
+       ret = service_create(&svc_handle);
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_error("service_create().. [0x%x]", ret);
+               goto exception;
+       }
+
+       ret = service_set_operation(svc_handle, "http://tizen.org/appcontrol/operation/nfc_sbeam_send");
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_error("service_set_operation().. [0x%x]", ret);
+               goto exception;
+       }
+
+       ret = service_set_mime(svc_handle, "text/DirectShareFile");
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_error("service_set_mime().. [0x%x]", ret);
+               goto exception;
+       }
+       ret = service_set_window(svc_handle, elm_win_xwindow_get(win));
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_error("service_set_window().. [0x%x]", ret);
+               goto exception;
+       }
+
+       char *uri = NULL;
+       if (file_list) {
+               Eina_List *current = file_list;
+               Eina_List *l = NULL;
+               GString *pNode = NULL;
+
+
+               EINA_LIST_FOREACH(current, l, pNode) {
+                       if (pNode != NULL) {
+                               if (uri == NULL) {
+                                       uri = g_strconcat(pNode->str, NULL);
+                               } else {
+                                       gchar *temp = uri;
+                                       uri = g_strconcat(uri, S_BEAM_SEPERATOR, pNode->str, NULL);
+                                       g_free(temp);
+                               }
+                       }
+
+               }
+       }
+       mf_debug("files = [%s]", uri);
+       ret = service_set_uri(svc_handle, uri);
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_error("service_set_uri().. [0x%x]", ret);
+               goto exception;
+       }
+       SAFE_FREE_CHAR(uri);
+
+
+       ret = service_send_launch_request(svc_handle, NULL, NULL);
+       if (ret != SERVICE_ERROR_NONE) {
+               mf_error("service_send_launch_request().. [0x%x]", ret);
+               goto exception;
+       }
+
+       service_destroy(svc_handle);
+
+       return true;
+
+exception:
+       service_destroy(svc_handle);
+       svc_handle = NULL;
+
+       return false;
+}
+
diff --git a/src/common/mf-sensor.c b/src/common/mf-sensor.c
new file mode 100644 (file)
index 0000000..c1d35b3
--- /dev/null
@@ -0,0 +1,148 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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-sensor.h"
+#include "mf-dlog.h"
+#include <sensors.h>
+
+static sensor_h g_sensor;
+
+int mf_sensor_init(void)
+{
+       int res = SENSOR_ERROR_NONE;
+       bool doubletap = 0;
+
+       res = sensor_is_supported(SENSOR_MOTION_DOUBLETAP, &doubletap);
+       MF_CHECK_VAL(res == SENSOR_ERROR_NONE, res);
+
+       if(!doubletap)
+               mf_error("sensor not supported. doubletap: %d", doubletap);
+
+       if(doubletap)
+       {
+               res = sensor_create(&g_sensor);
+               if(res != SENSOR_ERROR_NONE)
+                       mf_error("Fail sensor_create");
+       }
+       else
+               mf_error("motion not supported");
+
+       return res;
+}
+
+int mf_sensor_finalize(void)
+{
+       int res = SENSOR_ERROR_NONE;
+       MF_CHECK_VAL(g_sensor, -1);
+       res = sensor_destroy(g_sensor);
+       g_sensor = NULL;
+
+       return res;
+}
+
+int mf_sensor_start(mf_motion_type type)
+{
+       MF_CHECK_VAL(g_sensor, -1);
+
+       int res = SENSOR_ERROR_NONE;
+       switch(type)
+       {
+       case MF_MOTION_FACEDOWN:
+               res = sensor_start(g_sensor, SENSOR_MOTION_FACEDOWN);
+               break;
+       case MF_MOTION_DOUBLETAP:
+               res = sensor_start(g_sensor, SENSOR_MOTION_DOUBLETAP);
+               break;
+       default:
+               mf_error("Invalid motion type: 0x%x", type);
+       }
+
+       if(res != SENSOR_ERROR_NONE)
+               mf_error("Fail sensor_start: type: %d ", type);
+
+       mf_debug("sensor started");
+       return res;
+}
+
+int mf_sensor_stop(mf_motion_type type)
+{
+       MF_CHECK_VAL(g_sensor, -1);
+
+       int res = SENSOR_ERROR_NONE;
+       switch(type)
+       {
+       case MF_MOTION_FACEDOWN:
+               res = sensor_stop(g_sensor, SENSOR_MOTION_FACEDOWN);
+               break;
+       case MF_MOTION_DOUBLETAP:
+               res = sensor_stop(g_sensor, SENSOR_MOTION_DOUBLETAP);
+               break;
+       default:
+               mf_error("Invalid motion type: 0x%x", type);
+       }
+
+       if(res != SENSOR_ERROR_NONE)
+               mf_error("Fail sensor_stop: type: %d ", type);
+
+       mf_debug("sensor stopped");
+       return res;
+}
+
+int mf_sensor_set_callback(mf_motion_type type, mf_sensor_cb callback, void *user_data)
+{
+       MF_CHECK_VAL(g_sensor, -1);
+
+       int res = SENSOR_ERROR_NONE;
+       switch(type)
+       {
+       case MF_MOTION_FACEDOWN:
+               res = sensor_motion_facedown_set_cb(g_sensor, callback, user_data);
+               break;
+       case MF_MOTION_DOUBLETAP:
+               res = sensor_motion_doubletap_set_cb(g_sensor, callback, user_data);
+               break;
+       default:
+               mf_error("Invalid motion type: 0x%x", type);
+               break;
+       }
+       if(res != SENSOR_ERROR_NONE)
+               mf_error("Error: set sensor callback res = 0x%x");
+       return res;
+}
+
+int mf_sensor_unset_callback(mf_motion_type type)
+{
+       MF_CHECK_VAL(g_sensor, -1);
+
+       int res = SENSOR_ERROR_NONE;
+       switch(type)
+       {
+       case MF_MOTION_FACEDOWN:
+               res = sensor_motion_facedown_unset_cb(g_sensor);
+               break;
+       case MF_MOTION_DOUBLETAP:
+               res = sensor_motion_doubletap_unset_cb(g_sensor);
+               break;
+       default:
+               mf_error("Invalid motion type: 0x%x", type);
+               break;
+       }
+       if(res != SENSOR_ERROR_NONE)
+               mf_error("Error: set sensor callback res = 0x%x");
+       return res;
+}
+
diff --git a/src/common/mf-share.c b/src/common/mf-share.c
new file mode 100644 (file)
index 0000000..ba3c61d
--- /dev/null
@@ -0,0 +1,181 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <Eina.h>
+#include <Evas.h>
+#include <Ethumb.h>
+#include <assert.h>
+
+#include "mf-main.h"
+#include "mf-widget.h"
+#include "mf-util.h"
+#include "mf-fs-util.h"
+#include "mf-launch.h"
+#include "mf-drm.h"
+#include "mf-share.h"
+#include "mf-resource.h"
+
+
+int mf_share_mode_get(Eina_List * selected_list)
+{
+       mf_retvm_if(selected_list == NULL, -1, "selected_list is NULL");
+       int file_mode = SHARE_FILE_MODE_NORMAL;
+
+       Eina_List *l = NULL;
+       GString *pNode = NULL;
+       int image_count = 0;
+       int video_count = 0;
+       EINA_LIST_FOREACH(selected_list, l, pNode) {
+               if (pNode != NULL) {
+                       char *file_path = pNode->str;
+                       if (mf_file_attr_is_dir(file_path)) {
+                               return 0;
+                       }
+
+                       fsFileType category = FILE_TYPE_NONE;
+
+                       mf_file_attr_get_file_category(file_path, &category);
+                       if (category == FILE_TYPE_IMAGE) {
+                               image_count++;
+                               if (image_count > 1) {
+                                       file_mode = file_mode | SHARE_FILE_MODE_MULTI_IMAGE;
+                               } else {
+                                       file_mode = file_mode | SHARE_FILE_MODE_IMAGE;
+                               }
+                       } else if (category == FILE_TYPE_VIDEO) {
+                               video_count++;
+                               if (video_count > 1) {
+                                       file_mode = file_mode | SHARE_FILE_MODE_MULTI_VIDEO;
+                               } else {
+                                       file_mode = file_mode | SHARE_FILE_MODE_VIDEO;
+                               }
+                       } else {
+                               file_mode = file_mode | SHARE_FILE_MODE_OTHERS;
+                       }
+               }
+       }
+       return file_mode;
+}
+static int __mf_share_get_selected_files(void *data, gchar ** selected_files, Eina_List * selected_list)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, -1, "ap is NULL");
+       mf_retvm_if(selected_list == NULL, 0, "selected_list is NULL");
+       mf_retvm_if(selected_files == NULL, -1, "selected_files is NULL");
+
+       int file_count = 0;
+       Eina_List *l = NULL;
+       gchar *message = NULL;
+
+       {
+               GString *pNode = NULL;
+               EINA_LIST_FOREACH(selected_list, l, pNode) {
+                       if (pNode != NULL) {
+                               if (!mf_file_attr_is_dir(pNode->str) && mf_drm_is_drm_file(pNode->str) == 0) {
+                                       if (mf_drm_is_converted_fl(pNode->str) == 0) {
+                                               message = g_strconcat(GET_STR(MF_POPUP_MESSAGE_SEND_FAIL1), "<br>", ecore_file_file_get(pNode->str),
+                                                               GET_STR(MF_POPUP_MESSAGE_SEND_FAIL2), NULL);
+                                               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message,
+                                                                                                NULL, NULL, NULL, NULL, NULL);
+
+                                               g_free(message);
+                                               message = NULL;
+                                               if (*selected_files != NULL) {
+                                                         g_free(*selected_files);
+                                                         *selected_files = NULL;
+                                               }
+                                               MF_TRACE_END;
+                                               return -1;
+                                       }
+                               } else if (mf_file_attr_is_dir(pNode->str)) {
+                                       message = GET_STR(MF_POPUP_MESSAGE_SEND_FAIL3);
+                                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message, NULL, NULL, NULL, NULL, NULL);
+
+                                       if (*selected_files != NULL) {
+                                               g_free(*selected_files);
+                                               *selected_files = NULL;
+                                       }
+                                       MF_TRACE_END;
+                                       return -1;
+                               }
+
+                               if (*selected_files == NULL) {
+                                       *selected_files = g_strconcat(pNode->str, NULL);
+                                       file_count++;
+                               } else {
+                                       gchar *temp = *selected_files;
+                                       if (ap->mf_Status.more == MORE_SENDVIABLUETOOTH
+                                       ) {
+                                               *selected_files = g_strconcat(*selected_files, "?", pNode->str, NULL);
+                                               file_count++;
+                                       }
+                                       else {
+                                               *selected_files = g_strconcat(*selected_files, "\n", pNode->str, NULL);
+                                               file_count++;
+                                       }
+
+                                       g_free(temp);
+                               }
+                       }
+               }
+       }
+       MF_TRACE_END;
+       return file_count;
+}
+
+void mf_share_launch_multi_file(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       gchar *myFilenames = NULL;
+       int number_of_files = 0;
+       char count_arg[20] = { 0, };
+       const char *message = NULL;
+       Eina_List *select_list = NULL;
+
+       {
+               select_list = ap->mf_FileRecordList.selected_files;
+       }
+       number_of_files = __mf_share_get_selected_files(ap, &myFilenames, select_list);
+       if (number_of_files < 0) {
+               MF_TRACE_END;
+               return;
+       } else if (number_of_files == 0) {
+               message = GET_SYS_STR(MF_LABEL_NOTHING_SELECTED);
+               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message, NULL, NULL, NULL, NULL, NULL);
+               MF_TRACE_END;
+               return;
+       } else {
+               snprintf(count_arg, sizeof(count_arg), "%d", number_of_files);
+               if (ap->mf_Status.more == MORE_SENDVIABLUETOOTH) {
+                       mf_debug("::::::::::Send via bluetooth:::::::::::::");
+                       mf_launch_load_ug(ap, myFilenames, MF_LOAD_UG_BLUETOOTH, count_arg);
+               } else if (ap->mf_Status.more == MORE_SENDVIAEMAIL) {
+                       mf_debug("::::::::::Send via email::::::::::::: files is [%s]", myFilenames);
+                       mf_launch_load_ug(ap, myFilenames, MF_LOAD_UG_EMAIL, count_arg);
+               } else if (ap->mf_Status.more == MORE_SENDVIAMESSAGE) {
+                       mf_debug("::::::::::Send via message::::::::::::: files is [%s]", myFilenames);
+                       mf_launch_load_ug(ap, myFilenames, MF_LOAD_UG_MESSAGE, count_arg);
+               }
+
+               g_free(myFilenames);
+       }
+       MF_TRACE_END;
+}
+
diff --git a/src/common/mf-ta.c b/src/common/mf-ta.c
new file mode 100644 (file)
index 0000000..985b3b5
--- /dev/null
@@ -0,0 +1,544 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+
+#include <stdio.h>
+#include <malloc.h>
+#include <string.h>
+#include <assert.h>
+#include <time.h>
+#include <sys/time.h>
+#include <sys/utsname.h>
+#include <sys/resource.h>
+#include <unistd.h>
+#include <stdarg.h>
+
+#include "mf-ta.h"
+
+static void __mf_ta_free_cps(void);
+static int __mf_ta_get_cp_index(char *name);
+
+static void __mf_ta_free_accums(void);
+static int __mf_ta_get_accum_index(char *name);
+
+mf_ta_checkpoint **mf_g_cps = NULL;
+static int mf_g_cp_index = 0;
+
+mf_ta_accum_item **mf_g_accums = NULL;
+static int mf_g_accum_index = 0;
+static int mf_g_accum_longest_name = 0;
+static unsigned long mf_g_accum_first_time = 0xFFFFFFFF;
+static int mf_g_enable = 1;
+
+int mf_ta_init(void)
+{
+       if (mf_g_accums)
+               return 0;
+
+       mf_g_cps = (mf_ta_checkpoint **) malloc(MF_TA_MAX_CHECKPOINT * sizeof(mf_ta_checkpoint *));
+       if (!mf_g_cps)
+               return -1;
+
+       mf_g_accums = (mf_ta_accum_item **) malloc(MF_TA_MAX_CHECKPOINT * sizeof(mf_ta_accum_item *));
+       if (!mf_g_accums)
+               return -1;
+
+       mf_g_accum_first_time = 0xFFFFFFFF;
+
+       return 0;
+}
+
+int mf_ta_release(void)
+{
+       if (!mf_g_accums)
+               return 0;
+
+       __mf_ta_free_cps();
+       __mf_ta_free_accums();
+
+       mf_g_accum_first_time = 0xFFFFFFFF;
+
+       return 0;
+}
+
+void mf_ta_set_enable(int enable)
+{
+       printf("MF_TA : setting enable to %d\n", enable);
+       mf_g_enable = enable;
+}
+
+int mf_ta_get_numof_checkpoints()
+{
+       return mf_g_cp_index;
+}
+
+char *mf_ta_fmt(const char *fmt, ...)
+{
+       static char ta_buf[512];
+       va_list args;
+
+       memset(ta_buf, '\0', 512);
+
+       va_start(args, fmt);
+       vsnprintf(ta_buf, 512, fmt, args);
+       va_end(args);
+
+       return ta_buf;
+}
+
+
+int mf_ta_add_checkpoint(char *name, int show, char *filename, int line)
+{
+       mf_ta_checkpoint *cp = NULL;
+       struct timeval t;
+
+       if (!mf_g_enable)
+               return -1;
+
+       if (!mf_g_accums)
+               return 0;
+
+       if (mf_g_cp_index == MF_TA_MAX_CHECKPOINT)
+               return -1;
+
+       if (!name)
+               return -1;
+
+       if (strlen(name) == 0)
+               return -1;
+
+       cp = (mf_ta_checkpoint *) malloc(sizeof(mf_ta_checkpoint));
+       if (!cp)
+               return -1;
+
+       cp->name = (char *)malloc(strlen(name) + 1);
+       if (!cp->name) {
+               free(cp);
+               return -1;
+       }
+       strncpy(cp->name, name, strlen(name));
+
+       if (show)
+               printf("[CHECK-POINT] %s...(%s:%d)\n", name, filename, line);
+
+       gettimeofday(&t, NULL);
+       cp->timestamp = t.tv_sec * 1000000L + t.tv_usec;
+#ifdef MF_TA_UNIT_MSEC
+       cp->timestamp = (cp->timestamp >= 1000) ? cp->timestamp / 1000 : 0;
+#endif
+
+       mf_g_cps[mf_g_cp_index] = cp;
+
+       mf_g_cp_index++;
+
+       return 0;
+}
+
+void mf_ta_show_checkpoints(void)
+{
+       int i = 0;
+       if (!mf_g_accums)
+               return;
+
+       printf("BEGIN RESULT ============================\n");
+       for (i = 0; i < mf_g_cp_index; i++) {
+               printf("[%d] %s : %ld us.\n", i, mf_g_cps[i]->name, mf_g_cps[i]->timestamp);
+       }
+       printf("END RESULT   ============================\n");
+}
+
+void mf_ta_show_diff(char *name1, char *name2)
+{
+       if (!mf_g_accums)
+               return;
+
+
+       printf("Time takes from [%s] to [%s] : %ld us.\n", name1, name2, mf_ta_get_diff(name1, name2));
+}
+
+unsigned long mf_ta_get_diff(char *name1, char *name2)
+{
+       int cp1, cp2;
+
+       if (!mf_g_accums)
+               return 0;
+
+
+       /* fail if bad param. */
+       if (!name1 || !name2)
+               return -1;
+
+       /* fail if same. */
+       if (strcmp(name1, name2) == 0)
+               return -1;
+
+       /*get index */
+       if ((cp1 = __mf_ta_get_cp_index(name1)) == -1)
+               return -1;
+
+       if ((cp2 = __mf_ta_get_cp_index(name2)) == -1)
+               return -1;
+
+       /* NOTE :
+        * return value must be positive value.
+        * bcz the value of higher index of mf_g_cps always higher than lower one.
+        */
+       return mf_g_cps[cp2]->timestamp - mf_g_cps[cp1]->timestamp;
+
+}
+
+static int __mf_ta_get_cp_index(char *name)
+{
+       int i;
+
+       assert(name);
+
+       /* find index */
+       for (i = 0; i < mf_g_cp_index; i++) {
+               if (strcmp(name, mf_g_cps[i]->name) == 0)
+                       return i;
+       }
+
+       return -1;
+}
+
+static int __mf_ta_get_accum_index(char *name)
+{
+       int i;
+
+       assert(name);
+
+       /* find index */
+       for (i = 0; i < mf_g_accum_index; i++) {
+               if (strcmp(name, mf_g_accums[i]->name) == 0)
+                       return i;
+       }
+
+       return -1;
+}
+
+static void __mf_ta_free_cps(void)
+{
+       int i = 0;
+
+       if (!mf_g_cps)
+               return;
+
+       for (i = 0; i < mf_g_cp_index; i++) {
+               if (mf_g_cps[i]) {
+                       if (mf_g_cps[i]->name)
+                               free(mf_g_cps[i]->name);
+
+                       free(mf_g_cps[i]);
+
+                       mf_g_cps[i] = NULL;
+               }
+       }
+
+       free(mf_g_cps);
+       mf_g_cps = NULL;
+
+       mf_g_cp_index = 0;
+}
+
+static void __mf_ta_free_accums(void)
+{
+       int i = 0;
+
+       if (!mf_g_accums)
+               return;
+
+       for (i = 0; i < mf_g_accum_index; i++) {
+               if (mf_g_accums[i]) {
+                       if (mf_g_accums[i]->name)
+                               free(mf_g_accums[i]->name);
+
+                       free(mf_g_accums[i]);
+
+                       mf_g_accums[i] = NULL;
+               }
+       }
+
+       mf_g_accum_index = 0;
+       mf_g_accum_longest_name = 0;
+
+       free(mf_g_accums);
+       mf_g_accums = NULL;
+}
+
+
+int mf_ta_accum_item_begin(char *name, int show, char *filename, int line)
+{
+       mf_ta_accum_item *accum = NULL;
+       int index = 0;
+       int name_len = 0;
+       struct timeval t;
+
+       if (!mf_g_enable)
+               return -1;
+
+       if (!mf_g_accums)
+               return 0;
+
+
+
+       if (mf_g_accum_index == MF_TA_MAX_ACCUM)
+               return -1;
+
+       if (!name)
+               return -1;
+
+       name_len = strlen(name);
+       if (name_len == 0)
+               return -1;
+
+       /* if 'name' is new one. create new item. */
+       if ((index = __mf_ta_get_accum_index(name)) == -1) {
+               accum = (mf_ta_accum_item *) malloc(sizeof(mf_ta_accum_item));
+               if (!accum)
+                       return -1;
+
+               /*clear first. */
+               memset(accum, 0, sizeof(mf_ta_accum_item));
+               accum->elapsed_min = 0xFFFFFFFF;
+
+               accum->name = (char *)malloc(name_len + 1);
+               if (!accum->name) {
+                       free(accum);
+                       return -1;
+               }
+               memset(accum->name, 0, name_len + 1);
+               strncpy(accum->name, name, strlen(name));
+
+               /* add it to list. */
+               mf_g_accums[mf_g_accum_index] = accum;
+               mf_g_accum_index++;
+
+               if (mf_g_accum_longest_name < name_len)
+                       mf_g_accum_longest_name = name_len;
+
+       } else {
+               accum = mf_g_accums[index];
+       }
+
+       /*verify pairs of begin, end. */
+       if (accum->on_estimate) {
+               printf("[%s] is not 'end'ed!\n", accum->name);
+               accum->num_unpair++;
+               return -1;
+       }
+       /*get timestamp */
+       gettimeofday(&t, NULL);
+       accum->timestamp = t.tv_sec * 1000000L + t.tv_usec;
+#ifdef MF_TA_UNIT_MSEC
+       accum->timestamp = (accum->timestamp >= 1000) ? accum->timestamp / 1000 : 0;
+#endif
+       accum->on_estimate = 1;
+
+       if (accum->first_start == 0) {  /* assum that timestamp never could be zero. */
+               accum->first_start = accum->timestamp;
+
+               if (mf_g_accum_first_time > accum->first_start)
+                       mf_g_accum_first_time = accum->first_start;
+       }
+
+       if (show)
+               printf("[ACCUM BEGIN] %s : %ld ---(%s:%d)\n", name, accum->timestamp, filename, line);
+
+       accum->num_calls++;
+
+       return 0;
+}
+
+int mf_ta_accum_item_end(char *name, int show, char *filename, int line)
+{
+       mf_ta_accum_item *accum = NULL;
+       unsigned int tval = 0;
+       int index = 0;
+       struct timeval t;
+
+       if (!mf_g_enable)
+               return -1;
+
+       if (!mf_g_accums)
+               return 0;
+
+
+       /* get time first for more accuracy. */
+       gettimeofday(&t, NULL);
+
+       if (mf_g_accum_index == MF_TA_MAX_ACCUM)
+               return -1;
+
+       if (!name)
+               return -1;
+
+       if (strlen(name) == 0)
+               return -1;
+
+       /* varify the 'name' is already exist. */
+       if ((index = __mf_ta_get_accum_index(name)) == -1) {
+               printf("[%s] is not added before!\n", name);
+               return -1;
+       }
+
+       accum = mf_g_accums[index];
+
+       /* verify pairs of begin, end. */
+       if (!accum->on_estimate) {
+               printf("[%s] is not 'begin' yet!\n", accum->name);
+               accum->num_unpair++;
+               return -1;
+       }
+       /* get current timestamp. */
+       tval = t.tv_sec * 1000000L + t.tv_usec;
+#ifdef MF_TA_UNIT_MSEC
+       tval = (tval >= 1000) ? tval / 1000 : 0;
+#endif
+
+       /* update last_end */
+       accum->last_end = tval;
+
+       /* make get elapsed time. */
+       tval = tval - accum->timestamp;
+
+       /* update min/max */
+       accum->elapsed_max = tval > accum->elapsed_max ? tval : accum->elapsed_max;
+       accum->elapsed_min = tval < accum->elapsed_min ? tval : accum->elapsed_min;
+
+       if (show)
+               printf("[ACCUM END] %s : %ld + %u ---(%s:%d)\n", name, accum->elapsed_accum, tval, filename, line);
+
+       /* add elapsed time */
+       accum->elapsed_accum += tval;
+       accum->on_estimate = 0;
+
+       return 0;
+}
+
+void __mf_ta_print_some_info(FILE *fp)
+{
+       if (!fp)
+               return;
+
+       /* comment */
+       {
+               fprintf(fp, "\nb~ b~ b~\n\n");
+       }
+
+       /* General infomation */
+       {
+               time_t t_val;
+               char hostname[MF_TA_BUFF_SIZE] = { '\0', };
+               char buf[MF_TA_BUFF_SIZE] = {'\0', };
+               struct utsname uts;
+               struct rusage r_usage;
+
+               fprintf(fp, "\n[[ General info ]]\n");
+
+               /* time and date */
+               time(&t_val);
+               ctime_r(&t_val, buf);
+               fprintf(fp, "Date : %s", buf);
+
+               /* system */
+               if (gethostname(hostname, 255) == 0 && uname(&uts) >= 0) {
+                       fprintf(fp, "Hostname : %s\n", hostname);
+                       fprintf(fp, "System : %s\n", uts.sysname);
+                       fprintf(fp, "Machine : %s\n", uts.machine);
+                       fprintf(fp, "Nodename : %s\n", uts.nodename);
+                       fprintf(fp, "Release : %s \n", uts.release);
+                       fprintf(fp, "Version : %s \n", uts.version);
+               }
+               /* process info. */
+               fprintf(fp, "Process priority : %d\n", getpriority(PRIO_PROCESS, getpid()));
+               getrusage(RUSAGE_SELF, &r_usage);
+               fprintf(fp, "CPU usage : User = %ld.%06ld, System = %ld.%06ld\n",
+                       r_usage.ru_utime.tv_sec, r_usage.ru_utime.tv_usec, r_usage.ru_stime.tv_sec, r_usage.ru_stime.tv_usec);
+
+
+       }
+
+       /* host environment variables */
+       {
+               extern char **environ;
+               char **env = environ;
+
+               fprintf(fp, "\n[[ Host environment variables ]]\n");
+               while (*env) {
+                       fprintf(fp, "%s\n", *env);
+                       env++;
+               }
+       }
+}
+
+void mf_ta_show_accum_result(int direction)
+{
+       int i = 0;
+       char format[256];
+       FILE *fp = stderr;
+
+       if (!mf_g_accums)
+               return;
+
+       switch (direction) {
+       case MF_TA_SHOW_STDOUT:
+               fp = stdout;
+               break;
+       case MF_TA_SHOW_STDERR:
+               fp = stderr;
+               break;
+       case MF_TA_SHOW_FILE:
+               {
+                       fp = fopen(MF_TA_RESULT_FILE, "wt");
+                       if (!fp)
+                               return;
+               }
+       }
+       __mf_ta_print_some_info(fp);
+
+#ifdef MF_TA_UNIT_MSEC
+       snprintf(format, sizeof(format),
+               "[%%3d] %%-%ds | \ttotal : %%4ld\tcalls : %%3ld\tavg : %%4ld\tmin : %%4ld\tmax : %%4ld\tstart : %%4lu\tend : %%4lu\tunpair : %%3ld\n",
+               mf_g_accum_longest_name);
+       fprintf(fp, "BEGIN RESULT ACCUM============================ : NumOfItems : %d, unit(msec)\n", mf_g_accum_index);
+#else
+       snprintf(format, sizeof(format),
+               "[%%3d] %%-%ds : \ttotal : %%ld\t:calls : %%ld\t:avg : %%ld\tmin : %%ld\tmax : %%ld\tstart : %%lu\tend : %%lu\tunpair : %%ld\n",
+               mf_g_accum_longest_name);
+       fprintf(fp, "BEGIN RESULT ACCUM============================ : NumOfItems : %d, unit(usec)\n", mf_g_accum_index);
+#endif
+
+       for (i = 0; i < mf_g_accum_index; i++) {
+               /*prevent 'devide by zero' error */
+               if (mf_g_accums[i]->num_calls == 0)
+                       mf_g_accums[i]->num_calls = 1;
+
+               fprintf(fp, format, i, mf_g_accums[i]->name, mf_g_accums[i]->elapsed_accum, mf_g_accums[i]->num_calls,
+                       (mf_g_accums[i]->elapsed_accum == 0) ? 0 : (int)(mf_g_accums[i]->elapsed_accum / mf_g_accums[i]->num_calls),
+                       mf_g_accums[i]->elapsed_min,
+                       mf_g_accums[i]->elapsed_max,
+                       mf_g_accums[i]->first_start - mf_g_accum_first_time,
+                       mf_g_accums[i]->last_end - mf_g_accum_first_time, mf_g_accums[i]->num_unpair);
+       }
+       fprintf(fp, "END RESULT ACCUM  ============================\n");
+
+       if (direction == MF_TA_SHOW_FILE)
+               fclose(fp);
+}
diff --git a/src/common/mf-util.c b/src/common/mf-util.c
new file mode 100644 (file)
index 0000000..b4bace3
--- /dev/null
@@ -0,0 +1,1579 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <vconf.h>
+#include <pthread.h>
+#include <glib.h>
+#include <assert.h>
+#include <power.h>
+#include <runtime_info.h>
+
+
+
+#include "mf-util.h"
+#include "mf-widget.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-fs-util.h"
+#include "mf-copy.h"
+#include "mf-resource.h"
+
+#ifndef VCONFKEY_MYFILE_LIST_BY
+#define VCONFKEY_MYFILE_LIST_BY                "db/private/org.tizen.myfile/list_by"
+#endif
+
+#ifndef VCONFKEY_MYFILE_VIEW_STYLE
+#define VCONFKEY_MYFILE_VIEW_STYLE     "db/private/org.tizen.myfile/view_style"
+#endif
+
+#ifndef VCONFKEY_MYFILE_EXTENSION_STATE
+#define VCONFKEY_MYFILE_EXTENSION_STATE                "db/private/org.tizen.myfile/extension_state"
+#endif
+
+#ifndef VCONFKEY_MYFILE_RECENT_FILE
+#define VCONFKEY_MYFILE_RECENT_FILE            "db/private/org.tizen.myfile/recent_file"
+#endif
+
+
+#define MF_TIMER_INTERVAL_VIBRATION 0.5
+#define MF_VIBRATION_DEVICE 0
+#define MF_VIBRATION_DURATION 500
+#define DEF_BUF_LEN            (512)
+
+
+extern struct appdata *temp_data;
+extern pthread_mutex_t pb_mutex;
+extern pthread_mutex_t refresh_mutex;
+struct navi_content_pop_s {
+       myfileNaviBar *pNavi;
+       struct appdata *ap;
+};
+
+/******************************
+** Prototype    : __mf_util_is_mmc_supported
+** Description  :
+** Input        : int* supported
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static int __mf_util_is_mmc_supported(int *supported)
+{
+       int data = -1;
+       int error_code = 0;
+
+       if (supported == NULL) {
+               mf_debug("supported == NULL");
+               return MYFILE_ERR_SRC_ARG_INVALID;
+       }
+
+       *supported = 0;
+
+       error_code = vconf_get_int(VCONFKEY_SYSMAN_MMC_STATUS, &data);
+       if (error_code) {
+               return MYFILE_ERR_GET_VCONF_FAIL;
+       }
+
+       if (data != VCONFKEY_SYSMAN_MMC_MOUNTED) {
+               *supported = 0;
+       } else {
+               *supported = 1;
+       }
+
+       return MYFILE_ERR_NONE;
+}
+
+/******************************
+** Prototype    : mf_util_is_mmc_on
+** 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_util_is_mmc_on(int *mmc_card)
+{
+       int error_code = 0;
+
+       error_code = __mf_util_is_mmc_supported(mmc_card);
+       /*
+          if(mmc_card == TRUE){
+          mf_debug("mmc is on phone\n");
+          get_phone_status(&ret);
+          } */
+       mf_debug("**************mmc_card is [%d]", *mmc_card);
+       return error_code;
+
+}
+
+#ifdef MYFILE_USB_OTG
+static int __mf_util_is_otg_supported(int *supported)
+{
+
+       if (supported == NULL) {
+               mf_debug("supported == NULL");
+               return MYFILE_ERR_SRC_ARG_INVALID;
+       }
+
+       *supported = 0;
+
+       if(!ecore_file_exists(OTG_FOLDER) || ecore_file_dir_is_empty(OTG_FOLDER)) {
+               *supported = 0;
+       } else {
+               *supported = 1;
+       }
+
+       return MYFILE_ERR_NONE;
+}
+
+int mf_util_is_otg_on(int *otg)
+{
+       int error_code = 0;
+
+       error_code = __mf_util_is_otg_supported(otg);
+       mf_debug("**************otg is [%d]", *otg);
+       return error_code;
+}
+#endif
+
+void mf_util_action_storage_insert(void *data, char *pItemLabel)
+{
+
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       fsNodeInfo *pNode = NULL;
+
+       if (ap->mf_Status.iStorageState & MYFILE_MMC) {
+               pNode = (fsNodeInfo *) malloc(sizeof(fsNodeInfo));
+               memset(pNode, 0, sizeof(fsNodeInfo));
+               /*set path */
+               pNode->path = g_strdup(STORAGE_PARENT);
+               pNode->name = g_strdup(MMC_NAME);
+               pNode->type = FILE_TYPE_DIR;
+               ap->mf_FileOperation.folder_list = eina_list_append(ap->mf_FileOperation.folder_list, pNode);
+       }
+       if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+               pNode = (fsNodeInfo *) malloc(sizeof(fsNodeInfo));
+               memset(pNode, 0, sizeof(fsNodeInfo));
+               /*set path */
+               pNode->path = g_strdup(STORAGE_PARENT);
+               pNode->name = g_strdup(OTG_NAME);
+               pNode->type = FILE_TYPE_DIR;
+               ap->mf_FileOperation.folder_list = eina_list_append(ap->mf_FileOperation.folder_list, pNode);
+       }
+
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               if (ap->mf_Status.iStorageState & MYFILE_MMC) {
+                       mf_widget_item_append(ap->mf_MainWindow.pNaviGenlist, pNode, ap);
+               }
+
+               if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+                       mf_widget_item_append(ap->mf_MainWindow.pNaviGenlist, pNode, ap);
+               }
+       } else {
+               if (ap->mf_Status.iStorageState & MYFILE_MMC) {
+                       mf_widget_item_append(ap->mf_MainWindow.pNaviGengrid, pNode, ap);
+               }
+
+               if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+                       mf_widget_item_append(ap->mf_MainWindow.pNaviGengrid, pNode, ap);
+               }
+
+       }
+#ifdef MYFILE_SPLIT_VIEW
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE)
+       {
+               if (g_strcmp0(pItemLabel, GET_SYS_STR(MF_LABEL_MMC)) == 0) {
+                       Elm_Object_Item *it = NULL;
+                       it = mf_genlist_split_root_item_append(ap, ap->mf_MainWindow.sSplitData.pSplitLeftGenlist, MEMORY_FOLDER);
+                       ap->mf_MainWindow.sSplitData.mmc_item = it;
+               }
+
+               if (g_strcmp0(pItemLabel, GET_STR(MF_LABEL_OTG)) == 0) {
+                       Elm_Object_Item *it = NULL;
+                       it = mf_genlist_split_root_item_append(ap, ap->mf_MainWindow.sSplitData.pSplitLeftGenlist, OTG_FOLDER);
+                       ap->mf_MainWindow.sSplitData.otg_item = it;
+               }
+       }
+#endif
+}
+
+/******************************
+** Prototype    : mf_util_operation_alloc_failed
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void mf_util_operation_alloc_failed(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+
+       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, GET_STR(MF_MSG_MEMORY_NOT_ENOUGH),
+                                                              NULL, NULL, NULL, (Evas_Smart_Cb) elm_exit, NULL);
+}
+/**ecore_job handler related**/
+void mf_util_add_to_handler_list(void *data, Ecore_Job *handler, char *label)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       mf_retm_if(handler == NULL, "handler is NULL");
+       mf_retm_if(label == NULL, "label is NULL");
+
+       myfileEcoreHandleNode *newNode = calloc(1, sizeof(myfileEcoreHandleNode));
+
+       if (newNode == NULL) {
+               mf_util_operation_alloc_failed(ap);
+               return;
+       }
+
+       newNode->handler = handler;
+       newNode->navi_label = g_strdup(label);
+
+       if (newNode->navi_label == NULL) {
+               SAFE_FREE_CHAR(newNode->navi_label);
+               SAFE_FREE_CHAR(newNode);
+               mf_util_operation_alloc_failed(ap);
+               return;
+       }
+
+       ap->mf_FileOperation.job_pop_list = eina_list_append(ap->mf_FileOperation.job_pop_list, newNode);
+}
+
+void mf_util_delete_from_handler_list(void *data, char *label, bool flag_del)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       Eina_List *l;
+       void *node;
+
+       EINA_LIST_FOREACH(ap->mf_FileOperation.job_pop_list, l, node) {
+               myfileEcoreHandleNode *pNode = (myfileEcoreHandleNode *)node;
+               if (pNode != NULL) {
+                       if (g_strcmp0(pNode->navi_label, label) == 0) {
+                               if (pNode->handler != NULL) {
+                                       if (flag_del == TRUE)
+                                               ecore_job_del(pNode->handler);
+                                       pNode->handler = NULL;
+                               }
+                               ap->mf_FileOperation.job_pop_list = eina_list_remove(ap->mf_FileOperation.job_pop_list, pNode);
+                               SAFE_FREE_CHAR(pNode->navi_label);
+                               SAFE_FREE_CHAR(pNode);
+                               break;
+                       }
+               }
+       }
+}
+
+void mf_util_clear_handler_list(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       Eina_List *l;
+       void *node;
+
+       EINA_LIST_FOREACH(ap->mf_FileOperation.job_pop_list, l, node) {
+               myfileEcoreHandleNode *pNode = (myfileEcoreHandleNode *)node;
+               if(pNode != NULL) {
+                       if (pNode->handler != NULL) {
+                               ecore_job_del(pNode->handler);
+                               pNode->handler = NULL;
+                       }
+                       SAFE_FREE_CHAR(pNode->navi_label);
+                       SAFE_FREE_CHAR(pNode);
+               }
+       }
+}
+/**end of ecore_job handler related**/
+
+
+/******************************
+** Prototype    : mf_util_refresh_screen
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+int mf_util_refresh_screen(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       Eina_List *l = NULL;
+       void *item = NULL;
+       myfileNaviBar *pNavi_s = NULL;
+       myfileNaviBar *pNavi_toshow = NULL;
+
+       if (ap->mf_Status.more == MORE_IDLE_DELETE) {
+               if (ap->mf_Status.preMore == MORE_DEFAULT) {
+                       ap->mf_Status.more = MORE_DEFAULT;
+                       mf_widget_refresh_view(ap);
+                       if (ap->mf_FileOperation.iOperationSuccessFlag) {
+                               mf_popup_indicator_popup(ap, GET_SYS_STR(MF_MSG_DELETE_SUCCESS));
+                       } else {
+                               mf_popup_indicator_popup(ap, ap->mf_FileOperation.pOperationMsg);
+                       }
+
+               } else {
+                       ap->mf_Status.more = ap->mf_Status.preMore;
+                       if (ap->mf_FileOperation.idle_delete_item) {
+                               mfItemData_s *params = elm_object_item_data_get(ap->mf_FileOperation.idle_delete_item);
+                               if (params && params->m_ItemName) {
+                                       char *path = params->m_ItemName->str;
+                                       if (path && !ecore_file_exists(path)) {
+                                               elm_object_item_del(ap->mf_FileOperation.idle_delete_item);
+                                       }
+                               }
+                       }
+                       ap->mf_FileOperation.idle_delete_item = NULL;
+                       if (ap->mf_FileOperation.iOperationSuccessFlag) {
+                               mf_popup_indicator_popup(ap, GET_SYS_STR(MF_MSG_DELETE_SUCCESS));
+                       } else {
+                               mf_popup_indicator_popup(ap, ap->mf_FileOperation.pOperationMsg);
+                       }
+                       return MYFILE_ERR_NONE;
+               }
+       } else {
+               /*0     set state to be Default */
+               int current_more = ap->mf_Status.more;
+               ap->mf_Status.more = MORE_DEFAULT;
+               /*1     recover all the navigation bar */
+               EINA_LIST_FOREACH(ap->mf_MainWindow.plistNaviBar, l, item) {
+                       pNavi_s = (myfileNaviBar *) item;
+                       if (pNavi_s == NULL) {
+                               continue;
+                       }
+                       /*1.2   reset current path for each navigation bar*/
+                       SAFE_FREE_CHAR(pNavi_s->pCurrentPath);
+                       if (pNavi_s->pre_operation.path && pNavi_s->pre_operation.path->str) {
+                               pNavi_s->pCurrentPath = g_strdup(pNavi_s->pre_operation.path->str);
+                               g_string_free(pNavi_s->pre_operation.path, TRUE);
+                       } else {
+                               pNavi_s->pCurrentPath = g_strdup(PHONE_FOLDER);
+                       }
+                       pNavi_s->pre_operation.path = NULL;
+                       memset(&(pNavi_s->pre_operation), 0, sizeof(oper_record));
+
+                       if (pNavi_s->naviFlagInUse == TRUE) {
+                               /*2.2 set pNavi_toshow for refreshing */
+                               pNavi_toshow = pNavi_s;
+                       }
+               }
+               if (pNavi_toshow == NULL) {
+                       mf_debug("pNavi_toshow is NULL");
+                       return MYFILE_ERR_GET_NAVI_FAILED;
+               } else {
+                       /*3.    refresh the content of the view */
+                               if (pNavi_toshow->pCurrentPath != NULL) {
+                                       free(pNavi_toshow->pCurrentPath);
+                                       pNavi_toshow->pCurrentPath = NULL;
+                               }
+                               pNavi_toshow->pCurrentPath = g_strdup(ap->mf_Status.path->str);
+                               mf_widget_refresh_view(ap);
+               }
+               char *label = NULL;
+               if (ap->mf_FileOperation.iOperationSuccessFlag) {
+                       switch(current_more) {
+                       case MORE_DATA_COPYING:
+                               label =  GET_SYS_STR(MF_MSG_COPY_SCCESS);
+                               break;
+                       case MORE_DATA_MOVING:
+                               label =  GET_SYS_STR(MF_MSG_MOVE_SUCCESS);
+                               break;
+                       case MORE_IDLE_DELETE:
+                       case MORE_DELETE:
+                               label =  GET_SYS_STR(MF_MSG_DELETE_SUCCESS);
+                               break;
+                       default:
+                               break;
+                       }
+               } else {
+                       label =  ap->mf_FileOperation.pOperationMsg;
+               }
+
+               mf_popup_indicator_popup(ap, label);
+               SAFE_FREE_CHAR(ap->mf_FileOperation.pOperationMsg);
+       }
+       if (ap->mf_Status.flagNoContent == 1) {
+               if (ap->mf_MainWindow.pNaviCtrlBar) {
+                       mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_NOCONTENT_VIEW, TRUE);
+                       //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_NOCONTENT_VIEW, true);
+               }
+       }
+       if (ap->mf_MainWindow.pFinishPopup) {
+               evas_object_del(ap->mf_MainWindow.pFinishPopup);
+               ap->mf_MainWindow.pFinishPopup = NULL;
+       }
+       if (ap->mf_MainWindow.pMmcRemovedPopup) {
+               evas_object_del(ap->mf_MainWindow.pMmcRemovedPopup);
+               ap->mf_MainWindow.pMmcRemovedPopup = NULL;
+       }
+       MF_TRACE_END;
+       return MYFILE_ERR_NONE;
+}
+
+
+
+/******************************
+** Prototype    : mf_util_check_forbidden_operation
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+bool mf_util_check_forbidden_operation(void *data)
+{
+       /*
+        **    forbidden operations includes:
+        **    1.  Recursion move/copy
+        **    2.  move with same file in the same folder
+        */
+
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       Eina_List *l = NULL;
+       GString *pNode = NULL;
+       GString *from = NULL;
+       GString *to = ap->mf_FileOperation.destination;
+       Eina_List *pSourceList = ap->mf_FileRecordList.value_saver;
+       const char *message = NULL;
+
+       EINA_LIST_FOREACH(pSourceList, l, pNode) {
+               if (pNode) {
+                       from = pNode;
+                       if (mf_fm_svc_wrapper_detect_recursion(from, to) == MYFILE_REPORT_RECURSION_DETECT) {
+                               if (ap->mf_Status.more == MORE_DATA_MOVING) {
+                                       message = GET_STR(MF_MSG_MOVE_FAILED1);
+                                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message,
+                                                                                              NULL, NULL, NULL, NULL, NULL);
+
+                                       ap->mf_Status.more = MORE_INTERNAL_MOVE;
+                               } else if (ap->mf_Status.more == MORE_DATA_COPYING) {
+                                       message = GET_STR(MF_MSG_COPY_FAILED1);
+                                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message,
+                                                                                              NULL, NULL, NULL, NULL, NULL);
+
+                                       ap->mf_Status.more = MORE_INTERNAL_COPY;
+                               }
+                               ap->mf_Status.more = MORE_INTERNAL_COPY_MOVE;
+                               return false;
+                       }
+               }
+       }
+
+       from = ap->mf_FileOperation.source;
+       if (ap->mf_Status.more == MORE_DATA_MOVING) {
+               if (!strcmp(from->str, to->str)) {
+                       message = GET_STR(MF_MSG_MOVE_FAILED2);
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, message, NULL, NULL, NULL, NULL, NULL);
+                       ap->mf_Status.more = MORE_INTERNAL_MOVE;
+                       return false;
+               }
+       }
+       return true;
+}
+
+/******************************
+** Prototype    : mf_util_check_disk_space
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+int mf_util_check_disk_space(void *data)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       MF_STORAGE state = MYFILE_NONE;
+       unsigned long free_space = 0;
+
+       if (ap->mf_Status.more == MORE_CREATE_FOLDER) {
+               state = mf_fm_svc_wrapper_get_location(ap->mf_Status.path->str);
+               free_space = mf_fm_svc_wrapper_get_free_space(state);
+               mf_debug("free size is %lu\n", free_space);
+               /*
+                **     in vfat fs type, sector size is 16K.
+                **     it is to say that the limited size of the free space should be 16K
+                **     or it will report space used up.
+                **     check free_space == 0 can make sure at least 16K is free on the disk
+                **     while every dir takes 4K
+                */
+               if (free_space == 0) {
+                       ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT_BTN, NULL,
+                                                                              GET_STR(MF_MSG_NOT_ENOUGH_SPACE), GET_SYS_STR(MF_BUTTON_LABEL_OK),
+                                                                              NULL, NULL, mf_callback_warning_popup_cb, ap);
+                       mf_debug("Not Enough free size\n");
+                       return MYFILE_ERR_NO_FREE_SPACE;
+               }
+       }
+
+       return MYFILE_ERR_NONE;
+}
+
+
+/******************************
+** Prototype    : mf_util_get_eina_list_len
+** Description  :
+** Input        : const Eina_List* list
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+int mf_util_get_eina_list_len(const Eina_List *list)
+{
+       return eina_list_count(list);
+}
+
+
+void mf_util_free_eina_list_with_data(Eina_List **list, MYFILE_CONTENT_TYPE type)
+{
+       MF_TRACE_BEGIN;
+       if (list == NULL || *list == NULL) {
+               return;
+       }
+
+       void *pNode = NULL;
+       Eina_List *l = NULL;
+
+       switch (type) {
+       case MYFILE_TYPE_GSTRING:
+               EINA_LIST_FOREACH(*list, l, pNode) {
+                       if (pNode != NULL) {
+                               g_string_free(pNode, TRUE);
+                               pNode = NULL;
+                       }
+               }
+               break;
+       case MYFILE_TYPE_CHAR:
+               EINA_LIST_FOREACH(*list, l, pNode) {
+                       if (pNode != NULL) {
+                               free(pNode);
+                               pNode = NULL;
+                       }
+               }
+               break;
+       case MYFILE_TYPE_FSNODE:
+               EINA_LIST_FOREACH(*list, l, pNode) {
+                       fsNodeInfo *Node = (fsNodeInfo *)pNode;
+                       if (Node != NULL) {
+                               SAFE_FREE_CHAR(Node->path);
+                               SAFE_FREE_CHAR(Node->name);
+                               SAFE_FREE_CHAR(Node->ext);
+
+                               free(Node);
+                               Node = NULL;
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+
+       eina_list_free(*list);
+       *list = NULL;
+       MF_TRACE_END;
+       return;
+}
+
+int mf_util_icu_init(void *data)
+{
+       MF_TRACE_BEGIN;
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+       char *skeleton;
+       UChar customSkeleton[MYFILE_ICU_ARR_LENGTH] = { '\0' };
+       int skeletonLength = 0;
+       char *timezone_id = NULL;
+       UChar utimezone_id[BUFF_SIZE] = {0,};
+
+       UErrorCode status = U_ZERO_ERROR;
+       UDateTimePatternGenerator *generator;
+       UDateFormat *formatter;
+       UChar bestPattern[MYFILE_ICU_ARR_LENGTH] = { 0, };
+       int32_t bestPatternLength;
+       bool timeformat = false;
+
+       timezone_id = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID);
+
+       if (timezone_id == NULL) {
+               return MYFILE_ERR_INVALID_ARG;
+       }
+
+       u_uastrcpy(utimezone_id, timezone_id);
+
+       ucal_setDefaultTimeZone(utimezone_id , &status);
+
+       int ret = runtime_info_get_value_bool(RUNTIME_INFO_KEY_24HOUR_CLOCK_FORMAT_ENABLED, &timeformat);
+
+       if (ret != 0) {
+               mf_debug();
+               return MYFILE_ERR_SETTING_RESET_FAIL;
+       }
+
+       if (!timeformat) {
+               skeleton = g_strdup(MYFILE_DATEFORMAT_12);
+       } else {
+               skeleton = g_strdup(MYFILE_DATEFORMAT_24);
+       }
+
+       skeletonLength = strlen(skeleton);
+       if (u_uastrncpy(customSkeleton, skeleton, skeletonLength) == NULL) {
+               return MYFILE_ERR_INVALID_ARG;
+       }
+
+       char *region = vconf_get_str(VCONFKEY_REGIONFORMAT);
+       if (region == NULL) {
+               return MYFILE_ERR_INVALID_ARG;
+       }
+
+       uloc_setDefault(getenv("LC_TIME"), &status);
+
+       generator = udatpg_open(region, &status);
+       if (generator == NULL) {
+               return MYFILE_ERR_INVALID_ARG;
+       }
+       ap->mf_Status.generator = generator;
+
+       bestPatternLength = udatpg_getBestPattern(generator, customSkeleton, u_strlen(customSkeleton), bestPattern, MYFILE_ICU_ARR_LENGTH, &status);
+       if (bestPatternLength <= 0) {
+               return MYFILE_ERR_INVALID_ARG;
+       }
+
+       formatter = udat_open(UDAT_IGNORE, UDAT_IGNORE, region, NULL, -1, bestPattern, -1, &status);
+       if (formatter == 0) {
+               return MYFILE_ERR_INVALID_ARG;
+       }
+       ap->mf_Status.formatter = formatter;
+       ap->mf_Status.flagIcuInit = TRUE;
+
+       MF_TRACE_END;
+       return MYFILE_ERR_NONE;
+       }
+
+void mf_util_icu_finalize(void *data)
+{
+       MF_TRACE_BEGIN;
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.generator != NULL) {
+               udatpg_close(ap->mf_Status.generator);
+               ap->mf_Status.generator = NULL;
+       }
+
+       if (ap->mf_Status.formatter) {
+               udat_close(ap->mf_Status.formatter);
+               ap->mf_Status.formatter = NULL;
+       }
+
+       ap->mf_Status.flagIcuInit = FALSE;
+       MF_TRACE_END;
+}
+
+char *mf_util_icu_translate(void *data, UDate date)
+{
+       MF_TRACE_BEGIN;
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.flagIcuInit == FALSE)
+       {
+               if(MYFILE_ERR_NONE !=mf_util_icu_init(ap))
+               {
+                       mf_debug("invalid icu init check int");
+                       return NULL;
+               }
+       }
+
+       UErrorCode status = U_ZERO_ERROR;
+       UChar formatted[MYFILE_ICU_ARR_LENGTH] = { 0, };
+       char formattedString[MYFILE_ICU_ARR_LENGTH] = { 0, };
+       int32_t formattedLength;
+
+       formattedLength = udat_format(ap->mf_Status.formatter, date, formatted, MYFILE_ICU_ARR_LENGTH, NULL, &status);
+       if (formattedLength <= 0) {
+               return NULL;
+       }
+
+       u_austrcpy(formattedString, formatted);
+       if (strlen(formattedString) == 0) {
+               return NULL;
+       }
+
+       MF_TRACE_END;
+       return g_strdup(formattedString);
+}
+
+int mf_util_get_vconf_value(MYFILE_VCONF_TYPE type, int *value)
+{
+       int ret = MYFILE_ERR_NONE;
+       switch (type) {
+       case VCONF_TYPE_SORT_TYPE:
+               {
+                       ret = vconf_get_int(VCONFKEY_MYFILE_LIST_BY, value);
+                       if (ret < 0) {
+                               mf_warnig("fail to get list_by value, set it default");
+                               vconf_set_int(VCONFKEY_MYFILE_LIST_BY, MYFILE_SORT_BY_DATE_R2O);
+                               *value = MYFILE_SORT_BY_DATE_R2O;
+                       } else {
+                               if (*value <= MYFILE_SORT_BY_NONE || *value >= MYFILE_SORT_BY_MAX) {
+                                       mf_warnig("invaild list by type[%d], set it default", *value);
+                                       vconf_set_int(VCONFKEY_MYFILE_LIST_BY, MYFILE_SORT_BY_DATE_R2O);
+                                       *value = MYFILE_SORT_BY_DATE_R2O;
+                               }
+                       }
+                       return MYFILE_ERR_NONE;
+               }
+               break;
+       case VCONF_TYPE_VIEW_STYLE:
+               ret = vconf_get_int(VCONFKEY_MYFILE_VIEW_STYLE, value);
+               if (ret < 0) {
+                       mf_warnig("fail to get list_by value, set it default");
+                       vconf_set_int(VCONFKEY_MYFILE_VIEW_STYLE, MF_VIEW_STYLE_LIST);
+                       *value = MF_VIEW_STYLE_LIST;
+               } else {
+                       if (*value < MF_VIEW_STYLE_LIST || *value > MF_VIEW_STYLE_THUMBNAIL) {
+                               mf_warnig("invaild list by type[%d], set it default", *value);
+                               vconf_set_int(VCONFKEY_MYFILE_VIEW_STYLE, MF_VIEW_STYLE_LIST);
+                               *value = MF_VIEW_STYLE_LIST;
+                       }
+               }
+               break;
+       case VCONF_TYPE_DATE_FORMAT:
+               ret = vconf_get_int(VCONFKEY_SETAPPL_DATE_FORMAT_INT, value);
+               break;
+       case VCONF_TYPE_NFC_ENABLE:
+               ret = vconf_get_int(VCONFKEY_NFC_FEATURE, value);
+               break;
+       case VCONF_TYPE_EXTENSION_STATE:
+               ret = vconf_get_int(VCONFKEY_MYFILE_EXTENSION_STATE, value);
+               if (ret < 0) {
+                       mf_warnig("fail to get list_by value, set it default");
+                       vconf_set_int(VCONFKEY_MYFILE_EXTENSION_STATE, MF_EXTENSION_SHOW);
+                       *value = MF_EXTENSION_SHOW;
+               } else {
+                       if (*value < MF_VIEW_STYLE_LIST || *value > MF_VIEW_STYLE_THUMBNAIL) {
+                               mf_warnig("invaild list by type[%d], set it default", *value);
+                               vconf_set_int(VCONFKEY_MYFILE_EXTENSION_STATE, MF_EXTENSION_SHOW);
+                               *value = MF_EXTENSION_SHOW;
+                       }
+               }
+               break;
+       default:
+               break;
+       }
+       if (ret != MYFILE_ERR_NONE) {
+               ret = MYFILE_ERR_VCONF_GET_FAILED;
+       }
+       return ret;
+}
+
+void mf_util_set_sort_type(int value)
+{
+       if (value <= MYFILE_SORT_BY_NONE || value >= MYFILE_SORT_BY_MAX) {
+               mf_warnig("invaild list by type[%d], set it default", value);
+               vconf_set_int(VCONFKEY_MYFILE_LIST_BY, MYFILE_SORT_BY_DATE_R2O);
+       } else {
+               mf_debug("value is [%d]", value);
+               vconf_set_int(VCONFKEY_MYFILE_LIST_BY, value);
+       }
+       return;
+}
+
+void mf_util_set_extension_state(int value)
+{
+       if (value <= MF_EXTENSION_NONE || value >= MF_EXTENSION_MAX) {
+               mf_warnig("invaild list by type[%d], set it default", value);
+               vconf_set_int(VCONFKEY_MYFILE_EXTENSION_STATE, MF_EXTENSION_SHOW);
+       } else {
+               mf_debug("value is [%d]", value);
+               vconf_set_int(VCONFKEY_MYFILE_EXTENSION_STATE, value);
+       }
+       return;
+}
+
+void mf_util_set_view_style(int value)
+{
+       if (value < MF_VIEW_STYLE_LIST || value > MF_VIEW_STYLE_THUMBNAIL) {
+               mf_warnig("invaild list by type[%d], set it default", value);
+               vconf_set_int(VCONFKEY_MYFILE_VIEW_STYLE, MF_VIEW_STYLE_LIST);
+       } else {
+               mf_debug("value is [%d]", value);
+               vconf_set_int(VCONFKEY_MYFILE_VIEW_STYLE, value);
+       }
+       return;
+}
+
+void mf_util_set_recent_file(char *path)
+{
+       if (path) {
+               mf_debug("path is [%s]", path);
+               int ret = vconf_set_str(VCONFKEY_MYFILE_RECENT_FILE, path);
+               mf_debug("ret is [%d]", ret);
+
+       }
+       return;
+}
+
+void mf_util_merge_eina_list_to_glist(const Eina_List *eSource, GList **gSource)
+{
+       mf_retm_if(eSource == NULL, "eSource is NULL");
+       mf_retm_if(gSource == NULL, "gSource is NULL");
+
+
+       const Eina_List *l = NULL;
+       GString *pNode = NULL;
+
+       EINA_LIST_FOREACH(eSource, l, pNode) {
+               if (pNode) {
+                       *gSource = g_list_append(*gSource, pNode->str);
+               }
+       }
+
+}
+
+void mf_util_exception_func(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       switch (ap->mf_Status.more) {
+       case MORE_DATA_COPYING:
+               ap->mf_Status.more = MORE_INTERNAL_COPY;
+               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL,
+                                                                      GET_STR(MF_MSG_COPY_FAILED2), NULL, NULL, NULL, (Evas_Smart_Cb)mf_callback_exception_popup_cb, ap);
+               break;
+       case MORE_DATA_MOVING:
+               ap->mf_Status.more = MORE_INTERNAL_MOVE;
+               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL,
+                                                                      GET_STR(MF_MSG_MOVE_FAILED3), NULL, NULL, NULL, (Evas_Smart_Cb)mf_callback_exception_popup_cb, ap);
+               break;
+       case MORE_DELETE:
+               ap->mf_Status.more = ap->mf_Status.preMore;
+               ap->mf_MainWindow.pNormalPopup = mf_popup_create_popup(ap, POPMODE_TEXT, NULL, GET_STR(MF_MSG_DEL_FAILED1), NULL, NULL, NULL, NULL, NULL);
+               break;
+       default:
+               break;
+       }
+       MF_TRACE_END;
+}
+
+int mf_util_is_valid_name_check(const char *name)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(name == NULL, MF_INTERNAL_FILE_NAME_NULL, "name is NULL");
+       gchar *temp_name = NULL;
+       int ret = MYFILE_ERR_NONE;
+
+       int length = strlen(name);
+       if (length) {
+               if (strncmp(name, ".", length) == 0 || strncmp(name, "..", length) == 0) {
+                       ret = MF_INTERNAL_FILE_NAME_IGNORE;
+                       goto EXIT;
+               }
+
+               temp_name = g_strconcat(name, NULL);
+               if (strlen(g_strstrip(temp_name)) == 0) {
+                       ret = MF_INTERNAL_FILE_NAME_CHUG;
+                       goto EXIT;
+               }
+
+               if (mf_util_character_count_get(name) > MYFILE_FILE_NAME_LEN_MAX) {
+                       ret = MF_INTERNAL_FILE_NAME_MAX_LENGTH;
+                       goto EXIT;
+               }
+
+               if (mf_file_attr_is_valid_name(name) != MYFILE_ERR_NONE) {
+                       ret = MF_INTERNAL_FILE_NAME_INVALID_CHAR;
+               }
+       } else {
+               ret = MF_INTERNAL_FILE_NAME_EMPTY;
+       }
+
+EXIT:
+       if (temp_name) {
+               g_free(temp_name);
+               temp_name = NULL;
+       }
+       MF_TRACE_END;
+       return ret;
+}
+
+#ifdef MYFILE_USB_OTG
+void mf_util_ex_disk_list_update(void *data)
+{
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+       mf_debug();
+       int iIsNoContent = 0;
+       Evas_Object *newContent = NULL;
+
+       iIsNoContent = ap->mf_Status.flagNoContent;
+       newContent = mf_navi_bar_content_create(ap);
+       Evas_Object *pConformant = mfNaviBarConformGet(ap);
+       mfNaviBarSetContent(ap, pConformant, newContent);
+       mf_debug();
+}
+#endif
+
+
+char *mf_util_upper_folder_name_get(void *data, GString *fullpath)
+{
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       mf_retvm_if(fullpath == NULL, NULL, "fullpath is NULL");
+       mf_retvm_if(fullpath->str == NULL, NULL, "fullpath is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       GString *parent_path = NULL;
+       GString *gName = NULL;
+       char *upper_name = NULL;
+
+       parent_path = mf_fm_svc_wrapper_get_file_parent_path(fullpath);
+
+       mf_retvm_if(parent_path == NULL, NULL, "fullpath is NULL");
+       mf_retvm_if(parent_path->str == NULL, NULL, "fullpath is NULL");
+
+
+       if (!g_strcmp0(parent_path->str, PHONE_FOLDER)) {
+               upper_name = g_strdup(GET_SYS_STR(MF_LABEL_PHONE));
+       } else if (!g_strcmp0(parent_path->str, MEMORY_FOLDER)) {
+               upper_name = g_strdup(GET_SYS_STR(MF_LABEL_MMC));
+#ifdef MYFILE_USB_OTG
+       } else if (!g_strcmp0(parent_path->str, OTG_FOLDER)){
+               upper_name = g_strdup(GET_STR(MF_LABEL_OTG));
+#endif
+       } else {
+               gName = mf_fm_svc_wrapper_get_file_name(parent_path);
+               GSTRING_CHECK_NULL_GOTO(gName, FAILED_EXIT);
+               upper_name = g_strdup(gName->str);
+       }
+
+       CHAR_CHECK_NULL_GOTO(upper_name, FAILED_EXIT);
+       SAFE_FREE_GSTRING(parent_path);
+       SAFE_FREE_GSTRING(gName);
+       return upper_name;
+
+FAILED_EXIT:
+       SAFE_FREE_GSTRING(parent_path);
+       SAFE_FREE_GSTRING(gName);
+       mf_util_operation_alloc_failed(ap);
+       return NULL;
+
+}
+
+void mf_util_set_pm_lock(void *data, Eina_Bool isLock)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       int ret = 0;
+       if (ap->mf_Status.flagLCDLock != isLock) {
+               if (ap->mf_Status.flagLCDLock == EINA_TRUE) {
+                       ap->mf_Status.flagLCDLock = EINA_FALSE;
+               } else {
+                       ap->mf_Status.flagLCDLock = EINA_TRUE;
+               }
+
+               if (ap->mf_Status.flagLCDLock) {
+                       mf_debug("lock the LCD_OFF");
+                       ret = power_lock_state(POWER_STATE_SCREEN_OFF, 0);
+               } else {
+                       mf_debug("unlock the LCD_OFF");
+                       ret = power_unlock_state(POWER_STATE_SCREEN_OFF);
+               }
+               if (ret != 0)
+                       mf_debug("fail to lock(unlock)");
+
+       }
+       MF_TRACE_END;
+}
+
+long mf_util_character_count_get(const char *original)
+{
+       mf_retvm_if(original == NULL, 0, "input string is NULL");
+       long count = 0;
+       char *utf8_form = g_locale_to_utf8(original, -1, NULL, NULL, NULL);
+       if (utf8_form == NULL)
+               return count;
+       else {
+                 count = g_utf8_strlen(utf8_form, -1);
+                 free(utf8_form);
+                 mf_debug("utf8 count is %ld", count);
+                 return count;
+       }
+}
+
+MF_THEME_TYPE mf_util_get_theme(void)
+{
+       MF_THEME_TYPE theme = THEME_INVALID;
+       char *name;
+
+       char *theme_name = vconf_get_str(VCONFKEY_SETAPPL_WIDGET_THEME_STR);
+       mf_debug("theme is [%s]", theme_name);
+       mf_retvm_if(theme_name == NULL, THEME_ERROR, "Failed to get vconf value");      /* file system exceptional handle */
+
+       name = strrchr(theme_name, '/');
+
+       if (!name)
+               name = theme_name;
+       else
+               ++name;
+
+       mf_debug("name is [%s]", name);
+       //SETTING_TRACE("name:%s", name);
+       /* special theme process.. */
+       if (0 == g_strcmp0("tizen-black.edj", name) || 0 == g_strcmp0("tizen-black-hd.edj", name)) {
+               theme = THEME_NBEAT_BLACK;
+       } else if (0 == g_strcmp0("tizen.edj", name) || 0 == g_strcmp0("tizen-hd.edj", name)) {
+               theme = THEME_NBEAT;
+       } else {
+               theme = THEME_ERROR;
+       }
+       free(theme_name);
+       theme_name = NULL;
+       mf_debug("theme is [%d]", theme);
+       return theme;
+}
+
+Eina_List *mf_util_get_all_selected(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+       Eina_List *select_list = NULL;
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               mf_genlist_get_list_selected_files(ap->mf_MainWindow.pEditView.pGenlist, &select_list);
+       } else {
+               mf_gengrid_get_grid_selected_files(ap->mf_MainWindow.pEditView.pGengrid, &select_list);
+       }
+       MF_TRACE_END;
+       return select_list;
+
+}
+
+Eina_List *mf_util_get_all_selected_items(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+       Eina_List *select_list = NULL;
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               mf_genlist_get_list_selected_items(ap->mf_MainWindow.pEditView.pGenlist, &select_list);
+       } else {
+               mf_gengrid_get_grid_selected_items(ap->mf_MainWindow.pEditView.pGengrid, &select_list);
+       }
+       MF_TRACE_END;
+       return select_list;
+
+}
+
+
+gboolean mf_util_is_file_selected(Eina_List **source, GString *path)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(*source == NULL, FALSE, "source is NULL");
+       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) {
+               GString *source_path = (GString *)data;
+               if (source_path && source_path->str) {
+                       mf_debug("source_path is [%s] path is [%s]", source_path->str, path->str);
+                       if (g_strcmp0(source_path->str, path->str) == 0) {
+                               flag = TRUE;
+                               mf_debug("flag is [%d]source_path is [%s] path is [%s]",flag, source_path->str, path->str);
+                               *source = eina_list_remove(*source, source_path);
+                               g_string_free(source_path, TRUE);
+                               source_path = NULL;
+                               int ret = eina_list_count(*source);
+                               if (ret == 0) {
+                                       *source = NULL;
+                               }
+                               break;
+                       } else {
+                               continue;
+                       }
+               }
+       }
+       MF_TRACE_END;
+       return flag;
+}
+
+int mf_util_generate_list_data(const char *path, Eina_List ** default_dir_list, Eina_List ** user_dir_list, Eina_List ** file_list)
+{
+       MF_TRACE_BEGIN;
+       assert(path);
+       assert(default_dir_list);
+       assert(user_dir_list);
+       assert(file_list);
+       int error_code = 0;
+       Eina_List *dir_list = NULL;
+       error_code = mf_fm_svc_wrapper_get_file_list(path, &dir_list, file_list);
+
+       if (error_code != MYFILE_ERR_NONE) {
+               return error_code;
+       }
+
+       /*      classify the dir list to default and user defined       */
+       error_code = mf_fm_svc_wrapper_classify_dir_list(dir_list, default_dir_list, user_dir_list);
+       if (error_code != MYFILE_ERR_NONE) {
+               return error_code;
+       }
+       eina_list_free(dir_list);
+       MF_TRACE_END;
+       return error_code;
+}
+
+
+int mf_util_generate_file_list(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, MYFILE_ERR_INVALID_ARG, "data is null");
+       struct appdata *ap = (struct appdata *)data;
+
+       Eina_List *file_list = NULL;
+       Eina_List *default_dir_list = NULL;
+       Eina_List *user_dir_list = NULL;
+       int error_code = 0;
+
+       mf_retvm_if(ap->mf_Status.path == NULL, MYFILE_ERR_INVALID_ARG, "ap->mf_Status.path is NULL");
+       mf_retvm_if(ap->mf_Status.path->str == NULL, MYFILE_ERR_INVALID_ARG, "ap->mf_Status.path->str is NULL");
+
+       error_code = mf_util_generate_list_data(ap->mf_Status.path->str, &default_dir_list, &user_dir_list, &file_list);
+       if (error_code != MYFILE_ERR_NONE) {
+               /*Todo: we need to free all the Eina_List*/
+               return error_code;
+       }
+
+
+       if (ap->mf_FileOperation.folder_list) {
+               mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.folder_list), MYFILE_TYPE_FSNODE);
+       }
+       if (ap->mf_FileOperation.file_list) {
+               mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.file_list), MYFILE_TYPE_FSNODE);
+       }
+
+       ap->mf_FileOperation.file_list = file_list;
+       ap->mf_FileOperation.default_dir_list = default_dir_list;
+       ap->mf_FileOperation.user_dir_list = user_dir_list;
+
+       return error_code;
+}
+
+int mf_util_generate_root_view_file_list(void *data, Eina_List **list, int storage_state)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, 0, "data is null");
+       struct appdata *ap = (struct appdata *)data;
+
+       fsNodeInfo *pNode = NULL;
+       pNode = (fsNodeInfo *) malloc(sizeof(fsNodeInfo));
+       memset(pNode, 0, sizeof(fsNodeInfo));
+       /*set path */
+       pNode->path = g_strdup(PHONE_PARENT);
+       pNode->name = g_strdup(PHONE_NAME);
+       mf_file_attr_get_file_stat(PHONE_FOLDER, &pNode);
+       pNode->type = FILE_TYPE_DIR;
+       *list = eina_list_append(*list, pNode);
+
+       if (storage_state & MYFILE_MMC) {
+               pNode = (fsNodeInfo *) malloc(sizeof(fsNodeInfo));
+               memset(pNode, 0, sizeof(fsNodeInfo));
+               /*set path */
+               pNode->path = g_strdup(STORAGE_PARENT);
+               pNode->name = g_strdup(MMC_NAME);
+               mf_file_attr_get_file_stat(MEMORY_FOLDER, &pNode);
+               pNode->type = FILE_TYPE_DIR;
+               *list = eina_list_append(*list, pNode);
+       }
+
+       if (storage_state & MYFILE_OTG) {
+               pNode = (fsNodeInfo *) malloc(sizeof(fsNodeInfo));
+               memset(pNode, 0, sizeof(fsNodeInfo));
+               /*set path */
+               pNode->path = g_strdup(STORAGE_PARENT);
+               pNode->name = g_strdup(OTG_NAME);
+               mf_file_attr_get_file_stat(OTG_FOLDER, &pNode);
+               pNode->type = FILE_TYPE_DIR;
+               *list = eina_list_append(*list, pNode);
+       }
+
+       return 0;
+}
+
+
+void mf_util_sort_the_file_list(void *data)
+{
+
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is null");
+       struct appdata *ap = (struct appdata *)data;
+
+       int iSortTypeValue = 0;
+
+       mf_util_get_vconf_value(VCONF_TYPE_SORT_TYPE, &iSortTypeValue);
+
+       if (ap->mf_Status.view_type == mf_view_root_category) {
+               mf_fs_oper_sort_list(&ap->mf_FileOperation.category_list, iSortTypeValue);
+       }
+       mf_fs_oper_sort_list(&ap->mf_FileOperation.file_list, iSortTypeValue);
+
+       ap->mf_FileOperation.folder_list = eina_list_merge(ap->mf_FileOperation.user_dir_list, ap->mf_FileOperation.default_dir_list);
+       ap->mf_FileOperation.user_dir_list = NULL;
+       ap->mf_FileOperation.default_dir_list = NULL;
+       /*need to sort folder items only By Name and Date*/
+       if (iSortTypeValue == MYFILE_SORT_BY_NAME_A2Z || iSortTypeValue == MYFILE_SORT_BY_NAME_Z2A || iSortTypeValue == MYFILE_SORT_BY_DATE_R2O
+           || iSortTypeValue == MYFILE_SORT_BY_DATE_O2R) {
+               ap->mf_Status.iFolderSortType = iSortTypeValue;
+               mf_fs_oper_sort_list(&ap->mf_FileOperation.folder_list, iSortTypeValue);
+       } else {
+               mf_fs_oper_sort_list(&ap->mf_FileOperation.folder_list, ap->mf_Status.iFolderSortType);
+       }
+       MF_TRACE_END;
+}
+
+
+void mf_util_rotate_state_set(void *data, app_device_orientation_e  rotate_mode)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is null");
+       struct appdata *ap = (struct appdata *)data;
+#ifdef MYFILE_SPLIT_VIEW
+
+       switch (rotate_mode) {
+       case APP_DEVICE_ORIENTATION_270:
+                 ap->mf_Status.rotation_angle = -90;
+                 ap->mf_Status.view_mode_end = FALSE;
+                 ap->mf_Status.pre_rotate_type = APP_DEVICE_ORIENTATION_270;
+                 break;
+
+       case APP_DEVICE_ORIENTATION_90:
+                 ap->mf_Status.rotation_angle = 90;
+                 ap->mf_Status.view_mode_end = FALSE;
+                 ap->mf_Status.pre_rotate_type = APP_DEVICE_ORIENTATION_90;
+                 break;
+
+       case APP_DEVICE_ORIENTATION_180:
+                 ap->mf_Status.rotation_angle = 0; //180;
+                 ap->mf_Status.view_mode_end = TRUE;
+                 ap->mf_Status.pre_rotate_type = APP_DEVICE_ORIENTATION_180;
+                 break;
+
+       case APP_DEVICE_ORIENTATION_0 :
+       default:
+                 ap->mf_Status.rotation_angle = 0;
+                 ap->mf_Status.view_mode_end = TRUE;
+                 ap->mf_Status.pre_rotate_type = APP_DEVICE_ORIENTATION_0;
+                 break;
+       }
+       if (rotate_mode == APP_DEVICE_ORIENTATION_270 || rotate_mode == APP_DEVICE_ORIENTATION_90) {
+               ap->mf_Status.rotation_type = MF_ROTATE_LANDSCAPE;
+       } else {
+               ap->mf_Status.rotation_type = MF_ROTATE_PORTRAIT;
+       }
+       mf_debug("rotate_mode is [%d] rotation_type is [%d]", rotate_mode, ap->mf_Status.rotation_type);
+
+       elm_win_rotation_with_resize_set(ap->mf_MainWindow.pWindow, ap->mf_Status.rotation_angle);
+
+#endif
+       MF_TRACE_END;
+}
+
+const char *mf_util_search_markup_keyword(const char *string, char *searchword, bool *result)
+{
+       //SEARCH_FUNC_START;
+       MF_TRACE_BEGIN;
+       char pstr[DEF_BUF_LEN + 1] = {0,};
+       static char return_string[DEF_BUF_LEN + 1] = { 0, };
+       int word_len = 0;
+       int search_len = 0;
+       int i = 0;
+       bool found = false;
+       gchar* markup_text_start = NULL;
+       gchar* markup_text_end= NULL;
+       gchar* markup_text= NULL;
+
+       mf_retvm_if(string == NULL, NULL, "string is NULL");
+       mf_retvm_if(searchword == NULL, NULL, "searchword is NULL");
+       mf_retvm_if(result == NULL, NULL, "result is NULL");
+
+       if(g_utf8_validate(string,-1,NULL)) {
+
+               strncpy(pstr, string, DEF_BUF_LEN);
+
+               word_len = strlen(pstr);
+               search_len = strlen(searchword);
+
+               for (i = 0; i < word_len; i++) {
+                       if (!strncasecmp(searchword, &pstr[i], search_len)) {
+                               found = true;
+                               break;
+                       }
+               }
+
+               *result = found;
+               memset(return_string, 0x00, DEF_BUF_LEN+1);
+
+               if (found) {
+                       if (i == 0) {
+                               markup_text = g_markup_escape_text(&pstr[0], search_len);
+                               markup_text_end = g_markup_escape_text(&pstr[search_len], word_len-search_len);
+                               mf_retvm_if(markup_text == NULL, NULL, "markup_text is NULL");
+                               mf_retvm_if(markup_text_end == NULL, NULL, "markup_text_end is NULL");
+
+                               snprintf(return_string,
+                                                       DEF_BUF_LEN,
+                                                       "<color=#ff0000ff>%s</color>%s",
+                                                       markup_text,
+                                                       (char*)markup_text_end);
+                               SAFE_FREE_CHAR(markup_text);
+                               SAFE_FREE_CHAR(markup_text_end);
+                       } else {
+                               markup_text_start = g_markup_escape_text(&pstr[0], i);
+                               markup_text = g_markup_escape_text(&pstr[i], search_len);
+
+                               markup_text_end =  g_markup_escape_text(&pstr[i+search_len], word_len-(i+search_len));
+                               mf_retvm_if(markup_text_start == NULL, NULL, "markup_text_start is NULL");
+                               mf_retvm_if(markup_text == NULL, NULL, "markup_text is NULL");
+                               mf_retvm_if(markup_text_end == NULL, NULL, "markup_text_end is NULL");
+                               snprintf(return_string,
+                                                       DEF_BUF_LEN,
+                                                       "%s<color=#ff0000ff>%s</color>%s",
+                                                       (char*)markup_text_start,
+                                                       markup_text,
+                                                       (char*)markup_text_end);
+                               SAFE_FREE_CHAR(markup_text);
+                               SAFE_FREE_CHAR(markup_text_start);
+                               SAFE_FREE_CHAR(markup_text_end);
+                       }
+               } else {
+                       snprintf(return_string, DEF_BUF_LEN, "%s", pstr);
+               }
+       }
+       MF_TRACE_END;
+
+       return return_string;
+
+}
+
+char *mf_util_get_text(const char *ID)
+{
+       MF_CHECK_NULL(ID);
+       char *str;
+
+       if(strstr(ID, "IDS_COM"))
+               str = dgettext("sys_string", ID);
+       else
+               str = gettext(ID);
+
+       return str;
+}
+
+fsNodeInfo *mf_util_generate_pnode(const char *path, int file_type)
+{
+       mf_retvm_if(path == NULL, NULL, "path is NULL");
+       fsNodeInfo *pNode = NULL;
+       int error = MYFILE_ERR_NONE;
+
+       pNode = (fsNodeInfo *) malloc(sizeof(fsNodeInfo));
+       if (pNode == NULL) {
+               return NULL;
+       }
+       memset(pNode, 0, sizeof(fsNodeInfo));
+       char *parent = NULL;
+       error = mf_file_attr_get_parent_path(path, &parent);
+       if (error == MYFILE_ERR_NONE) {
+               pNode->path = parent;
+               pNode->name = g_strdup(ecore_file_file_get(path));
+               mf_file_attr_get_file_stat(path, &pNode);
+               if (file_type == FILE_TYPE_DIR) {
+                       pNode->type = file_type;
+               } else {
+                       mf_file_attr_get_file_category(path, &(pNode->type));
+               }
+       } else {
+               SAFE_FREE_CHAR(pNode);
+       }
+       return pNode;
+}
+void mf_util_generate_list(Eina_List **list, const char *path, int file_type)
+{
+       mf_retm_if(list == NULL, "list is NULL");
+       mf_retm_if(path == NULL, "path is NULL");
+
+       fsNodeInfo *pNode = mf_util_generate_pnode(path, file_type);
+
+       if (pNode)
+               *list = eina_list_append(*list, pNode);
+}
+
+
+void mf_util_remove_item_from_list_by_location(Eina_List **list, int location)
+{
+       mf_retm_if(list == NULL, "list is NULL");
+
+       Eina_List *l = NULL;
+       fsNodeInfo *node = NULL;
+
+       EINA_LIST_FOREACH(*list, l, node) {
+               if ((fsNodeInfo *)node != NULL && ((fsNodeInfo *)node)->path != NULL) {
+                       if (mf_fm_svc_wrapper_get_location(node->path) == location){
+                               SAFE_FREE_CHAR(node->path);
+                               SAFE_FREE_CHAR(node->name);
+                               SAFE_FREE_CHAR(node->ext);
+                               SAFE_FREE_CHAR(node);
+                               *list = eina_list_remove_list(*list, l);
+                       }
+               }
+       }
+}
+
+void mf_util_update_item_from_list_by_name(Eina_List **list, const char *path, char *new_name)
+{
+       mf_retm_if(list == NULL, "list is NULL");
+
+       Eina_List *l = NULL;
+       fsNodeInfo *node = NULL;
+
+       EINA_LIST_FOREACH(*list, l, node) {
+               if ((fsNodeInfo *)node != NULL && ((fsNodeInfo *)node)->name != NULL && ((fsNodeInfo *)node)->path != NULL) {
+                       char *real_name = g_strconcat(((fsNodeInfo *)node)->path, "/", ((fsNodeInfo *)node)->name, NULL);
+                       mf_debug("real is [%s] path is [%s]", real_name, path);
+                       if (g_strcmp0(real_name, path) == 0){
+                               SAFE_FREE_CHAR(node->name);
+                               node->name = g_strdup(ecore_file_file_get(new_name));
+                       }
+                       SAFE_FREE_CHAR(real_name);
+               }
+       }
+}
+
+void mf_util_remove_item_from_list_by_name(Eina_List **list, const char *path)
+{
+       mf_retm_if(list == NULL, "list is NULL");
+
+       Eina_List *l = NULL;
+       fsNodeInfo *node = NULL;
+
+       EINA_LIST_FOREACH(*list, l, node) {
+               if ((fsNodeInfo *)node != NULL && ((fsNodeInfo *)node)->name != NULL && ((fsNodeInfo *)node)->path != NULL) {
+                       char *real_name = g_strconcat(((fsNodeInfo *)node)->path, "/", ((fsNodeInfo *)node)->name, NULL);
+                       mf_debug("real is [%s] path is [%s]", real_name, path);
+                       if (g_strcmp0(real_name, path) == 0){
+                               SAFE_FREE_CHAR(node->path);
+                               SAFE_FREE_CHAR(node->name);
+                               SAFE_FREE_CHAR(node->ext);
+                               SAFE_FREE_CHAR(node);
+                               *list = eina_list_remove_list(*list, l);
+                       }
+                       SAFE_FREE_CHAR(real_name);
+               }
+       }
+}
+
+bool mf_util_is_rotation_lock(void)
+{
+       MF_TRACE_BEGIN;
+       int lock = -1;
+
+       if (!vconf_get_bool(VCONFKEY_SETAPPL_AUTO_ROTATE_SCREEN_BOOL, &lock))
+       {
+               mf_debug("Rotation locked state[%d].", lock);
+               return lock;
+       }
+       else
+       {
+               mf_debug("Get rotation lock state failed!");
+               return false;
+       }
+}
+
diff --git a/src/include/mf-callback.h b/src/include/mf-callback.h
new file mode 100644 (file)
index 0000000..8a25b4f
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_CALLBACK_H_
+#define __DEF_MYFILE_CALLBACK_H_
+
+#include "mf-main.h"
+
+void mf_callback_click_cb(struct appdata *data, mfAction key, GString * path);
+void mf_callback_app_rotate_cb(app_device_orientation_e , void *data);
+//void mf_callback_tab_cb(void *data, Evas_Object *obj, void *event_info);
+void mfNaviBackStatusSet(void *data, Evas_Object *obj, void *event_info);
+void mfListByCB(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_launch_send_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_cancel_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_edit_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_save_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_rename_save_cb(void *ad, Evas_Object * obj, void *event_info);
+void mf_callback_delete_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_max_len_reached_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_new_folder_create_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_list_by_view_cb(void *data, Evas_Object *obj, void *event_info);
+void mfMoveCB(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_copy_move_cb(void *data, Evas_Object *obj, void *event_info);
+void mfSearchbarCancelCallBack(void *data, Evas_Object *obj, void *event_info);
+
+void mf_callback_move_here_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_paste_here_cb(void *data, Evas_Object *obj, void *event_info);
+void mfCopyCB(void *data, Evas_Object *obj, void *event_info);
+Eina_Bool mf_callback_thumb_timer_cb(void *data);
+
+/*Callbacks defined for external usage*/
+
+int refresh_timer_cb(void *data);
+void mfSendViaCB(void *data, Evas_Object *obj, void *event_info);
+
+int mf_callback_set_mmc_state_cb(void *data);
+int mf_callback_add_dir_watch(const char *path, void *data);
+int mf_callback_remove_dir_watch(void);
+int mf_callback_create_dir_monitor(void *data);
+void mf_callback_destory_dir_monitor(void *data);
+
+void mf_callback_init_operation_cancel(void *data);
+void mf_callback_progress_bar_cancel_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_thread_pipe_cb(void *data, void *buffer, unsigned int nbyte);
+void mf_callback_icu_update_cb(void *data);
+void mf_callback_exception_popup_cb(void *data);
+void mf_callback_destory_rename(void *data);
+void mf_popup_show_vk_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_backbutton_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_upper_button_pressed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_upper_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_upper_click_cb(void *data, Evas_Object * obj, void *event_info);
+int mf_callback_set_mass_storage_state_cb(void *data);
+#ifdef MYFILE_USB_OTG
+void mf_callback_set_otg_state_cb(void *data);
+#endif
+void mf_callback_rename_button_callback(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_delete_button_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_imf_changed_cb(void *data, Evas_Object *obj, void *event_info);
+Eina_Bool mf_callback_gengrid_thumb_timer_cb(void *data);
+void mf_callback_view_style_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_home_button_pressed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_home_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_home_button_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_more_button_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source);
+void mf_callback_list_by_response_cb(void *data);
+void mf_callback_send_response_cb(void *data);
+
+void mf_callback_operation_request_cancel_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_operation_request_replace_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_operation_request_rename_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_list_by_button_callback(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_view_as_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_rename_create_cb(void *data, Evas_Object * obj, void *event_info);
+#ifdef MYFILE_SPLIT_VIEW
+void mf_callback_left_click_cb(struct appdata *data, GString * path, Elm_Object_Item *item);
+#endif
+void mf_callback_new_folder_changed_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_sbeam_cb(void *user_data);
+void mf_callback_extension_cb(void *data, Evas_Object * obj, void *event_info);
+Eina_Bool mf_callback_popup_del_idler_cb(void *data);
+void mf_callback_operation_timeout_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_nofity_show_callback(void *data, Evas *e, Evas_Object *obj, void *event_info);
+void mf_callback_nofity_hide_callback(void *data, Evas *e, Evas_Object *obj, void *event_info);
+#ifdef MYFILE_MOTION_FEATURE
+void mf_callback_motion_double_tap(Evas_Object *genlist);
+#endif
+void mf_callback_detail_ctx_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_profile_changed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_share_cb(void *data, Evas_Object * obj, void *event_info);
+
+void mf_callback_thumb_created_cb(media_content_error_e error, const char *path, void *user_data);
+bool mf_callback_create_thumbnail(void *data, media_thumbnail_completed_cb callback);
+void mf_callback_entry_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_imf_preedit_change_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_select_all_button_pressed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_select_all_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_imf_hide_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_naviframe_title_clicked_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_callback_entry_button_pressed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_entry_button_unpressed_cb(void *data, Evas_Object * obj, void *event_info);
+void mf_callback_storage_remove_view_operation(void *data, int optStorage);
+void mf_callback_storage_remove_category_view_items(void *data, int optStorage);
+void mf_callback_imf_state_callback_register(void *data);
+void mf_callback_imf_state_callback_del(void *data);
+void mf_callback_illegal_char_popup_cb(void *data, Evas_Object * obj, void *event_info);
+
+#endif
diff --git a/src/include/mf-cancel.h b/src/include/mf-cancel.h
new file mode 100644 (file)
index 0000000..5fae676
--- /dev/null
@@ -0,0 +1,83 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 _MF_CANCEL_DEF_H_
+#define _MF_CANCEL_DEF_H_
+
+#include <glib.h>
+
+/**
+ * mf_cancel:
+ * <structname>mf_cancel</structname> is an opaque structure whose members
+ * cannot be accessed directly.
+ */
+typedef struct _mf_cancel mf_cancel;
+
+struct _mf_cancel {
+       gboolean is_cancel;
+       gboolean do_cancel;
+       GStaticMutex s_mutex;
+};
+
+/**
+ * mf_cancel_new:
+ * Creates a new #mf_cancel.
+ * Return value: This function returns a new #mf_cancel on success, or %NULL.
+ **/
+mf_cancel *mf_cancel_new(void);
+
+/**
+ * mf_cancel_free:
+ * @cancel : a #mf_cancel
+ * Release all allocated memory for @cancel.
+ **/
+void mf_cancel_free(mf_cancel *cancel);
+
+/**
+ * mf_cancel_do_cancel:
+ * @cancel : a #mf_cancel
+ * Request to cancel operation related on @cancel.
+ * This function should be called by conductor at most case
+ **/
+void mf_cancel_do_cancel(mf_cancel *cancel);
+
+/**
+ * mf_cancel_check_cancel:
+ * Check request of @cancel
+ * Return value: This function returns TRUE, if cancel is requested, or FALSE.
+ **/
+gboolean mf_cancel_check_cancel(mf_cancel *cancel);
+
+/**
+ * mf_cancel_is_cancelled:
+ * Check status of @cancel
+ * Return value: This function returns TRUE, if cancel is done, or FALSE.
+ **/
+gboolean mf_cancel_is_cancelled(mf_cancel *cancel);
+
+
+/**
+ * mf_cancel_set_cancelled:
+ * set status of @cancel after cancel is done
+ * This function should be called by operator
+ **/
+void mf_cancel_set_cancelled(mf_cancel *cancel);
+
+#endif
diff --git a/src/include/mf-conf.h b/src/include/mf-conf.h
new file mode 100644 (file)
index 0000000..ff2a0c7
--- /dev/null
@@ -0,0 +1,65 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_CONF_H_
+#define __DEF_MYFILE_CONF_H_
+
+
+#define PACKAGE                                "myfile"
+#define PKGNAME_MYFILE                 "org.tizen.myfile"
+#define LOCALEDIR                      "/usr/apps/org.tizen.myfile/res/locale"
+
+#define EDJ_PATH                       "/usr/apps/org.tizen.myfile/res/edje"
+#define ICON_PATH                      "/usr/apps/org.tizen.myfile/res/images"
+
+#define EDJ_NAVIGATIONBAR              EDJ_PATH"/myfileNavigationBar.edj"
+#define GRP_NAVI_VIEW                  "navigation_view"
+
+#define EDJ_SEARCHBAR                  EDJ_PATH"/myfileSearchBar.edj"
+#define GRP_SEARCH_BAR                 "search_bar"
+
+#define EDJ_NAME                       EDJ_PATH"/myfile.edj"
+#define GRP_LIST                       "effect/model/list"
+#define GRP_THUMBNAIL_ONLY             "thumbnail_only"
+#define GRP_PROGRESS_LABEL             "label"
+#define GRP_NO_CONTENT                 "noContent"
+#define GRP_PATH_INFO                  "pathinfo"
+#define GRP_UPPER_FOLDER               "upper_folder"
+#define GRP_SEARCH_VIEW                        "search_view"
+#ifdef MYFILE_SPLIT_VIEW
+#define GRP_UPPER_FOLDER               "upper_folder"
+#define GRP_PATH_INFO_LANSCAPE         "pathinfo_lanscape"
+#define GRP_UPPER_FOLDER_LANSCAPE      "upper_folder_lanscape"
+#define GRP_LANDSCAPE_LAYOUT           "landscape_layout"
+#endif
+#define GRP_NEW_FOLDER                 "new_folder_layout"
+#define GRP_TRAY_ITEM                  "apptray.item"
+
+#define MYFILE_DATEFORMAT_12           "MM/dd/yyyyhm"
+#define MYFILE_DATEFORMAT_24           "MM/dd/yyyyHm"
+
+
+#define MYFILE_LABEL_STRING_LENGTH     128
+
+#define MYFILE_ICU_ARR_LENGTH          128
+#define BUFF_SIZE                      256
+#define MYFILE_BASIC_SIZE              1024
+#define MAX_FOLDER_COUNT               300
+#endif /* __DEF_MYFILE_CONF_H_ */
diff --git a/src/include/mf-copy-internal.h b/src/include/mf-copy-internal.h
new file mode 100644 (file)
index 0000000..0fd631d
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_COPY_INTERNAL_H_DEF__
+#define __MF_COPY_INTERNAL_H_DEF__
+
+#include <glib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "mf-cancel.h"
+#include "mf-request.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+
+int _mf_copy_copy_regfile(const char *src, struct stat *src_statp,
+                         const char *dst, unsigned long buf_size, mf_cancel * cancel, _mf_fo_msg_cb msg_cb, void *msg_data);
+
+
+int _mf_copy_copy_directory(const char *src, struct stat *src_statp, const char *dst, mf_cancel * cancel, _mf_fo_msg_cb msg_cb, void *msg_data);
+
+int _mf_copy_copy_internal(const char *src, const char *dst_dir,
+                          mf_cancel *cancel, _mf_fo_msg_cb msg_func, mf_req_callback req_func, void *msg_data);
+
+
+#endif
diff --git a/src/include/mf-copy.h b/src/include/mf-copy.h
new file mode 100644 (file)
index 0000000..2360c26
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_COPY_H_DEF__
+#define __MF_COPY_H_DEF__
+
+#include <glib.h>
+#include "mf-cancel.h"
+#include "mf-request.h"
+#include "mf-fo-common.h"
+
+/**
+ * mf_copy_copy_items:
+ * @item_list: a GList of strings containing item path to copy
+ * @dst_dir: destination directory to copy
+ * @request_callback: callback to handle duplicated file/directory name,
+ *                              if NULL is set for requset_callback, default action is merge.
+ *                              for detail, see "mf_request.h"
+ * @msg_callback: callback for reporting progress, for detail, see "mf_fo_common.h"
+ * @cancel :  a handle for cancelling copy operation, for detail, see "mf_cancel.h"
+ * @sync: a variable for requesting file system sync, if TRUE is set, sync() function is called after copy done.
+ * @u_data: user data
+ *
+ * Start copy items in given @item_list to @dst_dir, @msg_callback will be called repeatly with @u_data
+ * in certain interval to report current progress.
+ * if duplicated file/directory is found, @request_callback is called with @u_data,
+ * and copy operation will be blocked until user's decision is decided.
+ * if someone want to cancel operation, call mf_cancel_do_cancel() with @cancel.
+ * if @sync is set TRUE, sync() function is called after copy operation is done to flush out file system cache.
+ * Return value: This function returns zero on success, or negative value.
+ **/
+
+int mf_copy_copy_items(GList *item_list, const char *dst_dir, mf_cancel *cancel, gboolean sync, void *u_data);
+
+#endif
diff --git a/src/include/mf-delete-internal.h b/src/include/mf-delete-internal.h
new file mode 100644 (file)
index 0000000..5f474cf
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_DELETE_INTERNAL_H_DEF__
+#define __MF_DELETE_INTERNAL_H_DEF__
+
+#include <glib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "mf-cancel.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+
+int _mf_delete_delete_regfile(const char *file, struct stat *file_statp, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data);
+
+int _mf_delete_delete_directory(const char *dir, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data);
+
+int _mf_delete_del_internal(const char *item, mf_cancel *cancel, _mf_fo_msg_cb msg_callback, void *msg_data);
+
+#endif
diff --git a/src/include/mf-delete.h b/src/include/mf-delete.h
new file mode 100644 (file)
index 0000000..9984a1d
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_DELETE_H_DEF__
+#define __MF_DELETE_H_DEF__
+
+#include <glib.h>
+
+#include "mf-cancel.h"
+#include "mf-fo-common.h"
+
+/**
+ * mf_delete_items:
+ * @item_list: a GList of strings containing item path to delete
+ * @msg_callback: callback for reporting progress, for detail, see "mf_fo_common.h"
+ * @cancel :  a handle for cancelling delete operation, for detail, see "mf_cancel.h"
+ * @sync: a variable for requesting file system sync, if TRUE is set, sync() function is called after delete done.
+ * @u_data: user data
+ *
+ * Start delete items in given @item_list, @msg_callback will be called repeatly with @u_data
+ * in certain interval to report current progress.
+ * if someone want to cancel operation, call mf_cancel_do_cancel() with @cancel.
+ * if @sync is set TRUE, sync() function is called after delete operation is done to flush out file system cache.
+ * Return value: This function returns zero on success, or negative value.
+ **/
+
+int mf_delete_items(GList *item_list, mf_cancel *cancel, gboolean sync, void *u_data);
+
+#endif
diff --git a/src/include/mf-dlog.h b/src/include/mf-dlog.h
new file mode 100644 (file)
index 0000000..dc002e6
--- /dev/null
@@ -0,0 +1,116 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MYFILE_DEBUG_H_
+#define __MYFILE_DEBUG_H_
+
+#include <stdio.h>
+#include <string.h>
+#include "mf-log.h"
+
+#ifdef MYFILE_USE_LOG
+
+#ifdef LOG_TAG
+#undef LOG_TAG
+#endif
+
+#define LOG_TAG                "MYFILES"
+#include <dlog.h>
+#define LOG_COLOR_RED      "\033[31m"
+#define LOG_COLOR_RESET    "\033[0m"
+
+#define MYFILE_TRACE_DEBUG(fmt, arg...) do { LOGD("[%s][%d] "fmt "\n", __FILE__, __LINE__, ##arg); } while (0)
+#define MYFILE_TRACE_ERROR(fmt, arg...) do { LOGE("[%s][%d] "fmt"\n", strrchr(__FILE__, '/')+1, __LINE__, ##arg); } while (0)
+
+#define mf_func_line()                 do { LOGD("[%s][%s][%d] \n", __FILE__, __func__, __LINE__); } while (0)
+#define mf_debug(fmt, args...) do { LOGD("[%s][%d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+
+#define mf_error(fmt, arg...)  LOGE(LOG_COLOR_RED"[ %s : %d]   "fmt""LOG_COLOR_RESET, __FUNCTION__, __LINE__,##arg)
+#define mf_warnig(fmt, args...)        do { LOGW("[%s][%d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define mf_info(fmt, args...)          do { LOGI("[%s][%d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define mf_assert(fmt, args...)        do { LOGE("[ASSERT][%s][%d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+
+#else
+
+#define MYFILE_TRACE_DEBUG(fmt, arg...)        do { printf("%s:%d: " fmt "\n", __FILE__, __LINE__, ##arg); } while (0)
+#define MYFILE_TRACE_ERROR(fmt, arg...)        do { printf("[%s][%d] "fmt"\n", strrchr(__FILE__, '/')+1, __LINE__, ##arg); } while (0)
+
+#define mf_debug(fmt, args...) do { printf("[MYFILE][D][%40s:%4d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define mf_func_line()                 do { printf("[MYFILE][D][%40s:%4d] \n", __FILE__, __func__, __LINE__); } while (0)
+#define mf_error(fmt, args...) do { \
+                                       printf("[MYFILE][E][%40s:%4d] "fmt"\n", __func__, __LINE__, ##args); \
+                                       MF_LOG_RECORD(fmt,##args); \
+                                  } while (0)
+#define mf_warnig(fmt, args...)        do { printf("[MYFILE][W][%40s:%4d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define mf_info(fmt, args...)  do { printf("[MYFILE][I][%40s:%4d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define mf_assert(fmt, args...)        do { printf("[MYFILE][A][%40s:%4d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+
+#endif
+
+#define mf_retvm_if(expr, val, fmt, arg...) do { \
+                       if (expr) { \
+                               MYFILE_TRACE_ERROR(fmt, ##arg); \
+                               MF_LOG_RECORD(fmt,##arg); \
+                               return (val); \
+                       } \
+               } while (0)
+
+#define mf_retv_if(expr, val) do { \
+                       if (expr) { \
+                               return (val); \
+                       } \
+               } while (0)
+
+
+#define mf_retm_if(expr, fmt, arg...) do { \
+                       if (expr) { \
+                               MYFILE_TRACE_ERROR(fmt, ##arg); \
+                               MF_LOG_RECORD(fmt,##arg); \
+                               return; \
+                       } \
+               } while (0)
+
+#define mf_ret_if(expr, fmt, arg...) do { \
+                       if (expr) { \
+                               MF_LOG_RECORD(fmt,##arg); \
+                               return; \
+                       } \
+               } while (0)
+
+#define MF_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 MF_TRACE_END  do {\
+                                       {\
+                                               LOGD("\n\033[0;35mEXIT FUNCTION: %s. \033[0m\t%s:%d\n", \
+                                               __FUNCTION__, (char *)(strrchr(__FILE__, '/')+1), __LINE__);\
+                                       } \
+                               } while (0) ;
+
+#define MF_CHECK(expr)                                 mf_retm_if(!(expr),"INVALID PARAM RETURN")
+#define MF_CHECK_FALSE(expr)                   mf_retvm_if(!(expr),FALSE,"INVALID PARM RETURN FALSE")
+#define MF_CHECK_VAL(expr, val)                mf_retvm_if(!(expr),val,"INVALID PARM RETURN NULL")
+#define MF_CHECK_NULL(expr)                    mf_retvm_if(!(expr),NULL,"INVALID PARM RETURN NULL")
+
+#endif /* end of __MYFILE_DEBUG_H_ */
diff --git a/src/include/mf-drm.h b/src/include/mf-drm.h
new file mode 100644 (file)
index 0000000..76a0975
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_DRM_H__
+#define __MF_DRM_H__
+
+typedef enum __drm_file_mime_type_e drm_file_mime_type_e;
+enum __drm_file_mime_type_e {
+       MYFILE_DRM_UNKNOW_FILE = 0,
+       MYFILE_DRM_IMAGE_FILE,
+       MYFILE_DRM_RINGTONE_FILE,
+       MYFILE_DRM_VIDEO_FILE,
+       MYFILE_DRM_FILE_MAX
+} ;
+
+int mf_drm_is_converted_fl(char *path);
+int mf_drm_is_drm_file(const char *file_fullpath);
+drm_file_mime_type_e mf_drm_check_drm_mime_type(char *mime_type);
+
+#endif
diff --git a/src/include/mf-fm-svc-wrapper.h b/src/include/mf-fm-svc-wrapper.h
new file mode 100644 (file)
index 0000000..5f59cf4
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_FILEMANAGERSERVICE_WRAPPER_H_
+#define __DEF_MYFILE_FILEMANAGERSERVICE_WRAPPER_H_
+
+#include <stdio.h>
+#include <glib.h>
+#include "mf-main.h"
+#include "mf-conf.h"
+
+#include <drm_client.h>
+#include <drm_client_types.h>
+
+#define MF_TRANSLATE_LENGTH    40
+#define MF_TRANSLATE_OMIT_PART "/.../"
+#define MF_PATH_INFO_MAX_LENGTH_PORTRAIT       35
+#define MF_PATH_INFO_MAX_LENGTH_LANDSCAPE      55
+
+typedef enum _TRANS_OPTION     MF_TRANS_OPTION;
+
+enum _TRANS_OPTION {
+       MF_TRANS_OPTION_NONE = 0,
+       MF_TRANS_OPTION_POPUP,
+       MF_TRANS_OPTION_LABEL,
+       MF_TRANS_OPTION_MAX,
+} ;
+
+/* basis file managing. create/rename/move/copy/rename */
+int mf_fm_svc_wrapper_create_service(void *data, GString *fullpath);
+int mf_fm_svc_wrapper_rename_service(void *data, GString *from_fullpath, GString *to_name);
+
+
+int mf_fm_svc_wrapper_get_file_list(const char *folder_name, Eina_List **dir_list, Eina_List **file_list);
+int mf_fm_svc_wrapper_classify_dir_list(Eina_List *dir_list, Eina_List **default_dir_list, Eina_List **user_dir_list);
+
+char *mf_fm_svc_wrapper_get_root_path_by_tab_label(const char *label);
+/* file information get/set */
+GString *mf_fm_svc_wrapper_get_file_name(GString *path);
+int mf_fm_svc_wrapper_get_location(const char *fullpath);
+unsigned long mf_fm_svc_wrapper_get_free_space(int state);
+gint mf_fm_svc_wrapper_get_folder_foldersystem(GString *path, bool *result);
+int file_createdate_get(GString *path);
+gboolean mf_fm_svc_wrapper_is_dir(GString *path);
+int file_filesize_get(GString *path);
+int file_index_get(GString *path);
+int file_location_get(GString *path);
+bool mf_fm_svc_wrapper_detect_duplication(GString *to);
+GString *mf_fm_svc_wrapper_get_file_parent_path(GString *fullpath);
+int mf_fm_svc_wrapper_file_auto_rename(void *data, GString *fullpath, int file_name_type, GString **filename);
+int file_MMC_status();
+int mf_fm_svc_wrapper_detect_recursion(GString *from, GString *to);
+bool is_file_existing(const char *file_full_path);
+int mf_fm_svc_wrapper_is_root_path(const char *fullpath);
+
+bool get_phone_status(int *value);
+int drm_launch(void *data, const char *path);
+char *mf_fm_svc_wrapper_translate_path(const char *original_path, MF_TRANS_OPTION option);
+gboolean mf_fm_svc_is_mass_storage_on();
+char *mf_fm_svc_path_info_get(const char *original_path);
+char *mf_fm_svc_path_info_translate(char *path_info, int path_info_max_len);
+char *mf_fm_svc_get_file_name(GString *path);
+char *mf_fm_svc_get_file_name_without_ext(const char *name);
+
+#endif
diff --git a/src/include/mf-fo-common.h b/src/include/mf-fo-common.h
new file mode 100644 (file)
index 0000000..ec8ade2
--- /dev/null
@@ -0,0 +1,126 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_FO_COMMON_H_DEF__
+#define __MF_FO_COMMON_H_DEF__
+#include <Ecore.h>
+
+
+#include "mf-request.h"
+#include "mf-fo-debug.h"
+
+#define MYFILE_MAGIC_MAIN_CONTEXT           (0x1983cdaf)
+#define MYFILE_MAGIC_DETAIL_LIST_ITEM       (0x1977abcd)
+#define MYFILE_MAGIC_PIPE_DATA                          (0x0716ffcc)
+
+#define MYFILE_MAGIC                 unsigned int  __magic
+#define MYFILE_MAGIC_SET(d, m)       (d)->__magic = (m)
+#define MYFILE_MAGIC_CHECK(d, m)     ((d) && ((d)->__magic == (m)))
+#define FO_ERROR_CHECK(x)      ((x)&0x000000FF)
+
+#define MF_VISUAL_FOLDER_SIZE 16       /*used only for the progress bar,
+                                       if the file system is different, the folder size is diff, fat is 4k and fat32 is 16k*/
+#define MF_ERR_BUF             256
+
+#define MF_FILE_ERROR_LOG(buf, fmt, arg)    do { \
+                                                       {\
+                                                               if (strerror_r(errno, buf, MF_ERR_BUF) == 0 ) { \
+                                                                       mf_fo_logd(fmt": [%s]  error is [%s] \n", (arg), (buf));        \
+                                                               } else {                                        \
+                                                                       mf_fo_logd(fmt": [%s] \n", (arg));              \
+                                                               }\
+                                                       }\
+                                               } while (0)
+typedef enum _msg_type mf_msg_type;
+
+enum _msg_type {
+       MF_MSG_NONE,
+       MF_MSG_DOING,
+       MF_MSG_SKIP,
+       MF_MSG_SYNC,
+       MF_MSG_REQUEST,
+       MF_MSG_ERROR,
+       MF_MSG_END,
+       MF_MSG_CANCELLED,
+} ;
+
+
+typedef struct __mf_fo_dir_list_info mf_fo_dir_list_info;
+
+struct __mf_fo_dir_list_info {
+       char *ftw_path;
+       unsigned long long size;
+       int type;
+};
+
+
+typedef struct _mf_fo_msg mf_fo_msg;
+
+struct _mf_fo_msg {
+       MYFILE_MAGIC;
+       mf_msg_type msg_type;
+       int error_code;
+       unsigned long long total_size;
+       unsigned long long current_size;
+       unsigned int total_index;
+       unsigned int current_index;
+       const char *current;
+       char *current_real;
+       mf_fo_request *request;
+       Ecore_Pipe *pipe;
+};
+
+typedef void (*mf_msg_callback) (mf_fo_msg *msg, void *data);
+
+enum {
+       MF_FO_ERR_NONE = 0,
+       MF_FO_ERR_PERMISSION = 1,
+       MF_FO_ERR_ARGUMENT = 2,
+       MF_FO_ERR_FAULT = 3,
+       MF_FO_ERR_TYPE = 4,
+       MF_FO_ERR_MAX_OPEN = 5,
+       MF_FO_ERR_SPACE = 6,
+       MF_FO_ERR_RO = 7,
+       MF_FO_ERR_LOOP = 8,
+       MF_FO_ERR_MEM = 9,
+       MF_FO_ERR_NOT_EXIST = 10,
+       MF_FO_ERR_LONG_NAME = 11,
+       MF_FO_ERR_BIG_SIZE = 12,
+       MF_FO_ERR_IO = 13,
+       MF_FO_ERR_UNKNOWN = 254,
+       MF_FO_ERR_MAX = 255,
+};
+
+
+#define MF_FO_ERR_COMMON_CLASS (0x0800)
+#define MF_FO_ERR_SRC_CLASS (0x0400)
+#define MF_FO_ERR_DST_CLASS (0x0200)
+#define MF_FO_ERR_REPORT_CLASS (0x0100)
+
+#define E_IS_SRC(err) ((err)&MF_FO_ERR_SRC_CLASS)
+#define E_IS_DST(err) ((err)&MF_FO_ERR_DST_CLASS)
+#define E_IS_COMMON(err) ((err)&MF_FO_ERR_COMMON_CLASS)
+#define E_IS_REPORTABLE(err) ((err)&MF_FO_ERR_REPORT_CLASS)
+
+#define E_GET_CLASS(err) ((err)&0x0F00)
+#define E_GET_DETAIL(err) ((err)&0x00FF)
+
+#define MF_FO_ERR_SET(x) (((x) & 0x0FFF) | 0xFFFFF000)
+
+#endif
diff --git a/src/include/mf-fo-debug.h b/src/include/mf-fo-debug.h
new file mode 100644 (file)
index 0000000..aa75300
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_FO_DEBUG_H_
+#define __MF_FO_DEBUG_H_
+
+#ifdef MYFILE_USE_LOG
+#include <stdio.h>
+#include <string.h>
+#include <mf-dlog.h>
+#include <mf-log.h>
+
+#define mf_fo_logd(fmt , args...)              do { LOGD("[%s][%d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define mf_fo_loge(fmt , args...)              do {\
+                                                       LOGE("[%s][%d] "fmt"\n", __func__, __LINE__, ##args); \
+                                                       MF_LOG_RECORD(fmt,##args); \
+                                                  } while (0)
+#define mf_fo_logw(fmt , args...)              do { LOGW("[%s][%d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define mf_fo_logi(fmt , args...)              do { LOGI("[%s][%d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define mf_fo_loga(fmt , args...)              do { LOGE("[ASSERT][%s][%d] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define FO_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 FO_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
+#include <sys/syscall.h>
+#include <unistd.h>
+#define mf_fo_logd(fmt , args...)              do { printf("[%ld][D][%20s:%4d] "fmt"\n", syscall(__NR_gettid), __func__, __LINE__, ##args); } while (0)
+#define mf_fo_loge(fmt , args...)              do {\
+                                                       printf("[%ld][E][%20s:%4d] "fmt"\n", syscall(__NR_gettid), __func__, __LINE__, ##args);\
+                                                       MF_LOG_RECORD(fmt,##args); \
+                                                  } while (0)
+#define mf_fo_logw(fmt , args...)              do { printf("[%ld][W][%20s:%4d] "fmt"\n", syscall(__NR_gettid), __func__, __LINE__, ##args); } while (0)
+#define mf_fo_logi(fmt , args...)              do { printf("[%ld][I][%20s:%4d] "fmt"\n", syscall(__NR_gettid), __func__, __LINE__, ##args); } while (0)
+#define mf_fo_loga(fmt , args...)              do { printf("[%ld][A][%20s:%4d] "fmt"\n", syscall(__NR_gettid), __func__, __LINE__, ##args); } while (0)
+
+#endif
+
+
+
+#endif /* end of __MF_FO_DEBUG_H_ */
diff --git a/src/include/mf-fo-internal.h b/src/include/mf-fo-internal.h
new file mode 100644 (file)
index 0000000..58e5e96
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_FO_INTERNAL_H_DEF__
+#define __MF_FO_INTERNAL_H_DEF__
+
+#include <stdbool.h>
+#include <sys/types.h>
+#include "mf-fo-common.h"
+#include "mf-util.h"
+
+typedef void (*_mf_fo_msg_cb) (mf_msg_type msg_type, const char *real, unsigned long long size, int error_code, void *data);
+
+inline bool _mf_fo_check_exist(const char *path);
+char *_mf_fo_get_next_unique_dirname(const char *name, int *errcode);
+char *_mf_fo_get_next_unique_filename(const char *name, int *errcode);
+int _mf_fo_get_total_item_size(const char *item, unsigned long long *size);
+int _mf_fo_get_remain_space(const char *path, unsigned long long *size);
+
+int _mf_fo_errno_to_mferr(int err_no);
+void _mf_fo_free_directory_hierarchies(GSList **glist);
+
+#endif
diff --git a/src/include/mf-fs-util.h b/src/include/mf-fs-util.h
new file mode 100644 (file)
index 0000000..7eb90d7
--- /dev/null
@@ -0,0 +1,414 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 _MYFILE_FILESYSTEM_UTIL_H_
+#define _MYFILE_FILESYSTEM_UTIL_H_
+
+#include <stdio.h>
+#include <stdbool.h>
+#include <string.h>
+#include <stdlib.h>
+#include <dirent.h>
+#include <sys/stat.h>
+#include <unistd.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include <linux/fs.h>
+#include <Eina.h>
+
+#include <unicode/udat.h>
+#include <unicode/ustring.h>
+#include <unicode/uloc.h>
+#include <unicode/ucal.h>
+#include <unicode/udatpg.h>
+#include <unicode/utmscale.h>
+#include <media_content.h>
+
+#include "mf-dlog.h"
+
+/*     File system related value definition    */
+#define MYFILE_FILE_NAME_LEN_MAX       255     /*charactor based, use g_utf8_strlen to check length*/
+#define MYFILE_FILE_PATH_LEN_MAX       4096    /*charactor based, use g_utf8_strlen to check length*/
+#define MYFILE_REPORT_SIZE                     16384
+
+#define MYFILE_FOLDER_SIZE                     0;
+
+/*     File system related String definition   */
+#define PHONE_FOLDER           "/opt/usr/media"
+#define MEMORY_FOLDER          "/opt/storage/sdcard"
+#define PHONE_PARENT           "/opt/usr"
+#define PHONE_NAME             "media"
+#define STORAGE_PARENT         "/opt/storage"
+#define MMC_NAME               "sdcard"
+
+#ifdef MYFILE_USB_OTG
+#define OTG_FOLDER             "/opt/storage/usb"
+#define OTG_NAME               "usb"
+#endif
+
+
+#define DEBUG_FOLDER           "SLP_debug"
+
+#define MYFILE_NAME_PATTERN    "[\\:;*\"<>|?/]"
+
+/*     File system define default folder       */
+
+#define DEFAULT_FOLDER_CAMERA_SHOTS            "Camera shots"
+#define DEFAULT_FOLDER_DOWNLOADS               "Downloads"
+
+#define DEFAULT_FOLDER_IMAGE                   "Images"
+#define SUB_FODER_WALLPAPER                    "Wallpapers"
+
+#define DEFAULT_FOLDER_VIDEO                   "Videos"
+
+#define DEFAULT_FOLDER_MUSIC                   "Music"
+#define SUB_FODER_FM                           "FM radio"
+#define SUB_FODER_VOICE_RECORD                 "Voice recorder"
+
+#define DEFAULT_FOLDER_ALERTS_AND_RINGTONES    "Alerts and ringtones"
+#define SUB_FODER_ALERTS                       "Alerts"
+#define SUB_FODER_RINGTONES                    "Ringtones"
+
+#define DEFAULT_FOLDER_BOOKMARK        "Bookmark"
+#define DEFAULT_FOLDER_RSS     "RSS"
+
+#ifndef ICON_PATH
+#define ICON_PATH "/usr/apps/org.tizen.myfile/res/images"
+#endif
+
+#ifndef DEFAULT_ICON
+#define DEFAULT_ICON ICON_PATH"/myfile_icon_etc.png"
+#endif
+
+#define MF_ICON_FOLDER                 ICON_PATH"/myfile_icon_folder.png"
+#define MF_ICON_FOLDER_OPEN            ICON_PATH"/myfile_icon_folder_open.png"
+#define MF_ICON_IMAGE                  ICON_PATH"/myfile_icon_images.png"
+#define MF_ICON_VIDEO                  ICON_PATH"/myfile_icon_video.png"
+#define MF_ICON_MUSIC                  ICON_PATH"/myfile_icon_music.png"
+#define MF_ICON_SOUND                  ICON_PATH"/myfile_icon_music.png"
+#define MF_ICON_PDF                    ICON_PATH"/myfile_icon_pdf.png"
+#define MF_ICON_DOC                    ICON_PATH"/myfile_icon_word.png"
+#define MF_ICON_PPT                    ICON_PATH"/myfile_icon_ppt.png"
+#define MF_ICON_EXCEL                  ICON_PATH"/myfile_icon_excel.png"
+#define MF_ICON_VOICE                  ICON_PATH"/myfile_icon_music.png"
+#define MF_ICON_HTML                   ICON_PATH"/myfile_icon_html.png"
+#define MF_ICON_FLASH                  ICON_PATH"/myfile_icon_swf.png"
+#define MF_ICON_TXT                    ICON_PATH"/myfile_icon_text.png"
+#define MF_ICON_VCONTACT               ICON_PATH"/myfile_icon_svg.png"
+#define MF_ICON_VCALENDAR              ICON_PATH"/myfile_icon_svg.png"
+#define MF_ICON_VNOTE                  ICON_PATH"/myfile_icon_text.png"
+#define MF_ICON_RSS                    ICON_PATH"/myfile_icon_rss.png"
+#define MF_ICON_JAVA                   ICON_PATH"/myfile_icon_java.png"
+#define MF_ICON_MEMORY_SUB             ICON_PATH"/myfile_icon_mmc_sub.png"
+#define MF_ICON_MUSIC_PLAY             ICON_PATH"/myfile_icon_control_play.png"
+#define MF_ICON_MUSIC_PAUSE            ICON_PATH"/myfile_icon_control_pause.png"
+#define MF_ICON_PHONE                  ICON_PATH"/myfile_icon_phone.png"
+#define MF_ICON_MEMORY                 ICON_PATH"/myfile_icon_mmc.png"
+#define MF_ICON_EXTERNAL_DEVICE                ICON_PATH"/myfile_icon_USB.png"
+#define MF_ICON_VIDEO_PLAY             ICON_PATH"/myfile_icon_video_play.png"
+#define MF_ICON_ENTRY_FOLDER           ICON_PATH"/myfile_icon_entry_folder.png"
+#define MF_ICON_ENTRY_FOLDER_PRESS     ICON_PATH"/myfile_icon_entry_folder_press.png"
+
+
+
+/************************myfile_5shortcut****************************/
+#define MF_ICON_SHORTCUT_LCIR_BOTOM  ICON_PATH"/myfile_icon_shortcut_left.png"
+#define MF_ICON_SHORTCUT_RCIR_BOTOM  ICON_PATH"/myfile_icon_shortcut_right.png"
+#define MF_ICON_SHORTCUT_IMAGE_BOTOM  ICON_PATH"/myfile_icon_shortcut_image.png"
+#define MF_ICON_SHORTCUT_IMAGE_PRESS_BOTOM  ICON_PATH"/myfile_icon_shortcut_image_press.png"
+#define MF_ICON_SHORTCUT_VIDEO_BOTOM ICON_PATH"/myfile_icon_shortcut_video.png"
+#define MF_ICON_SHORTCUT_VIDEO_PRESS_BOTOM ICON_PATH"/myfile_icon_shortcut_video_press.png"
+#define MF_ICON_SHORTCUT_SOUND_BOTOM ICON_PATH"/myfile_icon_shortcut_sound.png"
+#define MF_ICON_SHORTCUT_SOUND_PRESS_BOTOM ICON_PATH"/myfile_icon_shortcut_sound_press.png"
+#define MF_ICON_SHORTCUT_DOCUMENT_BOTOM ICON_PATH"/myfile_icon_shortcut_document.png"
+#define MF_ICON_SHORTCUT_DOCUMENT_PRESS_BOTOM  ICON_PATH"/myfile_icon_shortcut_document_press.png"
+#define MF_ICON_SHORTCUT_OTHERS_BOTOM  ICON_PATH"/myfile_icon_shortcut_others.png"
+#define MF_ICON_SHORTCUT_OTHERS_PRESS_BOTOM  ICON_PATH"/myfile_icon_shortcut_others_press.png"
+/*****************************************************************/
+
+
+#define MF_ICON_THUMBNAIL_EXCEL                ICON_PATH"/myfile_thumbnail_icon_excel.png"
+#define MF_ICON_THUMBNAIL_FOLDER       ICON_PATH"/myfile_thumbnail_icon_folder.png"
+#define MF_ICON_THUMBNAIL_FOLDER_OPEN  ICON_PATH"/myfile_thumbnail_icon_folder_open.png"
+#define MF_ICON_THUMBNAIL_HTML         ICON_PATH"/myfile_thumbnail_icon_html.png"
+#define MF_ICON_THUMBNAIL_MUSIC                ICON_PATH"/myfile_thumbnail_icon_music.png"
+#define MF_ICON_THUMBNAIL_PDF          ICON_PATH"/myfile_thumbnail_icon_pdf.png"
+#define MF_ICON_THUMBNAIL_PPT          ICON_PATH"/myfile_thumbnail_icon_ppt.png"
+#define MF_ICON_THUMBNAIL_RINGTONE     ICON_PATH"/myfile_thumbnail_icon_ring tone.png"
+#define MF_ICON_THUMBNAIL_RSS          ICON_PATH"/myfile_thumbnail_icon_rss.png"
+#define MF_ICON_THUMBNAIL_FLASH                ICON_PATH"/myfile_thumbnail_icon_swf.png"
+#define MF_ICON_THUMBNAIL_TXT          ICON_PATH"/myfile_thumbnail_icon_text.png"
+#define MF_ICON_THUMBNAIL_VIDEO                ICON_PATH"/myfile_thumbnail_icon_video.png"
+#define MF_ICON_THUMBNAIL_DOC          ICON_PATH"/myfile_thumbnail_icon_word.png"
+#define MF_ICON_THUMBNAIL_VIDEO_PLAY   ICON_PATH"/myfile_thumbnail_icon_video_play.png"
+#define MF_ICON_THUMBNAIL_UNKOWN       ICON_PATH"/myfile_thumbnail_icon_unkown.png"
+
+#define MF_ICON_ITEM_PHONE             ICON_PATH"/U01_1st_icon_phone.png"
+#define MF_ICON_ITEM_MMC               ICON_PATH"/U01_1st_icon_memory_card.png"
+#define MF_ICON_ITEM_OTG               ICON_PATH"/U01_1st_icon_external_storage.png"
+#define MF_ICON_ITEM_DB                        ICON_PATH"/U01_1st_icon_dropbox.png"
+
+typedef enum _SORT_OPTION fsSortOption;
+
+enum _SORT_OPTION {
+       MYFILE_SORT_BY_NONE = 0,                 /**< Sort by default */
+       MYFILE_SORT_BY_NAME_A2Z,                 /**< Sort by file name ascending */
+       MYFILE_SORT_BY_SIZE_S2L,                 /**< Sort by file size ascending */
+       MYFILE_SORT_BY_DATE_O2R,                 /**< Sort by file date ascending */
+       MYFILE_SORT_BY_TYPE_A2Z,                                 /**< Sort by file type ascending */
+       MYFILE_SORT_BY_NAME_Z2A,                 /**< Sort by file name descending */
+       MYFILE_SORT_BY_SIZE_L2S,                 /**< Sort by file size descending */
+       MYFILE_SORT_BY_DATE_R2O,                 /**< Sort by file date descending */
+       MYFILE_SORT_BY_TYPE_Z2A,                                 /**< Sort by file type descending */
+       MYFILE_SORT_BY_MAX
+} ;
+
+typedef enum _mf_extension_state_e mf_extension_state_e;
+
+enum _mf_extension_state_e {
+       MF_EXTENSION_NONE = 0,
+       MF_EXTENSION_SHOW,
+       MF_EXTENSION_HIDE,
+       MF_EXTENSION_MAX
+} ;
+
+typedef enum _FILE_TYPE fsFileType;
+
+enum _FILE_TYPE {
+       FILE_TYPE_NONE = 0,
+       FILE_TYPE_DIR,                     /**< Folder category */
+       FILE_TYPE_FILE,                    /**< File category */
+       FILE_TYPE_IMAGE,           /**< Image category */
+       FILE_TYPE_VIDEO,           /**< Video category */
+       FILE_TYPE_MUSIC,           /**< Music category */
+       FILE_TYPE_SOUND,           /**< Sound category */
+       FILE_TYPE_PDF,             /**< Pdf category */
+       FILE_TYPE_DOC,             /**< Word category */
+       FILE_TYPE_PPT,             /**< Powerpoint category */
+       FILE_TYPE_EXCEL,           /**< Excel category */
+       FILE_TYPE_VOICE,           /**< Voice category */
+       FILE_TYPE_HTML,            /**< Html category */
+       FILE_TYPE_FLASH,           /**< Flash category */
+       FILE_TYPE_GAME,            /**< Game category */
+       FILE_TYPE_APP,             /**< Application category */
+       FILE_TYPE_THEME,           /**< Theme category */
+       FILE_TYPE_TXT,             /**< Txt category */
+       FILE_TYPE_VCONTACT,        /**< Vcontact category */
+       FILE_TYPE_VCALENDAR,       /**< Vcalendar category */
+       FILE_TYPE_VNOTE,           /**< Vnote category */
+       FILE_TYPE_VBOOKMARK,       /**< Vbookmark category */
+       FILE_TYPE_VIDEO_PROJECT,   /**< Video editor project category */
+       FILE_TYPE_RADIO_RECORDED,  /**< radio recorded clips category */
+       FILE_TYPE_MOVIE_MAKER,     /**< Movie maker project category */
+       FILE_TYPE_SVG,             /**< Svg category */
+       FILE_TYPE_RSS,             /**< Rss reader file, *.opml */
+       FILE_TYPE_CERTIFICATION,   /**< certification file, *.pem */
+       FILE_TYPE_JAVA,            /**< java file, *.jad, *.jar */
+       FILE_TYPE_WGT,             /**< wrt , *.wgt, *.wgt */
+       FILE_TYPE_DRM,                          /**< drm file , *.dcf */
+       FILE_TYPE_ETC,             /**< Other files category */
+       FILE_TYPE_MAX
+} ;
+
+typedef enum _STORAGE MF_STORAGE;
+
+enum _STORAGE {
+       MYFILE_NONE = 0x00,
+       MYFILE_PHONE = 0x01,
+       MYFILE_MMC = 0x02,
+       MYFILE_OTG = 0x04,
+       MYFILE_MAX = 0xFF
+};
+
+
+typedef enum _SIZE_TYPE MF_SIZE_TYPE;
+enum _SIZE_TYPE {
+       SIZE_BYTE = 0,
+       SIZE_KB,
+       SIZE_MB,
+       SIZE_GB
+};
+
+typedef enum __MF_SORT_BY_PRIORITY_SEQUENCE MF_SORT_BY_PRIORITY_SEQUENCE;
+enum __MF_SORT_BY_PRIORITY_SEQUENCE {
+       MF_SORT_BY_PRIORITY_TYPE_A2Z,
+       MF_SORT_BY_PRIORITY_TYPE_Z2A,
+       MF_SORT_BY_PRIORITY_DATE_O2R,
+       MF_SORT_BY_PRIORITY_DATE_R2O,
+       MF_SORT_BY_PRIORITY_SIZE_S2L,
+       MF_SORT_BY_PRIORITY_SIZE_L2S,
+};
+
+/*     File operation error check options definition           */
+#define        MF_ERROR_CHECK_SRC_ARG_VALID            0x0001
+#define        MF_ERROR_CHECK_DST_ARG_VALID            0x0002
+#define        MF_ERROR_CHECK_SRC_EXIST                        0x0004
+#define        MF_ERROR_CHECK_DST_EXIST                        0x0008
+#define MF_ERROR_CHECK_SRC_PATH_VALID          0x0010
+#define MF_ERROR_CHECK_DST_PATH_VALID          0x0020
+#define        MF_ERROR_CHECK_SRC_PARENT_DIR_EXIST     0x0040
+#define        MF_ERROR_CHECK_DST_PARENT_DIR_EXIST     0x0080
+#define        MF_ERROR_CHECK_DUPLICATED                       0x0100
+
+/*     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_FILE_DELETE_FAIL            (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x03))   /**< exception of delete file */
+#define MYFILE_ERR_FILE_MOVE_FAIL              (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x04))   /**< exception of move file */
+#define MYFILE_ERR_FILE_COPY_FAIL              (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x05))   /**< exception of copy file */
+#define MYFILE_ERR_FILE_WRITE_FAIL             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x06))   /**< exception of read file */
+#define MYFILE_ERR_RENAME_FAIL                 (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x07))    /**< exception of rename file */
+#define MYFILE_ERR_FILE_NOT_FOUND              (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x08))   /**< exception of file doesn't exist*/
+#define MYFILE_ERR_DIR_OPEN_FAIL               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x09))   /**< exception of dir open*/
+#define MYFILE_ERR_DIR_CREATE_FAIL             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0a))   /**< exception of create dir */
+
+/*11-20*/
+#define MYFILE_ERR_DIR_DELETE_FAIL             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0b))   /**< exception of delete dir */
+#define MYFILE_ERR_FILE_OPEN_FAIL              (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0c))    /**< exception of rename dir */
+#define MYFILE_ERR_DIR_COPY_FAIL               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0d))   /**< exception of copy dir */
+#define MYFILE_ERR_DIR_MOVE_FAIL               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0e))   /**< exception of move dir */
+#define MYFILE_ERR_DIR_FULL                    (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x0f))   /**< exception of dir full */
+#define MYFILE_ERR_DIR_TOO_DEEP                        (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x10))   /**< exception of too deep dir */
+#define MYFILE_ERR_DIR_NOT_FOUND               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x11))   /**< exception of dir doesn't exist*/
+#define MYFILE_ERR_INVALID_DIR_NAME            (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x12))   /**< exception of invalid dir name */
+#define MYFILE_ERR_INVALID_DIR_PATH            (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x13))   /**< exception of invalid dir path */
+#define MYFILE_ERR_INVALID_FILE_NAME           (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x14))   /**< exception of invalid file name */
+
+/*21-30*/
+#define MYFILE_ERR_INVALID_FILE_PATH           (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x15))   /**< exception of invalid file path */
+#define MYFILE_ERR_GET_MEMORY_STATUS_FAIL      (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x16))   /**< exception of statfs */
+#define MYFILE_ERR_DUPLICATED_NAME             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x17))    /**< exception of duplicated dir name*/
+#define MYFILE_ERR_SYSTEM_DIR                  (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x18))   /**< exception of operating on system dir.*/
+#define MYFILE_ERR_DIR_RECUR                   (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x19))   /**< exception of copy/move a dir to its child */
+#define MYFILE_ERR_ALLOCATE_MEMORY_FAIL                (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x1a))   /**< exception of memory allocation */
+#define MYFILE_ERR_OUT_OF_RANGE                        (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x1b))
+#define MYFILE_ERR_INVALID_PATH                        (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x1c))    /**< invalid path string */
+#define MYFILE_ERR_ROOT_PATH                   (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x1d))    /**< root path */
+#define MYFILE_ERR_DCM_ENGINE_APPEND           (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x1e))    /**< fail to append dcm data */
+
+/*31-40*/
+#define MYFILE_ERR_NOT_MMF_FILE                        (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x1f))   /**< isn't mmf file */
+#define MYFILE_ERR_SMAF_PERMISSION_DENY                (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x20))   /**< smaf lock prohibits copy/move from mmc to phone */
+#define MYFILE_ERR_DRM_PERMISSION_DENY         (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x21))       /**< can't copy/move drm file because of permission */
+#define MYFILE_ERR_COPY_TO_SRC_DIR             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x22))       /**< can't copy dir to source place*/
+#define MYFILE_ERR_COPY_ROOT_DIR               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x23))       /**< can't copy root dir*/
+#define MYFILE_ERR_COPY_TO_SRC_FILE            (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x24))       /**< can't copy file to source place*/
+#define MYFILE_ERR_MOVE_TO_SRC_DIR             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x25))       /**< can't move dir to source place */
+#define MYFILE_ERR_MOVE_ROOT_DIR               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x26))       /**< can't move root dir */
+#define MYFILE_ERR_MOVE_TO_SRC_FILE            (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x27))       /**< can't move file to source place*/
+#define MYFILE_ERR_MOVE_FILE_USING             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x28))       /**< can't move the file is being used*/
+
+/*41-50*/
+#define MYFILE_ERR_DELETE_ROOT_DIR             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x29))       /**< can't delete root dir */
+#define MYFILE_ERR_DELETE_SYSTEM_DIR           (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x2a))       /**< can't delete system dir */
+#define MYFILE_ERR_RENAME_ROOT_DIR             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x2b))       /**< can't rename root dir */
+#define MYFILE_ERR_RENAME_SYSTEM_DIR           (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x2c))       /**< can't rename system dir */
+#define MYFILE_ERR_EXCEED_MAX_LENGTH           (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x2d))       /**< length of file/dir path exceeds maximum length*/
+#define MYFILE_ERR_LOW_MEMORY                  (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x2e))       /**< low memory*/
+#define MYFILE_ERR_UNKNOWN_ERROR               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x2f))       /**< unknow error*/
+#define MYFILE_ERR_WRONG_FILE_TYPE             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x30))       /**< wrong file type */
+#define MYFILE_ERR_FILE_IS_BEING_USED          (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x31))       /**< file is being used */
+#define MYFILE_ERR_SRC_NOT_EXIST               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x32))   /**< source not found */
+
+/*51-60*/
+#define MYFILE_ERR_DST_NOT_EXIST               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x33))   /**< destination not found */
+#define MYFILE_ERR_CREATE_TEMP_FAIL            (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x34))   /**< create temp file failed */
+#define MYFILE_ERR_GET_LOGIC_PATH_FAIL         (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x35))   /**< get logical path failed */
+#define MYFILE_ERR_STORAGE_TYPE_ERROR          (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x36))   /**< storage type error */
+#define MYFILE_ERR_EXT_GET_ERROR               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x37))   /**< get ext type failed */
+#define MYFILE_ERR_GET_PARENT_PATH_FAIL                (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x38))   /**< get parent path failed */
+#define MYFILE_ERR_GET_STAT_FAIL               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x39))   /**< get stat failed */
+#define MYFILE_ERR_GENERATE_NAME_FAIL          (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x3a))   /**< generate name failed */
+#define MYFILE_ERR_GET_CATEGORY_FAIL           (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x3b))   /**< get file category failed */
+#define MYFILE_ERR_GET_VCONF_FAIL              (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x3c))   /**< get vconf value failed */
+
+/*61-70*/
+#define MYFILE_ERR_SETTING_RESET_FAIL          (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x3d))   /**< setting item reset  failed */
+#define MYFILE_ERR_DIR_CLEAR_FAILED            (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x3e))   /**< dir not clearly deleted */
+#define MYFILE_ERR_SETTING_DELETE_FAILED       (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x3f))   /**< delete setting item failed */
+#define MYFILE_ERR_GET_THUMBNAIL_FAILED                (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x40))   /**< get file thumbnail failed */
+#define MYFILE_ERR_CANCEL_PRESSED              (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x41))   /**< cancel pressed while copy/move */
+#define MYFILE_ERR_ACCESS_MODE                 (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x42))   /**< access mode not satisfied */
+#define MYFILE_ERR_FILE_READ_FAIL              (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x43))   /**< exception of read file */
+#define MYFILE_ERR_INVALID_ARG                 (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x44))          /**< argument of function is not valid */
+#define MYFILE_ERR_NO_FREE_SPACE               (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x45))          /**< get free space failed */
+#define MYFILE_ERR_GET_NAVI_FAILED             (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x46))          /**< get navigation bar failed */
+
+/*71-80*/
+#define MYFILE_ERR_STORAGE_INUSE_REMOVED       (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x47))          /**< get navigation bar failed */
+#define MYFILE_ERR_VCONF_GET_FAILED            (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x48))          /**< get vconf value failed */
+
+/*     File system related callback definition */
+typedef int (*myfile_operation_cb) (const char *current_path,
+                                   const char *destination, int copied_size, FILE * fSource, FILE * fDestination, void *data);
+
+typedef struct _FS_NODE_INFO fsNodeInfo;
+
+struct _FS_NODE_INFO {
+       char *path;
+       char *name;
+       UDate date;
+       fsFileType type;
+       char *ext;
+       off_t size;
+};
+
+
+int mf_fs_oper_error(const char *src, const char *dst, int check_option);
+void mf_fs_oper_print_node(fsNodeInfo *pNode);
+/**********                    File Attribute Related                  **********/
+int mf_file_attr_get_file_stat(const char *filename, fsNodeInfo **node);
+
+int mf_file_attr_get_file_category(const char *filepath, fsFileType *category);
+fsFileType mf_file_attr_get_file_type_by_mime(const char *file_path);
+
+int mf_file_attr_is_dir(const char *filepath);
+int mf_file_attr_get_store_type_by_full(const char *filepath, MF_STORAGE *store_type);
+int mf_file_attr_get_file_ext(const char *filepath, char **file_ext);
+int mf_file_attr_is_duplicated_name(const char *dir, const char *name);
+int mf_file_attr_is_valid_name(const char *filename);
+int mf_file_attr_is_right_dir_path(const char *dir_path);
+int mf_file_attr_is_right_file_path(const char *file_path);
+int mf_file_attr_get_parent_path(const char *path, char **parent_path);
+int mf_file_attr_get_logical_path_by_full(const char *full_path, char **path);
+void mf_file_attr_get_file_size_info(char **file_size, fsNodeInfo *pNode);
+
+/**********                    File Operation Related                  **********/
+int mf_fs_oper_read_dir(const char *path, Eina_List **dir_list, Eina_List **file_list);
+void mf_fs_oper_sort_list(Eina_List **list, int sort_opt);
+int mf_fs_oper_create_dir(const char *dir);
+int mf_fs_oper_rename_file(const char *src, const char *dst);
+int mf_file_attr_get_file_icon(const char *file_path, int *error_code, int view_type, const char **thumbnail, media_info_h *media_info);
+const char *mf_file_attr_get_default_icon_by_type(fsFileType ftype);
+const char *mf_file_attr_get_default_thumbnail_by_type(fsFileType ftype);
+int mf_file_attr_get_path_level(const char *fullpath, int *level);
+int mf_file_attr_is_system_dir(char *fullpath, bool *result);
+int mf_file_attr_is_disk_link(const char *fullpath, bool *result);
+fsFileType mf_file_attr_get_file_type(const char *mime);
+
+#endif
diff --git a/src/include/mf-gadget.h b/src/include/mf-gadget.h
new file mode 100644 (file)
index 0000000..e97e1f0
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_GADGET_H
+#define __DEF_MYFILE_GADGET_H
+#include <glib.h>
+
+void create_ug_image(void *data, char *path);
+void create_ug_java(void *data, char *path);
+int create_ug_email(void *data, char *path);
+int create_ug_message(void *data, char *path);
+int create_ug_detail(void *data, char *path);
+int create_ug_password(void *data);
+
+void ug_closed_cb(ui_gadget_h ug, void *priv);
+
+#endif
diff --git a/src/include/mf-gengrid.h b/src/include/mf-gengrid.h
new file mode 100644 (file)
index 0000000..d7b7d1e
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_GENGRID_H
+#define __DEF_MYFILE_GENGRID_H
+
+#include "mf-util.h"
+
+#define MF_LANDSCAPE_GENGRID_ITEM_WIDTH                118
+#define MF_LANDSCAPE_GENGRID_ITEM_HEIGTH       161
+
+#define MF_ICON_SIZE                           (165*MF_SCALE_FACTORY)
+
+
+
+
+#define MF_HD_GENGRID_ITEM_WIDTH               177*MF_SCALE_FACTORY //(int)((8*MF_SCALE_FACTORY)+(164*MF_SCALE_FACTORY)+(8*MF_SCALE_FACTORY))
+
+#define MF_HD_GENGRID_ITEM_HEIGTH              (177 + 64)*MF_SCALE_FACTORY//(int)((18*MF_SCALE_FACTORY)+(164*MF_SCALE_FACTORY)+(72*MF_SCALE_FACTORY))
+
+void mf_gengrid_create_grid_items(void *data, Evas_Object *grid, Eina_List *file_list);
+
+Evas_Object *mf_gengrid_create_grid(Evas_Object *parent);
+Evas_Object *mf_gengrid_create(Evas_Object *parent);
+
+void mf_gengrid_refresh(void *data);
+void mf_gengrid_get_grid_selected_files(Evas_Object *gengrid, Eina_List **list);
+void mf_gengrid_edit_select(void *data, int *count);
+void mf_gengrid_select_all(void *data);
+Evas_Object *mf_gengrid_create_list(void *data, Evas_Object *parent);
+void mf_gengrid_item_select(void *data, Evas_Object *pGengrid, int *file_count, int *dir_count);
+void mf_gengrid_create_list_default_style(Evas_Object *pGengrid, void *data, Eina_List *dir_list,
+                               Eina_List *file_list);
+void mf_gengrid_get_grid_selected_items(Evas_Object *gengrid, Eina_List **list);
+#endif
+
diff --git a/src/include/mf-inotify-handle.h b/src/include/mf-inotify-handle.h
new file mode 100644 (file)
index 0000000..315c41d
--- /dev/null
@@ -0,0 +1,45 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 _MF_INOTIFY_HANDLE_H_
+#define _MF_INOTIFY_HANDLE_H_
+
+typedef enum _mf_inotify_event mf_inotify_event;
+enum _mf_inotify_event {
+       MF_INOTI_NONE = 0,
+       MF_INOTI_CREATE,
+       MF_INOTI_DELETE,
+       MF_INOTI_MODIFY,
+       MF_INOTI_MOVE_OUT,
+       MF_INOTI_MOVE_IN,
+       MF_INOTI_DELETE_SELF,
+       MF_INOTI_MOVE_SELF,
+       MF_INOTI_MAX,
+};
+
+typedef void (*mf_inotify_cb) (mf_inotify_event event, char *name, void *data);
+
+int mf_inotify_handle_init_inotify(void);
+int mf_inotify_handle_add_watch(const char *path, mf_inotify_cb callback, void *user_data);
+int mf_inotify_handle_rm_watch(void);
+void mf_inotify_handle_finalize_inotify(void);
+void mf_inotify_handle_request_handled_send();
+
+#endif
diff --git a/src/include/mf-language-mgr.h b/src/include/mf-language-mgr.h
new file mode 100644 (file)
index 0000000..9fea9da
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_LANGUAGE_CHANGER_H
+#define __MF_LANGUAGE_CHANGER_H
+
+
+#include <Elementary.h>
+
+typedef enum
+{
+       OBJ_TYPE_ELM_OBJECT,            //elm_object_text_set(obj, text)
+       OBJ_TYPE_EDJE_OBJECT,   //edje_object_part_text_set(obj, part, text)
+       OBJ_TYPE_MAX,
+}obj_type;
+
+typedef enum
+{
+       ITEM_TYPE_NULL = 0,
+       ITEM_TYPE_CTRL = 1,
+       ITEM_TYPE_TAB = 2,
+       ITEM_TYPE_CTXPOP = 3,
+       ITEM_TYPE_MAX = 4,
+}item_type;
+
+int mf_language_mgr_create();
+int mf_language_mgr_destroy();
+
+/*part and string_id must be static*/
+void mf_language_mgr_register_object(Evas_Object *obj, obj_type type, const char *part, const char *string_id);
+void mf_language_mgr_register_object_item(Elm_Object_Item *object_item, const char *text_ID, item_type type);
+void mf_language_mgr_unregister_object_item(Elm_Object_Item *object_item);
+void mf_language_mgr_unregister_object_item_by_type(item_type type);
+
+void mf_language_mgr_object_item_text_ID_set(Elm_Object_Item *object_item, const char *text_ID);
+
+
+void mf_language_mgr_register_genlist_item(Elm_Object_Item *item);
+void mf_language_mgr_unregister_genlist_item(Elm_Object_Item *item);
+
+void mf_language_mgr_register_gengrid_item(Elm_Object_Item *item);
+void mf_language_mgr_unregister_gengrid_item(Elm_Object_Item *item);
+
+void mf_language_mgr_update();
+
+#endif
diff --git a/src/include/mf-launch.h b/src/include/mf-launch.h
new file mode 100644 (file)
index 0000000..1c81df5
--- /dev/null
@@ -0,0 +1,44 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_LAUNCH_H_
+#define __DEF_MYFILE_LAUNCH_H_
+
+#include <ui-gadget.h>
+
+
+typedef enum _LOAD_UG_TYPE MF_LOAD_UG_TYPE;
+
+enum _LOAD_UG_TYPE {
+       MF_LOAD_UG_MESSAGE,
+       MF_LOAD_UG_EMAIL,
+       MF_LOAD_UG_BLUETOOTH,
+       MF_LOAD_UG_DETAIL,
+       MF_LOAD_UG_MAX
+};
+
+ui_gadget_h mf_launch_load_ug(void *data, char *path, MF_LOAD_UG_TYPE type, char *file_count);
+ui_gadget_h mf_launch_load_ug_myfile(void *data);
+
+int mf_launch_service(void *data, char *path);
+Eina_Bool mf_launch_myfile_ug_exist(void *data);
+void mf_launch_sns_load(void *data, char *path, MF_LOAD_UG_TYPE type, char *file_count);
+
+#endif
+
diff --git a/src/include/mf-log.h b/src/include/mf-log.h
new file mode 100644 (file)
index 0000000..052712b
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_LOG__
+#define __MF_LOG__
+
+#define MF_LOG_RESULT_FILE "/opt/usr/apps/org.tizen.myfile/data/log"
+#define MF_LOG_FORMAT  "[%s] [%s] {%d} -- %s"
+
+int mf_log_init();
+void mf_log_finalize();
+int mf_log_record(char *filename, const char *function, int line, char *fmt, ...);
+
+
+#ifdef MYFILE_CRITICAL_LOG
+#define MF_LOG_RECORD(fmt, arg...)     do { mf_log_record(__FILE__, __func__, __LINE__, fmt, ##arg); } while (0)
+#else
+#define MF_LOG_RECORD(fmt, arg...)     do { (void)0; }while (0)
+#endif
+
+#endif
diff --git a/src/include/mf-main.h b/src/include/mf-main.h
new file mode 100644 (file)
index 0000000..6e7b440
--- /dev/null
@@ -0,0 +1,419 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_H_
+#define __DEF_MYFILE_H_
+
+#include <Ethumb.h>
+#include <glib.h>
+#include <Ecore.h>
+#include <Ecore_X.h>
+#include <Evas.h>
+#include <stdbool.h>
+#include <media_content.h>
+#include <Elementary.h>
+//#include <media-svc-types.h>
+
+/* for SG */
+#include <ui-gadget.h>
+#include <app.h>
+
+/* for dlog */
+#include "mf-dlog.h"
+#include "mf-util.h"
+#include "mf-search.h"
+#include "mf-copy.h"
+
+#define CTRL_DISABLE_NONE                                      0x0000
+#define CTRL_DISABLE_MOVE                                      0x0001
+#define CTRL_DISABLE_COPY                                      0x0002
+#define CTRL_DISABLE_DELETE                                    0x0004
+#define CTRL_DISABLE_SEND                                      0x0008
+#define CTRL_DISABLE_LIST_BY                                   0x0010
+#define CTRL_DISABLE_CREATE                                    0x0020
+#define CTRL_DISABLE_EDIT                                      0x0040
+#define CTRL_DISABLE_COPY_MOVE                                 0x0080
+#define CTRL_DISABLE_SEARCH                                    0x0100
+#define CTRL_DISABLE_MOVE_HERE                         0x0200
+#define CTRL_DISABLE_COPY_HERE                         0x0400
+#define CTRL_DISABLE_CANCEL                            0x0800
+#define CTRL_DISABLE_MORE                              0x1000
+
+#define CTRL_DISABLE_EDIT_ALL                          (CTRL_DISABLE_DELETE | CTRL_DISABLE_SEND | CTRL_DISABLE_MORE)
+#define CTRL_DISABLE_DEFAULT_SEL                       (CTRL_DISABLE_COPY)
+#define CTRL_DISABLE_NOCONTENT_VIEW                    (CTRL_DISABLE_EDIT | CTRL_DISABLE_SEND)
+#define CTRL_DISABLE_USER_FOLDER_SEL                   (CTRL_DISABLE_DELETE | CTRL_DISABLE_MORE)
+#define CTRL_DISABLE_DEFAULT_ALL                       (CTRL_DISABLE_SEND | CTRL_DISABLE_MORE | CTRL_DISABLE_EDIT | CTRL_DISABLE_SEARCH)
+#define CTRL_DISABLE_OTG_ROOT                          ~CTRL_DISABLE_SEARCH
+#define CTRL_DISABLE_SYSFOLDER_SELECT                  (CTRL_DISABLE_MOVE_HERE)
+#define CTRL_DISABLE_OTG_OPT_ROOT                      (CTRL_DISABLE_MOVE_HERE | CTRL_DISABLE_COPY_HERE | CTRL_DISABLE_CREATE)
+
+
+#define myfile_ret_if(expr) do { \
+       if (expr) { \
+               mf_debug("!!! CHECK ERROR !!! (%s) -> %s() return!!!", #expr, __FUNCTION__); \
+               return; \
+       } \
+} while (0)
+#define myfile_retv_if(expr, val) do { \
+       if (expr) { \
+               mf_debug("!!! CHECK ERROR !!! (%s) -> %s() return !!!", #expr, __FUNCTION__); \
+               return (val); \
+       } \
+} while (0)
+#define myfile_retm_if(expr, fmt, arg...) do { \
+       if (expr) { \
+               mf_debug(fmt, ##arg); \
+               mf_debug("!!! CHECK ERROR !!! (%s) -> %s() return !!!", #expr, __FUNCTION__); \
+               return; \
+       } \
+} while (0)
+#define myfile_retvm_if(expr, val, fmt, arg...) do { \
+       if (expr) { \
+               mf_debug(fmt, ##arg); \
+               mf_debug("!!! CHECK ERROR !!! (%s) -> %s() return !!!", #expr, __FUNCTION__); \
+               return (val); \
+       } \
+} while (0)
+
+/***********   Global Definitions              ***********/
+typedef void (*mfCallBack) (void *, Evas_Object *, void *);
+
+typedef struct _oper_record oper_record;
+
+struct _oper_record {
+       GString *path;
+};
+
+typedef struct _myfileNaviBar myfileNaviBar;
+
+struct _myfileNaviBar {
+       char *pNaviTitle;
+       char *pNaviLabel;       /*indicate which storage is pointed by this navibar*/
+       oper_record pre_operation;
+       char *pCurrentPath;
+       MORE_TYPE pre_more;     /*for tab function only*/
+       bool naviFlagInUse;
+       bool naviFlagEditStart;
+};
+
+typedef struct _mfEditView mfEditView;
+struct _mfEditView {
+       Evas_Object *pBox;
+       Evas_Object *pGenlist;
+       Evas_Object *pGengrid;
+       //Evas_Object *pSelectAllCheckBox;
+       //Evas_Object *pSelectAllLayout;
+       Evas_Object *pPathInfo;
+       Evas_Object *pInfoBox;
+       Eina_Bool bSelectAllChecked;
+       int iTotalCount;
+       int iCheckedCount;
+};
+#ifdef MYFILE_SPLIT_VIEW
+typedef struct __mfSplitData mfSplitData;
+struct __mfSplitData {
+       Evas_Object *pMainLayout;
+       Evas_Object *pPanes;
+
+       Evas_Object *pSplitLeftGenlist;
+       //Evas_Object *pSelectAllLayout;
+       //Evas_Object *pSelectAllCheckBox;
+       Elm_Object_Item *phone_item;
+       Elm_Object_Item *mmc_item;
+       Elm_Object_Item *otg_item;
+       bool bFlagSplitViewCreate;
+       bool bFlagPortraitViewCreate;
+};
+#endif
+
+typedef struct _myfileMainWindow myfileMainWindow;
+struct _myfileMainWindow {
+       /* root window size */
+       int root_w;
+       int root_h;
+       int root_x;
+       int root_y;
+
+       /* graphic data */
+       Evas *evas;
+       Evas_Object *pWindow;
+       Evas_Object *pBackGround;
+       Evas_Object *pConformant;
+       Evas_Object *pMainLayout;
+       Evas_Object *pTabBar;
+       Eina_List *plistNaviBar;
+
+       Evas_Object *pNormalPopup;
+       Evas_Object *pContextPopup;
+       Evas_Object *pEntry;
+       Evas_Object *pEditField;
+       Evas_Object *pBox;
+       Ecore_Event_Handler *event;
+       Ecore_Event_Handler *font_event;
+       Evas_Object *pLabel;
+       Evas_Object *pLabelLayout;
+       Evas_Object *pProgressPopup;
+       Evas_Object *pFinishPopup;
+       Evas_Object *pMmcRemovedPopup;
+       Evas_Object *pProgressLayout;
+       Evas_Object *pOperationNotify;
+       Evas_Object *pSearchEntry;
+       Evas_Object *pSearchLabel;
+
+
+       Evas_Object *pNaviBar;
+       Evas_Object *pNaviLayout;
+       Evas_Object *pNaviLeftBtn;
+       Evas_Object *pNaviCtrlBar;
+       Evas_Object *pNaviSearchBar;
+       Evas_Object *pNaviBox;
+       Evas_Object *pNaviGenlist;
+       Evas_Object *pNaviGengrid;
+       Evas_Object *pNaviPathInfo;
+       Evas_Object *pNaviInfoBox;
+       Evas_Object *pTrayBox;
+
+       Ecore_Timer *pPopupTimer;
+
+#ifdef MYFILE_SPLIT_VIEW
+
+       Evas_Object *pNaviSplitContent;
+#endif
+       Elm_Object_Item *pNaviItem;
+
+#ifdef MYFILE_SPLIT_VIEW
+       mfSplitData   sSplitData;
+#endif
+       mfEditView pEditView;
+};
+
+typedef struct _myfileStatus myfileStatus;
+
+struct _myfileStatus {
+
+       int more;               /** current mode **/
+       int preMore;            /** the mode before operation **/
+       int rotation_type;      /** current rotation type **/
+       int pre_rotate_type;
+       int folder_count;       /** current new created folders count **/
+       int theme_type;         /** current theme type **/
+       int iRadioValue;        /** current the radio box selected item value **/
+       int flagViewType;       /** current view type, List view or Thumbnail view **/
+       int iFolderSortType;    /* for list by operation */
+       int iStorageState;      /** current storage state **/
+       int iCtrlDisableItem;
+       int iNFCState;
+       int iSelectedSortType;
+       int iExtensionState;
+       int view_type;
+       int preViewType;
+
+       Eina_Bool flagRootView;
+       Eina_Bool flagNoContent;
+       Eina_Bool flagFolderSelect;
+       Eina_Bool flagFileSelect;
+       Eina_Bool flagStorageRemoved;
+       Eina_Bool flagNaviPush;
+       Eina_Bool flagIcuInit;
+       Eina_Bool flagLCDLock;          /*lcd lock status*/
+       Eina_Bool flagCtxPopShow;
+       Eina_Bool flagSearchAll;
+       Eina_Bool flagTabbarShow;
+       Eina_Bool flagIME;
+
+       Evas_Object *pRadioGroup;
+       GString *path;          /* current path */
+       char *upper_folder;
+       char *search_filter;
+       int navi_item_selected;
+       char *monitor_path;
+       Elm_Object_Item *pPreNaviItem;
+       /* icu related */
+       UDateTimePatternGenerator *generator;
+       UDateFormat *formatter;
+
+       mf_search_handle search_handler;
+
+#ifdef MYFILE_SPLIT_VIEW
+       bool flagNofiles;
+       bool flagUpperSet;
+       /* rotate related*/
+       bool view_mode_start;
+       bool view_mode_end;
+       int rotation_angle;
+       Ecore_Timer *rotation_timer;
+#endif
+
+#ifdef MYFILE_MOTION_FEATURE
+       void (*doubletab_event_handler)(Evas_Object *data);
+#endif
+       Ecore_Idler *app_init_idler;
+       Ecore_Idler *popup_del_idler;
+       Ecore_Idler *navi_content_idler;
+       Evas_Object *old_content;
+
+       bool b_run_background; /* 20121008 added for fix PLM P121001-0404 temporary */
+
+};
+
+
+typedef struct _myfileFileOperation myfileFileOperation;
+struct _myfileFileOperation {
+       /* to rename */
+       GString *to_rename;
+       char *file_name_suffix;
+
+       /*clicked item name */
+       GString *clicked_item;
+
+       /*mmc operation flag */
+       gboolean bmmc_is_removing;
+
+       /*image viewer SG */
+       ui_gadget_h ugImageViewer;
+
+       /*      operation error number  */
+       int error_number;
+       int error_code;
+
+       /* pipe for inotify */
+       void *conn;
+       Ecore_Pipe *sync_pipe;
+       gboolean same_storage;
+
+       /*      refresh type */
+       GString *source;
+       GString *destination;
+       gboolean refresh_type;
+
+       Ecore_Pipe *inotify_pipe;
+
+       /*  progress bar data record    */
+       Evas_Object *progress_bar;
+       Evas_Object *persent_label;
+       Evas_Object *count_label;
+       unsigned int current_count;
+       unsigned long total_file_size;
+       unsigned long finished_size;
+       int progress_cancel;
+
+       /**drm file path*/
+       char *drm_file_path;
+       Eina_List *search_result_list;
+       Eina_List *default_dir_list;
+       Eina_List *user_dir_list;
+       Eina_List *folder_list;
+       Eina_List *file_list;
+       Eina_List *category_list;
+
+
+       mf_cancel *pCancel;
+       mf_fo_request *pRequest;
+       mf_fo_msg *pMessage;
+       GList *pSourceList;
+
+       Elm_Object_Item *pGenlistItem;
+       int iTotalCount;
+       int iRequestType;
+       Ecore_Timer *search_IME_hide_timer;
+       Elm_Object_Item *rename_item;
+
+#ifdef MYFILE_USB_OTG
+       Eina_List *otg_dev_list;
+       Eina_List *otg_dev_removed_list;
+#endif
+       /**job handler**/
+       Eina_List *job_pop_list;        /*to record the job handler for to_content_pop*/
+       Ecore_Job *job_push;    /*to record the job handler for push a new view*/
+       bool iOperationSuccessFlag;     /*used for confirm whether the operation fininsh successfully, not canceled and failed*/
+       char *pOperationMsg;
+       Elm_Object_Item *idle_delete_item;
+};
+
+typedef struct _myfileFileRecord myfileFileRecord;
+
+struct _myfileFileRecord {
+       /* operation property */
+       Eina_List *operation_property;
+
+       /* value saver for bluetooth / protection */
+       Eina_List *value_saver;
+       Eina_List *selected_files;
+       Eina_List *selected_dest_files;
+       Eina_List *backup_file_list;
+};
+
+typedef struct _myfileSharedGadget myfileSharedGadget;
+struct _myfileSharedGadget {
+       int is_password_correct;
+       ui_gadget_h ug;
+       /*SGController  *sg_controller;for privacy lock*/
+};
+
+struct _myfileOtg {
+       Evas_Object *rootpath_box;
+       Evas_Object *rootpath_layout;
+       Elm_Object_Item *rootpath_navi_item;
+};
+typedef struct _myfileOtg myfileOtg;
+
+struct _myfileBundle {
+       service_h recv_service;
+       char *path;
+       char *select_type;
+       char *file_type;
+       char *marked_mode;
+       char *drm_type;
+};
+
+typedef struct _myfileBundle myfileBundle;
+
+struct appdata {
+       myfileMainWindow mf_MainWindow;
+       myfileStatus mf_Status;
+       myfileFileOperation mf_FileOperation;
+       myfileFileRecord mf_FileRecordList;
+       myfileSharedGadget mf_SharedGadget;
+       myfileOtg mf_Otg;
+       myfileBundle mf_Bundle;
+};
+
+
+/*handler list node struct*/
+typedef struct _myfileEcoreHandleNode  myfileEcoreHandleNode;
+struct _myfileEcoreHandleNode {
+       Ecore_Job *handler;
+       char *navi_label;
+};
+
+
+typedef enum _MF_ACTION mfAction;
+
+enum _MF_ACTION {
+       MFACTION_CLICK,
+       MFACTION_FLICK
+};
+
+#define _EDJ(o) elm_layout_edje_get(o)
+Evas_Object *mf_main_load_edj(Evas_Object * parent, const char *file, const char *group);
+#define GET_SYS_STR(str) dgettext("sys_string", str)
+#define GET_STR(str) _(str)
+
+#endif /* __DEF_MYFILE_H_ */
diff --git a/src/include/mf-media-content.h b/src/include/mf-media-content.h
new file mode 100644 (file)
index 0000000..6a033eb
--- /dev/null
@@ -0,0 +1,40 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_MEDIA_CONTENT_H_DEF__
+#define __MF_MEDIA_CONTENT_H_DEF__
+
+typedef struct __mf_condition_s mf_condition_s;
+struct __mf_condition_s {
+       char *cond;                              /*set media type or favorite type, or other query statement*/
+       media_content_collation_e collate_type;  /*collate type*/
+       media_content_order_e sort_type;         /*sort type*/
+       char *sort_keyword;                      /*sort keyword*/
+       int offset;                              /*offset*/
+       int count;                               /*count*/
+       bool with_meta;                          /*whether get image or video info*/
+};
+
+void mf_media_content_scan_file(const char *path);
+void mf_media_content_scan_folder(const char *path);
+int mf_media_content_data_get(void *data, char *condition, bool (*func) (media_info_h media, void *data));
+
+
+#endif
+
diff --git a/src/include/mf-move-internal.h b/src/include/mf-move-internal.h
new file mode 100644 (file)
index 0000000..61b59f1
--- /dev/null
@@ -0,0 +1,39 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_MOVE_INTERNAL_H_DEF__
+#define __MF_MOVE_INTERNAL_H_DEF__
+
+#include <glib.h>
+#include <sys/types.h>
+#include <sys/stat.h>
+#include "mf-cancel.h"
+#include "mf-request.h"
+#include "mf-fo-common.h"
+#include "mf-fo-internal.h"
+
+int _mf_move_move_regfile(const char *src, struct stat *src_statp,
+                         const char *dst, unsigned long buf_size, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data);
+
+int _mf_move_move_directory(const char *src, struct stat *src_statp, const char *dst, mf_cancel *cancel, _mf_fo_msg_cb msg_cb, void *msg_data);
+
+int _mf_move_move_internal(const char *src, const char *dst_dir,
+                          mf_cancel *cancel, mf_req_callback request_callback, _mf_fo_msg_cb msg_callback, void *msg_data);
+
+#endif
diff --git a/src/include/mf-move.h b/src/include/mf-move.h
new file mode 100644 (file)
index 0000000..56db7b9
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_MOVE_H_DEF__
+#define __MF_MOVE_H_DEF__
+
+#include <glib.h>
+#include "mf-cancel.h"
+#include "mf-request.h"
+#include "mf-fo-common.h"
+
+/**
+ * mf_move_move_items:
+ * @item_list: a GList of strings containing item path to move
+ * @dst_dir: destination directory to move
+ * @request_callback: callback to handle duplicated file/directory name,
+ *                              if NULL is set for requset_callback, default action is merge.
+ *                              for detail, see "mf_request.h"
+ * @msg_callback: callback for reporting progress, for detail, see "mf_fo_common.h"
+ * @cancel :  a handle for cancelling move operation, for detail, see "mf_cancel.h"
+ * @sync: a variable for requesting file system sync, if TRUE is set, sync() function is called after move done.
+ * @u_data: user data
+ *
+ * Start move items in given @item_list to @dst_dir, @msg_callback will be called repeatly with @u_data
+ * in certain interval to report current progress.
+ * if duplicated file/directory is found, @request_callback is called with @u_data,
+ * and move operation will be blocked until user's decision is decided.
+ * if someone want to cancel operation, call mf_cancel_do_cancel() with @cancel.
+ * if @sync is set TRUE, sync() function is called after move operation is done to flush out file system cache.
+ * Return value: This function returns zero on success, or negative value.
+ **/
+
+int mf_move_move_items(GList *item_list, const char *dst_dir, mf_cancel *cancel, gboolean sync, void *u_data);
+
+#endif
diff --git a/src/include/mf-otg.h b/src/include/mf-otg.h
new file mode 100644 (file)
index 0000000..8ddee95
--- /dev/null
@@ -0,0 +1,186 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_OTG_H__
+#define __DEF_MF_OTG_H__
+
+#include "mf-main.h"
+#include "mf-fs-util.h"
+#include "mf-resource.h"
+
+enum _mf_otg_list {
+       MF_OTG_LIST_NONE = 0,
+       MF_OTG_LIST_DEV,
+       MF_OTG_LIST_REMOVED,
+       MF_OTG_LIST_MAX
+};
+typedef enum _mf_otg_list mf_otg_list_e;
+
+enum _mf_otg_status {
+       MF_OTG_STATUS_NONE = 0x00,
+       MF_OTG_STATUS_EDIT = 0x01,
+       MF_OTG_STATUS_USING = 0x02
+};
+typedef enum _mf_otg_list mf_otg_status_e;
+
+enum _mf_otg_ex_opt {
+       MF_OTG_OPT_NONE = 0x00,
+       MF_OTG_OPT_REQ_POPUP_DEL = 0x01,
+       MF_OTG_OPT_NOR_POPUP_DEL = 0x02,
+       MF_OTG_OPT_TABBAR_ENABLE = 0x04,
+       MF_OTG_OPT_THEME_RESET = 0x08
+
+};
+typedef enum _mf_otg_ex_opt mf_otg_ex_opt_e;
+
+struct _mf_otg_node {
+       char *name;             /*disk name*/
+       bool flag_using;        /*if the disk is using*/
+       bool flag_editstart;    /*if the edit mode changed from this disk*/
+};
+typedef struct _mf_otg_node mf_otg_node;
+
+/**
+ * mf_otg_list_clean
+ *@data, the appdata which contain the otg lists : device list, removed list
+ *@list_type, a variable for indicate list type: device list, removed list
+ *clean the otg list whicn list_type indicate
+ */
+void mf_otg_list_clean(void *data, mf_otg_list_e list_type);
+
+/**
+ * mf_otg_init
+ *@data, the appdata which contain the otg list
+ *read the otg folder, save the device into the otg list
+ */
+int mf_otg_init(void *data);
+/**
+ * mf_otg_is_in_list
+ *@data, the appdata which contain the otg list
+ *@dev name: the device name
+ *check if the device in the otg list
+ */
+
+bool mf_otg_is_in_list(void *data, const char *dev_name);
+
+/**
+ * mf_otg_insert_node
+ *@data, the appdata which contain the otg list
+ *@name: the new insert device name
+ *insert the new insert device into the otg list
+ */
+
+int mf_otg_insert_node(void *data, const char *name);
+
+/**
+ * mf_otg_delete_node
+ *@data, the appdata which contain the otg list
+ *@name: the remove device name
+ *delete the removed device node from the otg list
+ */
+int mf_otg_delete_node(void *data, const char *name);
+
+/**
+ * mf_otg_list_update
+ *@data, the appdata which contain the otg list
+ *@flag_inc_dec: true: increase devices. false: remove devices
+ *update the otg list
+ */
+int mf_otg_list_update(void *data, bool flag_inc_dec);
+
+/**
+ * mf_otg_is_empty
+ *@data, the appdata which contain the otg list
+ *check if the otg list is empty
+ *
+ */
+bool mf_otg_is_empty(void *data);
+
+/**
+ * mf_otg_get_node_in_use
+ *@data, the appdata which contain the otg list
+ *get the otg device name which is in used currently
+ *
+ */
+char *mf_otg_get_node_in_use(void *data);
+
+/**
+ * mf_otg_set_node_using_flag
+ *@data, the appdata which contain the otg list
+ *@dev_name, the dest device name
+ *@status, ture: in used; false: not in used
+ *set the dest device in used flag
+ *
+ */
+void mf_otg_set_node_using_flag(void *data, char *dev_name, bool status);
+
+/**
+ * mf_otg_clear_removed_device
+ *@data, the appdata which contain the otg list
+ *clear the removed otg list
+ *
+ */
+void mf_otg_clear_removed_device(void *data);
+
+/**
+ * mf_otg_generate_removed_list
+ *@data, the appdata which contain the otg list
+ * get the devices which are not in the otg list now to generate the removed list
+ *
+ */
+void mf_otg_generate_removed_list(void *data);
+
+/**
+ * mf_otg_dev_removed_update
+ *@data, the appdata which contain the otg list
+ *@opt, the option which need to check when update the view
+ *      MF_OTG_OPT_REQ_POPUP_DEL: delete the request popup
+ *      MF_OTG_OPT_NOR_POPUP_DEL: delete the normal popup
+ *      MF_OTG_OPT_TABBAR_ENABLE: set the tar bar enable
+ *      MF_OTG_OPT_THEME_RESET: reset the mainlayout theme
+ *
+ * the refresh operation when remove some devices but not remove all devices
+ *
+ */
+void mf_otg_dev_removed_update(void *data, mf_otg_ex_opt_e opt);
+
+/**
+ * mf_otg_dev_all_removed_update
+ *@data, the appdata which contain the otg list
+ *@opt, the option which need to check when update the view
+ *      MF_OTG_OPT_REQ_POPUP_DEL: delete the request popup
+ *      MF_OTG_OPT_NOR_POPUP_DEL: delete the normal popup
+ *      MF_OTG_OPT_TABBAR_ENABLE: set the tar bar enable
+ *      MF_OTG_OPT_THEME_RESET: reset the mainlayout theme
+ *
+ * the refresh operation when remove all devices
+ *
+ */
+void mf_otg_dev_all_removed_update(void *data, mf_otg_ex_opt_e opt);
+
+/**
+ * mf_otg_finalize
+ *@data, the appdata which contain the otg list
+ *
+ * clear the otg list
+ *
+ */
+void mf_otg_finalize(void *data);
+void mf_otg_set_node_editstart_flag(void *data, char *dev_name, bool status);
+
+#endif
diff --git a/src/include/mf-request.h b/src/include/mf-request.h
new file mode 100644 (file)
index 0000000..8a6c25c
--- /dev/null
@@ -0,0 +1,139 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_REQUEST_H_DEF__
+#define __MF_REQUEST_H_DEF__
+
+#include <glib.h>
+
+/**
+ * mf_request_type:
+ * @MF_REQ_NONE: initial state of #mf_fo_request, if set this one by mf_request_set_result(),
+ *                           undefined action may occurs.
+ * @MF_REQ_MERGE: indicates merge type operation
+ * @MF_REQ_RENAME: indicates rename type operation.
+ *                               to specify new name, use mf_request_set_result_rename()
+ * @MF_REQ_SKIP : indicates skip this item
+ * @MF_REQ_CANCEL : indicates cancel whole operation
+ *
+ * If the #mf_req_callback is called by operator, conductor should decide request type by
+ * mf_request_set_result() or mf_request_set_result_rename().
+ *
+ * Note that the #mf_request_type enumeration may be extended at a later
+ *
+ */
+
+typedef enum _request_type mf_request_type;
+
+enum _request_type {
+       MF_REQ_NONE,
+       MF_REQ_MERGE,
+       MF_REQ_RENAME,
+       MF_REQ_SKIP,
+       MF_REQ_CANCEL,
+};
+
+/**
+ * mf_fo_request:
+ * <structname>mf_fo_request</structname> is an opaque structure whose members
+ * cannot be accessed directly.
+ */
+typedef struct _mf_fo_req mf_fo_request;
+
+/**
+ * mf_req_callback:
+ * @req: the handle of request, use mf_request_set_result() or  mf_request_set_result_rename()
+ * to set detail decision with this handle.
+ * @data: user data.
+ **/
+typedef void (*mf_req_callback) (mf_fo_request *req, void *data);
+
+/**
+ * mf_request_new:
+ * Creates a new #mf_fo_request.
+ * Return value: This function returns a new #mf_fo_request on success, or %NULL.
+ **/
+mf_fo_request *mf_request_new(void);
+
+/**
+ * mf_request_free:
+ * @req : a #mf_fo_request
+ * Release all allocated memory for @req.
+ **/
+void mf_request_free(mf_fo_request *req);
+
+/**
+ * mf_request_set_result:
+ * @req : a #mf_fo_request
+ * @result : a user's decision type #mf_request_type value
+ * Set @result to @req
+ **/
+void mf_request_set_result(mf_fo_request *req, mf_request_type result);
+
+/**
+ * mf_request_set_result_rename:
+ * @req : a #mf_fo_request
+ * @new_name : a user specified new name, string for item name
+  * Set @new_name to @req, and #mf_request_type is selected #MF_REQ_RENAME
+ **/
+void mf_request_set_result_rename(mf_fo_request *req, const char *new_name);
+
+/**
+ * mf_request_set_cond:
+ * @req : a #mf_fo_request
+ * @cond : a #GCond for @req
+ * Set @cond to @req
+ **/
+void mf_request_set_cond(mf_fo_request *req, GCond *cond);
+
+/**
+ * mf_request_set_path:
+ * @req : a #mf_fo_request
+ * @path : a string for duplicated item name.
+ * Set @path to @req
+ **/
+void mf_request_set_path(mf_fo_request *req, const char *path);
+
+
+/**
+ * mf_request_get_result:
+ * @req : a #mf_fo_request
+ * Return value: user selected #mf_request_type.
+ **/
+mf_request_type mf_request_get_result(mf_fo_request *req);
+
+/**
+ * mf_request_get_path:
+ * @req : a #mf_fo_request
+ * Return value: a string for duplicated item name.
+ **/
+const char *mf_request_get_path(mf_fo_request *req);
+
+/**
+ * mf_request_get_path:
+ * @req : a #mf_fo_request
+ * To get item's new name , if user specify new name for duplicated item by mf_request_set_result_rename.
+ * Return value: a user specified new name, string for item name, or NULL
+ **/
+char *mf_request_get_new_name(mf_fo_request *req);
+int mf_request_flag_get(mf_fo_request *req);
+void mf_request_flag_set(mf_fo_request *req, int value);
+void mf_msg_request_handled_send();
+
+#endif
diff --git a/src/include/mf-resource.h b/src/include/mf-resource.h
new file mode 100644 (file)
index 0000000..8e8444e
--- /dev/null
@@ -0,0 +1,171 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_RESOURCE_H_
+#define __DEF_MYFILE_RESOURCE_H_
+
+
+
+/*********************   System strings ***************/
+#define MF_POP_MSG_NFC                 "IDS_COM_BODY_NFC"
+#define MF_POP_MSG_CLOSE               "IDS_COM_POP_CLOSE"
+#define MF_LABEL_SEARCH                        "IDS_COM_BODY_SEARCH"
+#define MF_LABEL_CREATE_FOLDER         "IDS_COM_BODY_CREATE_FOLDER"
+#define MF_LABEL_FOLDER                        "IDS_COM_POP_FOLDER"
+#define MF_LABEL_DONE                  "IDS_COM_SK_DONE"
+#define MF_LABEL_LIST                  "IDS_COM_OPT_LIST"
+#define MF_LABEL_MORE                  "IDS_COM_BODY_MORE"
+#define MF_LABEL_SELECTED              "IDS_COM_BODY_SELECTED"
+#define MF_LABEL_NAME_HA_TO_Z          "IDS_MF_OPT_NAME_HA_TO_Z"
+#define MF_LABEL_NAME_HZ_TO_A          "IDS_MF_OPT_NAME_HZ_TO_A"
+#define MF_LABEL_DATE_HMOST_RECENT     "IDS_MF_OPT_DATE_HMOST_RECENT"
+#define MF_LABEL_DATE_HOLDEST          "IDS_MF_OPT_DATE_HOLDEST"
+#define MF_LABEL_SIZE                  "IDS_COM_BODY_SIZE"
+#define MF_LABEL_TYPE                  "IDS_COM_POP_TYPE"
+#define MF_LABEL_NO_FILES              "IDS_COM_BODY_NO_FILES"
+#define MF_LABEL_SELECT_ALL            "IDS_COM_BODY_SELECT_ALL"
+#define MF_LABEL_PHONE                 "IDS_COM_BODY_PHONE"
+#define MF_LABEL_MMC                   "IDS_COM_BODY_MEMORY_CARD"
+#define MF_POP_MSG_BT                  "IDS_COM_BODY_BLUETOOTH"
+#define MF_POP_MSG_EMAIL               "IDS_COM_BODY_EMAIL"
+#define MF_POP_MSG_MESSAGE             "IDS_COM_BODY_MESSAGE"
+#define LABEL_MYFILE                   "IDS_COM_BODY_MY_FILES"
+#define LABEL_SAVE                     "IDS_COM_SK_SAVE"
+#define LABEL_CANCEL                   "IDS_COM_SK_CANCEL"
+#define LABEL_RENAME                   "IDS_COM_SK_RENAME"
+#define LABEL_DETAIL                   "IDS_COM_BODY_DETAILS"
+#define LABEL_DELETE                   "IDS_COM_BODY_DELETE"
+#define LABEL_SEARCH                   "IDS_COM_SK_SEARCH"
+#define LABEL_SHARE                    "IDS_COM_SK4_SHARE"
+#define LABEL_COPY                     "IDS_COM_BODY_COPY"
+#define LABEL_MOVE                     "IDS_COM_BODY_MOVE"
+#define MF_BUTTON_LABEL_YES            "IDS_COM_SK_YES"
+#define MF_BUTTON_LABEL_NO             "IDS_COM_SK_NO"
+#define MF_BUTTON_LABEL_OK             "IDS_COM_SK_OK"
+#define MF_BUTTON_LABEL_DEL            "IDS_COM_POP_DELETE_Q"
+#define MF_MSG_COPYING                 "IDS_COM_POP_COPYING_ING"
+#define MF_MSG_DELETING                        "IDS_COM_POP_DELETING"
+#define MF_MSG_MOVING                  "IDS_COM_POP_MOVING"
+#define MF_MSG_COPY_SCCESS             "IDS_COM_POP_COPIED_P"
+#define MF_MSG_MOVE_SUCCESS            "IDS_COM_POP_MOVED"
+#define MF_MSG_DELETE_SUCCESS          "IDS_COM_POP_DELETED"
+#define MF_MSG_MOVE_FAILED             "IDS_COM_POP_MOVING_FAILED"
+#define MF_POP_MSG_WIFI                        "IDS_COM_OPT1_WI_FI_DIRECT"
+#define LABEL_NO_RESULT                        "IDS_COM_BODY_NO_SEARCH_RESULTS"
+#define MF_LABEL_INVALID_CHARACTERS    "IDS_COM_POP_INVALID_CHARACTERS"
+#define MF_LABEL_RETRY                 "IDS_COM_SK_RETRY"
+#define MF_LABEL_REPLACE               "IDS_COM_BODY_REPLACE_ABB"
+#define MF_LABEL_LIST_BY               "IDS_COM_BODY_LIST_BY"
+#define MF_LABEL_EDIT                  "IDS_COM_BODY_EDIT"
+#define MF_LABEL_UNSUPPORT_FILE_TYPE   "IDS_COM_POP_UNSUPPORTED_FILE_TYPE"
+#define MF_LABEL_HOME                  "IDS_COM_BODY_HOME"
+#define MF_LABEL_SUCCESS               "IDS_COM_POP_SUCCESS"
+#define MF_LABEL_FAILED                        "IDS_COM_POP_FAILED"
+#define MF_LABEL_DELETE_FAILED         "IDS_COM_POP_DELETE_FAILED"
+#define MF_LABEL_FILE_NOT_EXIST                "IDS_COM_POP_FILE_NOT_EXIST"
+#define MF_LABEL_NOTHING_SELECTED      "IDS_COM_POP_NOTHING_SELECTED"
+#define MF_LABEL_NO_APP                        "IDS_COM_BODY_NO_APPLICATIONS_CAN_PERFORM_THIS_ACTION"
+#define MF_LABEL_MAX_CHARACTER_REACHED "IDS_COM_POP_MAXIMUM_NUMBER_OF_CHARACTERS_REACHED"
+#define MF_LABEL_FACEBOOK              "IDS_COM_BODY_FACEBOOK"
+#define GL_SHARE_TWITTER               "IDS_COM_BODY_TWITTER"
+#define GL_SHARE_YOUTUBE               "IDS_COM_BODY_YOU_TUBE"
+#ifdef _USE_ENABLE_FLICKR
+#define GL_SHARE_FLICKR                        "IDS_COM_BODY_FLICKR"
+#endif
+#define GL_SHARE_PICASA                        "IDS_COM_BODY_PICASA"
+#define MF_LABEL_BACK                  "IDS_COM_SK_BACK"
+#define MF_LABEL_ADDED                 "IDS_COM_OPT_ADDED"
+#define MF_LABEL_SEARCHING             "IDS_COM_POP_SEARCHING"
+/******************  Local strings ****************/
+
+/**********No string ID  ************/
+#define MF_POPUP_MESSAGE_SEND_FAIL3            "Folder can't be sent"
+#define MF_POPUP_MSG_NAME_INVALID              "Invalid name, retry?"
+#define MF_MSG_ILLEGAL_CHAR                    "Invalid character entered. Try again?"
+#define MF_MSG_NAME_REACH_MAX_LEN              "Length should be less than 255"
+#define MF_MSG_PATH_REACH_MAX_LEN              "Full path length should be less than 4096,Retry?"
+#define MF_MSG_DUP_NAME                                "Duplicated name, retry?"
+#define MF_RENAME_MSG_DUP_NAME                 "Duplicated name"
+#define MF_MSG_OPER_READ_ONLY                  "Operation failed: Read Only Area"
+#define MF_MSG_CREATE_DIR_FAILED               "Create Directory failed"
+#define MF_MSG_EMPTY_FOLDER_NAME               "Folder name can't be empty!Retry?"
+#define MF_MSG_GET_NAME_FAILED                 "Get name failed. try again!"
+#define MF_RENAME_MSG_GET_NAME_FAILED          "Get name failed"
+#define MF_MSG_SET_NAME_DOT                    "Can't set file name as \".\" and \"..\" , Retry?"
+#define MF_MSG_SET_NAME_ALL_SPACE              "Can't set file name as all spaces,Retry?"
+#define MF_MSG_GENERATE_NEW_NAME_FAILED                "Generate new name failed, Retry?"
+#define MF_MSG_UNKNOW_REASON_RENAME_FAILED     "Rename failed with unknown reason, retry?"
+#define MF_MSG_NO_NAME_WARNING                 "Name is empty. Please enter name"
+#define MF_MSG_MOVE_FAILED2                    "Cannot move: The destination folder is the same as the source folder"
+#define MF_MSG_COPY_FAILED1                    "Cannot copy: The destination folder is subfolder of source folder"
+#define MF_MSG_IO_ERR                          "Critical file IO error"
+#define MF_MSG_UNKNOWN_ERR                     "Unknow file IO error"
+#define MF_MSG_BIG_SIZE_ERR                    "File size is too big"
+#define MF_MSG_LONG_NAME_ERR                   "File name is too long"
+#define MF_MSG_ARG_ERR                         "Argument error"
+#define MF_MSG_DEFAULT_ERR                     "Internal error"
+#define MF_MSG_FAULT_ERR                       "Invalid argument pointer"
+#define MF_MSG_FILE_TYPE_ERR                   "File type error"
+#define MF_MSG_MEM_ERR                         "Memory malloc error"
+#define MF_MSG_LOOP_ERR                                "Folder structure is too deep" /* Too many symbolic links were encountered in resolving pathname , the max is 16*/
+#define MF_MSG_RO_ERR                          "Read-only file system"
+#define MF_MSG_MAX_OPEN_ERR                    "Reach the maximum number of openning files"/*The process already has the maximum number of files open.*/
+#define MF_BUTTON_LABEL_RENAME_AUTOMATICALLY   "Rename automatically"
+#define MF_LABEL_A_TO_Z                                "A to Z"
+#define MF_LABEL_Z_TO_A                                "Z to A"
+#define MF_LABEL_MOST_RECENT                   "Most recent"
+#define MF_LABEL_OLDEST                                "Oldest"
+#define MF_LABE_NOT_SUPPORT                    "Not support now"
+/********************  local string ID ************/
+
+#define MF_POPUP_MESSAGE_SEND_FAIL1            "IDS_MF_POP_SEND_FAILED"
+#define MF_POPUP_MESSAGE_SEND_FAIL2            "IDS_MF_POP_DRM_FILE_CANNOT_SEND"
+#define MF_MSG_FOLDER_NUM_MAX                  "IDS_MF_POP_MAXIMUM_FOLDER_REACHED"
+#define MF_MSG_FOLDER_DIR_IN_USE               "IDS_MF_POP_SAME_NAME_ALREADY_IN_USE"
+#define MF_MSG_MEMORY_NOT_ENOUGH               "IDS_MF_POP_NOT_ENOUGH_HEAP_MEMORY"
+
+#define MF_MSG_MOVE_FAILED1                    "IDS_MF_POP_UNABLE_TO_MOVE_DESTINATION_FOLDER_SAME_AS_SOURCE_FOLDER"
+#define MF_MSG_NOT_ENOUGH_SPACE                        "IDS_MF_POP_NOT_ENOUGH_MEMORY_DELETE_SOME_ITEMS"
+#define MF_MSG_COPY_FAILED2                    "IDS_MF_POP_COPYING_FAILED"
+#define MF_MSG_MOVE_FAILED3                    "IDS_MF_POP_MOVING_FAILED"
+#define MF_MSG_DEL_FAILED1                     "IDS_MF_POP_DELETE_FAILED"
+#define MF_MSG_NO_SPACE                                "IDS_MF_BODY_NOT_ENOUGH_MEMORY_IN_PHONE_MEMORY_DELETE_SOME_ITEMS_AND_TRY_AGAIN"
+#define MF_MSG_PERMISSION_ERR                  "IDS_MF_POP_PERMISSION_DENIED"
+#define MF_MSG_COPY_FAILED                     "IDS_MF_POP_COPYING_FAILED"
+#define MF_MSG_RENAME_ILLEGAL_CHAR             "IDS_MF_POP_INVALID_FILE_NAME"
+
+
+#define LABEL_COPY_HERE                                "IDS_MF_POP_PASTE_HERE"
+#define LABEL_MOVE_HERE                                "IDS_MF_OPT_MOVE_HERE"
+#define LABEL_LIST_VIEW                                "IDS_MF_OPT_VIEW_BY_LIST"
+#define MF_LABEL_UPPER                         "IDS_MF_TAB_UP"
+#define MF_LABEL_ASCENDING                     "IDS_MF_POP_ASCENDING"
+#define MF_LABEL_DESCENDING                    "IDS_MF_POP_DESCENDING"
+
+#define LABEL_LIST_DETAIL_VIEW                 "IDS_MF_BODY_LIST_AND_DETAILS_ABB"
+#define LABEL_VIEW_AS                          "IDS_MF_OPT_VIEW_AS"
+#define MF_LABEL_SHOW_EXTENSION                        "IDS_MF_OPT_SHOW_FILE_EXTENSION"
+#define MF_LABEL_OTG                           "IDS_MF_TAB_EXTERNAL_STORAGE"
+#define MF_LABEL_THUMBNAILS                    "IDS_MF_OPT_THUMBNAIL_VIEW"
+#define MF_LABEL_SEARCH_ALL                    "IDS_MF_BUTTON_SEARCH_ALL_FOLDERS"
+#define LABEL_SORT_BY                          "IDS_MF_OPT_SORT_BY"
+#define MF_LABEL_HIDE_EXTENSION                        "IDS_MF_OPT_HIDE_FILE_EXTENSION_ABB"
+#define MF_LABEL_ADD_TO_HOME                   "IDS_MF_BUTTON_ADD_TO_HOME"
+
+#endif
diff --git a/src/include/mf-s-beam.h b/src/include/mf-s-beam.h
new file mode 100644 (file)
index 0000000..abb730f
--- /dev/null
@@ -0,0 +1,43 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_S_BEAM_H__
+#define __MF_S_BEAM_H__
+
+#include "mf-main.h"
+
+typedef void (*Mf_Sbeam_Cb)(void *user_data);
+
+#ifdef __cplusplus
+extern "C" {
+#endif
+
+bool mf_sbeam_init();
+void mf_sbeam_finalize();
+bool mf_sbeam_enable();
+bool mf_sbeam_disable();
+bool mf_sbeam_set_callback(Mf_Sbeam_Cb callback, void *user_data);
+bool mf_sbeam_share_files(Evas_Object *win, Eina_List *file_list);
+
+#ifdef __cplusplus
+}
+#endif
+
+
+#endif /* __MF_S_BEAM_H__ */
+
diff --git a/src/include/mf-search-internal.h b/src/include/mf-search-internal.h
new file mode 100644 (file)
index 0000000..5431569
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 _MF_SEARCH_INTERNAL_H_
+#define _MF_SEARCH_INTERNAL_H_
+
+#include "mf-search.h"
+
+#ifdef MS_USE_DEF_LOG
+
+#include "mf-dlog.h"
+
+#define ms_debug(fmt , args...)  mf_debug
+#define ms_info(fmt , args...)  mf_info
+#define ms_warn(fmt , args...)  mf_warnig
+#define ms_error(fmt , args...)  mf_error
+#define ms_assert(fmt , args...)  mf_assert
+
+#else
+
+
+#ifdef DEBUG_ON
+#define ms_debug(fmt , args...)  do { printf("[%10s:%4d][D] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define ms_info(fmt , args...)  do { printf("[%10s:%4d][I] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define ms_warn(fmt , args...)  do { printf("[%10s:%4d][W] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define ms_error(fmt , args...)  do { printf("[%10s:%4d][E] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#define ms_assert(fmt , args...)  do { printf("[%10s:%4d][A] "fmt"\n", __func__, __LINE__, ##args); } while (0)
+#else
+#define ms_debug(fmt , args...)  do { (void)0; } while (0)
+#define ms_info(fmt , args...)  do { (void)0; } while (0)
+#define ms_warn(fmt , args...)  do { (void)0; } while (0)
+#define ms_error(fmt , args...)  do { (void)0; } while (0)
+#define ms_assert(fmt , args...)  do { (void)0; } while (0)
+#endif
+#endif
+
+/**
+ * Enumerations of search state
+ **/
+
+int _mf_search_init(ms_handle_t **handle);
+int _mf_search_start(ms_handle_t *handle,
+       const char **root_path,
+       unsigned int path_num,
+       const char *needle,
+       mf_search_option option,
+       void *user_data,
+       mf_search_filter_cb func,
+       int category);
+int _mf_search_stop(ms_handle_t *handle);
+void _mf_search_finalize(ms_handle_t **handle);
+
+/*+++++++++++++++++++++++++ UTIL APIs ++++++++++++++++++++++++++++++ */
+
+gchar *_mf_search_result_dir_get(mf_search_result_t *result);
+gchar *_mf_search_result_file_get(mf_search_result_t *result);
+gboolean _mf_search_result_is_end(mf_search_result_t *result);
+gchar *_mf_search_result_current_dir_get(mf_search_result_t *result);
+guint _mf_search_result_total_count_get(mf_search_result_t *result);
+
+#endif
diff --git a/src/include/mf-search.h b/src/include/mf-search.h
new file mode 100644 (file)
index 0000000..076b151
--- /dev/null
@@ -0,0 +1,225 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 _MF_SEARCH_H_
+#define _MF_SEARCH_H_
+
+/*+++++++++++++++++++++++ Definitions and Types +++++++++++++++++++++++*/
+
+/**
+ * Handle type for mf_search
+ **/
+typedef unsigned int mf_search_handle;
+
+/**
+ * Handle type for search result
+ **/
+typedef unsigned int mf_search_result;
+
+typedef int (*mf_search_filter_cb) (const char *);
+
+
+/**
+ * Enumerations of search option
+ **/
+
+typedef enum _mf_search_option mf_search_option;
+
+enum _mf_search_option {
+       MF_SEARCH_OPT_NONE = (1 << 0),
+       MF_SEARCH_OPT_HIDDEN = (1 << 1),
+       MF_SEARCH_OPT_DIR = (1 << 2),
+       MF_SEARCH_OPT_FILE = (1 << 3),
+};
+
+typedef enum _mf_search_pipe_msg_type mf_search_pipe_msg_type;
+enum _mf_search_pipe_msg_type {
+       MF_SEARCH_PIPE_MSG_NONE = 0,
+       MF_SEARCH_PIPE_MSG_ROOT_CHANGE,
+       MF_SEARCH_PIPE_MSG_RESULT_REPORT,
+       MF_SEARCH_PIPE_MSG_FINISHED,
+       MF_SEARCH_PIPE_MSG_MAX,
+};
+
+typedef enum _mf_search_state mf_search_state;
+enum _mf_search_state {
+       MF_SEARCH_STATE_NONE = 0,
+       MF_SEARCH_STATE_INIT,
+       MF_SEARCH_STATE_SEARCH,
+       MF_SEARCH_STATE_MAX,
+};
+
+typedef struct _mf_search_result_t mf_search_result_t;
+struct _mf_search_result_t {
+       GList *dir_list;
+       GList *file_list;
+       gchar *current_dir;
+       guint total_count;
+       gboolean is_end;
+};
+
+typedef struct _ms_args_t ms_args_t;
+struct _ms_args_t {
+       GList *root_path;
+       gchar *needle;
+       mf_search_option option;
+       void *user_data;
+       mf_search_filter_cb func;
+       int category;
+} ;
+
+typedef struct _ms_handle_t ms_handle_t;
+struct _ms_handle_t {
+       mf_search_state state;
+       GMutex *cmd_lock;
+       ms_args_t *args;
+
+       GThread *thread_h;
+       GMutex *thread_mutex;
+       /* critical section */
+       gboolean is_stop;
+       mf_search_result_t *result;
+       /* critical section */
+};
+
+typedef struct _mf_search_pipe_msg mf_search_pipe_msg;
+struct _mf_search_pipe_msg {
+       mf_search_pipe_msg_type mf_sp_msg_type;
+       void *report_result;
+       gchar *current_path;
+};
+
+/**
+ * mf_Search_Cb:
+ * @result: the handle of result, use util APIs to get detail result with this handle.
+ * @user_data: user data specified when installing the function, in mf_search_start()
+ **/
+typedef void (*mf_Search_Cb) (mf_search_pipe_msg_type type, mf_search_result result, void *user_data);
+
+/**
+ * Definition of error code
+ **/
+#define MF_SEARCH_ERROR_NONE           (0)
+#define MF_SEARCH_ERROR_INTERNAL       (-(1))  /* Internal error */
+#define MF_SEARCH_ERROR_INVAL_P                (-(2))  /* Invalid params */
+#define MF_SEARCH_ERROR_INVAL_S                (-(3))  /* Invalid status */
+#define MF_SEARCH_ERROR_ALLOC          (-(4))  /* Memory allocation failed */
+#define MF_SEARCH_ERROR_FS             (-(5))  /* File system error */
+
+/*+++++++++++++++++++++++ APIs +++++++++++++++++++++++*/
+
+/**
+ * mf_search_init:
+ * @handle: the handle of mf_search
+ * Creates a new @handle for search. If success,
+ * #mf_search state is changed from MF_SEARCH_STATE_NONE to MF_SEARCH_STATE_INIT
+ * Return value: This function returns zero on success, or negative value.
+ **/
+int mf_search_init(mf_search_handle *handle);
+
+/**
+ * mf_search_start:
+ * @handle: the handle of mf_search
+ * @root_path: array of the root path for search
+ * @path_num: the number of the root path for search
+ * @needle: the key string for search
+ * @option :  bitfield of mf_search_option flags
+ * @user_data: user data
+ * Start searching in given @root_path with @needle,
+ * every each idle time, @callback will be called with #mf_search_result_t and @user_data.
+ * If success, #mf_search state is changed from MF_SEARCH_STATE_INIT to MF_SEARCH_STATE_SEARCH
+ * Return value: This function returns zero on success, or negative value.
+ **/
+int mf_search_start(mf_search_handle handle,
+                   const char **root_path,
+                   unsigned int path_num,
+                   const char *needle,
+                   mf_search_option option,
+                   void *user_data,
+                   mf_search_filter_cb func,
+                   int category);
+/**
+ * mf_search_stop:
+ * @handle: the handle of mf_search
+ * Stops search
+ * If success, #mf_search state is changed from MF_SEARCH_STATE_SEARCH to MF_SEARCH_STATE_INIT
+ * Return value: This function returns zero on success, or negative value.
+ **/
+int mf_search_stop(mf_search_handle handle);
+
+/**
+ * mf_search_stop:
+ * @handle: the handle of mf_search
+ * Finalizes search @handle
+ * #mf_search state is changed from MF_SEARCH_STATE_INIT to MF_SEARCH_STATE_NONE
+ **/
+void mf_search_finalize(mf_search_handle *handle);
+
+
+/*+++++++++++++++++++++++ UTIL APIs +++++++++++++++++++++++*/
+
+/**
+ * mf_search_result_dir_get:
+ * @result: the handle of search result
+ * Gets one of directory name in given search @result
+ * Return value: a directory name which is a newly-allocated string that must be freed after use
+ * or NULL if no more result for directory.
+ **/
+char *mf_search_result_dir_get(mf_search_result_t *result);
+
+/**
+ * mf_search_result_file_get:
+ * @result: the handle of search result
+ * Gets one of file name given search @result
+ * Return value: a file name which is a newly-allocated string that must be freed after use
+ * or NULL if no more result for directory.
+ **/
+char *mf_search_result_file_get(mf_search_result_t *result);
+
+/**
+ * mf_search_result_current_dir_get:
+ * @result: the handle of search result
+ * Gets current searching directory name in given search @result
+ * Return value: current searching directory name which is a newly-allocated string that must be freed after use
+ * or NULL if fail to get current searching directory name.
+ **/
+char *mf_search_result_current_dir_get(mf_search_result_t *result);
+
+/**
+ * mf_search_result_is_end:
+ * @result: the handle of search result
+ * @is_end : If @result is last result handle, set it to a non-zero value, if not set it to zero.
+ * Tests if given search @result is the last one or not
+ * Return value: This function returns zero on success, or negative value.
+ **/
+int mf_search_result_is_end(mf_search_result_t *result, int *is_end);
+
+/**
+ * mf_search_result_total_count_get:
+ * @result: the handle of search result
+ * @count: the items(which is explored directories and files) count.
+ * Gets current explored items(this is not result count)
+ * Return value: This function returns zero on success, or negative value.
+ **/
+int mf_search_result_total_count_get(mf_search_result_t *result, unsigned int *count);
+
+void mf_search_bar_item_append(void *data, void *user_data);
+
+#endif
diff --git a/src/include/mf-sensor.h b/src/include/mf-sensor.h
new file mode 100644 (file)
index 0000000..f3f9b1c
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_SENSOR_H__
+#define __MF_SENSOR_H__
+
+typedef enum{
+       MF_MOTION_FACEDOWN = 0x01,
+       MF_MOTION_DOUBLETAP,
+}mf_motion_type;
+
+typedef void (*mf_sensor_cb)(unsigned long long timestamp, void *user_data);
+
+int mf_sensor_init(void);
+int mf_sensor_finalize(void);
+int mf_sensor_start(mf_motion_type type);
+int mf_sensor_stop(mf_motion_type type);
+int mf_sensor_set_callback(mf_motion_type type, mf_sensor_cb callback, void *user_data);
+int mf_sensor_unset_callback(mf_motion_type type);
+
+#endif
+
diff --git a/src/include/mf-share.h b/src/include/mf-share.h
new file mode 100644 (file)
index 0000000..9055ec2
--- /dev/null
@@ -0,0 +1,42 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_SHARE_H__
+#define __MF_SHARE_H__
+
+#define SHARE_FILE_MODE_NORMAL         0x01
+#define SHARE_FILE_MODE_IMAGE          0x02
+#define SHARE_FILE_MODE_VIDEO          0x04
+#define SHARE_FILE_MODE_MULTI_IMAGE    0x10
+#define SHARE_FILE_MODE_MULTI_VIDEO    0x20
+#define SHARE_FILE_MODE_OTHERS         0x40
+
+typedef enum __share_mode_e share_mode_e;
+enum __share_mode_e {
+       SHARE_MODE_NORMAL,
+       SHARE_MODE_IMAGE,
+       SHARE_MODE_IMAGE_VIDEO,
+       SHARE_MODE_VIDEO,
+       SHARE_MODE_MULTI_IMAGE,
+       SHARE_MODE_MULTI_VIDEO,
+       SHARE_MODE_MAX
+};
+
+void mf_share_launch_multi_file(void *data);
+int mf_share_mode_get(Eina_List * selected_list);
+
+#endif
diff --git a/src/include/mf-split-view.h b/src/include/mf-split-view.h
new file mode 100644 (file)
index 0000000..118e146
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 __MF_SPLIT_VIEW_H_
+#define __MF_SPLIT_VIEW_H_
+bool mf_split_view_refresh(void *data);
+void mf_split_view_left_genlist_refresh(void *data);
+void mf_split_view_show(void *data);
+void mf_split_view_hide(void *data);
+void mf_split_view_destory(void *data);
+void mf_split_view_init(void *data);
+void mf_split_view_path_info_update(Evas_Object *label, const char *fullpath, Eina_Bool root);
+void mf_split_view_unset_right_content(void *data);
+void mf_split_view_genlist_append(void *data, Evas_Object *pGenlist, GString *fullpath, Elm_Object_Item *parent_item);
+
+#endif
+
diff --git a/src/include/mf-ta.h b/src/include/mf-ta.h
new file mode 100644 (file)
index 0000000..e8bb3d1
--- /dev/null
@@ -0,0 +1,130 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 _MF_TA_H_
+#define _MF_TA_H_
+
+
+#ifdef MYFILE_USE_TA
+
+/* defs. */
+#define MF_TA_MAX_CHECKPOINT   500
+#define MF_TA_MAX_ACCUM                500
+#define MF_TA_BUFF_SIZE                256
+
+typedef struct _mf_ta_checkpoint mf_ta_checkpoint;
+struct _mf_ta_checkpoint {
+       unsigned long timestamp;
+       char *name;
+};
+
+typedef struct _mf_ta_accum_item mf_ta_accum_item;
+struct _mf_ta_accum_item {
+       unsigned long elapsed_accum;
+       unsigned long num_calls;
+       unsigned long elapsed_min;
+       unsigned long elapsed_max;
+       unsigned long first_start;
+       unsigned long last_end;
+
+       char *name;
+
+       unsigned long timestamp;
+       int on_estimate;
+       int num_unpair;
+};
+
+#define MF_TA_SHOW_STDOUT      0
+#define MF_TA_SHOW_STDERR      1
+#define MF_TA_SHOW_FILE        2
+#define MF_TA_RESULT_FILE "/tmp/myfile-ta.log"
+
+
+/* COMMON */
+int mf_ta_init(void);
+int mf_ta_release(void);
+void mf_ta_set_enable(int enable);
+char *mf_ta_fmt(const char *fmt, ...);
+
+
+/* CHECK POINT */
+int mf_ta_add_checkpoint(char *name, int show, char *filename, int line);
+void mf_ta_show_checkpoints(void);
+void mf_ta_show_diff(char *name1, char *name2);
+
+int mf_ta_get_numof_checkpoints();
+unsigned long mf_ta_get_diff(char *name1, char *name2);
+
+/* ACCUM ITEM */
+int mf_ta_accum_item_begin(char *name, int show, char *filename, int line);
+int mf_ta_accum_item_end(char *name, int show, char *filename, int line);
+void mf_ta_show_accum_result(int direction);
+
+/* macro. */
+#define MF_TA_INIT()                           (mf_ta_init())
+#define MF_TA_RELEASE()                                (mf_ta_release())
+#define MF_TA_SET_ENABLE(enable)               (mf_ta_set_enable(enable))
+
+/* checkpoint handling */
+#define MF_TA_ADD_CHECKPOINT(name, show)       (mf_ta_add_checkpoint(name, show, __FILE__, __LINE__))
+#define MF_TA_SHOW_CHECKPOINTS()               (mf_ta_show_checkpoints())
+#define MF_TA_SHOW_DIFF(name1, name2)          (mf_ta_show_diff(name1, name2))
+#define MF_TA_GET_NUMOF_CHECKPOINTS()          (mf_ta_get_numof_checkpoints())
+#define MF_TA_GET_DIFF(name1, name2)           (mf_ta_get_diff(name1, name2))
+
+/* accum item handling */
+#define MF_TA_ACUM_ITEM_BEGIN(name, show)      (mf_ta_accum_item_begin(name, show, __FILE__, __LINE__))
+#define MF_TA_ACUM_ITEM_END(name, show)                (mf_ta_accum_item_end(name, show, __FILE__, __LINE__))
+#define MF_TA_ACUM_ITEM_SHOW_RESULT()          (mf_ta_show_accum_result(MF_TA_SHOW_STDOUT))
+#define MF_TA_ACUM_ITEM_SHOW_RESULT_TO(x)      (mf_ta_show_accum_result(x))
+/*
+#define __mf_ta__(name, x) \
+MF_TA_ACUM_ITEM_BEGIN(name, 0); \
+x \
+MF_TA_ACUM_ITEM_END(name, 0);
+
+*/
+
+#else /*#ifdef MYFILE_USE_TA*/
+
+#define MF_TA_INIT()
+#define MF_TA_RELEASE()
+#define MF_TA_SET_ENABLE(enable)
+
+/* checkpoint handling */
+#define MF_TA_ADD_CHECKPOINT(name, show)
+#define MF_TA_SHOW_CHECKPOINTS()
+#define MF_TA_SHOW_DIFF(name1, name2)
+#define MF_TA_GET_NUMOF_CHECKPOINTS()
+#define MF_TA_GET_DIFF(name1, name2)
+/* #define MF_TA_GET_NAME(idx) */
+
+/* accum item handling */
+#define MF_TA_ACUM_ITEM_BEGIN(name, show)
+#define MF_TA_ACUM_ITEM_END(name, show)
+#define MF_TA_ACUM_ITEM_SHOW_RESULT()
+#define MF_TA_ACUM_ITEM_SHOW_RESULT_TO(x)
+/*
+#define __mf_ta__(name, x)
+*/
+#endif /*#ifdef MYFILE_USE_TA */
+
+#endif
diff --git a/src/include/mf-tray-item.h b/src/include/mf-tray-item.h
new file mode 100644 (file)
index 0000000..a9d69e3
--- /dev/null
@@ -0,0 +1,57 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 _MF_TRAY_H_
+#define _MF_TRAY_H_
+
+#include <Elementary.h>
+
+#include "mf-conf.h"
+#include "mf-fs-util.h"
+
+#define MF_ICON_SHORTCUT_IMAGE                         ICON_PATH"/myfile_icon_shortcut_image.png"
+#define MF_ICON_SHORTCUT_VIDEO                         ICON_PATH"/myfile_icon_shortcut_video.png"
+#define MF_ICON_SHORTCUT_SOUNDS                                ICON_PATH"/myfile_icon_shortcut_sound.png"
+#define MF_ICON_SHORTCUT_DOCUMENT                      ICON_PATH"/myfile_icon_shortcut_document.png"
+#define MF_ICON_SHORTCUT_OTHERS                                ICON_PATH"/myfile_icon_shortcut_others.png"
+
+#define MF_ICON_SHORTCUT_IMAGE_PRESS                   ICON_PATH"/myfile_icon_shortcut_image_press.png"
+#define MF_ICON_SHORTCUT_VIDEO_PRESS                   ICON_PATH"/myfile_icon_shortcut_video_press.png"
+#define MF_ICON_SHORTCUT_SOUNDS_PRESS                  ICON_PATH"/myfile_icon_shortcut_sound_press.png"
+#define MF_ICON_SHORTCUT_DOCUMENT_PRESS                        ICON_PATH"/myfile_icon_shortcut_document_press.png"
+#define MF_ICON_SHORTCUT_OTHERS_PRESS                  ICON_PATH"/myfile_icon_shortcut_others_press.png"
+
+
+#ifdef MYFILE_TRAY_FEATURE
+
+typedef enum __mf_tray_item_category mf_tray_item_category;
+enum __mf_tray_item_category{
+       mf_tray_item_category_none,
+       mf_tray_item_category_image,
+       mf_tray_item_category_video,
+       mf_tray_item_category_sounds,
+       mf_tray_item_category_document,
+       mf_tray_item_category_others,
+       mf_tray_item_category_max
+};
+
+Evas_Object *mf_tray_create(Evas_Object *parent, void *data);
+int mf_tray_item_type(const char *path);
+
+#endif
+
+#endif
diff --git a/src/include/mf-util.h b/src/include/mf-util.h
new file mode 100644 (file)
index 0000000..965dce9
--- /dev/null
@@ -0,0 +1,302 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_UTIL_H_
+#define __DEF_MYFILE_UTIL_H_
+
+#include <sys/time.h>
+#include <stdbool.h>
+
+#include <assert.h>
+#include <stdlib.h>
+#include <app.h>
+#include <Elementary.h>
+#include "mf-fo-common.h"
+#include "mf-fs-util.h"
+
+#define MF_SCALE_FACTORY               elm_config_scale_get()
+#define SAFE_FREE_CHAR(x) do {\
+                                       if ((x) != NULL) {\
+                                               free(x); \
+                                               x = NULL;\
+                                       } \
+                            } while (0)
+
+#define SAFE_FREE_GSTRING(x) do {\
+                                       if ((x) != NULL) {\
+                                               g_string_free(x, TRUE); \
+                                               x = NULL;\
+                                       } \
+                               } while (0)
+
+#define CHAR_CHECK_NULL_GOTO(arg, dest) do {\
+                                               if ((arg) == NULL) {\
+                                                       goto dest;\
+                                               } \
+                                          } while (0)
+
+#define GSTRING_CHECK_NULL_GOTO(arg, dest) do {\
+                                               if ((arg) == NULL || (arg->str) == NULL) {\
+                                                       goto dest;\
+                                               } \
+                                          } while (0)
+
+#define SAFE_TIMER_DEL(x) do {\
+                               if ((x) != NULL) {\
+                                       ecore_timer_del(x); \
+                                       x = NULL;\
+                               } \
+                         } while (0)
+
+#define SAFE_DEL_NAVI_ITEM(x) do {\
+                                       if ((x) != NULL) {\
+                                               elm_object_item_del(x); \
+                                               x = NULL;\
+                                       } \
+                                 } while (0)
+
+#define SAFE_DEL_ECORE_TIMER(timer) do { \
+                                               if (timer) { \
+                                                       ecore_timer_del(timer);\
+                                                       timer = NULL; \
+                                               } \
+                                       } while (0)
+
+#define SAFE_FREE_OBJ(x) do {\
+                                       if ((x) != NULL) {\
+                                               evas_object_del(x); \
+                                               x = NULL;\
+                                       } \
+                            } while (0)
+
+#define SAFE_STRCPY(dest, src) \
+                       do{if(!dest||!src)break;\
+                               strncpy (dest , src, sizeof(dest)-1);\
+                               dest[sizeof(dest)-1] = 0;       }while(0)
+
+#define mf_ecore_idler_del(idler) do { \
+                               if(idler) { \
+                                       ecore_idler_del(idler);\
+                                       idler = NULL; \
+                               } \
+                       } while (0)
+
+#define SAFE_FREE_ECORE_EVENT(event) do { \
+                                               if (event) { \
+                                                       ecore_event_handler_del(event);\
+                                                       event = NULL; \
+                                               } \
+                                       } while (0)
+
+typedef enum _MF_INTERNAL_NAME_ERR MF_INTERNAL_NAME_ERR;
+enum _MF_INTERNAL_NAME_ERR {
+       MF_INTERNAL_FILE_NAME_NULL = 1,
+       MF_INTERNAL_FILE_NAME_EMPTY,
+       MF_INTERNAL_FILE_NAME_IGNORE,
+       MF_INTERNAL_FILE_NAME_CHUG,
+       MF_INTERNAL_FILE_NAME_MAX_LENGTH,
+       MF_INTERNAL_FILE_NAME_INVALID_CHAR,
+};
+
+typedef enum _MF_THEME_TYPE    MF_THEME_TYPE;
+enum _MF_THEME_TYPE {
+       THEME_INVALID = -1,
+       THEME_NBEAT = 0,
+       THEME_NBEAT_BLACK = 1,
+       THEME_ERROR
+};
+
+typedef enum __mf_thumbnail_type mf_thumbnail_type;
+enum __mf_thumbnail_type {
+       MF_THUMBNAIL_TYPE_DEFAULT,
+       MF_THUMBNAIL_TYPE_THUMBNAIL,
+       MF_THUMBNAIL_TYPE_MAX
+};
+
+#define MYFILE_MAGIC_MAIN_CONTEXT           (0x1983cdaf)
+#define MYFILE_MAGIC_DETAIL_LIST_ITEM       (0x1977abcd)
+#define MYFILE_MAGIC_PIPE_DATA                          (0x0716ffcc)
+
+#define MYFILE_FINISH_MMC_INIT_DATA      "db/Apps/FileManager/FinishMmcInitData"
+
+#define MYFILE_MAGIC                 unsigned int  __magic
+#define MYFILE_MAGIC_SET(d, m)       (d)->__magic = (m)
+#define MYFILE_MAGIC_CHECK(d, m)     ((d) && ((d)->__magic == (m)))
+
+#define MYFILE_DBUS_SIGNAL_INTERFACE   "app.fexplorer.dbus.Signal"
+#define MYFILE_DBUS_SIGNAL_PATH                "/app/fexplorer/dbus"
+#define MAX_LEN_VIB_DURATION           0.5
+
+typedef enum _MORE_TYPE MORE_TYPE;
+enum _MORE_TYPE {                      /* softkey / contextual popup */
+       MORE_DEFAULT = 0,
+       MORE_EDIT,
+       MORE_SHARE_EDIT,
+       MORE_CREATE_FOLDER,
+       MORE_DELETE,
+       MORE_IDLE_DELETE,
+       MORE_DATA_COPYING,
+       MORE_DATA_MOVING,
+       MORE_INTERNAL_COPY_MOVE,
+       MORE_INTERNAL_COPY,
+       MORE_INTERNAL_MOVE,
+       MORE_THUMBNAIL_RENAME,
+       MORE_RENAME,
+       MORE_SEARCH,
+       MORE_SENDVIABLUETOOTH,
+       MORE_SENDVIAEMAIL,
+       MORE_SENDVIAMESSAGE,
+       MORE_TYPE_MAX
+};
+
+typedef enum __mf_view_type_e mf_view_type_e;
+enum __mf_view_type_e {
+       mf_view_root = 0,
+       mf_view_root_category,
+       mf_view_normal,
+};
+
+typedef enum _LAUNCH_TYPE LAUNCH_TYPE;
+enum _LAUNCH_TYPE {
+       LAUNCH_TYPE_FORK = 0,
+       LAUNCH_TYPE_FAKE,
+       LAUNCH_TYPE_FAIL,
+       LAUNCH_TYPE_DIR,
+       LAUNCH_TYPE_UNSUPPORT,
+       LAUNCH_TYPE_MAX
+};
+
+
+typedef enum _REPORT_TYPE REPORT_TYPE;
+enum _REPORT_TYPE {
+       MYFILE_REPORT_NONE = 1,
+       MYFILE_REPORT_RECURSION_DETECT,
+       MYFILE_REPORT_BOTH_ARE_SAME_FILE,
+       MYFILE_REPORT_MAX,
+};
+
+typedef enum _MYFILE_FILE_NAME_TYPE MYFILE_FILE_NAME_TYPE;
+enum _MYFILE_FILE_NAME_TYPE {
+       FILE_NAME_WITH_BRACKETS,
+       FILE_NAME_WITH_UNDERLINE,
+       FILE_NAME_NONE,
+};
+
+typedef enum _MYFILE_CONTENT_TYPE MYFILE_CONTENT_TYPE;
+enum _MYFILE_CONTENT_TYPE {
+       MYFILE_TYPE_MIN,
+       MYFILE_TYPE_GSTRING,
+       MYFILE_TYPE_CHAR,
+       MYFILE_TYPE_FSNODE,
+       MYFILE_TYPE_MAX
+};
+
+struct _mtd {
+       char *category;
+       char *key;
+       char *icon_path;
+       char *exe_path;
+       char *param;
+       int is_direct_launch;
+       int need_sort_param;
+       int having_a_thumbnail;
+};
+
+
+typedef enum _MYFILE_VCONF_TYPE MYFILE_VCONF_TYPE;
+enum _MYFILE_VCONF_TYPE {
+       VCONF_TYPE_SORT_TYPE = 0,
+       VCONF_TYPE_TIME_FORMAT,
+       VCONF_TYPE_DATE_FORMAT,
+       VCONF_TYPE_MASS_STORAGE,
+       VCONF_TYPE_VIEW_STYLE,
+       VCONF_TYPE_NFC_ENABLE,
+       VCONF_TYPE_EXTENSION_STATE,
+       VCONF_TYPE_MAX
+};
+
+void mf_callback_warning_popup_cb(void *data, Evas_Object *obj, void *event_info);
+int keydown_cb(void *data, int type, void *event);
+
+void ime_mkdir_callback_cb(void *data);
+void ime_rename_callback_cb(void *data);
+void add_panel_to_softkey(Evas_Object *obj, int mode);
+void create_popup(void *data, char *header, Evas_Smart_Cb func);
+void softkey_cb(void *data, Evas_Object *obj, void *event_info);
+void tab_cb(void *data, Evas_Object *obj, void *event_info);
+int keydown_cb(void *data, int type, void *event);
+int copy_files(char *src, char *dst);
+
+void file_selection_popup_cb(void *data, Evas_Object *obj, void *event_info);
+int set_default_state_as(int state);
+
+bool mf_util_check_forbidden_operation(void *data);
+int mf_util_check_disk_space(void *data);
+
+void operation_abort(void *data);
+void myfile_recovery_after_cancel();
+void myfile_mmc_in_out_cb(void *data);
+
+int mf_util_refresh_screen(void *data);
+int mfScreenReset(void *data);
+int mf_util_is_mmc_on(int *mmc_card);
+int mf_util_is_otg_on(int *otg);
+int mf_util_get_eina_list_len(const Eina_List *list);
+void mf_util_free_eina_list_with_data(Eina_List **list, MYFILE_CONTENT_TYPE type);
+void mf_util_operation_alloc_failed(void *data);
+void mf_util_action_storage_insert(void *data, char *pItemLabel);
+int mf_util_get_vconf_value(MYFILE_VCONF_TYPE type, int *value);
+void mf_util_set_sort_type(int value);
+void mf_util_merge_eina_list_to_glist(const Eina_List *eSource, GList **gSource);
+void mf_util_exception_func(void *data);
+int mf_util_is_valid_name_check(const char *name);
+void mf_util_ex_disk_list_update(void *data);
+long mf_util_character_count_get(const char *original);
+/**ecore_*** handler related**/
+void mf_util_add_to_handler_list(void *data, Ecore_Job *handler, char *label);
+void mf_util_delete_from_handler_list(void *data, char *label, bool flag_del);
+void mf_util_clear_handler_list(void *data);
+char *mf_util_upper_folder_name_get(void *data, GString *fullpath);
+/**icu related**/
+char *mf_util_get_icu_date(fsNodeInfo *pNode);
+int mf_util_icu_init(void *data);
+void mf_util_icu_finalize(void *data);
+char *mf_util_icu_translate(void *data, UDate date);
+void mf_util_set_pm_lock(void *data, Eina_Bool isLock);
+Eina_List *mf_util_get_all_selected(void *data);
+gboolean mf_util_is_file_selected(Eina_List **source, GString *path);
+MF_THEME_TYPE mf_util_get_theme(void);
+void mf_util_sort_the_file_list(void *data);
+int mf_util_generate_file_list(void *data);
+char *mf_util_get_text(const char *ID);
+void mf_util_set_view_style(int value);
+void mf_util_rotate_state_set(void *data, app_device_orientation_e  rotate_mode);
+int mf_util_generate_root_view_file_list(void *data, Eina_List **list, int storage_state);
+void mf_util_set_extension_state(int value);
+const char *mf_util_search_markup_keyword(const char *string, char *searchword, bool *result);
+void mf_util_set_recent_file(char *path);
+Eina_List *mf_util_get_all_selected_items(void *data);
+void mf_util_remove_item_from_list_by_location(Eina_List **list, int location);
+void mf_util_generate_list(Eina_List **list, const char *path, int file_type);
+bool mf_util_is_rotation_lock(void);
+void mf_util_remove_item_from_list_by_name(Eina_List **list, const char *path);
+fsNodeInfo *mf_util_generate_pnode(const char *path, int file_type);
+void mf_util_update_item_from_list_by_name(Eina_List **list, const char *path, char *new_name);
+#endif /* __DEF_MYFILE_UTIL_H_ */
diff --git a/src/include/mf-widget.h b/src/include/mf-widget.h
new file mode 100644 (file)
index 0000000..7b39566
--- /dev/null
@@ -0,0 +1,399 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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_MYFILE_WINSET_H_
+#define __DEF_MYFILE_WENSET_H_
+
+#include <stdio.h>
+#include <assert.h>
+#include <glib.h>
+
+
+#include "mf-conf.h"
+#include "mf-fs-util.h"
+#include "mf-callback.h"
+#include "mf-split-view.h"
+#include "mf-gengrid.h"
+#include "mf-dlog.h"
+#include "mf-resource.h"
+
+
+#define NAVI_MORE_BUTTON_PART          "toolbar_more_btn"
+#define NAVI_BOTTOM_BUTTON_1_PART      "toolbar_button1"
+#define NAVI_BOTTOM_BUTTON_2_PART      "toolbar_button2"
+#define NAVI_BUTTON_STYLE              "naviframe/toolbar/default"
+#define NAVI_BUTTON_EDIT               "naviframe/more/default"
+
+#define CTRL_STYLE_TYPE                "controlbar"
+#define TITLE_LEFT_BTN         "title_left_btn"
+#define TITLE_RIGHT_BTN                "title_right_btn"
+#define TITLE_BTN_STYLE        "elm/button/base/naviframe/title_icon"
+
+/***********   Layout APIs     ***********/
+Evas_Object *mfCreateLayout(Evas_Object *parent, char *label, void(*_back_cb)(void *, Evas_Object *, void *), void *data);
+void mfDeleteLayout(Evas_Object *pLayout);
+
+/***********   TabBar APIs     ***********/
+Evas_Object *mf_tab_bar_create_tab_bar(Evas_Object *parent);
+Elm_Object_Item *mf_tab_bar_append_item(Evas_Object *pTabBar, char *pTabIconPath, char *pTabBarLabel, void *user_data);
+void mf_tab_bar_set_selected_item(Elm_Object_Item *pItem);
+void mf_tab_bar_set_item_view(Evas_Object *parent, Evas_Object *tab_layout, Evas_Object *view);
+void mf_tab_bar_set_item_disabled(Evas_Object *pTabBar, Eina_Bool disable);
+Elm_Object_Item *mf_tab_bar_get_item_by_label(Evas_Object *pTabBar, char *pTabLabel);
+int mf_tab_bar_items_count_get(Evas_Object *pTabBar);
+void mf_tab_bar_items_del(Evas_Object *pTabBar);
+void mf_tab_bar_generate(void *data);
+
+/***********   Control Bar Definitions ***********/
+#define        EDIT_SEG_COUNT  3
+#define        OPER_SEG_COUNT  5
+
+#define MF_CTRL_ICON_NEW_FOLDER_CREATE                         ICON_PATH"/myfile_icon_create_folder.png"
+#define MF_CTRL_ICON_LIST_BY                                   ICON_PATH"/myfile_icon_list_by.png"
+#define MF_CTRL_ICON_EDIT                                      ICON_PATH"/myfile_icon_edit.png"
+#define MF_CTRL_ICON_COPY                                      ICON_PATH"/myfile_icon_copy.png"
+#define MF_CTRL_ICON_MOVE                                      ICON_PATH"/myfile_icon_move.png"
+#define MF_CTRL_ICON_PASTE_HERE                                        ICON_PATH"/myfile_icon_paste_here.png"
+#define MF_CTRL_ICON_MOVE_HERE                                 ICON_PATH"/myfile_icon_move_here.png"
+#define MF_CTRL_ICON_DELETE                                    ICON_PATH"/myfile_icon_delete.png"
+#define MF_CTRL_ICON_SEND                                      ICON_PATH"/myfile_icon_share.png"
+#define MF_CTRL_ICON_STORE_HERE                                        ICON_PATH"/myfile_icon_store_here.png"
+#define MF_CTRL_ICON_CANCEL                                    ICON_PATH"/myfile_icon_cancel.png"
+#define MF_CTRL_ICON_SAVE                                      ICON_PATH"/myfile_icon_done.png"
+#define MF_CTRL_ICON_SEARCH                                    ICON_PATH"/myfile_icon_search.png"
+#define MF_TITLE_ICON_HOME                                     ICON_PATH"/Controlbar/U01_controlbar_cion_home.png"
+#define MF_TITLE_ICON_HOME_PRESS                               ICON_PATH"/Controlbar/U01_controlbar_cion_home_press.png"
+#define MF_TITLE_ICON_UPPER                                    ICON_PATH"/Controlbar/U01_controlbar_cion_up_folder.png"
+#define MF_TITLE_ICON_UPPER_PRESS                              ICON_PATH"/Controlbar/U01_controlbar_cion_up_folder_press.png"
+#define MF_TITLE_ICON_SELECT_ALL                               ICON_PATH"/00_icon_select_all_web.png"
+#define MF_TITLE_ICON_SELECT_ALL_PRESS                         ICON_PATH"/00_icon_select_all_press_web.png"
+#define MF_TITLE_ICON_SELECT_ALL_DIM                           ICON_PATH"/00_icon_select_all_dim_web.png"
+
+typedef enum _eCtrlBarButtonType eCtrlBarButtonType;
+enum _eCtrlBarButtonType {
+       CTRL_BUTTON_NEW_FOLDER_CREATE = 0,
+       CTRL_BUTTON_LIST_BY,
+       CTRL_BUTTON_EDIT,
+       CTRL_BUTTON_COPY,
+       CTRL_BUTTON_MOVE,
+       CTRL_BUTTON_DELETE,
+       CTRL_BUTTON_SEND,
+       CTRL_BUTTON_PASTE_HERE,
+       CTRL_BUTTON_MOVE_HERE,
+       CTRL_BUTTON_CANCEL,
+       CTRL_BUTTON_SAVE,
+       CTRL_BUTTON_COPY_MOVE,
+       CTRL_BUTTON_SEARCH,
+       CTRL_BUTTON_MAX
+};
+
+/***********   Control Bar APIs        ***********/
+Evas_Object *mf_ctrl_bar_create(void *data, Evas_Object *parent);
+void mf_ctrl_bar_item_set_disable(Evas_Object *ctrl_bar, int disable_item, bool disable);
+void mf_ctrl_bar_reset(void *data);
+int mf_ctrl_bar_item_get_disable(Evas_Object *ctrl_bar);
+
+
+/***********   Navigation Bar Definition       ************/
+#define MF_POPUP_TIMEOUT_NORMAL                3
+#define MF_POPUP_TIMEOUT_SHORT         2
+
+typedef enum {
+       NAVI_BAR_MIN = 0,
+       NAVI_BAR_DEFAULT,       /*when MMC is on, show All/Phone/Memory Card together OR when copy/move show phone and mmc*/
+       NAVI_BAR_TITLE,         /*when MMC is off, show "myfile" only*/
+       NAVI_BAR_PATH_WITH_ONE_ACTION,
+       NAVI_BAR_PATH_WITH_TWO_ACTION,
+       NAVI_BAR_MAX
+} eNaviBarStyle;
+
+
+/***********   Navigation Bar API              ************/
+#define MF_NAVI_STYLE_ENABLE   "basic"
+#define MF_NAVI_STYLE_DISABLE  "basic/instant"
+
+typedef enum _MF_NAVIFRAME_ITEM_DEL_TYPE {
+       MF_NAVIFRAME_ITEM_DEL_DIRECTLY,
+       MF_NAVIFRAME_ITEM_DEL_BY_NAVI
+}MF_NAVIFRAME_ITEM_DEL_TYPE;
+
+typedef enum __mf_notify_popup_type {
+       mf_notify_popup_normal,
+       mf_notify_popup_layout
+}mf_notify_popup_type;
+
+typedef enum __mf_navi_btn_type mf_navi_btn_typ;
+enum __mf_navi_btn_type {
+       MF_NAVI_BTN_MORE = 0,
+       MF_NAVI_BTN_SHARE,
+       MF_NAVI_MORE_MAX
+};
+
+
+Evas_Object *mf_navi_bar_create_navi_bar(Evas_Object *parent);
+Evas_Object *mfNaviBarConformGet(void *data);
+void mf_navi_bar_set_ctrl_bar(struct appdata *data);
+Evas_Object *mf_navi_bar_get_content(Evas_Object *pConform);
+void mf_navi_bar_set_style(void *data, eNaviBarStyle navi_style, Evas_Object *NaviContent);
+void mf_navi_bar_set_selected_count_label(void *data, int dir_count, int file_count);
+void mf_navi_bar_create_default_view(void *data);
+void mf_navi_bar_create_edit_view(void *data);
+void mf_navi_bar_create_path_select_view(void *data);
+void mf_navi_bar_create_path_select_view_otg_root(void *data);
+void mf_navi_bar_create_search_view(void *data);
+myfileNaviBar *mf_navi_bar_get_in_use(void *data);
+void mf_navi_bar_object_reset(myfileNaviBar *pNavi_s);
+bool mf_navi_bar_remove_list_item_by_label(void *data, const char *pNaviLabel);
+myfileNaviBar *mf_navi_bar_get_struct_by_label(void *data, const char *pNaviLabel);
+void mf_navi_bar_refresh_recovered_view(void *data, myfileNaviBar * pNaviStruct);
+myfileNaviBar *mf_navi_bar_recover_list(void *data);
+myfileNaviBar *mf_navi_bar_get_edit_start(void *data);
+bool mf_navi_bar_is_navi_empty(void *data, char *label);
+Evas_Object *mf_navi_bar_get_box_end(Evas_Object * pBox);
+void mf_navi_bar_set_upper_item_disable(void *data, bool bFlag);
+void mf_navi_bar_recover_info_box(void *data, myfileNaviBar *pNavi_s);
+void mf_navi_bottom_item_del(Elm_Object_Item **pPreNaviItem);
+Evas_Object *mf_navi_bar_get_edit_genlist(void *data);
+Evas_Object *mf_navi_bar_upper_create(Evas_Object *parent);
+void mf_navi_bar_remove_back_button(Elm_Object_Item *pNaviItem);
+Evas_Object *mf_navi_bar_pathinfo_label_create(Evas_Object *parent, char *pathinfo);
+void mfNaviBarSetContent(void *data, Evas_Object *pLayout, Evas_Object *NaviContent);
+myfileNaviBar *mf_navi_bar_get_navi_from_navilist(Eina_List *navilist, const char *label);
+void mf_navi_bar_transition_finished_cb(void *data, Evas_Object *obj, void *event_info);
+void mf_navi_bar_remove_previous_contents(void *data, Evas_Object *pNaviBar);
+void mf_navi_add_back_button(void *data);
+void mf_navi_bar_del_item_directly(void *data);
+Evas_Object *mf_navi_bar_content_create(void *data);
+void mf_navi_bar_edit_list_update(void *data);
+void mf_navi_bar_reset_panes_main(void *data);
+void mf_navi_bar_create_rename_view(void *data);
+void mf_navi_bar_title_set(void *data);
+Evas_Object *mf_navi_bar_create_header_box(void *data);
+void mf_navi_bar_reset_ctrl_button(void *data);
+void mf_navi_bar_button_set_disable(Elm_Object_Item *navi_it, int disable_item, bool disable);
+int mf_navi_bar_button_get_disable(Elm_Object_Item *navi_it);
+void mf_navi_bar_set_panes_navi_to_main(void *data);
+
+/***********   Content Definition              ************/
+#define INTERVAL_THUMB_UPDATE  0.5
+
+typedef struct {
+       GString *m_ItemName;
+       char *size;
+       char *create_date;
+       char *thumb_path;
+       Eina_Bool m_checked;
+       bool real_thumb_flag;
+       int flagExpand;
+       Evas_Object *pCheckBox;
+       Elm_Object_Item *item;
+       bool unregister_lang_mgr;
+       media_info_h media;
+       struct appdata *ap;
+} mfItemData_s;
+
+typedef enum __eMfViewStyle {
+       MF_VIEW_STYLE_LIST,
+       MF_VIEW_SYTLE_LIST_DETAIL,
+       MF_VIEW_STYLE_THUMBNAIL,
+}eMfViewStyle;
+
+/***********   Content API                     ************/
+void mf_genlist_get_list_selected_files(Evas_Object * pGenlist, Eina_List **list);
+Evas_Object *mf_genlist_create_list(void *data, Evas_Object *parent);
+Evas_Object *mfSearchResultListView(void *data);
+Evas_Object *mf_genlist_create_list_new_folder_style(void *data);
+void mf_genlist_sweep_item_recover(Evas_Object *obj);
+void mf_genlist_create_list_default_style(Evas_Object *pGenlist, void *data, Eina_List *dir_list,
+                                         Eina_List *file_list);
+int mf_util_generate_list_data(const char *path, Eina_List ** default_dir_list, Eina_List ** user_dir_list, Eina_List ** file_list);
+
+void mf_genlist_update_default_view_item_style(void *data);
+void mf_genlist_update_edit_view_item_style(void *data);
+void mf_genlist_clear(Evas_Object *genlist);
+void mf_genlist_rename_done(void *data, Evas_Object *obj, void *event_info);
+#ifdef MYFILE_SPLIT_VIEW
+Elm_Object_Item *mf_genlist_split_root_item_append(void *data, Evas_Object *pGenlist, const char *name);
+void mf_genlist_split_left_genlist_style(void *data);
+void mf_genlist_split_root_items_append(Evas_Object *pGenlist, void *data);
+Elm_Object_Item *mf_genlist_split_left_items_append( void *data, Evas_Object *pGenlist, Elm_Object_Item *parent_item, Eina_List *dir_list);
+#endif
+Evas_Object *mf_genlist_create_list_rename_style(void *data);
+void mf_genlist_create_search_itc();
+void mf_genlist_get_list_selected_items(Evas_Object * pGenlist, Eina_List **list);
+void mf_genlist_gl_sel(void *data, Evas_Object * obj, void *event_info);
+void mf_genlist_create_data(mfItemData_s **m_TempItem, const char *name, void *data);
+
+
+/***********   Popup Definition        ************/
+typedef struct _StorageData_s StorageData_s;
+
+struct _StorageData_s{
+       char *label;
+       int index;
+       bool unregister_lang_mgr;
+       Elm_Object_Item *item;
+       struct appdata *ap;
+} ;
+
+typedef enum {
+       POPMODE_MIN = 0,
+       POPMODE_TEXT,
+       POPMODE_TITLE_TEXT,
+       POPMODE_TEXT_NOT_DISABLED,
+       POPMODE_TEXT_TWO_BTN,
+       POPMODE_TITLE_TEXT_TWO_BTN,
+       POPMODE_TEXT_BTN,
+       POPMODE_TITLE_TEXT_BTN,
+       POPMODE_TITLE_TEXT_THREE_BTN,
+       POPMODE_PROGRESSBAR,
+       POPMODE_TITLE_LIST_BTN,
+       POPMODE_VIEW_AS_LIST,
+       POPMPDE_MAX
+} ePopMode;
+
+typedef enum {
+       ELM_POPUP_NONE,
+       ELM_POPUP_YES,
+       ELM_POPUP_NO,
+       ELM_POPUP_OK,
+       ELM_POPUP_CANCLE,
+       ELM_POPUP_AUTO_RENAME,
+       ELM_POPUP_REPLACE,
+       ELM_POPUP_PHONE,
+       ELM_POPUP_MEMORY,
+       ELM_POPUP_MOVE,
+       ELM_POPUP_DELETE,
+       ELM_POPUP_MAX
+} ePopInfo;
+
+typedef struct _myfilePopupListData {
+       int index;
+       bool unregister_lang_mgr;
+       Elm_Object_Item *item;
+       struct appdata *ap;
+} myfilePopupListData;
+
+
+/***********   Popup API               ************/
+Evas_Object *mf_popup_create_popup(void *data, ePopMode popupMode, char *title, const char *context, const char *first_btn_text, const char *second_btn_text,
+                                  const char *third_btn_text, Evas_Smart_Cb func, void *param);
+Evas_Object *mf_popup_create_pb_popup(void *data, char *context, int file_count, void *func, void *param);
+void mf_popup_indicator_popup(void *data, const char *text);
+/***********   Search Bar API  ************/
+Evas_Object *mfSearchBarCreate(void *data);
+
+/***********RenameView API***********/
+void rename_item_add(mfItemData_s *data);
+void mfTitleStyleSet(void *data, int titleStyle, char *title, char *leftbtn, char *rightbtn);
+void mfTitleSet(void *data, char *title);
+void mfTitleCallBackSet(void *data, int titleCbStyle);
+
+
+/****Create New Folder API ***********/
+void mf_navi_bar_create_new_folder_view(void *data);
+void mfNewFolderNaviBarSetStyle(myfileNaviBar *pNavi_s, Evas_Object *NaviContent);
+
+
+/****Search Related API        ********/
+void mf_search_bar_enter_search_routine(void *data, Evas_Object *obj, void *event_info);
+void mf_search_bar_search_started_callback(void *data, Evas_Object *obj, void *event_info);
+void mf_search_bar_category_search(void *data, int category);
+
+
+
+void __mf_genlist_select_all_layout_mouse_down_cb(void *data, Evas * evas, Evas_Object * obj, void *event_info);
+void __mf_genlist_select_all_check_changed_cb(void *data, Evas_Object * obj, void *event_info);
+Evas_Object *mf_widget_create_select_all_layout(Evas_Object *parent);
+
+void mf_genlist_gl_edit_item_selected(void *data);
+void mf_genlist_gl_selected(void *data, Evas_Object * obj, void *event_info);
+void mf_genlist_gl_mode_sweep_set(void *data, Evas_Object *obj, void *event_info);
+void mf_genlist_gl_mode_sweep_unset(void *data, Evas_Object *obj, void *event_info);
+void mf_genlist_gl_mode_cancel(void *data, Evas_Object * obj, void *event_info);
+void mf_genlist_set_category_list_style();
+
+/************* widget API   **************/
+
+typedef enum __MF_ROTATE_TYPE {
+       MF_ROTATE_PORTRAIT,
+       MF_ROTATE_LANDSCAPE
+}MF_ROTATE_TYPE;
+
+typedef enum __MF_RM_NAVI_ITEM_TYPE {
+       MF_RM_NAVI_ITEM_DIRECTLY,
+       MF_RM_NAVI_ITEM_BY_EFFECT
+}MF_RM_NAVI_ITEM_TYPE;
+
+/*****************  Context POP  *************/
+void mf_context_popup_create_more(void *data, Evas_Object *parent);
+int mousedown_cb( void *data, int type, void *event );
+void mf_context_popup_get_more_position(Evas_Object *obj, int *x, int *y);
+void mf_context_popup_create_share(void *data, int share_mode, Evas_Object *parent);
+void mf_context_popup_create_gengrid(void *data);
+
+myfileNaviBar *mf_widget_phone_storage_init(void *data);
+void mf_widget_refresh_view(void *data);
+void mf_widget_set_main_layout_content(void *data);
+void mf_widget_create(void *data);
+void mf_widget_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h);
+Evas_Object *mf_widget_create_select_all_layout(Evas_Object *parent);
+Evas_Object *mf_widget_create_no_content(Evas_Object *parent);
+Evas_Object *mf_widget_create_check_box(Evas_Object *parent);
+Evas_Object *mf_widget_create_conform(Evas_Object * parent);
+Evas_Object *mf_widget_create_layout(Evas_Object *parent, const char *edj, const char *grp_name);
+Evas_Object *mf_widget_create_box(Evas_Object * parent);
+Evas_Object *mf_widget_create_genlist(Evas_Object *parent);
+Evas_Object *mf_widget_util_create_button(Evas_Object *parent, char *style,
+                                  char *caption, Evas_Object *icon,
+                                  void (*func) (void *, Evas_Object *, void *),
+                                  void *data);
+
+void mf_widget_set_navi_blocking(void * data,Eina_Bool is_locked);
+void mf_widget_unset_main_layout_content(Evas_Object *layout);
+void mf_widget_panes_right_set(Evas_Object *panes, Evas_Object *content);
+Evas_Object *mf_widget_create_editfield(Evas_Object *parent, Evas_Object **pEntry);
+Evas_Object *mf_widget_button_create(Evas_Object *parent, const char *label);
+Evas_Object *mf_widget_create_notify_popup(void *data,
+                                   Evas_Object *parent,
+                                   char *label,
+                                   mf_notify_popup_type type,
+                                   bool time_out,
+                                   void func(void *data, Evas_Object *obj, void *event_info));
+void mf_widget_items_remove(Evas_Object *parent, int storage, int type);
+Evas_Object *mf_widget_unset_part_content(Evas_Object *parent, const char *part);
+
+
+/*************** Widget *********************/
+#ifdef MYFILE_MOTION_FEATURE
+void mf_widget_first_item_bring_in(void *data);
+#endif
+
+void mf_widget_create_entryfield(void *data,
+                          Evas_Object *parent,
+                          void (*changed_cb)(void *data, Evas_Object *obj, void *event_info),
+                          void (*click_cb)(void *data, Evas_Object *obj, void *event_info));
+Evas_Object *mf_widget_create_layout_main(Evas_Object * parent);
+Evas_Object *mf_widget_create_panes(Evas_Object *parent);
+Elm_Object_Item *mf_widget_item_append(Evas_Object *parent, fsNodeInfo *pNode, void *data);
+Evas_Object *mf_widget_get_part_content(Evas_Object *parent, const char *part);
+void mf_widget_item_remove(Evas_Object *parent, const char *path, int type);
+void mf_widget_imf_hide_callback_register(Evas_Object *pConformant, void *data);
+void mf_widget_imf_hide_callback_del(Evas_Object *pConformant);
+
+#endif
diff --git a/src/mf-main.c b/src/mf-main.c
new file mode 100644 (file)
index 0000000..16288f9
--- /dev/null
@@ -0,0 +1,974 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+
+
+#include <stdio.h>
+#include <sys/time.h>
+#include <glib.h>
+#include <vconf.h>
+#include <media_content.h>
+#include <app.h>
+#include <Elementary.h>
+#ifdef MYFILE_MOTION_FEATURE
+#include "mf-sensor.h"
+#endif
+
+
+#include "mf-main.h"
+#include "mf-conf.h"
+#include "mf-dlog.h"
+#include "mf-util.h"
+#include "mf-callback.h"
+#include "mf-widget.h"
+#include "mf-gadget.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-ta.h"
+#include "mf-log.h"
+#include "mf-otg.h"
+#include "mf-launch.h"
+#include "mf-language-mgr.h"
+#include "mf-s-beam.h"
+
+#define MF_B_KEY_PATH "path"
+
+GString *phone_folder_as_param;
+
+static bool __mf_main_create_app(void *data);
+static void __mf_main_terminate_app(void *data);
+static void __mf_main_stop_app(void *data);
+static void __mf_main_resume_app(void *data);
+static void __mf_main_reset_app(service_h service, void *data);
+static void __mf_main_storage_status_get(void *data);
+
+static void __mf_main_data_init(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       /*set state value for create content*/
+       ap->mf_Status.more = MORE_DEFAULT;
+       ap->mf_Status.path = g_string_new(PHONE_FOLDER);
+       ap->mf_SharedGadget.ug = NULL;
+       ap->mf_Status.iStorageState = MYFILE_PHONE;
+       ap->mf_Status.iFolderSortType = MYFILE_SORT_BY_DATE_R2O;
+       ap->mf_Status.flagLCDLock = EINA_FALSE;
+       ap->mf_Status.rotation_type = MF_ROTATE_PORTRAIT;
+       ap->mf_Status.flagNaviPush = EINA_FALSE;
+
+       /* region format related */
+       ap->mf_Status.flagIcuInit = FALSE;
+       ap->mf_Status.generator = NULL;
+       ap->mf_Status.formatter = NULL;
+       ap->mf_Status.flagRootView = EINA_TRUE;
+       ap->mf_Status.flagIME = EINA_TRUE;
+       ap->mf_Status.view_type = mf_view_root;
+       ap->mf_Status.preViewType = mf_view_root;
+       mf_util_get_vconf_value(VCONF_TYPE_NFC_ENABLE, &ap->mf_Status.iNFCState);
+       mf_util_get_vconf_value(VCONF_TYPE_VIEW_STYLE, &ap->mf_Status.flagViewType);
+       mf_util_get_vconf_value(VCONF_TYPE_EXTENSION_STATE, &ap->mf_Status.iExtensionState);
+
+       MF_TRACE_END;
+
+}
+
+/******************************
+** Prototype    : mf_main_load_edj
+** Description  :
+** Input        : Evas_Object *parent
+**                const char *file
+**                const char *group
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+Evas_Object *mf_main_load_edj(Evas_Object * parent, const char *file, const char *group)
+{
+       mf_debug();
+       Evas_Object *eo;
+       int r;
+
+       eo = elm_layout_add(parent);
+       elm_object_focus_set(eo, EINA_FALSE);
+       if (eo) {
+               r = elm_layout_file_set(eo, file, group);
+               if (!r) {
+                       evas_object_del(eo);
+                       return NULL;
+               }
+
+               evas_object_size_hint_weight_set(eo, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       }
+
+       return eo;
+}
+
+#ifdef MYFILE_MOTION_FEATURE
+static void __mf_app_doubletap_cb(unsigned long long timestamp, void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_widget_first_item_bring_in(data);
+}
+#endif
+
+/******************************
+** Prototype    : __mf_main_del_win
+** Description  :
+** Input        : void *data
+**                Evas_Object *obj
+**                void *event
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static void __mf_main_del_win(void *data, Evas_Object * obj, void *event)
+{
+       elm_exit();
+}
+
+/******************************
+** Prototype    : __mf_main_create_win
+** Description  :
+** Input        : const char *name
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static Evas_Object *__mf_main_create_win(const char *name)
+{
+       mf_debug();
+       Evas_Object *eo;
+       int w, h;
+       eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+       elm_object_focus_set(eo, EINA_FALSE);
+       elm_win_autodel_set(eo, 1);
+       if (eo) {
+               elm_win_title_set(eo, name);
+               evas_object_smart_callback_add(eo, "delete,request", __mf_main_del_win, NULL);
+               ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+               evas_object_resize(eo, w, h);
+       }
+       if (eo) {
+               evas_object_show(eo);
+               return eo;
+       } else {
+               return NULL;
+       }
+}
+
+
+static Evas_Object *__mf_main_create_bg(Evas_Object *win)
+{
+       mf_retv_if(win == NULL, NULL);
+       Evas_Object *bg = elm_bg_add(win);
+       elm_object_focus_set(bg, EINA_FALSE);
+
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_win_resize_object_add(win, bg);
+
+       evas_object_show(bg);
+
+       return bg;
+}
+
+
+/******************************
+** Prototype    : __mf_main_capture_idle_img
+** 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_main_check_path_vaild(const char *dir, int *dir_type)
+{
+       mf_retvm_if(dir == NULL, -1, "dir is NULL");
+       mf_retvm_if(dir_type == NULL, -1, "state is NULL");
+
+       if (g_file_test(dir, G_FILE_TEST_EXISTS | G_FILE_TEST_IS_DIR)
+           && strncmp(dir, ".", 1)) {
+               if (strncmp(dir, PHONE_FOLDER, strlen(PHONE_FOLDER)) == 0) {
+                       *dir_type = MYFILE_PHONE;
+               } else if (strncmp(dir, MEMORY_FOLDER, strlen(MEMORY_FOLDER)) == 0) {
+                       *dir_type = MYFILE_MMC;
+#ifdef MYFILE_USB_OTG
+               } else if (strncmp(dir, OTG_FOLDER, strlen(OTG_FOLDER)) == 0){
+                       *dir_type = MYFILE_OTG;
+#endif
+               }else {
+                       *dir_type = MYFILE_NONE;
+               }
+       } else {
+               *dir_type = MYFILE_NONE;
+       }
+       return 0;
+}
+
+static void __mf_main_bundle_parse(service_h service, void *data)
+{
+       MF_TRACE_BEGIN;
+       assert(data);
+
+       struct appdata *ap = (struct appdata *)data;
+
+       service_get_extra_data (service, "path", &ap->mf_Bundle.path);
+       service_get_extra_data (service, "select_type", &ap->mf_Bundle.select_type);
+       service_get_extra_data (service, "file_type", &ap->mf_Bundle.file_type);
+       service_get_extra_data (service, "marked_mode", &ap->mf_Bundle.marked_mode);
+       service_get_extra_data (service, "drm_type", &ap->mf_Bundle.drm_type);
+       MF_TRACE_END;
+}
+
+static void __mf_main_view_create(void *data)
+{
+       MF_TRACE_BEGIN;
+       assert(data);
+       MF_TA_ACUM_ITEM_BEGIN("        mf_main_view_create", 0);
+       struct appdata *ap = (struct appdata *)data;
+       //MF_TA_ACUM_ITEM_END("  create_to_reset", 0);
+
+       //create phone navibar struct
+
+       MF_TA_ACUM_ITEM_BEGIN("    mf_widget_refresh_view", 0);
+       mf_widget_refresh_view(ap);
+       MF_TA_ACUM_ITEM_END("    mf_widget_refresh_view", 0);
+       MF_TA_ACUM_ITEM_END("        mf_main_view_create", 0);
+
+}
+
+Eina_Bool __mf_main_prop_change(void *data, int ev_type, void *ev)
+{
+
+       MF_TRACE_BEGIN;
+       assert(data);
+       Ecore_X_Event_Window_Property *event = ev;
+
+       if (event->win != ecore_x_window_root_first_get())
+               return ECORE_CALLBACK_PASS_ON;
+
+       if (event->atom != ecore_x_atom_get("FONT_TYPE_change")) {
+               return ECORE_CALLBACK_PASS_ON;
+       }
+
+       return ECORE_CALLBACK_PASS_ON;
+}
+
+static Eina_Bool
+__mf_main_app_init_idler_cb(void *data)
+{
+       MF_TRACE_BEGIN;
+       assert(data);
+       struct appdata *ap = (struct appdata *)data;
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_app_init_idler_cb", 0);
+
+
+       SAFE_FREE_ECORE_EVENT(ap->mf_MainWindow.font_event);
+
+       ap->mf_MainWindow.font_event = ecore_event_handler_add(ECORE_X_EVENT_WINDOW_PROPERTY,
+                                                               __mf_main_prop_change,
+                                                               ap);
+
+       SAFE_FREE_ECORE_EVENT(ap->mf_MainWindow.event);
+       ap->mf_MainWindow.event = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN,
+                               (Ecore_Event_Handler_Cb)mousedown_cb, ap);
+
+       //MF_TA_ACUM_ITEM_BEGIN("    mmc callback set", 0);
+       mf_callback_set_mmc_state_cb(ap);
+       //MF_TA_ACUM_ITEM_END("    mmc callback set", 0);
+#ifdef MYFILE_USB_OTG
+       //MF_TA_ACUM_ITEM_BEGIN("    otg callback set", 0);
+       mf_callback_set_otg_state_cb(ap);
+       //MF_TA_ACUM_ITEM_END("    otg callback set", 0);
+#endif
+       ap->mf_Status.app_init_idler = NULL;
+
+       if (mf_sbeam_init()) {
+               mf_sbeam_set_callback(mf_callback_sbeam_cb, ap);
+       }
+
+#ifdef MYFILE_MOTION_FEATURE
+       if(!mf_sensor_init()){
+               if(!mf_sensor_set_callback(MF_MOTION_DOUBLETAP, __mf_app_doubletap_cb, ap)){
+                       mf_sensor_start(MF_MOTION_DOUBLETAP);
+               }
+       }
+       ap->mf_Status.doubletab_event_handler = mf_callback_motion_double_tap;
+#endif
+
+       MF_TA_ACUM_ITEM_END("    __mf_main_app_init_idler_cb", 0);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static int __mf_main_remake_app(service_h service, void *data)
+{
+       MF_TRACE_BEGIN;
+       assert(data);
+       MF_TA_ACUM_ITEM_BEGIN("      mf_main_remake_app", 0);
+       struct appdata *ap = (struct appdata *)data;
+       MF_TA_ACUM_ITEM_BEGIN("      check mass storage state", 0);
+
+       /*if myfile state is not normal,  it is not handled argument*/
+       if (ap->mf_Status.more != MORE_DEFAULT) {
+               mf_warnig("Fail to handle budle, current myfiles stat is %d", ap->mf_Status.more);
+               goto RAISE_WIN;
+       }
+       MF_TA_ACUM_ITEM_END("      check mass storage state", 0);
+       MF_TA_ACUM_ITEM_BEGIN("      __mf_main_view_create", 0);
+
+       __mf_main_view_create(ap);
+       MF_TA_ACUM_ITEM_END("      __mf_main_view_create", 0);
+
+RAISE_WIN:
+
+/**************pre-condition test to launch myfile app******************/
+       MF_TA_ACUM_ITEM_END("      mf_main_remake_app", 0);
+
+       MF_TA_ACUM_ITEM_END(" Myfiles Launch Time", 0);
+       return 0;
+
+}
+
+
+/*     system operation callbacks      */
+/******************************
+** Prototype    : _keydown_event
+** Description  :
+** Input        : void *data
+**                int type
+**                void *event
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+#define TEMP_ENDKEY_ROLLBACK
+#if 0
+static Eina_Bool __mf_main_keydown_event_callback(void *data, int type, void *event)
+{
+       Ecore_Event_Key *ev = event;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ev == NULL, ECORE_CALLBACK_RENEW, "Ecore_Event_Key is NULL");
+       mf_retvm_if(ap == NULL, ECORE_CALLBACK_RENEW, "appdata is NULL");
+
+       if (!strcmp(ev->keyname, KEY_END)) {
+#ifdef TEMP_ENDKEY_ROLLBACK
+               if (ap->mf_Status.more != MORE_DEFAULT) {
+                       if (ap->mf_MainWindow.pProgressPopup != NULL) {
+                               if (ap->mf_Status.more == MORE_DATA_COPYING
+                                   || ap->mf_Status.more == MORE_DATA_MOVING
+                                   || ap->mf_Status.more == MORE_DELETE || ap->mf_Status.more == MORE_IDLE_DELETE) {
+                                       mf_callback_progress_bar_cancel_cb(ap, NULL, NULL);
+                               }
+                       }
+               }
+               if (ap->mf_FileOperation.search_IME_hide_timer != NULL) {
+                       ecore_timer_del(ap->mf_FileOperation.search_IME_hide_timer);
+                       ap->mf_FileOperation.search_IME_hide_timer = NULL;
+               }
+               elm_exit();
+#else
+               mf_debug();
+               if (ap->mf_SharedGadget.ug != NULL) {
+                       mf_debug();
+                       ug_send_key_event(UG_KEY_EVENT_END);
+               } else {
+                       if (ap->mf_MainWindow.pContextPopup != NULL) {
+                               mf_debug();
+                               evas_object_del(ap->mf_MainWindow.pContextPopup);
+                               ap->mf_MainWindow.pContextPopup = NULL;
+                       } else {
+                               if (ap->mf_Status.more == MORE_DEFAULT) {
+                                       mf_debug();
+                                       if (mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+                                               elm_exit();
+                                       } else {
+                                               mf_callback_upper_folder_cb(ap);
+                                       }
+                               } else {
+                                       if (ap->mf_MainWindow.pNormalPopup == NULL) {
+                                               mf_callback_cancel_cb(ap, NULL, NULL);
+                                       } else {
+                                               if (ap->mf_Status.more ==
+                                                   MORE_DATA_COPYING
+                                                   || ap->mf_Status.more ==
+                                                   MORE_DATA_MOVING || ap->mf_Status.more == MORE_DELETE || ap->mf_Status.more == MORE_IDLE_DELETE) {
+                                                       mf_callback_progress_bar_cancel_cb(ap, NULL, NULL);
+                                               }
+                                       }
+                               }
+                       }
+
+               }
+#endif
+       }
+       return ECORE_CALLBACK_RENEW;
+}
+#endif
+/******************************
+** Prototype    : __mf_main_create_app
+** 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_main_storage_status_get(void *data)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       int mmc_card = 0;
+       int error_code = 0;
+
+       MF_TA_ACUM_ITEM_BEGIN("      storage check", 0);
+       error_code = mf_util_is_mmc_on(&mmc_card);
+       if (error_code == 0 && mmc_card == 1) {
+               ap->mf_Status.iStorageState |= MYFILE_MMC;
+       }
+       /*check if usb otg mounted */
+#ifdef MYFILE_USB_OTG
+       int otg = 0;
+       error_code = mf_util_is_otg_on(&otg);
+       mf_debug("error code is %d, org is %d", error_code, otg);
+       if (error_code == 0 && otg == 1) {
+               mf_debug();
+               ap->mf_Status.iStorageState |= MYFILE_OTG;
+       }
+#endif
+       MF_TA_ACUM_ITEM_END("      storage check", 0);
+}
+
+bool __mf_main_create_app(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       int ret = 0;
+
+       MF_TA_ACUM_ITEM_END("  main-to-create", 0);
+
+
+       MF_TA_ACUM_ITEM_BEGIN("    g_thread_init", 0);
+       if (!g_thread_supported()) {
+               g_thread_init(NULL);
+       }
+       MF_TA_ACUM_ITEM_END("    g_thread_init", 0);
+       MF_TA_ACUM_ITEM_BEGIN("  __mf_main_create_app", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("    mf_language_mgr_create", 0);
+       mf_language_mgr_create();
+       MF_TA_ACUM_ITEM_END("    mf_language_mgr_create", 0);
+
+
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_data_init", 0);
+       __mf_main_data_init(ap);
+       MF_TA_ACUM_ITEM_END("    __mf_main_data_init", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_create_win", 0);
+
+       ap->mf_MainWindow.pWindow = __mf_main_create_win(PACKAGE);
+       mf_retvm_if(ap->mf_MainWindow.pWindow == NULL, -1, "Fail to __mf_main_create_win()");
+
+       evas_object_geometry_get(ap->mf_MainWindow.pWindow, NULL, NULL, &ap->mf_MainWindow.root_w, &ap->mf_MainWindow.root_h);
+
+       MF_TA_ACUM_ITEM_END("    __mf_main_create_win", 0);
+
+#ifdef MYFILE_SPLIT_VIEW
+       if(mf_util_is_rotation_lock() == 0) {
+               mf_debug("rotation is locked");
+               ap->mf_Status.rotation_type = MF_ROTATE_PORTRAIT;
+               ap->mf_Status.rotation_angle = 0;
+       } else {
+               app_device_orientation_e  rotate_mode;
+
+               rotate_mode = app_get_device_orientation();
+
+               mf_util_rotate_state_set(ap, rotate_mode);
+       }
+
+
+#endif
+
+       /**************start to launch myfile app******************/
+
+
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_create_bg", 0);
+       ap->mf_MainWindow.pBackGround = __mf_main_create_bg(ap->mf_MainWindow.pWindow);
+       MF_TA_ACUM_ITEM_END("    __mf_main_create_bg", 0);
+
+       ap->mf_MainWindow.pConformant = mf_widget_create_conform(ap->mf_MainWindow.pWindow);
+       elm_win_resize_object_add(ap->mf_MainWindow.pWindow, ap->mf_MainWindow.pConformant);
+
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_create_layout_main", 0);
+       ap->mf_MainWindow.pMainLayout = mf_widget_create_layout_main(ap->mf_MainWindow.pConformant);
+       MF_TA_ACUM_ITEM_END("    __mf_main_create_layout_main", 0);
+
+       elm_object_content_set(ap->mf_MainWindow.pConformant, ap->mf_MainWindow.pMainLayout);
+       elm_win_conformant_set(ap->mf_MainWindow.pWindow, EINA_TRUE);
+       elm_win_indicator_mode_set(ap->mf_MainWindow.pWindow, ELM_WIN_INDICATOR_SHOW);
+
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_storage_status_get", 0);
+       __mf_main_storage_status_get(ap);
+       MF_TA_ACUM_ITEM_END("    __mf_main_storage_status_get", 0);
+
+
+       MF_TA_ACUM_ITEM_BEGIN("    create phone naviframe struct", 0);
+       mf_widget_phone_storage_init(ap);
+       MF_TA_ACUM_ITEM_END("    create phone naviframe struct", 0);
+
+       //create landscape/portrait view
+       MF_TA_ACUM_ITEM_BEGIN("    mf_widget_create", 0);
+       mf_widget_create(ap);
+       MF_TA_ACUM_ITEM_END("    mf_widget_create", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("    set_view_to_mainlayout", 0);
+
+
+       elm_object_part_content_set(ap->mf_MainWindow.pMainLayout, "elm.swallow.content", ap->mf_MainWindow.pNaviBar);
+#ifdef MYFILE_SPLIT_VIEW
+       mf_widget_set_main_layout_content(ap);
+#endif
+       MF_TA_ACUM_ITEM_END("    set_view_to_mainlayout", 0);
+
+
+       /*Create content frame of Main Layout*/
+       MF_TA_ACUM_ITEM_BEGIN("    media_content_connect", 0);
+       ret = media_content_connect();
+       mf_retvm_if(ret < 0, -1, "Fail to media_content_connect()");
+       MF_TA_ACUM_ITEM_END("    media_content_connect", 0);
+
+
+       MF_TA_ACUM_ITEM_BEGIN("    mf_callback_create_dir_monitor", 0);
+       ret = mf_callback_create_dir_monitor(ap);
+       mf_retvm_if(ret < 0, -1, "Fail to mf_callback_create_dir_monitor()");
+       MF_TA_ACUM_ITEM_END("    mf_callback_create_dir_monitor", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("    app_init_idler", 0);
+       ap->mf_Status.app_init_idler = ecore_idler_add(__mf_main_app_init_idler_cb, ap);
+       MF_TA_ACUM_ITEM_END("    app_init_idler", 0);
+
+       evas_object_smart_callback_add(ap->mf_MainWindow.pWindow, "profile,changed", mf_callback_profile_changed_cb, ap);
+       efreet_mime_init();
+       __mf_main_remake_app(NULL, ap);
+
+       MF_TA_ACUM_ITEM_END("  __mf_main_create_app", 0);
+       MF_TA_ACUM_ITEM_BEGIN("  create_to_reset", 0);
+
+       MF_TRACE_END;
+
+       ap->mf_Status.b_run_background = false; /* 20121008 added for fix PLM P121001-0404 temporary */
+
+       return true;
+}
+
+static void __mf_main_reset_app(service_h service, void *data)
+{
+       MF_TRACE_BEGIN;
+       MF_TA_ACUM_ITEM_END("  create_to_reset", 0);
+
+
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_reset_app", 0);
+       struct appdata *ap = (struct appdata *)data;
+       char *operation = NULL;
+
+       MF_TA_ACUM_ITEM_BEGIN("    service_get_operation", 0);
+
+       service_get_operation(service, &operation);
+       MF_TA_ACUM_ITEM_END("    service_get_operation", 0);
+
+
+       if (g_strcmp0(operation, SERVICE_OPERATION_PICK) == 0) {
+               __mf_main_bundle_parse(service, ap);
+               /*launch myfile ug here*/
+               ap->mf_SharedGadget.ug = mf_launch_load_ug_myfile(ap);
+
+               service_clone(&ap->mf_Bundle.recv_service, service);
+       } else {
+               mf_debug();
+               char *launch_type_str = NULL;
+               service_get_extra_data(service, "launch-type", &launch_type_str);
+               if(launch_type_str &&!strcasecmp(launch_type_str, "shortcut")) {
+                       SAFE_FREE_CHAR(ap->mf_Bundle.path);
+                       SAFE_FREE_CHAR(ap->mf_Bundle.select_type);
+                       SAFE_FREE_CHAR(ap->mf_Bundle.file_type);
+                       SAFE_FREE_CHAR(ap->mf_Bundle.marked_mode);
+                       SAFE_FREE_CHAR(ap->mf_Bundle.drm_type);
+                       ap->mf_Bundle.path = g_strdup(PHONE_FOLDER);
+                       ap->mf_Bundle.select_type = g_strdup("SHORTCUT");
+                       ap->mf_SharedGadget.ug = mf_launch_load_ug_myfile(ap);
+                       SAFE_FREE_CHAR(ap->mf_Bundle.path);
+                       SAFE_FREE_CHAR(ap->mf_Bundle.select_type);
+               } else {
+                       mf_debug();
+                       char *uri = NULL;
+                       service_get_extra_data (service, "path", &uri);
+                       mf_debug("======== uri is [%s]", uri);
+                       if (uri && ecore_file_exists(uri)) {
+                               MF_TA_ACUM_ITEM_BEGIN("    otg_launch", 0);
+                               myfileNaviBar *pNavi_s_toshow = NULL;
+                               myfileNaviBar *pNavi_s_inuse = NULL;
+                               Evas_Object *pNaviBar = NULL;
+                               ap->mf_Status.view_type = mf_view_normal;
+                               pNavi_s_inuse = mf_navi_bar_get_in_use(ap);
+                               if (pNavi_s_inuse == NULL || pNavi_s_inuse->pNaviLabel == NULL) {
+                                       MF_TRACE_END;
+                                       return;
+                               }
+
+                               int locate = mf_fm_svc_wrapper_get_location(uri);
+                               char *storage = NULL;
+                               switch (locate) {
+                               case MYFILE_PHONE:
+                                       storage = GET_SYS_STR(MF_LABEL_PHONE);
+                                       break;
+                               case MYFILE_MMC:
+                                       storage = GET_SYS_STR(MF_LABEL_MMC);
+                                       break;
+                               case MYFILE_OTG:
+                                       storage = GET_STR(MF_LABEL_OTG);
+                               default:
+                                       break;
+                               }
+
+
+                               pNavi_s_inuse->naviFlagInUse = FALSE;
+
+                               pNaviBar = ap->mf_MainWindow.pNaviBar;
+                               pNavi_s_toshow = mf_navi_bar_get_navi_from_navilist(ap->mf_MainWindow.plistNaviBar, storage);
+
+                               if (pNavi_s_toshow == NULL) {
+                                       /*2.0   get root path by storage label */
+                                       char *rootpath = g_strdup(uri);
+                                       if (rootpath == NULL) {
+                                               MF_TRACE_END;
+                                               return;
+                                       }
+                                       /*2.1   create the navi for the tab */
+                                       pNavi_s_toshow = malloc(sizeof(myfileNaviBar));
+                                       if (pNavi_s_toshow == NULL) {
+                                               free(rootpath);
+                                               rootpath = NULL;
+                                               mf_debug("pNavi_s_toshow is NULL");
+                                               MF_TRACE_END;
+                                               return;
+                                       }
+                                       memset(pNavi_s_toshow, 0, sizeof(myfileNaviBar));
+
+                                       pNavi_s_toshow->naviFlagInUse = TRUE;
+                                       /*2.2   set path as root path of the storage */
+                                       pNavi_s_toshow->pCurrentPath = g_strdup(rootpath);
+                                       pNavi_s_toshow->pNaviLabel = g_strdup(storage);
+                                       free(rootpath);
+                                       /*2.3   insert phone navi into the navi_list */
+                                       ap->mf_MainWindow.plistNaviBar = eina_list_append(ap->mf_MainWindow.plistNaviBar, pNavi_s_toshow);
+
+                                       if (ap->mf_Status.path != NULL) {
+                                               g_string_free(ap->mf_Status.path, TRUE);
+                                               ap->mf_Status.path = NULL;
+                                       }
+                                       ap->mf_Status.path = g_string_new(pNavi_s_toshow->pCurrentPath);
+                                       __mf_main_remake_app(service, ap);
+                                       MF_TRACE_END;
+
+                               } else {
+                                       mf_debug();
+                                       /*2.1   get the navi of the tab */
+                                       pNavi_s_toshow = mf_navi_bar_get_struct_by_label(ap, storage);
+                                       pNavi_s_toshow->naviFlagInUse = TRUE;
+
+                                       /*2.2   set related status value. */
+                                       if (ap->mf_Status.path != NULL) {
+                                               g_string_free(ap->mf_Status.path, TRUE);
+                                               ap->mf_Status.path = NULL;
+                                       }
+                                       ap->mf_Status.path = g_string_new(uri);
+                                       SAFE_FREE_CHAR(pNavi_s_toshow->pCurrentPath);
+                                       pNavi_s_toshow->pCurrentPath = g_strdup(uri);
+                                       mf_debug();
+                                       /*2.3   update the content to catch update */
+                                       /*Todo: How to ensure insert only once */
+                                       __mf_main_remake_app(service, ap);
+                                       mf_debug();
+                                       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+                                       MF_TRACE_END;
+                               }
+                               MF_TA_ACUM_ITEM_END("    otg_launch", 0);
+
+                       }else {
+
+                               /* 20121008 added for fix PLM P121001-0404 temporary { */
+                               if (ap->mf_MainWindow.pWindow != NULL && ap->mf_Status.b_run_background)
+                               {
+
+                                       elm_win_activate(ap->mf_MainWindow.pWindow);
+                                       ap->mf_Status.b_run_background = false;
+                                       MF_TRACE_END;
+                                       return;
+                               }
+                       }
+               }
+       }
+
+       if (ap->mf_MainWindow.pWindow) {
+               evas_object_show(ap->mf_MainWindow.pWindow);
+               elm_win_activate(ap->mf_MainWindow.pWindow);
+       }
+       MF_TA_ACUM_ITEM_END("    __mf_main_reset_app", 0);
+
+}
+
+static void __mf_main_resume_app(void *data)
+{
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_resume_app", 0);
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+#ifdef MYFILE_SPLIT_VIEW
+       struct appdata *ap = (struct appdata *)data;
+       if (!mf_util_is_rotation_lock()) {
+               ap->mf_Status.rotation_type = MF_ROTATE_PORTRAIT;
+               ap->mf_Status.rotation_angle = 0;
+
+               mf_callback_app_rotate_cb(APP_DEVICE_ORIENTATION_0, ap);
+
+       } else {
+               app_device_orientation_e mode = APP_DEVICE_ORIENTATION_0 ;
+               mode = app_get_device_orientation();
+               if (mode != ap->mf_Status.rotation_type)
+                       mf_callback_app_rotate_cb(mode, ap);
+       }
+       if (ap->mf_MainWindow.pWindow) {
+               evas_object_show(ap->mf_MainWindow.pWindow);
+       }
+#endif
+       mf_sbeam_enable();
+       MF_TA_ACUM_ITEM_END("    __mf_main_resume_app", 0);
+}
+
+/******************************
+** Prototype    : __mf_main_terminate_app
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void __mf_main_terminate_app(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       media_content_disconnect();
+       efreet_mime_shutdown();
+
+       if (ap->mf_Status.search_handler)
+               mf_search_finalize(&ap->mf_Status.search_handler);
+
+       mf_callback_destory_dir_monitor(ap);
+
+       mf_ecore_idler_del(ap->mf_Status.app_init_idler);
+       mf_ecore_idler_del(ap->mf_Status.popup_del_idler);
+       mf_ecore_idler_del(ap->mf_Status.navi_content_idler);
+       SAFE_DEL_ECORE_TIMER(ap->mf_MainWindow.pPopupTimer);
+       SAFE_FREE_ECORE_EVENT(ap->mf_MainWindow.event);
+       SAFE_FREE_ECORE_EVENT(ap->mf_MainWindow.font_event);
+
+#ifdef MYFILE_MOTION_FEATURE
+       mf_sensor_finalize();
+#endif
+
+       MF_TA_ACUM_ITEM_SHOW_RESULT_TO(MF_TA_SHOW_FILE);
+       MF_TA_RELEASE();
+#ifdef MYFILE_USB_OTG
+       mf_otg_finalize(ap);
+#endif
+
+#ifdef MYFILE_CRITICAL_LOG
+       mf_log_finalize();
+#endif
+       mf_sbeam_finalize();
+
+#ifdef MYFILE_SPLIT_VIEW
+       SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pPanes);
+#endif
+       if (ap->mf_FileOperation.job_pop_list != NULL) {        /*job callback must not run before*/
+               mf_util_clear_handler_list(ap);
+               ap->mf_FileOperation.job_pop_list = NULL;
+       }
+
+       if (ap->mf_FileOperation.job_push != NULL) {    /*job callback must not run before*/
+               ecore_job_del(ap->mf_FileOperation.job_push);
+               ap->mf_FileOperation.job_push = NULL;
+       }
+
+       if (ap->mf_Status.flagIcuInit == TRUE)
+               mf_util_icu_finalize(ap);
+
+       if (ap->mf_FileOperation.sync_pipe) {
+               ecore_pipe_del(ap->mf_FileOperation.sync_pipe);
+               ap->mf_FileOperation.sync_pipe = NULL;
+       }
+       mf_util_set_pm_lock(ap, EINA_FALSE);
+       mf_language_mgr_destroy();
+}
+
+/******************************
+** Prototype    : __mf_main_stop_app
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void __mf_main_stop_app(void *data)
+{
+       MF_TA_ACUM_ITEM_BEGIN("    __mf_main_stop_app", 0);
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       /*check if phone navi is empty*/
+       if (mf_launch_myfile_ug_exist(ap)) {
+               /*if myfile ug exists, delete the ug*/
+               if (ap->mf_SharedGadget.ug != NULL) {
+                       ug_destroy(ap->mf_SharedGadget.ug);
+                       ap->mf_SharedGadget.ug = NULL;
+               }
+
+               /*terminate the process*/
+               elm_exit();
+       } else {
+               if (ap->mf_SharedGadget.ug != NULL) {
+                       ug_destroy(ap->mf_SharedGadget.ug);
+                       ap->mf_SharedGadget.ug = NULL;
+               }
+       }
+
+       mf_sbeam_disable();
+       MF_TA_ACUM_ITEM_END("    __mf_main_stop_app", 0);
+
+}
+
+/******************************
+** Prototype    : main
+** Description  :
+** Input        : int argc
+**                char *argv[]
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static void __mf_language_changed_cb(void *user_data)
+{
+       mf_language_mgr_update();
+}
+
+int main(int argc, char *argv[])
+{
+       app_event_callback_s ops;
+       struct appdata ad;
+
+       MF_TA_INIT();
+       MF_TA_ACUM_ITEM_BEGIN(" Myfiles Launch Time", 0);
+       MF_TA_ACUM_ITEM_BEGIN("  main", 0);
+
+#ifdef MYFILE_CRITICAL_LOG
+       int ret = mf_log_init();
+       if (ret != MYFILE_ERR_NONE)
+               mf_debug("initialize critical log failed");
+#endif
+
+       memset(&ops, 0x0, sizeof(app_event_callback_s));
+       memset(&ad, 0x0, sizeof(struct appdata));
+
+       ops.create = __mf_main_create_app;
+       ops.terminate = __mf_main_terminate_app;
+       ops.pause = __mf_main_stop_app;
+       ops.resume = __mf_main_resume_app;
+       ops.service = __mf_main_reset_app;
+       ops.device_orientation = mf_callback_app_rotate_cb;
+       ops.region_format_changed  = mf_callback_icu_update_cb;
+       ops.language_changed = __mf_language_changed_cb;
+
+       MF_TA_ACUM_ITEM_END("  main", 0);
+       MF_TA_ACUM_ITEM_BEGIN("  main-to-create", 0);
+       return app_efl_main(&argc, &argv, &ops, &ad);
+}
diff --git a/src/widget/mf-content.c b/src/widget/mf-content.c
new file mode 100644 (file)
index 0000000..c798497
--- /dev/null
@@ -0,0 +1,68 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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-widget.h"
+#include "mf-util.h"
+#include "mf-fm-svc-wrapper.h"
+/***Todo       we need to extract some common code to be APIs***/
+/******************************
+** Prototype    : mf_content_create_list
+** Description  : create the list for the content
+** Input        : struct appdata *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+Evas_Object *mf_content_create_list(struct appdata *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "invalid parameter data");
+
+
+       if (ap->mf_MainWindow.pNaviGenlist)
+               ap->mf_MainWindow.pNaviGenlist = NULL;
+
+       return mf_navi_bar_content_create(ap);
+}
+
+/******************************
+** Prototype    : mf_content_main_layout_set_by_tab_item_count
+** Description  : set content of mainlayout by the count of tab bar items
+** Input        : void *data
+** Output       : None
+** Return Value : 0    tab is deleted and navibar of phone set as content
+                               : 1     tab bar is the content
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+
+
diff --git a/src/widget/mf-context-popup.c b/src/widget/mf-context-popup.c
new file mode 100644 (file)
index 0000000..743b778
--- /dev/null
@@ -0,0 +1,343 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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-widget.h"
+#include "mf-callback.h"
+#include "mf-share.h"
+#include "mf-language-mgr.h"
+
+
+static Evas_Coord touch_x;
+static Evas_Coord touch_y;
+
+
+/******************************
+** Prototype    : _move_ctxpopup
+** Description  : move the context popup to the suitable location
+** Input        : void *data
+**                Evas_Object *ctxpopup
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static void _move_ctxpopup(void *data, Evas_Object *parent, Evas_Object *ctxpopup )
+{
+       struct appdata* ap = (struct appdata *)data;
+       elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_UP,
+                                           ELM_CTXPOPUP_DIRECTION_LEFT,
+                                           ELM_CTXPOPUP_DIRECTION_RIGHT,
+                                           ELM_CTXPOPUP_DIRECTION_DOWN);
+
+
+       if (parent) {
+               int x = 0;
+               int y = 0;
+               int w = 0;
+               int h = 0;
+
+               evas_object_geometry_get(parent, &x, &y, &w, &h);
+               evas_object_move(ctxpopup, x + (w / 2), y + (h /2));
+       } else {
+               evas_object_move(ctxpopup, touch_x, touch_y);
+       }
+}
+
+
+/******************************
+** Prototype    : mousedown_cb
+** Description  : callback function for the mouse down operation in  context
+                  popup
+** Input        : void *data
+**                int type
+**                void *event
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void mf_context_popup_get_position(Evas_Object *obj, const char *label, int *x, int *y)
+{
+       mf_retm_if(obj == NULL, "obj is NULL");
+       mf_retm_if(label == NULL, "label is NULL");
+       Evas_Object *pCtrlBar = obj;
+
+       Elm_Object_Item *pItem = NULL;
+       int x_position = 0;
+       int y_position = 0;
+       int w = 0;
+
+       pItem = elm_toolbar_first_item_get(pCtrlBar);
+
+       while(pItem) {
+               const char *button_label = elm_object_item_text_get(pItem);
+               if (g_strcmp0(button_label, label) == 0) {
+                       Evas_Object *icon = elm_toolbar_item_object_get(pItem);
+                       evas_object_geometry_get(icon, &x_position, &y_position, &w, NULL);
+                       *x = x_position+w/2;
+                       *y = y_position;
+                       return;
+               }
+               pItem = elm_toolbar_item_next_get(pItem);
+       }
+}
+
+int mousedown_cb( void *data, int type, void *event )
+{
+       struct appdata* ap = (struct appdata *)data;
+       Evas_Coord x = 0;
+       Evas_Coord y = 0;
+       Evas_Coord w = 0;
+       Elm_Object_Item *navi_it = ap->mf_MainWindow.pNaviItem;
+
+
+       if (ap->mf_Status.navi_item_selected == MF_NAVI_BTN_MORE) {
+               Evas_Object *button = elm_object_item_part_content_get(navi_it, NAVI_MORE_BUTTON_PART);
+               evas_object_geometry_get(button, &x, &y, &w, NULL);
+               touch_x = x+w/2;;
+               touch_y = y;
+               return 0;
+       } else if (ap->mf_Status.more == MF_NAVI_BTN_SHARE) {
+               Evas_Object *button = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_2_PART);
+
+               mf_context_popup_get_position(button, GET_SYS_STR(LABEL_SHARE),&x, &y);
+               mf_debug("x is [%d] y is [%d]", x, y);
+               touch_x = x;
+               touch_y = y;
+               return 0;
+       } else {
+               return 0;
+       }
+}
+
+/******************************
+** Prototype    : mfContextPopupCreate
+** Description  : Create the context popup
+** Input        : void *data
+**                eContextPopMode popupMode
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static void _ctxpopup_hide_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(obj == NULL, "obj is NULL");
+       mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTXPOP);
+       evas_object_del(obj);
+       obj = NULL;
+       MF_TRACE_END;
+}
+
+void mf_context_popup_create_gengrid(void *data)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       mfItemData_s *itemData = (mfItemData_s *)data;
+       struct appdata* ap = (struct appdata *)itemData->ap;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+
+
+       if (ap->mf_Status.more == MORE_DEFAULT) {
+               Evas_Object *ctxpopup = elm_ctxpopup_add(ap->mf_MainWindow.pNaviBar);
+               ap->mf_MainWindow.pContextPopup = ctxpopup;
+               Elm_Object_Item *it = NULL;
+               Evas_Object *parent = elm_object_item_part_content_get(itemData->item, "elm.swallow.icon");
+
+               if (ap->mf_Status.view_type == mf_view_root) {
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_DETAIL), NULL, mf_callback_detail_ctx_cb, itemData);
+                       mf_language_mgr_register_object_item(it, LABEL_DETAIL, ITEM_TYPE_CTXPOP);
+               } else {
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_RENAME), NULL, mf_callback_rename_create_cb, itemData);
+                       mf_language_mgr_register_object_item(it, LABEL_RENAME, ITEM_TYPE_CTXPOP);
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_DELETE), NULL, mf_callback_delete_button_cb, itemData);
+                       mf_language_mgr_register_object_item(it, LABEL_DELETE, ITEM_TYPE_CTXPOP);
+
+               }
+               _move_ctxpopup(ap, parent, ctxpopup);
+               evas_object_show(ctxpopup);
+
+               if(ctxpopup)
+               {
+                       evas_object_smart_callback_add(ctxpopup,"dismissed", _ctxpopup_hide_cb, ap);
+               }
+       }
+}
+
+
+void mf_context_popup_create_more(void *data, Evas_Object *parent)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata* ap = (struct appdata *)data;
+       int extension_state = ap->mf_Status.iExtensionState;
+
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+
+       Evas_Object *ctxpopup = elm_ctxpopup_add(ap->mf_MainWindow.pNaviBar);
+       ap->mf_MainWindow.pContextPopup = ctxpopup;
+       Elm_Object_Item *it = NULL;
+
+       if (ap->mf_Status.more == MORE_DEFAULT) {
+               /*Search*/
+               if (ap->mf_Status.view_type == mf_view_root) {
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_VIEW_AS), NULL, mf_callback_view_as_cb, ap);
+                       mf_language_mgr_register_object_item(it, LABEL_VIEW_AS, ITEM_TYPE_CTXPOP);
+
+                       /*Sort by*/
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_SORT_BY), NULL, mf_callback_list_by_view_cb, ap);
+                       mf_language_mgr_register_object_item(it, LABEL_SORT_BY, ITEM_TYPE_CTXPOP);
+               } else if (ap->mf_Status.view_type == mf_view_root_category) {
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_SEARCH), NULL,mf_search_bar_enter_search_routine, ap);
+                       mf_language_mgr_register_object_item(it, LABEL_SEARCH, ITEM_TYPE_CTXPOP);
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_VIEW_AS), NULL, mf_callback_view_as_cb, ap);
+                       mf_language_mgr_register_object_item(it, LABEL_VIEW_AS, ITEM_TYPE_CTXPOP);
+
+                       /*Sort by*/
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_SORT_BY), NULL, mf_callback_list_by_view_cb, ap);
+                       mf_language_mgr_register_object_item(it, LABEL_SORT_BY, ITEM_TYPE_CTXPOP);
+                       if (extension_state == MF_EXTENSION_SHOW) {
+                               it = elm_ctxpopup_item_append(ctxpopup, GET_STR(MF_LABEL_HIDE_EXTENSION), NULL, mf_callback_extension_cb, ap);
+                               mf_language_mgr_register_object_item(it, MF_LABEL_HIDE_EXTENSION, ITEM_TYPE_CTXPOP);
+                       } else {
+                               it = elm_ctxpopup_item_append(ctxpopup, GET_STR(MF_LABEL_SHOW_EXTENSION), NULL, mf_callback_extension_cb, ap);
+                               mf_language_mgr_register_object_item(it, MF_LABEL_SHOW_EXTENSION, ITEM_TYPE_CTXPOP);
+                       }
+               }
+               else {
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_SEARCH), NULL,mf_search_bar_enter_search_routine, ap);
+                       mf_language_mgr_register_object_item(it, LABEL_SEARCH, ITEM_TYPE_CTXPOP);
+
+                       /*Create folder*/
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_LABEL_CREATE_FOLDER), NULL,mf_callback_new_folder_create_cb, ap);
+                       mf_language_mgr_register_object_item(it, MF_LABEL_CREATE_FOLDER, ITEM_TYPE_CTXPOP);
+
+                       /*View as*/
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_VIEW_AS), NULL, mf_callback_view_as_cb, ap);
+                       mf_language_mgr_register_object_item(it, LABEL_VIEW_AS, ITEM_TYPE_CTXPOP);
+
+                       /*Sort by*/
+                       it = elm_ctxpopup_item_append(ctxpopup, GET_STR(LABEL_SORT_BY), NULL, mf_callback_list_by_view_cb, ap);
+                       mf_language_mgr_register_object_item(it, LABEL_SORT_BY, ITEM_TYPE_CTXPOP);
+
+                       /*Extension*/
+                       if (extension_state == MF_EXTENSION_SHOW) {
+                               it = elm_ctxpopup_item_append(ctxpopup, GET_STR(MF_LABEL_HIDE_EXTENSION), NULL, mf_callback_extension_cb, ap);
+                               mf_language_mgr_register_object_item(it, MF_LABEL_HIDE_EXTENSION, ITEM_TYPE_CTXPOP);
+                       } else {
+                               it = elm_ctxpopup_item_append(ctxpopup, GET_STR(MF_LABEL_SHOW_EXTENSION), NULL, mf_callback_extension_cb, ap);
+                               mf_language_mgr_register_object_item(it, MF_LABEL_SHOW_EXTENSION, ITEM_TYPE_CTXPOP);
+                       }
+               }
+       } else if(ap->mf_Status.more == MORE_EDIT) {
+               /*Copy*/
+               it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_COPY), NULL, mf_callback_copy_move_cb, ap);
+               mf_language_mgr_register_object_item(it, LABEL_COPY, ITEM_TYPE_CTXPOP);
+               /*Move*/
+               it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(LABEL_MOVE), NULL,mf_callback_copy_move_cb, ap);
+               mf_language_mgr_register_object_item(it, LABEL_MOVE, ITEM_TYPE_CTXPOP);
+
+       } else if(ap->mf_Status.more == MORE_INTERNAL_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY) {
+               it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_LABEL_CREATE_FOLDER), NULL,mf_callback_new_folder_create_cb, ap);
+               mf_language_mgr_register_object_item(it, MF_LABEL_CREATE_FOLDER, ITEM_TYPE_CTXPOP);
+       }
+       _move_ctxpopup(ap, parent, ctxpopup);
+       evas_object_show(ctxpopup);
+
+       if(ctxpopup)
+       {
+               evas_object_smart_callback_add(ctxpopup,"dismissed", _ctxpopup_hide_cb, ap);
+       }
+}
+
+
+static void __mf_share_select(void *data, Evas_Object * obj, void *event_info)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(event_info == NULL, "event_info is NULL");
+
+       struct appdata* ap = (struct appdata *)data;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       if (item != NULL) {
+               const char *label = NULL;
+               label = elm_object_item_text_get(item);
+               ap->mf_Status.preMore = MORE_SHARE_EDIT;
+               if (g_strcmp0(label, GET_SYS_STR(MF_POP_MSG_BT)) == 0) {
+                       ap->mf_Status.more = MORE_SENDVIABLUETOOTH;
+               } else if (g_strcmp0(label, GET_SYS_STR(MF_POP_MSG_EMAIL)) == 0) {
+                       ap->mf_Status.more = MORE_SENDVIAEMAIL;
+
+               } else if (g_strcmp0(label, GET_SYS_STR(MF_POP_MSG_MESSAGE)) == 0) {
+                       ap->mf_Status.more = MORE_SENDVIAMESSAGE;
+               }
+
+               mf_callback_send_response_cb(ap);
+       }
+}
+
+void mf_context_popup_create_share(void *data, int share_mode, Evas_Object *parent)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata* ap = (struct appdata *)data;
+
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+
+       ap->mf_Status.navi_item_selected = MF_NAVI_BTN_SHARE;
+
+       Evas_Object *ctxpopup = elm_ctxpopup_add(ap->mf_MainWindow.pNaviBar);
+       ap->mf_MainWindow.pContextPopup = ctxpopup;
+       Elm_Object_Item *it = NULL;
+
+       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_POP_MSG_MESSAGE), NULL, __mf_share_select, ap);
+       mf_language_mgr_register_object_item(it, MF_POP_MSG_MESSAGE, ITEM_TYPE_CTXPOP);
+       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_POP_MSG_EMAIL), NULL, __mf_share_select, ap);
+       mf_language_mgr_register_object_item(it, MF_POP_MSG_EMAIL, ITEM_TYPE_CTXPOP);
+       it = elm_ctxpopup_item_append(ctxpopup, GET_SYS_STR(MF_POP_MSG_BT), NULL, __mf_share_select, ap);
+       mf_language_mgr_register_object_item(it, MF_POP_MSG_BT, ITEM_TYPE_CTXPOP);
+
+
+
+       _move_ctxpopup(ap, parent,ctxpopup);
+       evas_object_show(ctxpopup);
+
+       if(ctxpopup)
+       {
+               evas_object_smart_callback_add(ctxpopup,"dismissed", _ctxpopup_hide_cb, ap);
+       }
+}
+
diff --git a/src/widget/mf-ctrl-bar.c b/src/widget/mf-ctrl-bar.c
new file mode 100644 (file)
index 0000000..dc929fa
--- /dev/null
@@ -0,0 +1,593 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <Eina.h>
+#include "mf-util.h"
+#include "mf-widget.h"
+#include "mf-callback.h"
+#include "mf-resource.h"
+#include "mf-language-mgr.h"
+
+/******************************
+** Prototype    : __mf_ctrl_bar_create_ctrl_bar
+** 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_ctrl_bar_create_ctrl_bar(Evas_Object * parent)
+{
+       Evas_Object *pCtrlBar = NULL;
+
+       if (parent == NULL) {
+               return NULL;
+       }
+
+       pCtrlBar = elm_toolbar_add(parent);
+       elm_toolbar_shrink_mode_set(pCtrlBar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_object_style_set(pCtrlBar, "naviframe");
+       evas_object_show(pCtrlBar);
+       return pCtrlBar;
+}
+
+/******************************
+** Prototype    : __mf_ctrl_bar_set_label_list
+** Description  : Samsung
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static Eina_List *__mf_ctrl_bar_set_label_list(void *data)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, false, "ap is NULL");
+       Eina_List *pLabelList = NULL;
+
+       switch (ap->mf_Status.more) {
+       case MORE_DEFAULT:
+               pLabelList = eina_list_append(pLabelList, MF_LABEL_EDIT);
+               pLabelList = eina_list_append(pLabelList, LABEL_SORT_BY);
+               pLabelList = eina_list_append(pLabelList, LABEL_SEARCH);
+               pLabelList = eina_list_append(pLabelList, MF_LABEL_MORE);
+               break;
+       case MORE_EDIT:
+               pLabelList = eina_list_append(pLabelList, LABEL_DELETE);
+               pLabelList = eina_list_append(pLabelList, LABEL_SHARE);
+               pLabelList = eina_list_append(pLabelList, LABEL_MOVE);
+               pLabelList = eina_list_append(pLabelList, LABEL_COPY);
+               pLabelList = eina_list_append(pLabelList, LABEL_CANCEL);
+               break;
+       case MORE_CREATE_FOLDER:
+       case MORE_THUMBNAIL_RENAME:
+       case MORE_RENAME:
+               pLabelList = eina_list_append(pLabelList, LABEL_SAVE);
+               pLabelList = eina_list_append(pLabelList, LABEL_CANCEL);
+               break;
+       case MORE_INTERNAL_COPY:
+       case MORE_DATA_COPYING:
+               pLabelList = eina_list_append(pLabelList, LABEL_COPY_HERE);
+               pLabelList = eina_list_append(pLabelList, NULL);
+               pLabelList = eina_list_append(pLabelList, MF_LABEL_CREATE_FOLDER);
+               pLabelList = eina_list_append(pLabelList, NULL);
+               pLabelList = eina_list_append(pLabelList, LABEL_CANCEL);
+               break;
+       case MORE_INTERNAL_MOVE:
+       case MORE_DATA_MOVING:
+               pLabelList = eina_list_append(pLabelList, LABEL_MOVE_HERE);
+               pLabelList = eina_list_append(pLabelList, NULL);
+               pLabelList = eina_list_append(pLabelList, MF_LABEL_CREATE_FOLDER);
+               pLabelList = eina_list_append(pLabelList, NULL);
+               pLabelList = eina_list_append(pLabelList, LABEL_CANCEL);
+               break;
+       case MORE_INTERNAL_COPY_MOVE:
+               pLabelList = eina_list_append(pLabelList, LABEL_CANCEL);
+               pLabelList = eina_list_append(pLabelList, LABEL_MOVE_HERE);
+               pLabelList = eina_list_append(pLabelList, LABEL_COPY_HERE);
+               pLabelList = eina_list_append(pLabelList, MF_LABEL_CREATE_FOLDER);
+               break;
+       default:
+               return NULL;
+       }
+       return pLabelList;
+}
+
+
+
+
+/******************************
+** Prototype    : __mf_ctrl_bar_set_label
+** Description  : Samsung
+** Input        : void *data
+**                Eina_List **label_list
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static void __mf_ctrl_bar_set_label(void *data, Eina_List ** label_list)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (label_list != NULL) {
+               if (*label_list != NULL) {
+                       eina_list_free(*label_list);
+                       //mf_util_free_eina_list_with_data(label_list, MYFILE_TYPE_CHAR);
+                       *label_list = NULL;
+               }
+       } else {
+               return;
+       }
+       *label_list = __mf_ctrl_bar_set_label_list(ap);
+}
+
+
+static Eina_List *__mf_ctrl_bar_set_icon_list(void *data)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, false, "ap is NULL");
+       Eina_List *pLabelList = NULL;
+
+       switch (ap->mf_Status.more) {
+       case MORE_DEFAULT:
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_EDIT));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_LIST_BY));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_SEARCH));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_NEW_FOLDER_CREATE));
+               break;
+       case MORE_EDIT:
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_DELETE));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_SEND));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_MOVE));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_COPY));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_CANCEL));
+               break;
+       case MORE_CREATE_FOLDER:
+       case MORE_THUMBNAIL_RENAME:
+       case MORE_RENAME:
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_SAVE));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_CANCEL));
+               break;
+       case MORE_INTERNAL_COPY:
+       case MORE_DATA_COPYING:
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_PASTE_HERE));
+               pLabelList = eina_list_append(pLabelList, NULL);
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_NEW_FOLDER_CREATE));
+               pLabelList = eina_list_append(pLabelList, NULL);
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_CANCEL));
+               break;
+       case MORE_INTERNAL_MOVE:
+       case MORE_DATA_MOVING:
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_MOVE_HERE));
+               pLabelList = eina_list_append(pLabelList, NULL);
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_NEW_FOLDER_CREATE));
+               pLabelList = eina_list_append(pLabelList, NULL);
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_CANCEL));
+               break;
+       case MORE_INTERNAL_COPY_MOVE:
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_CANCEL));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_MOVE));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_COPY));
+               pLabelList = eina_list_append(pLabelList, strdup(MF_CTRL_ICON_NEW_FOLDER_CREATE));
+               break;
+       default:
+               return NULL;
+       }
+       return pLabelList;
+}
+
+
+static void __mf_ctrl_bar_set_icon(void *data, Eina_List ** label_list)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (label_list != NULL) {
+               if (*label_list != NULL) {
+                       mf_util_free_eina_list_with_data(label_list, MYFILE_TYPE_CHAR);
+                       *label_list = NULL;
+               }
+       } else {
+               return;
+       }
+       *label_list = __mf_ctrl_bar_set_icon_list(ap);
+}
+
+
+static Eina_List *__mf_ctrl_bar_set_callback_list(void *data)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+       Eina_List *pCallBackList = NULL;
+
+       switch (ap->mf_Status.more) {
+       case MORE_DEFAULT:
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_edit_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_list_by_view_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_search_bar_enter_search_routine);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_more_button_cb);
+               break;
+       case MORE_INTERNAL_COPY_MOVE:
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_cancel_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_move_here_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_paste_here_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_new_folder_create_cb);
+               break;
+       case MORE_INTERNAL_COPY:
+       case MORE_DATA_COPYING:
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_paste_here_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) NULL);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_new_folder_create_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) NULL);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_cancel_cb);
+               break;
+       case MORE_INTERNAL_MOVE:
+       case MORE_DATA_MOVING:
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_move_here_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) NULL);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_new_folder_create_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) NULL);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_cancel_cb);
+               break;
+       case MORE_EDIT:
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_delete_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_share_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_copy_move_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_copy_move_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_cancel_cb);
+               /*pCallBackList = eina_list_append(pCallBackList, (mfCallBack)mfCopyCB);*/
+               /*pCallBackList = eina_list_append(pCallBackList, (mfCallBack)mfMoveCB);*/
+               break;
+       case MORE_RENAME:
+       case MORE_THUMBNAIL_RENAME:
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_rename_save_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_cancel_cb);
+               break;
+       case MORE_CREATE_FOLDER:
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_save_cb);
+               pCallBackList = eina_list_append(pCallBackList, (mfCallBack) mf_callback_cancel_cb);
+       default:
+               break;
+       }
+       return pCallBackList;
+}
+
+/******************************
+** Prototype    : __mf_ctrl_bar_set_callback
+** Description  : Samsung
+** Input        : void *data
+**                Eina_List **callback_list
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static void __mf_ctrl_bar_set_callback(void *data, Eina_List ** callback_list)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (callback_list != NULL) {
+               if (*callback_list != NULL) {
+                       eina_list_free(*callback_list);
+                       *callback_list = NULL;
+               }
+       } else {
+               return;
+       }
+       *callback_list = __mf_ctrl_bar_set_callback_list(ap);
+}
+
+
+
+/******************************
+** Prototype    : __mf_ctrl_bar_add_item
+** Description  : Samsung
+** Input        : void *data
+**                Evas_Object *ctrl_bar
+**                Eina_List *label_list
+**                Eina_List *callback_list
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static bool __mf_ctrl_bar_add_item(void *data, Evas_Object * ctrl_bar, Eina_List * label_list, Eina_List * callback_list, Eina_List * button_list)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, false, "ap is NULL");
+
+       Evas_Object *pCtrlBar = ctrl_bar;
+
+       Eina_List *callback = callback_list;
+       int label_count = 0;
+       mfCallBack fun = NULL;
+       int callback_count = 0;
+       int index = 0;
+
+       label_count = eina_list_count(label_list);
+       callback_count = eina_list_count(callback_list);
+
+/*
+       if(label_count ==0 || callback_count == 0 || label_count != callback_count)
+       {
+               return false;
+       }
+       else*/
+
+       Elm_Object_Item *pItem = NULL;
+       Elm_Object_Item *pNext = NULL;
+
+       pItem = elm_toolbar_first_item_get(pCtrlBar);
+
+       while(pItem) {
+               pNext = elm_toolbar_item_next_get(pItem);
+               mf_language_mgr_unregister_object_item(pItem);
+               elm_object_item_del(pItem);
+               pItem = pNext;
+       }
+
+       for (index = 0; index < callback_count; index++) {
+               char *lable = NULL;
+               char *icon = NULL;
+               fun = (mfCallBack) eina_list_nth(callback, index);
+               lable = eina_list_nth(label_list, index);
+               icon = eina_list_nth(button_list, index);
+               Elm_Object_Item *it = elm_toolbar_item_append(pCtrlBar, NULL, mf_util_get_text(lable), fun, ap);
+               if (lable == NULL) {
+                       elm_object_item_disabled_set(it, EINA_TRUE);
+               }
+               mf_language_mgr_register_object_item(it, lable, ITEM_TYPE_CTRL);
+       }
+       return true;
+}
+
+/******************************
+** Prototype    : mf_ctrl_bar_create
+** 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_ctrl_bar_del_item(Evas_Object *pCtrlBar)
+{
+       mf_retm_if(pCtrlBar == NULL, "pCtrlBar is NULL");
+
+
+       Elm_Object_Item *pItem = NULL;
+       Elm_Object_Item *pNext = NULL;
+       pItem = elm_toolbar_first_item_get(pCtrlBar);
+
+       while(pItem) {
+               printf("deleting item is [%s]\n", elm_object_item_text_get(pItem));
+               pNext = elm_toolbar_item_next_get(pItem);
+               mf_language_mgr_unregister_object_item(pItem);
+               elm_object_item_del(pItem);
+               pItem = pNext;
+       }
+
+}
+
+void mf_ctrl_bar_reset(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       Evas_Object *pCtrlBar = NULL;
+       Eina_List *label_list = NULL;
+       Eina_List *button_list = NULL;
+       Eina_List *callback_list = NULL;
+
+       if (ap->mf_MainWindow.pNaviCtrlBar) {
+               __mf_ctrl_bar_del_item(ap->mf_MainWindow.pNaviCtrlBar);
+       }
+
+       pCtrlBar = ap->mf_MainWindow.pNaviCtrlBar;
+
+       __mf_ctrl_bar_set_label(ap, &label_list);
+       __mf_ctrl_bar_set_icon(ap, &button_list);
+       __mf_ctrl_bar_set_callback(ap, &callback_list);
+
+       __mf_ctrl_bar_add_item(ap, pCtrlBar, label_list, callback_list, button_list);
+
+       eina_list_free(callback_list);
+       //mf_util_free_eina_list_with_data(&label_list, MYFILE_TYPE_CHAR);
+       eina_list_free(callback_list);
+
+       evas_object_show(pCtrlBar);
+
+       MF_TRACE_END;
+}
+
+Evas_Object *mf_ctrl_bar_create(void *data, Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       Evas_Object *pCtrlBar = NULL;
+       Eina_List *label_list = NULL;
+       Eina_List *button_list = NULL;
+       Eina_List *callback_list = NULL;
+
+       pCtrlBar = __mf_ctrl_bar_create_ctrl_bar(parent);
+       mf_retvm_if(pCtrlBar == NULL, NULL, "pCtrlBar is NULL");
+
+       __mf_ctrl_bar_set_label(ap, &label_list);
+       __mf_ctrl_bar_set_icon(ap, &button_list);
+       __mf_ctrl_bar_set_callback(ap, &callback_list);
+
+       __mf_ctrl_bar_add_item(ap, pCtrlBar, label_list, callback_list, button_list);
+
+       //mf_util_free_eina_list_with_data(&label_list, MYFILE_TYPE_CHAR);
+       eina_list_free(label_list);
+       eina_list_free(callback_list);
+       MF_TRACE_END;
+       return pCtrlBar;
+}
+
+
+/******************************
+** Prototype    : mf_ctrl_bar_item_set_disable
+** Description  : function for the Disable set of the Control Bar
+** Input        : Evas_Object *ctrl_bar
+**                int disable_item
+**                bool disable
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void mf_ctrl_bar_item_set_disable(Evas_Object *ctrl_bar, int disable_item, bool disable)
+{
+       mf_debug();
+       Evas_Object *pCtrlBar = ctrl_bar;
+
+       Elm_Object_Item *it = NULL;
+       it = elm_toolbar_first_item_get(pCtrlBar);
+
+       while(it) {
+
+               const char *button_label = elm_object_item_text_get(it);
+
+               if ((disable_item & CTRL_DISABLE_COPY) && g_strcmp0(button_label, GET_SYS_STR(LABEL_COPY)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_MOVE) && g_strcmp0(button_label, GET_SYS_STR(LABEL_MOVE)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_DELETE)
+                          && g_strcmp0(button_label, GET_SYS_STR(LABEL_DELETE)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_SEARCH) && g_strcmp0(button_label, GET_SYS_STR(LABEL_SEARCH)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_SEND) && g_strcmp0(button_label, GET_SYS_STR(LABEL_SHARE)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_LIST_BY) && g_strcmp0(button_label, GET_STR(LABEL_SORT_BY)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_CREATE) && g_strcmp0(button_label, GET_SYS_STR(MF_LABEL_CREATE_FOLDER)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_EDIT) && g_strcmp0(button_label, GET_SYS_STR(MF_LABEL_EDIT)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_CANCEL) && g_strcmp0(button_label, GET_SYS_STR(LABEL_CANCEL)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_COPY_HERE) && g_strcmp0(button_label, GET_STR(LABEL_COPY_HERE)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_MOVE_HERE) && g_strcmp0(button_label, GET_STR(LABEL_MOVE_HERE)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+               } else if ((disable_item & CTRL_DISABLE_MORE) && g_strcmp0(button_label, GET_SYS_STR(MF_LABEL_MORE)) == 0) {
+                       mf_debug();
+                       elm_object_item_disabled_set(it, disable);
+
+               }
+               it = elm_toolbar_item_next_get(it);
+       }
+
+}
+
+int mf_ctrl_bar_item_get_disable(Evas_Object *ctrl_bar)
+{
+       Evas_Object *pCtrlBar = ctrl_bar;
+
+       int disable_item = 0;
+
+       Elm_Object_Item *pItem = NULL;
+       pItem = elm_toolbar_first_item_get(pCtrlBar);
+
+       while(pItem) {
+               if (elm_object_item_disabled_get(pItem)) {
+                       const char *button_label = elm_object_item_text_get(pItem);
+
+                       if (g_strcmp0(button_label, GET_SYS_STR(LABEL_DELETE)) == 0) {
+                               disable_item |= CTRL_DISABLE_DELETE;
+                       } else if (g_strcmp0(button_label, GET_SYS_STR(LABEL_SHARE)) == 0) {
+                               disable_item |= CTRL_DISABLE_SEND;
+                       } else if (g_strcmp0(button_label, GET_SYS_STR(LABEL_COPY)) == 0) {
+                               disable_item |= CTRL_DISABLE_COPY;
+                       } else if (g_strcmp0(button_label, GET_SYS_STR(LABEL_MOVE)) == 0) {
+                               disable_item |= CTRL_DISABLE_MOVE;
+                       }
+               }
+               pItem = elm_toolbar_item_next_get(pItem);
+       }
+
+       return disable_item;
+}
+
diff --git a/src/widget/mf-gengrid.c b/src/widget/mf-gengrid.c
new file mode 100644 (file)
index 0000000..3291099
--- /dev/null
@@ -0,0 +1,626 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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-widget.h"
+#include "mf-util.h"
+#include "mf-callback.h"
+#include "mf-launch.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-otg.h"
+#include "mf-language-mgr.h"
+
+Elm_Gengrid_Item_Class gic;
+#define GENGRID_ITEM_WIDTH     72
+
+static inline void __mf_gengrid_get_thumbnail(mfItemData_s *params)
+{
+       int error_code = 0;
+       if (params->thumb_path == NULL) {
+               if (mf_file_attr_is_dir(params->m_ItemName->str)) {
+                       if (params->ap->mf_Status.view_type == mf_view_root) {
+                               params->thumb_path = strdup(MF_ICON_THUMBNAIL_FOLDER);
+                       } else if (mf_fm_svc_wrapper_is_root_path(params->ap->mf_Status.path->str) == MYFILE_OTG) {
+                               params->thumb_path = strdup(MF_ICON_EXTERNAL_DEVICE);
+                       } else {
+                               params->thumb_path = strdup(MF_ICON_THUMBNAIL_FOLDER);
+                       }
+                       params->real_thumb_flag = TRUE;
+               } else {
+                       const char *icon_path = NULL;
+                       mf_file_attr_get_file_icon(params->m_ItemName->str, &error_code, MF_ROTATE_LANDSCAPE, &icon_path, &params->media);
+                       if (icon_path && ecore_file_exists(icon_path)) {
+                               if (!g_strcmp0(icon_path, DEFAULT_ICON)) {
+                                       params->thumb_path = strdup(MF_ICON_THUMBNAIL_UNKOWN);
+                               } else {
+                                       params->thumb_path = strdup(icon_path);
+                               }
+                               params->real_thumb_flag = TRUE;
+                       } else {        /*must be image/video file*/
+                               fsFileType type = FILE_TYPE_NONE;
+                               type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
+
+                               if (type == FILE_TYPE_VIDEO) {
+                                       params->thumb_path = strdup(MF_ICON_THUMBNAIL_VIDEO);
+                               } else if (type == FILE_TYPE_IMAGE) {
+                                       params->thumb_path = strdup(MF_ICON_IMAGE);
+                               } else {
+                                       params->thumb_path = strdup(MF_ICON_THUMBNAIL_UNKOWN);
+                               }
+                               params->real_thumb_flag = FALSE;
+                               error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
+                       }
+               }
+       }  else if (params->thumb_path && ecore_file_exists(params->thumb_path)) {
+               if (params->real_thumb_flag == FALSE) {
+                       error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
+               }
+       } else if (!ecore_file_exists(params->thumb_path)) {
+               mf_error("thumb_path[%s] is not exist", params->thumb_path);
+               free(params->thumb_path);
+               params->thumb_path = NULL;
+               /*set default icon*/
+               fsFileType type = FILE_TYPE_NONE;
+               type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
+               if (mf_file_attr_is_dir(params->m_ItemName->str)) {
+                       if (mf_fm_svc_wrapper_is_root_path(params->ap->mf_Status.path->str) == MYFILE_OTG) {
+                               params->thumb_path = strdup(MF_ICON_EXTERNAL_DEVICE);
+                       } else {
+                               params->thumb_path = strdup(MF_ICON_FOLDER);
+                       }
+
+               } else {
+                       if (type == FILE_TYPE_VIDEO) {
+                               params->thumb_path = strdup(MF_ICON_THUMBNAIL_VIDEO);
+                       } else if (type == FILE_TYPE_IMAGE) {
+                               params->thumb_path = strdup(MF_ICON_IMAGE);
+                       } else {
+                               params->thumb_path = strdup(DEFAULT_ICON);
+                       }
+               }
+               params->real_thumb_flag = FALSE;
+               error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
+       }
+       if (error_code != 0) {
+               mf_callback_create_thumbnail(params, mf_callback_thumb_created_cb);
+       }
+}
+
+static void __mf_gengrid_icon_clicked(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(event_info == NULL, "event_info is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       int ret = 0;
+
+       if (ap->mf_Status.more == MORE_EDIT || ap->mf_Status.more == MORE_SHARE_EDIT)
+               return;
+       if (item != NULL) {
+               elm_gengrid_item_selected_set(item, EINA_FALSE);
+               mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
+               mf_retm_if(selected == NULL, "selected is NULL");
+               mf_retm_if(selected->m_ItemName == NULL, "selected->m_ItemName is NULL");
+               mf_retm_if(selected->m_ItemName->str == NULL, "selected->m_ItemName->str is NULL");
+               if (mf_fm_svc_wrapper_is_dir(selected->m_ItemName)) {
+
+                       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+                       mf_retm_if(pNavi_s == NULL, "get navi structure failed");
+                       GString *new_path = NULL;
+                       int error_code = 0;
+                       bool result = FALSE;
+
+                       if (ap->mf_Status.more == MORE_SEARCH)
+                               ap->mf_Status.more = MORE_DEFAULT;
+
+
+                       new_path = g_string_new(selected->m_ItemName->str);
+
+#ifdef MYFILE_USB_OTG
+                       /* if click items under otg root path, it means some disk take into use*/
+                       error_code = mf_file_attr_is_disk_link(new_path->str, &result);
+                       if (error_code == 0 && result == TRUE) {        /* a usb disk take into use */
+                               /*
+                               **we don't need to set the previous device flag to be false
+                               **because click cannot jump from one device to another
+                               */
+                               mf_otg_set_node_using_flag(ap, new_path->str,TRUE);
+                       }
+#endif
+                       /*set new path */
+                       if (ap->mf_Status.path != NULL) {
+                               g_string_free(ap->mf_Status.path, TRUE);
+                               ap->mf_Status.path = NULL;
+                       }
+                       ap->mf_Status.path = new_path;
+
+                       if (pNavi_s->pCurrentPath != NULL) {
+                               free(pNavi_s->pCurrentPath);
+                               pNavi_s->pCurrentPath = NULL;
+                       }
+                       pNavi_s->pCurrentPath = g_strdup(new_path->str);
+
+                       if (ap->mf_Status.view_type == mf_view_root) {
+                               ap->mf_Status.view_type = mf_view_normal;
+#ifdef MYFILE_SPLIT_VIEW
+                               if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                                       if (ap->mf_Status.view_type != mf_view_root_category && ap->mf_Status.view_type != mf_view_root) {
+                                               mf_navi_bar_reset_panes_main(ap);
+                                       }
+                               }
+#endif
+                       }
+                       mf_widget_refresh_view(ap);
+               } else {
+                       ret = mf_launch_service(ap, selected->m_ItemName->str);
+               }
+       }
+       MF_TRACE_END;
+}
+static void __mf_gengrid_item_check_changed(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+
+       mfItemData_s *itemData = (mfItemData_s *)data;
+       struct appdata *ap = (struct appdata *)itemData->ap;
+
+       itemData->m_checked = elm_check_state_get(obj);
+       if (itemData->m_checked) {
+               ap->mf_MainWindow.pEditView.iCheckedCount++;
+       } else {
+               ap->mf_MainWindow.pEditView.iCheckedCount--;
+       }
+
+       //if (ap->mf_MainWindow.pEditView.pSelectAllCheckBox) {
+
+               if (ap->mf_MainWindow.pEditView.iTotalCount == ap->mf_MainWindow.pEditView.iCheckedCount) {
+                       ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_TRUE;
+               } else {
+                       ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_FALSE;
+               }
+               //elm_check_state_pointer_set(ap->mf_MainWindow.pEditView.pSelectAllCheckBox, &ap->mf_MainWindow.pEditView.bSelectAllChecked);
+       //}
+
+       elm_gengrid_item_selected_set(itemData->item, itemData->m_checked);
+       mf_genlist_gl_edit_item_selected(ap);
+       MF_TRACE_END;
+}
+
+void mf_gengrid_select_all(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+       Evas_Object *gengrid = ap->mf_MainWindow.pEditView.pGengrid;
+       mfItemData_s *it_data = NULL;
+       Elm_Object_Item *it = NULL;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while (it) {
+               it_data = elm_object_item_data_get(it);
+               if (it_data) {
+                       if (it_data->ap->mf_Status.more == MORE_SHARE_EDIT) {
+                               if (mf_file_attr_is_dir(it_data->m_ItemName->str)) {
+                                       it = elm_genlist_item_next_get(it);
+                                       continue;
+                               }
+                       }
+                       it_data->m_checked = ap->mf_MainWindow.pEditView.bSelectAllChecked;
+                       elm_check_state_set(it_data->pCheckBox, it_data->m_checked);
+                       elm_gengrid_item_selected_set(it_data->item, it_data->m_checked);
+               }
+               it = elm_gengrid_item_next_get(it);
+       }
+
+}
+
+void mf_gengrid_edit_select(void *data, int *count)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+       Evas_Object *gengrid = ap->mf_MainWindow.pEditView.pGengrid;
+       mfItemData_s *itemData = NULL;
+       Elm_Object_Item *it = NULL;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while (it) {
+               itemData = elm_object_item_data_get(it);
+               if (itemData->m_checked) {
+                       ap->mf_Status.flagFileSelect = TRUE;
+                       (*count)++;
+               }
+
+               it = elm_gengrid_item_next_get(it);
+       }
+       MF_TRACE_END;
+}
+
+void mf_gengrid_create_grid_items(void *data, Evas_Object *grid, Eina_List *file_list)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(grid == NULL, "grid is NULL");
+       mf_retm_if(file_list == NULL, "file_list is NULL");
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+       Eina_List *l = NULL;
+       void  *pData = NULL;
+       mfItemData_s *m_TempItem = NULL;
+
+       elm_gengrid_clear(grid);
+
+       mf_debug("****************** count is [%d]", eina_list_count(file_list));
+       EINA_LIST_FOREACH(file_list, l, pData) {
+               char *real_name = NULL;
+
+               fsNodeInfo *pNode = (fsNodeInfo *)pData;
+               if (pNode == NULL)
+                       continue;
+               real_name = g_strconcat(pNode->path, "/", pNode->name, NULL);
+
+               if (real_name == NULL) {
+                       continue;
+               }
+               mf_debug("************** gengrid item is [%s]", real_name);
+               m_TempItem = (mfItemData_s *) malloc(sizeof(mfItemData_s));
+               if (m_TempItem == NULL) {
+                       free(real_name);
+                       real_name = NULL;
+                       continue;
+               }
+               Elm_Object_Item *it = NULL;
+
+               m_TempItem->m_ItemName = g_string_new(real_name);
+               m_TempItem->size = NULL;
+               m_TempItem->create_date = NULL;
+               m_TempItem->m_checked = FALSE;
+               m_TempItem->pCheckBox = NULL;
+               m_TempItem->thumb_path = NULL;
+               m_TempItem->real_thumb_flag = FALSE;
+               m_TempItem->unregister_lang_mgr = TRUE;
+               m_TempItem->media = NULL;
+               m_TempItem->ap = ap;
+
+               if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY
+                   || ap->mf_Status.more == MORE_INTERNAL_MOVE || ap->mf_Status.more == MORE_DATA_COPYING || ap->mf_Status.more == MORE_DATA_MOVING){
+                       mf_debug();
+                       it = elm_gengrid_item_append(grid, &gic, m_TempItem, NULL, NULL);
+                       mf_language_mgr_register_gengrid_item(it);
+               } else {
+                       mf_debug();
+                       it = elm_gengrid_item_append(grid, &gic, m_TempItem, __mf_gengrid_icon_clicked, ap);
+                       mf_language_mgr_register_gengrid_item(it);
+               }
+               m_TempItem->item = it;
+               free(real_name);
+               mf_debug();
+       }
+}
+
+void mf_gengrid_refresh(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       mf_gengrid_create_grid_items(ap, ap->mf_MainWindow.pNaviGengrid, ap->mf_FileOperation.file_list);
+}
+
+
+void mf_gengrid_item_select(void *data, Evas_Object *pGengrid, int *file_count, int *dir_count)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(pGengrid == NULL, "pGengrid is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       Elm_Object_Item *it = NULL;
+       mfItemData_s *itemData = NULL;
+       //int error_code = 0;
+
+       it = elm_gengrid_first_item_get(pGengrid);
+       while (it) {
+               itemData = elm_object_item_data_get(it);
+               if (itemData->m_checked) {
+                       if (mf_file_attr_is_dir(itemData->m_ItemName->str)) {
+                               //bool systemfolder = FALSE;
+                               ap->mf_Status.flagFolderSelect = TRUE;
+                               (*dir_count)++;
+                       } else {
+                               ap->mf_Status.flagFileSelect = TRUE;
+                               (*file_count)++;
+                       }
+               }
+
+               it = elm_gengrid_item_next_get(it);
+
+       }
+}
+
+void mf_gengrid_get_grid_selected_files(Evas_Object *gengrid, Eina_List **list)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(gengrid == NULL, "gengrid is NULL");
+
+       mfItemData_s *itemData = NULL;
+       Elm_Object_Item *it = NULL;
+       GString *pTemp = NULL;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while (it) {
+               itemData = elm_object_item_data_get(it);
+               if (itemData->m_checked) {
+                       pTemp = g_string_new(itemData->m_ItemName->str);
+                       *list = eina_list_append(*list, pTemp);
+               }
+               it = elm_gengrid_item_next_get(it);
+       }
+       MF_TRACE_END;
+
+}
+
+void mf_gengrid_get_grid_selected_items(Evas_Object *gengrid, Eina_List **list)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(gengrid == NULL, "gengrid is NULL");
+
+       mfItemData_s *itemData = NULL;
+       Elm_Object_Item *it = NULL;
+
+       it = elm_gengrid_first_item_get(gengrid);
+       while (it) {
+               itemData = elm_object_item_data_get(it);
+               if (itemData->m_checked) {
+                       *list = eina_list_append(*list, itemData);
+               }
+               it = elm_gengrid_item_next_get(it);
+       }
+       MF_TRACE_END;
+
+}
+
+static Evas_Object *__mf_gengrid_item_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       MF_TRACE_BEGIN;
+       mfItemData_s *params = (mfItemData_s *) data;
+       struct appdata *ap = (struct appdata *)params->ap;
+       mf_retvm_if(params == NULL, NULL, "param is NULL");
+       mf_retvm_if(params->m_ItemName == NULL, NULL, "m_ItemName is NULL");
+       mf_retvm_if(part == NULL, NULL, "part is NULL");
+       mf_retvm_if(obj == NULL, NULL, "obj is NULL");
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       if (!strcmp(part, "elm.swallow.icon")) {
+               __mf_gengrid_get_thumbnail(params);
+
+               Evas_Object *icon = elm_image_add(obj);
+               elm_image_file_set(icon, params->thumb_path, NULL);
+               elm_image_aspect_fixed_set(icon, EINA_FALSE);
+               evas_object_show(icon);
+               return icon;
+       } else if (!strcmp(part, "elm.swallow.block") && (params->ap->mf_Status.more == MORE_EDIT || params->ap->mf_Status.more == MORE_SHARE_EDIT)) {
+               if (ap->mf_Status.more == MORE_SHARE_EDIT) {
+                       if (mf_file_attr_is_dir(params->m_ItemName->str)) {
+                               return NULL;
+                       }
+               }
+               Evas_Object *layout = elm_layout_add(obj);
+               elm_layout_theme_set(layout, "gengrid", "item", "block/default");
+               evas_object_propagate_events_set(layout, 0);
+               evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN, (Evas_Object_Event_Cb)mf_callback_rename_create_cb, params);
+               return layout;
+       } else if (!strcmp(part, "elm.swallow.end") && (params->ap->mf_Status.more == MORE_EDIT || params->ap->mf_Status.more == MORE_SHARE_EDIT))
+       {
+               if (ap->mf_Status.more == MORE_SHARE_EDIT) {
+                       if (mf_file_attr_is_dir(params->m_ItemName->str)) {
+                               return NULL;
+                       }
+               }
+               Evas_Object *ck = elm_check_add(obj);
+               mf_retvm_if(ck == NULL, NULL, "ck is NULL");
+               elm_object_focus_set(ck, EINA_FALSE);
+               params->pCheckBox = ck;
+               elm_object_style_set(ck, "grid");
+               evas_object_propagate_events_set(ck, 1);
+               mf_debug("params is [%p]params->m_checked is [%d]",params, params->m_checked);
+               elm_check_state_set(ck, params->m_checked);
+               elm_gengrid_item_selected_set(params->item, params->m_checked);
+               evas_object_smart_callback_add(ck, "changed", __mf_gengrid_item_check_changed, params);
+               evas_object_show(ck);
+               return ck;
+       }
+       return NULL;
+}
+
+static char *__mf_gengrid_item_label_get(void *data, Evas_Object * obj, const char *part)
+{
+       MF_TRACE_BEGIN;
+       mfItemData_s *params = (mfItemData_s *) data;
+       mf_retv_if(params == NULL, NULL);
+
+       if (strcmp(part, "elm.text") == 0) {
+               /* supporting multi-lang for default folders */
+
+               if (g_strcmp0(params->m_ItemName->str, PHONE_FOLDER) == 0) {
+                       return g_strdup(GET_SYS_STR(MF_LABEL_PHONE));
+               } else if (g_strcmp0(params->m_ItemName->str, MEMORY_FOLDER) == 0) {
+                       return g_strdup(GET_SYS_STR(MF_LABEL_MMC));
+               } else if (g_strcmp0(params->m_ItemName->str, OTG_FOLDER) == 0) {
+                       return g_strdup(GET_STR(MF_LABEL_OTG));
+               }else {
+                       if (params->ap->mf_Status.more == MORE_SEARCH &&params->ap->mf_Status.search_filter) {
+                               char *markup_name = NULL;
+                               bool res = false;
+                               markup_name = (char *)mf_util_search_markup_keyword(ecore_file_file_get(params->m_ItemName->str), params->ap->mf_Status.search_filter, &res);
+                               if(res) {
+                                       MF_TRACE_END;
+                                       return g_strdup(markup_name);
+                               }
+                       }
+
+                       if (params->ap->mf_Status.iExtensionState == MF_EXTENSION_HIDE && !mf_file_attr_is_dir(params->m_ItemName->str)) {
+                               return mf_fm_svc_get_file_name(params->m_ItemName);
+
+                       } else {
+                               return g_strdup(ecore_file_file_get(params->m_ItemName->str));
+                       }
+               }
+       }  else {
+               return strdup(_(""));
+       }
+       MF_TRACE_END;
+}
+
+static void __mf_gengrid_item_del(void *data, Evas_Object * obj)
+{
+       mfItemData_s *params = (mfItemData_s *) data;
+       assert(params);
+       if (params->m_ItemName) {
+               g_string_free(params->m_ItemName, TRUE);
+               params->m_ItemName = NULL;
+       }
+       if (params->thumb_path) {
+               free(params->thumb_path);
+               params->thumb_path = NULL;
+       }
+       if (params->create_date) {
+               free(params->create_date);
+               params->create_date = NULL;
+       }
+       if (params->size) {
+               free(params->size);
+               params->size = NULL;
+       }
+       if (params->media) {
+               media_info_cancel_thumbnail(params->media);
+               media_info_destroy(params->media);
+               params->media = NULL;
+       }
+       free(params);
+       return;
+}
+
+
+
+void mf_gengrid_gen_style_set()
+{
+       gic.item_style = "default_gridtext";
+       gic.func.text_get = __mf_gengrid_item_label_get;
+       gic.func.content_get = __mf_gengrid_item_icon_get;
+       gic.func.state_get = NULL;
+       gic.func.del = __mf_gengrid_item_del;
+}
+
+Evas_Object *mf_gengrid_create(Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *grid = NULL;
+       grid = mf_gengrid_create_grid(parent);
+       mf_gengrid_gen_style_set();
+       return grid;
+}
+
+Evas_Object *mf_gengrid_create_grid (Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       Evas_Object *grid = NULL;
+       grid = elm_gengrid_add(parent);
+       evas_object_size_hint_weight_set(grid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(grid, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_focus_set(grid, EINA_FALSE);
+
+       elm_gengrid_align_set(grid, 0.0, 0.0);
+       elm_gengrid_horizontal_set(grid, EINA_FALSE);
+       elm_scroller_bounce_set(grid, EINA_FALSE, EINA_TRUE);
+       elm_gengrid_multi_select_set(grid, EINA_TRUE);
+       evas_object_show(grid);
+       return grid;
+}
+
+void mf_gengrid_create_list_default_style(Evas_Object *pGengrid, void *data, Eina_List *dir_list,
+                               Eina_List *file_list)
+{
+
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(pGengrid == NULL, "pGengrid is NULL");
+       /*0.    variable definition and parameter check*/
+       struct appdata *ap = (struct appdata *)data;
+
+       fsNodeInfo *pNode = NULL;
+       Eina_List *l = NULL;
+
+       EINA_LIST_FOREACH(dir_list, l, pNode) {
+               mf_widget_item_append(pGengrid, pNode, ap);
+       }
+       /*      add file items into the genlist */
+
+       EINA_LIST_FOREACH(file_list, l, pNode) {
+               mf_widget_item_append(pGengrid, pNode, ap);
+       }
+}
+
+static void __mf_gengrid_thumbs_longpressed(void *data, Evas_Object *obj,
+                                   void *event_info)
+{
+       mf_retm_if(event_info == NULL, "event_info is NULL");
+
+       mfItemData_s *it_data = elm_object_item_data_get(event_info);
+       mf_retm_if(it_data == NULL, "it_data is NULL");
+
+       mf_context_popup_create_gengrid(it_data);
+}
+Evas_Object *mf_gengrid_create_list(void *data, Evas_Object *parent)
+{
+
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       Evas_Object *gengrid = NULL;
+       Eina_List *file_list = NULL;
+       Eina_List *dir_list = NULL;
+
+
+       if (ap->mf_Status.view_type == mf_view_root_category) {
+               file_list = ap->mf_FileOperation.category_list;
+       } else {
+               file_list = ap->mf_FileOperation.file_list;
+               dir_list = ap->mf_FileOperation.folder_list;
+       }
+
+       gengrid = mf_gengrid_create(parent);
+
+       evas_object_smart_callback_add(gengrid, "longpressed",
+                                      __mf_gengrid_thumbs_longpressed, ap);
+       elm_gengrid_item_size_set(gengrid, MF_HD_GENGRID_ITEM_WIDTH, MF_HD_GENGRID_ITEM_HEIGTH);
+
+       if (gengrid == NULL) {
+               return NULL;
+       }
+       evas_object_smart_callback_add(gengrid, "selected", __mf_gengrid_icon_clicked, ap);
+       mf_gengrid_create_list_default_style(gengrid, ap, dir_list, file_list);
+       MF_TRACE_END;
+       return gengrid;
+}
+
diff --git a/src/widget/mf-genlist.c b/src/widget/mf-genlist.c
new file mode 100644 (file)
index 0000000..1be7531
--- /dev/null
@@ -0,0 +1,1843 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <math.h>
+
+#include <vconf-keys.h>
+#include <vconf.h>
+#include <media_content.h>
+
+#include "mf-main.h"
+#include "mf-widget.h"
+#include "mf-util.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-fs-util.h"
+#include "mf-gadget.h"
+#include "mf-dlog.h"
+#include "mf-ta.h"
+#include "mf-delete.h"
+#include "mf-launch.h"
+#include "mf-resource.h"
+#include "mf-language-mgr.h"
+
+#define NUM_OF_GENLIST_STYLES 4
+#define NUM_OF_ITEMS 50
+#define MF_DATE_FORMAT_DD_MM_YYYY "%d-%b-%Y "
+#define MF_DATE_FORMAT_MM_DD_YYYY "%b-%d-%Y "
+#define MF_DATE_FORMAT_YYYY_MM_DD "%Y-%b-%d "
+#define MF_DATE_FORMAT_YYYY_DD_MM "%Y-%d-%b "
+#define MF_TIME_FORMAT_12HOUR "%l:%M%p"
+#define MF_TIME_FORMAT_24HOUR "%H:%M"
+#define MF_ROUND_D(x, dig) (floor((x) * pow(10, dig+1) + 0.5) / pow(10, dig+1))
+
+typedef struct {
+       void *data;
+       Evas_Object *pGenlist;
+} renameData_s;
+
+/****  Global definition       ****/
+Elm_Genlist_Item_Class itc, userfolderitc, categoryitc, newfolderitc, indexitc;
+Elm_Genlist_Item_Class left_itc;
+Elm_Genlist_Item_Class search_itc;
+static Elm_Genlist_Item_Class itch;
+
+
+/***   static function declare ***/
+static char *__mf_genlist_gl_label_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__mf_genlist_gl_default_icon_get(void *data, Evas_Object *obj, const char *part);
+static Evas_Object *__mf_genlist_gl_edit_icon_get(void *data, Evas_Object *obj, const char *part);
+static void __mf_genlist_gl_del(void *data, Evas_Object *obj);
+static Eina_Bool __mf_genlist_gl_state_get(void *data, Evas_Object *obj, const char *part);
+static inline void __mf_genlist_get_thumbnail(mfItemData_s *params);
+
+
+void mf_genlist_rename_done(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input ad is NULL");
+
+       if (ap->mf_FileOperation.rename_item && elm_genlist_item_flip_get(ap->mf_FileOperation.rename_item)) {
+               //elm_genlist_item_flip_set(ap->mf_FileOperation.rename_item, EINA_FALSE);
+               //elm_genlist_item_select_mode_set(ap->mf_FileOperation.rename_item, ELM_OBJECT_SELECT_MODE_DEFAULT);
+       }
+       mf_callback_rename_save_cb(ap, obj, event_info);
+       MF_TRACE_END;
+}
+
+
+static Evas_Object *__mf_genlist_rename_editfiled_create(void *data, Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       mfItemData_s *params = (mfItemData_s *) data;
+       mf_retvm_if(params == NULL, NULL, "param is NULL");
+       mf_retvm_if(params->m_ItemName == NULL, NULL, "m_ItemName is NULL");
+
+       struct appdata *ap = (struct appdata *)params->ap;
+       mf_retvm_if(ap == NULL, NULL, "input parameter data error");
+
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+       Evas_Object *edit_field = NULL;
+       Evas_Object *entry = NULL;
+       GString *filename = NULL;
+
+       edit_field = mf_widget_create_editfield(parent, &entry);
+
+       evas_object_size_hint_weight_set(edit_field, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(edit_field, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_object_signal_emit(edit_field, "elm,state,eraser,show", "elm");
+       //elm_editfield_eraser_set(edit_field, EINA_TRUE);
+
+       elm_entry_autocapital_type_set(entry, ELM_AUTOCAPITAL_TYPE_NONE);
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+       params->ap->mf_MainWindow.pEntry = entry;
+       params->ap->mf_MainWindow.pEditField = edit_field;
+
+       if (params->ap->mf_FileOperation.to_rename != NULL) {
+               g_string_free(params->ap->mf_FileOperation.to_rename, TRUE);
+               params->ap->mf_FileOperation.to_rename = NULL;
+       }
+       params->ap->mf_FileOperation.to_rename = g_string_new((char *)params->m_ItemName->str);
+
+
+       /* the below is sample code for control entry. It is not mandatory.*/
+
+       /* set guide text */
+       filename = mf_fm_svc_wrapper_get_file_name(ap->mf_FileOperation.to_rename);
+       char *guide_text = NULL;
+       SAFE_FREE_CHAR(ap->mf_FileOperation.file_name_suffix);
+       if (!mf_file_attr_is_dir(ap->mf_FileOperation.to_rename->str)) {
+               mf_debug();
+               char *ext = NULL;
+               char *name_without_ext = NULL;
+               name_without_ext = g_strdup(ap->mf_FileOperation.to_rename->str);
+               mf_file_attr_get_file_ext(ap->mf_FileOperation.to_rename->str, &ext);
+               mf_debug("ext is %s", ext);
+               if (ext && strlen(ext) != 0) {
+                       mf_debug();
+                       name_without_ext[strlen(name_without_ext) - strlen(ext) - 1] = '\0';
+                       ap->mf_FileOperation.file_name_suffix = strdup(ext);
+                       mf_debug("name_without_ext is [%s]\n", name_without_ext);
+                       if (strlen(name_without_ext)) {
+                               guide_text = elm_entry_utf8_to_markup(ecore_file_file_get(name_without_ext));
+                       } else {
+                               guide_text = elm_entry_utf8_to_markup(filename->str);
+                       }
+               } else {
+                       guide_text = elm_entry_utf8_to_markup(filename->str);
+               }
+
+               SAFE_FREE_CHAR(ext);
+               SAFE_FREE_CHAR(name_without_ext);
+       } else {
+               guide_text = elm_entry_utf8_to_markup(filename->str);
+       }
+
+       if (ap->mf_FileOperation.file_name_suffix) {
+               limit_filter_data.max_char_count = (MYFILE_FILE_NAME_LEN_MAX - mf_util_character_count_get(ap->mf_FileOperation.file_name_suffix) - 1);
+       } else {
+               limit_filter_data.max_char_count = MYFILE_FILE_NAME_LEN_MAX;
+       }
+
+       limit_filter_data.max_byte_count = 0;
+       elm_entry_markup_filter_append(ap->mf_MainWindow.pEntry, elm_entry_filter_limit_size, &limit_filter_data);
+       elm_entry_input_panel_return_key_type_set(ap->mf_MainWindow.pEntry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
+
+       elm_entry_entry_set(ap->mf_MainWindow.pEntry, guide_text);
+       /*elm_entry_entry_set(entry, ecore_file_file_get(params->m_ItemName->str));*/
+       elm_entry_cursor_end_set(entry);
+
+       SAFE_FREE_CHAR(guide_text);
+       SAFE_FREE_GSTRING(filename);
+
+       evas_object_smart_callback_add(entry, "activated", mf_genlist_rename_done, params->ap);
+       evas_object_smart_callback_add(entry, "changed", mf_callback_imf_changed_cb, params->ap);
+       evas_object_smart_callback_add(entry, "maxlength,reached", mf_callback_max_len_reached_cb, params->ap);
+       evas_object_smart_callback_add(entry, "preedit,changed",
+                                      mf_callback_imf_preedit_change_cb, ap);
+
+       elm_object_signal_callback_add(edit_field, "elm,eraser,clicked", "elm", mf_callback_eraser_clicked_cb, entry);
+       evas_object_show(entry);
+       elm_object_focus_set(entry, EINA_TRUE);
+
+       MF_TRACE_END;
+       return edit_field;
+}
+
+void mf_genlist_gl_mode_sweep_set(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(event_info == NULL, "event_info is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is null");
+
+#ifndef MYFILE_ADD_TO_HOME
+#ifndef        MYFILE_DETAILS
+       if (ap->mf_Status.view_type == mf_view_root)
+               return;
+#endif
+#endif
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_genlist_rename_done(ap, NULL, NULL);
+               return;
+       } else if(ap->mf_Status.more == MORE_EDIT || ap->mf_Status.more == MORE_SHARE_EDIT) {
+               return;
+       }
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_callback_destory_rename(ap);
+       }
+       /* Start genlist sweep */
+       Elm_Object_Item *it = (Elm_Object_Item *)elm_genlist_decorated_item_get(obj);
+       if (it && (it != event_info)) {
+               elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
+               elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
+       } else {
+               mf_debug("no decorated mode item");
+       }
+
+       elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_TRUE);
+       elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_NONE);
+
+       MF_TRACE_END;
+}
+
+void mf_genlist_gl_mode_sweep_unset(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is null");
+#ifndef MYFILE_ADD_TO_HOME
+#ifndef        MYFILE_DETAILS
+       if (ap->mf_Status.view_type == mf_view_root)
+               return;
+#endif
+#endif
+
+       if (!event_info)
+               return;
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_genlist_rename_done(ap, NULL, NULL);
+               return;
+       } else if(ap->mf_Status.more == MORE_EDIT || ap->mf_Status.more == MORE_SHARE_EDIT) {
+               return;
+       }
+
+
+       /* Finish genlist sweep */
+       elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_FALSE);
+       elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_DEFAULT);
+       MF_TRACE_END;
+}
+
+void mf_genlist_gl_mode_cancel(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is null");
+#ifndef MYFILE_ADD_TO_HOME
+#ifndef        MYFILE_DETAILS
+       if (ap->mf_Status.view_type == mf_view_root)
+               return;
+#endif
+#endif
+       if (!obj)
+               return;
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               //mf_genlist_rename_done(ap, NULL, NULL);
+               return;
+       } else if(ap->mf_Status.more == MORE_EDIT || ap->mf_Status.more == MORE_SHARE_EDIT) {
+               return;
+       }
+       /* Get sweeped item */
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_genlist_decorated_item_get(obj);
+
+
+       /* Finish genlist sweep */
+       if (it) {
+               elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
+               elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
+       }
+       MF_TRACE_END;
+}
+
+/**    label related   **/
+static char *__mf_genlist_gl_label_get(void *data, Evas_Object * obj, const char *part)
+{
+
+       mfItemData_s *params = (mfItemData_s *) data;
+       mf_retv_if(params == NULL, NULL);
+       mf_debug("part=%s", part);
+       if (strcmp(part, "elm.text") == 0) {
+               /* supporting multi-lang for default folders */
+               if (g_strcmp0(params->m_ItemName->str, PHONE_FOLDER) == 0) {
+                       return g_strdup(GET_SYS_STR(MF_LABEL_PHONE));
+               } else if (g_strcmp0(params->m_ItemName->str, MEMORY_FOLDER) == 0) {
+                       return g_strdup(GET_SYS_STR(MF_LABEL_MMC));
+               } else if (g_strcmp0(params->m_ItemName->str, OTG_FOLDER) == 0) {
+                       return g_strdup(GET_STR(MF_LABEL_OTG));
+               } else {
+                       if (params->ap->mf_Status.more == MORE_SEARCH &&params->ap->mf_Status.search_filter) {
+                               char *markup_name = NULL;
+                               bool res = false;
+                               markup_name = (char *)mf_util_search_markup_keyword(ecore_file_file_get(params->m_ItemName->str), params->ap->mf_Status.search_filter, &res);
+                               if(res) {
+                                       return g_strdup(markup_name);
+                               }
+                       }
+                       if (params->ap->mf_Status.iExtensionState == MF_EXTENSION_HIDE && !mf_file_attr_is_dir(params->m_ItemName->str)) {
+                               return mf_fm_svc_get_file_name(params->m_ItemName);
+
+                       } else {
+                               return g_strdup(ecore_file_file_get(params->m_ItemName->str));
+                       }
+               }
+       } else if (strcmp(part, "elm.uptitle.text") == 0) {
+               return g_strdup(params->m_ItemName->str);
+       } else if (strcmp(part, "elm.slide_base.text") == 0) {
+               return g_strdup(ecore_file_file_get(params->m_ItemName->str));
+       } else if (strcmp(part, "elm.slide.text.1") == 0) {
+               return g_strdup(ecore_file_file_get(params->m_ItemName->str));
+       } else if (strcmp(part, "elm.text.1") == 0) {
+               if (g_strcmp0(params->m_ItemName->str, PHONE_FOLDER) == 0) {
+                       return g_strdup(GET_SYS_STR(MF_LABEL_PHONE));
+               } else if (g_strcmp0(params->m_ItemName->str, MEMORY_FOLDER) == 0) {
+                       return g_strdup(GET_SYS_STR(MF_LABEL_MMC));
+               } else if (g_strcmp0(params->m_ItemName->str, OTG_FOLDER) == 0) {
+                       return g_strdup(GET_STR(MF_LABEL_OTG));
+               } else if (params->ap->mf_Status.more == MORE_SEARCH &&params->ap->mf_Status.search_filter) {
+                       char *markup_name = NULL;
+                       bool res = false;
+                       markup_name = (char *)mf_util_search_markup_keyword(ecore_file_file_get(params->m_ItemName->str), params->ap->mf_Status.search_filter, &res);
+                       if(res) {
+                               return g_strdup(markup_name);
+                       }
+               }
+               if (params->ap->mf_Status.iExtensionState == MF_EXTENSION_HIDE && !mf_file_attr_is_dir(params->m_ItemName->str)) {
+                       return mf_fm_svc_get_file_name(params->m_ItemName);
+
+               } else {
+                       return g_strdup(ecore_file_file_get(params->m_ItemName->str));
+               }
+       } else if (strcmp(part, "elm.text.2") == 0) {
+
+               if (params->ap->mf_Status.more == MORE_SEARCH &&params->ap->mf_Status.search_filter) {
+                       int root_len = 0;
+                       char *new_path = NULL;
+                       GString *parent_path = NULL;
+                       parent_path = mf_fm_svc_wrapper_get_file_parent_path(params->m_ItemName);
+                       if (parent_path) {
+                               switch(mf_fm_svc_wrapper_get_location(parent_path->str)) {
+                               case MYFILE_PHONE:
+                                       root_len = strlen(PHONE_FOLDER);
+                                       new_path = g_strconcat(GET_SYS_STR(MF_LABEL_PHONE), parent_path->str + root_len, NULL);
+                                       break;
+                               case MYFILE_MMC:
+                                       root_len = strlen(MEMORY_FOLDER);
+                                       new_path = g_strconcat(GET_SYS_STR(MF_LABEL_MMC), parent_path->str + root_len, NULL);
+                                       break;
+                               case MYFILE_OTG:
+                                       root_len = strlen(OTG_FOLDER);
+                                       new_path = g_strconcat(GET_STR(MF_LABEL_OTG), parent_path->str + root_len, NULL);
+                                       break;
+                               default:
+                                       break;
+                               }
+                               SAFE_FREE_GSTRING(parent_path);
+                       }
+
+                       return new_path;
+               } else if (params->ap->mf_Status.more != MORE_SEARCH
+                                                       && params->ap->mf_Status.view_type == mf_view_root_category) {
+                       int root_len = 0;
+                       char *new_path = NULL;
+                       GString *parent_path = NULL;
+                       parent_path = mf_fm_svc_wrapper_get_file_parent_path(params->m_ItemName);
+                       if (parent_path) {
+                               switch(mf_fm_svc_wrapper_get_location(parent_path->str)) {
+                               case MYFILE_PHONE:
+                                       root_len = strlen(PHONE_FOLDER);
+                                       new_path = g_strconcat(GET_SYS_STR(MF_LABEL_PHONE), parent_path->str + root_len, NULL);
+                                       break;
+                               case MYFILE_MMC:
+                                       root_len = strlen(MEMORY_FOLDER);
+                                       new_path = g_strconcat(GET_SYS_STR(MF_LABEL_MMC), parent_path->str + root_len, NULL);
+                                       break;
+                               case MYFILE_OTG:
+                                       root_len = strlen(OTG_FOLDER);
+                                       new_path = g_strconcat(GET_SYS_STR(MF_LABEL_OTG), parent_path->str + root_len, NULL);
+                                       break;
+                               default:
+                                       break;
+                               }
+                               SAFE_FREE_GSTRING(parent_path);
+                       }
+
+                       return new_path;
+               } else {
+                       if (params->ap->mf_Status.flagViewType != MF_VIEW_SYTLE_LIST_DETAIL) {
+                               int iSortTypeValue = 0;
+                               mf_util_get_vconf_value(VCONF_TYPE_SORT_TYPE, &iSortTypeValue);
+                               if (iSortTypeValue == MYFILE_SORT_BY_SIZE_S2L || iSortTypeValue == MYFILE_SORT_BY_SIZE_L2S) {
+                                       if (params->size) {
+                                               return g_strdup(params->size);
+                                       } else {
+                                               return NULL;
+                                       }
+                               } else if (iSortTypeValue == MYFILE_SORT_BY_DATE_O2R || iSortTypeValue == MYFILE_SORT_BY_DATE_R2O) {
+                                       if (params->create_date) {
+                                               return g_strdup(params->create_date);
+                                       } else {
+                                               return NULL;
+                                       }
+                               } else {
+                                       return NULL;
+                               }
+                       } else {
+                               if (mf_file_attr_is_dir(params->m_ItemName->str)) {
+                                       Eina_List *file_list = NULL;
+                                       Eina_List *folder_list = NULL;
+                                       int ret = 0;
+                                       ret = mf_fs_oper_read_dir(params->m_ItemName->str, &folder_list, &file_list);
+                                       if (ret == MYFILE_ERR_NONE) {
+                                               int count = 0;
+                                               count = eina_list_count(file_list) + eina_list_count(folder_list);
+                                               mf_util_free_eina_list_with_data(&file_list, MYFILE_TYPE_FSNODE);
+                                               mf_util_free_eina_list_with_data(&folder_list, MYFILE_TYPE_FSNODE);
+                                               return g_strdup_printf("%d items", count);
+                                       } else {
+                                               return g_strdup(_(""));
+                                       }
+                               } else {
+                                       if (params->size) {
+                                               return g_strdup(params->size);
+                                       } else {
+                                               return NULL;
+                                       }
+                               }
+                       }
+
+               }
+       } else if (strcmp(part, "elm.text.3") == 0) {
+               if (params->create_date) {
+                       return g_strdup(params->create_date);
+               } else {
+                       return NULL;
+               }
+
+       } else {
+               return g_strdup(_(""));
+       }
+}
+
+/**    icon related    **/
+static Evas_Object *__mf_genlist_gl_default_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+       Evas_Object *layout = NULL;
+       mfItemData_s *params = (mfItemData_s *) data;
+
+       mf_retvm_if(params == NULL, NULL, "param is NULL");
+       mf_retvm_if(params->m_ItemName == NULL, NULL, "m_ItemName is NULL");
+       mf_retvm_if(part == NULL, NULL, "part is NULL");
+       mf_retvm_if(obj == NULL, NULL, "obj is NULL");
+       mf_debug("part=%s", part);
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+               Evas_Object *thumb = NULL;
+               Evas_Object *ic_memory = NULL;
+               MF_STORAGE is_in_mmc = FALSE;
+               char *key = NULL;
+               const char *memory_icon_path = MF_ICON_MEMORY_SUB;
+
+               __mf_genlist_get_thumbnail(params);
+               layout = mf_widget_create_layout(obj, EDJ_NAME, GRP_THUMBNAIL_ONLY);
+               evas_object_size_hint_aspect_set(layout, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1);
+               if (layout) {
+                       thumb = elm_image_add(layout);
+                       elm_object_focus_set(thumb, EINA_FALSE);
+                       if (thumb == NULL) {
+                               mf_error("thumb is NULL");
+                               return NULL;
+                       }
+                       elm_image_file_set(thumb, params->thumb_path, NULL);
+                       elm_object_part_content_set(layout, "thumbnail", thumb);
+
+                       mf_file_attr_get_store_type_by_full(params->m_ItemName->str, &is_in_mmc);
+                       if (is_in_mmc == MYFILE_MMC) {
+                               ic_memory = elm_image_add(layout);
+                               elm_object_focus_set(ic_memory, EINA_FALSE);
+                               elm_image_file_set(ic_memory, memory_icon_path, key);
+                               evas_object_show(ic_memory);
+                               elm_object_part_content_set(layout, "myfile.memory_icon_multi.sub", ic_memory);
+                       }
+
+                       fsFileType type = FILE_TYPE_NONE;
+                       type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
+                       if (type == FILE_TYPE_VIDEO) {
+                               const char *play_icon_path = MF_ICON_VIDEO_PLAY;
+                               Evas_Object *play_icon = NULL;
+                               play_icon = elm_image_add(layout);
+                               elm_object_focus_set(play_icon, EINA_FALSE);
+                               elm_image_file_set(play_icon, play_icon_path, key);
+                               evas_object_show(play_icon);
+                               elm_object_part_content_set(layout, "video_play", play_icon);
+                       }
+               }
+       } else if (!strcmp(part, "elm.icon.2")) {
+               if (params->ap->mf_Status.more == MORE_EDIT || params->ap->mf_Status.more == MORE_SHARE_EDIT) {
+                       return NULL;
+               }
+               Evas_Object *entry_button = NULL;
+               Evas_Object *entry_icon = NULL;
+               entry_button = elm_button_add(obj);
+               elm_object_style_set(entry_button, "circle/empty");
+
+               entry_icon = elm_image_add(entry_button);
+               char *play_icon = strdup(MF_ICON_ENTRY_FOLDER);
+               elm_image_file_set(entry_icon, play_icon, NULL);
+               evas_object_size_hint_aspect_set(entry_icon, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+               elm_object_part_content_set(entry_button, "icon", entry_icon);
+               evas_object_propagate_events_set(entry_button, EINA_FALSE);
+               evas_object_smart_callback_add(entry_button, "pressed", mf_callback_entry_button_pressed_cb, play_icon);
+               evas_object_smart_callback_add(entry_button, "unpressed", mf_callback_entry_button_unpressed_cb, play_icon);
+               evas_object_smart_callback_add(entry_button, "clicked", (Evas_Smart_Cb)mf_callback_entry_cb, (void*)params);
+               return entry_button;
+       }
+       else if (!strcmp(part, "elm.base.swallow.detail")) {
+       } else if (!strcmp(part, "elm.slide.swallow.1")) {
+               if (params->ap->mf_Status.view_type == mf_view_root && params->ap->mf_Status.more != MORE_SEARCH) {
+               }
+               else
+               {
+                       layout = elm_button_add(obj);
+                       elm_object_style_set(layout, "sweep/multiline");
+                       elm_object_text_set(layout, GET_SYS_STR(LABEL_RENAME));
+                       mf_language_mgr_register_object(layout, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_RENAME);
+                       evas_object_smart_callback_add(layout, "clicked", (Evas_Smart_Cb) mf_callback_rename_button_callback, data);
+               }
+       } else if (!strcmp(part, "elm.slide.swallow.2")) {
+
+               if (params->ap->mf_Status.view_type == mf_view_root && params->ap->mf_Status.more != MORE_SEARCH) {
+
+               } else {
+                       layout = elm_button_add(obj);
+                       elm_object_style_set(layout, "sweep/delete");
+                       elm_object_text_set(layout, GET_SYS_STR(LABEL_DELETE));
+                       mf_language_mgr_register_object(layout, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_DELETE);
+                       evas_object_smart_callback_add(layout, "clicked", mf_callback_delete_button_cb, data);
+               }
+       } else if (!strcmp(part, "elm.slide.swallow.3")) {
+               layout = elm_button_add(obj);
+               elm_object_style_set(layout, "sweep/delete");
+               elm_object_text_set(layout, GET_SYS_STR(LABEL_DELETE));
+               mf_language_mgr_register_object(layout, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_DELETE);
+               evas_object_smart_callback_add(layout, "clicked", mf_callback_delete_button_cb, data);
+       } else if (!strcmp(part, "elm.slide.swallow.4")) {
+               layout = elm_button_add(obj);
+               elm_object_style_set(layout, "sweep/delete");
+               elm_object_text_set(layout, GET_SYS_STR(LABEL_DELETE));
+               mf_language_mgr_register_object(layout, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_DELETE);
+               evas_object_smart_callback_add(layout, "clicked", mf_callback_delete_button_cb, data);
+       } else if (!strcmp(part, "elm.flip.content")) { /* this is used when the rename mode is enabled.*/
+               Evas_Object *edit_field = NULL;
+               edit_field = __mf_genlist_rename_editfiled_create(params, obj);
+               evas_object_propagate_events_set(edit_field, EINA_FALSE);
+               return edit_field;
+       } else if (!strcmp(part, "elm.flip.icon")) {
+               Evas_Object *cancel_btn = mf_widget_util_create_button(obj, NULL, LABEL_CANCEL, NULL,
+                               mf_callback_cancel_cb, params->ap);
+               evas_object_show(cancel_btn);
+               return cancel_btn;
+       }
+       return layout;
+}
+
+void mf_genlist_item_check_changed_callback(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mfItemData_s *params = (mfItemData_s *) data;
+       mf_retm_if(params == NULL, "param is NULL");
+
+       struct appdata *ap = (struct appdata *)params->ap;
+       mf_retm_if(ap == NULL, "input parameter data error");
+       mf_retm_if(obj == NULL, "obj is NULL");
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_genlist_rename_done(ap, NULL, NULL);
+               params->m_checked = !params->m_checked;
+               elm_check_state_pointer_set(obj, &params->m_checked);
+               return;
+       }
+
+       if (params->m_checked) {
+               ap->mf_MainWindow.pEditView.iCheckedCount++;
+       } else {
+               ap->mf_MainWindow.pEditView.iCheckedCount--;
+       }
+
+
+       if (ap->mf_MainWindow.pEditView.iTotalCount == ap->mf_MainWindow.pEditView.iCheckedCount) {
+               ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_TRUE;
+       } else {
+               ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_FALSE;
+       }
+       mf_genlist_gl_edit_item_selected(ap);
+       MF_TRACE_END;
+}
+
+static void __mf_genlist_selected_all_items_set(Evas_Object *genlist, int value)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(genlist == NULL, "genlist is NULL");
+
+       mfItemData_s *it_data;
+       Elm_Object_Item *it;
+
+       it = elm_genlist_first_item_get(genlist);
+       while (it) {
+               it_data = elm_object_item_data_get(it);
+               if (it_data && it_data->ap->mf_Status.more == MORE_SHARE_EDIT) {
+                       if (mf_file_attr_is_dir(it_data->m_ItemName->str)) {
+                               it = elm_genlist_item_next_get(it);
+                               continue;
+                       }
+               }
+               if (it_data)
+                       it_data->m_checked = value;
+               //elm_check_state_pointer_set(it_data->pCheckBox, it_data->m_checked);
+               elm_genlist_item_fields_update(it, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               it = elm_genlist_item_next_get(it);
+       }
+       MF_TRACE_END;
+}
+
+static void __mf_genlist_check_select_all(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+       if (ap->mf_MainWindow.pEditView.bSelectAllChecked) {
+               ap->mf_MainWindow.pEditView.iCheckedCount = ap->mf_MainWindow.pEditView.iTotalCount;
+       } else {
+               ap->mf_MainWindow.pEditView.iCheckedCount = 0;
+       }
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               __mf_genlist_selected_all_items_set(ap->mf_MainWindow.pEditView.pGenlist, ap->mf_MainWindow.pEditView.bSelectAllChecked);
+       }else {
+               mf_gengrid_select_all(ap);
+       }
+       mf_genlist_gl_edit_item_selected(ap);
+       MF_TRACE_END;
+}
+
+
+void __mf_genlist_select_all_layout_mouse_down_cb(void *data, Evas * evas, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_genlist_rename_done(ap, NULL, NULL);
+               return;
+       }
+
+       ap->mf_MainWindow.pEditView.bSelectAllChecked = !ap->mf_MainWindow.pEditView.bSelectAllChecked;
+       //elm_check_state_pointer_set(ap->mf_MainWindow.pEditView.pSelectAllCheckBox, &ap->mf_MainWindow.pEditView.bSelectAllChecked);
+
+       __mf_genlist_check_select_all(ap);
+       MF_TRACE_END;
+}
+
+
+void __mf_genlist_select_all_check_changed_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_genlist_rename_done(ap, NULL, NULL);
+               ap->mf_MainWindow.pEditView.bSelectAllChecked = !ap->mf_MainWindow.pEditView.bSelectAllChecked;
+               //elm_check_state_pointer_set(ap->mf_MainWindow.pEditView.pSelectAllCheckBox, &ap->mf_MainWindow.pEditView.bSelectAllChecked);
+               return;
+       }
+
+       __mf_genlist_check_select_all(ap);
+
+       MF_TRACE_END;
+}
+
+static Evas_Object *__mf_genlist_gl_edit_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+       Evas_Object *layout = NULL;
+       mfItemData_s *params = (mfItemData_s *) data;
+       struct appdata *ap = (struct appdata *)params->ap;
+
+       mf_retvm_if(params == NULL, NULL, "param is NULL");
+       mf_retvm_if(params->m_ItemName == NULL, NULL, "m_ItemName is NULL");
+       mf_retvm_if(part == NULL, NULL, "part is NULL");
+       mf_retvm_if(obj == NULL, NULL, "obj is NULL");
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       if (elm_genlist_decorate_mode_get(obj)) {
+               if (!strcmp(part, "elm.edit.icon.1")) {
+                       Evas_Object *check = NULL;
+                       check = elm_check_add(obj);
+                       elm_object_focus_set(check, EINA_FALSE);
+                       evas_object_propagate_events_set(check, EINA_FALSE);
+                       elm_check_state_pointer_set(check, &params->m_checked);
+                       evas_object_smart_callback_add(check, "changed", mf_genlist_item_check_changed_callback, params);
+                       return check;
+               } else if (!strcmp(part, "elm.edit.icon.2")) {
+                       layout = elm_button_add(obj);
+                       elm_object_style_set(layout, "rename");
+                       evas_object_propagate_events_set(layout, EINA_FALSE);
+                       evas_object_smart_callback_add(layout, "clicked", mf_callback_rename_button_callback, params);
+                       return layout;
+               }
+       }
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.icon.1")) {
+               Evas_Object *thumb = NULL;
+               Evas_Object *ic_memory = NULL;
+               MF_STORAGE is_in_mmc = FALSE;
+               char *key = NULL;
+               const char *memory_icon_path = MF_ICON_MEMORY_SUB;
+
+               __mf_genlist_get_thumbnail(params);
+#ifdef USE_IMAGE_OBJECT
+               thumb = evas_object_image_add(evas_object_evas_get(obj));
+#else
+               thumb = elm_image_add(obj);
+               elm_object_focus_set(thumb, EINA_FALSE);
+#endif
+               if (thumb == NULL)
+                       mf_error("thumb is NULL");
+
+               if (thumb) {
+#ifdef USE_IMAGE_OBJECT
+                       int load_err = EVAS_LOAD_ERROR_NONE;
+                       evas_object_image_file_set(thumb, params->thumb_path, NULL);
+                       load_err = evas_object_image_load_error_get(thumb);
+
+                       if (load_err != EVAS_LOAD_ERROR_NONE) {
+                               evas_object_del(thumb);
+                               mf_error("load error code : %d", load_err);
+                       } else {
+                               evas_object_image_filled_set(thumb, EINA_TRUE);
+                       }
+#else
+                       elm_image_file_set(thumb, params->thumb_path, NULL);
+#endif
+                       layout = elm_layout_add(obj);
+                       elm_object_focus_set(layout, EINA_FALSE);
+                       elm_layout_file_set(layout, EDJ_NAME, GRP_THUMBNAIL_ONLY);
+                       elm_object_part_content_set(layout, "thumbnail", thumb);
+
+                       mf_file_attr_get_store_type_by_full(params->m_ItemName->str, &is_in_mmc);
+                       if (is_in_mmc == MYFILE_MMC) {
+                               ic_memory = elm_image_add(obj);
+                               elm_object_focus_set(ic_memory, EINA_FALSE);
+                               elm_image_file_set(ic_memory, memory_icon_path, key);
+                               evas_object_show(ic_memory);
+                               elm_object_part_content_set(layout, "myfile.memory_icon_multi.sub", ic_memory);
+                       }
+                       fsFileType type = FILE_TYPE_NONE;
+                       type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
+                       if (type == FILE_TYPE_VIDEO) {
+                               const char *play_icon_path = MF_ICON_VIDEO_PLAY;
+                               Evas_Object *play_icon = NULL;
+                               play_icon = elm_image_add(layout);
+                               elm_object_focus_set(play_icon, EINA_FALSE);
+                               elm_image_file_set(play_icon, play_icon_path, key);
+                               evas_object_show(play_icon);
+                               elm_object_part_content_set(layout, "video_play", play_icon);
+                       }
+               }
+       } else if (!strcmp(part, "elm.icon.2")) {
+               if (params->ap->mf_Status.more == MORE_EDIT || (params->ap->mf_Status.preMore == MORE_EDIT && params->ap->mf_Status.more == MORE_RENAME)) {
+                       return NULL;
+               }
+               Evas_Object *entry_button = NULL;
+               Evas_Object *entry_icon = NULL;
+               entry_button = elm_button_add(obj);
+               elm_object_style_set(entry_button, "circle/empty");
+
+               entry_icon = elm_image_add(entry_button);
+               char *play_icon = strdup(MF_ICON_ENTRY_FOLDER);
+               elm_image_file_set(entry_icon, play_icon, NULL);
+               evas_object_size_hint_aspect_set(entry_icon, EVAS_ASPECT_CONTROL_BOTH, 1, 1);
+               elm_object_part_content_set(entry_button, "icon", entry_icon);
+               evas_object_propagate_events_set(entry_button, EINA_FALSE);
+               evas_object_smart_callback_add(entry_button, "clicked", (Evas_Smart_Cb)mf_callback_entry_cb, (void*)params);
+               evas_object_smart_callback_add(entry_button, "pressed", mf_callback_entry_button_pressed_cb, play_icon);
+               evas_object_smart_callback_add(entry_button, "unpressed", mf_callback_entry_button_unpressed_cb, play_icon);
+               return entry_button;
+       } else if (!strcmp(part, "elm.swallow.end")) {
+               if (ap->mf_Status.rotation_type != MF_ROTATE_LANDSCAPE) {
+                       //bool systemfolder = false;
+                       //int error_code = 0;
+#if 0
+                       error_code = mf_fm_svc_wrapper_get_folder_foldersystem(params->m_ItemName, &systemfolder);
+                       if (systemfolder == FALSE) {
+#endif
+                       /*__mf_genlist_add_rename_button*/
+                       layout = elm_button_add(obj);
+                       //elm_object_focus_set(layout, EINA_FALSE);
+                       elm_object_style_set(layout, "rename");
+                       evas_object_propagate_events_set(layout, EINA_FALSE);
+                       evas_object_smart_callback_add(layout, "clicked", mf_callback_rename_button_callback, params);
+                       /*evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP, mf_callback_rename_button_callback, params);*/
+                       //}
+               }
+       } else if (!strcmp(part, "elm.flip.content")) { /* this is used when the rename mode is enabled.*/
+               Evas_Object *edit_field = NULL;
+               edit_field = __mf_genlist_rename_editfiled_create(params, obj);
+               evas_object_propagate_events_set(edit_field, EINA_FALSE);
+               return edit_field;
+       } else if (!strcmp(part, "elm.flip.icon")) {
+               Evas_Object *cancel_btn = mf_widget_util_create_button(obj, NULL, LABEL_CANCEL, NULL,
+                               mf_callback_cancel_cb, params->ap);
+               evas_object_show(cancel_btn);
+               return cancel_btn;
+       }
+
+       return layout;
+}
+
+
+static Evas_Object *__mf_genlist_gl_new_folder_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       if (!strcmp(part, "elm.icon")) {
+               int error_code = 0;
+               char *fileName = NULL;
+               char *fullpath = (char *)malloc(sizeof(char) * MYFILE_FILE_PATH_LEN_MAX);
+               if (fullpath == NULL) {
+                       return NULL;
+               }
+               GString *dest_fullpath;
+               static Elm_Entry_Filter_Limit_Size limit_filter;
+               Evas_Object *entry = ap->mf_MainWindow.pEntry;
+
+               Evas_Object *edit_field = ap->mf_MainWindow.pEditField;
+
+               limit_filter.max_char_count = MYFILE_FILE_NAME_LEN_MAX;
+               limit_filter.max_byte_count = 0;
+
+               memset(fullpath, 0, MYFILE_FILE_PATH_LEN_MAX);
+               fileName = elm_entry_markup_to_utf8(GET_SYS_STR(MF_LABEL_FOLDER));
+               snprintf(fullpath, (MYFILE_FILE_PATH_LEN_MAX), "%s/%s", (char *)ap->mf_Status.path->str, fileName);
+
+               dest_fullpath = g_string_new(fullpath);
+
+               elm_entry_markup_filter_append(ap->mf_MainWindow.pEntry, elm_entry_filter_limit_size, &limit_filter);
+               evas_object_smart_callback_add(ap->mf_MainWindow.pEntry, "maxlength,reached", mf_callback_max_len_reached_cb, ap);
+
+               if (mf_fm_svc_wrapper_detect_duplication(dest_fullpath)) {
+                       mf_debug("dectetion result is TRUE\ndest_fullpath is %s\n", dest_fullpath->str);
+                       error_code = mf_fm_svc_wrapper_file_auto_rename(ap, dest_fullpath, FILE_NAME_WITH_BRACKETS, &dest_fullpath);
+                       mf_debug("rename result is %s\n", dest_fullpath->str);
+                       memset(fullpath, 0, strlen(fullpath));
+                       int len = strlen(ap->mf_Status.path->str) + 1;
+                       strncpy(fullpath, dest_fullpath->str + len, MYFILE_FILE_PATH_LEN_MAX);
+                       /*memset(fileName,0,strlen(fileName));*/
+
+                       SAFE_FREE_CHAR(fileName);
+                       fileName = elm_entry_markup_to_utf8(fullpath);
+               }
+
+               /*elm_entry_entry_set(entry, ecore_file_file_get(params->m_ItemName->str));*/
+
+               elm_entry_entry_set(entry, fileName);
+               elm_entry_cursor_end_set(entry);
+
+               SAFE_FREE_CHAR(fullpath);
+               SAFE_FREE_GSTRING(dest_fullpath);
+               SAFE_FREE_CHAR(fileName);
+               return edit_field;
+       }
+       return NULL;
+}
+
+static Evas_Object *__mf_genlist_gl_rename_icon_get(void *data, Evas_Object * obj, const char *part)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       if (!strcmp(part, "elm.icon")) {
+               static Elm_Entry_Filter_Limit_Size limit_filter_data;
+               Evas_Object *edit_field = NULL;
+               Evas_Object *entry = NULL;
+               GString *filename = NULL;
+
+               edit_field = mf_widget_create_editfield(obj, &entry);
+
+               evas_object_size_hint_weight_set(edit_field, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(edit_field, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+
+               elm_entry_single_line_set(entry, EINA_TRUE);
+               elm_entry_scrollable_set(entry, EINA_TRUE);
+               elm_object_signal_emit(edit_field, "elm,state,eraser,show", "elm");
+               //elm_editfield_eraser_set(edit_field, EINA_TRUE);
+
+               elm_entry_autocapital_type_set(entry, ELM_AUTOCAPITAL_TYPE_NONE);
+               elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+               ap->mf_MainWindow.pEntry = entry;
+               ap->mf_MainWindow.pEditField = edit_field;
+
+
+               /* set guide text */
+               filename = mf_fm_svc_wrapper_get_file_name(ap->mf_FileOperation.to_rename);
+               char *guide_text = NULL;
+               SAFE_FREE_CHAR(ap->mf_FileOperation.file_name_suffix);
+               if (!mf_file_attr_is_dir(ap->mf_FileOperation.to_rename->str)) {
+                       mf_debug();
+                       char *ext = NULL;
+                       char *name_without_ext = NULL;
+                       name_without_ext = g_strdup(ap->mf_FileOperation.to_rename->str);
+                       mf_file_attr_get_file_ext(ap->mf_FileOperation.to_rename->str, &ext);
+                       mf_debug("ext is %s", ext);
+                       if (ext && strlen(ext) != 0) {
+                               mf_debug();
+                               name_without_ext[strlen(name_without_ext) - strlen(ext) - 1] = '\0';
+                               ap->mf_FileOperation.file_name_suffix = strdup(ext);
+                               mf_debug("name_without_ext is [%s]\n", name_without_ext);
+                               if (strlen(name_without_ext)) {
+                                       guide_text = elm_entry_utf8_to_markup(ecore_file_file_get(name_without_ext));
+                               } else {
+                                       guide_text = elm_entry_utf8_to_markup(filename->str);
+                               }
+                       } else {
+                               guide_text = elm_entry_utf8_to_markup(filename->str);
+                       }
+
+                       SAFE_FREE_CHAR(ext);
+                       SAFE_FREE_CHAR(name_without_ext);
+               } else {
+                       guide_text = elm_entry_utf8_to_markup(filename->str);
+               }
+
+               if (ap->mf_FileOperation.file_name_suffix) {
+                       limit_filter_data.max_char_count = (MYFILE_FILE_NAME_LEN_MAX - mf_util_character_count_get(ap->mf_FileOperation.file_name_suffix) - 1);
+               } else {
+                       limit_filter_data.max_char_count = MYFILE_FILE_NAME_LEN_MAX;
+               }
+
+               limit_filter_data.max_byte_count = 0;
+               elm_entry_markup_filter_append(ap->mf_MainWindow.pEntry, elm_entry_filter_limit_size, &limit_filter_data);
+
+
+               elm_entry_entry_set(ap->mf_MainWindow.pEntry, guide_text);
+               /*elm_entry_entry_set(entry, ecore_file_file_get(params->m_ItemName->str));*/
+               elm_entry_cursor_end_set(entry);
+
+               SAFE_FREE_CHAR(guide_text);
+               SAFE_FREE_GSTRING(filename);
+
+               //evas_object_smart_callback_add(entry, "activated", mf_genlist_rename_done, ap);
+               evas_object_smart_callback_add(entry, "changed", mf_callback_imf_changed_cb, ap);
+               evas_object_smart_callback_add(entry, "maxlength,reached", mf_callback_max_len_reached_cb, ap);
+               evas_object_smart_callback_add(entry, "preedit,changed",
+                                              mf_callback_imf_preedit_change_cb, ap);
+               elm_object_signal_callback_add(edit_field, "elm,eraser,clicked", "elm", mf_callback_eraser_clicked_cb, entry);
+               evas_object_show(entry);
+               elm_object_focus_set(entry, EINA_TRUE);
+               return edit_field;
+       }
+       return NULL;
+}
+
+/**    delete related  **/
+static void __mf_genlist_gl_del(void *data, Evas_Object * obj)
+{
+       MF_TRACE_BEGIN;
+       mfItemData_s *params = (mfItemData_s *) data;
+       assert(params);
+       if (params->ap->mf_Status.more == MORE_RENAME) {
+               if (params->item == params->ap->mf_FileOperation.rename_item) {
+                       mf_callback_destory_rename(params->ap);
+               }
+       }
+       if (params->m_ItemName) {
+               g_string_free(params->m_ItemName, TRUE);
+               params->m_ItemName = NULL;
+       }
+       if (params->thumb_path) {
+               free(params->thumb_path);
+               params->thumb_path = NULL;
+       }
+       if (params->create_date) {
+               free(params->create_date);
+               params->create_date = NULL;
+       }
+       if (params->size) {
+               free(params->size);
+               params->size = NULL;
+       }
+       if (params->flagExpand) {
+               params->flagExpand = false;
+       }
+       if (params->media) {
+               media_info_cancel_thumbnail(params->media);
+               media_info_destroy(params->media);
+               params->media = NULL;
+       }
+       free(params);
+       MF_TRACE_END;
+       return;
+}
+
+/**    state related   **/
+static Eina_Bool __mf_genlist_gl_state_get(void *data, Evas_Object * obj, const char *part)
+{
+       return EINA_FALSE;
+}
+
+/**    select related  **/
+/**    this function will be splited into several functions    **/
+void mf_genlist_gl_selected(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       if (item != NULL) {
+               mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
+
+               elm_genlist_item_selected_set(item, FALSE);
+
+               if (ap->mf_Status.flagNaviPush) {
+                       mf_debug("the transition of the naviframe is not finished");
+                       return;
+               }
+               if (ap->mf_Status.more == MORE_RENAME) {
+                       if (elm_genlist_item_flip_get(item)) {
+                               MF_TRACE_END;
+                               return;
+                       } else {
+                               mf_callback_rename_save_cb(ap, NULL, NULL);
+                               return;
+                       }
+               } else if (ap->mf_Status.more != MORE_EDIT && ap->mf_Status.more != MORE_SHARE_EDIT) {
+#ifdef MYFILE_SPLIT_VIEW
+                       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+                               mf_split_view_left_genlist_refresh(ap);
+                       }
+#endif
+                       mf_callback_click_cb(data, MFACTION_CLICK, selected->m_ItemName);
+               }
+       }
+       MF_TRACE_END;
+}
+#ifdef MYFILE_SPLIT_VIEW
+
+static void mf_genlist_split_left_items_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+
+       mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(event_info);
+       elm_genlist_item_selected_set(event_info, EINA_FALSE);
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+       Eina_Bool expanded = EINA_FALSE;
+       if (event_info) {
+               expanded = elm_genlist_item_expanded_get(event_info);
+               selected->flagExpand = !expanded;
+               mf_error("selected->flagExpand is [%d]", selected->flagExpand);
+               elm_object_item_data_set(selected->item, selected);
+               elm_genlist_item_fields_update(selected->item, "elm.icon", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               elm_genlist_item_expanded_set(event_info, !expanded);
+       }
+       MF_TRACE_END;
+}
+
+Elm_Object_Item *mf_genlist_split_left_items_append( void *data, Evas_Object *pGenlist, Elm_Object_Item *parent_item, Eina_List *dir_list)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "input parameter data error");
+
+       mf_retvm_if(pGenlist == NULL, NULL, "input parameter pGenlist error");
+       mf_retvm_if(parent_item == NULL, NULL, "input parameter parent_item error");
+
+       fsNodeInfo *pNode = NULL;
+       mfItemData_s *m_TempItem = NULL;
+       Eina_List *l = NULL;
+       Elm_Object_Item *expand = NULL;
+
+       int real_len = 0;
+       int current_len = 0;
+       bool flagExpand = false;
+
+       EINA_LIST_FOREACH(dir_list, l, pNode) {
+               char *real_name = NULL;
+               real_name = g_strconcat(pNode->path, "/", pNode->name, NULL);
+               if (real_name == NULL) {
+                       continue;
+               }
+
+               m_TempItem = (mfItemData_s *) malloc(sizeof(mfItemData_s));
+               if (m_TempItem == NULL) {
+                       free(real_name);
+                       real_name = NULL;
+                       continue;
+               }
+
+
+               Elm_Object_Item *it = NULL;
+               m_TempItem->m_ItemName = g_string_new(real_name);
+               m_TempItem->size = NULL;
+               m_TempItem->create_date = NULL;
+               m_TempItem->m_checked = FALSE;
+               m_TempItem->pCheckBox = NULL;
+               m_TempItem->thumb_path = NULL;
+               m_TempItem->flagExpand = false;
+               m_TempItem->real_thumb_flag = FALSE;
+               m_TempItem->unregister_lang_mgr = TRUE;
+               m_TempItem->media = NULL;
+               m_TempItem->ap = ap;
+
+               if (ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+                       char *tempdate = mf_util_icu_translate(ap, pNode->date);
+                       if (tempdate == NULL)
+                               m_TempItem->create_date = g_strdup("N/A");
+                       else {
+                               m_TempItem->create_date = g_strdup(tempdate);
+                               free(tempdate);
+                       }
+
+               }
+
+               it = elm_genlist_item_append(pGenlist, &left_itc, m_TempItem, parent_item, ELM_GENLIST_ITEM_TREE, mf_genlist_split_left_items_sel, ap);
+               real_len = strlen(real_name);
+               current_len = strlen(ap->mf_Status.path->str);
+               if (real_len > current_len && !flagExpand) {
+                       expand = NULL;
+               } else {
+                       if (strncmp(real_name, ap->mf_Status.path->str, strlen(real_name)) == 0) {
+                               mf_debug("real_name is [%s] currnet path is [%s]", real_name, ap->mf_Status.path->str);
+                               expand = it;
+                               flagExpand = true;
+                       }
+               }
+               m_TempItem->item = it;
+               free(real_name);
+       }
+       MF_TRACE_END;
+       return expand;
+}
+
+
+Elm_Object_Item *mf_genlist_split_root_item_append(void *data, Evas_Object *pGenlist, const char *name)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "input parameter data error");
+       mf_retvm_if(pGenlist == NULL, NULL, "input parameter pGenlist error");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       mfItemData_s *m_TempItem = NULL;
+       Elm_Object_Item *it = NULL;
+
+       mf_genlist_data_init(ap, &m_TempItem, name);
+       m_TempItem->unregister_lang_mgr = TRUE;
+
+       it = elm_genlist_item_append(pGenlist, &left_itc, m_TempItem, NULL, ELM_GENLIST_ITEM_TREE, mf_genlist_split_left_items_sel, ap);
+
+       m_TempItem->item = it;
+       return it;
+}
+
+void mf_genlist_split_root_items_append(Evas_Object *pGenlist, void *data)
+{
+       MF_TRACE_BEGIN;
+       /*0.    variable definition and parameter check*/
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+       mf_retm_if(pGenlist == NULL, "input parameter pGenlist error");
+
+       /*4.    append items to the genlist*/
+       Elm_Object_Item *it = NULL;
+
+       //mf_genlist_data_init(ap, &m_TempItem, PHONE_FOLDER);
+
+       it = mf_genlist_split_root_item_append(ap, pGenlist, PHONE_FOLDER);
+       //it = elm_genlist_item_append(pGenlist, &left_itc, m_TempItem, NULL, ELM_GENLIST_ITEM_NONE, mf_genlist_gl_sel, m_TempItem);
+
+       //m_TempItem->item = it;
+       ap->mf_MainWindow.sSplitData.phone_item = it;
+
+       if (ap->mf_Status.iStorageState & MYFILE_MMC) {
+               it = mf_genlist_split_root_item_append(ap, pGenlist, MEMORY_FOLDER);
+               ap->mf_MainWindow.sSplitData.mmc_item = it;
+
+       }
+
+       if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+
+               it = mf_genlist_split_root_item_append(ap, pGenlist, OTG_FOLDER);
+               ap->mf_MainWindow.sSplitData.otg_item = it;
+
+       }
+       MF_TRACE_END;
+
+}
+
+void mf_genlist_split_left_genlist_style(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+       left_itc.item_style = "1text.2/expandable_n_depth";
+       left_itc.func.text_get = __mf_genlist_gl_label_get;
+       left_itc.func.content_get  = __mf_genlist_gl_default_icon_get;
+       left_itc.func.state_get = __mf_genlist_gl_state_get;
+       left_itc.func.del = __mf_genlist_gl_del;
+
+       elm_genlist_decorate_mode_set(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist, EINA_FALSE);
+
+}
+
+#endif
+/**    edit mode related       **/
+void mf_genlist_gl_sel(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mfItemData_s *selected = data;
+
+       struct appdata *ap = (struct appdata *)selected->ap;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+       if (ap->mf_Status.more != MORE_EDIT && ap->mf_Status.more != MORE_SHARE_EDIT) {
+               return;
+       }
+
+       Evas_Object *genlist = elm_object_item_widget_get(selected->item);
+
+       if (genlist && elm_genlist_decorate_mode_get(genlist)) {
+
+               selected->m_checked = !selected->m_checked;
+               if (selected->m_checked) {
+                       ap->mf_MainWindow.pEditView.iCheckedCount++;
+               } else {
+                       ap->mf_MainWindow.pEditView.iCheckedCount--;
+               }
+               //if (ap->mf_MainWindow.pEditView.pSelectAllCheckBox) {
+                       if (ap->mf_MainWindow.pEditView.iTotalCount == ap->mf_MainWindow.pEditView.iCheckedCount) {
+                               ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_TRUE;
+                       } else {
+                               ap->mf_MainWindow.pEditView.bSelectAllChecked = EINA_FALSE;
+                       }
+                       //elm_check_state_pointer_set(ap->mf_MainWindow.pEditView.pSelectAllCheckBox, &ap->mf_MainWindow.pEditView.bSelectAllChecked);
+               //}
+               elm_genlist_item_fields_update(selected->item, "elm.edit.icon.1", ELM_GENLIST_ITEM_FIELD_CONTENT);
+       }
+       mf_genlist_gl_edit_item_selected(ap);
+       MF_TRACE_END;
+}
+
+void mf_genlist_genlist_item_select(void *data, Evas_Object *pGenlist, int *file_count, int *dir_count)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(pGenlist == NULL, "pGenlist is NULL");
+
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mfItemData_s *itemData = NULL;
+       Elm_Object_Item *it = NULL;
+       //int error_code = 0;
+       it = elm_genlist_first_item_get(pGenlist);
+       while (it) {
+               itemData = elm_object_item_data_get(it);
+               if (itemData->m_checked) {
+                       if (itemData->m_ItemName == NULL || itemData->m_ItemName->str == NULL) {
+                               continue;
+                       }
+                       if (mf_file_attr_is_dir(itemData->m_ItemName->str)) {
+                               //bool systemfolder = FALSE;
+                               ap->mf_Status.flagFolderSelect = TRUE;
+                               (*dir_count)++;
+                       } else {
+                               ap->mf_Status.flagFileSelect = TRUE;
+                               (*file_count)++;
+                       }
+               }
+
+               it = elm_genlist_item_next_get(it);
+
+       }
+       MF_TRACE_END;
+}
+
+void mf_genlist_gl_edit_item_selected(void *data)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.more != MORE_EDIT && ap->mf_Status.more != MORE_SHARE_EDIT)
+               return;
+       Evas_Object *notify_popup = NULL;
+       char *label = NULL;
+       int count_dir = 0;
+       int count_file = 0;
+
+       ap->mf_Status.flagFolderSelect = FALSE;
+       ap->mf_Status.flagFileSelect = FALSE;
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               Evas_Object *pGenlist = ap->mf_MainWindow.pEditView.pGenlist;
+               mf_genlist_genlist_item_select(ap, pGenlist, &count_file, &count_dir);
+
+       } else {
+               Evas_Object *pGengrid = ap->mf_MainWindow.pEditView.pGengrid;
+               mf_gengrid_item_select(ap, pGengrid, &count_file, &count_dir);
+       }
+
+       if (ap->mf_Status.flagFolderSelect) {
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_EDIT_ALL, true);
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_USER_FOLDER_SEL, false);
+       } else if (ap->mf_Status.flagFileSelect){
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_EDIT_ALL, false);
+       } else {
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_EDIT_ALL, true);
+       }
+
+       char lable_file[MYFILE_LABEL_STRING_LENGTH] = { '\0', };
+       int count = 0;
+       /*1 TODO: need to update for multi-language*/
+       count = count_file + count_dir;
+       snprintf(lable_file, sizeof(lable_file), "%d", (count));
+       label = g_strconcat(GET_SYS_STR(MF_LABEL_SELECTED), " (", lable_file, ")", NULL);
+
+       if (count > 0) {
+               notify_popup = mf_widget_create_notify_popup(ap, ap->mf_MainWindow.pNaviLayout, label, mf_notify_popup_normal, true, NULL);
+               ap->mf_MainWindow.pLabelLayout = notify_popup;
+       }else {
+               SAFE_FREE_OBJ(ap->mf_MainWindow.pLabelLayout);
+       }
+       SAFE_FREE_CHAR(label);
+}
+
+
+/**    button related  **/
+
+
+static inline void __mf_genlist_get_thumbnail(mfItemData_s *params)
+{
+       int error_code = 0;
+       if (params->thumb_path == NULL) {
+               if (mf_file_attr_is_dir(params->m_ItemName->str)) {
+                       if (params->ap->mf_Status.view_type == mf_view_root) {
+                               params->thumb_path = strdup(MF_ICON_FOLDER);
+                       } else if (mf_fm_svc_wrapper_is_root_path(params->ap->mf_Status.path->str) == MYFILE_OTG) {
+                               params->thumb_path = strdup(MF_ICON_EXTERNAL_DEVICE);
+                       } else {
+                               if (params->flagExpand == true) {
+                                       params->thumb_path = strdup(MF_ICON_FOLDER_OPEN);
+                               } else {
+                                       params->thumb_path = strdup(MF_ICON_FOLDER);
+                               }
+                       }
+                       params->real_thumb_flag = TRUE;
+               } else {
+                       const char *icon_path = NULL;
+                       int thumbnail_type = 0;
+                       thumbnail_type = mf_file_attr_get_file_icon(params->m_ItemName->str, &error_code, MF_ROTATE_PORTRAIT, &icon_path, &params->media);
+                       if (icon_path && ecore_file_exists(icon_path)) {
+                               params->thumb_path = strdup(icon_path);
+                               params->real_thumb_flag = TRUE;
+                       } else {        /*must be image/video file*/
+                               fsFileType type = FILE_TYPE_NONE;
+                               type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
+
+                               if (type == FILE_TYPE_VIDEO) {
+                                       params->thumb_path = strdup(MF_ICON_VIDEO);
+                               } else if (type == FILE_TYPE_IMAGE) {
+                                       params->thumb_path = strdup(MF_ICON_IMAGE);
+                               } else {
+                                       params->thumb_path = strdup(DEFAULT_ICON);
+                               }
+                               params->real_thumb_flag = FALSE;
+                               error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
+                       }
+               }
+       } else if (params->thumb_path && ecore_file_exists(params->thumb_path)) {
+               if (mf_file_attr_is_dir(params->m_ItemName->str)) {
+                       if (mf_fm_svc_wrapper_is_root_path(params->ap->mf_Status.path->str) == MYFILE_OTG) {
+                               params->thumb_path = strdup(MF_ICON_EXTERNAL_DEVICE);
+                       } else {
+                               if (params->flagExpand == true) {
+                                       params->thumb_path = strdup(MF_ICON_FOLDER_OPEN);
+                               } else {
+                                       params->thumb_path = strdup(MF_ICON_FOLDER);
+                               }
+                       }
+               }
+               if (params->real_thumb_flag == FALSE) {
+                       error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
+               }
+       } else if (!ecore_file_exists(params->thumb_path)) {
+
+               {
+                       mf_error("thumb_path[%s] is not exist", params->thumb_path);
+                       free(params->thumb_path);
+                       params->thumb_path = NULL;
+
+                       fsFileType type = FILE_TYPE_NONE;
+                       type = mf_file_attr_get_file_type_by_mime(params->m_ItemName->str);
+                       if (mf_file_attr_is_dir(params->m_ItemName->str)) {
+                               if (mf_fm_svc_wrapper_is_root_path(params->ap->mf_Status.path->str) == MYFILE_OTG) {
+                                       params->thumb_path = strdup(MF_ICON_EXTERNAL_DEVICE);
+                               } else {
+                                       if (params->flagExpand == true) {
+                                               params->thumb_path = strdup(MF_ICON_FOLDER_OPEN);
+                                       } else {
+                                               params->thumb_path = strdup(MF_ICON_FOLDER);
+                                       }
+                               }
+
+                       } else {
+                               if (type == FILE_TYPE_VIDEO) {
+                                       params->thumb_path = strdup(MF_ICON_VIDEO);
+                               } else if (type == FILE_TYPE_IMAGE) {
+                                       params->thumb_path = strdup(MF_ICON_IMAGE);
+                               } else {
+                                       params->thumb_path = strdup(DEFAULT_ICON);
+                               }
+                       }
+                       /*set default icon*/
+                       params->real_thumb_flag = FALSE;
+                       error_code = MYFILE_ERR_GET_THUMBNAIL_FAILED;
+               }
+       }
+       if (error_code != 0) {
+               mf_callback_create_thumbnail(params, mf_callback_thumb_created_cb);
+       }
+}
+
+
+void mf_genlist_update_edit_view_item_style(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+
+       userfolderitc.decorate_item_style = NULL;
+       userfolderitc.func.text_get = __mf_genlist_gl_label_get;
+       userfolderitc.func.content_get = __mf_genlist_gl_edit_icon_get;
+       userfolderitc.func.del = __mf_genlist_gl_del;
+       userfolderitc.decorate_all_item_style = "edit_default";
+
+       itc.decorate_item_style = NULL;
+       itc.func.text_get = __mf_genlist_gl_label_get;
+       itc.func.content_get = __mf_genlist_gl_edit_icon_get;
+       itc.func.del = __mf_genlist_gl_del;
+       itc.decorate_all_item_style = "edit_default";
+
+       categoryitc.decorate_item_style = NULL;
+       categoryitc.func.text_get = __mf_genlist_gl_label_get;
+       categoryitc.func.content_get = __mf_genlist_gl_edit_icon_get;
+       categoryitc.func.del = __mf_genlist_gl_del;
+       categoryitc.decorate_all_item_style = "edit_default";
+
+}
+
+
+void mf_genlist_set_category_list_style()
+{
+       categoryitc.item_style = "2text.2icon.4";
+       categoryitc.decorate_item_style = "mode/slide2";
+       categoryitc.func.text_get = __mf_genlist_gl_label_get;
+       categoryitc.func.content_get  = __mf_genlist_gl_default_icon_get;
+       categoryitc.func.state_get = __mf_genlist_gl_state_get;
+       categoryitc.func.del = __mf_genlist_gl_del;
+       categoryitc.decorate_all_item_style = "edit_default";
+}
+void mf_genlist_data_init(void *data, mfItemData_s **itemData, const char *item_name)
+{
+
+       MF_TRACE_BEGIN;
+       /*0.    variable definition and parameter check*/
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+
+       *itemData = (mfItemData_s *)malloc(sizeof(mfItemData_s));
+       if (*itemData == NULL) {
+               mf_debug("itemData malloc failed");
+       } else {
+               memset(*itemData, 0, sizeof(mfItemData_s));
+               if (item_name) {
+                       (*itemData)->m_ItemName = g_string_new(item_name);
+               } else {
+                       (*itemData)->m_ItemName = NULL;
+               }
+               (*itemData)->m_checked = false;
+               (*itemData)->size = NULL;
+               (*itemData)->create_date = NULL;
+               (*itemData)->thumb_path = 0;
+               (*itemData)->pCheckBox = NULL;
+               (*itemData)->item = NULL;
+               (*itemData)->real_thumb_flag = false;
+               (*itemData)->flagExpand = false;
+               (*itemData)->media = NULL;
+               (*itemData)->ap = ap;
+       }
+}
+
+
+void mf_genlist_update_default_view_item_style(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+
+       categoryitc.decorate_item_style = userfolderitc.decorate_item_style = itc.decorate_item_style = "mode/slide";
+       categoryitc.func.text_get = userfolderitc.func.text_get = itc.func.text_get = __mf_genlist_gl_label_get;
+       categoryitc.func.content_get = userfolderitc.func.content_get = itc.func.content_get = __mf_genlist_gl_default_icon_get;
+       categoryitc.func.state_get = userfolderitc.func.state_get = itc.func.state_get = __mf_genlist_gl_state_get;
+       categoryitc.func.del = userfolderitc.func.del = itc.func.del = __mf_genlist_gl_del;
+
+       elm_genlist_decorate_mode_set(ap->mf_MainWindow.pNaviGenlist, EINA_FALSE);
+}
+
+void mf_genlist_create_search_itc()
+{
+       MF_TRACE_BEGIN;
+       search_itc.item_style = "2text.1icon.4.tb";
+       search_itc.decorate_item_style = "mode/slide";
+       search_itc.func.text_get = __mf_genlist_gl_label_get;
+       search_itc.func.content_get = __mf_genlist_gl_default_icon_get;
+       search_itc.func.state_get = __mf_genlist_gl_state_get;
+       search_itc.func.del = __mf_genlist_gl_del;
+       search_itc.decorate_all_item_style = "edit_default";
+
+}
+
+
+void mf_genlist_create_data(mfItemData_s **m_TempItem, const char *name, void *data)
+{
+       mf_retm_if(m_TempItem == NULL, "m_TempItem is NULL");
+       mf_retm_if(name == NULL, "name is NULL");
+
+       *m_TempItem = (mfItemData_s *) calloc(1, sizeof(mfItemData_s));
+       if (*m_TempItem == NULL) {
+               return;
+       }
+
+       (*m_TempItem)->m_ItemName = g_string_new(name);
+       (*m_TempItem)->size = NULL;
+       (*m_TempItem)->create_date = NULL;
+       (*m_TempItem)->m_checked = FALSE;
+       (*m_TempItem)->pCheckBox = NULL;
+       (*m_TempItem)->thumb_path = NULL;
+       (*m_TempItem)->real_thumb_flag = FALSE;
+       (*m_TempItem)->media = NULL;
+       (*m_TempItem)->ap = (struct appdata *)data;
+
+}
+
+void mf_genlist_set_folder_edit_style()
+{
+       userfolderitc.decorate_all_item_style = NULL;
+}
+
+void mf_genlist_create_list_default_style(Evas_Object *pGenlist, void *data, Eina_List *dir_list,
+                                         Eina_List *file_list)
+{
+       MF_TRACE_BEGIN;
+       /*0.    variable definition and parameter check*/
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input parameter data error");
+
+       mf_retm_if(pGenlist == NULL, "input parameter pGenlist error");
+       /*0.5.  data list varaible set*/
+       /*1.    item style set */
+       MF_TA_ACUM_ITEM_BEGIN("        init genlist item class", 0);
+
+       userfolderitc.decorate_all_item_style = "edit_default";
+       itc.decorate_all_item_style = "edit_default";
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               userfolderitc.item_style = itc.item_style = "3text.1icon.1";
+
+       } else {
+               userfolderitc.item_style = itc.item_style = "1text.1icon.2";
+
+       }
+       if (ap->mf_Status.view_type == mf_view_root) {
+       } else {
+               userfolderitc.decorate_item_style = itc.decorate_item_style = "mode/slide2";
+       }
+       userfolderitc.func.text_get = itc.func.text_get = __mf_genlist_gl_label_get;
+       userfolderitc.func.content_get = itc.func.content_get = __mf_genlist_gl_default_icon_get;
+       userfolderitc.func.state_get = itc.func.state_get = __mf_genlist_gl_state_get;
+       userfolderitc.func.del = itc.func.del = __mf_genlist_gl_del;
+
+       MF_TA_ACUM_ITEM_END("        init genlist item class", 0);
+       /*3.    check if we need give no content view*/
+       /*4.    append items to the genlist*/
+       fsNodeInfo *pNode = NULL;
+       Eina_List *l = NULL;
+
+       MF_TA_ACUM_ITEM_BEGIN("        append genlist items", 0);
+
+       mf_debug("dir_list count is [%d] file is [%d]", eina_list_count(dir_list), eina_list_count(file_list));
+       /*      add default folder items into the genlist       */
+       EINA_LIST_FOREACH(dir_list, l, pNode) {
+               mf_widget_item_append(pGenlist, pNode, ap);
+       }
+       /*      add file items into the genlist */
+       mf_debug("view_type is [%d]", ap->mf_Status.view_type);
+       if (ap->mf_Status.view_type != mf_view_root) {
+               EINA_LIST_FOREACH(file_list, l, pNode) {
+                       mf_widget_item_append(pGenlist, pNode, ap);
+               }
+       }
+       MF_TA_ACUM_ITEM_END("        append genlist items", 0);
+       MF_TRACE_BEGIN;
+}
+
+Evas_Object *mf_genlist_create_list(void *data,Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       Evas_Object *genlist = NULL;
+       Eina_List *file_list = NULL;
+       Eina_List *dir_list = NULL;
+
+       /*      generate raw data list*/
+
+       if (ap->mf_Status.view_type == mf_view_root_category) {
+               file_list = ap->mf_FileOperation.category_list;
+       } else {
+               file_list = ap->mf_FileOperation.file_list;
+               dir_list = ap->mf_FileOperation.folder_list;
+       }
+
+/*      create Genlist*/
+       MF_TA_ACUM_ITEM_BEGIN("        create genlist", 0);
+       genlist = mf_widget_create_genlist(parent);
+       if (genlist == NULL) {
+               return NULL;
+       }
+       MF_TA_ACUM_ITEM_END("        create genlist", 0);
+       mf_debug("More is [%d]", ap->mf_Status.more);
+       switch (ap->mf_Status.more) {
+       MF_TA_ACUM_ITEM_BEGIN("        register smart callback for genlist", 0);
+       case MORE_DEFAULT:
+                       evas_object_smart_callback_add(genlist, "drag,start,right", mf_genlist_gl_mode_sweep_set, ap);
+                       evas_object_smart_callback_add(genlist, "drag,start,left", mf_genlist_gl_mode_sweep_unset, ap);
+                       evas_object_smart_callback_add(genlist, "drag,start,up", mf_genlist_gl_mode_cancel, ap);
+                       evas_object_smart_callback_add(genlist, "drag,start,down", mf_genlist_gl_mode_cancel, ap);
+       case MORE_INTERNAL_COPY:
+       case MORE_INTERNAL_MOVE:
+       case MORE_INTERNAL_COPY_MOVE:
+       case MORE_DATA_COPYING:
+       case MORE_DATA_MOVING:
+               evas_object_smart_callback_add(genlist, "selected", mf_genlist_gl_selected, ap);
+               MF_TA_ACUM_ITEM_END("        register smart callback for genlist", 0);
+               mf_genlist_create_list_default_style(genlist, ap, dir_list, file_list);
+               break;
+       default:
+               break;
+       }
+/*4.    add watcher:*/
+/*5.    clear temporary data*/
+       MF_TRACE_END;
+       return genlist;
+}
+
+void mf_genlist_get_list_selected_files(Evas_Object * pGenlist, Eina_List **list)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(pGenlist == NULL, "pGenlist is NULL");
+       Elm_Object_Item *item = NULL;
+       mfItemData_s *itemData = NULL;
+       GString *pTemp = NULL;
+
+       item = elm_genlist_first_item_get(pGenlist);
+       while (item) {
+               itemData = elm_object_item_data_get(item);
+               if (itemData->m_checked) {
+                       pTemp = g_string_new(itemData->m_ItemName->str);
+                       *list = eina_list_append(*list, pTemp);
+               }
+               item = elm_genlist_item_next_get(item);
+       }
+       MF_TRACE_END;
+}
+
+void mf_genlist_get_list_selected_items(Evas_Object * pGenlist, Eina_List **list)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(pGenlist == NULL, "pGenlist is NULL");
+       Elm_Object_Item *item = NULL;
+       mfItemData_s *itemData = NULL;
+
+       item = elm_genlist_first_item_get(pGenlist);
+       while (item) {
+               itemData = elm_object_item_data_get(item);
+               if (itemData->m_checked) {
+                       *list = eina_list_append(*list, itemData);
+               }
+               item = elm_genlist_item_next_get(item);
+       }
+       MF_TRACE_END;
+}
+
+Evas_Object *mf_genlist_create_list_new_folder_style(void *data)
+{
+
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       Evas_Object *genlist = NULL;
+       Evas_Object *pNaviBar = NULL;
+
+       pNaviBar = ap->mf_MainWindow.pNaviBar;
+
+       genlist = elm_genlist_add(pNaviBar);
+       //elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       elm_object_focus_set(genlist, EINA_FALSE);
+
+       newfolderitc.item_style = "dialogue/bg/1icon";
+       newfolderitc.func.text_get = NULL;
+       newfolderitc.func.content_get = __mf_genlist_gl_new_folder_icon_get;
+       newfolderitc.func.state_get = NULL;
+       newfolderitc.func.del = NULL;
+
+       elm_genlist_item_append(genlist, &newfolderitc, ap, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+       return genlist;
+}
+
+Evas_Object *mf_genlist_create_list_rename_style(void *data)
+{
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       Evas_Object *genlist = NULL;
+       Evas_Object *pNaviBar = NULL;
+
+       pNaviBar = ap->mf_MainWindow.pNaviBar;
+
+       genlist = elm_genlist_add(pNaviBar);
+
+       //elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       elm_object_focus_set(genlist, EINA_FALSE);
+
+       newfolderitc.item_style = "dialogue/bg/1icon";
+       newfolderitc.func.text_get = NULL;
+       newfolderitc.func.content_get = __mf_genlist_gl_rename_icon_get;
+       newfolderitc.func.state_get = NULL;
+       newfolderitc.func.del = NULL;
+
+       elm_genlist_item_append(genlist, &newfolderitc, ap, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+       return genlist;
+}
+
+
+void mf_genlist_clear(Evas_Object *genlist)
+{
+       assert(genlist);
+
+       Elm_Object_Item *it;
+       it = elm_genlist_first_item_get(genlist);
+       while (it) {
+               elm_object_item_del(it);
+               it = elm_genlist_first_item_get(genlist);
+       }
+
+}
+
+void mf_genlist_sweep_item_recover(Evas_Object *obj)
+{
+
+       mf_retm_if(obj == NULL, "obj is NULL");
+       Elm_Object_Item *it = (Elm_Object_Item *) elm_genlist_decorated_item_get(obj);
+
+       /* Finish genlist sweep*/
+       if (it) {
+               elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE);
+               elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT);
+               elm_genlist_item_update(it);
+       }
+
+}
+
+static char *__get_title_gl_text(void *data, Evas_Object *obj, const char *part)
+{
+       MF_TRACE_BEGIN;
+       if (data)
+               return g_strdup((char *)data);
+       else
+               return NULL;
+}
+static void __del_title_gl(void *data, Evas_Object * obj)
+{
+       SAFE_FREE_CHAR(data);
+}
+
+Evas_Object *mf_genlist_create_path_info(Evas_Object *parent, char *info)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *genlist = NULL;
+       Elm_Object_Item *git=NULL;
+
+       genlist = elm_genlist_add(parent);
+       //elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+
+       itch.item_style = "groupindex";
+       itch.func.text_get = __get_title_gl_text;
+       itch.func.del = __del_title_gl;
+
+       git = elm_genlist_item_append(genlist, &itch, info, NULL, ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+       elm_genlist_item_select_mode_set(git, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+       MF_TRACE_END;
+
+       return genlist;
+}
diff --git a/src/widget/mf-navi-bar.c b/src/widget/mf-navi-bar.c
new file mode 100644 (file)
index 0000000..faf3759
--- /dev/null
@@ -0,0 +1,2039 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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-widget.h"
+#include "mf-callback.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-gengrid.h"
+#include "mf-util.h"
+#include "mf-ta.h"
+#include "mf-resource.h"
+#include "mf-language-mgr.h"
+#include "mf-tray-item.h"
+
+void __mf_navi_bar_reset_navi_obj(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       ap->mf_MainWindow.pNaviBox = NULL;
+       ap->mf_MainWindow.pNaviInfoBox = NULL;
+       ap->mf_MainWindow.pTrayBox = NULL;
+
+}
+Evas_Object *__mf_navi_bar_get_upper_genlist(Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       Evas_Object *upper_layout = NULL;
+       Evas_Object *upper_genlist = NULL;
+
+       upper_layout = mf_navi_bar_get_box_end(parent);
+       mf_retvm_if(upper_layout == NULL, NULL, "upper_layout is NULL");
+
+       upper_genlist = elm_object_part_content_get(upper_layout, "upper");
+       mf_retvm_if(upper_genlist == NULL, NULL, "upper_genlist is NULL");
+       MF_TRACE_END;
+       return upper_genlist;
+}
+
+Evas_Object *mf_navi_bar_create_navi_bar(Evas_Object * parent)
+{
+       Evas_Object *navi_bar;
+       assert(parent);
+       navi_bar = elm_naviframe_add(parent);
+       elm_naviframe_prev_btn_auto_pushed_set(navi_bar, EINA_FALSE);
+       evas_object_show(navi_bar);
+       return navi_bar;
+}
+
+/*     external functions      */
+/******************************
+** Prototype    : mfNaviBarCreateView
+** Description  :
+** Input        : struct appdata* data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+Evas_Object *mf_navi_bar_create_search_bar(Evas_Object * parent, void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retv_if(ap == NULL, NULL);
+       mf_retv_if(parent == NULL, NULL);
+
+       Evas_Object *sb = NULL;
+       Evas_Object *en = NULL;
+
+       sb = elm_layout_add(parent);
+
+       elm_layout_theme_set(sb, "layout", "searchbar", "cancel_button");
+
+       Evas_Object *cancel_btn = elm_button_add(sb);
+       elm_object_style_set(cancel_btn, "searchbar/default");
+       elm_object_text_set(cancel_btn, GET_SYS_STR(LABEL_CANCEL));
+       mf_language_mgr_register_object(cancel_btn, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_CANCEL);
+       evas_object_smart_callback_add(cancel_btn, "clicked", mf_callback_cancel_cb, ap);
+
+       elm_object_part_content_set(sb, "button_cancel", cancel_btn);
+       elm_object_signal_emit(sb, "cancel,show", "");
+       elm_object_signal_emit(sb, "elm,state,eraser,show", "elm");
+
+       en = elm_entry_add(sb);
+       elm_entry_scrollable_set(en, EINA_TRUE);
+       elm_entry_single_line_set(en, EINA_TRUE);
+       elm_entry_cnp_mode_set(en, ELM_CNP_MODE_PLAINTEXT);
+       elm_object_part_content_set(sb, "elm.swallow.content", en);
+       evas_object_data_set(sb, "entry", en);
+
+       elm_entry_input_panel_layout_set(en, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+
+       evas_object_size_hint_weight_set(sb, EVAS_HINT_EXPAND, 0);
+       evas_object_size_hint_align_set(sb, EVAS_HINT_FILL, 0.0);
+
+       evas_object_smart_callback_add(en, "maxlength,reached", mf_callback_max_len_reached_cb, ap);
+       evas_object_smart_callback_add(en, "changed", mf_callback_imf_changed_cb, ap);
+       evas_object_smart_callback_add(en, "activated", mf_search_bar_search_started_callback, ap);
+
+       elm_object_signal_callback_add(sb, "elm,eraser,clicked", "elm", mf_callback_eraser_clicked_cb, en);
+
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+       limit_filter_data.max_char_count = 0;
+       limit_filter_data.max_byte_count = MYFILE_FILE_NAME_LEN_MAX;
+       elm_entry_markup_filter_append(en, elm_entry_filter_limit_size, &limit_filter_data);
+
+       evas_object_show(sb);
+       elm_object_focus_set(en, EINA_TRUE);
+       ap->mf_MainWindow.pSearchEntry = en;
+       return sb;
+
+
+}
+
+
+
+Evas_Object *mf_navi_bar_get_edit_genlist(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retv_if(ap == NULL, NULL);
+       return ap->mf_MainWindow.pEditView.pGenlist;
+}
+
+Evas_Object *mfNaviBarConformGet(void *data)
+{
+       mf_retv_if(data == NULL, NULL);
+       struct appdata *ap = (struct appdata *)data;
+       return ap->mf_MainWindow.pNaviLayout;
+}
+
+Evas_Object *mf_navi_bar_get_box_end(Evas_Object * pBox)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(pBox == NULL, NULL, "pBox is NULL");
+       Eina_List *pBoxChildren = NULL;
+       pBoxChildren = elm_box_children_get(pBox);
+       mf_retvm_if(pBoxChildren == NULL, NULL, "pBoxChildren is NULL");
+
+       int len = eina_list_count(pBoxChildren);
+       if (len > 0) {
+               MF_TRACE_END;
+               return eina_list_nth(pBoxChildren, len - 1);
+       }
+       MF_TRACE_END;
+       return NULL;
+}
+
+/******************************
+** Prototype    : mfNaviBarSetSegment
+** Description  :
+** Input        : struct appdata* data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void mf_navi_bar_set_ctrl_bar(struct appdata *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       Evas_Object *NaviBar = ap->mf_MainWindow.pNaviBar;
+       mf_retm_if(NaviBar == NULL, "Navi bar is NULL");
+       Evas_Object *pCtrlBar = NULL;
+
+       pCtrlBar = mf_ctrl_bar_create(ap, NaviBar);
+       mf_retm_if(pCtrlBar == NULL, "mf_ctrl_bar_create failed");
+
+       ap->mf_MainWindow.pNaviCtrlBar = pCtrlBar;
+       elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, CTRL_STYLE_TYPE, pCtrlBar);
+
+       evas_object_show(pCtrlBar);
+       MF_TRACE_END;
+}
+
+
+Evas_Object *mf_navi_bar_content_create(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retvm_if(pNavi_s == NULL, NULL, "pNavi_s is NULL");
+       mf_retvm_if(ap->mf_Status.path == NULL, NULL, "ap->mf_Status.path is NULL");
+       mf_retvm_if(ap->mf_Status.path->str == NULL, NULL, "ap->mf_Status.path->str is NULL");
+
+       Evas_Object *pContent = NULL;
+       Eina_List *file_list = NULL;
+       Eina_List *dir_list = NULL;
+       int dir_list_len = 0;
+       int file_list_len = 0;
+       int error_code = 0;
+
+       if (ap->mf_Status.view_type == mf_view_root) {
+               if (ap->mf_FileOperation.folder_list) {
+                       mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.folder_list), MYFILE_TYPE_FSNODE);
+               }
+               if (ap->mf_FileOperation.file_list) {
+                       mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.file_list), MYFILE_TYPE_FSNODE);
+               }
+
+               mf_util_generate_root_view_file_list(ap, &(ap->mf_FileOperation.folder_list), ap->mf_Status.iStorageState);
+               ap->mf_Status.flagNoContent = EINA_FALSE;
+               mf_debug("count is [%d]", eina_list_count(ap->mf_FileOperation.folder_list));
+       } else if (ap->mf_Status.view_type == mf_view_root_category) {
+               if (eina_list_count(ap->mf_FileOperation.category_list) > 0) {
+                       ap->mf_Status.flagNoContent = EINA_FALSE;
+                       mf_util_sort_the_file_list(ap);
+               } else {
+                       ap->mf_Status.flagNoContent = EINA_TRUE;
+               }
+       } else {
+               mf_error();
+               MF_TA_ACUM_ITEM_BEGIN("      mf_util_generate_file_list", 0);
+               error_code = mf_util_generate_file_list(ap);
+               MF_TA_ACUM_ITEM_END("      mf_util_generate_file_list", 0);
+               if (error_code != MYFILE_ERR_NONE) {
+                       /*Todo: we need to free all the Eina_List*/
+                       return NULL;
+               }
+               MF_TA_ACUM_ITEM_BEGIN("      mf_util_sort_the_file_list", 0);
+
+               /*      sort the list by sort_type*/
+               mf_util_sort_the_file_list(ap);
+               MF_TA_ACUM_ITEM_END("      mf_util_sort_the_file_list", 0);
+
+               MF_TA_ACUM_ITEM_BEGIN("      No content check", 0);
+               file_list = ap->mf_FileOperation.file_list;
+               dir_list = ap->mf_FileOperation.folder_list;
+
+               dir_list_len = eina_list_count(dir_list);
+               file_list_len = eina_list_count(file_list);
+
+               if ((dir_list_len + file_list_len) > 0) {
+                       ap->mf_Status.flagNoContent = EINA_FALSE;
+               } else {
+                       ap->mf_Status.flagNoContent = EINA_TRUE;
+               }
+               MF_TA_ACUM_ITEM_END("      No content check", 0);
+       }
+       ap->mf_MainWindow.pNaviGenlist = NULL;
+       ap->mf_MainWindow.pNaviGengrid = NULL;
+
+       if (ap->mf_Status.flagNoContent) {
+               MF_TA_ACUM_ITEM_BEGIN("      No content create", 0);
+               pContent = mf_widget_create_no_content(ap->mf_MainWindow.pNaviBar);
+               MF_TA_ACUM_ITEM_END("      No content create", 0);
+       } else {
+               if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_THUMBNAIL) {
+                       pContent = mf_gengrid_create_list(ap, ap->mf_MainWindow.pNaviBar);
+                       ap->mf_MainWindow.pNaviGengrid = pContent;
+               } else {
+                       MF_TA_ACUM_ITEM_BEGIN("      genlist view create", 0);
+                       pContent = mf_genlist_create_list(ap, ap->mf_MainWindow.pNaviBar);
+                       MF_TA_ACUM_ITEM_END("      genlist view create", 0);
+                       ap->mf_MainWindow.pNaviGenlist = pContent;
+               }
+       }
+       if (ap->mf_Status.more == MORE_DEFAULT) {
+               MF_TA_ACUM_ITEM_BEGIN("      Add dir monitor", 0);
+               mf_callback_add_dir_watch(ap->mf_Status.path->str, ap);
+               MF_TA_ACUM_ITEM_END("      Add dir monitor", 0);
+       }
+
+       MF_TRACE_END;
+       return pContent;
+
+}
+/******************************
+** Prototype    : mfNaviBarSetContent
+** Description  :
+** 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
+**
+******************************/
+static int __mf_navi_bar_reset_content_idler(void *data)
+{
+       MF_TRACE_BEGIN;
+
+       struct appdata *ap = (struct appdata *)data;
+       if (ap) {
+               SAFE_FREE_OBJ(ap->mf_Status.old_content);
+               ap->mf_Status.navi_content_idler = NULL;
+       }
+       MF_TRACE_END;
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void mfNaviBarSetContent(void *data, Evas_Object *pLayout, Evas_Object *NaviContent)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(pLayout == NULL, "pConform is NULL");
+       mf_retm_if(NaviContent == NULL, "NaviContent is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       Evas_Object *unUsed = mf_widget_unset_part_content(pLayout, "content");
+       evas_object_hide(unUsed);
+       ap->mf_Status.old_content = unUsed;
+       mf_ecore_idler_del(ap->mf_Status.navi_content_idler);
+       ap->mf_Status.navi_content_idler = ecore_idler_add((Ecore_Task_Cb)__mf_navi_bar_reset_content_idler, ap);
+       /*if bs, use idler here*/
+       elm_object_part_content_set(pLayout, "content", NaviContent);
+}
+
+Evas_Object *mf_navi_bar_get_content(Evas_Object *pConform)
+{
+       return elm_object_content_get(pConform);
+}
+
+/******************************
+** Prototype    : mf_navi_bar_set_style
+** Description  :
+** Input        : struct appdata* data
+**                eNaviBarStyle navi_style
+**                Evas_Object *NaviContent
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+static void __mf_navi_bar_title(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       Evas_Object *pNavi = ap->mf_MainWindow.pNaviBar;
+       Elm_Object_Item *navi_it = ap->mf_MainWindow.pNaviItem;
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+
+       Evas_Object *unset = NULL;
+       int more = ap->mf_Status.more;
+
+       Evas_Object *label = elm_label_add(pNavi);
+       // set the label style
+       elm_object_style_set(label, "naviframe_title");
+       // set the label for the title slide mode
+       elm_label_slide_mode_set(label, ELM_LABEL_SLIDE_MODE_AUTO);
+       elm_label_wrap_width_set(label, 1);
+       elm_label_ellipsis_set(label, EINA_TRUE);
+       // set the label text
+       if (more == MORE_EDIT) {
+               elm_object_text_set(label, GET_SYS_STR(MF_LABEL_EDIT));
+       } else if (more == MORE_SHARE_EDIT) {
+               elm_object_text_set(label, GET_SYS_STR(LABEL_SHARE));
+       }
+       else {
+               elm_object_text_set(label, pNavi_s->pNaviTitle);
+       }
+       evas_object_show(label);
+       unset = elm_object_item_part_content_unset(navi_it, "elm.swallow.title");
+       SAFE_FREE_OBJ(unset);
+       elm_object_item_part_content_set(navi_it, "elm.swallow.title", label);
+
+}
+void mf_navi_bar_title_set(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       int more = ap->mf_Status.more;
+       char *path = ap->mf_Status.path->str;
+       Elm_Object_Item *navi_it = ap->mf_MainWindow.pNaviItem;
+       Evas_Object *pNavi = ap->mf_MainWindow.pNaviBar;
+       Evas_Object *unset = NULL;
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+
+       if (ap->mf_Status.more == MORE_CREATE_FOLDER
+           || ap->mf_Status.more == MORE_THUMBNAIL_RENAME
+           || ap->mf_Status.more == MORE_SEARCH
+           || ap->mf_Status.more == MORE_EDIT
+           || ap->mf_Status.more == MORE_SHARE_EDIT) {
+               __mf_navi_bar_title(ap);
+       } else if (more != MORE_EDIT && more != MORE_SEARCH) {
+               if (ap->mf_Status.view_type != mf_view_root) {
+                       Evas_Object *home_btn = elm_button_add(pNavi);
+                       //elm_object_style_set(home_btn, TITLE_BTN_STYLE);
+                       elm_object_style_set(home_btn, "naviframe/title_icon");
+                       Evas_Object *home_ic = elm_image_add(pNavi);
+                       elm_image_file_set(home_ic, MF_TITLE_ICON_HOME, NULL);
+                       elm_image_resizable_set(home_ic, EINA_TRUE, EINA_TRUE);
+                       elm_object_content_set(home_btn, home_ic);
+                       mf_language_mgr_register_object(home_btn, OBJ_TYPE_ELM_OBJECT, NULL, MF_LABEL_HOME);
+                       evas_object_smart_callback_add(home_btn, "clicked", mf_callback_home_button_cb, ap);
+                       evas_object_smart_callback_add(home_btn, "pressed", mf_callback_home_button_pressed_cb, home_ic);
+                       evas_object_smart_callback_add(home_btn, "unpressed", mf_callback_home_button_unpressed_cb, home_ic);
+                       evas_object_show(home_btn);
+
+                       unset = elm_object_item_part_content_unset(navi_it, TITLE_LEFT_BTN);
+                       SAFE_FREE_OBJ(unset);
+                       elm_object_item_part_content_set(navi_it, TITLE_LEFT_BTN, home_btn);
+
+                       Evas_Object *up_btn = elm_button_add(pNavi);
+                       //elm_object_style_set(up_btn, TITLE_BTN_STYLE);
+                       elm_object_style_set(up_btn, "naviframe/title_icon");
+                       Evas_Object *up_ic = elm_image_add(pNavi);
+                       elm_image_file_set(up_ic, MF_TITLE_ICON_UPPER, NULL);
+                       elm_image_resizable_set(up_ic, EINA_TRUE, EINA_TRUE);
+                       elm_object_content_set(up_btn, up_ic);
+                       mf_language_mgr_register_object(up_btn, OBJ_TYPE_ELM_OBJECT, NULL, MF_LABEL_UPPER);
+                       evas_object_smart_callback_add(up_btn, "clicked", mf_callback_upper_click_cb, ap);
+                       evas_object_smart_callback_add(up_btn, "pressed", mf_callback_upper_button_pressed_cb, up_ic);
+                       evas_object_smart_callback_add(up_btn, "unpressed", mf_callback_upper_button_unpressed_cb, up_ic);
+                       evas_object_show(up_btn);
+                       unset = elm_object_item_part_content_unset(navi_it, TITLE_RIGHT_BTN);
+                       SAFE_FREE_OBJ(unset);
+                       elm_object_item_part_content_set(navi_it, TITLE_RIGHT_BTN, up_btn);
+
+               }
+               __mf_navi_bar_title(ap);
+
+       }
+       elm_naviframe_item_title_visible_set(navi_it, EINA_TRUE);
+
+       MF_TRACE_END;
+
+}
+void mf_navi_bar_set_style(void *data, eNaviBarStyle navi_style, Evas_Object *NaviContent)
+{
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       Evas_Object *NaviBar = ap->mf_MainWindow.pNaviBar;
+       mf_retm_if(NaviBar == NULL, "Navi bar is NULL");
+       Evas_Object *pConform = ap->mf_MainWindow.pNaviLayout;
+       mf_retm_if(pConform == NULL, "Conformant is NULL");
+       Evas_Object *l_button = ap->mf_MainWindow.pNaviLeftBtn;
+       Elm_Object_Item *navi_it = NULL;
+
+       char *title = pNavi_s->pNaviTitle;
+       mfNaviBarSetContent(ap, pConform, NaviContent);
+
+       switch (navi_style) {
+       case NAVI_BAR_DEFAULT:  /*when MMC is off, show "myfile" only*/
+               ap->mf_Status.pPreNaviItem = ap->mf_MainWindow.pNaviItem;
+               mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTRL);
+               navi_it = elm_naviframe_item_push(NaviBar, NULL, NULL, NULL, pConform, MF_NAVI_STYLE_ENABLE);
+
+               ap->mf_MainWindow.pNaviItem = navi_it;
+               break;
+       case NAVI_BAR_PATH_WITH_ONE_ACTION:
+               ap->mf_Status.pPreNaviItem = ap->mf_MainWindow.pNaviItem;
+               mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTRL);
+               navi_it = elm_naviframe_item_push(NaviBar, NULL, l_button, NULL, pConform, MF_NAVI_STYLE_ENABLE);
+               ap->mf_MainWindow.pNaviItem = navi_it;
+               break;
+       default:
+               break;
+       }
+}
+
+
+/******************************
+** Prototype    : __mf_navi_bar_select_count_label_timeout_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_navi_bar_set_upper_item_disable(void *data, bool bFlag)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+
+       if (!mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+               Elm_Object_Item *pUpperItem = NULL;
+               Evas_Object *upper_genlist = NULL;
+
+               upper_genlist = __mf_navi_bar_get_upper_genlist(ap->mf_MainWindow.pNaviInfoBox);
+               pUpperItem = elm_genlist_first_item_get(upper_genlist);
+               if (pUpperItem) {
+                       mfItemData_s *itemData = elm_object_item_data_get(pUpperItem);
+
+                       if (itemData && itemData->m_ItemName && itemData->m_ItemName->str
+                           && g_strcmp0(itemData->m_ItemName->str, ap->mf_Status.upper_folder) == 0) {
+                               elm_object_item_disabled_set(pUpperItem, bFlag);
+                       }
+               }
+       }
+}
+
+Evas_Object *__mf_navi_bar_backbutton_create(Evas_Object *parent, Evas_Object *win)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(win == NULL, NULL, "win is NULL");
+
+       Evas_Object *btn = NULL;
+       btn = elm_button_add(parent);
+       elm_object_style_set(btn, "naviframe/end_btn/default");
+       evas_object_show(btn);
+       return btn;
+
+}
+Evas_Object *mf_navi_bar_pathinfo_label_create(Evas_Object *parent, char *pathinfo)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       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);
+       SAFE_FREE_CHAR(pathinfo);
+       MF_TRACE_END;
+       return label;
+}
+
+Evas_Object *__mf_navi_bar_pathinfo_create(Evas_Object *parent, const char  *content)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(content == NULL, NULL, "content is NULL");
+
+       Evas_Object *layout = NULL;
+
+       layout = elm_layout_add(parent);
+       elm_object_focus_set(layout, EINA_FALSE);
+       elm_layout_file_set(layout, EDJ_NAME, 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);
+
+       //elm_object_part_content_set(layout, "info", content);
+       elm_object_part_text_set(layout, "info", content);
+       evas_object_show(layout);
+       MF_TRACE_END;
+       return layout;
+}
+
+void mf_navi_add_back_button(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       Evas_Object *pBackButton = NULL;
+
+       pBackButton = __mf_navi_bar_backbutton_create(ap->mf_MainWindow.pNaviBar, ap->mf_MainWindow.pWindow);
+       if (pBackButton) {
+               Evas_Object *unset = elm_object_item_part_content_unset(ap->mf_MainWindow.pNaviItem, "prev_btn");
+               SAFE_FREE_OBJ(unset);
+               elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, "prev_btn", pBackButton);
+               evas_object_smart_callback_add(pBackButton, "clicked", mf_callback_backbutton_clicked_cb, ap);
+       }
+}
+
+void mf_navi_remove_home_upper_button(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.view_type != mf_view_root) {
+               Evas_Object *btn = NULL;
+               btn = elm_object_item_part_content_unset(ap->mf_MainWindow.pNaviItem, TITLE_LEFT_BTN);
+               SAFE_FREE_OBJ(btn);
+               btn = elm_object_item_part_content_unset(ap->mf_MainWindow.pNaviItem, TITLE_RIGHT_BTN);
+               SAFE_FREE_OBJ(btn);
+       }
+}
+
+Evas_Object *mf_navi_bar_upper_create(Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *upper_genlist = NULL;
+       upper_genlist = elm_genlist_add(parent);
+       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_scroller_bounce_set(upper_genlist, EINA_FALSE, EINA_FALSE);
+       evas_object_show(upper_genlist);
+       MF_TRACE_END;
+       return upper_genlist;
+
+}
+
+void mf_navi_bar_remove_back_button(Elm_Object_Item *pNaviItem)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(pNaviItem == NULL, "pNaviItem is NULL");
+       Evas_Object *back_btn = NULL;
+
+       back_btn = elm_object_item_part_content_get(pNaviItem, "prev_btn");
+       if (back_btn != NULL) {
+               elm_object_item_part_content_unset(pNaviItem, "prev_btn");
+               evas_object_hide(back_btn);
+               evas_object_del(back_btn);
+       }
+       MF_TRACE_END;
+}
+
+Evas_Object *mf_navi_bar_create_header_box(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       Evas_Object *box = NULL;
+       Evas_Object *pathinfo_layout = NULL;
+       char *pathinfo = NULL;
+       char *info = NULL;
+
+       if (!mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+               myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+               mf_retvm_if(pNavi_s == NULL, NULL, "pNavi_s is NULL");
+
+               //box = mf_widget_create_box(ap->mf_MainWindow.pNaviBox);
+               //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);
+
+
+
+
+               pathinfo = mf_fm_svc_path_info_get(ap->mf_Status.path->str);
+               info = mf_fm_svc_path_info_translate(pathinfo, MF_PATH_INFO_MAX_LENGTH_PORTRAIT);
+
+
+               //Evas_Object *genlist = mf_genlist_create_path_info(box, info);
+               pathinfo_layout = __mf_navi_bar_pathinfo_create(ap->mf_MainWindow.pNaviBox, info);
+               evas_object_size_hint_weight_set(pathinfo_layout, EVAS_HINT_EXPAND, 0);
+               evas_object_size_hint_align_set(pathinfo_layout, EVAS_HINT_FILL, 0.0);
+               //evas_object_show(genlist);
+
+#if 0
+               upper_layout = elm_layout_add(box);
+               elm_object_focus_set(upper_layout, EINA_FALSE);
+               ret = elm_layout_file_set(upper_layout, EDJ_NAME, "upper_folder");
+               evas_object_size_hint_weight_set(upper_layout, EVAS_HINT_FILL, EVAS_HINT_FILL);//(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);
+               elm_box_pack_end(box, upper_layout);
+
+#endif
+               //elm_box_pack_start(box, pathinfo_layout);
+               evas_object_show(pathinfo_layout);
+       }
+       MF_TRACE_END;
+       return pathinfo_layout;
+}
+
+void mf_navi_bar_set_ctrl_button(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       Elm_Object_Item *navi_it = ap->mf_MainWindow.pNaviItem;
+       Evas_Object *more_bt = NULL;
+       Evas_Object *bt_1 = NULL;
+       Evas_Object *bt_2 = NULL;
+       switch(ap->mf_Status.more) {
+       case MORE_DEFAULT:
+               more_bt = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_EDIT, MF_LABEL_MORE, NULL, mf_callback_more_button_cb, ap);
+               if (ap->mf_Status.view_type == mf_view_root) {
+                       bt_1 = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, MF_LABEL_SEARCH, NULL, mf_search_bar_enter_search_routine, ap);
+               } else {
+                       bt_1 = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, MF_LABEL_EDIT, NULL, mf_callback_edit_cb, ap);
+                       bt_2 = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, LABEL_SHARE, NULL, mf_callback_edit_cb, ap);
+               }
+               break;
+       case MORE_EDIT:
+               more_bt = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_EDIT, MF_LABEL_MORE, NULL, mf_callback_more_button_cb, ap);
+               bt_1 = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, LABEL_DELETE, NULL, mf_callback_delete_cb, ap);
+               //bt_2 = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, LABEL_SHARE, NULL, mf_callback_share_cb, ap);
+               break;
+       case MORE_INTERNAL_COPY:
+       case MORE_DATA_COPYING:
+               if (ap->mf_Status.view_type != mf_view_root) {
+                       more_bt = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_EDIT, MF_LABEL_MORE, NULL, mf_callback_more_button_cb, ap);
+               }
+               bt_1 = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, LABEL_COPY_HERE, NULL, mf_callback_paste_here_cb, ap);
+               break;
+       case MORE_INTERNAL_MOVE:
+       case MORE_DATA_MOVING:
+               if (ap->mf_Status.view_type != mf_view_root) {
+                       more_bt = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_EDIT, MF_LABEL_MORE, NULL, mf_callback_more_button_cb, ap);
+               }
+               bt_1 = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, LABEL_MOVE_HERE, NULL, mf_callback_move_here_cb, ap);
+               break;
+       case MORE_SHARE_EDIT:
+               bt_1 = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, LABEL_SHARE, NULL, mf_callback_share_cb, ap);
+       default:
+               break;
+       }
+       if (more_bt) {
+               elm_object_item_part_content_set(navi_it, NAVI_MORE_BUTTON_PART, more_bt);
+       }
+       if (bt_1) {
+               elm_object_item_part_content_set(navi_it, NAVI_BOTTOM_BUTTON_1_PART, bt_1);
+       }
+       if (bt_2) {
+               elm_object_item_part_content_set(navi_it, NAVI_BOTTOM_BUTTON_2_PART, bt_2);
+       }
+
+}
+void mf_navi_bar_reset_ctrl_button(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       Elm_Object_Item *navi_it = ap->mf_MainWindow.pNaviItem;
+       mf_retm_if(navi_it == NULL, "navi_it is NULL");
+
+       Evas_Object *more_bt = NULL;
+       Evas_Object *bt_1 = NULL;
+       Evas_Object *bt_2 = NULL;
+       more_bt = elm_object_item_part_content_unset(navi_it, NAVI_MORE_BUTTON_PART);
+       SAFE_FREE_OBJ(more_bt);
+       bt_1 = elm_object_item_part_content_unset(navi_it, NAVI_BOTTOM_BUTTON_1_PART);
+       SAFE_FREE_OBJ(bt_1);
+       bt_2 = elm_object_item_part_content_unset(navi_it, NAVI_BOTTOM_BUTTON_2_PART);
+       SAFE_FREE_OBJ(bt_2);
+       mf_navi_bar_set_ctrl_button(ap);
+}
+void mf_navi_bar_create_default_view(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+
+       GString *title = NULL;
+       Evas_Object *newContent = NULL;
+       Evas_Object *box = NULL;
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+       mf_retm_if(ap->mf_MainWindow.pNaviBar == NULL, "ap->mf_MainWindow.pNaviBar is NULL");
+
+       __mf_navi_bar_reset_navi_obj(ap);
+
+       MF_TA_ACUM_ITEM_BEGIN("      create view box", 0);
+       ap->mf_MainWindow.pNaviBox = mf_widget_create_box(ap->mf_MainWindow.pNaviBar);
+       MF_TA_ACUM_ITEM_END("      create view box", 0);
+
+       ap->mf_MainWindow.pNaviLayout = mf_widget_create_layout(ap->mf_MainWindow.pNaviBox, EDJ_NAME, "selectinfo_layout");
+       /*set content*/
+       MF_TA_ACUM_ITEM_BEGIN("      create genlist", 0);
+       newContent = mf_navi_bar_content_create(ap);
+       MF_TA_ACUM_ITEM_END("      create genlist", 0);
+       /*set title     segment or title*/
+       evas_object_show(newContent);
+       MF_TA_ACUM_ITEM_BEGIN("      set title", 0);
+       if (ap->mf_Status.view_type == mf_view_root) {
+               title = g_string_new(GET_SYS_STR(LABEL_MYFILE));
+       } else if (mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+               title = g_string_new(GET_SYS_STR(LABEL_MYFILE));
+       } else {
+               title = mf_fm_svc_wrapper_get_file_name(ap->mf_Status.path);
+       }
+       MF_TA_ACUM_ITEM_END("      set title", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("      set content of conform", 0);
+
+       if (title != NULL) {
+               pNavi_s->pNaviTitle = g_strdup(title->str);
+               g_string_free(title, TRUE);
+               title = NULL;
+       }
+
+       /*navigation view integration*/
+       mfNaviBarSetContent(ap, ap->mf_MainWindow.pNaviLayout, newContent);
+       MF_TA_ACUM_ITEM_END("      set content of conform", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("      set conform to box", 0);
+       elm_box_pack_end(ap->mf_MainWindow.pNaviBox, ap->mf_MainWindow.pNaviLayout);
+       MF_TA_ACUM_ITEM_END("      set conform to box", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("      create header box", 0);
+       if (ap->mf_Status.view_type == mf_view_normal
+               ) {
+               box = mf_navi_bar_create_header_box(ap);
+               if (box) {
+                       ap->mf_MainWindow.pNaviInfoBox = box;
+                       elm_box_pack_start(ap->mf_MainWindow.pNaviBox, box);
+               }
+       }
+       MF_TA_ACUM_ITEM_END("      create header box", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("      push view to navibar", 0);
+
+       ap->mf_Status.pPreNaviItem = ap->mf_MainWindow.pNaviItem;
+
+       mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTRL);
+       ap->mf_MainWindow.pNaviItem = elm_naviframe_item_push(ap->mf_MainWindow.pNaviBar, NULL, NULL, NULL, ap->mf_MainWindow.pNaviBox, MF_NAVI_STYLE_ENABLE);
+
+       MF_TA_ACUM_ITEM_END("      push view to navibar", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("      add backbutton", 0);
+       if (ap->mf_Status.more != MORE_INTERNAL_COPY && ap->mf_Status.more != MORE_INTERNAL_MOVE) {
+               mf_navi_add_back_button(ap);
+       }
+       MF_TA_ACUM_ITEM_END("      add backbutton", 0);
+
+       /*add control bar for navigation bar*/
+       MF_TA_ACUM_ITEM_BEGIN("      add control bar", 0);
+       //mf_navi_bar_set_ctrl_bar(ap);
+
+       mf_navi_bar_set_ctrl_button(data);
+       MF_TA_ACUM_ITEM_END("      add control bar", 0);
+
+       MF_TA_ACUM_ITEM_BEGIN("      set control bar", 0);
+       if (ap->mf_Status.flagNoContent == 1) {
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_NOCONTENT_VIEW, true);
+       } else {
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_NOCONTENT_VIEW, FALSE);
+       }
+#ifdef MYFILE_USB_OTG
+       if(mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str) == MYFILE_OTG) {
+               ap->mf_Otg.rootpath_box = ap->mf_MainWindow.pNaviBox;
+               ap->mf_Otg.rootpath_layout = ap->mf_MainWindow.pNaviLayout;
+               ap->mf_Otg.rootpath_navi_item = ap->mf_MainWindow.pNaviItem;
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_OTG_ROOT, TRUE);
+               //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_OTG_ROOT, TRUE);
+       }
+#endif
+       MF_TA_ACUM_ITEM_END("      set control bar", 0);
+       mf_navi_bar_title_set(ap);
+       /*temp data free*/
+       MF_TRACE_END;
+}
+
+/******************************
+** Prototype    : mf_navi_bar_create_edit_view
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void mf_navi_bar_remove_path_info(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (!mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+               elm_box_unpack(ap->mf_MainWindow.pNaviBox, ap->mf_MainWindow.pNaviPathInfo);
+               evas_object_hide(ap->mf_MainWindow.pNaviPathInfo);
+               //evas_object_del(pNavi_s->pNaviPathInfo);
+               ap->mf_MainWindow.pEditView.pPathInfo = ap->mf_MainWindow.pNaviPathInfo;
+       } else {
+               ap->mf_MainWindow.pEditView.pPathInfo = NULL;
+       }
+       MF_TRACE_END;
+}
+
+void mf_navi_bar_recover_path_info(void *data, myfileNaviBar *pNavi_s)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (ap->mf_MainWindow.pEditView.pPathInfo) {
+               ap->mf_MainWindow.pNaviPathInfo = ap->mf_MainWindow.pEditView.pPathInfo;
+               elm_box_pack_start(ap->mf_MainWindow.pNaviBox, ap->mf_MainWindow.pNaviPathInfo);
+               evas_object_show(ap->mf_MainWindow.pEditView.pPathInfo);
+       }
+
+       MF_TRACE_END;
+       return;
+}
+
+void mf_navi_bar_remove_info_box(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (!mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+               elm_box_unpack(ap->mf_MainWindow.pNaviBox, ap->mf_MainWindow.pNaviInfoBox);
+               evas_object_hide(ap->mf_MainWindow.pNaviInfoBox);
+               ap->mf_MainWindow.pEditView.pInfoBox = ap->mf_MainWindow.pNaviInfoBox;
+       } else {
+               ap->mf_MainWindow.pEditView.pInfoBox = NULL;
+       }
+       MF_TRACE_END;
+}
+
+void mf_navi_bar_recover_info_box(void *data, myfileNaviBar *pNavi_s)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       if (ap->mf_MainWindow.pEditView.pInfoBox) {
+               ap->mf_MainWindow.pNaviInfoBox = ap->mf_MainWindow.pEditView.pInfoBox;
+               elm_box_pack_start(ap->mf_MainWindow.pNaviBox, ap->mf_MainWindow.pNaviInfoBox);
+               evas_object_show(ap->mf_MainWindow.pEditView.pInfoBox);
+       }
+
+       MF_TRACE_END;
+       return;
+}
+
+void mf_navi_bar_edit_list_update(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               if (ap->mf_MainWindow.pNaviGenlist) {
+                       mf_genlist_sweep_item_recover(ap->mf_MainWindow.pNaviGenlist);
+                       mf_genlist_update_edit_view_item_style(ap);
+                       if (ap->mf_Status.more == MORE_SHARE_EDIT) {
+                               mf_genlist_set_folder_edit_style();
+                       }
+                       ap->mf_MainWindow.pEditView.pGenlist = ap->mf_MainWindow.pNaviGenlist;
+                       elm_genlist_decorate_mode_set(ap->mf_MainWindow.pNaviGenlist, EINA_TRUE);
+               }
+       } else {
+               Eina_List *file_list = NULL;
+               Eina_List *dir_list = NULL;
+               {
+
+                       if (ap->mf_Status.view_type == mf_view_root_category) {
+                               file_list = ap->mf_FileOperation.category_list;
+                       } else {
+                               file_list = ap->mf_FileOperation.file_list;
+                               dir_list = ap->mf_FileOperation.folder_list;
+                       }
+
+                       if (ap->mf_MainWindow.pNaviGengrid) {
+                               elm_gengrid_clear(ap->mf_MainWindow.pNaviGengrid);
+                               mf_gengrid_create_list_default_style(ap->mf_MainWindow.pNaviGengrid, ap, dir_list, file_list);
+                               ap->mf_MainWindow.pEditView.pGengrid = ap->mf_MainWindow.pNaviGengrid;
+                       }
+               }
+       }
+
+}
+
+void mf_navi_bar_create_edit_view(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       //Evas_Object *pSelectAllLayout = NULL;
+       /*get navigation bar to create view*/
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+
+       ap->mf_MainWindow.pEditView.pBox = ap->mf_MainWindow.pNaviBox;
+
+       mf_navi_bar_remove_info_box(ap);
+               /*create conformant*/
+       mf_navi_remove_home_upper_button(ap);
+
+       Evas_Object *select_all_btn = elm_button_add(ap->mf_MainWindow.pNaviBar);
+       elm_object_style_set(select_all_btn, "naviframe/title_icon");
+       Evas_Object *select_all_ic = elm_image_add(ap->mf_MainWindow.pNaviBar);
+       elm_image_file_set(select_all_ic, MF_TITLE_ICON_SELECT_ALL, NULL);
+       elm_image_resizable_set(select_all_ic, EINA_TRUE, EINA_TRUE);
+       elm_object_content_set(select_all_btn, select_all_ic);
+       evas_object_smart_callback_add(select_all_btn, "clicked", (Evas_Smart_Cb)__mf_genlist_select_all_layout_mouse_down_cb, ap);
+       evas_object_smart_callback_add(select_all_btn, "pressed", (Evas_Smart_Cb)mf_callback_select_all_button_pressed_cb, select_all_ic);
+       evas_object_smart_callback_add(select_all_btn, "unpressed", (Evas_Smart_Cb)mf_callback_select_all_button_unpressed_cb, select_all_ic);
+       evas_object_show(select_all_btn);
+       elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, TITLE_RIGHT_BTN, select_all_btn);
+
+       mf_navi_bar_title_set(ap);
+       mf_navi_bar_reset_ctrl_button(ap);
+
+
+       if (ap->mf_Status.flagViewType != MF_VIEW_STYLE_THUMBNAIL) {
+               Elm_Object_Item *it;
+               it = elm_genlist_first_item_get(ap->mf_MainWindow.pNaviGenlist);
+               while (it) {
+                       elm_genlist_item_fields_update(it, "elm.icon.2", ELM_GENLIST_ITEM_FIELD_CONTENT);
+                       it = elm_genlist_item_next_get(it);
+               }
+       }
+
+
+       //mf_ctrl_bar_reset(ap);
+       mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_EDIT_ALL, TRUE);
+       //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_EDIT_ALL, true);
+       /**    Todo:   should we add segment status set here?*/
+       /*temp data free*/
+       MF_TRACE_END;
+}
+
+/******************************
+** Prototype    : mf_navi_bar_create_path_select_view
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+void mf_navi_bar_create_path_select_view(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       GString *title = NULL;
+       Evas_Object *newContent = NULL;
+       Evas_Object *box = NULL;
+       /*get navigation bar to create view*/
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+
+       /*set pre_status*/
+       pNavi_s->pre_more = ap->mf_Status.more;
+       /*create conformant*/
+
+       __mf_navi_bar_reset_navi_obj(ap);
+
+       ap->mf_MainWindow.pNaviBox = mf_widget_create_box(ap->mf_MainWindow.pNaviBar);
+       ap->mf_MainWindow.pNaviLayout = mf_widget_create_layout(ap->mf_MainWindow.pNaviBox, EDJ_NAME, "selectinfo_layout");
+       /*set content*/
+       newContent = mf_navi_bar_content_create(ap);
+
+       /*set title     segment or title*/
+       if (ap->mf_Status.view_type == mf_view_root) {
+               title = g_string_new(GET_SYS_STR(LABEL_MYFILE));
+       } else if (mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+               title = g_string_new(GET_SYS_STR(LABEL_MYFILE));
+       } else {
+               title = mf_fm_svc_wrapper_get_file_name(ap->mf_Status.path);
+       }
+
+       if (title != NULL) {
+
+               pNavi_s->pNaviTitle = g_strdup(title->str);
+               g_string_free(title, TRUE);
+               title = NULL;
+       }
+       mfNaviBarSetContent(ap, ap->mf_MainWindow.pNaviLayout, newContent);
+       elm_box_pack_end(ap->mf_MainWindow.pNaviBox, ap->mf_MainWindow.pNaviLayout);
+       if (ap->mf_Status.view_type == mf_view_normal) {
+               box = mf_navi_bar_create_header_box(ap);
+               if (box) {
+                       ap->mf_MainWindow.pNaviInfoBox = box;
+                       elm_box_pack_start(ap->mf_MainWindow.pNaviBox, box);
+               }
+       }
+       /*Navigation bar Path Select view integration*/
+
+       MF_TA_ACUM_ITEM_BEGIN("      push view to navibar", 0);
+       ap->mf_Status.pPreNaviItem = ap->mf_MainWindow.pNaviItem;
+
+       mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTRL);
+       ap->mf_MainWindow.pNaviItem = elm_naviframe_item_push(ap->mf_MainWindow.pNaviBar, NULL, NULL, NULL, ap->mf_MainWindow.pNaviBox, MF_NAVI_STYLE_ENABLE);
+       MF_TA_ACUM_ITEM_END("      push view to navibar", 0);
+
+       mf_navi_add_back_button(ap);
+
+       /*add control bar for navigation bar*/
+       //mf_navi_bar_set_ctrl_bar(ap);
+       mf_navi_bar_set_ctrl_button(data);
+#ifdef MYFILE_USB_OTG
+       /*control bar disable set if in otg root path*/
+       if (mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str) == MYFILE_OTG) {
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_OTG_OPT_ROOT, TRUE);
+       }
+#endif
+       if (ap->mf_Status.view_type == mf_view_root || ap->mf_Status.view_type == mf_view_root_category) {
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_OTG_ROOT, TRUE);
+       }
+       mf_navi_bar_title_set(ap);
+       MF_TRACE_END;
+
+       /**    Todo:   should we add segment status set here?*/
+       /*temp data free*/
+}
+
+void mf_navi_bar_create_path_select_view_otg_root(void *data)
+{
+
+       struct appdata *ap = (struct appdata *)data;
+       GString *title = NULL;
+       Evas_Object *newContent = NULL;
+
+       /*get navigation bar to create view*/
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_struct_by_label(ap, GET_STR(MF_LABEL_OTG));
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+
+       /*set pre_status*/
+       pNavi_s->pre_more = ap->mf_Status.more;
+       /*create conformant*/
+       __mf_navi_bar_reset_navi_obj(ap);
+
+       ap->mf_MainWindow.pNaviLayout = mf_widget_create_layout(ap->mf_MainWindow.pNaviBar, EDJ_NAME, "selectinfo_layout");
+
+       ap->mf_MainWindow.pNaviBox = ap->mf_MainWindow.pNaviLayout;
+       /*set content*/
+       newContent = mf_navi_bar_content_create(ap);
+
+       /*set title     segment or title*/
+       if (ap->mf_Status.view_type == mf_view_root) {
+               title = g_string_new(GET_SYS_STR(LABEL_MYFILE));
+       } else if (mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str)) {
+               title = g_string_new(GET_SYS_STR(LABEL_MYFILE));
+       } else {
+               title = mf_fm_svc_wrapper_get_file_name(ap->mf_Status.path);
+       }
+
+       if (title != NULL) {
+
+               pNavi_s->pNaviTitle = g_strdup(title->str);
+               g_string_free(title, TRUE);
+               title = NULL;
+       }
+       /*Navigation bar Path Select view integration*/
+       mf_navi_bar_set_style(ap, NAVI_BAR_PATH_WITH_ONE_ACTION, newContent);
+       /*add control bar for navigation bar*/
+       //mf_navi_bar_set_ctrl_bar(ap);
+       mf_navi_add_back_button(ap);
+       mf_navi_bar_set_ctrl_button(data);
+       mf_navi_bar_title_set(ap);
+#ifdef MYFILE_USB_OTG
+       /*control bar disable set if in otg root path*/
+       if(mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str) == MYFILE_OTG) {
+               mf_navi_bar_button_set_disable(ap->mf_MainWindow.pNaviItem, CTRL_DISABLE_OTG_ROOT, TRUE);
+               //mf_ctrl_bar_item_set_disable(ap->mf_MainWindow.pNaviCtrlBar, CTRL_DISABLE_OTG_ROOT, TRUE);
+       }
+
+#endif
+       /**    Todo:   should we add segment status set here?*/
+       /*temp data free*/
+}
+
+
+/******************************
+** Prototype    : mf_navi_bar_create_search_view
+** Description  :
+** Input        : void *data
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+#ifdef MYFILE_SPLIT_VIEW
+void mf_navi_bar_set_panes_navi_to_main(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+
+               mf_widget_unset_main_layout_content(ap->mf_MainWindow.sSplitData.pMainLayout);
+               /***1. unset naviframe from panes/right layout **/
+               mf_split_view_unset_right_content(ap);
+               /***2. unset panes from main layout **/
+               mf_widget_unset_main_layout_content(ap->mf_MainWindow.pMainLayout);
+
+
+               /***3. set naviframe to main layout **/
+               elm_object_part_content_set(ap->mf_MainWindow.pMainLayout, "elm.swallow.content", ap->mf_MainWindow.pNaviBar);
+       }
+       MF_TRACE_END;
+}
+
+void mf_navi_bar_reset_panes_main(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+
+       mf_widget_unset_main_layout_content(ap->mf_MainWindow.pMainLayout);
+       elm_object_part_content_set(ap->mf_MainWindow.sSplitData.pMainLayout, "elm.swallow.content", ap->mf_MainWindow.pNaviBar);
+
+       mf_widget_panes_right_set(ap->mf_MainWindow.sSplitData.pPanes, ap->mf_MainWindow.sSplitData.pMainLayout);
+       /**** 3. set panes to main layout **/
+       elm_object_part_content_set(ap->mf_MainWindow.pMainLayout, "elm.swallow.content", ap->mf_MainWindow.sSplitData.pPanes);
+       mf_split_view_show(ap);
+       MF_TRACE_END;
+}
+#endif
+void mf_navi_bar_create_search_view(void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+
+       GString *title = NULL;
+       Evas_Object *path_label = NULL;
+#ifdef MYFILE_SPLIT_VIEW
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               mf_navi_bar_set_panes_navi_to_main(ap);
+       }
+#endif
+
+       __mf_navi_bar_reset_navi_obj(ap);
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navigation bar in use failed");
+       Evas_Object *pSearchViewLayout = NULL;
+       //ap->mf_MainWindow.pNaviLayout = mf_widget_create_layout(ap->mf_MainWindow.pNaviBox, EDJ_NAME, "selectinfo_layout");
+
+       ap->mf_MainWindow.pNaviLayout = mf_widget_create_layout(ap->mf_MainWindow.pNaviBar, EDJ_NAME, "search_view_layout");
+       ap->mf_MainWindow.pNaviSearchBar = mf_navi_bar_create_search_bar(ap->mf_MainWindow.pNaviLayout, ap);
+       pSearchViewLayout = ap->mf_MainWindow.pNaviLayout;
+
+       path_label = elm_label_add(pSearchViewLayout);
+       elm_object_focus_set(path_label, EINA_FALSE);
+       evas_object_size_hint_weight_set(path_label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(path_label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(path_label);
+       /*2.2 contribute label content*/
+       char *path_in_label = mf_fm_svc_wrapper_translate_path(ap->mf_Status.path->str, MF_TRANS_OPTION_LABEL);
+       char *label_content = g_strconcat(GET_SYS_STR(MF_LABEL_SEARCH), ":", "<br>", path_in_label, NULL);
+       /*2.3 set style for path_label*/
+       elm_label_line_wrap_set(path_label, ELM_WRAP_WORD);
+       elm_object_text_set(path_label, label_content);
+
+       elm_object_part_content_set(pSearchViewLayout, "search_bar", ap->mf_MainWindow.pNaviSearchBar);
+       elm_object_part_content_set(pSearchViewLayout, "content", path_label);
+
+       title = g_string_new(GET_SYS_STR(MF_LABEL_SEARCH));
+       if (title != NULL) {
+               pNavi_s->pNaviTitle = g_strdup(title->str);
+               g_string_free(title, TRUE);
+               title = NULL;
+       }
+
+       ap->mf_Status.pPreNaviItem = ap->mf_MainWindow.pNaviItem;
+
+       mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTRL);
+       ap->mf_MainWindow.pNaviItem = elm_naviframe_item_push(ap->mf_MainWindow.pNaviBar, NULL, NULL, NULL, pSearchViewLayout, MF_NAVI_STYLE_ENABLE);
+
+
+       /*hide Tab Bar in search view*/
+
+       /*add control bar for navigation bar*/
+       /*temp data free*/
+       if (path_in_label != NULL) {
+               free(path_in_label);
+               path_in_label = NULL;
+       }
+       if (label_content != NULL) {
+               free(label_content);
+               label_content = NULL;
+       }
+       mf_navi_bar_title_set(ap);
+       evas_object_show(ap->mf_MainWindow.pSearchEntry);
+
+       elm_object_focus_set(ap->mf_MainWindow.pSearchEntry, EINA_TRUE);
+       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+
+       MF_TRACE_END;
+}
+
+static void __new_folder_entryfield_create(Evas_Object *parent, void *data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       mf_retm_if(parent == NULL, "parent is NULL");
+       int error_code = 0;
+       char *fileName = NULL;
+       GString *dest_fullpath;
+       static Elm_Entry_Filter_Limit_Size limit_filter;
+       Evas_Object *entry = NULL;
+       Evas_Object *edit_field = NULL;
+       char *fullpath = (char *)malloc(sizeof(char) * MYFILE_FILE_PATH_LEN_MAX);
+       if (fullpath == NULL) {
+               MF_TRACE_END;
+               return;
+       }
+       mf_widget_create_entryfield(ap, parent, mf_callback_new_folder_changed_cb, NULL);
+       entry = ap->mf_MainWindow.pEntry;
+
+       edit_field = ap->mf_MainWindow.pEditField;
+
+       limit_filter.max_char_count = MYFILE_FILE_NAME_LEN_MAX;
+       limit_filter.max_byte_count = 0;
+
+       memset(fullpath, 0, MYFILE_FILE_PATH_LEN_MAX);
+       fileName = elm_entry_markup_to_utf8(GET_SYS_STR(MF_LABEL_FOLDER));
+       snprintf(fullpath, (MYFILE_FILE_PATH_LEN_MAX), "%s/%s", (char *)ap->mf_Status.path->str, fileName);
+
+       dest_fullpath = g_string_new(fullpath);
+
+       elm_entry_markup_filter_append(ap->mf_MainWindow.pEntry, elm_entry_filter_limit_size, &limit_filter);
+       evas_object_smart_callback_add(ap->mf_MainWindow.pEntry, "maxlength,reached", mf_callback_max_len_reached_cb, ap);
+       evas_object_smart_callback_add(ap->mf_MainWindow.pEntry, "preedit,changed",
+                                      mf_callback_imf_preedit_change_cb, ap);
+
+       if (mf_fm_svc_wrapper_detect_duplication(dest_fullpath)) {
+               mf_debug("dectetion result is TRUE\ndest_fullpath is %s\n", dest_fullpath->str);
+               error_code = mf_fm_svc_wrapper_file_auto_rename(ap, dest_fullpath, FILE_NAME_WITH_BRACKETS, &dest_fullpath);
+               mf_debug("rename result is %s\n", dest_fullpath->str);
+               memset(fullpath, 0, strlen(fullpath));
+               int len = strlen(ap->mf_Status.path->str) + 1;
+               strncpy(fullpath, dest_fullpath->str + len, MYFILE_FILE_PATH_LEN_MAX);
+               /*memset(fileName,0,strlen(fileName));*/
+
+               SAFE_FREE_CHAR(fileName);
+               fileName = elm_entry_markup_to_utf8(fullpath);
+       }
+
+       /*elm_entry_entry_set(entry, ecore_file_file_get(params->m_ItemName->str));*/
+       mf_widget_imf_hide_callback_register(ap->mf_MainWindow.pConformant, entry);
+
+       elm_entry_entry_set(entry, fileName);
+       elm_entry_cursor_end_set(entry);
+
+       SAFE_FREE_CHAR(fullpath);
+       SAFE_FREE_GSTRING(dest_fullpath);
+       SAFE_FREE_CHAR(fileName);
+       MF_TRACE_END;
+
+}
+void mf_navi_bar_create_new_folder_view(void *data)
+{
+
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       Evas_Object *newContent = NULL;
+
+       Evas_Object *pNaviBar = NULL;
+       GString *title = NULL;
+
+       mf_widget_set_navi_blocking(data, EINA_TRUE);
+#ifdef MYFILE_SPLIT_VIEW
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               mf_navi_bar_set_panes_navi_to_main(ap);
+       }
+#endif
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "pNavi_s is NULL");
+
+       __mf_navi_bar_reset_navi_obj(ap);
+
+       pNaviBar = ap->mf_MainWindow.pNaviBar;
+       ap->mf_MainWindow.pNaviBox = NULL;
+       ap->mf_MainWindow.pNaviLayout= NULL;
+
+       ap->mf_MainWindow.pNaviBox = mf_widget_create_box(ap->mf_MainWindow.pNaviBar);
+       newContent = mf_widget_create_layout(ap->mf_MainWindow.pNaviBox, EDJ_NAME, GRP_NEW_FOLDER);
+       __new_folder_entryfield_create(newContent, ap);
+       evas_object_size_hint_weight_set(newContent, EVAS_HINT_EXPAND, 0);
+       evas_object_size_hint_align_set(newContent, EVAS_HINT_FILL, 0.0);
+       Evas_Object *pad = mf_widget_create_layout(ap->mf_MainWindow.pNaviBox, EDJ_NAME, "PAD");
+       elm_object_part_content_set(newContent, "content", ap->mf_MainWindow.pEditField);
+       elm_box_pack_start(ap->mf_MainWindow.pNaviBox, newContent);
+       elm_box_pack_end(ap->mf_MainWindow.pNaviBox, pad);
+       //newContent = mf_genlist_create_list_new_folder_style(ap);
+       /*set title segment or title*/
+       /*navigation view integration*/
+
+       title = g_string_new(GET_SYS_STR(MF_LABEL_CREATE_FOLDER));
+
+       if (title != NULL) {
+               pNavi_s->pNaviTitle = g_strdup(title->str);
+               g_string_free(title, TRUE);
+               title = NULL;
+       }
+
+       Elm_Object_Item *navi_it = NULL;
+       //mf_navi_bar_set_style(ap, NAVI_BAR_DEFAULT, newContent);
+       ap->mf_Status.pPreNaviItem = ap->mf_MainWindow.pNaviItem;
+       mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTRL);
+       navi_it = elm_naviframe_item_push(pNaviBar, NULL, NULL, NULL, ap->mf_MainWindow.pNaviBox, NULL);
+
+       ap->mf_MainWindow.pNaviItem = navi_it;
+
+       mf_navi_bar_title_set(ap);
+       //mf_navi_add_back_button(ap);
+
+       Evas_Object *l_bt = NULL;
+       Evas_Object *r_bt = NULL;
+
+       l_bt = elm_button_add(ap->mf_MainWindow.pNaviBar);
+       elm_object_focus_set(l_bt, EINA_FALSE);
+       elm_object_style_set(l_bt, "naviframe/toolbar/default");
+       elm_object_text_set(l_bt, GET_SYS_STR(LABEL_SAVE));
+       mf_language_mgr_register_object(l_bt, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_SAVE);
+       evas_object_smart_callback_add(l_bt, "clicked", mf_callback_save_cb, ap);
+       evas_object_show(l_bt);
+       elm_object_item_part_content_set(navi_it, NAVI_BOTTOM_BUTTON_1_PART, l_bt);
+       //elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, TITLE_LEFT_BTN, l_bt);
+
+
+       r_bt = elm_button_add(ap->mf_MainWindow.pNaviBar);
+       elm_object_focus_set(r_bt, EINA_FALSE);
+       elm_object_style_set(r_bt, "naviframe/end_btn/default");
+       //elm_object_style_set(r_bt, TITLE_BTN_STYLE);
+       //elm_object_text_set(r_bt, GET_SYS_STR(LABEL_CANCEL));
+       //mf_language_mgr_register_object(r_bt, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_CANCEL);
+       evas_object_smart_callback_add(r_bt, "clicked", mf_callback_cancel_cb, ap);
+       evas_object_show(r_bt);
+       elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, "prev_btn", r_bt);
+
+
+       mf_callback_imf_state_callback_register(ap);
+
+       elm_object_focus_set(ap->mf_MainWindow.pEntry, EINA_TRUE);
+
+}
+
+static void __rename_entryfield_create(Evas_Object *parent, void *data)
+{
+       MF_TRACE_BEGIN;
+       MF_TRACE_BEGIN;
+       mfItemData_s *params = (mfItemData_s *) data;
+       mf_retvm_if(params == NULL, NULL, "param is NULL");
+       mf_retvm_if(params->m_ItemName == NULL, NULL, "m_ItemName is NULL");
+
+       struct appdata *ap = (struct appdata *)params->ap;
+       mf_retvm_if(ap == NULL, NULL, "input parameter data error");
+
+       static Elm_Entry_Filter_Limit_Size limit_filter_data;
+       Evas_Object *edit_field = NULL;
+       Evas_Object *entry = NULL;
+       GString *filename = NULL;
+
+       mf_widget_create_entryfield(ap, parent, mf_callback_imf_changed_cb, NULL);
+
+       entry = ap->mf_MainWindow.pEntry;
+
+       edit_field = ap->mf_MainWindow.pEditField;
+
+       evas_object_size_hint_weight_set(edit_field, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(edit_field, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_object_signal_emit(edit_field, "elm,state,eraser,show", "elm");
+       //elm_editfield_eraser_set(edit_field, EINA_TRUE);
+
+       elm_entry_autocapital_type_set(entry, ELM_AUTOCAPITAL_TYPE_NONE);
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NORMAL);
+
+       if (params->ap->mf_FileOperation.to_rename != NULL) {
+               g_string_free(params->ap->mf_FileOperation.to_rename, TRUE);
+               params->ap->mf_FileOperation.to_rename = NULL;
+       }
+       params->ap->mf_FileOperation.to_rename = g_string_new((char *)params->m_ItemName->str);
+
+
+       /* the below is sample code for control entry. It is not mandatory.*/
+
+       /* set guide text */
+       filename = mf_fm_svc_wrapper_get_file_name(ap->mf_FileOperation.to_rename);
+       char *guide_text = NULL;
+       SAFE_FREE_CHAR(ap->mf_FileOperation.file_name_suffix);
+       if (!mf_file_attr_is_dir(ap->mf_FileOperation.to_rename->str)) {
+               mf_debug();
+               char *ext = NULL;
+               char *name_without_ext = NULL;
+               name_without_ext = g_strdup(ap->mf_FileOperation.to_rename->str);
+               mf_file_attr_get_file_ext(ap->mf_FileOperation.to_rename->str, &ext);
+               mf_debug("ext is %s", ext);
+               if (ext && strlen(ext) != 0) {
+                       mf_debug();
+                       name_without_ext[strlen(name_without_ext) - strlen(ext) - 1] = '\0';
+                       ap->mf_FileOperation.file_name_suffix = strdup(ext);
+                       mf_debug("name_without_ext is [%s]\n", name_without_ext);
+                       if (strlen(name_without_ext)) {
+                               guide_text = elm_entry_utf8_to_markup(ecore_file_file_get(name_without_ext));
+                       } else {
+                               guide_text = elm_entry_utf8_to_markup(filename->str);
+                       }
+               } else {
+                       guide_text = elm_entry_utf8_to_markup(filename->str);
+               }
+
+               SAFE_FREE_CHAR(ext);
+               SAFE_FREE_CHAR(name_without_ext);
+       } else {
+               guide_text = elm_entry_utf8_to_markup(filename->str);
+       }
+
+       if (ap->mf_FileOperation.file_name_suffix) {
+               limit_filter_data.max_char_count = (MYFILE_FILE_NAME_LEN_MAX - mf_util_character_count_get(ap->mf_FileOperation.file_name_suffix) - 1);
+       } else {
+               limit_filter_data.max_char_count = MYFILE_FILE_NAME_LEN_MAX;
+       }
+
+       limit_filter_data.max_byte_count = 0;
+       elm_entry_markup_filter_append(ap->mf_MainWindow.pEntry, elm_entry_filter_limit_size, &limit_filter_data);
+       elm_entry_input_panel_return_key_type_set(ap->mf_MainWindow.pEntry, ELM_INPUT_PANEL_RETURN_KEY_TYPE_DONE);
+
+       elm_entry_entry_set(ap->mf_MainWindow.pEntry, guide_text);
+       /*elm_entry_entry_set(entry, ecore_file_file_get(params->m_ItemName->str));*/
+       elm_entry_cursor_end_set(entry);
+
+       SAFE_FREE_CHAR(guide_text);
+       SAFE_FREE_GSTRING(filename);
+
+       evas_object_smart_callback_add(entry, "activated", mf_genlist_rename_done, params->ap);
+       evas_object_smart_callback_add(entry, "maxlength,reached", mf_callback_max_len_reached_cb, params->ap);
+       evas_object_smart_callback_add(entry, "preedit,changed",
+                                      mf_callback_imf_preedit_change_cb, ap);
+       mf_widget_imf_hide_callback_register(ap->mf_MainWindow.pConformant, entry);
+
+       evas_object_show(entry);
+       elm_object_focus_set(entry, EINA_TRUE);
+
+       MF_TRACE_END;
+
+}
+
+void mf_navi_bar_create_rename_view(void *data)
+{
+
+       MF_TRACE_BEGIN;
+       mfItemData_s *params = (mfItemData_s *) data;
+
+       struct appdata *ap = (struct appdata *)params->ap;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       Evas_Object *newContent = NULL;
+
+       Evas_Object *pNaviBar = NULL;
+       GString *title = NULL;
+#ifdef MYFILE_SPLIT_VIEW
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               mf_navi_bar_set_panes_navi_to_main(ap);
+       }
+#endif
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "pNavi_s is NULL");
+
+       pNaviBar = ap->mf_MainWindow.pNaviBar;
+       SAFE_FREE_GSTRING(ap->mf_FileOperation.to_rename);
+
+       ap->mf_FileOperation.to_rename = g_string_new((char *)params->m_ItemName->str);
+
+       ap->mf_MainWindow.pNaviBox = NULL;
+       ap->mf_MainWindow.pNaviLayout= NULL;
+
+       ap->mf_MainWindow.pNaviBox = mf_widget_create_box(ap->mf_MainWindow.pNaviBar);
+       newContent = mf_widget_create_layout(ap->mf_MainWindow.pNaviBox, EDJ_NAME, GRP_NEW_FOLDER);
+       __rename_entryfield_create(newContent, params);
+       evas_object_size_hint_weight_set(newContent, EVAS_HINT_EXPAND, 0);
+       evas_object_size_hint_align_set(newContent, EVAS_HINT_FILL, 0.0);
+       Evas_Object *pad = mf_widget_create_layout(ap->mf_MainWindow.pNaviBox, EDJ_NAME, "PAD");
+       elm_object_part_content_set(newContent, "content", ap->mf_MainWindow.pEditField);
+       elm_box_pack_start(ap->mf_MainWindow.pNaviBox, newContent);
+       elm_box_pack_end(ap->mf_MainWindow.pNaviBox, pad);
+
+       title = g_string_new(GET_SYS_STR(LABEL_RENAME));
+
+       if (title != NULL) {
+               pNavi_s->pNaviTitle = g_strdup(title->str);
+               g_string_free(title, TRUE);
+               title = NULL;
+       }
+       /*navigation view integration*/
+       ap->mf_Status.pPreNaviItem = ap->mf_MainWindow.pNaviItem;
+       mf_language_mgr_unregister_object_item_by_type(ITEM_TYPE_CTRL);
+       ap->mf_MainWindow.pNaviItem = elm_naviframe_item_push(pNaviBar, NULL, NULL, NULL, ap->mf_MainWindow.pNaviBox, NULL);
+
+       mf_navi_bar_title_set(ap);
+
+       Evas_Object *l_bt = NULL;
+       Evas_Object *r_bt = NULL;
+
+       l_bt = elm_button_add(ap->mf_MainWindow.pNaviBar);
+       elm_object_focus_set(l_bt, EINA_FALSE);
+       elm_object_style_set(l_bt, "naviframe/toolbar/default");
+       elm_object_text_set(l_bt, GET_SYS_STR(LABEL_SAVE));
+       mf_language_mgr_register_object(l_bt, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_SAVE);
+       evas_object_smart_callback_add(l_bt, "clicked", mf_callback_save_cb, ap);
+       evas_object_show(l_bt);
+       elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, NAVI_BOTTOM_BUTTON_1_PART, l_bt);
+
+       r_bt = elm_button_add(ap->mf_MainWindow.pNaviBar);
+       elm_object_focus_set(r_bt, EINA_FALSE);
+       elm_object_style_set(r_bt, "naviframe/end_btn/default");
+       evas_object_smart_callback_add(r_bt, "clicked", mf_callback_cancel_cb, ap);
+       evas_object_show(r_bt);
+
+       mf_callback_imf_state_callback_register(ap);
+       elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, "prev_btn", r_bt);
+       MF_TRACE_END;
+}
+
+
+myfileNaviBar *mf_navi_bar_get_in_use(void *data)
+{
+
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+       Eina_List *plistNavi_s = ap->mf_MainWindow.plistNaviBar;
+       mf_retvm_if(plistNavi_s == NULL, NULL, "plistNavi_s is NULL");
+
+       myfileNaviBar *ret = NULL;
+       Eina_List *l = NULL;
+       void *item;
+
+       EINA_LIST_FOREACH(plistNavi_s, l, item) {
+               ret = (myfileNaviBar *) item;
+
+               mf_retvm_if(ret == NULL, NULL, "item is NULL");
+
+               if (ret->naviFlagInUse == TRUE) {
+                       break;
+               } else {
+                       ret = NULL;
+               }
+       }
+
+       return ret;
+}
+
+myfileNaviBar *mf_navi_bar_get_edit_start(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       Eina_List *plistNavi_s = ap->mf_MainWindow.plistNaviBar;
+       assert(plistNavi_s);
+
+       myfileNaviBar *ret = NULL;
+       Eina_List *l = NULL;
+       void *item;
+
+       EINA_LIST_FOREACH(plistNavi_s, l, item) {
+               ret = (myfileNaviBar *) item;
+               if (ret->naviFlagEditStart == TRUE) {
+                       break;
+               } else {
+                       ret = NULL;
+               }
+       }
+       return ret;
+}
+
+void mf_navi_bar_object_reset(myfileNaviBar *pNavi_s)
+{
+       mf_retm_if(pNavi_s == NULL, "Navi structure is NULL");
+       pNavi_s->pNaviTitle = NULL;
+
+       if (pNavi_s->pCurrentPath != NULL)
+               free(pNavi_s->pCurrentPath);
+       pNavi_s->pCurrentPath = NULL;
+
+       if (pNavi_s->pNaviLabel != NULL)
+               free(pNavi_s->pNaviLabel);
+       pNavi_s->pNaviLabel = NULL;
+}
+
+/******************************
+** Prototype    : mfNaviBarListItemRemove
+** Description  : remove the navi bar item from the list by label
+** Input        : void *data
+**                const char* pNaviLabel
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+bool mf_navi_bar_remove_list_item_by_label(void *data, const char *pNaviLabel)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, false, "ap is NULL");
+       mf_retvm_if(pNaviLabel == NULL, false, "Navi Bar Label is NULL");
+
+       bool bEditStartFlag = FALSE;
+       bool bInUseFlag = FALSE;
+       mf_debug();
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_struct_by_label(ap, pNaviLabel);
+
+       if (pNavi_s == NULL) {
+               mf_debug();
+               return bEditStartFlag;
+       }
+       Eina_List *plistNavi = eina_list_data_find_list(ap->mf_MainWindow.plistNaviBar, pNavi_s);
+       ap->mf_MainWindow.plistNaviBar = eina_list_remove_list(ap->mf_MainWindow.plistNaviBar, plistNavi);
+
+       mf_debug();
+       if (pNavi_s->naviFlagEditStart == TRUE) {
+               bEditStartFlag = TRUE;
+       }
+       if (pNavi_s->naviFlagInUse == TRUE) {
+               bInUseFlag = TRUE;
+       }
+       mf_debug();
+       mf_navi_bar_object_reset(pNavi_s);
+
+       if (bInUseFlag == TRUE) {
+               pNavi_s = (myfileNaviBar *) eina_list_nth(ap->mf_MainWindow.plistNaviBar, 0);
+               pNavi_s->naviFlagInUse = TRUE;
+       }
+       mf_debug();
+       return bEditStartFlag;
+}
+
+myfileNaviBar *mf_navi_bar_get_struct_by_label(void *data, const char *pNaviLabel)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+       mf_retvm_if(pNaviLabel == NULL, NULL, "Navi Bar Label is NULL");
+
+       Eina_List *l = NULL;
+       void *item = NULL;
+
+       myfileNaviBar *ret = NULL;
+       EINA_LIST_FOREACH(ap->mf_MainWindow.plistNaviBar, l, item) {
+               if (g_strcmp0(((myfileNaviBar *) item)->pNaviLabel, pNaviLabel) == 0) {
+                       ret = (myfileNaviBar *) item;
+                       break;
+               }
+       }
+       return ret;
+}
+
+myfileNaviBar *mf_navi_bar_recover_list(void *data)
+{
+       mf_debug();
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       /*0     set state to be Default*/
+       ap->mf_Status.more = MORE_DEFAULT;
+       /*1     recover all the navigation bar*/
+       Eina_List *l = NULL;
+       void *item = NULL;
+       myfileNaviBar *pNavi_s = NULL;
+       myfileNaviBar *pNavi_toshow = NULL;
+       bool flag_pop_todo = FALSE;
+       EINA_LIST_FOREACH(ap->mf_MainWindow.plistNaviBar, l, item) {
+               flag_pop_todo = TRUE;
+               pNavi_s = (myfileNaviBar *) item;
+               /*2.0   recover the pre_status*/
+               pNavi_s->pre_more = ap->mf_Status.more;
+               /*2.1   recover the path just before when edit click*/
+               pNavi_s->pCurrentPath = g_strdup(pNavi_s->pre_operation.path->str);
+               /*2.2   free the backup data structure*/
+               g_string_free(pNavi_s->pre_operation.path, TRUE);
+               pNavi_s->pre_operation.path = NULL;
+               memset(&(pNavi_s->pre_operation), 0, sizeof(oper_record));
+               /*2.3   set navi related status*/
+               if (pNavi_s->naviFlagInUse == TRUE) {
+                       /*2.1-1 set pNavi_toshow for refreshing*/
+                       pNavi_toshow = pNavi_s;
+               }
+       }
+       return pNavi_toshow;
+}
+
+void mf_navi_bar_refresh_recovered_view(void *data, myfileNaviBar * pNaviStruct)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       mf_retm_if(pNaviStruct == NULL, "Navi Bar Struct is NULL");
+
+       if (ap->mf_Status.path != NULL) {
+               g_string_free(ap->mf_Status.path, TRUE);
+               ap->mf_Status.path = NULL;
+       }
+       ap->mf_Status.path = g_string_new(pNaviStruct->pCurrentPath);
+       mf_debug("ap->mf_Status.path is [%s]", ap->mf_Status.path->str);
+
+       /*insert new view*/
+       mf_widget_refresh_view(ap);
+
+       MF_TRACE_END;
+}
+
+bool mf_navi_bar_is_navi_empty(void *data, char *label)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+       assert(label);
+
+
+       Elm_Object_Item *top_it= elm_naviframe_top_item_get(ap->mf_MainWindow.pNaviBar);
+       Evas_Object *top_view = elm_object_item_content_get(top_it);
+
+       if (top_view == NULL)
+               return TRUE;
+       else
+               return FALSE;
+}
+
+void mf_navi_bar_transition_finished_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(obj == NULL, "obj is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       Elm_Object_Item *it = ap->mf_Status.pPreNaviItem;
+
+       SAFE_DEL_NAVI_ITEM(it);
+       ap->mf_Status.pPreNaviItem = NULL;
+       mf_widget_set_navi_blocking(ap, EINA_FALSE);
+        evas_object_smart_callback_del(obj, "transition,finished", mf_navi_bar_transition_finished_cb);
+       MF_TRACE_END;
+}
+
+void mf_navi_bar_remove_previous_contents(void *data, Evas_Object *pNaviBar)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(pNaviBar == NULL, "pNaviBar is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.pPreNaviItem != NULL) {
+               mf_widget_set_navi_blocking(data, EINA_TRUE);
+               evas_object_smart_callback_add(pNaviBar, "transition,finished", mf_navi_bar_transition_finished_cb, data);
+       }
+       MF_TRACE_END;
+}
+
+void mf_navi_bottom_item_del(Elm_Object_Item **pPreNaviItem)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(*pPreNaviItem == NULL, "pPreNaviItem is NULL");
+       SAFE_DEL_NAVI_ITEM(*pPreNaviItem);
+       *pPreNaviItem = NULL;
+       MF_TRACE_END;
+}
+
+myfileNaviBar *mf_navi_bar_get_navi_from_navilist(Eina_List *navilist, const char *label)
+{
+
+       MF_TRACE_BEGIN;
+       mf_retvm_if(navilist == NULL, NULL, "navilist is NULL");
+       mf_retvm_if(label == NULL, NULL, "label is NULL");
+
+       void *data = NULL;
+       myfileNaviBar *pNavi = NULL;
+       Eina_List *l = NULL;
+       EINA_LIST_FOREACH(navilist, l, data) {
+               if (data) {
+                       pNavi = (myfileNaviBar *)data;
+                       if (pNavi && pNavi->pNaviLabel && g_strcmp0(label, pNavi->pNaviLabel) == 0)
+                               return pNavi;
+                       else
+                               continue;
+               }
+       }
+       return NULL;
+}
+
+
+void mf_navi_bar_del_item_directly(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+
+       if (ap->mf_Status.flagNaviPush) {
+               if(ap->mf_Status.pPreNaviItem)
+               {
+                       SAFE_DEL_NAVI_ITEM(ap->mf_Status.pPreNaviItem);
+                       mf_widget_set_navi_blocking(ap, EINA_FALSE);
+                       evas_object_smart_callback_del(ap->mf_MainWindow.pNaviBar, "transition,finished", mf_navi_bar_transition_finished_cb);
+              }
+       }
+}
+
+void mf_navi_bar_button_set_disable(Elm_Object_Item *navi_it, int disable_item, bool disable)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(navi_it == NULL, "navi_it is NULL");
+       Evas_Object *btn = NULL;
+       if (disable_item & CTRL_DISABLE_EDIT) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_1_PART);
+               const char *button_label = elm_object_text_get(btn);
+               if (g_strcmp0(button_label, GET_SYS_STR(MF_LABEL_EDIT)) == 0)
+                       elm_object_disabled_set(btn, disable);
+
+       }
+       if (disable_item & CTRL_DISABLE_DELETE) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_1_PART);
+               const char *button_label = elm_object_text_get(btn);
+               if (g_strcmp0(button_label, GET_SYS_STR(LABEL_DELETE)) == 0)
+                       elm_object_disabled_set(btn, disable);
+
+       }
+       if (disable_item & CTRL_DISABLE_SEND) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_1_PART);
+               const char *button_label = elm_object_text_get(btn);
+               if (g_strcmp0(button_label, GET_SYS_STR(LABEL_SHARE)) == 0)
+                       elm_object_disabled_set(btn, disable);
+
+       }
+       if (disable_item & CTRL_DISABLE_SEND) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_2_PART);
+               const char *button_label = elm_object_text_get(btn);
+               if (g_strcmp0(button_label, GET_SYS_STR(LABEL_SHARE)) == 0)
+                       elm_object_disabled_set(btn, disable);
+
+       }
+       if (disable_item & CTRL_DISABLE_COPY_HERE) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_1_PART);
+               const char *button_label = elm_object_text_get(btn);
+               if (g_strcmp0(button_label, GET_STR(LABEL_COPY_HERE)) == 0)
+                       elm_object_disabled_set(btn, disable);
+
+       }
+       if (disable_item & CTRL_DISABLE_MOVE_HERE) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_1_PART);
+               const char *button_label = elm_object_text_get(btn);
+               if (g_strcmp0(button_label, GET_STR(LABEL_MOVE_HERE)) == 0)
+                       elm_object_disabled_set(btn, disable);
+
+       }
+       if (disable_item & CTRL_DISABLE_CREATE) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_2_PART);
+               const char *button_label = elm_object_text_get(btn);
+               if (g_strcmp0(button_label, GET_SYS_STR(MF_LABEL_CREATE_FOLDER)) == 0)
+                       elm_object_disabled_set(btn, disable);
+       }
+       if (disable_item & CTRL_DISABLE_MORE) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_MORE_BUTTON_PART);
+               elm_object_disabled_set(btn, disable);
+       }
+
+       if (disable_item & CTRL_DISABLE_SEARCH) {
+               btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_1_PART);
+               elm_object_disabled_set(btn, disable);
+       }
+
+       MF_TRACE_END;
+
+}
+
+
+int mf_navi_bar_button_get_disable(Elm_Object_Item *navi_it)
+{
+       mf_retvm_if(navi_it == NULL, 0, "navi_it is NULL");
+       int disable_item = 0;
+       const char *button_label = NULL;
+
+       Evas_Object *btn = NULL;
+       btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_1_PART);
+       button_label = elm_object_text_get(btn);
+       if(elm_object_disabled_get(btn)) {
+               if (g_strcmp0(button_label, GET_SYS_STR(LABEL_DELETE)) == 0) {
+                       disable_item |= CTRL_DISABLE_DELETE;
+               }
+       }
+
+       btn = elm_object_item_part_content_get(navi_it, NAVI_BOTTOM_BUTTON_2_PART);
+       button_label = elm_object_text_get(btn);
+       if(elm_object_disabled_get(btn)) {
+               if (g_strcmp0(button_label, GET_SYS_STR(LABEL_SHARE)) == 0) {
+                       disable_item |= CTRL_DISABLE_SEND;
+               }
+       }
+
+       return disable_item;
+}
+
diff --git a/src/widget/mf-popup.c b/src/widget/mf-popup.c
new file mode 100644 (file)
index 0000000..0afed34
--- /dev/null
@@ -0,0 +1,806 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <vconf-keys.h>
+#include <syspopup_caller.h>
+#include <bundle.h>
+#include <status.h>
+
+#include "mf-util.h"
+#include "mf-widget.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-callback.h"
+#include "mf-language-mgr.h"
+
+#define ITEM_COUNT     6
+#define ITEM_MAX_COUNT 4
+#define SHARE_ITEM_COUNT       4
+#define MF_POPUP_STYLE_MIN_MENUSTYLE "menustyle"
+#define MF_POPUP_MENUSTYLE_WIDTH (614*elm_config_scale_get())
+#define MF_POPUP_MENUSTYLE_HEIGHT(x) ((113*x-1)*elm_config_scale_get())
+#define MF_POPUP_MENUSTYLE_HEIGHT_MAX (408*elm_config_scale_get())
+Elm_Genlist_Item_Class listby_itc, share_itc, storage_itc;
+
+typedef struct {
+       int index;
+       bool unregister_lang_mgr;
+       Elm_Object_Item *item;
+       struct appdata *ap;
+} ListByData_s;
+
+static int __mf_popup_get_list_by_selected_item()
+{
+       int iSortTypeValue = 0;
+       mf_util_get_vconf_value(VCONF_TYPE_SORT_TYPE, &iSortTypeValue);
+
+       int ret = -1;
+       switch (iSortTypeValue) {
+       case    MYFILE_SORT_BY_DATE_O2R:
+               ret = 3;
+               break;
+       case    MYFILE_SORT_BY_DATE_R2O:
+               ret = 2;
+               break;
+       case    MYFILE_SORT_BY_TYPE_A2Z:
+               ret = 5;
+               break;
+       case    MYFILE_SORT_BY_NAME_A2Z:
+               ret = 0;
+               break;
+       case    MYFILE_SORT_BY_NAME_Z2A:
+               ret = 1;
+               break;
+       case    MYFILE_SORT_BY_SIZE_L2S:
+               ret = 4;
+               break;
+       case    MYFILE_SORT_BY_SIZE_S2L:
+       case    MYFILE_SORT_BY_TYPE_Z2A:
+       default:
+               ret = 0;
+               break;
+       }
+       return ret;
+}
+
+static int __mf_popup_get_list_by_opt(int index)
+{
+       //int iSortTypeValue = 0;
+       //mf_util_get_vconf_value(VCONF_TYPE_SORT_TYPE, &iSortTypeValue);
+
+       fsSortOption ret = MYFILE_SORT_BY_NONE;
+       switch (index) {
+       case 0:
+               ret = MYFILE_SORT_BY_NAME_A2Z;
+               break;
+       case 1:
+               ret = MYFILE_SORT_BY_NAME_Z2A;
+               break;
+       case 2:
+               ret = MYFILE_SORT_BY_DATE_R2O;
+               break;
+       case 3:
+               ret = MYFILE_SORT_BY_DATE_O2R;
+               break;
+       case 4:
+               ret = MYFILE_SORT_BY_SIZE_L2S;
+               break;
+       case 5:
+               ret = MYFILE_SORT_BY_TYPE_A2Z;
+               break;
+       default:
+               ret = MYFILE_SORT_BY_DATE_R2O;
+               break;
+       }
+       return ret;
+}
+
+static int __mf_popup_get_view_as_type(int index)
+{
+       eMfViewStyle ret = MF_VIEW_STYLE_LIST;
+       switch (index) {
+       case 0:
+               ret = MF_VIEW_STYLE_LIST;
+               break;
+       case 1:
+               ret = MF_VIEW_SYTLE_LIST_DETAIL;
+               break;
+       case 2:
+               ret = MF_VIEW_STYLE_THUMBNAIL;
+               break;
+       default:
+               ret = MF_VIEW_STYLE_LIST;
+               break;
+       }
+       return ret;
+}
+
+static void __mf_popup_listby_genlist_del(void *data, Evas_Object * obj)
+{
+       MF_TRACE_BEGIN;
+       ListByData_s *params = (ListByData_s *) data;
+       mf_retm_if(params == NULL, "params is NULL");
+
+       if(params->unregister_lang_mgr)
+               mf_language_mgr_unregister_genlist_item(params->item);
+       SAFE_FREE_CHAR(params);
+}
+
+static char *__mf_popup_get_genlist_label(void *data, Evas_Object * obj, const char *part)
+{
+       ListByData_s *params = (ListByData_s *) data;
+       assert(params);
+       struct appdata *ap = params->ap;
+       assert(ap);
+       assert(part);
+
+       char *ret = NULL;
+       if (!strcmp(part, "elm.text")) {
+               //listby_opt = __mf_popup_get_list_by_opt(params->index);
+               switch (params->index) {
+               case 0:
+                       ret = g_strdup(GET_STR(MF_LABEL_NAME_HA_TO_Z));
+                       break;
+               case 1:
+                       ret = g_strdup(GET_STR(MF_LABEL_NAME_HZ_TO_A));
+                       break;
+               case 2:
+                       ret = g_strdup(GET_STR(MF_LABEL_DATE_HMOST_RECENT));
+                       break;
+               case 3:
+                       ret = g_strdup(GET_STR(MF_LABEL_DATE_HOLDEST));
+                       break;
+               case 4:
+                       ret = g_strdup(GET_SYS_STR(MF_LABEL_SIZE));
+                       break;
+               case 5:
+                       ret = g_strdup(GET_SYS_STR(MF_LABEL_TYPE));                   /**< Sort by file size descending */
+                       break;
+               #if 0
+               case MYFILE_SORT_BY_DATE_R2O:                         /**< Sort by file date descending */
+                       ret = g_strdup(GET_SYS_STR(MF_LABEL_DATE));
+                       break;
+               case MYFILE_SORT_BY_TYPE_Z2A:                           /**< Sort by file type descending */
+                       ret = g_strdup(GET_SYS_STR(MF_LABEL_TYPE));
+                       break;
+               #endif
+               default:
+                       break;
+               }
+               return ret;
+       }
+       return NULL;
+}
+
+static char *__mf_popup_view_as_genlist_label_get(void *data, Evas_Object * obj, const char *part)
+{
+       ListByData_s *params = (ListByData_s *) data;
+       assert(params);
+       struct appdata *ap = params->ap;
+       assert(ap);
+       assert(part);
+
+       eMfViewStyle view_as_type = MF_VIEW_STYLE_LIST;
+
+       char *ret = NULL;
+       if (!strcmp(part, "elm.text")) {
+               view_as_type = __mf_popup_get_view_as_type(params->index);
+               switch (view_as_type) {
+               case MF_VIEW_STYLE_LIST:                              /**< Sort by file name ascending */
+                       ret = g_strdup(GET_SYS_STR(MF_LABEL_LIST));
+                       break;
+               case MF_VIEW_SYTLE_LIST_DETAIL:                       /**< Sort by file size ascending */
+                       ret = g_strdup(GET_STR(LABEL_LIST_DETAIL_VIEW));
+                       break;
+               case MF_VIEW_STYLE_THUMBNAIL:                         /**< Sort by file date ascending */
+                       ret = g_strdup(GET_STR(MF_LABEL_THUMBNAILS));
+                       break;
+               default:
+                       break;
+               }
+               return ret;
+       }
+       return NULL;
+}
+
+static Evas_Object* __mf_popup_get_genlist_icon(void *data, Evas_Object * obj, const char *part)
+{
+       ListByData_s *params = (ListByData_s *) data;
+       assert(params);
+       struct appdata *ap = params->ap;
+       assert(ap);
+       assert(part);
+
+       if (!strcmp(part, "elm.icon")) {
+               Evas_Object *radio = NULL;
+               radio = elm_radio_add(obj);
+               elm_object_focus_set(radio, EINA_FALSE);
+               elm_radio_state_value_set(radio, params->index);
+               elm_radio_group_add(radio, ap->mf_Status.pRadioGroup);
+               elm_radio_value_set(radio, ap->mf_Status.iRadioValue);
+               evas_object_show(radio);
+               return radio;
+       }
+       return NULL;
+}
+
+static void __mf_popup_genlist_select(void *data, Evas_Object * obj, void *event_info)
+{
+       assert(data);
+       assert(event_info);
+       ListByData_s *params = NULL;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+
+       if (item != NULL) {
+
+               elm_genlist_item_selected_set(item, FALSE);
+               params = (ListByData_s *) elm_object_item_data_get(item);
+               if (params != NULL && params->ap != NULL) {
+                       fsSortOption iListBySortType = MYFILE_SORT_BY_NONE;
+                       params->ap->mf_Status.iSelectedSortType = params->index;
+                       elm_radio_value_set(params->ap->mf_Status.pRadioGroup, params->index);
+                       iListBySortType = __mf_popup_get_list_by_opt(params->index);
+                       mf_util_set_sort_type(iListBySortType);
+                       mf_callback_list_by_response_cb(params->ap);
+               }
+       }
+}
+
+
+static void __mf_popup_view_as_genlist_select(void *data, Evas_Object * obj, void *event_info)
+{
+       assert(data);
+       assert(event_info);
+       ListByData_s *params = NULL;
+       int iViewAsType = 0;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       if (item != NULL) {
+               params = (ListByData_s *) elm_object_item_data_get(item);
+               if (params != NULL && params->ap != NULL) {
+                       elm_radio_value_set(params->ap->mf_Status.pRadioGroup, params->index);
+                       iViewAsType = __mf_popup_get_view_as_type(params->index);
+                       params->ap->mf_Status.flagViewType = iViewAsType;
+                       mf_util_set_view_style(iViewAsType);
+                       mf_callback_popup_del_idler_cb(params->ap);
+                       if (params->ap->mf_Status.flagNoContent != EINA_TRUE) {
+                               mf_widget_refresh_view(params->ap);
+                       }
+               }
+       }
+}
+static int __mf_popup_get_view_as_selected_item()
+{
+       int iViewAs = 0;
+
+       mf_util_get_vconf_value(VCONF_TYPE_VIEW_STYLE, &iViewAs);
+
+       int ret = -1;
+       switch (iViewAs) {
+       case    MF_VIEW_STYLE_LIST:
+               ret = 0;
+               break;
+       case    MF_VIEW_SYTLE_LIST_DETAIL:
+               ret = 1;
+               break;
+       case    MF_VIEW_STYLE_THUMBNAIL:
+               ret = 2;
+               break;
+       default:
+               ret = 0;
+               break;
+       }
+       return ret;
+}
+
+#ifdef MYFILE_SPLIT_VIEW
+static void __mf_popup_storage_genlist_del(void *data, Evas_Object * obj)
+{
+       MF_TRACE_BEGIN;
+       StorageData_s *params = (StorageData_s *) data;
+       mf_retm_if(params == NULL, "params is NULL");
+
+       if(params->unregister_lang_mgr)
+               mf_language_mgr_unregister_genlist_item(params->item);
+       SAFE_FREE_CHAR(params->label);
+       SAFE_FREE_CHAR(params);
+}
+
+static char *__mf_popup_get_storage_genlist_label(void *data, Evas_Object * obj, const char *part)
+{
+       MF_TRACE_BEGIN;
+       StorageData_s *params = (StorageData_s *) data;
+       mf_retvm_if(params == NULL, NULL, "params is NULL");
+       struct appdata *ap = params->ap;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+       assert(part);
+
+       if (!strcmp(part, "elm.text")) {
+               MF_TRACE_END;
+               return strdup(params->label);
+       }
+       MF_TRACE_END;
+       return NULL;
+}
+
+static Evas_Object* __mf_popup_get_storage_genlist_icon(void *data, Evas_Object * obj, const char *part)
+{
+       MF_TRACE_BEGIN;
+       StorageData_s *params = (StorageData_s *) data;
+       mf_retvm_if(params == NULL, NULL, "params is NULL");
+       struct appdata *ap = params->ap;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+       assert(part);
+
+       if (!strcmp(part, "elm.icon")) {
+               Evas_Object *radio = NULL;
+               radio = elm_radio_add(obj);
+               elm_object_focus_set(radio, EINA_FALSE);
+               elm_radio_state_value_set(radio, params->index);
+               elm_radio_group_add(radio, ap->mf_Status.pRadioGroup);
+               elm_radio_value_set(radio, ap->mf_Status.iRadioValue);
+               evas_object_show(radio);
+               MF_TRACE_END;
+               return radio;
+       }
+       MF_TRACE_END;
+       return NULL;
+}
+
+static void __mf_popup_storage_genlist_select(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(event_info == NULL, "event_info is NULL");
+       StorageData_s *params = NULL;
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       if (item != NULL) {
+               params = (StorageData_s *) elm_object_item_data_get(item);
+               if (params != NULL && params->ap != NULL) {
+               }
+       }
+}
+#endif
+/******************************
+** Prototype    : mf_popup_create_pb_popup
+** Description  :
+** Input        : void *data
+**                char *context
+**                int file_count
+**                void*func
+**                void* param
+** Output       : None
+** Return Value :
+** Calls        :
+** Called By    :
+**
+**  History        :
+**  1.Date         : 2010/12/10
+**    Author       : Samsung
+**    Modification : Created function
+**
+******************************/
+Evas_Object *mf_popup_create_pb_popup(void *data, char *context, int file_count, void *func, void *param)
+{
+
+       struct appdata *ap;
+
+       ap = (struct appdata *)data;
+       assert(ap);
+
+       char count[256] = { 0 };
+       Evas_Object *popup, *progressbar;
+       Evas_Object *layout;
+
+       snprintf(count, sizeof(count), "%s0/%d", count, file_count);
+
+       popup = elm_popup_add(ap->mf_MainWindow.pMainLayout);
+       elm_object_focus_set(popup, EINA_FALSE);
+
+       layout = elm_layout_add(popup);
+       elm_object_focus_set(layout, EINA_FALSE);
+       elm_layout_file_set(layout, EDJ_NAME, "popup_center_progressview");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       ap->mf_MainWindow.pProgressLayout = layout;
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_focus_set(progressbar, EINA_FALSE);
+       ap->mf_FileOperation.progress_bar = progressbar;
+       elm_object_style_set(progressbar, "list_progress");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_value_set(progressbar, 0.0);
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", progressbar);
+       edje_object_part_text_set(elm_layout_edje_get(layout), "elm.title", context);
+       edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text.left", "0%");
+       edje_object_part_text_set(elm_layout_edje_get(layout), "elm.text.right", count);
+
+       elm_object_content_set(popup, layout);
+
+       Evas_Object *btn1 = mf_widget_button_create(popup, GET_SYS_STR(LABEL_CANCEL));
+       elm_object_style_set(btn1, "popup_button/default");
+       evas_object_smart_callback_add(btn1, "clicked", func, param);
+       elm_object_part_content_set(popup, "button1", btn1);
+
+       evas_object_show(popup);
+
+       return popup;
+}
+
+/******************************
+** Prototype    : mf_popup_create_popup
+** 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
+**
+******************************/
+#ifdef MYFILE_SPLIT_VIEW
+static void mf_popup_storage_item_append(void *data, Evas_Object *popup, Evas_Object *genlist)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       mf_retm_if(popup == NULL, "popup is NULL");
+       mf_retm_if(genlist == NULL, "genlist is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       Elm_Object_Item *it = NULL;
+
+       StorageData_s *item_data = malloc(sizeof(StorageData_s));
+       if (item_data == NULL) {
+               mf_util_operation_alloc_failed(ap);
+               MF_TRACE_END;
+               return;
+       }
+
+       item_data->label= strdup(GET_SYS_STR(MF_LABEL_PHONE));
+       item_data->index = MYFILE_PHONE;
+
+       item_data->unregister_lang_mgr = TRUE;
+       item_data->ap = ap;
+       it = elm_genlist_item_append(genlist, &storage_itc, (void *)item_data, NULL,
+                                    ELM_GENLIST_ITEM_NONE, __mf_popup_storage_genlist_select, popup);
+       item_data->item = it;
+       mf_language_mgr_register_genlist_item(it);
+
+       if (ap->mf_Status.iStorageState & MYFILE_MMC) {
+               StorageData_s *item_data = malloc(sizeof(StorageData_s));
+               if (item_data == NULL) {
+                       mf_util_operation_alloc_failed(ap);
+                       MF_TRACE_END;
+                       return;
+               }
+               item_data->label = strdup(GET_SYS_STR(MF_LABEL_MMC));
+               mf_debug("item_data->label is [%s]", item_data->label);
+               item_data->index = MYFILE_MMC;
+               item_data->ap = ap;
+               it = elm_genlist_item_append(genlist, &storage_itc, (void *)item_data, NULL,
+                                            ELM_GENLIST_ITEM_NONE, __mf_popup_storage_genlist_select, popup);
+               item_data->item = it;
+               mf_language_mgr_register_genlist_item(it);
+       }
+       if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+               StorageData_s *item_data = malloc(sizeof(StorageData_s));
+               if (item_data == NULL) {
+                       mf_util_operation_alloc_failed(ap);
+                       MF_TRACE_END;
+                       return;
+               }
+               item_data->label = strdup(GET_STR(MF_LABEL_OTG));
+               mf_debug("item_data->label is [%s]", item_data->label);
+               item_data->index = MYFILE_OTG;
+               item_data->ap = ap;
+               it = elm_genlist_item_append(genlist, &storage_itc, (void *)item_data, NULL,
+                                            ELM_GENLIST_ITEM_NONE, __mf_popup_storage_genlist_select, popup);
+               item_data->item = it;
+               mf_language_mgr_register_genlist_item(it);
+       }
+       MF_TRACE_END;
+}
+#endif
+
+
+static Evas_Object *__mf_popup_box_set(Evas_Object *parent, Evas_Object *content, int item_cnt)
+{
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(content == NULL, NULL, "content is NULL");
+       mf_retvm_if(item_cnt < 0, NULL, "content is NULL");
+
+       Evas_Object *box = elm_box_add(parent);
+       if (item_cnt > ITEM_MAX_COUNT) {
+               evas_object_size_hint_min_set(box, MF_POPUP_MENUSTYLE_WIDTH,
+                                             MF_POPUP_MENUSTYLE_HEIGHT(ITEM_MAX_COUNT));
+       } else {
+               evas_object_size_hint_min_set(box, MF_POPUP_MENUSTYLE_WIDTH,
+                                             MF_POPUP_MENUSTYLE_HEIGHT(item_cnt));
+       }
+
+       evas_object_show(content);
+       elm_box_pack_end(box, content);
+       return box;
+}
+
+Evas_Object *mf_ug_popup_create_search(void *data, Evas_Smart_Cb func, void *param)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+
+       Evas_Object *popup;
+       Evas_Object *layout;
+       Evas_Object *label = NULL;
+
+
+       popup = elm_popup_add(ap->mf_MainWindow.pMainLayout);
+       elm_object_focus_set(popup, EINA_FALSE);
+
+       layout = elm_layout_add(popup);
+       elm_object_focus_set(layout, EINA_FALSE);
+       elm_layout_file_set(layout, EDJ_NAME, "popup_center_text");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       ap->mf_MainWindow.pSearchLabel = layout;
+
+       elm_object_part_text_set(layout, "elm.swallow.content", "Phone");
+       elm_object_part_text_set(layout, "elm.title", mf_util_get_text(MF_LABEL_SEARCHING));
+
+       elm_object_content_set(popup, layout);
+
+       Evas_Object *btn1 = mf_widget_button_create(popup, GET_SYS_STR(LABEL_CANCEL));
+       elm_object_style_set(btn1, "popup_button/default");
+       evas_object_smart_callback_add(btn1, "clicked", func, param);
+       elm_object_part_content_set(popup, "button1", btn1);
+
+       evas_object_show(popup);
+
+       return popup;
+}
+
+Evas_Object *mf_popup_create_popup(void *data, ePopMode popupMode, char *title, const char *context, const char *first_btn_text, const char *second_btn_text,
+                                  const char *third_btn_text, Evas_Smart_Cb func, void *param)
+{
+       mf_debug();
+       Evas_Object *popup;
+       struct appdata *ap;
+       Evas_Object *genlist;
+       Evas_Object *radio_group = NULL;
+       Evas_Object *box = NULL;
+       Evas_Object *btn1 = NULL;
+       Evas_Object *btn2 = NULL;
+       Evas_Object *btn3 = NULL;
+       int index = 0;
+       int listby_selected= 0;
+       int context_items = 0;
+#ifdef MYFILE_SPLIT_VIEW
+       int storage = MYFILE_PHONE;
+#endif
+       ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       popup = elm_popup_add(ap->mf_MainWindow.pWindow);
+       elm_object_focus_set(popup, EINA_FALSE);
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       if (title) {
+               elm_object_part_text_set(popup, "title,text", title);
+               mf_language_mgr_register_object(popup, OBJ_TYPE_EDJE_OBJECT, "title,text", title);
+       }
+       if (context && popupMode != POPMODE_PROGRESSBAR) {
+               mf_debug();
+               elm_object_text_set(popup, context);
+       }
+
+       switch (popupMode) {
+       case POPMODE_TEXT:
+       case POPMODE_TITLE_TEXT:
+               elm_popup_timeout_set(popup, 3);
+               if (func != NULL) {
+                       evas_object_smart_callback_add(popup, "response", func, param);
+               }
+               break;
+       case POPMODE_TEXT_NOT_DISABLED:
+               if (func != NULL) {
+                       evas_object_smart_callback_add(popup, "response", func, NULL);
+               }
+               break;
+
+       case POPMODE_TEXT_TWO_BTN:
+       case POPMODE_TITLE_TEXT_TWO_BTN:
+               btn1 = mf_widget_button_create(popup, first_btn_text);
+               elm_object_style_set(btn1, "popup_button/default");
+               btn2 = mf_widget_button_create(popup, second_btn_text);
+               elm_object_style_set(btn2, "popup_button/default");
+               if (g_strcmp0(GET_SYS_STR(LABEL_DELETE), first_btn_text) == 0) {
+                       elm_object_style_set(btn1, "sweep/delete");
+                       elm_object_style_set(btn2, "sweep/multiline");
+               }
+               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 POPMODE_TEXT_BTN:
+       case POPMODE_TITLE_TEXT_BTN:
+               btn1 = mf_widget_button_create(popup, GET_SYS_STR(MF_BUTTON_LABEL_OK));
+               elm_object_style_set(btn1, "popup_button/default");
+               evas_object_smart_callback_add(btn1, "clicked", func, param);
+               elm_object_part_content_set(popup, "button1", btn1);
+               break;
+       case POPMODE_TITLE_TEXT_THREE_BTN:
+
+               elm_object_style_set(popup, "verticalbuttonstyle");
+               evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+               btn1 = mf_widget_button_create(popup, GET_SYS_STR(MF_LABEL_REPLACE));
+               elm_object_style_set(btn1, "popup_button/default");
+               btn2 = mf_widget_button_create(popup, GET_STR(MF_BUTTON_LABEL_RENAME_AUTOMATICALLY));
+               elm_object_style_set(btn2, "popup_button/default");
+               btn3 = mf_widget_button_create(popup, GET_SYS_STR(LABEL_CANCEL));
+               elm_object_style_set(btn3, "popup_button/default");
+
+               evas_object_smart_callback_add(btn1, "clicked", mf_callback_operation_request_replace_cb, param);
+               evas_object_smart_callback_add(btn2, "clicked", mf_callback_operation_request_rename_cb, param);
+               evas_object_smart_callback_add(btn3, "clicked", mf_callback_operation_request_cancel_cb, param);
+               elm_object_part_content_set(popup, "button1", btn1);
+               elm_object_part_content_set(popup, "button2", btn2);
+               elm_object_part_content_set(popup, "button3", btn3);
+               break;
+
+       case POPMODE_TITLE_LIST_BTN:
+
+               elm_object_style_set(popup, MF_POPUP_STYLE_MIN_MENUSTYLE);
+
+               btn1 = mf_widget_button_create(popup, GET_SYS_STR(LABEL_CANCEL));
+               elm_object_style_set(btn1, "popup_button/default");
+               evas_object_smart_callback_add(btn1, "clicked", func, param);
+               elm_object_part_content_set(popup, "button1", btn1);
+
+               //btn2 = mf_widget_button_create(popup, GET_STR(MF_LABEL_DESCENDING));
+               //elm_object_style_set(btn2, "popup_button/default");
+               //evas_object_smart_callback_add(btn2, "clicked", func, param);
+               //elm_object_part_content_set(popup, "button2", btn2);
+
+               if (ap->mf_Status.pRadioGroup) {
+                       evas_object_del(ap->mf_Status.pRadioGroup);
+                       ap->mf_Status.pRadioGroup = NULL;
+               }
+
+               radio_group = elm_radio_add(ap->mf_MainWindow.pWindow);
+               elm_object_focus_set(radio_group, EINA_FALSE);
+               elm_radio_value_set(radio_group, 0);
+               evas_object_hide(radio_group);
+               ap->mf_Status.pRadioGroup = radio_group;
+
+               listby_selected = __mf_popup_get_list_by_selected_item();
+               ap->mf_Status.iRadioValue = listby_selected;
+
+               listby_itc.item_style = "1text.1icon.2";
+               listby_itc.func.text_get = __mf_popup_get_genlist_label;
+               listby_itc.func.content_get = __mf_popup_get_genlist_icon;
+               listby_itc.func.state_get = NULL;
+               listby_itc.func.del = __mf_popup_listby_genlist_del;
+               genlist = elm_genlist_add(popup);
+               //elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+               elm_object_focus_set(genlist, EINA_FALSE);
+               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);
+               for (index = 0; index < ITEM_COUNT; index++) {
+                       Elm_Object_Item *it = NULL;
+                       ListByData_s *item_data = malloc(sizeof(ListByData_s));
+                       if (item_data == NULL)
+                               continue;
+
+                       item_data->index = index;
+                       item_data->unregister_lang_mgr = TRUE;
+                       item_data->ap = ap;
+                       it = elm_genlist_item_append(genlist, &listby_itc, (void *)item_data, NULL,
+                                                    ELM_GENLIST_ITEM_NONE, __mf_popup_genlist_select, popup);
+
+                       item_data->item = it;
+                       mf_language_mgr_register_genlist_item(it);
+               }
+
+               box = __mf_popup_box_set(popup, genlist, ITEM_COUNT);
+               elm_object_content_set(popup, box);
+               evas_object_smart_callback_add(popup, "response", func, param);
+               break;
+       case POPMODE_VIEW_AS_LIST:
+               elm_object_style_set(popup, MF_POPUP_STYLE_MIN_MENUSTYLE);
+
+               btn1 = mf_widget_button_create(popup, GET_SYS_STR(LABEL_CANCEL));
+               elm_object_style_set(btn1, "popup_button/default");
+               evas_object_smart_callback_add(btn1, "clicked", func, param);
+               elm_object_part_content_set(popup, "button1", btn1);
+
+               if (ap->mf_Status.pRadioGroup) {
+                       evas_object_del(ap->mf_Status.pRadioGroup);
+                       ap->mf_Status.pRadioGroup = NULL;
+               }
+
+               radio_group = elm_radio_add(ap->mf_MainWindow.pWindow);
+               elm_object_focus_set(radio_group, EINA_FALSE);
+               elm_radio_value_set(radio_group, 0);
+               evas_object_hide(radio_group);
+               ap->mf_Status.pRadioGroup = radio_group;
+
+               listby_selected = __mf_popup_get_view_as_selected_item();
+               ap->mf_Status.iRadioValue = listby_selected;
+
+               listby_itc.item_style = "1text.1icon.2";
+               listby_itc.func.text_get = __mf_popup_view_as_genlist_label_get;
+               listby_itc.func.content_get = __mf_popup_get_genlist_icon;
+               listby_itc.func.state_get = NULL;
+               listby_itc.func.del = __mf_popup_listby_genlist_del;
+               genlist = elm_genlist_add(popup);
+               //elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+               elm_object_focus_set(genlist, EINA_FALSE);
+               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);
+               for (index = 0; index < 3; index++) {
+                       Elm_Object_Item *it = NULL;
+                       ListByData_s *item_data = malloc(sizeof(ListByData_s));
+                       if (item_data == NULL)
+                               continue;
+
+                       item_data->index = index;
+                       item_data->unregister_lang_mgr = TRUE;
+                       item_data->ap = ap;
+                       it = elm_genlist_item_append(genlist, &listby_itc, (void *)item_data, NULL,
+                                                    ELM_GENLIST_ITEM_NONE, __mf_popup_view_as_genlist_select, popup);
+                       item_data->item = it;
+                       mf_language_mgr_register_genlist_item(it);
+               }
+
+               box = __mf_popup_box_set(popup, genlist, 3);
+               elm_object_content_set(popup, box);
+               evas_object_smart_callback_add(popup, "response", func, param);
+       default:
+               break;
+       }
+       evas_object_show(popup);
+       return popup;
+}
+
+void mf_popup_indicator_popup(void *data, const char *text)
+{
+       mf_retm_if(text == NULL, "text is NULL");
+       int ret = status_message_post(text);
+       mf_debug("status_message_post()... [0x%x]!", ret);
+       if (ret != 0) {
+               mf_debug("status_message_post()... [0x%x]!", ret);
+       } else {
+
+       }
+       return ;
+
+}
diff --git a/src/widget/mf-search-bar.c b/src/widget/mf-search-bar.c
new file mode 100644 (file)
index 0000000..a71d3db
--- /dev/null
@@ -0,0 +1,689 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <Eina.h>
+#include <Ecore_X.h>
+
+#include "mf-widget.h"
+#include "mf-gengrid.h"
+#include "mf-util.h"
+#include "mf-dlog.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-launch.h"
+#include "mf-language-mgr.h"
+#include "mf-tray-item.h"
+
+#define MF_SEARCH_OPTION_DEF (MF_SEARCH_OPT_DIR | MF_SEARCH_OPT_FILE)
+#define MF_SEARCH_ROOT_NUM 1
+#define MF_SEARCH_TIMER_INTERVAL 0.5
+
+extern Elm_Genlist_Item_Class itc, userfolderitc;
+extern Elm_Genlist_Item_Class categoryitc;
+
+extern Elm_Gengrid_Item_Class gic;
+extern Elm_Gengrid_Item_Class search_itc;
+extern int flagSearchMsg;
+extern pthread_mutex_t gLockSearchMsg;
+extern pthread_cond_t gCondSearchMsg;
+
+Elm_Gengrid_Item_Class g_search_all_itc;
+Elm_Gengrid_Item_Class search_all_itc;
+
+typedef struct {
+       char *size;
+       char *create_date;
+} mf_search_detail_infor_s;
+
+static void __mf_search_bar_click_item(struct appdata *data, GString * path)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = data;
+       assert(ap);
+       if (ap->mf_Status.path == NULL || ap->mf_Status.path->str == NULL) {
+               return;
+       }
+       GString *new_path = NULL;
+
+
+       int error_code = 0;
+       int mmc_card = 0;
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_genlist_rename_done(ap, NULL, NULL);
+               return;
+       }
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "get navi structure failed");
+       if (ap->mf_Status.search_handler > 0) {
+               mf_search_stop(ap->mf_Status.search_handler);
+               mf_search_finalize(&ap->mf_Status.search_handler);
+       }
+
+       error_code = mf_util_is_mmc_on(&mmc_card);
+
+       if (mf_fm_svc_wrapper_is_dir(path)) {
+
+               if (ap->mf_FileOperation.search_result_list) {
+                       mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.search_result_list), MYFILE_TYPE_CHAR);
+               }
+               elm_object_focus_set(ap->mf_MainWindow.pSearchEntry, EINA_FALSE);
+
+               ap->mf_Status.view_type = mf_view_normal;
+               ap->mf_Status.more = MORE_DEFAULT;
+               new_path = g_string_new(path->str);
+               mf_debug("path is %s\n", ap->mf_Status.path->str);
+
+               /*set new path*/
+               g_string_free(ap->mf_Status.path, TRUE);
+               ap->mf_Status.path = NULL;
+
+               ap->mf_Status.path = new_path;
+
+               if (pNavi_s->pCurrentPath != NULL) {
+                       free(pNavi_s->pCurrentPath);
+                       pNavi_s->pCurrentPath = NULL;
+               }
+               pNavi_s->pCurrentPath = g_strdup(new_path->str);
+               mf_widget_refresh_view(ap);
+       } else {
+               struct timeval mytime;
+               gettimeofday(&mytime, NULL);
+               mf_debug("[myfiles click time] %ld sec %ld usec \n", mytime.tv_sec, mytime.tv_usec);
+
+               int ret = 0;
+               ret = mf_launch_service(ap, path->str);
+               mf_debug("ret is %d\n", ret);
+               if (ret) {
+                       ap->mf_MainWindow.pNormalPopup =
+                               mf_popup_create_popup(ap, POPMODE_TEXT, NULL, GET_SYS_STR(MF_LABEL_UNSUPPORT_FILE_TYPE), NULL, NULL, NULL, NULL, NULL);
+               }
+       }
+       MF_TRACE_END;
+}
+
+static void __mf_search_bar_item_sel(void *data, Evas_Object * obj, void *event_info)
+{
+       mf_debug("Start");
+       assert(data);
+
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       if (item != NULL) {
+               mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
+
+               elm_genlist_item_selected_set(item, FALSE);
+               __mf_search_bar_click_item(data, selected->m_ItemName);
+       }
+}
+
+static void __mf_search_bar_grid_item_sel(void *data, Evas_Object * obj, void *event_info)
+{
+       Elm_Object_Item *item = (Elm_Object_Item *) event_info;
+       if (item != NULL) {
+               mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
+               mf_retm_if(selected == NULL, "selected is NULL");
+               mf_retm_if(selected->m_ItemName == NULL, "selected->m_ItemName is NULL");
+               mf_retm_if(selected->m_ItemName->str == NULL, "selected->m_ItemName->str is NULL");
+
+               __mf_search_bar_click_item(data, selected->m_ItemName);
+       }
+}
+
+static void __mf_search_bar_sel_search_all(void *data, Evas_Object * obj, void *event_info)
+{
+       mf_search_bar_search_started_callback(data, NULL, NULL);
+}
+
+static Evas_Object *_gl_content_get(void *data, Evas_Object * obj, const char *part)
+{
+
+       mf_debug("part is [%s]", part);
+       if (!strcmp(part, "elm.icon")) {
+               Evas_Object *btn = elm_button_add(obj);
+               elm_object_text_set(btn, GET_STR(MF_LABEL_SEARCH_ALL));
+               evas_object_smart_callback_add(btn, "clicked", __mf_search_bar_sel_search_all, data);
+
+               return btn;
+       } else if(!strcmp(part, "elm.swallow.icon")) {
+               Evas_Object *btn = elm_button_add(obj);
+               elm_object_text_set(btn, GET_STR(MF_LABEL_SEARCH_ALL));
+               evas_object_smart_callback_add(btn, "clicked", __mf_search_bar_sel_search_all, data);
+               return btn;
+       }
+       return NULL;
+}
+
+
+void mf_search_bar_search_all_item_append(void *data)
+{
+
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input data error");
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_THUMBNAIL) {
+
+               Elm_Gengrid_Item_Class *itc = elm_gengrid_item_class_new();
+               itc->item_style = "default_gridtext";
+               itc->func.text_get = NULL;
+               itc->func.content_get = _gl_content_get;
+               itc->func.state_get = NULL;
+               itc->func.del = NULL;
+
+               elm_gengrid_item_append(ap->mf_MainWindow.pNaviGengrid, itc, ap, NULL, NULL);
+
+       } else {
+               Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new();
+               itc->item_style = "1icon";
+               itc->func.text_get = NULL;
+               itc->func.content_get = _gl_content_get;
+               itc->func.state_get = NULL;
+               itc->func.del = NULL;
+               elm_genlist_item_append(ap->mf_MainWindow.pNaviGenlist, itc, ap, NULL,
+                                            ELM_GENLIST_ITEM_NONE, NULL, NULL);
+       }
+       ap->mf_Status.flagSearchAll = EINA_TRUE;
+}
+void mf_search_bar_item_append(void *data, void *user_data)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)user_data;
+       mf_retm_if(ap == NULL, "input data error");
+       char *item_name = (char *)data;
+       mf_retm_if(item_name == NULL, "input item_name error");
+       mfItemData_s *m_TempItem = NULL;
+
+       GString *search_path = g_string_new(item_name);
+
+       g_string_free(search_path, TRUE);
+       search_path = NULL;
+       if (ap->mf_Status.view_type == mf_view_root_category && ap->mf_Status.more != MORE_SEARCH) {
+               mf_util_generate_list(&ap->mf_FileOperation.category_list, item_name, FILE_TYPE_FILE);
+       }
+       m_TempItem = (mfItemData_s *) malloc(sizeof(mfItemData_s));
+
+       if (m_TempItem == NULL) {
+               return;
+       }
+       memset(m_TempItem, 0, sizeof(mfItemData_s));
+
+       m_TempItem->m_ItemName = g_string_new(item_name);
+       m_TempItem->size = NULL;
+       m_TempItem->create_date = NULL;
+       m_TempItem->m_checked = FALSE;
+       m_TempItem->pCheckBox = NULL;
+       m_TempItem->thumb_path = NULL;
+       m_TempItem->real_thumb_flag = FALSE;
+       m_TempItem->unregister_lang_mgr = TRUE;
+       m_TempItem->media = NULL;
+       m_TempItem->ap = ap;
+
+       /*delete timer if exists*/
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_THUMBNAIL) {
+               Elm_Object_Item *git = NULL;
+               git = elm_gengrid_item_append(ap->mf_MainWindow.pNaviGengrid, &gic, m_TempItem, __mf_search_bar_grid_item_sel, ap);
+               mf_language_mgr_register_gengrid_item(git);
+               m_TempItem->item = git;
+       }
+       else
+       {
+               Elm_Object_Item *it = NULL;
+               if (ap->mf_Status.view_type == mf_view_root_category && ap->mf_Status.more != MORE_SEARCH) {
+                       it = elm_genlist_item_append(ap->mf_MainWindow.pNaviGenlist, &categoryitc, m_TempItem, NULL,
+                                                    ELM_GENLIST_ITEM_NONE, mf_genlist_gl_sel, m_TempItem);
+               } else {
+                       it = elm_genlist_item_append(ap->mf_MainWindow.pNaviGenlist, &search_itc, m_TempItem, NULL,
+                                                    ELM_GENLIST_ITEM_NONE, __mf_search_bar_item_sel, ap);
+               }
+               m_TempItem->item = it;
+       }
+
+       mf_debug("get is [%d]", elm_genlist_items_count(ap->mf_MainWindow.pNaviGenlist));
+       MF_TRACE_END;
+
+}
+
+static void __mf_search_bar_result_cb(mf_search_result_t *result, void *user_data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(result == NULL, "result is NULL");
+
+       struct appdata *ap = (struct appdata *)user_data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "pNavi_s is NULL");
+
+       Evas_Object *pSearchBarLabel = NULL;
+
+       if (ap->mf_Status.view_type != mf_view_root_category) {
+               elm_object_focus_set(ap->mf_MainWindow.pSearchEntry, EINA_TRUE);
+       }
+
+#ifdef MYFILE_SPLIT_VIEW
+       if (ap->mf_FileOperation.search_result_list) {
+               mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.search_result_list), MYFILE_TYPE_CHAR);
+       }
+#endif
+       if (ap->mf_Status.view_type == mf_view_root_category && ap->mf_Status.more != MORE_SEARCH) {
+               if (ap->mf_FileOperation.category_list) {
+                       mf_util_free_eina_list_with_data(&(ap->mf_FileOperation.category_list), MYFILE_TYPE_FSNODE);
+               }
+       }
+
+       if (g_list_length(result->dir_list) + g_list_length(result->file_list) == 0) {
+
+               Evas_Object *parent = NULL;
+               parent = ap->mf_MainWindow.pNaviLayout;
+               ap->mf_Status.flagNoContent = EINA_TRUE;
+               pSearchBarLabel = mf_widget_create_no_content(parent);
+               elm_object_part_text_set(pSearchBarLabel, "elm.text", GET_SYS_STR(LABEL_NO_RESULT));
+
+               if (ap->mf_Status.view_type != mf_view_root_category) {
+                       elm_object_part_content_set(parent, "content", pSearchBarLabel);
+               } else {
+                       elm_object_part_content_set(parent, "content", pSearchBarLabel);
+                       Evas_Object *btn = mf_widget_get_part_content(ap->mf_MainWindow.pNaviBar, NAVI_BOTTOM_BUTTON_1_PART);
+                       elm_object_disabled_set(btn, EINA_TRUE);
+               }
+
+       } else {
+               ap->mf_Status.flagNoContent = EINA_FALSE;
+               if (ap->mf_Status.view_type == mf_view_root_category && ap->mf_Status.more != MORE_SEARCH) {
+                       mf_genlist_set_category_list_style();
+                       mf_navi_bar_title_set(ap);
+               }
+               if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+                       if (ap->mf_MainWindow.pNaviGenlist == NULL) {
+                               ap->mf_MainWindow.pNaviGenlist = elm_genlist_add(ap->mf_MainWindow.pNaviLayout);
+                       }
+                       elm_genlist_clear(ap->mf_MainWindow.pNaviGenlist);
+
+                       elm_genlist_mode_set(ap->mf_MainWindow.pNaviGenlist, ELM_LIST_COMPRESS);
+                       elm_object_focus_set(ap->mf_MainWindow.pNaviGenlist, EINA_FALSE);
+                       evas_object_size_hint_weight_set(ap->mf_MainWindow.pNaviGenlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(ap->mf_MainWindow.pNaviGenlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+                       //elm_genlist_homogeneous_set(ap->mf_MainWindow.pNaviGenlist, EINA_TRUE);
+                       evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,start,right", mf_genlist_gl_mode_sweep_set, ap);
+                       evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,start,left", mf_genlist_gl_mode_sweep_unset, ap);
+                       evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,start,up", mf_genlist_gl_mode_cancel, ap);
+                       evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,start,down", mf_genlist_gl_mode_cancel, ap);
+                       //evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "drag,stop", mf_genlist_gl_mode_sweep_stop, NULL);
+                       if (ap->mf_Status.view_type == mf_view_root_category && ap->mf_Status.more != MORE_SEARCH) {
+                               evas_object_smart_callback_add(ap->mf_MainWindow.pNaviGenlist, "selected", mf_genlist_gl_selected, ap);
+                       }
+                       evas_object_show(ap->mf_MainWindow.pNaviGenlist);
+                       mfNaviBarSetContent(ap, ap->mf_MainWindow.pNaviLayout, ap->mf_MainWindow.pNaviGenlist);
+               } else {
+                       if (ap->mf_MainWindow.pNaviGengrid == NULL) {
+                               ap->mf_MainWindow.pNaviGengrid = mf_gengrid_create_grid(ap->mf_MainWindow.pNaviLayout);
+                       }
+                       elm_gengrid_clear(ap->mf_MainWindow.pNaviGengrid);
+                       elm_gengrid_item_size_set(ap->mf_MainWindow.pNaviGengrid, MF_HD_GENGRID_ITEM_WIDTH, MF_HD_GENGRID_ITEM_HEIGTH);
+                       evas_object_show(ap->mf_MainWindow.pNaviGengrid);
+                       mfNaviBarSetContent(ap, ap->mf_MainWindow.pNaviLayout, ap->mf_MainWindow.pNaviGengrid);
+               }
+               if (result->dir_list != NULL) {
+                       g_list_foreach(result->dir_list, mf_search_bar_item_append, ap);
+               }
+               if (result->file_list != NULL) {
+                       g_list_foreach(result->file_list, mf_search_bar_item_append, ap);
+               }
+               MF_TRACE_END;
+       }
+}
+
+static void __mf_search_bar_stop_cb(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input data error");
+
+       Evas_Object *btn = (Evas_Object *)obj;
+       const char *label = elm_object_text_get(btn);
+
+       if (g_strcmp0(label, GET_SYS_STR(LABEL_CANCEL)) == 0 ) {
+               if (ap->mf_FileOperation.sync_pipe != NULL) {
+                       ecore_pipe_del(ap->mf_FileOperation.sync_pipe);
+                       ap->mf_FileOperation.sync_pipe = NULL;
+               }
+
+               __mf_search_bar_result_cb(((ms_handle_t *) ap->mf_Status.search_handler)->result, ap);
+
+               if (ap->mf_Status.search_handler > 0) {
+                       mf_search_stop(ap->mf_Status.search_handler);
+               }
+
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+               ap->mf_MainWindow.pNormalPopup = NULL;
+
+               if (ap->mf_Status.search_handler > 0) {
+                       mf_search_finalize(&ap->mf_Status.search_handler);
+               }
+       }
+}
+
+static int __mf_search_bar_idle_search_msg_cope_finished(void *data)
+{
+       pthread_mutex_lock(&gLockSearchMsg);
+       if (flagSearchMsg == 0) {
+               flagSearchMsg = 1;
+               pthread_cond_signal(&gCondSearchMsg);
+       }
+       pthread_mutex_unlock(&gLockSearchMsg);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void __mf_search_bar_pipe_cb(void *data, void *buffer, unsigned int nbyte)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       if (ap == NULL) {
+               mf_debug("input ap is NULL");
+               goto MF_CONTINURE_SEARCH;
+       }
+
+       mf_search_pipe_msg *pSearchMsg = (mf_search_pipe_msg *) buffer;
+       if (pSearchMsg == NULL) {
+               mf_debug("received message is NULL");
+               goto MF_CONTINURE_SEARCH;
+       }
+
+       if (pSearchMsg->mf_sp_msg_type == MF_SEARCH_PIPE_MSG_RESULT_REPORT) {
+               mf_debug("result get");
+       } else if (pSearchMsg->mf_sp_msg_type == MF_SEARCH_PIPE_MSG_ROOT_CHANGE) {
+               mf_debug("path change   %s", pSearchMsg->current_path);
+               char *new_desc = mf_fm_svc_wrapper_translate_path(pSearchMsg->current_path, MF_TRANS_OPTION_POPUP);
+               elm_object_part_text_set(ap->mf_MainWindow.pSearchLabel, "elm.swallow.content", new_desc);
+
+               //edje_object_part_text_set(elm_layout_edje_get(ap->mf_MainWindow.pSearchLabel), "elm.swallow.content", new_desc);
+               SAFE_FREE_CHAR(pSearchMsg->current_path);
+               SAFE_FREE_CHAR(new_desc);
+       } else if (pSearchMsg->mf_sp_msg_type == MF_SEARCH_PIPE_MSG_FINISHED) {
+               evas_object_del(ap->mf_MainWindow.pNormalPopup);
+               ap->mf_MainWindow.pNormalPopup = NULL;
+               __mf_search_bar_result_cb((mf_search_result_t *) pSearchMsg->report_result, data);
+       }
+
+MF_CONTINURE_SEARCH:
+       ecore_idler_add((Ecore_Task_Cb)__mf_search_bar_idle_search_msg_cope_finished, NULL);
+       MF_TRACE_END;
+}
+
+void mf_search_bar_category_search_start(void *data, int category)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata *)data;
+       int root_num = MF_SEARCH_ROOT_NUM;
+
+       mf_genlist_create_search_itc();
+
+       root_num = 1;
+       const char *SearchRoot[3] = {0};
+       SearchRoot[0] = PHONE_FOLDER;
+       if (ap->mf_Status.iStorageState & MYFILE_MMC) {
+               SearchRoot[root_num] = MEMORY_FOLDER;
+               root_num++;
+       }
+       if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+               SearchRoot[root_num] = OTG_FOLDER;
+               root_num++;
+       }
+
+       char *new_desc = NULL;
+       /*Start Search routine*/
+       if (!mf_search_start(ap->mf_Status.search_handler, SearchRoot, root_num, \
+                            NULL, MF_SEARCH_OPT_FILE, (void *)ap, mf_tray_item_type, category)) {
+               /*generate the popup used to show search path
+               **it's sure that new_desc is not NULL even if original path is NULL*/
+               new_desc = mf_fm_svc_wrapper_translate_path(ap->mf_Status.path->str, MF_TRANS_OPTION_POPUP);
+               ap->mf_MainWindow.pNormalPopup = mf_ug_popup_create_search(ap, __mf_search_bar_stop_cb, ap);
+       } else {
+               mf_debug("search failed");
+       }
+
+       if (new_desc != NULL) {
+               free(new_desc);
+               new_desc = NULL;
+       }
+
+       MF_TRACE_END;
+}
+static bool __mf_search_bar_idle_search_start(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       if (pNavi_s == NULL) {
+               ap->mf_FileOperation.search_IME_hide_timer = NULL;
+               mf_debug("pNavi_s is NULL");
+               return ECORE_CALLBACK_CANCEL;
+       }
+
+       {
+
+               int root_num = 0;
+               mf_genlist_create_search_itc();
+
+               char *text = NULL;
+               const char *SearchRoot[3] = {0};
+               if (ap->mf_Status.more == MORE_SEARCH) {
+                       text = g_strdup(elm_object_text_get(ap->mf_MainWindow.pSearchEntry));
+               }
+
+               if (ap->mf_Status.view_type == mf_view_root || ap->mf_Status.view_type == mf_view_root_category) {
+                       SearchRoot[0] = PHONE_FOLDER;
+                       root_num++;
+                       if (ap->mf_Status.iStorageState & MYFILE_MMC) {
+                               SearchRoot[root_num] = MEMORY_FOLDER;
+                               root_num++;
+                       }
+                       if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+                               SearchRoot[root_num] = OTG_FOLDER;
+                               root_num++;
+                       }
+               } else {
+                       if (ap->mf_Status.flagSearchAll == EINA_FALSE) {
+                               SearchRoot[0] = ap->mf_Status.path->str;
+                               root_num++;
+                       } else {
+                               int root = mf_fm_svc_wrapper_is_root_path(ap->mf_Status.path->str);
+                               switch (root) {
+                               case MYFILE_PHONE:
+                                       SearchRoot[0] = PHONE_FOLDER;
+                                       break;
+                               case MYFILE_MMC:
+                                       SearchRoot[0] = MEMORY_FOLDER;
+                                       break;
+                               case MYFILE_OTG:
+                                       SearchRoot[0] = OTG_FOLDER;
+                                       break;
+                               default:
+                                       SearchRoot[0] = PHONE_FOLDER;
+                                       break;
+                               }
+                               root_num++;
+                       }
+               }
+               mf_debug("search root is %s text is [%s]", ap->mf_Status.path->str, text);
+               char *new_desc = NULL;
+               /*Start Search routine*/
+               if (!mf_search_start(ap->mf_Status.search_handler, SearchRoot, root_num, \
+                                    ((text) ? text : NULL), MF_SEARCH_OPTION_DEF, (void *)ap, NULL, mf_tray_item_category_none)) {
+                       /*generate the popup used to show search path
+                       **it's sure that new_desc is not NULL even if original path is NULL*/
+                       new_desc = mf_fm_svc_wrapper_translate_path(ap->mf_Status.path->str, MF_TRANS_OPTION_POPUP);
+                       ap->mf_MainWindow.pNormalPopup = mf_ug_popup_create_search(ap, __mf_search_bar_stop_cb, ap);
+               }
+
+               if (new_desc != NULL) {
+                       free(new_desc);
+                       new_desc = NULL;
+               }
+
+               if (text != NULL) {
+                       free(text);
+                       text = NULL;
+               }
+
+               ap->mf_FileOperation.search_IME_hide_timer = NULL;
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void mf_search_bar_enter_search_routine(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       assert(ap);
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_genlist_rename_done(ap, NULL, NULL);
+               return;
+       }
+
+       if (ap->mf_Status.more != MORE_DEFAULT) {
+               return;
+       }
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+
+       if (ap->mf_FileOperation.search_IME_hide_timer != NULL) {
+               ecore_timer_del(ap->mf_FileOperation.search_IME_hide_timer);
+               ap->mf_FileOperation.search_IME_hide_timer = NULL;
+       }
+
+       ap->mf_Status.more = MORE_SEARCH;
+       ap->mf_Status.flagSearchAll = EINA_FALSE;
+
+       mf_navi_bar_create_search_view(ap);
+       MF_TRACE_END;
+}
+
+void mf_search_bar_category_search(void *data, int category)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input data error");
+       SAFE_FREE_CHAR(ap->mf_Status.search_filter);
+       if (ap->mf_Status.search_handler > 0)
+               mf_search_finalize(&ap->mf_Status.search_handler);
+       int ret = mf_search_init(&ap->mf_Status.search_handler);
+       mf_retm_if(ret < 0, "Fail to mf_search_init()");
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "input data error");
+
+       evas_object_del(mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout, "content"));
+       Evas_Object *tray = mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout, "swallow.shortcut");
+       SAFE_FREE_OBJ(tray);
+       ap->mf_MainWindow.pNaviGengrid = NULL;
+       ap->mf_MainWindow.pNaviGenlist = NULL;
+
+       if (ap->mf_FileOperation.sync_pipe != NULL) {
+               ecore_pipe_del(ap->mf_FileOperation.sync_pipe);
+               ap->mf_FileOperation.sync_pipe = NULL;
+       }
+       ap->mf_FileOperation.sync_pipe = ecore_pipe_add(__mf_search_bar_pipe_cb, ap);
+
+       if (ap->mf_FileOperation.sync_pipe == NULL) {
+               mf_debug("add pipe failed");
+       }
+       /*this is to init global variable to ensure the first message can be transmitted correctly*/
+       /*flagSearchMsg is to indicate the condition wait to sync data of threads*/
+       pthread_mutex_lock(&gLockSearchMsg);
+       flagSearchMsg = 1;
+       pthread_mutex_unlock(&gLockSearchMsg);
+
+       /*delete guide text label in the box*/
+       mf_search_bar_category_search_start(ap, category);
+       mf_debug("enter pressed %d", category);
+       MF_TRACE_END;
+
+}
+void mf_search_bar_search_started_callback(void *data, Evas_Object * obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "input data error");
+
+       char *text = g_strdup(elm_object_text_get(ap->mf_MainWindow.pSearchEntry));
+       if (text == NULL || strlen(text) == 0 || strlen(g_strstrip(text)) == 0) {
+               g_free(text);
+               text = NULL;
+               SAFE_FREE_CHAR(ap->mf_Status.search_filter);
+               return;
+       }
+
+       g_free(text);
+       text = NULL;
+
+       SAFE_FREE_CHAR(ap->mf_Status.search_filter);
+       ap->mf_Status.search_filter = g_strdup(elm_object_text_get(ap->mf_MainWindow.pSearchEntry));
+       if (ap->mf_Status.more == MORE_RENAME) {
+               mf_genlist_rename_done(ap, NULL, NULL);
+               return;
+       }
+
+       if (ap->mf_Status.search_handler > 0)
+               mf_search_finalize(&ap->mf_Status.search_handler);
+       int ret = mf_search_init(&ap->mf_Status.search_handler);
+       mf_retm_if(ret < 0, "Fail to mf_search_init()");
+
+       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+       mf_retm_if(pNavi_s == NULL, "input data error");
+
+       /*hide the IME*/
+       elm_object_focus_set(ap->mf_MainWindow.pSearchEntry, EINA_FALSE);
+
+       /*delete guide text label in the box*/
+       evas_object_del(mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout, "content"));
+
+       ap->mf_MainWindow.pNaviGengrid = NULL;
+       ap->mf_MainWindow.pNaviGenlist = NULL;
+
+       if (ap->mf_FileOperation.sync_pipe != NULL) {
+               ecore_pipe_del(ap->mf_FileOperation.sync_pipe);
+               ap->mf_FileOperation.sync_pipe = NULL;
+       }
+       ap->mf_FileOperation.sync_pipe = ecore_pipe_add(__mf_search_bar_pipe_cb, ap);
+
+       if (ap->mf_FileOperation.sync_pipe == NULL) {
+               mf_debug("add pipe failed");
+       }
+       /*this is to init global variable to ensure the first message can be transmitted correctly*/
+       /*flagSearchMsg is to indicate the condition wait to sync data of threads*/
+       pthread_mutex_lock(&gLockSearchMsg);
+       flagSearchMsg = 1;
+       pthread_mutex_unlock(&gLockSearchMsg);
+
+       elm_object_focus_set(ap->mf_MainWindow.pSearchEntry, EINA_FALSE);
+       /*delete guide text label in the box*/
+       ap->mf_FileOperation.search_IME_hide_timer = ecore_timer_add(MF_SEARCH_TIMER_INTERVAL, (Ecore_Task_Cb)__mf_search_bar_idle_search_start, ap);
+       mf_debug("enter pressed");
+       MF_TRACE_END;
+
+       return;
+}
diff --git a/src/widget/mf-split-view.c b/src/widget/mf-split-view.c
new file mode 100644 (file)
index 0000000..83ab68d
--- /dev/null
@@ -0,0 +1,356 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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-main.h"
+#include "mf-widget.h"
+#include "mf-callback.h"
+#include "mf-fm-svc-wrapper.h"
+//double wscale = (double)(((double)w) / ((double)GL_WIN_WIDTH));
+#define LEFT_SCALE             0.4
+#define LEFT_W                 (800*LEFT_SCALE)
+#define LEFT_H                 (480)
+
+#ifdef MYFILE_SPLIT_VIEW
+
+static void _gl_con(void *data, Evas_Object *obj, void *event_info);
+static void _gl_exp_ndepth(void *data, Evas_Object *obj, void *event_info);
+
+void mf_split_view_unset_right_content(void *data)
+{
+
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       Evas_Object *unset = NULL;
+
+       unset = mf_widget_unset_part_content(ap->mf_MainWindow.sSplitData.pPanes, "right");
+       if (unset)
+               evas_object_hide(unset);
+       MF_TRACE_END;
+}
+
+
+void mf_split_view_path_info_update(Evas_Object *label, const char *fullpath, Eina_Bool root)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(label == NULL, "label is NULL");
+       mf_retm_if(fullpath == NULL, "path_info is NULL");
+       char *pathinfo = NULL;
+       char *info = NULL;
+
+       if (root) {
+               info = g_strdup("Root");
+       } else {
+               pathinfo = mf_fm_svc_path_info_get(fullpath);
+               info = mf_fm_svc_path_info_translate(pathinfo, MF_PATH_INFO_MAX_LENGTH_LANDSCAPE);
+       }
+
+       elm_object_part_text_set(label, "info", info);
+       MF_TRACE_END;
+}
+
+
+void mf_split_view_init(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       Evas_Object *pLeftGenlist = NULL;
+       /*** create the panes */
+
+       ap->mf_MainWindow.sSplitData.pPanes = mf_widget_create_panes(ap->mf_MainWindow.pMainLayout);
+       evas_object_show(ap->mf_MainWindow.sSplitData.pPanes);
+
+       ap->mf_MainWindow.sSplitData.pMainLayout = mf_widget_create_layout_main(ap->mf_MainWindow.sSplitData.pPanes);
+
+       /**Set left size*/
+       elm_panes_content_left_size_set(ap->mf_MainWindow.sSplitData.pPanes, LEFT_SCALE);
+
+
+       /** create the left folder genlist **/
+       pLeftGenlist = mf_widget_create_genlist(ap->mf_MainWindow.sSplitData.pPanes);
+       evas_object_smart_callback_add(pLeftGenlist, "expanded", _gl_exp_ndepth, ap);
+       evas_object_smart_callback_add(pLeftGenlist, "contracted", _gl_con, ap);
+
+       //mf_widget_resize(pLeftGenlist, LEFT_W, LEFT_H);
+       ap->mf_MainWindow.sSplitData.pSplitLeftGenlist = pLeftGenlist;
+       evas_object_show(pLeftGenlist);
+
+       elm_object_part_content_set(ap->mf_MainWindow.sSplitData.pPanes, "left", pLeftGenlist);
+
+       ap->mf_MainWindow.sSplitData.bFlagSplitViewCreate = TRUE;
+       MF_TRACE_END;
+
+}
+void mf_split_view_destory(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+       //SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pSelectAllCheckBox);
+       //SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pSelectAllLayout);
+       SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist);
+       SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pPanes);
+       SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pMainLayout);
+       ap->mf_MainWindow.sSplitData.bFlagSplitViewCreate = FALSE;
+       MF_TRACE_END;
+}
+
+void mf_split_view_hide(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       evas_object_hide(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist);
+       evas_object_hide(ap->mf_MainWindow.sSplitData.pPanes);
+       evas_object_hide(ap->mf_MainWindow.sSplitData.pMainLayout);
+       MF_TRACE_END;
+}
+
+void mf_split_view_show(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       evas_object_show(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist);
+       evas_object_show(ap->mf_MainWindow.sSplitData.pPanes);
+       evas_object_show(ap->mf_MainWindow.sSplitData.pMainLayout);
+       MF_TRACE_END;
+}
+
+void mf_split_view_genlist_append(void *data, Evas_Object *pGenlist, GString *fullpath, Elm_Object_Item *parent_item)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       Elm_Object_Item *parent = NULL;
+       Eina_List *dir_list = NULL;
+       Eina_List *file_list = NULL;
+       mfItemData_s *it_data;
+       int iSortTypeValue = 0;
+       it_data = elm_object_item_data_get(parent_item);
+       mf_retm_if(it_data == NULL, "it_data is NULL");
+       mf_retm_if(it_data->m_ItemName == NULL, "it_data->m_ItemName is NULL");
+       mf_retm_if(it_data->m_ItemName->str == NULL, "it_data->m_ItemName->str is NULL");
+
+       mf_debug("fullpath is [%s] item is [%s]", fullpath->str, it_data->m_ItemName->str);
+
+       mf_fm_svc_wrapper_get_file_list(it_data->m_ItemName->str, &dir_list, &file_list);
+
+
+       mf_util_get_vconf_value(VCONF_TYPE_SORT_TYPE, &iSortTypeValue);
+
+       mf_fs_oper_sort_list(&file_list, iSortTypeValue);
+
+       if (iSortTypeValue == MYFILE_SORT_BY_NAME_A2Z || iSortTypeValue == MYFILE_SORT_BY_NAME_Z2A || iSortTypeValue == MYFILE_SORT_BY_DATE_R2O
+           || iSortTypeValue == MYFILE_SORT_BY_DATE_O2R) {
+               mf_fs_oper_sort_list(&dir_list, iSortTypeValue);
+       } else {
+               mf_fs_oper_sort_list(&dir_list, ap->mf_Status.iFolderSortType);
+       }
+       if (dir_list == NULL || eina_list_count(dir_list) == 0) {
+               MF_TRACE_END;
+               return;
+       }
+
+       if (g_string_equal(fullpath, it_data->m_ItemName)) {
+               it_data->flagExpand = true;
+               elm_object_item_data_set(it_data->item, it_data);
+
+               elm_genlist_item_update(it_data->item);
+               mf_genlist_split_left_items_append(ap, pGenlist, parent_item, dir_list);
+
+               MF_TRACE_END;
+               return;
+       } else {
+               it_data->flagExpand = true;
+               elm_object_item_data_set(it_data->item, it_data);
+
+               elm_genlist_item_update(it_data->item);
+               parent = mf_genlist_split_left_items_append(ap, pGenlist, parent_item, dir_list);
+               mf_split_view_genlist_append(ap, pGenlist, fullpath, parent);
+       }
+       MF_TRACE_END;
+
+}
+
+Elm_Object_Item *mf_split_view_locate_item_get(void *data, int locate)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+       Elm_Object_Item *item = NULL;
+
+       switch (locate) {
+       case MYFILE_MMC:
+               item = ap->mf_MainWindow.sSplitData.mmc_item;
+               break;
+       case MYFILE_OTG:
+               item = ap->mf_MainWindow.sSplitData.otg_item;
+               break;
+       case MYFILE_PHONE:
+       default:
+               item = ap->mf_MainWindow.sSplitData.phone_item;
+               break;
+       }
+       return item;
+}
+
+static void _gl_con(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       if (ap->mf_Status.flagNaviPush) {
+               mf_debug("the transition of the naviframe is not finished");
+               return;
+       }
+       if (ap->mf_Status.more != MORE_EDIT && ap->mf_Status.more != MORE_SHARE_EDIT) {
+               Elm_Object_Item *item = event_info;
+               elm_genlist_item_subitems_clear(item);
+               SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+               mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
+               mf_error("g_strcmp0(ap->mf_Status.path->str, selected->m_ItemName->str) %d", g_strcmp0(ap->mf_Status.path->str, selected->m_ItemName->str));
+               if (g_strcmp0(ap->mf_Status.path->str, selected->m_ItemName->str)) {
+                       myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+                       SAFE_FREE_GSTRING(ap->mf_Status.path);
+                       ap->mf_Status.path = g_string_new(selected->m_ItemName->str);
+                       SAFE_FREE_CHAR(pNavi_s->pCurrentPath);
+                       pNavi_s->pCurrentPath = g_strdup(selected->m_ItemName->str);
+                       if (ap->mf_Status.more == MORE_DEFAULT) {
+                               mf_navi_bar_create_default_view(ap);
+                               mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+                       } else if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                                  || ap->mf_Status.more == MORE_DATA_COPYING || ap->mf_Status.more == MORE_DATA_MOVING) {
+                               mf_navi_bar_create_path_select_view(ap);
+                               mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+                       }
+               }
+
+       }
+       MF_TRACE_END;
+}
+
+static void _gl_exp_ndepth(void *data, Evas_Object *obj, void *event_info)
+{
+       MF_TRACE_BEGIN;
+       struct appdata *ap = (struct appdata *)data;
+       Elm_Object_Item *item = event_info;
+
+       if (item != NULL) {
+               mfItemData_s *selected = (mfItemData_s *) elm_object_item_data_get(item);
+               //elm_genlist_item_selected_set(item, FALSE);
+
+               if (ap->mf_Status.flagNaviPush) {
+                       mf_debug("the transition of the naviframe is not finished");
+                       return;
+               }
+               SAFE_FREE_OBJ(ap->mf_MainWindow.pContextPopup);
+               if (ap->mf_Status.more == MORE_RENAME) {
+                       if (elm_genlist_item_flip_get(item)) {
+                               MF_TRACE_END;
+                               return;
+                       } else {
+                               mf_callback_rename_save_cb(ap, NULL, NULL);
+                               return;
+                       }
+               } else if (ap->mf_Status.more != MORE_EDIT && ap->mf_Status.more != MORE_SHARE_EDIT) {
+                       if (g_string_equal(selected->m_ItemName, ap->mf_Status.path)) {
+
+                               myfileNaviBar *pNavi_s = mf_navi_bar_get_in_use(ap);
+                               SAFE_FREE_GSTRING(ap->mf_Status.path);
+                               ap->mf_Status.path = g_string_new(selected->m_ItemName->str);
+                               SAFE_FREE_CHAR(pNavi_s->pCurrentPath);
+                               pNavi_s->pCurrentPath = g_strdup(selected->m_ItemName->str);
+
+                               mf_split_view_genlist_append(ap, ap->mf_MainWindow.sSplitData.pSplitLeftGenlist,
+                                                            ap->mf_Status.path, item);
+                       } else {
+                               mf_split_view_genlist_append(ap, ap->mf_MainWindow.sSplitData.pSplitLeftGenlist,
+                                                            ap->mf_Status.path, item);
+                               if (!g_string_equal(selected->m_ItemName, ap->mf_Status.path)) {
+                                       mf_callback_left_click_cb(data, selected->m_ItemName, item);
+                               }
+
+                       }
+
+                       }
+       }
+
+       MF_TRACE_END;
+}
+
+void mf_split_view_left_genlist_refresh(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       Evas_Object *pGenlist = NULL;
+
+       GString *fullpath = ap->mf_Status.path;
+       mf_retm_if(fullpath == NULL, "fullpath is NULL");
+       //Eina_List *dir_list = NULL;
+
+
+       mf_widget_unset_part_content(ap->mf_MainWindow.sSplitData.pPanes, "left");
+       SAFE_FREE_OBJ(ap->mf_MainWindow.sSplitData.pSplitLeftGenlist);
+       /** create the left folder genlist **/
+       pGenlist = mf_widget_create_genlist(ap->mf_MainWindow.sSplitData.pPanes);
+       evas_object_smart_callback_add(pGenlist, "expanded", _gl_exp_ndepth, ap);
+       evas_object_smart_callback_add(pGenlist, "contracted", _gl_con, ap);
+
+       //mf_widget_resize(pLeftGenlist, LEFT_W, LEFT_H);
+       ap->mf_MainWindow.sSplitData.pSplitLeftGenlist = pGenlist;
+
+       //elm_genlist_mode_set(pGenlist, ELM_LIST_SCROLL); /* Back to default */
+       //elm_scroller_policy_set(pGenlist,EINA_TRUE, EINA_TRUE);
+       evas_object_show(pGenlist);
+
+       elm_object_part_content_set(ap->mf_MainWindow.sSplitData.pPanes, "left", pGenlist);
+
+
+       //pGenlist = ap->mf_MainWindow.sSplitData.pSplitLeftGenlist;
+       mf_retm_if(pGenlist == NULL, "pGenlist is NULL");
+       Elm_Object_Item *parent_item = NULL;
+       mf_genlist_clear(pGenlist);
+       mf_genlist_split_left_genlist_style(ap);
+       mf_genlist_split_root_items_append(pGenlist, ap);
+
+
+       int locate = mf_fm_svc_wrapper_get_location(fullpath->str);
+
+       parent_item = mf_split_view_locate_item_get(ap, locate);
+
+       mf_split_view_genlist_append(ap, pGenlist, fullpath, parent_item);
+               //error_code = mf_fm_svc_wrapper_get_file_list(path, &dir_list, file_list);
+       MF_TRACE_END;
+}
+
+bool mf_split_view_refresh(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, FALSE, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+       //update the left genlist items
+       mf_split_view_left_genlist_refresh(ap);
+
+       MF_TRACE_END;
+       return TRUE;
+
+}
+#endif
diff --git a/src/widget/mf-tab-bar.c b/src/widget/mf-tab-bar.c
new file mode 100644 (file)
index 0000000..95966fe
--- /dev/null
@@ -0,0 +1,334 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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 <app.h>
+
+#include "mf-widget.h"
+#include "mf-callback.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-util.h"
+#include "mf-language-mgr.h"
+#include "mf-ta.h"
+
+/******************************
+** Prototype    : mf_tab_bar_create_tab_bar
+** 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_tab_bar_create_tab_bar(Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       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_homogeneous_set(toolbar, EINA_FALSE);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       //set_rotate_cb_for_winset(__rotate_tabbar_cb, toolbar);
+       MF_TRACE_END;
+       return toolbar;
+}
+
+Evas_Object *mf_tab_bar_create_tab_layout(Evas_Object *tab_bar)
+{
+       Evas_Object *layout = elm_layout_add(tab_bar);
+       elm_layout_theme_set(layout, "layout", "tabbar", "default");
+       return layout;
+
+}
+/******************************
+** Prototype    : mf_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_tab_bar_append_item(Evas_Object *pTabBar, char *pTabIconPath, char *pTabBarLabel, void *user_data)
+{
+       mf_retv_if(pTabBar == NULL, NULL);
+       Elm_Object_Item *pItem = NULL;
+       //pItem = elm_toolbar_item_append(pTabBar, pTabIconPath, pTabBarLabel, mf_callback_tab_cb, user_data);
+       return pItem;
+}
+
+
+
+/******************************
+** Prototype    : mf_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_tab_bar_set_item_view(Evas_Object *parent, Evas_Object *tab_layout, Evas_Object *view)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(parent == NULL, "parent is NULL");
+       mf_retm_if(tab_layout == NULL, "tab_layout is NULL");
+       mf_retm_if(view == NULL, "view is NULL");
+       Evas_Object *layout = tab_layout;
+       Evas_Object *unset = elm_object_part_content_get(layout, "elm.swallow.content");
+       if (unset) {
+               mf_widget_unset_part_content(layout, "elm.swallow.content");
+               evas_object_hide(unset);
+       }
+
+       elm_object_part_content_set(layout, "elm.swallow.content", view);
+       MF_TRACE_END;
+}
+
+
+/******************************
+** Prototype    : mf_tab_bar_get_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
+**
+******************************/
+Elm_Object_Item *mf_tab_bar_get_item_by_label(Evas_Object *pTabBar, char *pTabLabel)
+{
+       mf_retvm_if(pTabBar == NULL, NULL, "pTabBar is NULL");
+       mf_retvm_if(pTabLabel == NULL, NULL, "pTabLabel is NULL");
+       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) {
+                       return pItem;
+               }
+               pItem = elm_toolbar_item_next_get(pItem);
+       }
+       return NULL;
+}
+
+
+/******************************
+** Prototype    : mf_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_tab_bar_remove_item_by_label(Evas_Object *pTabBar, char *pTabLabel)
+{
+       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) {
+                       mf_language_mgr_unregister_object_item(pItem);
+                       elm_object_item_del(pItem);
+                       return;
+               }
+               pItem = elm_toolbar_item_next_get(pItem);
+       }
+}
+
+
+/******************************
+** Prototype    : mf_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_tab_bar_set_selected_item(Elm_Object_Item *pItem)
+{
+       mf_retm_if(pItem == NULL, "pItem is NULL");
+       elm_toolbar_item_selected_set(pItem, EINA_TRUE);
+}
+
+
+/******************************
+** Prototype    : mf_tab_bar_set_item_disabled
+** 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_tab_bar_set_item_disabled(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_tab_bar_items_count_get(Evas_Object *pTabBar)
+{
+       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;
+}
+
+void mf_tab_bar_items_del(Evas_Object *pTabBar)
+{
+       mf_retm_if(pTabBar == NULL, "pTabBar does not exist");
+       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);
+               mf_language_mgr_unregister_object_item(it);
+               elm_object_item_del(it);
+               it = pNext;
+       }
+}
+
+void mf_tab_bar_generate(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+       Evas_Object *pContent = NULL;
+       Elm_Object_Item *pItem = NULL;
+
+       MF_TA_ACUM_ITEM_END("      storage check", 0);
+       if (ap->mf_Status.iStorageState > MYFILE_PHONE) {
+               MF_TA_ACUM_ITEM_BEGIN("      create_tabbar", 0);
+               Evas_Object *parent = ap->mf_MainWindow.pNaviBar;
+               /*create tab bar**/
+               MF_TA_ACUM_ITEM_BEGIN("      mf_tab_bar_create_tab_bar", 0);
+               if (ap->mf_MainWindow.pTabBar == NULL) {
+                       ap->mf_MainWindow.pTabBar = mf_tab_bar_create_tab_bar(parent);
+               }
+               MF_TA_ACUM_ITEM_END("      mf_tab_bar_create_tab_bar", 0);
+
+               MF_TA_ACUM_ITEM_BEGIN("      tab bar content set", 0);
+
+               pContent = ap->mf_MainWindow.pTabBar;
+               MF_TA_ACUM_ITEM_BEGIN("      tab bar phone item add", 0);
+
+               MF_TA_ACUM_ITEM_BEGIN("        set phone item", 0);
+               if(!mf_tab_bar_get_item_by_label(pContent, GET_SYS_STR(MF_LABEL_PHONE))) {
+                       pItem = mf_tab_bar_append_item(pContent, MF_ICON_PHONE, GET_SYS_STR(MF_LABEL_PHONE), ap);
+                       mf_language_mgr_register_object_item(pItem, MF_LABEL_PHONE, ITEM_TYPE_TAB);
+               }
+               MF_TA_ACUM_ITEM_END("        set phone item", 0);
+               MF_TA_ACUM_ITEM_END("      tab bar phone item add", 0);
+
+               MF_TA_ACUM_ITEM_BEGIN("      tab bar MMC item add", 0);
+               if (ap->mf_Status.iStorageState & MYFILE_MMC) {
+                       MF_TA_ACUM_ITEM_BEGIN("        set mmc item", 0);
+                       if(!mf_tab_bar_get_item_by_label(pContent, GET_SYS_STR(MF_LABEL_MMC))) {
+                               pItem = mf_tab_bar_append_item(pContent, MF_ICON_MEMORY, GET_SYS_STR(MF_LABEL_MMC), ap);
+                               mf_language_mgr_register_object_item(pItem, MF_LABEL_MMC, ITEM_TYPE_TAB);
+                       }
+                       MF_TA_ACUM_ITEM_END("        set mmc item", 0);
+               }
+               MF_TA_ACUM_ITEM_END("      tab bar MMC item add", 0);
+#ifdef MYFILE_USB_OTG
+               MF_TA_ACUM_ITEM_BEGIN("      tab bar OTG item add", 0);
+               if (ap->mf_Status.iStorageState & MYFILE_OTG) {
+                       if(!mf_tab_bar_get_item_by_label(pContent, GET_STR(MF_LABEL_OTG))) {
+                               pItem = mf_tab_bar_append_item(pContent, MF_ICON_MEMORY, GET_STR(MF_LABEL_OTG), ap);
+                               mf_language_mgr_register_object_item(pItem, MF_LABEL_OTG, ITEM_TYPE_TAB);
+                       }
+               }
+               MF_TA_ACUM_ITEM_END("      tab bar OTG item add", 0);
+#endif
+               MF_TA_ACUM_ITEM_END("      tab bar content set", 0);
+
+               elm_toolbar_select_mode_set(pContent, ELM_OBJECT_SELECT_MODE_ALWAYS);
+
+               MF_TA_ACUM_ITEM_END("      create_tabbar", 0);
+       }
+       MF_TRACE_END;
+}
+
diff --git a/src/widget/mf-tray-item.c b/src/widget/mf-tray-item.c
new file mode 100644 (file)
index 0000000..b7892dd
--- /dev/null
@@ -0,0 +1,294 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+
+#include <stdio.h>
+#include <Elementary.h>
+
+#include "mf-tray-item.h"
+#include "mf-util.h"
+#include "mf-widget.h"
+
+#ifdef MYFILE_TRAY_FEATURE
+
+#define ICON_NORMAL_SIZE_WIDTH         180.0f
+#define ICON_NORMAL_SIZE_HEIGHT                180.0f
+#define CATEGORY_IMAGE                 "Image"
+#define CATEGORY_VIDEO                 "Video"
+#define CATEGORY_SOUNDS                        "Sounds"
+#define CATEGORY_DOC                   "Document"
+#define CATEGORY_OTHERS                        "Others"
+
+#define LAYOUT_SWALLOW_BG              "swallow.bg"
+#define LAYOUT_INFO_SHORTCUT_ITEM_ICON     "swallow.icon"
+static const char *STR_ATTRIBUTE_NAME = "name";
+static const char *STR_ATTRIBUTE_ICON_PRESS = "icon_press";
+static const char *STR_ATTRIBUTE_ICON = "icon";
+
+static void __mf_tray_item_del(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       mf_retm_if(obj == NULL, "Invalid argument: parent is NULL\n");
+       char *tmp = NULL;
+
+       tmp = evas_object_data_get(obj, STR_ATTRIBUTE_NAME);
+       SAFE_FREE_CHAR(tmp);
+
+       tmp = evas_object_data_get(obj, STR_ATTRIBUTE_ICON_PRESS);
+       SAFE_FREE_CHAR(tmp);
+
+       mf_debug("_dock_item_del end.\n");
+}
+
+int mf_tray_item_type(const char *path)
+{
+       int type = mf_file_attr_get_file_type_by_mime(path);
+       int category = mf_tray_item_category_none;
+       switch(type) {
+       case FILE_TYPE_IMAGE:
+               category = mf_tray_item_category_image;
+               break;
+       case FILE_TYPE_VIDEO:
+               category = mf_tray_item_category_video;
+               break;
+       case FILE_TYPE_SOUND:
+       case FILE_TYPE_MUSIC:
+               category = mf_tray_item_category_sounds;
+               break;
+       case FILE_TYPE_DOC:
+       case FILE_TYPE_PDF:
+       case FILE_TYPE_PPT:
+       case FILE_TYPE_EXCEL:
+       case FILE_TYPE_TXT:
+               category = mf_tray_item_category_document;
+               break;
+       case FILE_TYPE_DIR:
+               category = mf_tray_item_category_none;
+               break;
+       default:
+               category = mf_tray_item_category_others;
+               break;
+       }
+       mf_debug("path is [%s] category is [%d]", path, category);
+       return category;
+}
+
+char *mf_tray_item_get_data(Evas_Object *edje, const char *attribute)
+{
+       return evas_object_data_get(edje, attribute);
+}
+
+static void __item_mouse_down_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       mf_retm_if(NULL == data, "NULL == data");
+       mf_retm_if(NULL == obj, "NULL == obj");
+
+       Evas_Object *icon = NULL;
+       char *press_icon = NULL;
+
+       icon = elm_object_part_content_get(obj, LAYOUT_INFO_SHORTCUT_ITEM_ICON);
+       press_icon = mf_tray_item_get_data(obj, STR_ATTRIBUTE_ICON_PRESS);
+
+       if (icon) {
+               elm_image_file_set(icon, press_icon, NULL);
+       }
+
+}
+
+static void __item_mouse_up_cb(void *data, Evas *evas, Evas_Object *obj, void *event_info)
+{
+       mf_retm_if(NULL == data, "NULL == data");
+       mf_retm_if(NULL == obj, "NULL == obj");
+
+       struct appdata *ap = (struct appdata *)data;
+       Evas_Object *icon = NULL;
+       char *unpress_icon = NULL;
+       const char *name = NULL;
+
+       icon = elm_object_part_content_get(obj, LAYOUT_INFO_SHORTCUT_ITEM_ICON);
+       unpress_icon = mf_tray_item_get_data(obj, STR_ATTRIBUTE_ICON);
+       name = mf_tray_item_get_data(obj, STR_ATTRIBUTE_NAME);
+       mf_debug(" %s\t ~~~~~~~~~~~~~~~~name: %s\n",__FUNCTION__, name);
+
+       if (icon) {
+               elm_image_file_set(icon, unpress_icon, NULL);
+       }
+
+       int category = mf_tray_item_category_none;  //change for test
+
+       
+       if (g_strcmp0(name, CATEGORY_IMAGE) == 0) {
+               category = mf_tray_item_category_image;
+       } else if (g_strcmp0(name, CATEGORY_VIDEO) == 0) {
+               category = mf_tray_item_category_video;
+       } else if (g_strcmp0(name, CATEGORY_SOUNDS) == 0) {
+               category = mf_tray_item_category_sounds;
+       } else if (g_strcmp0(name, CATEGORY_DOC) == 0) {
+               category = mf_tray_item_category_document;
+       } else if (g_strcmp0(name, CATEGORY_OTHERS) == 0) {
+               category = mf_tray_item_category_others;
+       }
+       mf_debug("category is [%d]", category);
+       if (category != mf_tray_item_category_none) {
+               ap->mf_Status.view_type = mf_view_root_category;
+               mf_search_bar_category_search(ap, category);
+               Evas_Object *btn = mf_widget_unset_part_content(ap->mf_MainWindow.pNaviBar, NAVI_BOTTOM_BUTTON_1_PART);
+               SAFE_FREE_OBJ(btn);
+
+               btn = mf_widget_util_create_button(ap->mf_MainWindow.pNaviBar, NAVI_BUTTON_STYLE, MF_LABEL_EDIT, NULL, mf_callback_edit_cb, ap);
+               if (btn) {
+                       elm_object_item_part_content_set(ap->mf_MainWindow.pNaviItem, NAVI_BOTTOM_BUTTON_1_PART, btn);
+               }
+       }
+
+}
+
+static int __mf_tray_item_register_event(void *data, Evas_Object *obj)
+{
+       mf_retvm_if(NULL == data, EXIT_FAILURE, "NULL == data");
+
+       evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN, __item_mouse_down_cb, data);
+       //evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_MOVE, _item_mouse_move_cb, app_tray);
+       evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP, __item_mouse_up_cb, data);
+       //evas_object_event_callback_add(obj, EVAS_CALLBACK_FOCUS_OUT, _item_focus_out_cb, app_tray);
+
+       return EXIT_SUCCESS;
+}
+static void __mf_tray_item_data_set(Evas_Object *obj, const char* attribute, const char *data)
+{
+       mf_retm_if(NULL == obj, "NULL == obj");
+       mf_retm_if(NULL == attribute, "NULL == attribute");
+       mf_retm_if(NULL == data, "NULL == data");
+
+       evas_object_data_set(obj, attribute, data);
+
+}
+
+static char *__mf_tray_item_get_press_icon(const char *name)
+{
+       mf_retvm_if(NULL == name, NULL, "NULL == name");
+       if (g_strcmp0(name, CATEGORY_IMAGE) == 0) {
+               return MF_ICON_SHORTCUT_IMAGE_PRESS;
+       } else if (g_strcmp0(name, CATEGORY_VIDEO) == 0) {
+               return MF_ICON_SHORTCUT_VIDEO_PRESS;
+       } else if (g_strcmp0(name, CATEGORY_SOUNDS) == 0) {
+               return MF_ICON_SHORTCUT_SOUNDS_PRESS;
+       } else if (g_strcmp0(name, CATEGORY_DOC) == 0) {
+               return MF_ICON_SHORTCUT_DOCUMENT_PRESS;
+       } else if (g_strcmp0(name, CATEGORY_OTHERS) == 0) {
+               return MF_ICON_SHORTCUT_OTHERS_PRESS;
+       } else {
+               return NULL;
+       }
+}
+Evas_Object *mf_tray_item_create(Evas_Object *parent, const char *icon_file, const char *name)
+{
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(icon_file == NULL, NULL, "icon_file is NULL");
+       mf_retvm_if(name == NULL, NULL, "name is NULL");
+
+       Evas_Object *layout = NULL;
+       Evas_Object *bg;
+
+       layout = mf_widget_create_layout(parent, EDJ_NAME, GRP_TRAY_ITEM);
+
+       #if 0
+       bg = evas_object_rectangle_add(evas);
+       if (!bg) {
+               evas_object_del(layout);
+               return NULL;
+       }
+
+       evas_object_color_set(bg, 0, 0, 0, 0);
+       evas_object_resize(bg, ICON_NORMAL_SIZE_WIDTH * elm_config_scale_get(), ICON_NORMAL_SIZE_HEIGHT * elm_config_scale_get());
+       evas_object_size_hint_min_set(bg, ICON_NORMAL_SIZE_WIDTH * elm_config_scale_get(), ICON_NORMAL_SIZE_HEIGHT * elm_config_scale_get());
+       evas_object_size_hint_max_set(bg, ICON_NORMAL_SIZE_WIDTH * elm_config_scale_get(), ICON_NORMAL_SIZE_HEIGHT * elm_config_scale_get());
+       #endif
+
+
+       Evas_Object *icon = NULL;
+
+       icon = elm_image_add(layout);
+       if (elm_image_file_set(icon, icon_file, NULL) == EINA_FALSE) {
+               mf_error("Icon file is not accessible (%s)\n", icon_file);
+               evas_object_del(icon);
+               icon = NULL;
+       }
+
+       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       evas_object_show(icon);
+
+       if (icon) {
+               Evas_Object *tmp;
+               tmp = mf_widget_unset_part_content(layout, LAYOUT_INFO_SHORTCUT_ITEM_ICON);
+               if (tmp) {
+                       evas_object_del(tmp);
+               }
+
+               elm_object_part_content_set(layout, LAYOUT_INFO_SHORTCUT_ITEM_ICON, icon);
+       }
+
+       __mf_tray_item_data_set(layout, STR_ATTRIBUTE_NAME, name);
+       __mf_tray_item_data_set(layout, STR_ATTRIBUTE_ICON, icon_file);
+       __mf_tray_item_data_set(layout, STR_ATTRIBUTE_ICON_PRESS, __mf_tray_item_get_press_icon(name));
+
+       //edje_object_part_text_set(_EDJ(layout), LAYOUT_INFO_SHORTCUT_ITEM_NAME, name);
+       evas_object_show(layout);
+       //evas_object_event_callback_add(layout, EVAS_CALLBACK_DEL, __mf_tray_item_del, NULL);
+
+       return layout;
+}
+Evas_Object *mf_tray_create(Evas_Object *parent, void *data)
+{
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+
+       
+
+       Evas_Object *layout = mf_widget_create_layout(parent, EDJ_NAME, "myfile_shortcut_5_images");
+
+  
+       elm_box_horizontal_set(layout, EINA_TRUE);
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *Image = mf_tray_item_create(layout, MF_ICON_SHORTCUT_IMAGE, CATEGORY_IMAGE);
+       elm_object_part_content_set(layout, "mf_shortcut_image", Image);
+       __mf_tray_item_register_event(data, Image);
+
+       Evas_Object *Video = mf_tray_item_create(layout, MF_ICON_SHORTCUT_VIDEO, CATEGORY_VIDEO);
+       elm_object_part_content_set(layout, "mf_shortcut_video", Video);
+       __mf_tray_item_register_event(data, Video);
+
+       Evas_Object *Sounds = mf_tray_item_create(layout, MF_ICON_SHORTCUT_SOUNDS, CATEGORY_SOUNDS);
+       elm_object_part_content_set(layout, "mf_shortcut_sound", Sounds);
+       __mf_tray_item_register_event(data, Sounds);
+
+       Evas_Object *Document = mf_tray_item_create(layout, MF_ICON_SHORTCUT_DOCUMENT, CATEGORY_DOC);
+       elm_object_part_content_set(layout, "mf_shortcut_document", Document);
+       __mf_tray_item_register_event(data, Document);
+
+       Evas_Object *Others = mf_tray_item_create(layout, MF_ICON_SHORTCUT_OTHERS, CATEGORY_OTHERS);
+       elm_object_part_content_set(layout, "mf_shortcut_others", Others);
+       __mf_tray_item_register_event(data, Others);
+
+       //evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_DOWN, _item_mouse_down_cb, app_tray);
+       //evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_MOVE, _item_mouse_move_cb, app_tray);
+
+       //evas_object_event_callback_add(icon, EVAS_CALLBACK_MOUSE_UP, _item_mouse_up_cb, app_tray);
+       //evas_object_event_callback_add(icon, EVAS_CALLBACK_FOCUS_OUT, _item_focus_out_cb, app_tray);
+       return layout;
+
+}
+#endif
diff --git a/src/widget/mf-widget.c b/src/widget/mf-widget.c
new file mode 100644 (file)
index 0000000..a8f7c27
--- /dev/null
@@ -0,0 +1,699 @@
+/*
+ * Copyright 2013         Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.1 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.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-main.h"
+#include "mf-callback.h"
+#include "mf-search.h"
+#include "mf-split-view.h"
+#include "mf-widget.h"
+#include "mf-fm-svc-wrapper.h"
+#include "mf-resource.h"
+#include "mf-ta.h"
+#include "mf-language-mgr.h"
+
+extern Elm_Genlist_Item_Class itc;
+extern Elm_Genlist_Item_Class userfolderitc;
+extern Elm_Genlist_Item_Class categoryitc;
+extern Elm_Gengrid_Item_Class gic;
+
+
+
+Evas_Object *mf_widget_create_genlist(Evas_Object *parent)
+{
+       Evas_Object *genlist = NULL;
+       genlist = elm_genlist_add(parent);
+       //elm_genlist_homogeneous_set(genlist, EINA_TRUE);
+       //elm_object_focus_set(genlist, EINA_FALSE);
+       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);
+       return genlist;
+}
+
+Evas_Object *mf_widget_create_box(Evas_Object * parent)
+{
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *box = NULL;
+       box = elm_box_add(parent);
+       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);
+       return box;
+
+}
+
+Evas_Object *mf_widget_create_layout(Evas_Object *parent, const char *edj, const char *grp_name)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(edj == NULL, NULL, "edj is NULL");
+       mf_retvm_if(grp_name == NULL, NULL, "grp_name is NULL");
+
+       Evas_Object *layout = NULL;
+       layout = elm_layout_add(parent);
+       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);
+       MF_TRACE_END;
+       return layout;
+
+}
+
+Evas_Object *mf_widget_create_conform(Evas_Object * parent)
+{
+       mf_retv_if(parent == NULL, NULL);
+
+       Evas_Object *conform;
+
+       conform = elm_conformant_add(parent);
+       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(conform);
+
+       return conform;
+}
+
+Evas_Object *mf_widget_create_check_box(Evas_Object *parent)
+{
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *checkbox = NULL;
+       checkbox = elm_check_add(parent);
+       elm_object_focus_set(checkbox, EINA_FALSE);
+       evas_object_propagate_events_set(checkbox, EINA_FALSE);
+       evas_object_show(checkbox);
+       return checkbox;
+}
+
+Evas_Object *mf_widget_create_no_content(Evas_Object *parent)
+{
+       Evas_Object *nocontent = elm_layout_add(parent);
+       elm_layout_theme_set(nocontent, "layout", "nocontents", "text");
+       elm_object_focus_set(nocontent, EINA_FALSE);
+       elm_object_part_text_set(nocontent, "elm.text", GET_SYS_STR(MF_LABEL_NO_FILES));
+       mf_language_mgr_register_object(nocontent, OBJ_TYPE_EDJE_OBJECT, "elm.text", MF_LABEL_NO_FILES);
+       return nocontent;
+}
+
+Evas_Object *mf_widget_create_select_all_layout(Evas_Object *parent)
+{
+
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *pSelectedAllLayout = NULL;
+       pSelectedAllLayout = elm_layout_add(parent);
+       elm_object_focus_set(pSelectedAllLayout, EINA_FALSE);
+       elm_layout_theme_set(pSelectedAllLayout, "genlist", "item", "select_all/default");
+       evas_object_size_hint_weight_set(pSelectedAllLayout, EVAS_HINT_EXPAND, EVAS_HINT_FILL);
+       evas_object_size_hint_align_set(pSelectedAllLayout, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_object_part_text_set(pSelectedAllLayout, "elm.text", GET_SYS_STR(MF_LABEL_SELECT_ALL));
+       mf_language_mgr_register_object(pSelectedAllLayout, OBJ_TYPE_EDJE_OBJECT, "elm.text", MF_LABEL_SELECT_ALL);
+       evas_object_show(pSelectedAllLayout);
+       return pSelectedAllLayout;
+}
+
+Evas_Object *mf_widget_create_editfield(Evas_Object *parent, Evas_Object **pEntry)
+{
+
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       Evas_Object *layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "editfield", "default");
+       Evas_Object *entry = elm_entry_add(parent);
+       elm_object_style_set(entry, "default");
+       elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+       *pEntry = entry;
+       return layout;
+}
+
+Evas_Object *mf_widget_create_search_bar(Evas_Object *parent, Evas_Object **pEntry)
+{
+       Evas_Object *searchbar_layout = elm_layout_add(parent);
+       elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "default");
+       Evas_Object *entry = elm_entry_add(searchbar_layout);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT);
+       elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry);
+       *pEntry = entry;
+       return searchbar_layout;
+}
+
+Evas_Object *mf_widget_create_panes(Evas_Object *parent)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *panes = NULL;
+       panes = elm_panes_add(parent);
+       mf_retvm_if(panes == NULL, NULL, "panes is NULL");
+       elm_object_focus_set(panes, EINA_FALSE);
+       evas_object_size_hint_weight_set(panes, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(panes, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       elm_panes_fixed_set(panes, EINA_FALSE);
+       evas_object_show(panes);
+       MF_TRACE_END;
+       return panes;
+}
+
+Evas_Object *mf_widget_create_layout_main(Evas_Object * parent)
+{
+       Evas_Object *layout;
+
+       mf_retv_if(parent == NULL, NULL);
+
+       layout = elm_layout_add(parent);
+       mf_retvm_if(layout == NULL, NULL, "Failed elm_layout_add.\n");
+       elm_object_focus_set(layout, EINA_FALSE);
+
+       MF_TA_ACUM_ITEM_BEGIN("      elm_layout_theme_set", 0);
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       MF_TA_ACUM_ITEM_END("      elm_layout_theme_set", 0);
+
+       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);
+
+       return layout;
+}
+
+
+Evas_Object *mf_widget_create_cancel_button_on_search(Evas_Object *parent)
+{
+       Evas_Object *cancel_btn = elm_button_add(parent);
+       elm_object_part_content_set(parent, "button_cancel", cancel_btn);
+       elm_object_style_set(cancel_btn, "searchbar/default");
+       elm_object_text_set(cancel_btn, GET_SYS_STR(LABEL_CANCEL));
+       mf_language_mgr_register_object(cancel_btn, OBJ_TYPE_ELM_OBJECT, NULL, LABEL_CANCEL);
+       return cancel_btn;
+}
+
+void mf_widget_item_remove(Evas_Object *parent, const char *path, int type)
+{
+       mf_debug("path is [%s]", path);
+       mf_retm_if(parent == NULL, "parent is NULL");
+       mf_retm_if(path == NULL, "path is NULL");
+
+       mfItemData_s *itemData = NULL;
+       Elm_Object_Item *it = NULL;
+
+       if (type == MF_VIEW_STYLE_THUMBNAIL) {
+               it = elm_gengrid_first_item_get(parent);
+       } else {
+               it = elm_genlist_first_item_get(parent);
+       }
+       while (it) {
+               itemData = elm_object_item_data_get(it);
+               if (itemData->m_ItemName == NULL || itemData->m_ItemName->str == NULL) {
+                       continue;
+               }
+               mf_debug("itemData->m_ItemName->str is [%s]", itemData->m_ItemName->str);
+               if (g_strcmp0(path, itemData->m_ItemName->str) == 0) {
+                       elm_object_item_del(it);
+                       break;
+               }
+
+               if (type == MF_VIEW_STYLE_THUMBNAIL) {
+                       it = elm_gengrid_item_next_get(it);
+               } else {
+                       it = elm_genlist_item_next_get(it);
+               }
+       }
+
+}
+
+void mf_widget_items_remove(Evas_Object *parent, int storage, int type)
+{
+       mf_retm_if(parent == NULL, "parent is NULL");
+
+       mfItemData_s *itemData = NULL;
+       Elm_Object_Item *it = NULL;
+       Elm_Object_Item *next_it = NULL;
+
+       if (type == MF_VIEW_STYLE_THUMBNAIL) {
+               it = elm_gengrid_first_item_get(parent);
+       } else {
+               it = elm_genlist_first_item_get(parent);
+       }
+       while (it) {
+               itemData = elm_object_item_data_get(it);
+               if (itemData->m_ItemName == NULL || itemData->m_ItemName->str == NULL) {
+                       continue;
+               }
+               if (mf_fm_svc_wrapper_get_location(itemData->m_ItemName->str) == storage){
+                       if (type == MF_VIEW_STYLE_THUMBNAIL) {
+                               next_it = elm_gengrid_item_next_get(it);
+                       } else {
+                               next_it = elm_genlist_item_next_get(it);
+                       }
+                       elm_object_item_del(it);
+                       it = next_it;
+               } else {
+                       if (type == MF_VIEW_STYLE_THUMBNAIL) {
+                               it = elm_gengrid_item_next_get(it);
+                       } else {
+                               it = elm_genlist_item_next_get(it);
+                       }
+               }
+       }
+
+}
+
+Elm_Object_Item *mf_widget_item_append(Evas_Object *parent, fsNodeInfo *pNode, void *data)
+{
+       mf_retvm_if(parent == NULL, NULL, "pGenlist is NULL");
+       mf_retvm_if(pNode == NULL, NULL, "pNode is NULL");
+       mf_retvm_if(pNode->path == NULL, NULL, "pNode->path is NULL");
+       mf_retvm_if(pNode->name == NULL, NULL, "pNode->name is NULL");
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+
+       char *real_name = NULL;
+       mfItemData_s *m_TempItem = NULL;
+       struct appdata *ap = (struct appdata *)data;
+
+       real_name = g_strconcat(pNode->path, "/", pNode->name, NULL);
+       if (real_name == NULL) {
+               return NULL;
+       }
+
+       mf_genlist_create_data(&m_TempItem, real_name, data);
+
+       if (m_TempItem == NULL) {
+               free(real_name);
+               real_name = NULL;
+               return NULL;
+       }
+
+       if (ap->mf_Status.view_type == mf_view_root) {
+               if(g_strcmp0(real_name, PHONE_FOLDER) == 0) {
+                       m_TempItem->thumb_path = strdup(MF_ICON_ITEM_PHONE);
+                       m_TempItem->real_thumb_flag = true;
+               } else if(g_strcmp0(real_name, MEMORY_FOLDER) == 0) {
+                       m_TempItem->thumb_path = strdup(MF_ICON_ITEM_MMC);
+                       m_TempItem->real_thumb_flag = true;
+               } else if(g_strcmp0(real_name, OTG_FOLDER) == 0) {
+                       m_TempItem->thumb_path = strdup(MF_ICON_ITEM_MMC);
+                       m_TempItem->real_thumb_flag = true;
+               }
+       }
+
+       Elm_Object_Item *it = NULL;
+
+       if (ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               char *tempdate = mf_util_icu_translate(ap, pNode->date);
+               if (tempdate == NULL)
+                       m_TempItem->create_date = g_strdup("N/A");
+               else {
+                       m_TempItem->create_date = g_strdup(tempdate);
+                       free(tempdate);
+               }
+               mf_file_attr_get_file_size_info(&(m_TempItem->size), pNode);
+       }
+       if (ap->mf_Status.flagViewType == MF_VIEW_STYLE_LIST || ap->mf_Status.flagViewType == MF_VIEW_SYTLE_LIST_DETAIL) {
+               if (ap->mf_Status.view_type == mf_view_root_category) {
+                       it = elm_genlist_item_append(parent, &categoryitc, m_TempItem, NULL, ELM_GENLIST_ITEM_NONE, mf_genlist_gl_sel, m_TempItem);
+               } else {
+                       if (mf_file_attr_is_dir(m_TempItem->m_ItemName->str)) {
+                               it = elm_genlist_item_append(parent, &userfolderitc, m_TempItem, NULL, ELM_GENLIST_ITEM_NONE, mf_genlist_gl_sel, m_TempItem);
+                       } else {
+                               it = elm_genlist_item_append(parent, &itc, m_TempItem, NULL, ELM_GENLIST_ITEM_NONE, mf_genlist_gl_sel, m_TempItem);
+                       }
+               }
+       } else {
+               it = elm_gengrid_item_append(parent, &gic, m_TempItem, NULL, NULL);
+       }
+
+       m_TempItem->item = it;
+       free(real_name);
+       return it;
+}
+
+Evas_Object *mf_widget_get_part_content(Evas_Object *parent, const char *part)
+{
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(part == NULL, NULL, "part is NULL");
+
+       Evas_Object *content = NULL;
+       content = elm_object_part_content_get(parent, part);
+       return content;
+}
+
+Evas_Object *mf_widget_unset_part_content(Evas_Object *parent, const char *part)
+{
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(part == NULL, NULL, "part is NULL");
+
+       Evas_Object *content = NULL;
+       content = elm_object_part_content_unset(parent, part);
+       return content;
+}
+
+Evas_Object *mf_widget_util_create_button(Evas_Object *parent, char *style,
+                                  char *caption, Evas_Object *icon,
+                                  void (*func) (void *, Evas_Object *, void *),
+                                  void *data)
+{
+       if (!parent)
+               return NULL;
+
+       Evas_Object *btn;
+
+       btn = elm_button_add(parent);
+
+       if (style) {
+               elm_object_style_set(btn, style);
+       }
+
+       if (caption) {
+               elm_object_text_set(btn, mf_util_get_text(caption));
+               mf_language_mgr_register_object(btn, OBJ_TYPE_ELM_OBJECT, NULL, caption);
+       }
+
+       if (icon)
+               elm_object_content_set(btn, icon);
+
+       elm_object_focus_allow_set(btn, EINA_FALSE);
+       evas_object_propagate_events_set(btn, EINA_FALSE);
+
+       evas_object_smart_callback_add(btn, "clicked", func, (void *)data);
+
+       return btn;
+}
+
+static Eina_Bool __mf_widget_notify_popup_timer_cb(void *data)
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, EINA_FALSE, "ap is null");
+
+       mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout,
+                                           "sel_contents");
+
+       SAFE_FREE_OBJ(ap->mf_MainWindow.pLabelLayout);
+       ap->mf_MainWindow.pPopupTimer = NULL;
+       return false;
+}
+
+Evas_Object *mf_widget_create_notify_popup(void *data,
+                                   Evas_Object *parent,
+                                   char *label,
+                                   mf_notify_popup_type type,
+                                   bool time_out,
+                                   void func(void *data, Evas_Object *obj, void *event_info))
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       mf_retvm_if(parent == NULL, NULL, "parent is NULL");
+       mf_retvm_if(label == NULL, NULL, "label is NULL");
+
+       struct appdata *ap = (struct appdata *)data;
+       mf_retvm_if(ap == NULL, NULL, "ap is NULL");
+
+       Evas_Object *countlabel = NULL;
+       if (ap->mf_MainWindow.pLabelLayout && ap->mf_MainWindow.pPopupTimer) {
+               elm_object_part_text_set(ap->mf_MainWindow.pLabelLayout, "elm.text", label);
+               countlabel = ap->mf_MainWindow.pLabelLayout;
+       } else {
+               mf_widget_unset_part_content(ap->mf_MainWindow.pNaviLayout,
+                                                   "sel_contents");
+               SAFE_FREE_OBJ(ap->mf_MainWindow.pLabelLayout);
+               countlabel = elm_layout_add(parent);
+               evas_object_size_hint_weight_set(countlabel,
+                                                EVAS_HINT_EXPAND,
+                                                EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(countlabel,
+                                               EVAS_HINT_FILL,
+                                               EVAS_HINT_FILL);
+               elm_layout_theme_set(countlabel, "standard", "selectioninfo", "center_text");
+               elm_object_part_text_set(countlabel, "elm.text", label);
+               elm_object_part_content_set(parent,
+                                           "sel_contents",
+                                           countlabel);
+               elm_object_signal_emit(countlabel, "show,selection,info", "elm");
+       }
+
+       SAFE_DEL_ECORE_TIMER(ap->mf_MainWindow.pPopupTimer);
+       if (time_out) {
+               ap->mf_MainWindow.pPopupTimer = ecore_timer_add(3, __mf_widget_notify_popup_timer_cb, ap);
+       }
+
+       evas_object_show(countlabel);
+       MF_TRACE_END;
+       return countlabel;
+
+
+}
+
+void mf_widget_create_entryfield(void *data,
+                          Evas_Object *parent,
+                          void (*changed_cb)(void *data, Evas_Object *obj, void *event_info),
+                          void (*click_cb)(void *data, Evas_Object *obj, void *event_info))
+{
+       struct appdata *ap = (struct appdata *)data;
+       mf_retm_if(ap == NULL, "ap is NULL");
+       Evas_Object *entry = NULL;
+
+       Evas_Object *edit_field = mf_widget_create_editfield(parent, &entry);
+
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_entry_scrollable_set(entry, EINA_TRUE);
+
+       elm_object_signal_emit(edit_field, "elm,state,eraser,show", "elm");
+
+       evas_object_size_hint_weight_set(edit_field, 1, 1);
+       evas_object_size_hint_align_set(edit_field, 1, 0.5);
+       //evas_object_show(edit_field);
+       ap->mf_MainWindow.pEditField = edit_field;
+
+       ap->mf_MainWindow.pEntry = entry;
+
+       evas_object_smart_callback_add(entry, "changed", changed_cb, ap);
+       elm_object_signal_callback_add(edit_field, "elm,eraser,clicked", "elm", mf_callback_eraser_clicked_cb, entry);
+
+       evas_object_show(entry);
+}
+
+Evas_Object *mf_widget_button_create(Evas_Object *parent, const char *label)
+{
+       Evas_Object *btn = NULL;
+       btn = elm_button_add(parent);
+       if (label) {
+               elm_object_text_set(btn, label);
+               mf_language_mgr_register_object(btn, OBJ_TYPE_ELM_OBJECT, NULL, label);
+       }
+       return btn;
+
+}
+void mf_widget_panes_right_set(Evas_Object *panes, Evas_Object *content)
+{
+       mf_retm_if(panes == NULL, "panes is NULL");
+       mf_retm_if(content == NULL, "content is NULL");
+       elm_object_part_content_set(panes, "right", content);
+}
+
+void mf_widget_panes_left_set(Evas_Object *panes, Evas_Object *content)
+{
+       mf_retm_if(panes == NULL, "panes is NULL");
+       mf_retm_if(content == NULL, "content is NULL");
+       elm_object_part_content_set(panes, "left", content);
+}
+
+
+#ifdef MYFILE_SPLIT_VIEW
+void mf_widget_unset_main_layout_content(Evas_Object *layout)
+{
+       Evas_Object *unSet = NULL;
+       unSet = mf_widget_unset_part_content(layout, "elm.swallow.content");
+       evas_object_hide(unSet);
+
+}
+
+void mf_widget_unset_tabbar_layout_content(Evas_Object *layout)
+{
+       mf_widget_unset_part_content(layout, "elm.swallow.content");
+       mf_widget_unset_part_content(layout, "elm.swallow.tabbar");
+
+}
+#endif
+
+void mf_widget_resize(Evas_Object *obj, Evas_Coord w, Evas_Coord h)
+{
+       if (obj) {
+               evas_object_size_hint_min_set(obj, w, h);
+               evas_object_size_hint_max_set(obj, w, h);
+       }
+}
+
+myfileNaviBar *mf_widget_phone_storage_init(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retvm_if(data == NULL, NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+       Evas_Object *parent = ap->mf_MainWindow.pWindow;
+
+       MF_TA_ACUM_ITEM_BEGIN("      mf_navi_bar_create_navi_bar", 0);
+       ap->mf_MainWindow.pNaviBar = mf_navi_bar_create_navi_bar(parent);
+
+       evas_object_smart_callback_add(ap->mf_MainWindow.pNaviBar, "title,clicked", mf_callback_naviframe_title_clicked_cb, NULL);
+
+       MF_TA_ACUM_ITEM_END("      mf_navi_bar_create_navi_bar", 0);
+
+       if (ap->mf_MainWindow.pNaviBar == NULL) {
+               return NULL;
+       }
+       MF_TA_ACUM_ITEM_BEGIN("      make phone navi struct", 0);
+       myfileNaviBar *pNavi_phone = malloc(sizeof(myfileNaviBar));
+       mf_retvm_if(pNavi_phone == NULL, NULL, "pNavi_phone is NULL");
+       memset(pNavi_phone, 0, sizeof(myfileNaviBar));
+       pNavi_phone->naviFlagInUse = TRUE;
+       pNavi_phone->pCurrentPath = g_strdup(ap->mf_Status.path->str);
+       pNavi_phone->pre_more = MORE_DEFAULT;
+       pNavi_phone->pNaviLabel = strdup(GET_SYS_STR(MF_LABEL_PHONE));
+       /*insert phone navi into the navi_list */
+       /**    Todo:   if we need to check ap->mf_MainWindow.plistNaviBar?*/
+       ap->mf_MainWindow.plistNaviBar = eina_list_append(ap->mf_MainWindow.plistNaviBar, pNavi_phone);
+       MF_TA_ACUM_ITEM_END("      make phone navi struct", 0);
+       MF_TRACE_END;
+       return pNavi_phone;
+}
+
+
+void mf_widget_create(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+#ifdef MYFILE_SPLIT_VIEW
+       struct appdata *ap = (struct appdata*)data;
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               if (ap->mf_MainWindow.sSplitData.bFlagSplitViewCreate == FALSE) {
+                       mf_split_view_init(ap);
+               }
+       }
+#endif
+       MF_TRACE_END;
+
+}
+
+
+#ifdef MYFILE_SPLIT_VIEW
+void mf_widget_set_main_layout_content(void *data)
+{
+
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata*)data;
+       if (ap->mf_Status.more == MORE_SEARCH || ap->mf_Status.more == MORE_CREATE_FOLDER || (ap->mf_Status.more == MORE_RENAME && ap->mf_Status.preMore == MORE_SEARCH)) {
+               return;
+       }
+
+       if (ap->mf_Status.view_type == mf_view_root_category || ap->mf_Status.view_type == mf_view_root) {
+               return;
+       }
+
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+
+               mf_widget_unset_main_layout_content(ap->mf_MainWindow.pMainLayout);
+               elm_object_part_content_set(ap->mf_MainWindow.sSplitData.pMainLayout, "elm.swallow.content", ap->mf_MainWindow.pNaviBar);
+               mf_widget_panes_right_set(ap->mf_MainWindow.sSplitData.pPanes, ap->mf_MainWindow.sSplitData.pMainLayout);
+               mf_split_view_show(ap);
+               elm_object_part_content_set(ap->mf_MainWindow.pMainLayout, "elm.swallow.content", ap->mf_MainWindow.sSplitData.pPanes);
+
+       } else {
+               mf_split_view_unset_right_content(ap);
+               mf_widget_unset_main_layout_content(ap->mf_MainWindow.pMainLayout);
+               mf_split_view_hide(ap);
+               evas_object_show(ap->mf_MainWindow.pMainLayout);
+               elm_object_part_content_set(ap->mf_MainWindow.pMainLayout, "elm.swallow.content", ap->mf_MainWindow.pNaviBar);
+       }
+
+       MF_TRACE_END;
+
+}
+#endif
+void mf_widget_refresh_view(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata*)data;
+
+       if (ap->mf_Status.more == MORE_DEFAULT) {
+               mf_navi_bar_create_default_view(ap);
+       } else if (ap->mf_Status.more == MORE_INTERNAL_COPY_MOVE || ap->mf_Status.more == MORE_INTERNAL_COPY || ap->mf_Status.more == MORE_INTERNAL_MOVE
+                  || ap->mf_Status.more == MORE_DATA_COPYING || ap->mf_Status.more == MORE_DATA_MOVING) {
+               mf_navi_bar_create_path_select_view(ap);
+       } else if (ap->mf_Status.more == MORE_EDIT || ap->mf_Status.more == MORE_SHARE_EDIT) {
+               mf_callback_edit_cb(ap, NULL, NULL);
+       }
+
+#ifdef MYFILE_SPLIT_VIEW
+       if (ap->mf_Status.rotation_type == MF_ROTATE_LANDSCAPE) {
+               mf_split_view_refresh(ap);
+       }
+#endif
+       mf_navi_bar_remove_previous_contents(ap, ap->mf_MainWindow.pNaviBar);
+       MF_TRACE_END;
+}
+
+void mf_widget_set_navi_blocking(void * data,Eina_Bool is_locked)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+
+       struct appdata *ap = (struct appdata*)data;
+       ap->mf_Status.flagNaviPush = is_locked;
+}
+
+
+#ifdef MYFILE_MOTION_FEATURE
+void mf_widget_first_item_bring_in(void *data)
+{
+       MF_TRACE_BEGIN;
+       mf_retm_if(data == NULL, "data is NULL");
+       struct appdata *ap = (struct appdata*)data;
+
+       Evas_Object *genlist = NULL;
+       genlist = ap->mf_MainWindow.pNaviGenlist;
+       if (ap->mf_Status.doubletab_event_handler) {
+               ap->mf_Status.doubletab_event_handler(genlist);
+       }
+}
+#endif
+void mf_widget_imf_hide_callback_register(Evas_Object *pConformant, void *data)
+{
+       evas_object_smart_callback_add(pConformant, "virtualkeypad,state,off",
+                              mf_callback_imf_hide_cb, data);
+}
+
+void mf_widget_imf_hide_callback_del(Evas_Object *pConformant)
+{
+       evas_object_smart_callback_del(pConformant, "virtualkeypad,state,off",
+                                      mf_callback_imf_hide_cb);
+}
+
+