From f885dc0658c66824c4eabf8ba90f6e14ebeb3e1d Mon Sep 17 00:00:00 2001 From: Kyuho Jo Date: Mon, 4 Apr 2016 20:13:41 +0900 Subject: [PATCH 2/6] Skeleton code with resource files Change-Id: I31e9b7877570e214b8b99672128e56c93d07b28d Signed-off-by: Kyuho Jo --- CMakeLists.txt | 85 ++++ LICENSE | 204 +++++++++ include/define.h | 170 ++++++++ include/utils.h | 46 +++ include/view.h | 30 ++ org.tizen.myfiles.xml.in | 14 + packaging/org.tizen.myfiles.manifest | 5 + packaging/org.tizen.myfiles.spec | 57 +++ res/CMakeLists.txt | 17 + res/images/U01_subdepth_folder_arrow.png | Bin 0 -> 1154 bytes res/images/gengrid/00_check_activate.png | Bin 0 -> 1380 bytes res/images/gengrid/00_check_bg.png | Bin 0 -> 2886 bytes res/images/gengrid/00_check_bg_ef.png | Bin 0 -> 2894 bytes res/images/gengrid/00_check_bg_line.png | Bin 0 -> 2896 bytes res/images/gengrid/00_check_focus.png | Bin 0 -> 1082 bytes res/images/gengrid/00_focus_01.#.png | Bin 0 -> 2864 bytes res/images/gengrid/my_files_sd_card.png | Bin 0 -> 1196 bytes res/images/gengrid/myfile_icon_video_play.png | Bin 0 -> 3814 bytes res/images/icon/00_nocontents_devices.png | Bin 0 -> 20563 bytes res/images/icon/00_nocontents_multimedia.png | Bin 0 -> 44733 bytes res/images/icon/00_nocontents_picture.png | Bin 0 -> 20051 bytes res/images/icon/00_nocontents_text.png | Bin 0 -> 24308 bytes res/images/icon/T01_2_button_expand_cancel.png | Bin 0 -> 3759 bytes res/images/icon/my_files_folder_favorite.png | Bin 0 -> 3324 bytes res/images/icon/my_files_sd_card.png | Bin 0 -> 3010 bytes res/images/icon/myfile_controlbar_cion_home.png | Bin 0 -> 1207 bytes .../icon/myfile_controlbar_cion_up_folder.png | Bin 0 -> 1191 bytes res/images/icon/myfile_icon_amr.png | Bin 0 -> 2714 bytes res/images/icon/myfile_icon_default_albumart.jpg | Bin 0 -> 154239 bytes res/images/icon/myfile_icon_email.png | Bin 0 -> 2200 bytes res/images/icon/myfile_icon_etc.png | Bin 0 -> 1505 bytes res/images/icon/myfile_icon_excel.png | Bin 0 -> 4225 bytes res/images/icon/myfile_icon_folder.png | Bin 0 -> 3208 bytes res/images/icon/myfile_icon_folder_sdcard.png | Bin 0 -> 1877 bytes res/images/icon/myfile_icon_html.png | Bin 0 -> 3062 bytes res/images/icon/myfile_icon_hwp.png | Bin 0 -> 2699 bytes res/images/icon/myfile_icon_images.png | Bin 0 -> 3954 bytes res/images/icon/myfile_icon_java.png | Bin 0 -> 3005 bytes res/images/icon/myfile_icon_music.png | Bin 0 -> 4031 bytes res/images/icon/myfile_icon_pdf.png | Bin 0 -> 4398 bytes res/images/icon/myfile_icon_ppt.png | Bin 0 -> 3784 bytes .../icon/myfile_icon_root_folder_device_memory.png | Bin 0 -> 2913 bytes res/images/icon/myfile_icon_rss.png | Bin 0 -> 2870 bytes res/images/icon/myfile_icon_select_all.png | Bin 0 -> 3394 bytes res/images/icon/myfile_icon_snb.png | Bin 0 -> 2270 bytes res/images/icon/myfile_icon_soft_back.png | Bin 0 -> 2128 bytes res/images/icon/myfile_icon_soft_search_back.png | Bin 0 -> 1625 bytes res/images/icon/myfile_icon_story.png | Bin 0 -> 3009 bytes res/images/icon/myfile_icon_svg.png | Bin 0 -> 2861 bytes res/images/icon/myfile_icon_swf.png | Bin 0 -> 2260 bytes res/images/icon/myfile_icon_task.png | Bin 0 -> 2169 bytes res/images/icon/myfile_icon_text.png | Bin 0 -> 1780 bytes res/images/icon/myfile_icon_tpk.png | Bin 0 -> 3363 bytes res/images/icon/myfile_icon_vText.png | Bin 0 -> 2050 bytes res/images/icon/myfile_icon_vcalender.png | Bin 0 -> 3689 bytes res/images/icon/myfile_icon_vcard.png | Bin 0 -> 3998 bytes res/images/icon/myfile_icon_video.png | Bin 0 -> 3778 bytes res/images/icon/myfile_icon_video_play.png | Bin 0 -> 1963 bytes res/images/icon/myfile_icon_word.png | Bin 0 -> 2666 bytes res/images/icon/myfile_icon_zip.png | Bin 0 -> 1778 bytes res/images/icon/myfile_search_category_all.png | Bin 0 -> 1051 bytes res/images/icon/myfile_search_category_doc.png | Bin 0 -> 1009 bytes res/images/icon/myfile_search_category_img.png | Bin 0 -> 1168 bytes res/images/icon/myfile_search_category_snd.png | Bin 0 -> 1109 bytes res/images/icon/myfile_search_category_video.png | Bin 0 -> 1206 bytes res/images/icon/myfile_title_icon_search.png | Bin 0 -> 1361 bytes res/images/icon_button_more.png | Bin 0 -> 1251 bytes res/images/icon_button_more_rotation.png | Bin 0 -> 1316 bytes res/images/my_files_sd_card.png | Bin 0 -> 1196 bytes res/myfiles-theme.edc | 21 + res/myfiles.edc | 21 + src/main.c | 148 +++++++ src/utils.c | 455 +++++++++++++++++++++ src/view/view_base.c | 278 +++++++++++++ 74 files changed, 1551 insertions(+) create mode 100644 CMakeLists.txt create mode 100644 LICENSE create mode 100644 include/define.h create mode 100644 include/utils.h create mode 100644 include/view.h create mode 100644 org.tizen.myfiles.xml.in create mode 100644 packaging/org.tizen.myfiles.manifest create mode 100644 packaging/org.tizen.myfiles.spec create mode 100644 res/CMakeLists.txt create mode 100644 res/images/U01_subdepth_folder_arrow.png create mode 100644 res/images/gengrid/00_check_activate.png create mode 100644 res/images/gengrid/00_check_bg.png create mode 100644 res/images/gengrid/00_check_bg_ef.png create mode 100644 res/images/gengrid/00_check_bg_line.png create mode 100644 res/images/gengrid/00_check_focus.png create mode 100644 res/images/gengrid/00_focus_01.#.png create mode 100644 res/images/gengrid/my_files_sd_card.png create mode 100644 res/images/gengrid/myfile_icon_video_play.png create mode 100644 res/images/icon/00_nocontents_devices.png create mode 100644 res/images/icon/00_nocontents_multimedia.png create mode 100644 res/images/icon/00_nocontents_picture.png create mode 100644 res/images/icon/00_nocontents_text.png create mode 100644 res/images/icon/T01_2_button_expand_cancel.png create mode 100644 res/images/icon/my_files_folder_favorite.png create mode 100644 res/images/icon/my_files_sd_card.png create mode 100644 res/images/icon/myfile_controlbar_cion_home.png create mode 100644 res/images/icon/myfile_controlbar_cion_up_folder.png create mode 100644 res/images/icon/myfile_icon_amr.png create mode 100644 res/images/icon/myfile_icon_default_albumart.jpg create mode 100644 res/images/icon/myfile_icon_email.png create mode 100644 res/images/icon/myfile_icon_etc.png create mode 100644 res/images/icon/myfile_icon_excel.png create mode 100644 res/images/icon/myfile_icon_folder.png create mode 100644 res/images/icon/myfile_icon_folder_sdcard.png create mode 100644 res/images/icon/myfile_icon_html.png create mode 100644 res/images/icon/myfile_icon_hwp.png create mode 100644 res/images/icon/myfile_icon_images.png create mode 100644 res/images/icon/myfile_icon_java.png create mode 100644 res/images/icon/myfile_icon_music.png create mode 100644 res/images/icon/myfile_icon_pdf.png create mode 100644 res/images/icon/myfile_icon_ppt.png create mode 100644 res/images/icon/myfile_icon_root_folder_device_memory.png create mode 100644 res/images/icon/myfile_icon_rss.png create mode 100644 res/images/icon/myfile_icon_select_all.png create mode 100644 res/images/icon/myfile_icon_snb.png create mode 100644 res/images/icon/myfile_icon_soft_back.png create mode 100644 res/images/icon/myfile_icon_soft_search_back.png create mode 100644 res/images/icon/myfile_icon_story.png create mode 100644 res/images/icon/myfile_icon_svg.png create mode 100644 res/images/icon/myfile_icon_swf.png create mode 100644 res/images/icon/myfile_icon_task.png create mode 100644 res/images/icon/myfile_icon_text.png create mode 100644 res/images/icon/myfile_icon_tpk.png create mode 100644 res/images/icon/myfile_icon_vText.png create mode 100644 res/images/icon/myfile_icon_vcalender.png create mode 100644 res/images/icon/myfile_icon_vcard.png create mode 100644 res/images/icon/myfile_icon_video.png create mode 100644 res/images/icon/myfile_icon_video_play.png create mode 100644 res/images/icon/myfile_icon_word.png create mode 100644 res/images/icon/myfile_icon_zip.png create mode 100644 res/images/icon/myfile_search_category_all.png create mode 100644 res/images/icon/myfile_search_category_doc.png create mode 100644 res/images/icon/myfile_search_category_img.png create mode 100644 res/images/icon/myfile_search_category_snd.png create mode 100644 res/images/icon/myfile_search_category_video.png create mode 100644 res/images/icon/myfile_title_icon_search.png create mode 100644 res/images/icon_button_more.png create mode 100644 res/images/icon_button_more_rotation.png create mode 100644 res/images/my_files_sd_card.png create mode 100644 res/myfiles-theme.edc create mode 100644 res/myfiles.edc create mode 100644 src/main.c create mode 100644 src/utils.c create mode 100644 src/view/view_base.c diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100644 index 0000000..e6c92ed --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,85 @@ +# Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved +# +# Licensed under the Apache License, Version 2.0 (the "License"); +# you may not use this file except in compliance with the License. +# You may obtain a copy of the License at +# +# http://www.apache.org/licenses/LICENSE-2.0 +# +# Unless required by applicable law or agreed to in writing, software +# distributed under the License is distributed on an "AS IS" BASIS, +# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +# See the License for the specific language governing permissions and +# limitations under the License. +# + +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT("myfiles" C) + +# Checks for all given modules +INCLUDE(FindPkgConfig) +pkg_check_modules(PKGS REQUIRED + elementary + capi-appfw-application + app-utils + pkgmgr-info + capi-appfw-package-manager + ) + +IF(NOT DEFINED PACKAGE_NAME) + SET(PACKAGE_NAME "org.tizen.${PROJECT_NAME}") +ENDIF(NOT DEFINED PACKAGE_NAME) + +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) + +IF(NOT DEFINED BINDIR) + SET(BINDIR "${PREFIX}/bin") +ENDIF(NOT DEFINED BINDIR) +IF(NOT DEFINED RESDIR) + SET(RESDIR "${PREFIX}/res") +ENDIF(NOT DEFINED RESDIR) +IF(NOT DEFINED EDJEDIR) + SET(EDJEDIR "${PREFIX}/res/edje") +ENDIF(NOT DEFINED EDJEDIR) +IF(NOT DEFINED IMGDIR) + SET(IMGDIR "${PREFIX}/res/images") +ENDIF(NOT DEFINED IMGDIR) +IF(NOT DEFINED PACKAGEDIR) + SET(PACKAGEDIR "${TZ_SYS_RO_SHARE}/packages") +ENDIF(NOT DEFINED PACKAGEDIR) + +SET(SRCS + src/main.c + src/utils.c + src/view/view_base.c + ) + +SET(TARGET_EDJ "${PROJECT_NAME}.edj") +SET(THEME_EDJ "${PROJECT_NAME}-theme.edj") + +ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE_NAME}\"") +ADD_DEFINITIONS("-DEDJEDIR=\"${EDJEDIR}\"") +ADD_DEFINITIONS("-DEDJEFILE=\"${EDJEDIR}/${TARGET_EDJ}\"") +ADD_DEFINITIONS("-DTHEMEFILE=\"${EDJEDIR}/${THEME_EDJ}\"") +ADD_DEFINITIONS("-DIMGDIR=\"${IMGDIR}\"") + +FOREACH(flag ${PKGS_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror") + +INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) + +ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) + +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${PKGS_LDFLAGS}) + +CONFIGURE_FILE(${PACKAGE_NAME}.xml.in ${PACKAGE_NAME}.xml) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) +INSTALL(FILES ${PACKAGE_NAME}.xml DESTINATION ${PACKAGEDIR}) +INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/res/images/ DESTINATION + ${IMGDIR}) + +ADD_SUBDIRECTORY(res) diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..d45e772 --- /dev/null +++ b/LICENSE @@ -0,0 +1,204 @@ +Copyright (c) 2000 - 2016 Samsung Electronics Co., Ltd. All rights reserved. + + Apache License + Version 2.0, January 2004 + http://www.apache.org/licenses/ + + TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + + 1. Definitions. + + "License" shall mean the terms and conditions for use, reproduction, + and distribution as defined by Sections 1 through 9 of this document. + + "Licensor" shall mean the copyright owner or entity authorized by + the copyright owner that is granting the License. + + "Legal Entity" shall mean the union of the acting entity and all + other entities that control, are controlled by, or are under common + control with that entity. For the purposes of this definition, + "control" means (i) the power, direct or indirect, to cause the + direction or management of such entity, whether by contract or + otherwise, or (ii) ownership of fifty percent (50%) or more of the + outstanding shares, or (iii) beneficial ownership of such entity. + + "You" (or "Your") shall mean an individual or Legal Entity + exercising permissions granted by this License. + + "Source" form shall mean the preferred form for making modifications, + including but not limited to software source code, documentation + source, and configuration files. + + "Object" form shall mean any form resulting from mechanical + transformation or translation of a Source form, including but + not limited to compiled object code, generated documentation, + and conversions to other media types. + + "Work" shall mean the work of authorship, whether in Source or + Object form, made available under the License, as indicated by a + copyright notice that is included in or attached to the work + (an example is provided in the Appendix below). + + "Derivative Works" shall mean any work, whether in Source or Object + form, that is based on (or derived from) the Work and for which the + editorial revisions, annotations, elaborations, or other modifications + represent, as a whole, an original work of authorship. For the purposes + of this License, Derivative Works shall not include works that remain + separable from, or merely link (or bind by name) to the interfaces of, + the Work and Derivative Works thereof. + + "Contribution" shall mean any work of authorship, including + the original version of the Work and any modifications or additions + to that Work or Derivative Works thereof, that is intentionally + submitted to Licensor for inclusion in the Work by the copyright owner + or by an individual or Legal Entity authorized to submit on behalf of + the copyright owner. For the purposes of this definition, "submitted" + means any form of electronic, verbal, or written communication sent + to the Licensor or its representatives, including but not limited to + communication on electronic mailing lists, source code control systems, + and issue tracking systems that are managed by, or on behalf of, the + Licensor for the purpose of discussing and improving the Work, but + excluding communication that is conspicuously marked or otherwise + designated in writing by the copyright owner as "Not a Contribution." + + "Contributor" shall mean Licensor and any individual or Legal Entity + on behalf of whom a Contribution has been received by Licensor and + subsequently incorporated within the Work. + + 2. Grant of Copyright License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + copyright license to reproduce, prepare Derivative Works of, + publicly display, publicly perform, sublicense, and distribute the + Work and such Derivative Works in Source or Object form. + + 3. Grant of Patent License. Subject to the terms and conditions of + this License, each Contributor hereby grants to You a perpetual, + worldwide, non-exclusive, no-charge, royalty-free, irrevocable + (except as stated in this section) patent license to make, have made, + use, offer to sell, sell, import, and otherwise transfer the Work, + where such license applies only to those patent claims licensable + by such Contributor that are necessarily infringed by their + Contribution(s) alone or by combination of their Contribution(s) + with the Work to which such Contribution(s) was submitted. If You + institute patent litigation against any entity (including a + cross-claim or counterclaim in a lawsuit) alleging that the Work + or a Contribution incorporated within the Work constitutes direct + or contributory patent infringement, then any patent licenses + granted to You under this License for that Work shall terminate + as of the date such litigation is filed. + + 4. Redistribution. You may reproduce and distribute copies of the + Work or Derivative Works thereof in any medium, with or without + modifications, and in Source or Object form, provided that You + meet the following conditions: + + (a) You must give any other recipients of the Work or + Derivative Works a copy of this License; and + + (b) You must cause any modified files to carry prominent notices + stating that You changed the files; and + + (c) You must retain, in the Source form of any Derivative Works + that You distribute, all copyright, patent, trademark, and + attribution notices from the Source form of the Work, + excluding those notices that do not pertain to any part of + the Derivative Works; and + + (d) If the Work includes a "NOTICE" text file as part of its + distribution, then any Derivative Works that You distribute must + include a readable copy of the attribution notices contained + within such NOTICE file, excluding those notices that do not + pertain to any part of the Derivative Works, in at least one + of the following places: within a NOTICE text file distributed + as part of the Derivative Works; within the Source form or + documentation, if provided along with the Derivative Works; or, + within a display generated by the Derivative Works, if and + wherever such third-party notices normally appear. The contents + of the NOTICE file are for informational purposes only and + do not modify the License. You may add Your own attribution + notices within Derivative Works that You distribute, alongside + or as an addendum to the NOTICE text from the Work, provided + that such additional attribution notices cannot be construed + as modifying the License. + + You may add Your own copyright statement to Your modifications and + may provide additional or different license terms and conditions + for use, reproduction, or distribution of Your modifications, or + for any such Derivative Works as a whole, provided Your use, + reproduction, and distribution of the Work otherwise complies with + the conditions stated in this License. + + 5. Submission of Contributions. Unless You explicitly state otherwise, + any Contribution intentionally submitted for inclusion in the Work + by You to the Licensor shall be under the terms and conditions of + this License, without any additional terms or conditions. + Notwithstanding the above, nothing herein shall supersede or modify + the terms of any separate license agreement you may have executed + with Licensor regarding such Contributions. + + 6. Trademarks. This License does not grant permission to use the trade + names, trademarks, service marks, or product names of the Licensor, + except as required for reasonable and customary use in describing the + origin of the Work and reproducing the content of the NOTICE file. + + 7. Disclaimer of Warranty. Unless required by applicable law or + agreed to in writing, Licensor provides the Work (and each + Contributor provides its Contributions) on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or + implied, including, without limitation, any warranties or conditions + of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A + PARTICULAR PURPOSE. You are solely responsible for determining the + appropriateness of using or redistributing the Work and assume any + risks associated with Your exercise of permissions under this License. + + 8. Limitation of Liability. In no event and under no legal theory, + whether in tort (including negligence), contract, or otherwise, + unless required by applicable law (such as deliberate and grossly + negligent acts) or agreed to in writing, shall any Contributor be + liable to You for damages, including any direct, indirect, special, + incidental, or consequential damages of any character arising as a + result of this License or out of the use or inability to use the + Work (including but not limited to damages for loss of goodwill, + work stoppage, computer failure or malfunction, or any and all + other commercial damages or losses), even if such Contributor + has been advised of the possibility of such damages. + + 9. Accepting Warranty or Additional Liability. While redistributing + the Work or Derivative Works thereof, You may choose to offer, + and charge a fee for, acceptance of support, warranty, indemnity, + or other liability obligations and/or rights consistent with this + License. However, in accepting such obligations, You may act only + on Your own behalf and on Your sole responsibility, not on behalf + of any other Contributor, and only if You agree to indemnify, + defend, and hold each Contributor harmless for any liability + incurred by, or claims asserted against, such Contributor by reason + of your accepting any such warranty or additional liability. + + END OF TERMS AND CONDITIONS + + APPENDIX: How to apply the Apache License to your work. + + To apply the Apache License to your work, attach the following + boilerplate notice, with the fields enclosed by brackets "[]" + replaced with your own identifying information. (Don't include + the brackets!) The text should be enclosed in the appropriate + comment syntax for the file format. We also recommend that a + file or class name and description of purpose be included on the + same "printed page" as the copyright notice for easier + identification within third-party archives. + + Copyright [yyyy] [name of copyright owner] + + Licensed under the Apache License, Version 2.0 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://www.apache.org/licenses/LICENSE-2.0 + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/include/define.h b/include/define.h new file mode 100644 index 0000000..5709637 --- /dev/null +++ b/include/define.h @@ -0,0 +1,170 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __AIR_MYFILES_DEFINE_H__ +#define __AIR_MYFILES_DEFINE_H__ + +/* View ID */ +#define VIEW_BASE "VIEW_BASE" +#define VIEW_ACTION_MENU "VIEW_ACTION_MENU" + +/* Layout ID */ +#define LAYOUT_MYAPPS "LAYOUT_MYAPPS" + +/* Group for EDC */ +#define GRP_VIEW_BASE "grp.view.base" +#define GRP_VIEW_ACTION_MENU "grp.view.action.menu" +#define GRP_ACTION_MENU_CONTENTS "grp.action.menu.contents" +#define GRP_ACTION_MENU_NO_FAVORITE "grp.action.menu.no.favorite" + +/* Part for EDC */ +#define PART_TOP_TITLE "part.top.title" +#define PART_MENU "part.menu" +#define PART_SORT "part.sort" +#define PART_GENGRID "part.gengrid" +#define PART_APP_COUNT "part.app.count" +#define PART_CONTENTS_TEXT "part.contents.text" +#define PART_THUMB_BG "part.thumb.bg" +#define PART_THUMB_ICON "part.thumb.icon" +#define PART_TEXT_BG "part.text.bg" +#define PART_THUMB_TEXT "part.thumb.text" +#define PART_THUMB_TEXT_BROWSER "part.thumb.text.browser" +#define PART_TOP_BTN "part.top.button" +#define PART_FAVORITE "part.favorite" +#define PART_NO_FAVORITE "part.no.favorite" +#define PART_BUTTON1 "button1" +#define PART_BUTTON2 "button2" +#define PART_POPUP_TITLE "title,text" +#define PART_ACTION_MENU "part.action.menu" + +/* State for EDC */ +#define STATE_BROWSER "is_browser" +#define STATE_NOT_BROWSER "not_browser" + +/* Style */ +#define STYLE_MENU_BTN "style.menu.button" +#define STYLE_SORT_BTN "style.sort.button" +#define STYLE_OPTION_BTN "style.option.button" +#define STYLE_CTXPOPUP "style.ctxpopup" +#define STYLE_MYAPP "style.myapp" +#define STYLE_FAVORITE "style.favorite" +#define STYLE_LIVETV_BTN "style.livetv.button" +#define STYLE_MORE_BTN "style.more.button" +#define STYLE_ACTION_MENU_FAV_BTN "style.action.menu.favorite.button" +#define STYLE_ACTION_MENU_UNINSTALL_BTN "style.action.menu.uninstall.button" +#define STYLE_TOAST "style.toast" + +/* Signal */ +#define SIG_FOCUSED "focused" +#define SIG_UNFOCUSED "unfocused" +#define SIG_SELECTED "selected" +#define SIG_UNSELECTED "unselected" +#define SIG_SOURCE_EDC "edc" +#define SIG_FAVORITE "favorite" +#define SIG_UNFAVORITE "unfavorite" +#define SIG_VISIBLE "visible" +#define SIG_INVISIBLE "invisible" +#define SIG_DISABLE "elm,state,disabled" +#define SIG_TOGGLE "toggle" +#define SIG_TIMEOUT "timeout" +#define SIG_SHOW "show" +#define SIG_HIDE "hide" +#define SIG_HIDE_DONE "hide.done" + +/* Signal Source */ +#define SRC_MYAPPS "source.myapps" +#define SRC_MENU_BTN "source.menu.btn" +#define SRC_SORT_BTN "source.sort.btn" +#define SRC_LIVETV_BTN "source.livetv.btn" +#define SRC_ACTION_BTN "source.action.btn" +#define SRC_FAVORITE_ICON "source.favorite.icon" + +/* Font */ +#define FONT_TIZENSANS_REGULAR "BreezeSans" +#define FONT_TIZENSANS_LIGHT "BreezeSans:style=Light" + +/* String */ +#define STR_APPS "Apps" +#define STR_MYAPPS "My Apps" +#define STR_APPSTORE "App Store" +#define STR_RECENT "Recent" +#define STR_A_TO_Z "A-Z" +#define STR_Z_TO_A "Z-A" +#define STR_NULL "(NULL)" +#define STR_NO_CONTENTS "No Contents" +#define STR_BROWSER "Web Browser" +#define STR_NOT_SUPPORTED "Not Supported" +#define STR_LIVETV "Live TV" +#define STR_FAVORITE "Favorite" +#define STR_UNINSTALL "Uninstall" +#define STR_NO_FAVORITE "No favorite contents" +#define STR_ADD_FAVORITE "Added to your favorite." +#define STR_REMOVE_FAVORITE "Removed from your favorite." +#define STR_WGT "wgt" +#define STR_TPK "tpk" +#define STR_OK "Ok" +#define STR_CANCEL "Cancel" +#define STR_MORE "More" + +/* Count */ +#define MENU_COUNT 1 +#define SORT_COUNT 3 +#define ACTION_MENU_COUNT 2 + +/* Size */ +#define SIZE_MYAPPS_GRID_WIDTH (212 + 26) +#define SIZE_MYAPPS_GRID_HEIGHT (294 + 26) +#define SIZE_FAVORITE_GRID_WIDTH (210 + 20) +#define SIZE_FAVORITE_GRID_HEIGHT (292 + 20) +#define SIZE_STR 1024 +#define SIZE_MENU_BOX_PAD_H (40 + 40) +#define SIZE_MENU_BOX_PAD_V 0 +#define SIZE_ICON_MAX 100 +#define SIZE_ACTION_TABLE_BORDER 0 +#define SIZE_COL_MAX 4 +#define SIZE_TOAST_TIMEOUT 5.0 +#define SIZE_FAVORITE_COL_MAX 2 +#define SIZE_SCROLLER_STEP 312 + +/* Image */ +#define DEFAULT_APP_ICON_PNG IMGDIR"/ico_default.png" +#define FAVORITE_ICON_PNG "ic_thumbnail_favorite_01.png" +#define BROWSER_ICON_PNG IMGDIR"/ic_apps_web.png" +#define ARROW_ICON_UP_PNG "btn_option_arrow_nor.png" +#define ARROW_ICON_UP_FOC_PNG "btn_option_arrow_foc_up.png" +#define ARROW_ICON_SEL_PNG "btn_option_arrow_sel.png" +#define ARROW_ICON_DISABLE_PNG "btn_option_arrow_dis.png" +#define ACTION_FAV_NOR_PNG "btn_menu_favorite_nor.png" +#define ACTION_FAV_FOC_PNG "btn_menu_favorite_foc.png" +#define ACTION_FAV_SEL_PNG "btn_menu_favorite_sel.png" +#define ACTION_FAV_DIS_PNG "btn_menu_favorite_dis.png" +#define ACTION_UNFAV_NOR_PNG "btn_menu_remote_favorite_nor.png" +#define ACTION_UNFAV_FOC_PNG "btn_menu_remote_favorite_foc.png" +#define ACTION_UNINSTALL_NOR_PNG "btn_menu_del_nor.png" +#define ACTION_UNINSTALL_FOC_PNG "btn_menu_del_foc.png" +#define ACTION_UNINSTALL_SEL_PNG "btn_menu_del_sel.png" +#define ACTION_UNINSTALL_DIS_PNG "btn_menu_del_dis.png" + +/* Transition */ +#define TRANSITION_FOCUS DECELERATE 0.20 +#define TRANSITION_CLICK DECELERATE 0 +#define TRANSITION_MENU_SHOW SIN 0.45 +#define TRANSITION_MENU_HIDE DECEL 0.3 + +/* Color */ +#define COLOR_ITEM_FOCUS 0 119 246 255 + +#endif /* __AIR_MYFILES_DEFINE_H__ */ diff --git a/include/utils.h b/include/utils.h new file mode 100644 index 0000000..84c1cde --- /dev/null +++ b/include/utils.h @@ -0,0 +1,46 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __AIR_MYFILES_UTILS_H__ +#define __AIR_MYFILES_UTILS_H__ + +#include + +Evas_Object *utils_add_window(const char *name); +Evas_Object *utils_add_layout(Evas_Object *parent, const char *group, + Eina_Bool win_resize); +Evas_Object *utils_add_box(Evas_Object *parent, const char *part, + Eina_Bool horizontal, Evas_Coord padding_h, + Evas_Coord padding_v); +Evas_Object *utils_add_button(Evas_Object *parent, const char *part, + const char *text, const char *style); +Evas_Object *utils_add_gengrid(Evas_Object *parent, Eina_Bool horizontal, + int width, int height); +Evas_Object *utils_add_table(Evas_Object *table, const char *part, + int padding_x, int padding_y); +Evas_Object *utils_add_notify(Evas_Object *parent, const char *text, + const char *noti_style, const char *label_style, + int timeout); +Evas_Object *utils_add_popup(Evas_Object *parent, const char *style, + const char *popup_title, const char *popup_text); +Evas_Object *utils_add_ctxpopup(Evas_Object *parent, int opt_size, int *opt_id, + const char **opt_text, input_handler *opt_handler, void *data); +Evas_Object *utils_add_scroller(Evas_Object *parent, const char *part, + Evas_Object *content); +bool utils_launch_app(const char *appid, const char *key, const char *value); +bool utils_uninstall_app(const char *pkgid, const char *pkgtype); + +#endif /* __AIR_MYFILES_UTILS_H__ */ diff --git a/include/view.h b/include/view.h new file mode 100644 index 0000000..3c41543 --- /dev/null +++ b/include/view.h @@ -0,0 +1,30 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __AIR_MYFILES_VIEW_H__ +#define __AIR_MYFILES_VIEW_H__ + +view_class *view_base_get_vclass(void); +view_class *view_action_menu_get_vclass(void); + +enum update_type { + UPDATE_ID = 0, + UPDATE_FAVORITE, + UPDATE_GRID, + UPDATE_SHOW_TOAST, +}; + +#endif /* __AIR_MYFILES_VIEW_H__ */ diff --git a/org.tizen.myfiles.xml.in b/org.tizen.myfiles.xml.in new file mode 100644 index 0000000..50651d3 --- /dev/null +++ b/org.tizen.myfiles.xml.in @@ -0,0 +1,14 @@ + + + + Kyuho Jo + Hyerim Kim + My files application + + + @DESKTOP_ICON@ + + + http://tizen.org/privilege/appmanager.launch + + diff --git a/packaging/org.tizen.myfiles.manifest b/packaging/org.tizen.myfiles.manifest new file mode 100644 index 0000000..97e8c31 --- /dev/null +++ b/packaging/org.tizen.myfiles.manifest @@ -0,0 +1,5 @@ + + + + + diff --git a/packaging/org.tizen.myfiles.spec b/packaging/org.tizen.myfiles.spec new file mode 100644 index 0000000..1c9f699 --- /dev/null +++ b/packaging/org.tizen.myfiles.spec @@ -0,0 +1,57 @@ +Name: org.tizen.myfiles +Summary: Myfiles application for Tizen TV based on AirFlex UX +Version: 0.1 +Release: 1 +Group: Applications/Core Applications +License: Apache-2.0 +Source0: %{name}-%{version}.tar.gz +Source1: %{name}.manifest + +BuildRequires: cmake +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(app-utils) +BuildRequires: pkgconfig(pkgmgr-info) +BuildRequires: pkgconfig(capi-appfw-package-manager) +BuildRequires: pkgconfig(libtzplatform-config) + +%define _appdir %{TZ_SYS_RO_APP}/%{name} +%define _bindir %{_appdir}/bin +%define _resdir %{_appdir}/res +%define _edjedir %{_resdir}/edje +%define _imgdir %{_resdir}/images +%define _pkgdir %{_datadir}/packages + +%description +myfiles is an application for managing files in local storage or removable storage + +%prep +%setup -q +cp %{SOURCE1} . + +%build +cmake \ + -DCMAKE_INSTALL_PREFIX=%{_appdir} \ + -DPACKAGE_NAME=%{name} \ + -DVERSION=%{version} \ + -DBINDIR=%{_bindir} \ + -DRESDIR=%{_resdir} \ + -DEDJEDIR=%{_edjedir} \ + -DIMGDIR=%{_imgdir} \ + -DPACKAGEDIR=%{_pkgdir} + +make %{?jobs:-j%jobs} + +# Copies the executables to appropriate location +%install +%make_install + +%clean +rm -rf %{buildroot} + +%files +%manifest %{name}.manifest +%defattr(-,root,root,-) +%{_bindir}/* +%{_resdir}/* +%{_pkgdir}/%{name}.xml diff --git a/res/CMakeLists.txt b/res/CMakeLists.txt new file mode 100644 index 0000000..40c42fa --- /dev/null +++ b/res/CMakeLists.txt @@ -0,0 +1,17 @@ +ADD_CUSTOM_TARGET(${TARGET_EDJ} + COMMAND edje_cc -id images + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.edc + ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_EDJ} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} ${TARGET_EDJ}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${TARGET_EDJ} DESTINATION ${EDJEDIR}) + +ADD_CUSTOM_TARGET(${THEME_EDJ} + COMMAND edje_cc -id images -sd sounds + ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}-theme.edc + ${CMAKE_CURRENT_BINARY_DIR}/${THEME_EDJ} + DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/${PROJECT_NAME}-theme.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} ${THEME_EDJ}) +INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${THEME_EDJ} DESTINATION ${EDJEDIR}) diff --git a/res/images/U01_subdepth_folder_arrow.png b/res/images/U01_subdepth_folder_arrow.png new file mode 100644 index 0000000000000000000000000000000000000000..50072fc4c0025a31009e3ab324f21468b99485d9 GIT binary patch literal 1154 zcmbVMO=#Oz99Jt?yR2!GbvrDS@lfa?rIz$;S&l^9SeER@5U0U0B(P8-OV5dxNKcVo zW+k*E$sr^=4MuOJ&|V7tq92q(ODP3kO1l+0HcHqjhp}7PWtWX*Pf48a5HgrRdSAca z|Ks=mf2|DFq^W932B!Y*&d7(Q}+%4V3p{>V42X+%H`O*&qdd-voS2OK-g zji$?D+1JsOGq4b#k%ghEwJ>cdHrIa!^hGK);38sz$er;*HOg{Zc2zo$w*?MtLCAEL z+YV~1JPdRkAdu$8geA%l$Py1FQIV9>ASpsofJs5jB%r9KGpY!|&cjh}fn8TCMsdd% zU1hl`LVQ&a8jS|uNbxwB6riFgf|wMN$pl3t!g-IFQNjzmTNVryT7lye2YVp4Xx8u? z$#OK(?G#+UT;4V8g*!q~$%M%C1;~qn>&AI)p+izZ@59&=9aiUkBvep{=K_n~N4>j6 zrrPcACX9;R?vHk83+q0EdvXNBI%;6^@>ITwzwrPB&KJfmS2bZ-QgPha#cM* zCc!}!~!U&Yeeq7@iVcT1lxcAE!zv||F=8aE$)KT6x`e#y|P(R%H#&CPzcXK`)G z5O0{PUruPhUikBm+w8!_LmNeVmgo7)@(FgM0_5k2?G85Bb>>?A;Jwc~zF>dv&&!Ls zPdi?+vq$e;`TC>g$=o>GJk?xzlLTizY(CB18k)JgoPX868m|5H?cwJ2rKsnJD0dKi zr!T$jTz%bn|G+0J#}}jIxq7@SFHE a(=oxEe|NG6GT$7J{|cqTkZ~tJvHTApeQ!zt literal 0 HcmV?d00001 diff --git a/res/images/gengrid/00_check_activate.png b/res/images/gengrid/00_check_activate.png new file mode 100644 index 0000000000000000000000000000000000000000..ca4c15e23fa8bac2921b3d4747f5e9887386918b GIT binary patch literal 1380 zcmbVMeN5bB7%z}4h+#mM#camd6hk2KuI+vFuFc)p^?J9RdK?}X4>L1X?s`W9{h%#e z!7M?*kRd}2vV?59Eb7LVh|w9DQvpZfVxmsT%-ke{3p$et157}i)A<%S{0Qz3oA&*D ze!u5=e(&@4P-VrQ{Jfoc5Cr81_A+76mm6R17SKj(3a3D~L-SQ@RZ>Dru?h!y;!-UK z2Lv|Bg*i6f()bzYf}orPAF0-=gHKQ~Nieg9jae6DfQBGfxh}J@dQO9Dxg;;Tk@*it z5txs=k*Gb01!XT+$M0=bxT@BQNUXI!M#hoyU9d~10D-`1EUXI+qDtv*WR;f!V`CXb z;8hc?-i@pURUNE^y^_MgcC*zK!*CoX2s3W869oP!Y{75~ih-9f;Wo-nP!HTJ#=q_h%-l$wrpXkFrcx<$%4(LBB#M(HX>eF9CSYMwTSSf3O`=+yVPH5lrtq@H zOCoGAvb9o^=0-rIYbgkFFt|Z1s_Q}l$xxk@QQVB7f?(veYOQKv?yoR5wN@i7GKYpa zRccaV;5-t=88Fc9-i{1I5DgVlcyK6e10%(n1Wwcfj2i(v<~Sdx?6i|1oPOMo(-xl< z$2}I@?r~z6hqU@=f}k@Tn_+33vHA#_p{+PT`m7|0(_Wj6#+_CYBW+{`8xU2E6=Ph+ zFAw~#W4-spQeK5)HA#s`QbVQ!D(fUoQtKoc_Er&aX_Ob^Qc5i|j%O`fhEw=vF78(( z0bbRY;y3YcaS#@dmGJwC|H^v}8~;C=p&%I4D2~4sOJ)gFpfTJieK6U$Je&w_i~_F4 zzOCI}2+DdTz<471wb`q4`R!QYmILRrikpLTiY_d* zUe1|%eCN#ZiBs=gDd?<$z2D)!8(Bszhk+XqtW8bz1#e*bv=GkABpPP1(`gRA|$iLfj zGyBdbAHVdZ+PCeOm9noRJ5Jn+3_q2a${Q(ZXcPN)54tX0ES`r4t~xquR=$!4JL#oh u#bnlUS=aWZpIjpo+5grJ$oN3dFq8wG`&@qhviba&@!t#hDwrYqK>MHTvhsQW literal 0 HcmV?d00001 diff --git a/res/images/gengrid/00_check_bg.png b/res/images/gengrid/00_check_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..3b901ab65fa5ea80b0b3dc86cc4758c4cbeca77d GIT binary patch literal 2886 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 literal 0 HcmV?d00001 diff --git a/res/images/gengrid/00_check_bg_ef.png b/res/images/gengrid/00_check_bg_ef.png new file mode 100644 index 0000000000000000000000000000000000000000..cb49cdddf80f3fc5307c4f3609c71ffd139afe06 GIT binary patch literal 2894 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 literal 0 HcmV?d00001 diff --git a/res/images/gengrid/my_files_sd_card.png b/res/images/gengrid/my_files_sd_card.png new file mode 100644 index 0000000000000000000000000000000000000000..470b6fe9f907556b1ac96d22e3ae47b69a1bebee GIT binary patch literal 1196 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 GE#^PUOvLv9 literal 0 HcmV?d00001 diff --git a/res/images/icon/00_nocontents_multimedia.png b/res/images/icon/00_nocontents_multimedia.png new file mode 100644 index 0000000000000000000000000000000000000000..d8393ddf489aa93b3b34124408a39b3129b49ca0 GIT binary patch literal 44733 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 N&{j84t5mfO`(J_!LKOf2 literal 0 HcmV?d00001 diff --git a/res/images/icon/my_files_folder_favorite.png b/res/images/icon/my_files_folder_favorite.png new file mode 100644 index 0000000000000000000000000000000000000000..05377739030751cad5de531fe9140cccbe366538 GIT binary patch literal 3324 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 Ef=R!YqW}N^ literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_controlbar_cion_home.png b/res/images/icon/myfile_controlbar_cion_home.png new file mode 100644 index 0000000000000000000000000000000000000000..df0622f911872ac87fe291a09dda0595c7639ea6 GIT binary patch literal 1207 zcmbVMU2NM_6gFKMO-D3o3=jiVSMDgPSp1tfv1v9E+gUP5snUprx47|bW3~1**A7WD zklJcIfV9z$iaqSDl_n%a`@jS$Xj(Mwg%>1vV?r81z=Tw^NWcUyi0d{fJXCwYl70Wa z?|kQ+dye0k7(X2zJT^#CR5+K_3SO19G3GQ>soBu+b6S!nCyZ&CN=oEJPLeX2Xj;_;o=-?ISrd3k zl+%(H)iOOB`*C@Ri%WV`RMW8(&+DSBs;LC0#ih6`r({0bZ$sJ9TD$u0o#jLCx2AsnWoy0t<~n}94QJ8O zjfE}o#3mlb>-7CvXZ~|Mdj0Lzty`h5R(`tEx!?B@b%6To@{KE>+>UMpzml9ju5F~t GOaA~4qL0e} literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_controlbar_cion_up_folder.png b/res/images/icon/myfile_controlbar_cion_up_folder.png new file mode 100644 index 0000000000000000000000000000000000000000..c49cfdef9fecbadd3de6dc43b772925246d328a0 GIT binary patch literal 1191 zcmbVMU1%It6rLtE8vjf|cjn%i-O0|FHM{d?7ToNzS?Cgc*x8x8$&k!X zXD04sv64mz3Mze3A6r^M^g$BnLv0@_S|5B6BMOSX2qIchq|g^ZjCYdV=tJm(12gyU z`_6aHx#!HQwYg`HjZKbG6m_gTtJcW~l6Q23e8XPv9vLPgtr^XGov3RBm?~Lb8-ucA zEaEygthIBW;c1E*?%0iH)T}%wnV!QK35JOspRg%vdM5S_a~VgVjTddVK>u;`77c8x zK%dQ3V8vJPl0DlC@O*EsVfL0y(V}Ob0n@QW3^+J4KyWK9+_d{^}O69# z&8qsq#$jBjqdejeugJL)LK>lPSyd2VR^#)W$jJk4*$pGZHSs{#Cc1qtcVDig1lWkY zpy7Edg9@lEd65?`c|K6)a|{A!ZP)U;VRAkD(W*GGU%-|gcn;XhuVf#huZWt=$y1`1 zS4tXB;?{Ic5jmCPbNM{fc)HKE{!h+W;tZP<$A5}tuth2`nI4orSsXMEc1gzsq%}6b z67G<;`lhUw8u54Szjk+LJ}C}8zIkNiYI=N?5>ii4ch7^rtJJMjJEiOTNF8pcYvAL% zL&Z~7dvvRH;wE+b4fWUE;(Np6+b30UX<`T5n4zxzFm&Vmw=!k@`O?Cp`O80T?i@e8 z^*n$J>DNY6FOJWqPRdAo;KYZmBk)pny)#uSFI2xcetrG7@Uk*lOka6>xOndL=(T&p zZ~bz;_+aYj#@Kjk>k;r~Jht;t?qcoAJNo4M!{4VaKDm9g_wI!+H(q%^9aEovJ<|Lf kpZa~`b*XjxX$pKqU3g5ov-$JOKPJD9vNorFAh$OD0W9Boy#N3J literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_amr.png b/res/images/icon/myfile_icon_amr.png new file mode 100644 index 0000000000000000000000000000000000000000..ddb88311df8c04dc81d7413029bb3773e46b0538 GIT binary patch literal 2714 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 Lds2TO2POUo8*X`2 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_default_albumart.jpg b/res/images/icon/myfile_icon_default_albumart.jpg new file mode 100644 index 0000000000000000000000000000000000000000..8dfea27734e5465e679248f6bc6ce712e5b8cc09 GIT binary patch literal 154239 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

G>|Tex-gtd^Jlb_&;RT^ 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 E0te@XK>z>% literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_etc.png b/res/images/icon/myfile_icon_etc.png new file mode 100644 index 0000000000000000000000000000000000000000..088cf2df1e90c95af811b7239f62b9aaadcfb073 GIT binary patch literal 1505 zcmeAS@N?(olHy`uVBq!ia0vp^ULefD1|(%J94Z7-k|nMYCBgY=CFO}lsSJ)O`AMk? zp1FzXsX?iUDV2pMQ*9U+nA0*tB1$5BeXNr6bM+EIYV;~{3xK*A7;Nk-3KEmEQ%e+* zQqwc@Y?a>c-mj#PnPRIHZt82`Ti~3Uk?B!Ylp0*+7m{3+ootz+WN)WnQ(*-(AUCxn zQK2F?C$HG5!d3}vt`(3C64qBz04piUwpD^SD#ABF!8yMuRl!uxSU1_g&``n5OwZ87 z)XdCKN5ROz&`93^h|F{iO{`4Ktc=VRpg;*|TTx1yRgjAt)Gi>;Rw<*Tq`*pFzr4I$ zuiRKKzbIYb(9+TpWQLKEE>MMTab;dfVufyAu`kBtHuNWFoz#!AFNG#Ad)HBe}%?0@jth%@)C>7xhtg4GcDhpEegHnt0 zON)|$@sXws(+mtd{1$-}0$pR}Uz7=ql*AmD{N&Qy)VvZ;7h5Huj9yA+ij}dclaZ;j zrK_2dtC_2@p`oRTxuu(niG`DenVE}|qXEneYHGxhOTUB)=#mKR*YS0s=DfOY(~| z@(UE4gUu8)!ZY(y^2>`gLD2*8txIZAW?5>ATTyO0Qv}Q!dV+527#NrYJzX3_DsH{GWt)8{K!okV>;T0r&bJl4Ur*uF+NQ8V(uz~o zs%-WD1rL^3O!?Q8#~2&4yF}P)yVLZh;7oRRd$z)&LbJfd%iMLB@?{#%nla-$YiA?3 zBLDL^|GXzWhZ9cxf9S}d;lRihaPRy%qvq33KY59JFTZSmUwtyC7FTdSZ>HI7{t(~G z&vGZvuZ>=QPm7bS*+$Wpm#umA+W5t5)TDaZH1u0a9!~ll7RxT$f4tm%@x|K(7E@wF z6n3p%!0~dz1g%}`<|i4Ndm7EOQCe_5*I^T{*R<4?_utnCn9f~bYv68m+2n1ljhy`A zej|4)^(9=2of#HqC+dZU)~YUHE_wFMP>pZT`zcE;AIY5KFgmYUVw?{lcl-&48EA*c11=zYh;^D+SqOd<;yST$H+3mU-*V3XLx1$2RO&Gfc$J zWpAAYVvBOMik(xQ*a2csJ^eI7M=ZHX;Y{DpntKxqU-NxCb5U+VKZbQs2RJBxj;Lik mwQ!LDD0)DGHS_ct*%%(@^IClEzR(9MbUj`DT-G@yGywo-FAN9( literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_excel.png b/res/images/icon/myfile_icon_excel.png new file mode 100644 index 0000000000000000000000000000000000000000..929d14f4df4f290a6e28b1af1a654ef2bb5b8a58 GIT binary patch literal 4225 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 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_html.png b/res/images/icon/myfile_icon_html.png new file mode 100644 index 0000000000000000000000000000000000000000..d893a80b9ba6164ab3b21d6c76addf02feacfea6 GIT binary patch literal 3062 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 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_hwp.png b/res/images/icon/myfile_icon_hwp.png new file mode 100644 index 0000000000000000000000000000000000000000..a17f6e133e530e43621059829a109517a96ff1e8 GIT binary patch literal 2699 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 M07*qoM6N<$g2BdO6951J literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_java.png b/res/images/icon/myfile_icon_java.png new file mode 100644 index 0000000000000000000000000000000000000000..a083ee6db49ce0dcade01a3813492d3be1da9394 GIT binary patch literal 3005 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 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_music.png b/res/images/icon/myfile_icon_music.png new file mode 100644 index 0000000000000000000000000000000000000000..d4988b08f70279e84990a29cffd74cda4cfb4c83 GIT binary patch literal 4031 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 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_ppt.png b/res/images/icon/myfile_icon_ppt.png new file mode 100644 index 0000000000000000000000000000000000000000..76e3dd4c06dc6b6a15c1778f37695385d2ba4a80 GIT binary patch literal 3784 zcmV;(4ma_MP)KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z000B?Nkl^Ql|6SvX0M$X5)Es1u|@eo>OE?Tcw&_58#{Q9^0%ZIHN=0dWJsUfqO!f; zH;F{*9$B%C9QFJl^>n61WAgWEfb_{MD%;c9E}ELh$h14;!Ur1dC6O zLRmN6mb7XE)blqsCSDg%ODYRgI;xP4s+s~-i>+XjK`l>p3@VIyR5{WBTn#wh!I0&g z4`R|B@Ik#jT(TEkreR1pv$iJ(X$A_!6xuc?|rIl2g`{g?6Oft}5v z@Xt%k{PhR24@QuEFbvanU`jxF7FLy@0HCmf^H{>PU^chHY;Hx<_PxkYKE<>1U2y+? z1WN)&fR+{LX0A1sbhnR&tM#9w{mcNcc{}oshVAOWs;G*KdZY}rbzMLq)(BfKFCbK; z>n*0=zHUQA5F*~DqoDy60a-D~R2$+Qd$4ZrL69mwuBwlte)mD-276!#Km_1`p|Gfk zAT$^P@%KX_P7dmG(}+Cz6ECly!o-!6CBJFhx)YA8|C1|MB&a$;FlBMndBaiyQALPK zfy|wsOY4x9FW_*kH=jopb0~mpyEHJ^!FDe~4N7~tm#qPn+E6n0cItVc4M7 z$RMnMB3@`fZ5f_e(f6l@`XMIAp%j4vvZ#tnI5Q8&Fn!|;EJ;uSmM|65&()5NsiA&M z_n$>n+fXt%YYIImH~$8+FPRpBE3M>4i32F0Kl6oX<=ECyAU-VFe+!wU;VVV3p)0000KLZ*U+IBfRsybQWXdwQbLP>6pAqfylh#{fb6;Z(vMMVS~$e@S=j*ftg6;Uhf59&ghTmgWD0l;*T zI709Y^p6lP1rIRMx#05C~cW=H_Aw*bJ-5DT&Z2n+x)QHX^p z00esgV8|mQcmRZ%02D^@S3L16t`O%c004NIvOKvYIYoh62rY33S640`D9%Y2D-rV&neh&#Q1i z007~1e$oCcFS8neI|hJl{-P!B1ZZ9hpmq0)X0i`JwE&>$+E?>%_LC6RbVIkUx0b+_+BaR3cnT7Zv!AJxW zizFb)h!jyGOOZ85F;a?DAXP{m@;!0_IfqH8(HlgRxt7s3}k3K`kFu>>-2Q$QMFfPW!La{h336o>X zu_CMttHv6zR;&ZNiS=X8v3CR#fknUxHUxJ0uoBa_M6WNWeqIg~6QE69c9o#eyhGvpiOA@W-aonk<7r1(?fC{oI5N*U!4 zfg=2N-7=cNnjjOr{yriy6mMFgG#l znCF=fnQv8CDz++o6_Lscl}eQ+l^ZHARH>?_s@|##Rr6KLRFA1%Q+=*RRWnoLsR`7U zt5vFIcfW3@?wFpwUVxrVZ>QdQz32KIeJ}k~{cZZE^+ya? z2D1z#2HOnI7(B%_ac?{wFUQ;QQA1tBKtrWrm0_3Rgps+?Jfqb{jYbcQX~taRB;#$y zZN{S}1|}gUOHJxc?wV3fxuz+mJ4`!F$IZ;mqRrNsHJd##*D~ju=bP7?-?v~|cv>vB zsJ6IeNwVZxrdjT`yl#bBIa#GxRa#xMMy;K#CDyyGyQdMSxlWT#tDe?p!?5wT$+oGt z8L;Kp2HUQ-ZMJ=3XJQv;x5ci*?vuTfeY$;({XGW_huIFR9a(?@3)XSs8O^N5RyOM=TTmp(3=8^+zpz2r)C z^>JO{deZfso3oq3?Wo(Y?l$ge?uXo;%ru`Vo>?<<(8I_>;8Eq#KMS9gFl*neeosSB zfoHYnBQIkwkyowPu(zdms`p{<7e4kra-ZWq<2*OsGTvEV%s0Td$hXT+!*8Bnh2KMe zBmZRodjHV?r+_5^X9J0WL4jKW`}lf%A-|44I@@LTvf1rHjG(ze6+w@Jt%Bvjts!X0 z?2xS?_ve_-kiKB_KiJlZ$9G`c^=E@oNG)mWWaNo-3TIW8)$Hg0Ub-~8?KhvJ>$ z3*&nim@mj(aCxE5!t{lw7O5^0EIO7zOo&c6l<+|iDySBWCGrz@C5{St!X3hAA}`T4 z(TLbXTq+(;@<=L8dXnssyft|w#WSTW<++3>sgS%(4NTpeI-VAqb|7ssJvzNHgOZVu zaYCvgO_R1~>SyL=cFU|~g|hy|Zi}}s9+d~lYqOB71z9Z$wnC=pR9Yz4DhIM>Wmjgu z&56o6maCpC&F##y%G;1PobR9i?GnNg;gYtchD%p19a!eQtZF&3JaKv33gZ<8D~47E ztUS1iwkmDaPpj=$m#%)jCVEY4fnLGNg2A-`YwHVD3gv};>)hAvT~AmqS>Lr``i7kw zJ{5_It`yrBmlc25DBO7E8;5VoznR>Ww5hAaxn$2~(q`%A-YuS64wkBy=9dm`4cXeX z4c}I@?e+FW+b@^RDBHV(wnMq2zdX3SWv9u`%{xC-q*U}&`cyXV(%rRT*Z6MH?i+i& z_B8C(+grT%{XWUQ+f@NoP1R=AW&26{v-dx)iK^-Nmiuj8txj!m?Z*Ss1N{dh4z}01 z)YTo*JycSU)+_5r4#yw9{+;i4Ee$peRgIj+;v;ZGdF1K$3E%e~4LaI(jC-u%2h$&R z9cLXcYC@Xwnns&bn)_Q~Te?roKGD|d-g^8;+aC{{G(1^(O7m37Y1-+6)01cN&y1aw zoqc{T`P^XJqPBbIW6s}d4{z_f5Om?vMgNQEJG?v2T=KYd^0M3I6IZxbny)%vZR&LD zJpPl@Psh8QyPB@KTx+@RdcC!KX7}kEo;S|j^u2lU7XQ}Oo;f|;z4Ll+_r>@1-xl3| zawq-H%e&ckC+@AhPrP6BKT#_XdT7&;F71j}Joy zkC~6lh7E@6o;W@^IpRNZ{ptLtL(gQ-CY~4mqW;US7Zxvm_|@yz&e53Bp_lTPlfP|z zrTyx_>lv@x#=^!PzR7qqF<$gm`|ZJZ+;<)Cqu&ot2z=0000WV@Og>004R=004l4008;_004mL004C`008P>0026e000+nl3&F} z0001tNklo7K|1vbv8f;|^Of^t;?^yf;CW7#S8IIH3T@^E^ zXn7P*!#Fe7Y*Ym}@GE1hF-4D^ssINL95`^`z<~n?4jede;K8^2sTZ7o zht;a`l;h^zT%jr!_#IX0J>dTxKzov9%N{33K5*a-asmJV|NjF3yT2}M0^FaH00000 LNkvXXu0mjfz}aQ) literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_rss.png b/res/images/icon/myfile_icon_rss.png new file mode 100644 index 0000000000000000000000000000000000000000..65740a34f35f75af661293e593762243e5c5c34e GIT binary patch literal 2870 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 I<37cI0C@n(fB*mh literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_select_all.png b/res/images/icon/myfile_icon_select_all.png new file mode 100644 index 0000000000000000000000000000000000000000..0c531fcda666b3446ee7fded5dfbdaa6c83b21ba GIT binary patch literal 3394 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 Y0DfW<&0L@QI{*Lx07*qoM6N<$f>q3F0{{R3 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_snb.png b/res/images/icon/myfile_icon_snb.png new file mode 100644 index 0000000000000000000000000000000000000000..5903558b0ae1505ece37a67aee93cd99e8b88664 GIT binary patch literal 2270 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 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_soft_search_back.png b/res/images/icon/myfile_icon_soft_search_back.png new file mode 100644 index 0000000000000000000000000000000000000000..7a548a47b18cf363991289bfc646415661563abe GIT binary patch literal 1625 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 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_svg.png b/res/images/icon/myfile_icon_svg.png new file mode 100644 index 0000000000000000000000000000000000000000..12eb18d9cd8b842e34f19cacb1cd4317e2548618 GIT binary patch literal 2861 zcmai0c|6ql8y7hu#43^)Ls6J}#u$xh&RpY4k!u@fjEOnSj0{SPCL~g4^ zDvQXusdYw?k=h+w>xih|XtTfHAHDYXeSN>5=W{&o_w#(7H#2f`3wLO1h)x+K%oE>3Is(UQ7EW200x1=z!3S1vVkHnNE8NU3;6N?<<|K0 zP>dIe^2L^Xg$0HQg**%x9334EiiU%@d?pxbXJ@y{0fX7dHEaYi93f3)!x5ORF_0L7 z5I&11WN|rwRYqDcH%f>F%02!23Tz&g`VTQj@Fh_4kby-s9vBLOfZ6QTdwtdx2)!8p zb>pkr0`C|e1MI~RaHIGk@_dAvt%2pS`*%aDigIr-?tGR!DYOU@HzbP9;0T>aSfKm_ zL}$@4a3leSB-)WtFfxh^heGWTwssT}0!=`pP$U8#vc~Z>tQ`yuC*z4^C;?A~Ldgg; z427_RAc$n5oh^c3XSarR;s}H^P6%VoE=z9r3zqb+SPYTRpb5ErZ!R}ttpYs4xI(TV zjLQQM_oD!oJ}eHM8!gzinx4OJOJeX@M;UYqpUVb(jxUDw75jK3nu3H7NO&TYKt@2J zcrqM`N8l-V5)4lyz=*&vSo+su2LC@X1IwKOuNKGu6wBI{yaHFJ|CGLb@lW$GIP#9+ z%Uk36_A{Xh3aWulB)qq1==Xe$2=4=i4?j&cN}suX+vj$}%kQOW;_WveKpQZXmX>i2 zp<^3XX=sA?vCYuHA3bi~N=3Eyx0ZWWg&zzwmr)?ObzzyX=jzIV6%xgRmNhdA)o=k* z>M);gk3J8v@yl)6IOW2Ty3Je^NS9>`vi41VhzFCMK;C*IJ=GR`q{krmG0Bah=5$e; zbLp5{Yv+fj&{9wRbJ=N~g}D^+0&a=F+=h!k?x0Vt$qp#L{sY<*Oj^Lr@2rU7jyoLD zOG7$X{g~EkulG1=B<~FHbt4XKI*0=}e>5_lqa-~kuTZG8cck}QU)pzCh1FBXFA&X7 zDqhWGc?)}Hik0iZYVBK|=PlmM{;hkb*4U+hL}54HlPU(IJCaD%=l}HMA{xMqy+sZLX#He4J%`j|(5j7?k>o0#d`VNea zVEUTsl)QQbAO{P}i~L_)uFXoEBV^29seOA{%_LR}MDDS)HtoCKx@GETDfrJ7;c4ae zSd4d^qRZuzK|dRM#y&$Q)rR)}vO5{U)_hcUyeW}>dcu-4o&VuQ{s$&$feq*@a_LsHqm|{BFRZX)9v#m>g;%mk!tT5)~*szM~iSihvnTso!O@GZL45w%lXO_!q z49?-UE7wF9@>-p%Wyg%LpW<}BzkoZFIBhn3LmXW~{`3R)@av*Kc#CCMb2Mj-MiMNmxev@ei?WKL!=4zq5=sJs?`p*d zYNy5fd)1+p(>7=rR2G}t?yV@j79zcvniAJr!B!TJ)oo51YhdQRj28ev%~~5^M|J9!L8NEEy8VJj5J2>ug|QlMqIcpd6Ti9c9Mr7=P^;MjjDh zk(02_Scx*(R^~YD-s9(S>iYQeG5zPm3;l&N87B&7dbfGp8&s!S@br2NrtPVRLg&gm z8bLE$VYt1wyrACJ4J4h3NQf1>RJxNB z?u5r{#Qj>WbNj8^De28t-qj8BF7D6Hbp!pUEAL$ipHdO0{Z_alI{w zZ^QHW-K4u$xpj{)t-8`58fSiV154Liomq+porgQ@);Bkk(9bTNCcSU4cHFO8vf3?1 z>i7@E@Uy)Z#(GK3(jIk>lJ=R%O`O<~eUUFDXiKg1q;a_b89mWHU-fav>E1U7rlQt; tGdFB~@{@3zE%wW~R(i*+cPG}VD73X-Xx{ka7V+v2tP|OdR7yCU_#ds<&|Lrk literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_swf.png b/res/images/icon/myfile_icon_swf.png new file mode 100644 index 0000000000000000000000000000000000000000..6bc8a79b23b71c475eb724775c93678cb4944160 GIT binary patch literal 2260 zcmai0d00~E8fVI-$n2(Qn;Bs?WC|Pv6qJZHF>%H8W*fmVxh#j^m|&$XQ!d$}ZK6(6 zW_zZUPMVXIL$*w0r8O-sGuM_;Ge;9=vg{rzyZ4Wtx#v0OTYtab`+o2DzRz>ABEuJq zM^8ngP^j_35MDIWhuXd|4oK_Kcy%?>O@aCGa14|Pr%1FQiY@zSvI>j_B{IY6 z8(=UBH9Ao)j)&t#VGJpxB1mi)f?lOT*eFymORteg6(EdV39gc>nYh;%>u^}PjERe* zibx_27fh0eq-w#K)NrvhRUxIzaIAUQU_Ap7P=T-nt5+%2I)4x6#1mUMMs9}lTPp$JBQQ(0( zsaCFm<&YX{QQj0mk9xfF?#2T7Avpc)qPm^fsIAd|}& z{!|W`%BAyZWIm1W4*+yZ0A0YN1abmtG#-ad8qxR~7Z3zcX(Tou;IMfBz^Ab3Y#zd= zk;ohx7a@;ug=!rvQA@!QyK=m`7X^KANcVz*(%0ana%sPME z`fTwK$tQbn_MF9(Ob#nE7JraZX@^THH(|!{g^$M+{Ip1Ay{oj+TQAmZxgM7Dr03^u z3zJkX+uCv)vd{<9EzBTZZ0wjJsASYel=u9xk)y=F7b-h4CUOXMo^^i}oa{T0d^FA7 z6ZG~HbmDuWevRY)7?UwC_36*)1%{aw%9oAK1Aiu_Wme{lYUdkdF#m9FS@4atkPRC@kM4k=u|YpT0-L*#<$NoM<7n|sUrT6~{Y z^(}tr+_HJoeEu5fRqnsK4s6|i%0#=xTUf%#z1gnB#WrRT`tu7dX!*H!XFSY9!gqgC zjfBa0r#ZxzdvqDbea{@nIk=@S`0gh)wi118UH;id|MB4k>oe@U_WU8{)C@b6hoZ=( zAp_I5Zu^JAu;=bIC?flt?1ki_xr=6&cTUvrZ$;165SRDg&%M*0r*!hE$D5mdn}YV0 z08QgdSLa%j7d1x-*x7*bc?*Waeew1lrbxgp`0zI9*rmGD@Log3ZmXC!u5Cx$b0^_h zuVb?knh#g4X-Yn2Z0R~e`1Ou!!>+*f=x|QAz0d94Db4GATdNeb?>GIilXclVdZ;~z zuiaJDBrsiY$~?F0n`GP9HW0kc+{tE8?9%>2Hy`^X~&*}B6$c2WO{_VXj)l2%zzMy3t;JEMuscz~S^ZVQv zw~xL*e{I-@I=AD{S=VvaT4Tc7N@ZUc`?@bHYFjsV8rtVuU*os@CFst!v>6Ay{c1wr zy}Jk*7nSAbmGmWq&3Voja%Q$QXCHaNttqs7n#M}Cd-GGR7-Hj=a3YeE7Z! z*1LE`Fde`@a}F-um^VjqLG)hlP(OXb<$?N?>fs;U9LvIDpFjFto-=SMZ2PqP!!9dOj5psc{cYKl?Y936 MAwQf~##yoHKUCMKBLDyZ literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_task.png b/res/images/icon/myfile_icon_task.png new file mode 100644 index 0000000000000000000000000000000000000000..8fa293819e8f0ea66b2d0b216dd0e31a1eb2077c GIT binary patch literal 2169 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 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_tpk.png b/res/images/icon/myfile_icon_tpk.png new file mode 100644 index 0000000000000000000000000000000000000000..07586141ed6e18f6facff9e9acc8fa60277990c8 GIT binary patch literal 3363 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 WTL+{xY7DLZw%C#!iI*(>6aE9ZZLq2U literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_vText.png b/res/images/icon/myfile_icon_vText.png new file mode 100644 index 0000000000000000000000000000000000000000..a0206f87ead6bd85c771bc316808db98ccb4355c GIT binary patch literal 2050 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 Hu0mjfU4QM5 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_vcard.png b/res/images/icon/myfile_icon_vcard.png new file mode 100644 index 0000000000000000000000000000000000000000..cf09ea0efeba03e48a3ea04fe461b756e7fea11a GIT binary patch literal 3998 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 literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_icon_zip.png b/res/images/icon/myfile_icon_zip.png new file mode 100644 index 0000000000000000000000000000000000000000..227f5a13506a9a33187a73eda3cd1be8d876d6b6 GIT binary patch literal 1778 zcmah~c~BE)6pwNQ5!%X7OO%1Q9%zLmn~NkRXif+cjDaZ;sFGuW5R%QYkU&LLPzI(J ziUp?Hf(VG%Vg^wdIfjY_#7aj2>jAYzKt)t4v}J^%-5}8Z!PuSM@7mw*_uluu_jYq6 zVL`6WYn(9{jH@V^FGc$h+vDVjww^cI3}}Z#1TrKXjzi3HBZT3oUd6q2h_ z4P8(G24feej*uZTaVSd(YYB22hG5a^Q8oq>u+5^ED>V>;S3vP<9UB;LY6b9W6&r}8 ziAiET4@yu6rx~H}w6F+ennuY~0owxc0Tvc2poI`Q-l9#?nOGJ!FsI8x$F^l6fS-dP z8aD98DVbP;=fOq@Pa{zLlq3+u)9D0|N~6<3Up$!vl8Gerru%_Z7LCp#`{U;?0JUaR z#j&J(;k+$$#s(4)M9(4;&1N&fOd-I=cp}JTGHn`UvLA}@Go|Vfxy4UsTEC#chfGSN zT92q<9p0uWSHQ^#8$dmMvjweQEM64WndSq9hKy*D>xm$NMAT|+`AWU}FRfCoN=vBmqWXQv$5V^TO%)&5>%I z3O1Xz*pBDTZuyW=odT(ZMp%oVi!V#Plzj?`B;Gwz8pxxPNgNsz z1m?M_rD8_;pO_I*XNb1s_)oGdETI`_8!o0kI$10pNQYL85iO0P?A%ne;s6n!6Jfdc zw7*reM(%5U0gX&R=c@4_}fXHpUmJE4M4aYRMw6J@M1;DD>bc5j_?r`PQyQg9Zt?_lD;QP-f#xK_pT6VSR z8rI^Zr+Y`6`~LQ-q<$S%mDBEXB`(<8Qqr1NS3>PsTR%YeC=iWhE8167 z-5yKt%)d|Gkm+?6n|o5$(Q-LoQBf|jAJH=uK0ZF&F229Skvab7XC2gr4*(@FHL%p>iJbq)RE9XobVDU|X&9L>Y!%F6e-v$TE?(B_;*>J228G6z93*mid2UcL<>9{)4C~~}@YuLg&d}Xlg)!n-|tyY_p zUi_nAa&q!~=Ss&+_oG5$KNgF<7o9dXHrAJT@rM?5a&n=I<4eeVqI*+)|Fin~lez6c zVaUeX*7N7Ny}iA;9oI&Tis(^~vr%cSr}kLGKP+^c@yg5QmgPS+WO-lzYi71=cZJIH z7FVm&NoziCO4=D3Dhcq4yfD1xXoqC)nO35&Z-QN7Mn>tx%jP?I?FuUTt?aqNxmuou zJ=i%xs;VkQMq*;f^|seV!pBdXO#AnTH8nNy zN+I%BYe%9RS?*14+~%HCDK8e(^w0 d>b?(RF)MF=F|93In31w%4OgW@qu)WMy9yQ|LNYU_;Vq9e90xX{JfnYZq&&b)Ev>8@T% z!BWbsi$s^MorI!;5S9lIc?voPfv1oz;VmKB-mJUYp>5#J`@{Erzwh^ZzqdL%a=WSV zN+U&4P4Ph`LFP;Ts6R*kYpYkA$kc}WQ+Nzza9(pE6*Ev8g1Dtk!UWWe`I$Y~O;NS9 znM~o7IxOkPVl*Ga6fB3ZDXP1-;Ar|3#2^hPO*=~ec=v$@rV*vbBPyplGR&HT3oaa6 z7)k02Q@Uu-y*;42AQ1rzVht3mY1@+uQM#lnk+px!(x3#vQ&IZZR7xEMGIAk^FkDdQ zI(X0#X815ChQ)Rua6HHI0?Ty_-cI*cn(nkX=)X-E;FufIbK_sM+`ndkdM zF*zKPWnmyRASfMtNUU%bq|aK=#uct{%9X2f{Z_CX5?O(+IR}ja7g?Z`vSe2GB39Ka zbB*d=VpX{;F~j;7``1NRj!5_T%agVxo0Gd-7PlkZ-0EzIsuiCbr@_sYzs(3byP(^b literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_search_category_doc.png b/res/images/icon/myfile_search_category_doc.png new file mode 100644 index 0000000000000000000000000000000000000000..3eb012df2fb31e74fb18542a9b27110ddf4d2244 GIT binary patch literal 1009 zcmaJ=PiWIn98T%{LuKyZ5T^)_>?Uhok~ZBES7+O7wqVNWitE9HugU8gx8%j-ZO!Io z4210<2;yxQ!Lu;09^CXa=F!tY@Fcs52M>xcU%IyQU=6&yKYZW!`}4lHHCw(jn7EqY zIBu|1)GKTrj>h@3?EiG@`XHM|=yZ+Fkp^ucA9Fd2)G;VIXaQF+vQ{7M<4KN-^LDjH zYsOv8B#wY0j1W2=V{_c(ROlgd5mQjd3$~l(zrB6O1KY~-^NJxFUI91l;+l`=*2-0L zZP8RMe(DyO3^gX;V2VKKEV+ReX8E?R#@5j>8H(dcNz{~aO_V_A<5@J{YG@UGrW1?pvV4P(L zsj3P^8Om~!A(FwWOHr6~gVC;njsw%TJ!%sdM2e_RmT8t}nVyv3cs*G+=(LG742H;q zk|0JUb%BQQf2ia1&;hOB(|rFa98_053@bPw%f87jt}z;g^0b1F5hZ?=kfm-HXPbnQ zph-MXm{SA^%-gO-T0t9c7+T2jVF*tb`(HRBTpv`g0P{<%!_)$4Gr{<)}q zxsW9Tql^9PqPs`TJ<+mfTej&LAG^%$KC|`V#{6gYBv|)y)$p+X`}lY&uEZ|IU&Jn4 z{5}BgarMVw1-#!Lx;?ge@C1DL`us?Y-50iplxH_kaR-6j&EbP1^n-i272j#RyjHY- vp;x6hBZ~KFcdzl~T;k);^&}iB!}!1z?&g`xiM{pxSo8=>(`Eg2{=vo{G&MTz literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_search_category_img.png b/res/images/icon/myfile_search_category_img.png new file mode 100644 index 0000000000000000000000000000000000000000..08a5c5fc56dc3067966d570a60c00f556ccc5e07 GIT binary patch literal 1168 zcmaJ>TWAzl7@p0V7?<5LR4rA|944fuB|Ephxx=p6WG891bwk*!xQOV^&YbLy*_kuW zoVb%1P~)XaZA$7xeGskGzDdDHX`xg_+Gkq?Ulj2{6sopRdjy{Lb(ySK-LZ3+u1?BU!BGE+mEQ_Jo`e_*h(&2b)|OsZ$0tag(dP<;GibJu4U%i7Z1~KLoX5 z8yR4^WJzzGOQfaV3Ri2LOSC1IBgt^yVBZ;Z^NP5~+pgM{99E4FP2zT&*n00j^XDka zwa^+2zcTv5;mmf!;chmQMojkQ` WVfOLQ^AF~{e?)F*RQ_?WJog$X5Oj6` literal 0 HcmV?d00001 diff --git a/res/images/icon/myfile_search_category_snd.png b/res/images/icon/myfile_search_category_snd.png new file mode 100644 index 0000000000000000000000000000000000000000..9984a9a8d293a6a649782066b743cf201690d9a0 GIT binary patch literal 1109 zcmaJ=O=uHA7+s0BS`F48)M~|XRj6QgchYRrERBuHrY6Odm`3bDY&W~pc4>EK-JP1W ziZmkHfDf(MI&S_Ji?g5afR#oiPV;%sfI2jjx*{P5oU-uKNnD>3$usCl#sGws9#Tv z*r;=)Bdd-Ks3DDQ-3wX@5*08IQ9!{MG##lBX6JP!x^|Cw7R*D)K$!h)swE6s za)M74njmNja4;Z*0--&?FF=8ZeqIRrpdg7sNq}JCV`(&7>yIbU!B8>Bkm`b&4DWhjmlKd1oG ze9ZkQm0CR_T<1A9S~pfVelT&jc%t|{TpMKWGvcbHOHP5Q>e=c@eZ=dz=smi6$aiSf znI#hgD;vbQ?X}(V>^Bdr-c@z_=^JKjBRiflhVRz}qwLMI2597IW{3jAFJg2T)jk)8oi3#0-$aN1{?c|g2d$P)DnfH z)bz|eTc!8A_bVx6rr0WloBA5~7C5J7WO`H;r3P2|g(O#HCtIc{+1n}DR9FEG$W1Lt zRH(?!$t$+1uvG$^YXxM3g!Ppaz)DK8ZIvL7itr6kaLzAERWQ{v&`mZlGgL4$(K9qL zur#sMQ7|$vG|)FR(l;>IH8ij?HMcS_RDc2{plwAdX;wilZcw{`JX@uVl9B=|ef{$C za=mh6z5JqdeM3u2OML?)eIp}XpbFjM%Dj@q3f;V7Wta&rsl~}fnFS@8`FRQ;6BCp2 zOG|8(fG&l2A-4c-Y+f-mn1BJMUy)d#Z>VPg@)As;uP=V3xw&xF#U(+h2=`(&xHzP; zAXPsowK%`DC>a=WY04n03ap%qQWHz^i$e1Ab6}wukda@KU!0L&px_*As%NMWo|%`D zUtSDW@9S&jnO9trn3tUD>0+w{G(j&jGsVil)Y-zxz|hp$$<*1<(AC(&!qv#d(ACY* z%)-RY+|3ZC*Cju>G&eP`1g19yq1OzjUQklVEdbi=l3J8mmYU*Ll%J~r_OewbZnqfY zG!Lpb1-DyFaO%|uIz}H9u}BdO69T3l5EGtkfgE_kPt60S_99@iwte}04FdzCmZytj zNX4x+Q+D$!fDXjEc0VDhbU^O$HRq-?-+ip88sc>?bVwwVe_pe-&Hj`gZ^vuO2Q!vR_OPaQyRC@ZS)y?^k?~FI8kN3}3YG$&WW4V2UP{nPI=b64 zNUF#|tZ0(Ha!$_jvlSlApVLn!9R4IKs4V(#x|gE9O}pH^-Agw{yL0?>@w@Ki=fRS6 zVvk1irNe?>9{$>)@f~ptk?Gss!!HLUUXD zsri~`f;T4qv<`UqU$i2t*XR(_ma@GvCj493q%EZ0SnOYx{QbwNKE>j1Z!*5oRbFUp85E7jkEkjDMJ&yisEJrm848ub7}s%@akx>G!%AGwlxIF#PSC^-A?(o< z37*R@BQBxuqTMXPR?u#n%jqUT+-{HCMH3uBT5TW(5?SDe|4+_P;0&5+j{h`Eb_;Z1 zX1dt=V6k|41R2~I4P1@W-rhGLDCZe3=L{rHUwHZJwol-aoxc5fLryzO?X79fkMDRs zWg^&N=S0zzX{s(Qr;XeVXL~ANDlFN?nJpW7eVUJD<1av!~xF7#X8uv)dB;mi5Ob3uetL(v5?q(Dm=q`>C_HAIkAiS4+AE zLh6k*e;!=cHkj-9__eay)vp*e-Qy=WKqcpHJ5}`97iI4rf}Z+gn`h_R-5q5snwz$G zo3*38sjk7)9fu$3*C5C8@c~nGm$i3x*fBM39hmg}UJreBuKPJ?it0OgcXZ|GPpi5s zl0pBkWa&qRulL<4tv_|4?#rz=kjqy_sBh}o=@UcVk(-;Ft9QTnUjN49doR!ad~|Ab zy7Tz-o9{;^4_7|<*57v>>6@7;)ki0;rhM$oNb1ty_OXMn{`lx$>r0FL6O;EBY|e+r zr2D=t{AG1s>PWF8XfI^1)1$ec4i!1_gWs1py7!!aTd0Hz4#a=xy@&hoSmb7Lx~4k^ Yx-`D&+BNmSy_uh!*Imbbz&1bo50I+jnE(I) literal 0 HcmV?d00001 diff --git a/res/images/icon_button_more.png b/res/images/icon_button_more.png new file mode 100644 index 0000000000000000000000000000000000000000..30730ac844d362dd4a18db13402ecb9f49bd01be GIT binary patch literal 1251 zcmeAS@N?(olHy`uVBq!ia0vp^dLYcf1|-9GYMTQo#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pk#?_L`iUdT1k0gQ7VIDN`6wRf@f}GdTLN= zVoGJ<$y6H#24v4q}24xJX@vr zyZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL`NmQuF&B-ga zs<2f8n`;GRgM{^!6u?SKvTcwn`GuBNuFf>#!Gt)CPF*P$Y)KM@p zFf`IP03tJ8LlY}gGbUo-h6WQb!1OB;3-k^33_xCjDfIQluQWFouDZA+C>7yetOgf{R2HP_2c;J0mlh=h zBQ8xDWL1Hcb5UwyNq$jCetr%t6azByOY(~|@(UE4gUu8)!ZY(y^2>`g!Rmc|tvvIJ zOA_;vQ$1a5m4GJbWoD*WS-6-xxf(c{7&@B*L*3QH!r0K!#m&;$&BVpR*vQxnrq?Au zximL5uLPzy1)vJM&$%6k&mT#2x|D&3sQX$c{aJF)P zSbBR?`r-#SH7d-w=Jg_&XYaDcAJVm%CA0p4NY#!;d$r>+vkwX9oKKyW{bTm#Le~9> z+}GzVydE5L!2iY}Q@hVqUD*E~lzopr0DNn^Hvj+t literal 0 HcmV?d00001 diff --git a/res/images/icon_button_more_rotation.png b/res/images/icon_button_more_rotation.png new file mode 100644 index 0000000000000000000000000000000000000000..17504649529a775159172820c0d460c4f3314a83 GIT binary patch literal 1316 zcmeAS@N?(olHy`uVBq!ia0vp^dLYcf1|-9GYMTQo#^NA%Cx&(BWL^R}Ea{HEjtmSN z`?>!lvI6;>1s;*b3=DjSL74G){)!Z!pk#?_L`iUdT1k0gQ7VIDN`6wRf@f}GdTLN= zVoGJ<$y6H#24v4q}24xJX@vr zyZ0+8WTx0Eg`4^s_!c;)W@LI)6{QAO`Gq7`WhYyvDB0U7*i={n4aiL`NmQuF&B-ga zs<2f8n`;GRgM{^!6u?SKvTcwn`GuBNuFf>#!Gt)CPF*P$Y)KM@p zFf`IP03tJ8LlY}gGbUo-h6WQb!1OB;3-k^33_xCjDfIQluQWFouDZA+C>7yetOgf{R2HP_2c;J0mlh=h zBQ8xDWL1Hcb5UwyNq$jCetr%t6azByOY(~|@(UE4gUu8)!ZY(y^2>`g!Rmc|tvvIJ zOA_;vQ$1a5m4GJbWoD*WS-6-xxf(c{7&@B*L*3QH!r0K!#m&;$&BVpR*vQxnrq?Au zximL5uLPzy1) zU0iQw8sf6IVKv(#_D>Rv5?)xA@R|e#2!!luSTSSPFZurWUqy7@Y~%Q~>_+3S2a8v4 zo9u3U_sqAR(9o&3PVDGitK3w5+2w<41;c%xYuo`{RmJBHM_bI@ZMVKa((ajGL)Fpp zhY1;n?pvrk?|t;XV3A(?gF7Ly|K{JAb8Ka=>baaL3+h6qJrLE&JttZ*-F#H z4;*zf*ZiEVW71hJny<9OT=359Yi#+CEZ!W@-7$0blyeX5YEI7ODE%N=!I@rs{W<5l z!_V(<2H0y=7Z{k#Y@RcDVO-(A$1~TQR64E?bbA-H zt3kP5W|!dX%dgeNb-^{NZjING8oo{QtVT+~vuVAkHl<=-TO1_A#d2 WOjWb(2|55Og*;vTT-G@yGywpK2G)WA literal 0 HcmV?d00001 diff --git a/res/images/my_files_sd_card.png b/res/images/my_files_sd_card.png new file mode 100644 index 0000000000000000000000000000000000000000..470b6fe9f907556b1ac96d22e3ae47b69a1bebee GIT binary patch literal 1196 zcmbVMUufKP91p0+HmO#vQ_IkhD%R=c&s~zsg{I~5Z$0&Dy`Hpe3YR9oUSlu$rOB_m zw1^LLbgsV42Rnq0fe*rl_%M7>thMfCo9Gk<8>@R6K8T>ye?!FD`Ad7(`B3&?NPd66 zpU?Myjt&m&YunYiiy(-$V!vL-Go5@pQg|Hx(7?FcKNEtXnSqKuGhyc)s;`&qiDgXS0c4S}SN9`1R;UeL8LyLLh9Wma(1b#5 z8Z}ZHBsCZUQlPVGo8>rC6lsnZM3H-j%&=UBVeu=bIbIe-Ig=xs4~4ab&X`=*&89BA zQ>bx-0-0eNjRxJw(lD$sTt1&qI5L?umPkj_KC3?euc+BhF$T`e$< z-R%`6g4i1Qh0w)GvFbXsr##@JqOMT*hIU*>X0w8(in_q(4AIDPT%OP6O`VriNfdRp zz_vKH!>UG3S6NPC3#QI-1~0LaV3-+GV}-1$w zumWMdRRM$J5W#312BbD5lHJ3u@4!a%RFa-eZ*>s52Z3XT&?7hEE4$n1m$+<}Geq7L z*n+`hzcoqFL|(|~hMAW%m1<(0{}VF?8^a{U@t?VT&HO@D-zkM_T9ALw{jJi9Y@_~fx1)q7&~c;WRQ`(C~N(sEWPcRuvN zuU8I!HFv!0v!BhOzfN6=`Sr)dT1RhcNxhu +#include +#include +#include +#include + +#include "define.h" +#include "utils.h" +#include "view.h" + +SET_TAG(PACKAGE); + +struct _appdata { + Evas_Object *win; + const char *name; +}; + +static bool _create(void *data) +{ + struct _appdata *ad; + Evas_Object *win; + + if (!data) { + _ERR("Get data failed."); + return false; + } + ad = data; + + elm_app_base_scale_set(APP_BASE_SCALE); + + elm_theme_overlay_add(NULL, THEMEFILE); + + win = utils_add_window(ad->name); + if (!win) { + _ERR("Add window failed."); + return false; + } + + if (!viewmgr_create(win)) { + _ERR("Create viewmgr failed."); + goto err; + } + + if (!viewmgr_add_view(view_base_get_vclass(), NULL)) { + _ERR("Add view failed."); + goto err; + } + + ad->win = win; + + return true; + +err: + evas_object_del(win); + + return false; +} + +static void _terminate(void *data) +{ + struct _appdata *ad; + + if (!data) { + _ERR("Get data failed."); + return; + } + ad = data; + + if (!viewmgr_remove_view(VIEW_BASE)) + _ERR("Remove view failed."); + + if (!viewmgr_remove_view(VIEW_ACTION_MENU)) + _ERR("Remove view failed."); + + if (!viewmgr_destroy()) + _ERR("Destroy viewmgr failed."); + + if (ad->win) { + evas_object_del(ad->win); + ad->win = NULL; + } +} + +static void _app_control(app_control_h control, void *data) +{ + struct _appdata *ad; + + if (!data) { + _ERR("Get data failed."); + return; + } + ad = data; + + if (ad->win) + elm_win_activate(ad->win); + + if (!viewmgr_push_view(VIEW_BASE)) + _ERR("Push view failed."); +} + +static void _pause(void *data) +{ + view_state state; + + state = viewmgr_get_view_state(VIEW_ACTION_MENU); + if (state == VIEW_STATE_VISIBLE) + viewmgr_hide_view(VIEW_ACTION_MENU); + + inputmgr_enable(EINA_FALSE); +} + +static void _resume(void *data) +{ + inputmgr_enable(EINA_TRUE); +} + +int main(int argc, char *argv[]) +{ + struct _appdata ad; + ui_app_lifecycle_callback_s cbs = { + .create = _create, + .terminate = _terminate, + .app_control = _app_control, + .pause = _pause, + .resume = _resume, + }; + + memset(&ad, 0x00, sizeof(ad)); + ad.name = PACKAGE; + + return ui_app_main(argc, argv, &cbs, &ad); +} diff --git a/src/utils.c b/src/utils.c new file mode 100644 index 0000000..ab331b3 --- /dev/null +++ b/src/utils.c @@ -0,0 +1,455 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include + +#include "define.h" +#include "utils.h" + +Evas_Object *utils_add_window(const char *name) +{ + Evas_Object *win; + + if (!name) { + _ERR("Invalid argument."); + return NULL; + } + + win = elm_win_add(NULL, name, ELM_WIN_BASIC); + if (!win) { + _ERR("elm_win_add failed."); + return NULL; + } + + elm_win_title_set(win, name); + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + + evas_object_show(win); + + return win; +} + +Evas_Object *utils_add_layout(Evas_Object *parent, const char *group, + Eina_Bool win_resize) +{ + Evas_Object *layout; + + if (!parent || !group) { + _ERR("Invalid argument."); + return NULL; + } + + layout = elm_layout_add(parent); + if (!layout) { + _ERR("elm_layout_add failed."); + return NULL; + } + + elm_layout_file_set(layout, EDJEFILE, group); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + if (win_resize) + elm_win_resize_object_add(parent, layout); + + return layout; +} + +Evas_Object *utils_add_box(Evas_Object *parent, const char *part, + Eina_Bool horizontal, Evas_Coord padding_h, + Evas_Coord padding_v) +{ + Evas_Object *box; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + box = elm_box_add(parent); + if (!box) { + _ERR("elm_box_add failed."); + return NULL; + } + + elm_box_horizontal_set(box, horizontal); + elm_box_padding_set(box, ELM_SCALE_SIZE(padding_h), + ELM_SCALE_SIZE(padding_v)); + + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (part) + elm_object_part_content_set(parent, part, box); + else + elm_object_content_set(parent, box); + + evas_object_show(box); + + return box; +} + +Evas_Object *utils_add_button(Evas_Object *parent, const char *part, + const char *text, const char *style) +{ + Evas_Object *btn; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + btn = elm_button_add(parent); + if (!btn) { + _ERR("elm_button_add failed."); + return NULL; + } + + if (part) + elm_object_part_content_set(parent, part, btn); + if (text) + elm_object_text_set(btn, text); + if (style) + elm_object_style_set(btn, style); + + evas_object_show(btn); + + return btn; +} + +Evas_Object *utils_add_gengrid(Evas_Object *parent, Eina_Bool horizontal, + int width, int height) +{ + Evas_Object *grid; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + grid = elm_gengrid_add(parent); + if (!grid) { + _ERR("elm_gengrid_add failed."); + return NULL; + } + + 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_gengrid_multi_select_set(grid, EINA_FALSE); + elm_gengrid_horizontal_set(grid, horizontal); + elm_gengrid_align_set(grid, 0.0, 0.0); + elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_gengrid_item_size_set(grid, ELM_SCALE_SIZE(width), + ELM_SCALE_SIZE(height)); + elm_scroller_policy_set(grid, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + + return grid; +} + +Evas_Object *utils_add_table(Evas_Object *parent, const char *part, + int padding_x, int padding_y) +{ + Evas_Object *table; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + table = elm_table_add(parent); + if (!table) { + _ERR("elm_table_add failed."); + return NULL; + } + + elm_table_padding_set(table, ELM_SCALE_SIZE(padding_x), + ELM_SCALE_SIZE(padding_y)); + evas_object_show(table); + + if (part) + elm_object_part_content_set(parent, part, table); + + return table; +} + +static void _notify_timeout_cb(void *data, Evas_Object *obj, void *ei) +{ + if (!obj) + return; + + evas_object_del(obj); +} + +Evas_Object *utils_add_notify(Evas_Object *parent, const char *text, + const char *noti_style, const char *label_style, int timeout) +{ + Evas_Object *notify, *lbl; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + notify = elm_notify_add(parent); + if (!notify) { + _ERR("elm_notify_add failed."); + return NULL; + } + + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_notify_align_set(notify, 0.0, 1.0); + elm_notify_timeout_set(notify, timeout); + + if (noti_style) + elm_object_style_set(notify, noti_style); + + lbl = elm_label_add(notify); + if (!lbl) { + _ERR("elm_label_add failed."); + evas_object_del(notify); + return NULL; + } + + elm_object_content_set(notify, lbl); + evas_object_show(lbl); + + if (label_style) + elm_object_style_set(lbl, label_style); + + if (text) + elm_object_text_set(lbl, text); + + evas_object_smart_callback_add(notify, SIG_TIMEOUT, + _notify_timeout_cb, NULL); + evas_object_show(notify); + + return notify; +} + +Evas_Object *utils_add_popup(Evas_Object *parent, const char *style, + const char *popup_title, const char *popup_text) +{ + Evas_Object *popup; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + popup = elm_popup_add(parent); + if (!popup) { + _ERR("elm_popup_add failed."); + return NULL; + } + + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); + evas_object_show(popup); + + if (style) + elm_object_style_set(popup, style); + + if (popup_title) + elm_object_part_text_set(popup, PART_POPUP_TITLE, popup_title); + + if (popup_text) + elm_object_text_set(popup, popup_text); + + return popup; +} + +Evas_Object *utils_add_ctxpopup(Evas_Object *parent, int opt_size, int *opt_id, + const char **opt_text, input_handler *opt_handler, void *data) +{ + Evas_Object *ctxpopup, *box, *btn = NULL, *firstbtn = NULL; + int i; + + if (!parent || opt_size <= 0 || !opt_text) { + _ERR("Invalid argument."); + return NULL; + } + + ctxpopup = elm_ctxpopup_add(parent); + if (!ctxpopup) { + _ERR("elm_ctxpopup_add failed."); + return NULL; + } + + box = utils_add_box(ctxpopup, NULL, EINA_FALSE, 0, 0); + if (!box) { + _ERR("Add box failed."); + evas_object_del(ctxpopup); + return NULL; + } + + elm_object_style_set(ctxpopup, STYLE_CTXPOPUP); + elm_object_content_set(ctxpopup, box); + elm_ctxpopup_direction_priority_set(ctxpopup, 0, 0, 0, 0); + evas_object_show(ctxpopup); + + for (i = 0; i < opt_size; i++) { + btn = utils_add_button(box, NULL, opt_text[i], + STYLE_OPTION_BTN); + if (!btn) { + _ERR("Add button failed."); + evas_object_del(ctxpopup); + return NULL; + } + + elm_box_pack_end(box, btn); + + if (opt_handler) + inputmgr_add_callback(btn, opt_id[i], + opt_handler, data); + + if (i == 0) + firstbtn = btn; + } + + elm_object_focus_next_object_set(firstbtn, btn, ELM_FOCUS_UP); + elm_object_focus_next_object_set(btn, firstbtn, ELM_FOCUS_DOWN); + + return ctxpopup; +} + +Evas_Object *utils_add_scroller(Evas_Object *parent, const char *part, + Evas_Object *content) +{ + Evas_Object *scr; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + scr = elm_scroller_add(parent); + if (!scr) { + _ERR("elm_scroller_add failed."); + return NULL; + } + + elm_scroller_policy_set(scr, + ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_object_focus_allow_set(scr, EINA_FALSE); + + if (part) + elm_object_part_content_set(parent, part, scr); + + if (content) + elm_object_content_set(scr, content); + + return scr; +} + +bool utils_launch_app(const char *appid, const char *key, const char *value) +{ + app_control_h app_ctrl; + int r; + + if (!appid) { + _ERR("Invalid argument."); + return false; + } + + r = app_control_create(&app_ctrl); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control handle create failed."); + return false; + } + + r = app_control_set_operation(app_ctrl, APP_CONTROL_OPERATION_DEFAULT); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control set operation failed."); + app_control_destroy(app_ctrl); + return false; + } + + if (key && value) { + r = app_control_add_extra_data(app_ctrl, key, value); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control set extra data failed."); + app_control_destroy(app_ctrl); + return false; + } + } + + r = app_control_set_app_id(app_ctrl, appid); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control set app id failed."); + app_control_destroy(app_ctrl); + return false; + } + + r = app_control_send_launch_request(app_ctrl, NULL, NULL); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control send launch request failed."); + app_control_destroy(app_ctrl); + return false; + } + + app_control_destroy(app_ctrl); + + return true; +} + +bool utils_uninstall_app(const char *pkgid, const char *pkgtype) +{ + package_manager_request_h request_h; + int r, id; + + if (!pkgid || !pkgtype) { + _ERR("Invalid argument."); + return false; + } + + r = package_manager_request_create(&request_h); + if (r != PACKAGE_MANAGER_ERROR_NONE) { + _ERR("Request handle create failed."); + return false; + } + + r = package_manager_request_set_type(request_h, pkgtype); + if (r != PACKAGE_MANAGER_ERROR_NONE) { + _ERR("Set pkg type failed."); + package_manager_request_destroy(request_h); + return false; + } + + r = package_manager_request_set_mode(request_h, + PACKAGE_MANAGER_REQUEST_MODE_QUIET); + if (r != PACKAGE_MANAGER_ERROR_NONE) { + _ERR("Set request mode failed."); + package_manager_request_destroy(request_h); + return false; + } + + r = package_manager_request_uninstall(request_h, pkgid, &id); + if (r != PACKAGE_MANAGER_ERROR_NONE) { + _ERR("Uninstall failed."); + package_manager_request_destroy(request_h); + return false; + } + + package_manager_request_destroy(request_h); + + return true; +} diff --git a/src/view/view_base.c b/src/view/view_base.c new file mode 100644 index 0000000..e28b89c --- /dev/null +++ b/src/view/view_base.c @@ -0,0 +1,278 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + +#include "define.h" +#include "utils.h" +#include "view.h" + +enum menu_type { + MENU_MYAPPS = 0, + MENU_APPSTORE, +}; + +const char *str_menu[] = { + STR_MYAPPS, + STR_APPSTORE, + NULL +}; + + +const char *str_sort_opt[] = { + STR_RECENT, + STR_A_TO_Z, + STR_Z_TO_A, +}; + +struct _priv { + Evas_Object *win; + Evas_Object *base; + Evas_Object *menu_btn[MENU_COUNT]; + Evas_Object *focused_menu; + Evas_Object *notify; + Elm_Object_Item *focused_item; +}; + +static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Mouse_Move *ev) +{ + if (!obj) { + _ERR("Invalid argument."); + return; + } + + if (!elm_object_focus_get(obj)) + elm_object_focus_set(obj, EINA_TRUE); +} + +static void _menu_focused_cb(int id, void *data, Evas_Object *obj, + Elm_Object_Item *item) +{ + struct _priv *priv; + + if (!data || !obj) { + _ERR("Invalid argument."); + return; + } + priv = data; + + if (priv->focused_menu == obj) + return; + + if (priv->focused_menu) + elm_object_signal_emit(priv->focused_menu, + SIG_UNSELECTED, SRC_MENU_BTN); + + switch (id) { + case MENU_MYAPPS: + elm_object_signal_emit(priv->base, SIG_VISIBLE, SRC_MYAPPS); + break; + + case MENU_APPSTORE: + elm_object_signal_emit(priv->base, SIG_INVISIBLE, SRC_MYAPPS); + elm_object_part_text_set(priv->base, PART_CONTENTS_TEXT, + STR_NOT_SUPPORTED); + /* It will be implemented later. */ + break; + + default: + _ERR("Invalid menu type."); + return; + } + + priv->focused_menu = obj; +} + +static void _menu_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Down *ev) +{ + if (!data || !obj || !ev) { + _ERR("Invalid argument."); + return; + } +} + +static input_handler _menu_input_handler = { + .mouse_move = _mouse_move_cb, + .focused = _menu_focused_cb, + .key_down = _menu_key_down_cb +}; + +static bool _draw_top_area(struct _priv *priv) +{ + Evas_Object *box, *btn; + int i; + + elm_object_part_text_set(priv->base, PART_TOP_TITLE, STR_APPS); + + box = utils_add_box(priv->base, PART_MENU, EINA_TRUE, + SIZE_MENU_BOX_PAD_H, SIZE_MENU_BOX_PAD_V); + if (!box) { + _ERR("Add box failed."); + return false; + } + + for (i = 0; i < MENU_COUNT; i++) { + btn = utils_add_button(priv->base, NULL, str_menu[i], + STYLE_MENU_BTN); + if (!btn) { + _ERR("elm_button_add failed."); + evas_object_del(box); + return false; + } + + inputmgr_add_callback(btn, i, &_menu_input_handler, priv); + + elm_box_pack_end(box, btn); + + priv->menu_btn[i] = btn; + } + + elm_object_focus_next_object_set(priv->menu_btn[0], + priv->menu_btn[MENU_COUNT - 1], ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(priv->menu_btn[MENU_COUNT - 1], + priv->menu_btn[0], ELM_FOCUS_RIGHT); + elm_object_focus_next_object_set(priv->menu_btn[0], priv->menu_btn[0], + ELM_FOCUS_DOWN); + + elm_object_focus_set(priv->menu_btn[0], EINA_TRUE); + + return true; +} + +static void _draw_view_content(struct _priv *priv) +{ + if (!_draw_top_area(priv)) { + _ERR("Draw top area failed."); + return; + } +} + +static Evas_Object *_create(Evas_Object *win, void *data) +{ + struct _priv *priv; + Evas_Object *base; + + if (!win) { + _ERR("Get window object failed."); + return NULL; + } + + priv = calloc(1, sizeof(*priv)); + if (!priv) { + _ERR("Calloc failed."); + return NULL; + } + + base = utils_add_layout(win, GRP_VIEW_BASE, EINA_TRUE); + if (!base) { + _ERR("Add layout failed."); + free(priv); + return NULL; + } + + + priv->win = win; + priv->base = base; + + if (!viewmgr_set_view_data(VIEW_BASE, priv)) { + _ERR("Set view data failed."); + goto end; + } + + _draw_view_content(priv); + + return base; + +end: + evas_object_del(base); + free(priv); + + return NULL; +} + +static void _show(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Get data failed."); + return; + } + priv = data; + + if (priv->base) + evas_object_show(priv->base); +} + +static void _hide(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Get data failed."); + return; + } + priv = data; + + if (priv->base) + evas_object_hide(priv->base); +} + +static void _update(void *view_data, int update_type, void *data) +{ + if (!view_data) { + _ERR("Get data failed."); + return; + } +} + +static void _destroy(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Get data failed."); + return; + } + priv = data; + + if (priv->base) + evas_object_del(priv->base); + + free(priv); +} + +static view_class _vclass = { + .view_id = VIEW_BASE, + .create = _create, + .show = _show, + .hide = _hide, + .update = _update, + .destroy = _destroy, +}; + +view_class *view_base_get_vclass(void) +{ + return &_vclass; +} -- 2.7.4 From b11b030cac72e6f2861994ec8a73b328c784e6c2 Mon Sep 17 00:00:00 2001 From: Kyuho Jo Date: Thu, 14 Apr 2016 17:50:02 +0900 Subject: [PATCH 3/6] Add dialog popup window Change-Id: I4bdf8245e922f5d19e0d753d2b98e47e2ae76df0 Signed-off-by: Kyuho Jo --- CMakeLists.txt | 4 +- include/define.h | 18 +-- include/dialog_popup_view.h | 58 ++++++++ res/myfiles.edc | 4 +- res/view/dialog_popup_view.edc | 299 +++++++++++++++++++++++++++++++++++++++++ src/view/dialog_popup_view.c | 190 ++++++++++++++++++++++++++ src/view/view_base.c | 9 +- 7 files changed, 558 insertions(+), 24 deletions(-) create mode 100644 include/dialog_popup_view.h create mode 100644 res/view/dialog_popup_view.edc create mode 100644 src/view/dialog_popup_view.c diff --git a/CMakeLists.txt b/CMakeLists.txt index e6c92ed..2995c62 100644 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -52,6 +52,7 @@ SET(SRCS src/main.c src/utils.c src/view/view_base.c + src/view/dialog_popup_view.c ) SET(TARGET_EDJ "${PROJECT_NAME}.edj") @@ -67,7 +68,8 @@ FOREACH(flag ${PKGS_CFLAGS}) SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") ENDFOREACH(flag) -SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror") +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -Werror -fPIE") +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed -pie") INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include) diff --git a/include/define.h b/include/define.h index 5709637..01be3d9 100644 --- a/include/define.h +++ b/include/define.h @@ -22,13 +22,14 @@ #define VIEW_ACTION_MENU "VIEW_ACTION_MENU" /* Layout ID */ -#define LAYOUT_MYAPPS "LAYOUT_MYAPPS" +#define LAYOUT_MYFILES "LAYOUT_FILES" /* Group for EDC */ #define GRP_VIEW_BASE "grp.view.base" #define GRP_VIEW_ACTION_MENU "grp.view.action.menu" #define GRP_ACTION_MENU_CONTENTS "grp.action.menu.contents" #define GRP_ACTION_MENU_NO_FAVORITE "grp.action.menu.no.favorite" +#define GRP_DIALOG_POPUP "grp.dialog.popup" /* Part for EDC */ #define PART_TOP_TITLE "part.top.title" @@ -97,22 +98,11 @@ #define FONT_TIZENSANS_LIGHT "BreezeSans:style=Light" /* String */ -#define STR_APPS "Apps" -#define STR_MYAPPS "My Apps" -#define STR_APPSTORE "App Store" -#define STR_RECENT "Recent" -#define STR_A_TO_Z "A-Z" -#define STR_Z_TO_A "Z-A" +#define STR_APPS "Files" +#define STR_MYAPPS "My Files" #define STR_NULL "(NULL)" #define STR_NO_CONTENTS "No Contents" -#define STR_BROWSER "Web Browser" #define STR_NOT_SUPPORTED "Not Supported" -#define STR_LIVETV "Live TV" -#define STR_FAVORITE "Favorite" -#define STR_UNINSTALL "Uninstall" -#define STR_NO_FAVORITE "No favorite contents" -#define STR_ADD_FAVORITE "Added to your favorite." -#define STR_REMOVE_FAVORITE "Removed from your favorite." #define STR_WGT "wgt" #define STR_TPK "tpk" #define STR_OK "Ok" diff --git a/include/dialog_popup_view.h b/include/dialog_popup_view.h new file mode 100644 index 0000000..a0880cb --- /dev/null +++ b/include/dialog_popup_view.h @@ -0,0 +1,58 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + + +#ifndef __AIR_MYFILES_DIALOG_POPUP_VIEW_H__ +#define __AIR_MYFILES_DIALOG_POPUP_VIEW_H__ + +/* Sample code for creating a popup window + + dialog_popup_info_t sample_dialog; + + sample_dialog.dialog_popup_type = DIALOG_POPUP_TYPE_INPUT_NAME; + sample_dialog.title = "SAMPLE TITLE"; + sample_dialog.content = "SAMPLE CONTENT"; + sample_dialog.button_1_text = "BUTTON 1"; + sample_dialog.button_2_text = "BUTTON 2"; + + dialog_popup_create(priv->base, &sample_dialog); +*/ + +/* Definitions of macro or type */ + +/* Dialog popup types */ +typedef enum _dialog_popup_type { + DIALOG_POPUP_TYPE_YES_OR_CANCEL = 1, + DIALOG_POPUP_TYPE_INPUT_NAME = 2, + DIALOG_POPUP_TYPE_CONFIGURATION = 3, +} dialog_popup_type_e; + +typedef struct _dialog_popup_info_t { + dialog_popup_type_e dialog_popup_type; + char *title; + char *content; + char *button_1_text; + char *button_2_text; + /* Button event handler is required */ +} dialog_popup_info_t; + +/* Functions */ +Evas_Object *dialog_popup_create(Evas_Object *win, dialog_popup_info_t *dialog_popup_info); + +#endif /* __AIR_MYFILES_DIALOG_POPUP_VIEW_H__ */ + + + diff --git a/res/myfiles.edc b/res/myfiles.edc index 902b5ba..10282ac 100644 --- a/res/myfiles.edc +++ b/res/myfiles.edc @@ -18,4 +18,6 @@ collections { base_scale, 2.0; -} + + #include "view/dialog_popup_view.edc" +} \ No newline at end of file diff --git a/res/view/dialog_popup_view.edc b/res/view/dialog_popup_view.edc new file mode 100644 index 0000000..bd5e968 --- /dev/null +++ b/res/view/dialog_popup_view.edc @@ -0,0 +1,299 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../../include/define.h" + +group { + name: GRP_DIALOG_POPUP; + parts { + part { + name: "dimmed_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 0 0 0 100; + visible: 1; + } + } + part { + name: "popup_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 255 255 255 255; + visible: 1; + rel1 { + relative: 0.3 0.3; + to : "dimmed_bg"; + } + rel2 { + relative: 0.7 0.7; + to : "dimmed_bg"; + } + } + } + part { + name: "padding.title.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "popup_bg"; + } + rel2 { + relative: 0.1 1.0; + to: "popup_bg"; + } + align: 0.0 0.5; + } + } + part { + name: "padding.title.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.9 0.0; + to: "popup_bg"; + } + rel2 { + relative: 1.0 1.0; + to: "popup_bg"; + } + align: 0.0 0.0; + } + } + part { + name: "padding.title.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 34; + rel1 { + relative: 0.0 0.0; + to: "popup_bg"; + } + rel2 { + relative: 1.0 0.0; + to: "popup_bg"; + } + align: 0.5 0.0; + fixed: 1 0; + } + part { + name: "part_title_label"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to_x: "padding.title.left"; + to_y: "padding.title.top"; + relative: 1.0 1.0; + } + rel2 { + to_x: "padding.title.left"; + to_y: "padding.title.top"; + relative: 1.0 1.0; + } + text { + font: FONT_LIGHT; + text: "TITLE"; + size: 32; + min: 1 1; + ellipsis: -1; + } + color: 51 51 51 255; + min: 0 32; + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "padding.content.top"; + type: SPACER; + scale: 1; + description { + min: 0 20; + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to: "part_title_label"; + } + rel2 { + relative: 1.0 1.0; + to: "part_title_label"; + } + align: 0.5 0.0; + fixed: 0 0; + } + } + part { + name: "part_content_swallow"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to_x: "padding.title.left"; + to_y: "padding.content.top"; + relative: 1.0 1.0; + } + rel2 { + to_x: "padding.title.right"; + to_y: "padding.divider.top"; + relative: 0.0 0.0; + } + visible: 1; + } + } + part { + name: "padding.divider.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 0; + rel1 { + to: "popup_bg"; + relative: 0.0 0.75; + } + rel2 { + to: "popup_bg"; + relative: 1.0 0.75; + } + align: 0.0 0.5; + fixed: 0 0; + } + } + part { + name: "part_divider"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding.divider.top"; + relative: 0.0 1.0; + } + rel2 { + to: "padding.divider.top"; + relative: 1.0 1.0; + } + min: 0 1; + color: 204 204 204 255; + visible: 1; + } + } + part { + name: "padding.buttons"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 1.0; + to: "part_divider"; + } + rel2 { + relative: 1.0 1.0; + to: "popup_bg"; + } + align: 0.0 0.0; + } + } + part { + name: "padding.buttons.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "padding.buttons"; + } + rel2 { + relative: 1.0 0.15; + to: "padding.buttons"; + } + align: 0.0 0.0; + } + } + part { + name: "padding.buttons.bottom"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.85; + to: "padding.buttons"; + } + rel2 { + relative: 1.0 1.0; + to: "padding.buttons"; + } + align: 0.0 0.0; + } + } + part { + name: "part_button_1"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.02 1.0; + to: "padding.buttons.top"; + } + rel2 { + relative: 0.49 0.0; + to: "padding.buttons.bottom"; + } + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "part_button_2"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.51 1.0; + to: "padding.buttons.top"; + } + rel2 { + relative: 0.98 0.0; + to: "padding.buttons.bottom"; + } + visible: 1; + align: 0.0 0.0; + } + } + } + } +} diff --git a/src/view/dialog_popup_view.c b/src/view/dialog_popup_view.c new file mode 100644 index 0000000..d0b9e1c --- /dev/null +++ b/src/view/dialog_popup_view.c @@ -0,0 +1,190 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include + + +#include "define.h" +#include "utils.h" +#include "view.h" +#include "dialog_popup_view.h" + + +Evas_Object *dialog_popup_create(Evas_Object *win, dialog_popup_info_t *dialog_popup_info) +{ + Evas_Object *dialog_popup = NULL; + Evas_Object *window_layout = NULL; + Evas_Object *button_1 = NULL, *button_2 = NULL; + Evas_Object *scroller = NULL; + Evas_Object *content_label = NULL; + Evas_Object *content_check = NULL; + Evas_Object *content_entry = NULL; + Evas *e = NULL; + Ecore_Evas *ee = NULL; + Eina_Bool result = EINA_FALSE; + + char *content = NULL; + int screen_x = 0, screen_y = 0, screen_w = 0, screen_h = 0; + + if (dialog_popup_info == NULL) { + _ERR("dialog_popup_info is null"); + goto out; + } + + /* Creating a Notification Window */ + dialog_popup = elm_win_add(NULL, "dialog_popup", ELM_WIN_BASIC); + + if (dialog_popup == NULL) { + _ERR("elm_win_add failed"); + goto out; + } + + e = evas_object_evas_get(dialog_popup); + if (!e) { + _ERR("evas_object_evas_get failed"); + evas_object_del(dialog_popup); + dialog_popup = NULL; + goto out; + } + + ee = ecore_evas_ecore_evas_get(e); + if (!ee) { + _ERR("ecore_evas_ecore_evas_get failed"); + evas_object_del(dialog_popup); + dialog_popup = NULL; + goto out; + } + + elm_win_alpha_set(dialog_popup, EINA_TRUE); + elm_win_borderless_set(dialog_popup, EINA_TRUE); + elm_win_autodel_set(dialog_popup, EINA_TRUE); + + elm_win_screen_size_get(dialog_popup, &screen_x, &screen_y, &screen_w, &screen_h); + evas_object_resize(dialog_popup, screen_w, screen_h); + + /* Layout */ + window_layout = elm_layout_add(dialog_popup); + result = elm_layout_file_set(window_layout, EDJEFILE, GRP_DIALOG_POPUP); + _DBG("Layout elm_layout_file_set for [%s] returns [%d]", EDJEFILE, result); + evas_object_resize(window_layout, screen_w, screen_h); + evas_object_show(window_layout); + + /* content - title */ + if (dialog_popup_info->title) { + elm_object_part_text_set(window_layout, "part_title_label", dialog_popup_info->title); + } + + /* content - scroller */ + scroller = elm_scroller_add(window_layout); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_object_part_content_set(window_layout, "part_content_swallow", scroller); + elm_object_scale_set(scroller, 1/edje_scale_get()); + evas_object_show(scroller); + + if (dialog_popup_info->dialog_popup_type == DIALOG_POPUP_TYPE_INPUT_NAME) { + /* entry */ + content_entry = elm_entry_add (scroller); + + if (content_entry == NULL) { + _ERR("elm_entry_add failed"); + goto out; + } + + elm_entry_single_line_set(content_entry, EINA_TRUE); + elm_entry_editable_set(content_entry, EINA_TRUE); + elm_object_content_set(scroller, content_entry); + + if (dialog_popup_info->content) { + elm_object_text_set(content_entry, dialog_popup_info->content); + } + + evas_object_show(content_entry); + } + else if (dialog_popup_info->dialog_popup_type == DIALOG_POPUP_TYPE_CONFIGURATION) + { + /* check */ + content_check = elm_check_add(scroller); + if (content_check == NULL) { + _ERR("elm_check_add failed"); + goto out; + } + + if (dialog_popup_info->content) { + elm_object_text_set(content_check, dialog_popup_info->content); + } + elm_object_content_set(scroller, content_check); + evas_object_show(content_check); + } + else { + /* label */ + int content_len = 0; + int buffer_size = 0; + const char *start_tag = ""; + const char *end_tag = ""; + + content_label = elm_label_add(scroller); + + if (content_label == NULL) { + _ERR("elm_label_add failed"); + goto out; + } + + elm_label_line_wrap_set(content_label, ELM_WRAP_WORD); + elm_label_wrap_width_set(content_label, 563); + + if (dialog_popup_info->content) { + content_len = strlen(dialog_popup_info->content); + buffer_size = strlen(start_tag) + content_len + strlen(end_tag); + content = (char*)calloc(buffer_size + 1, sizeof(char)); + snprintf(content, buffer_size, "%s%s%s", start_tag, dialog_popup_info->content, end_tag); + elm_object_text_set(content_label, content); + } + elm_object_content_set(scroller, content_label); + evas_object_show(content_label); + } + + /* buttons */ + button_1 = elm_button_add(window_layout); + if (dialog_popup_info->button_1_text) { + elm_object_text_set(button_1, dialog_popup_info->button_1_text); + } + elm_object_focus_allow_set(button_1, EINA_TRUE); + elm_object_part_content_set(window_layout, "part_button_1", button_1); + evas_object_show(button_1); + + button_2 = elm_button_add(window_layout); + if (dialog_popup_info->button_2_text) { + elm_object_text_set(button_2, dialog_popup_info->button_2_text); + } + elm_object_focus_allow_set(button_2, EINA_TRUE); + elm_object_part_content_set(window_layout, "part_button_2", button_2); + evas_object_show(button_2); + + evas_object_show(dialog_popup); + elm_win_activate(dialog_popup); + +out: + if(content != NULL) + free(content); + + return dialog_popup; +} diff --git a/src/view/view_base.c b/src/view/view_base.c index e28b89c..b97e10b 100644 --- a/src/view/view_base.c +++ b/src/view/view_base.c @@ -25,6 +25,7 @@ #include "define.h" #include "utils.h" #include "view.h" +#include "dialog_popup_view.h" enum menu_type { MENU_MYAPPS = 0, @@ -33,17 +34,9 @@ enum menu_type { const char *str_menu[] = { STR_MYAPPS, - STR_APPSTORE, NULL }; - -const char *str_sort_opt[] = { - STR_RECENT, - STR_A_TO_Z, - STR_Z_TO_A, -}; - struct _priv { Evas_Object *win; Evas_Object *base; -- 2.7.4 From 630352306d07fa1755f59a9c7bae3f777833d18d Mon Sep 17 00:00:00 2001 From: Hyerim Kim Date: Tue, 10 May 2016 14:48:32 +0900 Subject: [PATCH 4/6] Implementation air_myfiles - display root view - folder list - file list - popup window(sub menu) Change-Id: Ic2ab6ca737fd1da5bed925056813a8005a47a0c5 Signed-off-by: Hyerim Kim --- CMakeLists.txt | 20 +- include/data.h | 105 ++ include/define.h | 91 +- include/layout.h | 23 + include/layout/default.h | 23 + .../{dialog_popup_view.h => util/dialog_popup.h} | 4 +- include/util/file-util.h | 45 + include/util/fs-error.h | 127 ++ include/util/fs-util.h | 393 ++++++ include/{ => util}/utils.h | 3 + include/view.h | 13 +- org.tizen.myfiles.xml.in | 7 +- packaging/org.tizen.myfiles.spec | 12 +- res/edc/layout/default.edc | 139 ++ res/edc/view/base.edc | 306 ++++ res/edc/view/dialog_popup.edc | 466 ++++++ res/edc/view/select_folder_view.edc | 181 +++ res/edc/view/submenu_view.edc | 64 + res/edc/widget/button.edc | 409 ++++++ res/edc/widget/gengrid.edc | 329 +++++ res/edc/widget/genlist.edc | 1098 +++++++++++++++ res/images/U01_subdepth_folder_arrow.png | Bin 1154 -> 1150 bytes res/images/gengrid/00_check_activate.png | Bin 1380 -> 1376 bytes res/images/gengrid/00_check_bg.png | Bin 2886 -> 2873 bytes res/images/gengrid/00_check_bg_ef.png | Bin 2894 -> 2881 bytes res/images/gengrid/00_check_bg_line.png | Bin 2896 -> 2883 bytes res/images/gengrid/00_check_focus.png | Bin 1082 -> 1078 bytes res/images/gengrid/00_focus_01.#.png | Bin 2864 -> 2850 bytes res/images/gengrid/my_files_sd_card.png | Bin 1196 -> 1193 bytes res/images/gengrid/myfile_icon_video_play.png | Bin 3814 -> 3799 bytes res/images/icon/00_nocontents_devices.png | Bin 20563 -> 20481 bytes res/images/icon/00_nocontents_multimedia.png | Bin 44733 -> 44505 bytes res/images/icon/00_nocontents_picture.png | Bin 20051 -> 19965 bytes res/images/icon/00_nocontents_text.png | Bin 24308 -> 24215 bytes res/images/icon/T01_2_button_expand_cancel.png | Bin 3759 -> 3745 bytes res/images/icon/my_files_folder_favorite.png | Bin 3324 -> 3312 bytes res/images/icon/my_files_sd_card.png | Bin 3010 -> 2996 bytes res/images/icon/myfile_controlbar_cion_home.png | Bin 1207 -> 1202 bytes .../icon/myfile_controlbar_cion_up_folder.png | Bin 1191 -> 1189 bytes res/images/icon/myfile_icon_amr.png | Bin 2714 -> 2706 bytes res/images/icon/myfile_icon_default_albumart.jpg | Bin 154239 -> 153883 bytes res/images/icon/myfile_icon_email.png | Bin 2200 -> 2190 bytes res/images/icon/myfile_icon_etc.png | Bin 1505 -> 1498 bytes res/images/icon/myfile_icon_excel.png | Bin 4225 -> 4202 bytes res/images/icon/myfile_icon_folder.png | Bin 3208 -> 3195 bytes res/images/icon/myfile_icon_folder_sdcard.png | Bin 1877 -> 1874 bytes res/images/icon/myfile_icon_html.png | Bin 3062 -> 3057 bytes res/images/icon/myfile_icon_hwp.png | Bin 2699 -> 2688 bytes res/images/icon/myfile_icon_images.png | Bin 3954 -> 3936 bytes res/images/icon/myfile_icon_java.png | Bin 3005 -> 2991 bytes res/images/icon/myfile_icon_music.png | Bin 4031 -> 4016 bytes res/images/icon/myfile_icon_pdf.png | Bin 4398 -> 4383 bytes res/images/icon/myfile_icon_ppt.png | Bin 3784 -> 3766 bytes .../icon/myfile_icon_root_folder_device_memory.png | Bin 2913 -> 2899 bytes res/images/icon/myfile_icon_rss.png | Bin 2870 -> 2854 bytes res/images/icon/myfile_icon_select_all.png | Bin 3394 -> 3381 bytes res/images/icon/myfile_icon_snb.png | Bin 2270 -> 2261 bytes res/images/icon/myfile_icon_soft_back.png | Bin 2128 -> 2120 bytes res/images/icon/myfile_icon_soft_search_back.png | Bin 1625 -> 1623 bytes res/images/icon/myfile_icon_story.png | Bin 3009 -> 2999 bytes res/images/icon/myfile_icon_svg.png | Bin 2861 -> 2851 bytes res/images/icon/myfile_icon_swf.png | Bin 2260 -> 2255 bytes res/images/icon/myfile_icon_task.png | Bin 2169 -> 2159 bytes res/images/icon/myfile_icon_text.png | Bin 1780 -> 1777 bytes res/images/icon/myfile_icon_tpk.png | Bin 3363 -> 3352 bytes res/images/icon/myfile_icon_vText.png | Bin 2050 -> 2038 bytes res/images/icon/myfile_icon_vcalender.png | Bin 3689 -> 3676 bytes res/images/icon/myfile_icon_vcard.png | Bin 3998 -> 3982 bytes res/images/icon/myfile_icon_video.png | Bin 3778 -> 3761 bytes res/images/icon/myfile_icon_video_play.png | Bin 1963 -> 1960 bytes res/images/icon/myfile_icon_word.png | Bin 2666 -> 2660 bytes res/images/icon/myfile_icon_zip.png | Bin 1778 -> 1774 bytes res/images/icon/myfile_search_category_all.png | Bin 1051 -> 1048 bytes res/images/icon/myfile_search_category_doc.png | Bin 1009 -> 1006 bytes res/images/icon/myfile_search_category_img.png | Bin 1168 -> 1163 bytes res/images/icon/myfile_search_category_snd.png | Bin 1109 -> 1104 bytes res/images/icon/myfile_search_category_video.png | Bin 1206 -> 1200 bytes res/images/icon/myfile_title_icon_search.png | Bin 1361 -> 1355 bytes res/images/icon_button_more.png | Bin 1251 -> 1249 bytes res/images/icon_button_more_rotation.png | Bin 1316 -> 1313 bytes res/images/my_files_sd_card.png | Bin 1196 -> 1193 bytes res/myfiles-theme.edc | 5 +- res/myfiles.edc | 9 +- res/view/dialog_popup_view.edc | 299 ---- src/layout/default.c | 868 ++++++++++++ src/main.c | 13 +- .../dialog_popup_view.c => util/dialog_popup.c} | 119 +- src/util/file-attr.c | 1489 ++++++++++++++++++++ src/util/file-error.c | 70 + src/util/file-util.c | 313 ++++ src/util/fs-util.c | 337 +++++ src/util/utils.c | 884 ++++++++++++ src/utils.c | 455 ------ src/view/base.c | 448 ++++++ src/view/view_base.c | 271 ---- 95 files changed, 8317 insertions(+), 1121 deletions(-) mode change 100644 => 100755 CMakeLists.txt create mode 100755 include/data.h mode change 100644 => 100755 include/define.h create mode 100755 include/layout.h create mode 100755 include/layout/default.h rename include/{dialog_popup_view.h => util/dialog_popup.h} (91%) mode change 100644 => 100755 create mode 100755 include/util/file-util.h create mode 100755 include/util/fs-error.h create mode 100755 include/util/fs-util.h rename include/{ => util}/utils.h (94%) mode change 100644 => 100755 mode change 100644 => 100755 include/view.h mode change 100644 => 100755 org.tizen.myfiles.xml.in mode change 100644 => 100755 packaging/org.tizen.myfiles.spec create mode 100755 res/edc/layout/default.edc create mode 100755 res/edc/view/base.edc create mode 100755 res/edc/view/dialog_popup.edc create mode 100755 res/edc/view/select_folder_view.edc create mode 100755 res/edc/view/submenu_view.edc create mode 100755 res/edc/widget/button.edc create mode 100755 res/edc/widget/gengrid.edc create mode 100755 res/edc/widget/genlist.edc mode change 100644 => 100755 res/myfiles-theme.edc mode change 100644 => 100755 res/myfiles.edc delete mode 100644 res/view/dialog_popup_view.edc create mode 100755 src/layout/default.c mode change 100644 => 100755 src/main.c rename src/{view/dialog_popup_view.c => util/dialog_popup.c} (57%) mode change 100644 => 100755 create mode 100755 src/util/file-attr.c create mode 100755 src/util/file-error.c create mode 100755 src/util/file-util.c create mode 100755 src/util/fs-util.c create mode 100755 src/util/utils.c delete mode 100644 src/utils.c create mode 100755 src/view/base.c delete mode 100644 src/view/view_base.c diff --git a/CMakeLists.txt b/CMakeLists.txt old mode 100644 new mode 100755 index 2995c62..545661c --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -20,10 +20,19 @@ PROJECT("myfiles" C) INCLUDE(FindPkgConfig) pkg_check_modules(PKGS REQUIRED elementary + glib-2.0 + libexif capi-appfw-application + capi-appfw-package-manager app-utils pkgmgr-info capi-appfw-package-manager + storage + capi-content-media-content + capi-base-utils-i18n + capi-media-metadata-extractor + capi-content-mime-type + libtzplatform-config ) IF(NOT DEFINED PACKAGE_NAME) @@ -50,9 +59,14 @@ ENDIF(NOT DEFINED PACKAGEDIR) SET(SRCS src/main.c - src/utils.c - src/view/view_base.c - src/view/dialog_popup_view.c + src/view/base.c + src/layout/default.c + src/util/utils.c + src/util/dialog_popup.c + src/util/file-attr.c + src/util/fs-util.c + src/util/file-util.c + src/util/file-error.c ) SET(TARGET_EDJ "${PROJECT_NAME}.edj") diff --git a/include/data.h b/include/data.h new file mode 100755 index 0000000..fb231be --- /dev/null +++ b/include/data.h @@ -0,0 +1,105 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include + +#include "util/fs-util.h" + +#ifndef __AIR_MYFILES_DATA_H__ +#define __AIR_MYFILES_DATA_H__ + +typedef struct list_data { + int folder_count; + int file_count; + + Eina_List *file_list; + Eina_List *folder_list; + + int depth; + + char *path; +} list_data_s ; + +struct _priv { + Evas_Object *win; + Evas_Object *base; + Evas_Object *layout; + Evas_Object *menu_btn; + Evas_Object *view_btn; + Evas_Object *popup_win; + Evas_Object *popup_base; + + Evas_Object *icon1; + Evas_Object *icon2; + + layoutmgr *lmgr; + + const char* selected_folder; + char* selected_parent_path; + + int same; + int expanded; +}; + +typedef struct path_item_data { + int index; + Elm_Object_Item *item; + + const char *selected_folder; + char *parent_path; + char *full_path; + + int level; + int expanded; +} path_item_data_s ; + +typedef struct item_data { + int index; + Elm_Object_Item *item; + + int folder_count; + int file_count; + + Eina_List *file_list; + Eina_List *folder_list; + + const char *last_path; + + int is_home; + char *selected_folder_path; + Eina_List *child; + Eina_List *child_file_size; + char *parent_path; + + int is_empty; + int expanded; + int level; + + char *name; + char *file_size; + + fsNodeInfo *node; + fsFileType type; + + Evas_Object *base; + Evas_Object *layout; +} item_data_s; + +#endif /* __AIR_MYFILES_DATA_H__ */ diff --git a/include/define.h b/include/define.h old mode 100644 new mode 100755 index 01be3d9..1159946 --- a/include/define.h +++ b/include/define.h @@ -17,23 +17,36 @@ #ifndef __AIR_MYFILES_DEFINE_H__ #define __AIR_MYFILES_DEFINE_H__ +#include "layout/default.h" + +/* Definitions for common */ +#define SOURCE_PROGRAM "program" +#define SOURCE_ELM "elm" +#define SOURCE_EDC "edc" + /* View ID */ #define VIEW_BASE "VIEW_BASE" -#define VIEW_ACTION_MENU "VIEW_ACTION_MENU" /* Layout ID */ -#define LAYOUT_MYFILES "LAYOUT_FILES" +#define LAYOUT_MYFILES "LAYOUT_MYFILES" /* Group for EDC */ -#define GRP_VIEW_BASE "grp.view.base" -#define GRP_VIEW_ACTION_MENU "grp.view.action.menu" +#define GRP_LAYOUT_BASE "grp.layout.base" +#define GRP_VIEW_SUBMENU "grp.view.submenu" +#define GRP_VIEW_SELECT_FOLDER "grp.view.select.folder" #define GRP_ACTION_MENU_CONTENTS "grp.action.menu.contents" -#define GRP_ACTION_MENU_NO_FAVORITE "grp.action.menu.no.favorite" #define GRP_DIALOG_POPUP "grp.dialog.popup" +#define GRP_DIALOG_POPUP_NO_TITLE "grp.dialog.popup.notitle" + +#define GRP_VIEW_DEFAULT "grp.view.default" +#define GRP_VIEW_SELECT "grp.view.select" /* Part for EDC */ +#define PART_BG "part.bg" #define PART_TOP_TITLE "part.top.title" +#define PART_TOP_TITLE_BG "part.top.title.bg" #define PART_MENU "part.menu" +#define PART_CONFIRM "part.confirm" #define PART_SORT "part.sort" #define PART_GENGRID "part.gengrid" #define PART_APP_COUNT "part.app.count" @@ -51,12 +64,20 @@ #define PART_POPUP_TITLE "title,text" #define PART_ACTION_MENU "part.action.menu" +#define PART_FILE_PATH "part.file.path" +#define PART_FILE_PATH_BG "part.file.path.bg" +#define PART_CONTENT_AREA "part.content.area" +#define PART_CONTENT_AREA_BG "part.content.area.bg" +#define PART_FOLDER_LIST "part.folder.list" +#define PART_FOLDER_LIST_BG "part.folder.list.bg" +#define PART_FILE_LIST "part.file.list" +#define PART_FILE_LIST_BG "part.file.list.bg" + /* State for EDC */ #define STATE_BROWSER "is_browser" #define STATE_NOT_BROWSER "not_browser" /* Style */ -#define STYLE_MENU_BTN "style.menu.button" #define STYLE_SORT_BTN "style.sort.button" #define STYLE_OPTION_BTN "style.option.button" #define STYLE_CTXPOPUP "style.ctxpopup" @@ -69,21 +90,24 @@ #define STYLE_TOAST "style.toast" /* Signal */ -#define SIG_FOCUSED "focused" -#define SIG_UNFOCUSED "unfocused" -#define SIG_SELECTED "selected" -#define SIG_UNSELECTED "unselected" -#define SIG_SOURCE_EDC "edc" -#define SIG_FAVORITE "favorite" -#define SIG_UNFAVORITE "unfavorite" +#define SIGNAL_FOCUSED "elm,action,focus" +#define SIGNAL_UNFOCUSED "elm,action,unfocus" +#define SIGNAL_DISABLED "elm,state,disabled" +#define SIGNAL_ITEM_SELECTED "item,selected" +#define SIGNAL_ITEM_UNSELECTED "item,unselected" +#define SIGNAL_NO_NOTIFICATION "signal.no_notification" +#define SIGNAL_NOTIFICATION "signal.notification" +#define SIGNAL_TOGGLE "elm,state,toggle" +#define SIGNAL_UNTOGGLE "elm,state,untoggle" +#define SIGNAL_CHILD_REMOVED "child,removed" +#define SIGNAL_SHOW "show" +#define SIGNAL_HIDE "hide" +#define SIGNAL_HIDE_FINISHED "elm,action,hide,finished" + #define SIG_VISIBLE "visible" #define SIG_INVISIBLE "invisible" -#define SIG_DISABLE "elm,state,disabled" -#define SIG_TOGGLE "toggle" +#define SIG_UNSELECTED "unselected" #define SIG_TIMEOUT "timeout" -#define SIG_SHOW "show" -#define SIG_HIDE "hide" -#define SIG_HIDE_DONE "hide.done" /* Signal Source */ #define SRC_MYAPPS "source.myapps" @@ -98,19 +122,28 @@ #define FONT_TIZENSANS_LIGHT "BreezeSans:style=Light" /* String */ -#define STR_APPS "Files" -#define STR_MYAPPS "My Files" -#define STR_NULL "(NULL)" -#define STR_NO_CONTENTS "No Contents" -#define STR_NOT_SUPPORTED "Not Supported" -#define STR_WGT "wgt" -#define STR_TPK "tpk" -#define STR_OK "Ok" -#define STR_CANCEL "Cancel" -#define STR_MORE "More" +#define STR_MYFILES "My Files" +#define STR_APPSTORE "App Store" +#define STR_RECENT "Recent" +#define STR_A_TO_Z "A-Z" +#define STR_Z_TO_A "Z-A" +#define STR_SELECT_TARGET_FOLDER "Select target folder" +#define STR_NEW_FOLDER "New Folder" +#define STR_MENU_COPY "Copy" +#define STR_MENU_MOVE "Move" +#define STR_MENU_RENAME "Rename" +#define STR_MENU_NEW_FOLDER "New folder" +#define STR_MENU_DELETE "Delete" +#define STR_MENU_SETTING "Setting" +#define STR_SETTING_SHOW_HIDDEN_FILE "Show hidden files" +#define STR_DELETE_CONFIRM "Delete?" +#define STR_NEW_FOLDER_TITLE "New folder" +#define STR_RENAME_TITLE "Rename" +#define STR_NEW_FOLDER_ENTRY "Input folder name" +#define STR_RENAME_ENTRY "Input folder/file name" /* Count */ -#define MENU_COUNT 1 +#define MENU_COUNT 2 #define SORT_COUNT 3 #define ACTION_MENU_COUNT 2 diff --git a/include/layout.h b/include/layout.h new file mode 100755 index 0000000..0294197 --- /dev/null +++ b/include/layout.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __AIR_MYFILES_LAYOUT_H__ +#define __AIR_MYFILES_LAYOUT_H__ + +layout_class *layout_default_get_lclass(void); +layout_class *layout_select_get_lclass(void); + +#endif /* __AIR_MYFILES_LAYOUT_H__ */ diff --git a/include/layout/default.h b/include/layout/default.h new file mode 100755 index 0000000..4fcfe28 --- /dev/null +++ b/include/layout/default.h @@ -0,0 +1,23 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#ifndef __AIR_MYFILES_LAYOUT_DEFAULT_H__ +#define __AIR_MYFILES_LAYOUT_DEFAULT_H__ + +/* layout */ +#define LAYOUT_DEFAULT "LAYOUT_DEFAULT" + +#endif /* __AIR_MYFILES_LAYOUT_DEFAULT_H__ */ diff --git a/include/dialog_popup_view.h b/include/util/dialog_popup.h old mode 100644 new mode 100755 similarity index 91% rename from include/dialog_popup_view.h rename to include/util/dialog_popup.h index a0880cb..791e55d --- a/include/dialog_popup_view.h +++ b/include/util/dialog_popup.h @@ -38,6 +38,7 @@ typedef enum _dialog_popup_type { DIALOG_POPUP_TYPE_YES_OR_CANCEL = 1, DIALOG_POPUP_TYPE_INPUT_NAME = 2, DIALOG_POPUP_TYPE_CONFIGURATION = 3, + DIALOG_POPUP_TYPE_SUBMENU = 4, } dialog_popup_type_e; typedef struct _dialog_popup_info_t { @@ -46,11 +47,12 @@ typedef struct _dialog_popup_info_t { char *content; char *button_1_text; char *button_2_text; + void *data; /* Button event handler is required */ } dialog_popup_info_t; /* Functions */ -Evas_Object *dialog_popup_create(Evas_Object *win, dialog_popup_info_t *dialog_popup_info); +Evas_Object *dialog_popup_create(/*Evas_Object *win, */dialog_popup_info_t *dialog_popup_info); #endif /* __AIR_MYFILES_DIALOG_POPUP_VIEW_H__ */ diff --git a/include/util/file-util.h b/include/util/file-util.h new file mode 100755 index 0000000..df1b252 --- /dev/null +++ b/include/util/file-util.h @@ -0,0 +1,45 @@ +/* +* Copyright 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MF_FILE_UTIL_H__ +#define __MF_FILE_UTIL_H__ + +#include +#include +#include +#include +#include +#include + +const char* mf_file_get(const char path[]); +char* mf_dir_get(const char path[]); +int mf_file_exists(const char *path); +Eina_Bool mf_is_dir(const char *path); +int mf_is_dir_empty(const char *path); +int mf_mkdir(const char *dir); +int mf_mkpath(const char *path); +char *mf_strip_ext(const char *path); +int mf_file_unlink(const char *filename); +int mf_file_size(const char *filename); +int mf_file_rmdir(const char *filename); +Eina_List *mf_file_ls(const char *dir); +int mf_file_recursive_rm(const char *dir); +int mf_file_cp(const char *src, const char *dst); +int mf_file_mv(const char *src, const char *dst); +int mf_remove(const char *filename); + +#endif /*__mf_FILE_UTIL_H__*/ diff --git a/include/util/fs-error.h b/include/util/fs-error.h new file mode 100755 index 0000000..9680101 --- /dev/null +++ b/include/util/fs-error.h @@ -0,0 +1,127 @@ +/* +* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MF_ERROR_H_DEF__ +#define __MF_ERROR_H_DEF__ + +#include + +#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 */ + +#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_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_STORAGE_FAIL (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x3c)) /**< get storage 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_STORAGE_GET_FAILED (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x48)) /**< get STORAGE value failed */ +#define MYFILE_ERR_PERMISSION_DENY (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x49)) +#define MYFILE_ERR_FAULT (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x4a)) +#define MYFILE_ERR_READ_ONLY (MID_CONTENTS_MGR_ERROR - MF_ERROR_SET(0x4b)) + +int mf_error_erron_to_mferror(int err_no); + +#define mf_error(fmt, args...) do { \ + printf("[MYFILE][E][%40s:%4d] "fmt"\n", __func__, __LINE__, ##args); \ + MF_LOG_RECORD(fmt, ##args); \ + } while (0) + +#endif /*__MF_ERROR_H_DEF__*/ diff --git a/include/util/fs-util.h b/include/util/fs-util.h new file mode 100755 index 0000000..b36628f --- /dev/null +++ b/include/util/fs-util.h @@ -0,0 +1,393 @@ +/* +* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef _MYFILE_FILESYSTEM_UTIL_H_ +#define _MYFILE_FILESYSTEM_UTIL_H_ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#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) + +#define mf_genlist_item_class_free(x) do { \ + if (x) { \ + elm_genlist_item_class_free(x);\ + x = NULL; \ + } \ + } while (0) + +int mf_file_attr_get_parent_path(const char *path, char **parent_path); + +static inline char *Get_Root_Path(int storage_id) +{ + char *path = NULL; + storage_get_root_directory(storage_id, &path) ; + return path; +} + +static inline char *Get_Parent_Path(int storage_id) +{ + char *path = NULL; + char *storage_path = NULL; + storage_get_root_directory(storage_id, &path); + if (path) { + mf_file_attr_get_parent_path(path, &storage_path); + free(path); + } + return storage_path; +} + + +/* File system related value definition */ +#define MYFILE_FILE_NAME_CHAR_COUNT_MAX 50 +#define MYFILE_FILE_NAME_LEN_MAX 255 /* use g_utf8_strlen to check length*/ +#define MYFILE_FILE_PATH_LEN_MAX 4096 /* 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 Get_Root_Path(STORAGE_TYPE_INTERNAL) +#define MEMORY_FOLDER Get_Root_Path(STORAGE_TYPE_EXTERNAL) +#define PHONE_PARENT Get_Parent_Path(STORAGE_TYPE_INTERNAL) +#define STORAGE_PARENT Get_Parent_Path(STORAGE_TYPE_EXTERNAL) +#define PHONE_NAME "content" +#define MMC_NAME "2F72-0D21" + +#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 DEFAULT_FOLDER_VIDEO "Videos" +#define DEFAULT_FOLDER_MUSIC "Music" + +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 _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_TPK, /**< *.tpk>*/ + FILE_TYPE_SNB, /**<*.snb> */ + FILE_TYPE_GUL, /**<*.gul> */ + FILE_TYPE_HWP, /**<*.hwp> */ + FILE_TYPE_ETC, /**< Other files category */ + FILE_TYPE_TASK, + FILE_TYPE_EML, + FILE_TYPE_CSV, + FILE_TYPE_SPD, + FILE_TYPE_MAX +}; + +typedef enum _STORAGE MF_STORAGE; + +enum _STORAGE { + MYFILE_NONE = 0x00, + MYFILE_PHONE = 0x01, + MYFILE_MMC = 0x02, + 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 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 enum { + STORAGE_TYPE_NONE = 0, + STORAGE_TYPE_LABEL, + STORAGE_TYPE_LOCAL, + STORAGE_TYPE_MMC, + STORAGE_TYPE_MUSIC, + STORAGE_TYPE_IMAGE, + STORAGE_TYPE_VIDEO, + STORAGE_TYPE_DOCUMENT, + STORAGE_TYPE_STORAGE, +} storage_type; + +typedef struct _storage_info { + char *root_path; /**< Storage path */ + char *root_name; /**< Storage name */ + storage_type type; /**< Storage type */ + char *icon_path; + char *uuid; + double total; + double occupied; +} storage_info; + +typedef struct _node_info { + char *parent_path; /**< Node path */ + char *name; /**< Node name */ + fsFileType type; /**< Node type */ + char *thumb_path; + Eina_Bool is_selected; /**< Node selected or not */ + char *storage_name; + char *storage_uuid; +} node_info; + +#define GIGABYTE (1024.0*1024.0*1024.0) + +typedef struct _FS_NODE_INFO fsNodeInfo; +struct _FS_NODE_INFO { + char *path; + char *name; + i18n_udate date; + fsFileType type; + int storage_type; + int list_type; + char *ext; + off_t size; + char* thumbnail_path; + int thumbnail_type; + Elm_Object_Item *item; +}; + +#ifndef DEFAULT_ICON +#define DEFAULT_ICON "my_files_sd_card.png" +#endif + +#define MF_ICON_FOLDER "icon/myfile_icon_folder.png" +#define MF_ICON_IMAGE "icon/myfile_icon_images.png" +#define MF_ICON_VIDEO "icon/myfile_icon_video.png" +#define MF_ICON_MUSIC "icon/myfile_icon_music.png" +#define MF_ICON_SOUND "icon/myfile_icon_amr.png" +#define MF_ICON_PDF "icon/myfile_icon_pdf.png" +#define MF_ICON_DOC "icon/myfile_icon_word.png" +#define MF_ICON_PPT "icon/myfile_icon_ppt.png" +#define MF_ICON_EXCEL "icon/myfile_icon_excel.png" +#define MF_ICON_HTML "icon/myfile_icon_html.png" +#define MF_ICON_FLASH "icon/myfile_icon_swf.png" +#define MF_ICON_TXT "icon/myfile_icon_text.png" +#define MF_ICON_VCONTACT "icon/myfile_icon_vcard.png" +#define MF_ICON_VCALENDAR "icon/myfile_icon_vcalender.png" +#define MF_ICON_VNOTE "icon/myfile_icon_vText.png" +#define MF_ICON_RSS "icon/myfile_icon_rss.png" +#define MF_ICON_JAVA "icon/myfile_icon_java.png" +#define MF_ICON_MUSIC_PAUSE "icon/myfile_icon_control_pause.png" +#define MF_ICON_VIDEO_PLAY "icon/myfile_icon_video_play.png" +#define MF_ICON_TPK "icon/myfile_icon_tpk.png" +#define MF_ICON_SNB "icon/myfile_icon_snb.png" +#define MF_ICON_HWP "icon/myfile_icon_hwp.png" +#define MF_ICON_GUL "icon/myfile_icon_etc.png" +#define MF_ICON_EMAIL "icon/myfile_icon_email.png" +#define MF_ICON_TASK "icon/myfile_icon_task.png" +#define MF_ICON_ZIP "icon/myfile_icon_zip.png" +#define MF_ICON_SVG "icon/myfile_icon_svg.png" + +typedef enum __mf_list_type mf_list_type; +enum __mf_list_type { + mf_list_recent_files = 0, + mf_list_normal, +}; + +typedef enum __mf_thumbnail_type mf_thumbnail_type; +enum __mf_thumbnail_type { + MF_THUMBNAIL_TYPE_DEFAULT, + MF_THUMBNAIL_TYPE_THUMBNAIL, + MF_THUMBNAIL_TYPE_MAX +}; + +/*---------- File Attribute Related ----------*/ + +void mf_file_attr_get_file_size_info(char **file_size, off_t src_size); +int mf_file_attr_get_file_stat(const char *filename, fsNodeInfo **node); +int mf_file_attr_get_file_category(const char *filepath, fsFileType *category); +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_logical_path_by_full(const char *full_path, char **path); +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); +int mf_file_attr_get_file_mdate(const char *filename, i18n_udate *date); +int mf_file_attr_media_has_video(const char *filename); +int mf_file_attr_get_file_size(const char *filename, off_t *size); +int mf_file_attr_get_file_icon(const char *file_path, int *error_code, int view_type, char **thumbnail, media_info_h *media_info); +const char *mf_file_attr_get_recent_default_icon_by_type(fsFileType ftype); +const char *mf_file_attr_get_default_icon_by_type(fsFileType ftype); +fsFileType mf_file_attr_get_file_type_by_mime(const char *file_path); +fsFileType mf_file_attr_get_file_type(const char *mime); + +bool __mf_add_storage_info_to_list(media_storage_h storage, void *data); + +/*---------- File Operation Related ----------*/ +int mf_fs_oper_error(const char *src, const char *dst, int check_option); +int mf_fs_oper_read_dir(const char *path, Eina_List **dir_list, Eina_List **file_list); +int mf_fs_oper_create_dir(const char *dir); +int mf_fs_oper_rename_file(const char *src, const char *dst); +/*void mf_fs_oper_sort_list(Eina_List **list, int sort_opt); +int __mf_fs_oper_sort_by_name_cb_A2Z(const void *d1, const void *d2);*/ + +#endif /*_MYFILE_FILESYSTEM_UTIL_H_*/ diff --git a/include/utils.h b/include/util/utils.h old mode 100644 new mode 100755 similarity index 94% rename from include/utils.h rename to include/util/utils.h index 84c1cde..d6ed044 --- a/include/utils.h +++ b/include/util/utils.h @@ -18,6 +18,7 @@ #define __AIR_MYFILES_UTILS_H__ #include +#include "data.h" Evas_Object *utils_add_window(const char *name); Evas_Object *utils_add_layout(Evas_Object *parent, const char *group, @@ -42,5 +43,7 @@ Evas_Object *utils_add_scroller(Evas_Object *parent, const char *part, Evas_Object *content); bool utils_launch_app(const char *appid, const char *key, const char *value); bool utils_uninstall_app(const char *pkgid, const char *pkgtype); +void utils_show_submenu_popup(struct _priv *priv); +void utils_show_select_folder_popup(struct _priv *priv); #endif /* __AIR_MYFILES_UTILS_H__ */ diff --git a/include/view.h b/include/view.h old mode 100644 new mode 100755 index 3c41543..359a628 --- a/include/view.h +++ b/include/view.h @@ -18,13 +18,18 @@ #define __AIR_MYFILES_VIEW_H__ view_class *view_base_get_vclass(void); -view_class *view_action_menu_get_vclass(void); enum update_type { UPDATE_ID = 0, - UPDATE_FAVORITE, - UPDATE_GRID, - UPDATE_SHOW_TOAST, + UPDATE_FOLDER, + UPDATE_FILE, + UPDATE_FILE_TO_SELECT, + UPDATE_PATH, }; +enum base_view_layout { + E_LAYOUT_DEFAULT = 0, + E_LAYOUT_SELECT = 1, + E_LAYOUT_MAX +}; #endif /* __AIR_MYFILES_VIEW_H__ */ diff --git a/org.tizen.myfiles.xml.in b/org.tizen.myfiles.xml.in old mode 100644 new mode 100755 index 50651d3..4aaabcf --- a/org.tizen.myfiles.xml.in +++ b/org.tizen.myfiles.xml.in @@ -4,11 +4,16 @@ Kyuho Jo Hyerim Kim My files application - + @DESKTOP_ICON@ http://tizen.org/privilege/appmanager.launch + http://tizen.org/privilege/mediastorage + http://tizen.org/privilege/datasharing + http://tizen.org/privilege/packagemanager.info + http://tizen.org/privilege/externalstorage + http://tizen.org/privilege/content.write diff --git a/packaging/org.tizen.myfiles.spec b/packaging/org.tizen.myfiles.spec old mode 100644 new mode 100755 index 1c9f699..32e9003 --- a/packaging/org.tizen.myfiles.spec +++ b/packaging/org.tizen.myfiles.spec @@ -9,11 +9,21 @@ Source1: %{name}.manifest BuildRequires: cmake BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(glib-2.0) +BuildRequires: pkgconfig(libexif) BuildRequires: pkgconfig(capi-appfw-application) BuildRequires: pkgconfig(app-utils) BuildRequires: pkgconfig(pkgmgr-info) BuildRequires: pkgconfig(capi-appfw-package-manager) -BuildRequires: pkgconfig(libtzplatform-config) +BuildRequires: pkgconfig(storage) +BuildRequires: pkgconfig(capi-appfw-package-manager) +BuildRequires: pkgconfig(capi-content-media-content) +BuildRequires: pkgconfig(capi-base-utils-i18n) +BuildRequires: pkgconfig(capi-content-mime-type) +BuildRequires: pkgconfig(capi-media-metadata-extractor) +BuildRequires: pkgconfig(libtzplatform-config) + +BuildRequires: gettext-devel %define _appdir %{TZ_SYS_RO_APP}/%{name} %define _bindir %{_appdir}/bin diff --git a/res/edc/layout/default.edc b/res/edc/layout/default.edc new file mode 100755 index 0000000..ec98ce8 --- /dev/null +++ b/res/edc/layout/default.edc @@ -0,0 +1,139 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../../../include/define.h" + +group { + data.item: "focus_highlight" "on"; + name: GRP_VIEW_DEFAULT; + parts { + part { + name: PART_CONTENT_AREA_BG; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + color: 255 255 255 255; + visible: 1; + } + } + part { + name: PART_FOLDER_LIST_BG; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_CONTENT_AREA_BG; + relative: 0.0 0.0; + } + rel2 { + to: PART_CONTENT_AREA_BG; + relative: 0.35 1.0; + } + align: 0.0 0.0; + color: 244 244 244 255; + visible: 1; + } + } + part { + name: "folderlist.border"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_FOLDER_LIST; + relative: 0.0 1.0; + } + rel2 { + to: PART_FOLDER_LIST; + relative: 1.0 1.0; + } + align: 0.0 1.0; + color: 204 204 204 255; + min: 0 1; + fixed: 1 1; + visible: 1; + } + } + part { + name: PART_FOLDER_LIST; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: PART_FOLDER_LIST_BG; + rel2.to: PART_FOLDER_LIST_BG; + align: 0.0 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "folder.file.border"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: PART_FOLDER_LIST_BG; + rel1.relative: 1.0 0.0; + rel2.to: PART_FOLDER_LIST_BG; + rel2.relative: 1.0 1.0; + align: 1.0 0.0; + color: 0 0 0 255; + min: 1 0; + fixed: 1 1; + visible: 1; + } + } + part { + name: PART_FILE_LIST_BG; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_CONTENT_AREA_BG; + relative: 0.35 0.0; + } + rel2 { + to: PART_CONTENT_AREA_BG; + relative: 1.0 1.0; + } + align: 0.0 0.0; + color: 244 244 244 255; + visible: 1; + } + } + part { + name: PART_FILE_LIST; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: PART_FILE_LIST_BG; + rel2.to: PART_FILE_LIST_BG; + align: 0.0 0.0; + fixed: 1 1; + visible: 1; + } + } + } +} \ No newline at end of file diff --git a/res/edc/view/base.edc b/res/edc/view/base.edc new file mode 100755 index 0000000..f3fcc07 --- /dev/null +++ b/res/edc/view/base.edc @@ -0,0 +1,306 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../../../include/define.h" + +group { + data.item: "focus_highlight" "on"; + name: GRP_LAYOUT_BASE; + parts { + part { + name: PART_BG; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color : 255 255 255 255; + align: 0.5 0.5; + rel1.relative: 0.0 0.0; + rel2.relative: 1.0 1.0; + visible: 1; + } + } + part { + name: PART_TOP_TITLE_BG; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_BG; + relative: 0.0 0.0; + } + rel2 { + to: PART_BG; + relative: 1.0 0.1; + } + align: 0.0 0.0; + fixed: 1 1; + visible: 1; + } + } + part { + name: "padding.title.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_TOP_TITLE_BG; + relative: 0.0 0.0; + } + rel2 { + to: PART_TOP_TITLE_BG; + relative: 0.0208 1.0; + } + align: 0.0 0.0; + fixed: 1 1; + } + } + /*part { + name: PART_TOP_TITLE; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "padding.title.left"; + rel1.relative: 1.0 0.0; + rel2.to_x: PART_MENU; + rel2.to_y: PART_TOP_TITLE_BG; + rel2.relative: 0.0 1.0; + align: 0.5 0.5; + visible: 1; + } + }*/ + part { + name: PART_TOP_TITLE; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "padding.title.left"; + rel1.relative: 1.0 0.0; + rel2.to_x: PART_MENU; + rel2.to_y: PART_TOP_TITLE_BG; + rel2.relative: 0.0 1.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: STR_MYFILES; + size: 28; + align: 0.5 0.5; + ellipsis: 1; + } + min: 0 28; + color: 51 51 51 255; + visible: 1; + } + } + part { + name: "padding.menu.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_TOP_TITLE_BG; + relative: 0.979 0.0; + } + rel2 { + to: PART_TOP_TITLE_BG; + relative: 1.0 1.0; + } + align: 1.0 0.0; + } + } + part { + name: PART_MENU; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "padding.menu.right"; + rel1.relative: 0.0 0.5; + rel2.to: "padding.menu.right"; + rel2.relative: 0.0 0.5; + min: 46 46; + align: 1.0 0.5; + fixed: 1 1; + visible: 1; + } + } + part { + name: "padding.menu.confirm"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 20 0; + rel1 { + to: PART_MENU; + relative: 0.0 0.0; + } + rel2 { + to: PART_MENU; + relative: 0.0 1.0; + } + align: 1.0 0.0; + } + } + part { + name: PART_CONFIRM; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "padding.menu.confirm"; + rel1.relative: 0.0 0.5; + rel2.to: "padding.menu.confirm"; + rel2.relative: 0.0 0.5; + min: 46 46; + align: 1.0 0.5; + fixed: 1 1; + visible: 0; + } + description { + state: "visible" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: PART_FILE_PATH_BG; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_TOP_TITLE_BG; + relative: 0.0 1.0; + } + rel2 { + to: PART_TOP_TITLE_BG; + relative: 1.0 2.0; + } + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "filepath.border"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_FILE_PATH_BG; + relative: 0.0 1.0; + } + rel2 { + to: PART_FILE_PATH_BG; + relative: 1.0 1.0; + } + align: 0.0 1.0; + color: 204 204 204 255; + min: 0 1; + fixed: 1 1; + visible: 1; + } + } + part { + name: "padding.file.path.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_FILE_PATH_BG; + relative: 0.0 0.0; + } + rel2 { + to: PART_FILE_PATH_BG; + relative: 0.0208 1.0; + } + align: 0.0 0.0; + } + } + part { + name: "padding.file.path.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_FILE_PATH_BG; + relative: 0.9792 0.0; + } + rel2 { + to: PART_FILE_PATH_BG; + relative: 1.0 1.0; + } + align: 0.0 0.0; + } + } + part { + name: PART_FILE_PATH; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to: padding.file.path.left; + rel1.relative: 1.0 0.0; + rel2.to: padding.file.path.right; + rel2.relative: 0.0 1.0; + align: 0.0 0.5; + visible: 1; + } + } + part { + name: PART_CONTENT_AREA; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: PART_FILE_PATH_BG; + relative: 0.0 1.0; + } + rel2 { + to: PART_BG; + relative: 1.0 1.0; + } + align: 0.0 0.0; + //color: 244 244 244 255; + visible: 1; + } + } + } + programs { + program { + name: "show_confirm"; + signal: SIG_VISIBLE; + source: SOURCE_ELM; + action: STATE_SET "visible" 0.0; + target: PART_CONFIRM; + } + program { + name: "hide_confirm"; + signal: SIG_INVISIBLE; + source: SOURCE_ELM; + action: STATE_SET "default" 0.0; + target: PART_CONFIRM; + } + } +} \ No newline at end of file diff --git a/res/edc/view/dialog_popup.edc b/res/edc/view/dialog_popup.edc new file mode 100755 index 0000000..5e8b3b7 --- /dev/null +++ b/res/edc/view/dialog_popup.edc @@ -0,0 +1,466 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd. + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../../../include/define.h" + +group { + name: GRP_DIALOG_POPUP; + parts { + part { + name: "dimmed_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 0 0 0 100; + visible: 1; + } + } + part { + name: "popup_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 255 255 255 255; + visible: 1; + rel1 { + relative: 0.35 0.35; + to : "dimmed_bg"; + } + rel2 { + relative: 0.65 0.65; + to : "dimmed_bg"; + } + } + } + part { + name: "padding.title.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "popup_bg"; + } + rel2 { + relative: 0.05 1.0; + to: "popup_bg"; + } + align: 0.0 0.5; + } + } + part { + name: "padding.title.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.95 0.0; + to: "popup_bg"; + } + rel2 { + relative: 1.0 1.0; + to: "popup_bg"; + } + align: 0.0 0.0; + } + } + part { + name: "padding.title.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 0 34; + rel1 { + relative: 0.0 0.0; + to: "popup_bg"; + } + rel2 { + relative: 1.0 0.0; + to: "popup_bg"; + } + align: 0.5 0.0; + fixed: 1 0; + } + } + part { + name: "part_title_label"; + type: TEXT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to_x: "padding.title.left"; + to_y: "padding.title.top"; + relative: 1.0 1.0; + } + rel2 { + to_x: "padding.title.left"; + to_y: "padding.title.top"; + relative: 1.0 1.0; + } + text { + font: FONT_TIZENSANS_LIGHT; + text: "TITLE"; + size: 28; + min: 1 1; + ellipsis: -1; + } + color: 51 51 51 255; + min: 0 28; + fixed: 1 1; + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "part_content_swallow"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to_x: "padding.title.left"; + to_y: "part_title_label"; + relative: 1.0 1.0; + } + rel2 { + to_x: "padding.title.right"; + to_y: "part_divider"; + relative: 0.0 0.0; + } + visible: 1; + } + } + part { + name: "part_divider"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "popup_bg"; + relative: 0.0 0.80; + } + rel2 { + to: "popup_bg"; + relative: 1.0 0.80; + } + min: 0 1; + color: 204 204 204 255; + visible: 1; + } + } + part { + name: "padding.buttons"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "part_divider"; + } + rel2 { + relative: 1.0 1.0; + to: "popup_bg"; + } + align: 0.0 0.0; + } + } +/* part { + name: "padding.buttons.top"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "padding.buttons"; + } + rel2 { + relative: 1.0 0.15; + to: "padding.buttons"; + } + align: 0.0 0.0; + } + } + part { + name: "padding.buttons.bottom"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.85; + to: "padding.buttons"; + } + rel2 { + relative: 1.0 1.0; + to: "padding.buttons"; + } + align: 0.0 0.0; + } + }*/ + part { + name: "part_button_1"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + /*relative: 0.02 1.0; + to: "padding.buttons.top";*/ + to: "padding.buttons"; + relative: 0.0 0.0; + } + rel2 { + /*relative: 0.49 0.0; + to: "padding.buttons.bottom";*/ + to: "padding.buttons"; + relative: 0.5 1.0; + } + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "part_button_2"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + /*relative: 0.51 1.0; + to: "padding.buttons.top";*/ + to: "part_button_1"; + relative: 1.0 0.0; + } + rel2 { + /*relative: 0.98 0.0; + to: "padding.buttons.bottom";*/ + to: "padding.buttons"; + relative: 1.0 1.0; + } + visible: 1; + align: 0.0 0.0; + } + } + } +} + +group { + name: GRP_DIALOG_POPUP_NO_TITLE; + parts { + part { + name: "dimmed_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 0 0 0 100; + visible: 1; + } + } + part { + name: "popup_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 255 255 255 255; + visible: 1; + rel1 { + relative: 0.35 0.375; + to : "dimmed_bg"; + } + rel2 { + relative: 0.65 0.625; + to : "dimmed_bg"; + } + } + } + part { + name: "padding.title.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "popup_bg"; + } + rel2 { + relative: 0.05 1.0; + to: "popup_bg"; + } + align: 0.0 0.5; + } + } + part { + name: "padding.title.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.95 0.0; + to: "popup_bg"; + } + rel2 { + relative: 1.0 1.0; + to: "popup_bg"; + } + align: 0.0 0.0; + } + } + part { + name: "padding.title.top"; + type: SPACER; + scale: 1; + description { + min: 0 34; + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "popup_bg"; + } + rel2 { + relative: 1.0 0.0; + to: "popup_bg"; + } + align: 0.5 0.0; + } + } + part { + name: "padding.title.bottom"; + type: SPACER; + scale: 1; + description { + min: 0 34; + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "part_divider"; + } + rel2 { + relative: 1.0 0.0; + to: "part_divider"; + } + align: 0.5 1.0; + } + } + part { + name: "part_content_swallow"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to_x: "padding.title.left"; + to_y: "padding.title.top"; + relative: 1.0 1.0; + } + rel2 { + to_x: "padding.title.right"; + to_y: "padding.title.bottom"; + relative: 0.0 0.0; + } + visible: 1; + } + } + part { + name: "part_divider"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "popup_bg"; + relative: 0.0 0.80; + } + rel2 { + to: "popup_bg"; + relative: 1.0 0.80; + } + min: 0 1; + color: 204 204 204 255; + visible: 1; + } + } + part { + name: "padding.buttons"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + relative: 0.0 0.0; + to: "part_divider"; + } + rel2 { + relative: 1.0 1.0; + to: "popup_bg"; + } + align: 0.0 0.0; + } + } + part { + name: "part_button_1"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding.buttons"; + relative: 0.0 0.0; + } + rel2 { + to: "padding.buttons"; + relative: 0.5 1.0; + } + visible: 1; + align: 0.0 0.0; + } + } + part { + name: "part_button_2"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "part_button_1"; + relative: 1.0 0.0; + } + rel2 { + to: "padding.buttons"; + relative: 1.0 1.0; + } + visible: 1; + align: 0.0 0.0; + } + } + } +} diff --git a/res/edc/view/select_folder_view.edc b/res/edc/view/select_folder_view.edc new file mode 100755 index 0000000..5452b15 --- /dev/null +++ b/res/edc/view/select_folder_view.edc @@ -0,0 +1,181 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include "../../../include/define.h" + +group { + name: GRP_VIEW_SELECT_FOLDER; + parts { + part { + name: "dimmed_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 0 0 0 102; + visible: 1; + } + } + part { + name: "select_folder_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 255 255 255 255; + visible: 1; + rel1 { + relative: 0.25 0.25; + to : "dimmed_bg"; + } + rel2 { + relative: 0.75 0.75; + to : "dimmed_bg"; + } + } + } + part { + name: "select_folder_title_bg"; + type: RECT; + scale: 1; + description { + rel1.to: "select_folder_bg"; + rel1.relative: 0.0 0.0; + rel2.to: "select_folder_bg"; + rel2.relative: 1.0 0.0; + min: 0 60; + visible: 1; + } + } + part { + name: "padding.left.top.folder.title"; + type: SPACER; + scale: 1; + description { + rel1.to : "select_folder_title_bg"; + rel1.relative: 0.0 0.0; + rel2.to: "select_folder_title_bg"; + rel2.relative: 0.03 0.4; + } + } + part { + name: "padding.right.bottom.folder.title"; + type: SPACER; + scale: 1; + description { + rel1.to : "select_folder_title_bg"; + rel1.relative: 0.97 0.6; + rel2.to: "select_folder_title_bg"; + rel2.relative: 1.0 1.0; + } + } + part { + name: "select_folder_title"; + type: TEXT; + scale: 1; + description { + rel1.to: "padding.left.top.folder.title"; + rel1.relative: 1.0 1.0; + rel2.to: "padding.right.bottom.folder.title"; + rel2.relative: 0.0 0.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: "Select target folder"; + size: 28; + min: 1 1; + align: 0.0 0.5; + ellipsis: -1; + } + color: 51 51 51 255; + visible: 1; + } + } + part { + name: "border"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "select_folder_title_bg"; + rel1.relative: 0.0 1.0; + rel2.to: "select_folder_title_bg"; + rel2.relative: 1.0 1.0; + color: 51 51 51 255; + min:0 1; + align : 0.0 1.0; + visible: 1; + } + } + part { + name: "select_folder_genlist"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to : "select_folder_title_bg"; + rel1.relative: 0.0 1.0; + rel2.to : "select_folder_newfolder_btn"; + rel2.relative: 1.0 0.0; + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "select_folder_ok_btn"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to : "select_folder_bg"; + rel1.relative: 0.0 0.9; + rel2.to : "select_folder_bg"; + rel2.relative: 0.33 1.0; + align: 0.0 1.0; + visible: 1; + } + } + part { + name: "select_folder_cancel_btn"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to : "select_folder_ok_btn"; + rel1.relative: 1.0 0.0; + rel2.to : "select_folder_ok_btn"; + rel2.relative: 2.0 1.0; + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "select_folder_newfolder_btn"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to : "select_folder_cancel_btn"; + rel1.relative: 1.0 0.0; + rel2.to : "select_folder_bg"; + rel2.relative: 1.0 1.0; + align: 0.0 0.0; + visible: 1; + } + } + } +} \ No newline at end of file diff --git a/res/edc/view/submenu_view.edc b/res/edc/view/submenu_view.edc new file mode 100755 index 0000000..292a739 --- /dev/null +++ b/res/edc/view/submenu_view.edc @@ -0,0 +1,64 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +group { + name: GRP_VIEW_SUBMENU; + parts { + part { + name: "dimmed_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 0 0 0 100; + visible: 1; + } + } + part { + name: "submenu_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + fixed: 0 0; + color: 255 255 255 255; + visible: 1; + rel1 { + relative: 0.805 0.072; + to : "dimmed_bg"; + } + rel2 { + relative: 0.955 0.405; + to : "dimmed_bg"; + } + } + } + part { + name: "submenu_genlist"; + type: SWALLOW; + scale: 1; + description { + state: "default" 0.0; + rel1.to : "submenu_bg"; + rel2.to : "submenu_bg"; + align: 0.0 0.0; + fixed: 1 1; + visible: 1; + } + } + } +} \ No newline at end of file diff --git a/res/edc/widget/button.edc b/res/edc/widget/button.edc new file mode 100755 index 0000000..9374fce --- /dev/null +++ b/res/edc/widget/button.edc @@ -0,0 +1,409 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define TRANSITION_TIME 0.17 +#define COLOR_ITEM_FOCUS 0 119 246 255 +#define COLOR_TEXT_INDEX 77 77 77 255 +#define COLOR_TEXT_FOCUS 255 255 255 255 + + #include "../../../include/define.h" + +group { + data.item: "focus_highlight" "on"; + name: "elm/button/base/menu_btn"; + images { + image: "icon_button_more_rotation.png" COMP; + } + parts { + part { + name: "btn_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 0.0; + color: 0 119 246 255; + fixed: 1 1; + max: 46 46; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 0; + } + } + part { + name: "part_menu_btn"; + type: IMAGE; + scale: 1; + description { + state: "default" 0.0; + image.normal: "icon_button_more_rotation.png"; + align: 0.0 0.0; + fixed: 1 1; + visible: 1; + } + /*description { + state: "disabled" 0.0; + inherit: "default" 0.0; + image.normal: "icon_button_more_rotation.png"; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + image.normal: "icon_button_more_rotation.png"; + }*/ + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + /*program { + name: "disabled"; + signal: SIGNAL_DISABLED; + source: SOURCE_ELM; + action: STATE_SET "disabled" 0.0; + target: btn_bg; + target: part_popup_down_btn; + } + program { + name: "focused"; + signal: SIGNAL_FOCUSED; + source: SOURCE_ELM; + action: STATE_SET "focused" 0.0; + target: btn_bg; + target: part_popup_down_btn; + } + program { + name: "unfocused"; + signal: SIGNAL_UNFOCUSED; + source: SOURCE_ELM; + action: STATE_SET "default" 0.0; + target: btn_bg; + target: part_popup_down_btn; + }*/ + program { + name: "mouse_unclick_after"; + signal: "mouse,clicked,1"; + source: "event"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } +} + +group { + data.item: "focus_highlight" "on"; + name: "elm/button/base/target_btn"; + parts { + part { + name: "btn_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + align: 0.0 0.0; + color: 0 119 246 255; + fixed: 1 1; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "padding.text.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 20 0; + rel1.to: "btn_bg"; + rel2 { + to: "btn_bg"; + relative: 0.0 1.0; + } + align: 0.0 0.5; + fixed: 1 0; + } + } + part { + name: "padding.text.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + min: 20 0; + rel1 { + to: "btn_bg"; + relative: 1.0 0.0; + } + rel2.to: "btn_bg"; + align: 1.0 0.5; + fixed: 1 0; + } + } + part { + name: "part_popup_btn_text"; + type: TEXT; + scale: 1; + repeat_events: 1; + description { + state: "default" 0.0; + rel1 { + to: "padding.text.left"; + relative: 1.0 0.0; + } + rel2 { + to: "padding.text.right"; + relative: 0.0 1.0; + } + text { + font: FONT_TIZENSANS_LIGHT; + text: "OK"; + size: 28; + align: 0.5 0.5; + min: 1 1; + ellipsis: -1; + } + color: 87 87 87 255; + fixed: 1 1; + visible: 1; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 87 87 87 127.5; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: COLOR_TEXT_FOCUS; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + color: 64 136 211 255; + } + } + part { + name: "part_inside_line_up"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 227 227 227 255; + rel1.to: "btn_bg"; + rel2 { + to: "btn_bg"; + relative: 1.0 0.0; + } + min: 0 1; + align: 0.5 0.0; + fixed: 0 1; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 87 87 87 127.5; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + color: 64 136 211 255; + } + } + part { + name: "part_inside_line_left"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 227 227 227 255; + rel1 { + to: "part_inside_line_up"; + relative: 0.0 1.0; + } + rel2 { + to: "btn_bg"; + relative: 0.0 1.0; + } + min: 1 0; + align: 0.0 0.5; + fixed: 1 0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 87 87 87 127.5; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + color: 64 136 211 255; + } + } + part { + name: "part_inside_line_down"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 227 227 227 255; + rel1 { + to: "part_inside_line_left"; + relative: 1.0 1.0; + } + rel2.to: "btn_bg"; + min: 0 1; + align: 0.5 1.0; + fixed: 0 1; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 87 87 87 127.5; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + color: 64 136 211 255; + } + } + part { + name: "part_inside_line_right"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 227 227 227 255; + rel1 { + to: "part_inside_line_up"; + relative: 1.0 1.0; + } + rel2 { + to: "part_inside_line_down"; + relative: 1.0 0.0; + } + min: 1 0; + align: 1.0 0.5; + fixed: 1 0; + } + description { + state: "disabled" 0.0; + inherit: "default" 0.0; + color: 87 87 87 127.5; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 0 119 246 255; + } + description { + state: "selected" 0.0; + inherit: "default" 0.0; + color: 64 136 211 255; + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "disabled"; + signal: SIGNAL_DISABLED; + source: SOURCE_ELM; + action: STATE_SET "disabled" 0.0; + target: btn_bg; + target: part_popup_btn_text; + target: part_inside_line_down; + target: part_inside_line_up; + target: part_inside_line_left; + target: part_inside_line_right; + } + program { + name: "focused"; + signal: SIGNAL_FOCUSED; + source: SOURCE_ELM; + action: STATE_SET "focused" 0.0; + target: btn_bg; + target: part_popup_btn_text; + target: part_inside_line_down; + target: part_inside_line_up; + target: part_inside_line_left; + target: part_inside_line_right; + } + program { + name: "unfocused"; + signal: SIGNAL_UNFOCUSED; + source: SOURCE_ELM; + action: STATE_SET "default" 0.0; + target: btn_bg; + target: part_popup_btn_text; + target: part_inside_line_down; + target: part_inside_line_up; + target: part_inside_line_left; + target: part_inside_line_right; + } + program { + name: "selected"; + signal: "SIGNAL_ITEM_SELECTED"; + source: "SOURCE_ELM"; + action: STATE_SET "selected" 0.0; + target: btn_bg; + target: part_popup_btn_text; + target: part_inside_line_down; + target: part_inside_line_up; + target: part_inside_line_left; + target: part_inside_line_right; + } + program { + name: "mouse_unclick_after"; + signal: "mouse,clicked,1"; + source: "event"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } +} \ No newline at end of file diff --git a/res/edc/widget/gengrid.edc b/res/edc/widget/gengrid.edc new file mode 100755 index 0000000..9d7b02e --- /dev/null +++ b/res/edc/widget/gengrid.edc @@ -0,0 +1,329 @@ +#define DEFAULT 1 +#define SELECTED 2 +#define FOCUSED 3 +#define DISABLED 4 + +#include "../../../include/define.h" + +/***************************************************************************** +Document: Tizen TV_General Guide_GUI Guideline_v1.0_140508_1.ppt : 36 and 11 +Description: Gengrid for single line text +******************************************************************************/ +group { name: "elm/gengrid/item/custom_1text/default"; + data.item: "texts" "elm.text"; + data.item: "contents" "elm.swallow.end"; + script { + public is_selected, is_enabled, is_focused, is_init, cur_state; + + public init_values() { + if(get_int(is_init)==0) + { + set_int(is_enabled, 1); + set_int(is_focused, 1); + set_int(is_init, 1); + set_int(cur_state, -1); + } + } + public set_states() { + new enab; + new foc; + new sel; + new c_state; + enab = get_int(is_enabled); + foc = get_int(is_focused); + sel = get_int(is_selected); + c_state = get_int(cur_state); + if(enab == 0) + { + if(c_state!=DISABLED) + run_program(PROGRAM:"do_disable"); + } + else + { + if(foc == 1) + { + if(c_state!=FOCUSED) + run_program(PROGRAM:"do_focus"); + } + else if(sel == 1) + { + if(c_state!=SELECTED) + run_program(PROGRAM:"do_select"); + } + else + { + if(c_state!=DEFAULT) + run_program(PROGRAM:"do_default"); + } + } + } + } + parts { + part { + name: "event"; type: RECT; + repeat_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + part { + name: "base"; type: RECT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + color: 0 119 246 255; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "bg"; type: RECT; mouse_events: 0; + clip_to: "base"; + description { + state: "default" 0.0; + } + } + part { name: "pad.top"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 0 30; + max: 9999 30; + rel1.to: "bg"; + rel2.to: "bg"; + align: 0.5 0.0; + } + } + part { name: "pad.bottom"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 0 25; + max: 9999 25; + rel1.to: "bg"; + rel2.to: "bg"; + align: 0.5 1.0; + } + } + part { name: "pad.left"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 20 0; + max: 20 9999; + rel1.to: "bg"; + rel2.to: "bg"; + align: 0.0 0.5; + } + } + part { name: "pad.right"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 20 0; + max: 20 9999; + rel1.to: "bg"; + rel2.to: "bg"; + align: 1.0 0.5; + } + } + part { name: "pad.middle"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 0 3; + max: 9999 3; + rel1.to_x: "pad.left"; + rel1.to_y: "elm.text"; + rel1.relative: 1.0 0.0; + rel2.to_x: "pad.right"; + rel2.to_y: "elm.text"; + rel2.relative: 0.0 0.0; + align: 0.5 1.0; + } + } + part { name: "elm.swallow.end"; + clip_to: "disclip"; type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 1.0 0.0; + aspect: 1.0 1.0; + aspect_preference: HORIZONTAL; + rel1.relative: 1.0 0.0; + rel2.relative: 1.0 1.0; + } + } + part { name: "area_for_text"; type: RECT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to_x: "pad.left"; + rel1.to_y: "pad.top"; + rel1.relative: 1.0 1.0; + rel2.to_x: "pad.right"; + rel2.to_y: "pad.bottom"; + rel2.relative: 0.0 0.0; + align: 0.5 0.5; + color: 255 255 255 0; + } + } + part { name: "elm.text"; type: TEXT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + color: 51 51 51 255; + rel1.to: "area_for_text"; + rel2.to: "area_for_text"; + align: 0.5 0.0; + text { + font: FONT_TIZENSANS_LIGHT; + size: 23; + min: 0 1; + } + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 51 51 51 255; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 51 51 51 255; + } + } + + part { name: "disclip"; type: RECT; + description { state: "default" 0.0; + fixed: 1 1; + rel1.to: "base"; + rel2.to: "base"; + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { name: "event_blocker"; type: RECT; mouse_events: 1; + description { state: "default" 0.0; + fixed: 1 1; + color: 0 0 0 0; + visible: 0; + } + description { state: "focused" 0.0; + inherit: "default" 0.0; + } + description { state: "selected" 0.0; + i nherit: "default" 0.0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + } + programs { + program { name: "go_focused"; + signal: "elm,state,focused"; source: "elm"; + script { + init_values(); + set_int(is_focused, 1); + set_states(); + } + } + program { name: "go_unfocused"; + signal: "elm,state,unfocused"; source: "elm"; + script { + init_values(); + set_int(is_focused, 0); + set_states(); + } + } + program { + name: "focused_1"; + signal: "mouse,in"; + source: "event_blocker"; + action: STATE_SET "focused" 0.0; + target: "base"; + target: "elm.text"; + } + program { + name: "unfocused_1"; + signal: "mouse,out"; + source: "event_blocker"; + action: STATE_SET "default" 0.0; + target: "base"; + target: "elm.text"; + } + program { name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + script { + init_values(); + set_int(is_selected, 1); + set_states(); + } + } + program { name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + script { + init_values(); + set_int(is_selected, 0); + set_states(); + } + } + program { name: "go_disabled"; + signal: "elm,state,disabled"; + source: "elm"; + script { + init_values(); + set_int(is_enabled, 0); + set_states(); + } + } + program { name: "go_enabled"; + signal: "elm,state,enabled"; + source: "elm"; + script { + init_values(); + set_int(is_enabled, 1); + set_states(); + } + } + program { name: "do_default"; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.1; + target: "base"; + target: "elm.text"; + target: "disclip"; + target: "event_blocker"; + } + program { name: "do_focus"; + action: STATE_SET "focused" 0.0; + target: "base"; + target: "elm.text"; + target: "disclip"; + target: "event_blocker"; + } + program { name: "do_select"; + action: STATE_SET "selected" 0.0; + target: "base"; + target: "elm.text"; + target: "disclip"; + target: "event_blocker"; + } + program { name: "do_disable"; + action: STATE_SET "disabled" 0.0; + target: "base"; + target: "elm.text"; + target: "disclip"; + target: "event_blocker"; + } + } + } +} \ No newline at end of file diff --git a/res/edc/widget/genlist.edc b/res/edc/widget/genlist.edc new file mode 100755 index 0000000..71a296d --- /dev/null +++ b/res/edc/widget/genlist.edc @@ -0,0 +1,1098 @@ +/* + * Copyright (c) 2015 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#define SOURCE_EDC "edc" +#define SIGNAL_ITEM_SELECTED "item,selected" +#define COLOR_TEXT_TITLE 51 51 51 255 +#define COLOR_TEXT_FOCUS 255 255 255 255 +#define COLOR_TEXT_INFO 153 153 153 255 +#define COLOR_ITEM_DEFAULT 119 169 202 255 +#define COLOR_ITEM_FOCUS 0 119 246 255 +#define COLOR_ITEM_FOCUS_0 0 119 246 0 +#define COLOR_ITEM_BG 255 255 255 255 +#define COLOR_ITEM_BORDER 194 194 194 255 +#define FONT_REGULAR "BreezeSans" + +#include "../../../include/define.h" + +group { + name: "elm/genlist/item/custom_folder/default"; + data.item: "texts" "elm.text.folder"; + data.item: "contents" "elm.swallow.icon"; + data.item: "focus_highlight" "on"; + + parts { + part { + name: "genlist_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 119 246 255; + min: 0 80; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "border"; + type: RECT; + scale: 1; + description { + rel1.relative: 0.0 1.0; + rel2.relative: 1.0 1.0; + align: 0.0 1.0; + color: 204 204 204 255; + min: 0 1; + fixed: 1 1; + visible: 1; + } + } + part { + name: "padding.top.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel2.relative: 0.0 0.0; + min: 40 20; + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "padding.bottom.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 1.0 1.0; + min: 40 20; + fixed: 1 1; + align: 1.0 1.0; + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + scale: 1; + description { + state : "default" 0.0; + rel1 { + to: "padding.top.left"; + relative: 1.0 1.0; + } + rel2 { + to: "padding.top.left"; + relative: 1.0 1.0; + } + min: 40 40; + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "elm.padding.left_icon"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "elm.swallow.icon"; + relative: 1.0 0.0; + } + rel2 { + to: "elm.swallow.icon"; + relative: 1.0 1.0; + } + min: 30 0; + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "elm.text.folder"; + type: TEXT; + description { + state: "default" 0.0; + rel1.to: "elm.padding.left_icon"; + rel1.relative: 1.0 0.0; + rel2.to: "padding.bottom.right"; + rel2.relative: 0.0 0.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text"; + size: 28; + align: 0.0 0.5; + ellipsis: 1; + } + min: 0 40; + color: 51 51 51 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "mouse_unclick_after"; + signal: "mouse,in"; + source: "event"; + action: STATE_SET "focused" 0.0; + target: "genlist_bg"; + target: "elm.text.folder"; + } + program { + name: "mouse_unclick_after1"; + signal: "mouse,out"; + source: "event"; + action: STATE_SET "default" 0.0; + target: "genlist_bg"; + target: "elm.text.folder"; + } + program { + name: "mouse_unclick_after2"; + signal: "mouse,in"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "genlist_bg"; + target: "elm.text.folder"; + } + program { + name: "mouse_unclick_after3"; + signal: "mouse,out"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "genlist_bg"; + target: "elm.text.folder"; + } + } +} + +group { + name: "elm/genlist/item/custom_file/default"; + data.item: "texts" "elm.text1 elm.text2 elm.text3"; + data.item: "contents" "elm.swallow.icon"; + data.item: "focus_highlight" "on"; + + parts { + part { + name: "genlist_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 119 246 255; + min: 0 80; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "border"; + type: RECT; + scale: 1; + description { + rel1.relative: 0.0 1.0; + rel2.relative: 1.0 1.0; + align: 0.0 1.0; + color: 204 204 204 255; + min: 0 1; + fixed: 1 1; + visible: 1; + } + } + part { + name: "padding.top.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "genlist_bg"; + relative: 0.0 0.0; + } + rel2 { + to: "genlist_bg"; + relative: 0.03 0.1; + } + align: 0.0 0.0; + } + } + part { + name: "padding.bottom.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "genlist_bg"; + relative: 0.97 0.9; + } + rel2 { + to: "genlist_bg"; + relative: 1.0 1.0; + } + align: 0.0 0.0; + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + scale: 1; + description { + state : "default" 0.0; + rel1.to: "padding.top.left"; + rel1.relative: 1.0 1.0; + rel2.to_x: "genlist_bg"; + rel2.to_y: "padding.bottom.right"; + rel2.relative: 0.08 0.0; + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "padding.icon.text.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "elm.swallow.icon"; + relative: 1.0 0.0; + } + rel2 { + to: "elm.swallow.icon"; + relative: 1.0 1.0; + } + min: 30 0; + align: 0.0 0.0; + } + } + part { + name: "text.bg"; + type: RECT; + scale: 1; + description { + state : "default" 0.0; + rel1.to_x: "padding.icon.text.left"; + rel1.to_y: "padding.top.left"; + rel1.relative: 1.0 1.0; + rel2.to: "padding.bottom.right"; + rel2.relative: 0.0 0.0; + color: 0 119 246 255; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "elm.text1"; + type: TEXT; + description { + state : "default" 0.0; + rel1.to: "text.bg"; + rel1.relative: 0.0 0.0; + rel2.to: "text.bg"; + rel2.relative: 1.0 0.625; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text"; + size: 28; + align: 0.0 0.5; + ellipsis: 1; + } + min: 0 40; + color: 51 51 51 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "elm.text2"; + type: TEXT; + description { + state : "default" 0.0; + rel1.to: "elm.text1"; + rel1.relative: 0.0 1.0; + rel2.to: "text.bg"; + rel2.relative: 0.3 1.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text 2"; + size: 16; + align: 0.0 0.5; + ellipsis: 1; + } + min: 0 24; + color: 51 51 51 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "elm.text3"; + type: TEXT; + description { + state : "default" 0.0; + rel1.to: "elm.text1"; + rel1.relative: 0.7 1.0; + rel2.to: "text.bg"; + rel2.relative: 1.0 1.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text 3"; + size: 16; + align: 1.0 0.5; + ellipsis: 1; + } + min: 0 24; + color: 51 51 51 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "mouse_unclick_after"; + signal: "mouse,in"; + source: "event"; + action: STATE_SET "focused" 0.0; + target: "genlist_bg"; + target: "text.bg"; + target: "elm.text1"; + target: "elm.text2"; + target: "elm.text3"; + } + program { + name: "mouse_unclick_after1"; + signal: "mouse,out"; + source: "event"; + action: STATE_SET "default" 0.0; + target: "genlist_bg"; + target: "text.bg"; + target: "elm.text1"; + target: "elm.text2"; + target: "elm.text3"; + } + program { + name: "mouse_unclick_after2"; + signal: "mouse,in"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "genlist_bg"; + target: "text.bg"; + target: "elm.text1"; + target: "elm.text2"; + target: "elm.text3"; + } + program { + name: "mouse_unclick_after3"; + signal: "mouse,out"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "genlist_bg"; + target: "text.bg"; + target: "elm.text1"; + target: "elm.text2"; + target: "elm.text3"; + } + } +} + +group { + name: "elm/genlist/item/custom_file_select/default"; + data.item: "texts" "elm.text1 elm.text2 elm.text3"; + data.item: "contents" "elm.swallow.icon elm.swallow.end"; + data.item: "focus_highlight" "on"; + + parts { + part { + name: "genlist_bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 119 246 255; + min: 0 80; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "border"; + type: RECT; + scale: 1; + description { + rel1.relative: 0.0 1.0; + rel2.relative: 1.0 1.0; + align: 0.0 1.0; + color: 204 204 204 255; + min: 0 1; + fixed: 1 1; + visible: 1; + } + } + part { + name: "padding.top.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "genlist_bg"; + relative: 0.0 0.0; + } + rel2 { + to: "genlist_bg"; + relative: 0.03 0.1; + } + align: 0.0 0.0; + } + } + part { + name: "padding.bottom.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "genlist_bg"; + relative: 0.97 0.9; + } + rel2 { + to: "genlist_bg"; + relative: 1.0 1.0; + } + align: 0.0 0.0; + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + scale: 1; + description { + state : "default" 0.0; + rel1.to: "padding.top.left"; + rel1.relative: 1.0 1.0; + rel2.to_x: "genlist_bg"; + rel2.to_y: "padding.bottom.right"; + rel2.relative: 0.08 0.0; + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "padding.icon.text.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "elm.swallow.icon"; + relative: 1.0 0.0; + } + rel2 { + to: "elm.swallow.icon"; + relative: 1.0 1.0; + } + min: 30 0; + align: 0.0 0.0; + } + } + part { + name: "padding.icon.text.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "elm.swallow.end"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.swallow.end"; + relative: 0.0 1.0; + } + min: 30 0; + align: 1.0 0.0; + } + } + part { + name: "elm.swallow.end"; + type: SWALLOW; + scale: 1; + description { + state : "default" 0.0; + rel1.to_x: "genlist_bg"; + rel1.to_y: "padding.top.left"; + rel1.relative: 0.92 1.0; + rel2.to_x: "padding.bottom.right"; + rel2.to_y: "padding.bottom.right"; + rel2.relative: 0.0 0.0; + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "text.bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.to_x: "padding.icon.text.left"; + rel1.to_y: "padding.top.left"; + rel1.relative: 1.0 1.0; + rel2.to: "padding.icon.text.right"; + rel2.relative: 0.0 1.0; + color: 0 119 246 255; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "elm.text1"; + type: TEXT; + description { + state: "default" 0.0; + rel1.to: "text.bg"; + rel1.relative: 0.0 0.0; + rel2.to: "text.bg"; + rel2.relative: 1.0 0.625; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text"; + size: 28; + align: 0.0 0.5; + ellipsis: 1; + } + min: 0 40; + color: 51 51 51 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "elm.text2"; + type: TEXT; + description { + state: "default" 0.0; + rel1.to: "elm.text1"; + rel1.relative: 0.0 1.0; + rel2.to: "text.bg"; + rel2.relative: 0.3 1.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text 2"; + size: 16; + align: 0.0 0.5; + ellipsis: 1; + } + min: 0 24; + color: 51 51 51 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "elm.text3"; + type: TEXT; + description { + state: "default" 0.0; + rel1.to: "elm.text1"; + rel1.relative: 0.7 1.0; + rel2.to: "text.bg"; + rel2.relative: 1.0 1.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text 3"; + size: 16; + align: 1.0 0.5; + ellipsis: 1; + } + min: 0 24; + color: 51 51 51 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + repeat_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "mouse_unclick_after"; + signal: "mouse,in"; + source: "event"; + action: STATE_SET "focused" 0.0; + target: "genlist_bg"; + target: "text.bg"; + target: "elm.text1"; + target: "elm.text2"; + target: "elm.text3"; + } + program { + name: "mouse_unclick_after1"; + signal: "mouse,out"; + source: "event"; + action: STATE_SET "default" 0.0; + target: "genlist_bg"; + target: "text.bg"; + target: "elm.text1"; + target: "elm.text2"; + target: "elm.text3"; + } + program { + name: "mouse_unclick_after2"; + signal: "mouse,in"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "genlist_bg"; + target: "text.bg"; + target: "elm.text1"; + target: "elm.text2"; + target: "elm.text3"; + } + program { + name: "mouse_unclick_after3"; + signal: "mouse,out"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "genlist_bg"; + target: "text.bg"; + target: "elm.text1"; + target: "elm.text2"; + target: "elm.text3"; + } + } +} + +group { + name: "elm/genlist/item/custom_file_target/default"; + data.item: "texts" "elm.text.file"; + data.item: "contents" "elm.swallow.icon elm.swallow.end"; + data.item: "focus_highlight" "on"; + + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 119 246 255; + visible: 0; + min: 0 80; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "border"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 0.0 1.0; + rel2.relative: 1.0 1.0; + align: 0.0 1.0; + color: 204 204 204 255; + min: 0 1; + visible: 1; + } + } + part { + name: "padding.top.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel2.relative: 0.0 0.0; + min: 40 20; + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "padding.bottom.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 1.0 1.0; + min: 40 20; + fixed: 1 1; + align: 1.0 1.0; + } + } + part { + name: "center.bg"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.to: "padding.top.left"; + rel1.relative: 1.0 1.0; + rel2.to: "padding.bottom.right"; + rel2.relative: 0.0 0.0; + } + } + part { + name: "elm.swallow.icon"; + type: SWALLOW; + scale: 1; + description { + state : "default" 0.0; + rel1.to: "center.bg"; + rel1.relative: 0.0 0.0; + rel2.to: "center.bg"; + rel2.relative: 0.045 1.0; + align: 0.0 0.0; + visible: 1; + } + } + part { + name: "padding.icon.text"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "elm.swallow.icon"; + relative: 1.0 0.0; + } + rel2 { + to: "elm.swallow.icon"; + relative: 1.0 1.0; + } + min: 30 0; + align: 0.0 0.0; + fixed: 1 1; + } + } + part { + name: "elm.text.file"; + type: TEXT; + description { + rel1.to: "padding.icon.text"; + rel1.relative: 1.0 0.0; + rel2.to: "padding.text.icon"; + rel2.relative: 0.0 1.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text"; + size: 24; + align: 0.0 0.5; + ellipsis: 1; + } + min: 0 40; + color: 104 104 104 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "padding.text.icon"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1 { + to: "elm.swallow.end"; + relative: 0.0 0.0; + } + rel2 { + to: "elm.swallow.end"; + relative: 0.0 1.0; + } + min: 30 0; + align: 1.0 0.0; + fixed: 1 1; + } + } + part { + name: "elm.swallow.end"; + type: SWALLOW; + scale: 1; + description { + state : "default" 0.0; + rel1.to: "center.bg"; + rel1.relative: 0.954 0.0; + rel2.to: "center.bg"; + rel2.relative: 1.0 1.0; + align: 0.5 0.5; + visible: 1; + } + } + part { + name: "event"; + type: RECT; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + programs { + program { + name: "mouse_unclick_after"; + signal: "mouse,in"; + source: "event"; + action: STATE_SET "focused" 0.0; + target: "bg"; + target: "elm.text.file"; + } + program { + name: "mouse_unclick_after1"; + signal: "mouse,out"; + source: "event"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "elm.text.file"; + } + program { + name: "mouse_unclick_after2"; + signal: "mouse,in"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "bg"; + target: "elm.text.file"; + } + program { + name: "mouse_unclick_after3"; + signal: "mouse,out"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "elm.text.file"; + } + } +} + +group { + name: "elm/genlist/item/custom_1text/default"; + data.item: "texts" "elm.text"; + data.item: "focus_highlight" "on"; + + parts { + part { + name: "bg"; + type: RECT; + scale: 1; + description { + state: "default" 0.0; + color: 0 119 246 255; + visible: 0; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; + } + } + part { + name: "border"; + type: RECT; + scale: 1; + description { + rel1.relative: 0.0 1.0; + rel2.relative: 1.0 1.0; + align: 0.0 1.0; + color: 204 204 204 255; + min: 0 3; + fixed: 1 1; + visible: 1; + } + } + part { + name: "padding.top.left"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel2.relative: 0.0 0.0; + min: 40 20; + fixed: 1 1; + align: 0.0 0.0; + } + } + part { + name: "padding.bottom.right"; + type: SPACER; + scale: 1; + description { + state: "default" 0.0; + rel1.relative: 1.0 1.0; + min: 40 20; + fixed: 1 1; + align: 1.0 1.0; + } + } + part { + name: "elm.text"; + type: TEXT; + description { + rel1.to: "padding.top.left"; + rel1.relative: 1.0 1.0; + rel2.to: "padding.bottom.right"; + rel2.relative: 0.0 0.0; + text { + font: FONT_TIZENSANS_LIGHT; + text: "test text"; + size: 24; + align: 0.0 0.5; + ellipsis: 1; + } + min: 0 40; + color: 104 104 104 255; + visible: 1; + } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + } + part { + name: "event"; + type: RECT; + repeat_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; + } + } + } + + programs { + program { + name: "mouse_unclick_after"; + signal: "mouse,in"; + source: "event"; + action: STATE_SET "focused" 0.0; + target: "bg"; + target: "elm.text"; + } + program { + name: "mouse_unclick_after1"; + signal: "mouse,out"; + source: "event"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "elm.text"; + } + program { + name: "mouse_unclick_after2"; + signal: "mouse,in"; + source: "elm"; + action: STATE_SET "focused" 0.0; + target: "bg"; + target: "elm.text"; + } + program { + name: "mouse_unclick_after3"; + signal: "mouse,out"; + source: "elm"; + action: STATE_SET "default" 0.0; + target: "bg"; + target: "elm.text"; + } + program { + name: "mouse_unclick_after4"; + signal: "mouse,clicked,1"; + source: "event"; + action: SIGNAL_EMIT "elm,action,click" ""; + } + } +} diff --git a/res/images/U01_subdepth_folder_arrow.png b/res/images/U01_subdepth_folder_arrow.png index 50072fc4c0025a31009e3ab324f21468b99485d9..9d01cecc75affbec160ba24880b848a5611038fd 100644 GIT binary patch delta 27 icmZqT{Kvu78Q|y6CB?GuiW_a2i*3E-0_3Zs+D3VZQ99z_5E delta 94 zcmdlfc1(KkEc$q diff --git a/res/images/gengrid/00_check_bg_ef.png b/res/images/gengrid/00_check_bg_ef.png index cb49cdddf80f3fc5307c4f3609c71ffd139afe06..24192622fd32a1f93c7cafc30b72fb486ff4b42c 100644 GIT binary patch delta 99 zcmV-p0G$8M7Qq$@iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a z5jItgoW|lKa720J>GuiW_a2i*3E;CQ3Jd`n009600|1Mv3t<3@R}=sM002ovPDHLk FV1oGmBcK2P delta 117 zcmX>oc210^Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLV|I7^CtGE*x Ty2C|)W;1xY`njxgN@xNA0RAK+ diff --git a/res/images/gengrid/00_check_bg_line.png b/res/images/gengrid/00_check_bg_line.png index 6cf7c074f73aba9ecc86207bdcace817565e7112..ed2b8d71511d14b8eab18a0e489ff38b7f7cafbe 100644 GIT binary patch delta 75 zcmV-R0JQ(m7Q+?_iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a h5jItgoW|lKa720J>GuiW_a2i*3E-0_3b2#d3V8Qv9&i8v delta 94 zcmX>sc0r7%Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp vw(w3~$5A7~YsMSeJLlLVGr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+C}+sR$UE7erJ0d;^Cgx@ zMj)llwg5;?KFxlgmG|bYExeQ0a@2_Mn(>DA&N=o-xxl6J$;x&enVGp>EEY?FMJ{A3 yh_`g<(gZ(0zXg*p1|0|+HpqoSApiigR|dcWvlt2P0ka1SuK}~S49EeKfDUG193El- delta 96 zcmcaE`%IRnGr-TCmrII^fq{W{B9|E>??i_?jJ%s=7}Xhplrz&=W=7u00&L>Uyu7@V s)!AgZc%{uwv^psQm2dW8JHP}~#KZXxr1lrrdJwge=LC?NT*#LO032Bs;s5{u diff --git a/res/images/icon/00_nocontents_devices.png b/res/images/icon/00_nocontents_devices.png index 4be21c5d6ce571b3bd8edbb95801d3a1d053fefd..2e6c47d41f7490ca2a525b96f612352e12093861 100644 GIT binary patch delta 407 zcmV;I0cifypaFrP0SbvwPDctF3IG5Au?$88lT!qPv)2S!0kbg%paGN82j2tP+O(6l z2z(JXRgIj+;v;ZGdF1K$3E%e~lST>PlP3zRv(pO20h5^w%Clq*3<8sJ4;Pb(4_LF} z4|xHzToHi*v)&R+0h22f9SMNl9wIN)@jGv-%cl0T3-Jn+se` z7x3`dBEEEX3Yn937@(6E8SRq=8Y#0c8ixUsw;QgLW*jz?ogDF#j~!UE=p9o5lRO_J zlVKmkvnC)H1Cu@@DwAm=J(H&+<+F_>_yLoKCMJ`uCMc8ECOMN3Cq$D~CxNrqCz%10 zaVa^It0{T2B`R?Plb0>;vxhEj0tZ@o#U~bLwv+xagtLP&r2&&EGj)@nGbgjhGamx8 z=QSn)vko`b1GD8i1_240ra>+5Vdwe`llD7SvrRnZ0h2R6VxyKm1Cy6Qfs+|RiIby3 zRkQg*egd<2MdbpMUPvL6fJl6^{YX^;vr|hT0kd>WX91JkO&F8)O`nsMPT!MtPu{X3 Br$qn& delta 580 zcmZo%z<7B9BTr|5pF1y?6c+;n1MfyIHx@?T$pI|QjJ%sKvqUliDIK;2Kx*oxF~tMugXlH?()ou}8`UE|pJSe&@XZU55 zLV0I9_SQeuYuddc??igS3 z4upZh5pNnGXptd%346uLD?2a)+#>*N+hZL0I7{qQv;F>Y8pUtg_ut^tkMyv&M?k(+ncGDqF_iO+xW z@J`-p9R?KUws{KD{=qhhk#}*B9mujE$3`G|*|8Hy#yEun6>W5?0~x6A`VEC$B;_NNe~5Ja?TnoD8yJ3^J-~a=djXf`>=(F&71iDt7AZIEeKIyRcVNmI z(z%0hFlfb32HWtip{ted&R~AxmAu5=&%0bByIftShb-HMEG=IvbxPzKn*YmNogPC| z?mu<)Tc&bm3Rm*<*Z!|So<=T=Qs!-E(9Shu90 z-Oj_%thUGP)s0Az$nm}8DP3}LXY|Zf&5-GyfMNGWI`aNAhIEfOJoHFM@S0m>?K#Nd zZ?9%*UTeDW#LiF&szUd}bc-A*TkKJ_r5~AL16m0umAtmuN7N3q@X zZR{0BxjX9_+3YfAaE@C6d0dKNMPXcBpg3FVuU6qfoS0_qHes-gZ@^da9yA%hl!IB) zDBdLfhVeb&v(H?0yl5_Zj7`b0IG1b>U2+-XKRHdtN-c+nspn9X7KLBaY{)2GpTnYz zY%0#^XS65Fki*_=g44bu^S-f=JvtbmyV-Ep^kx#S?-S9;KE`46Ko&*k+~vqc)xpv4 zhqMgWj_iOi?<95SMKai`*CIwOM~7O17wQqx6<9F5IO+$_!WGz67=%lO68fdElhKz& zyBW+%9^z$56oN|&&{rBuUS(Dc5y#h=Y9kCqe4+95uEQJdn#+>Q7ZwZaYSDiD0Ifni zLv{HI>MCE(VZ34`tSZ~^U1b7Xt4@%%s*OW-jW@2<*s)>!T+`RoS<6FL{branoVQP% z-TSIz+PgWX%{0|5*hh7&+Dx&{@1onCG1mzT-*D^E55zHUzQ`X5R3{g#1*xO`9 zCz_7&Ak<95>WdPbnPE+Hz0u7Wy;YKQ54}Z`gMN70Yzu>yYMg2b!BopxXwGC}X=@Br Otqy2zT}k&_N7z4Ot_<=3 delta 1538 zcmZ{jX;71A5XT9L2gK#@B0&XB&d!dGI)=+6B*e(JNl5IJeJH`5yaBk4`0d%SR7zwt)Im2lR z#qB)U)~8ONwc+NSrw-SjdXO-~p$CDZ9KQiiJ1zu0 z+P%4XM_Tiafx5&W0~15HdD?p2-JhrboA5u80sX!1|A`dchXio9(Zo#)R;OYZTIXOk z*0_8srI#c;a2W&3$#pHb)pZis;M#_;^+V%$>hmMJL91IH=&M)>mMID#E0r!%7!yWo zV9Xz#XOH8e#~k)~sE!Szu4~T|@BZHSw5}`3W^CAZ!I^{`szL;yKnC&u6BE{=F} z;YmIp!?nl9htq%XTL8Lh-U4-+k04ZO^c;KJ-zcM(i%6V3aXPoQ<()n-WwJMDo?HX^ zX%~U{+CTW7fT?`Xmw{%^^`FYEmrq5MIBnWJc6kS-f;)qFaLJ5w5YEr&!5G4~!L=|J z=oAtc8n4`ZgUKBWcwzWRX ze&y7dKtj#T&j-`xC&pb_X(WWbe;Y;pL;bjD=+C(NkXINt;1&KZm>gaL;ji$;?3$}j z2V3<^;8M-WWmi>%3OpH63K}AL%14ozU}}^XSR91~33sE~ksquYr=d>oPiYgT%f#Emk6qh&S+N zQWHX9)Fo`@n!bq-2az?SNN*uwY*Ln#B1x!7S`Wq9$d4k(C`ugY;z|l%bi9|uhl?$o zm6QAvw2+i$7-IjDDn2Tfy0BzjHUaEdwuY#@D77+LvoSovr|>Q3zi&ag z4U|>zuVbqC458A!HkOa>$2$-n?e~&W9|`UUF5^uK7k}#&)jM86K-{dYVHKWE*R^791 z$xX|X4(Zj*I$hJR0pl+GcBLS=RekC#iLEuod{gA%elXOEzeo7xHIu)ta-uWIc5iFf w2H6dJ(i1_#klJyOC)Vx*+iDGV3erdQ2=ns=p=q2Lmb!lK=n! diff --git a/res/images/icon/00_nocontents_picture.png b/res/images/icon/00_nocontents_picture.png index 2a89eda0c3b8d41a54c2354a6aeb0b7479766669..2164256f1bf4967df20af94cd8b00acd9f211487 100644 GIT binary patch delta 503 zcmVPlP3zmv*-$F0+Ue<){`g>Et6IbER%x{kCPJ* zytB{`D*}`J5qpz(5+jqG5*(Ac61%f@6F32ruM{k^+!PH0lj;^_lTa75lLZ))lbIO& zvz8gf0h3%CS(COKGz}lh8ITG-wFf>V3UPBZIkmnFBDC->=gF$u=GXFuc${3 z{C-f=7A2E7J-L(eJ?|DkV(a}mjt6TnM!&NxNNnjY5Z%_B@w3W6 zJpq#lLe#U}LVp3XT|{gFlgdSH7#;cjbC+i(hG!{KrK_2VVb_u0KX=*hp0iO#>;khs tNoWBT_{s2-z9Z)oqFV~>;zTq>Wu{LXp*yBzOiYt9Eih0=7S=hh z(x7z(2l0ake3ivrRH zbinQ+-pRVg_CQTJ#wI{=f$@5vR)3RxkkR|hi}`rpWInF26#B5jz(nL7?_^txi9m^S z7EVA_0+v@m0r12+0Z6*o~cNUpVgFTv}O^!l%5AA7ce+y2cu z9yu@d1nyp&{g`+1CObQzk`H$Cfn>k^N1&Mv4z?hF>~*{Xgy#bfK0SbvwPDctF3IG5Au?$88lT!qPv)2S!0kbg%paGN82j2tP+O(6l z2z(JXRgIj+;v;ZGdF1K$3E%e~lST>PlP3!QvnLA#0+TEak(0g+GL!KQUXxG`6_aKT zeUs!4rjv^g`jdtbG?Tj!J(KwminD|fO97M662-HY6RrW1MHN{Mci3j)`lMLhjzSLK z1(U56dy^>^#FOq8p0kY?r~;EV8o-nH8pV^n8=#Y395%C+9IXPALmzIFvLC0DS|GR& zvAmSUbJh+bpK-AB=oogBBO&>d9U`5xyCOOQv-Ttp0+R+Oud}u%lLC`UDuI*CDm0S; zD}u9xE42ZWIxWwW3NB~_Ie4#yvv@8a0kfDdQvnO7EhmILNhu|QHB7VkFl+;}Wi)*S zljAwClaxA1li)gqvt~P(0ki)+V*;~dKfMDIHyjWdqgH0<+l92_iMs$maKn={Lo$H(8iP)U=aQ0udeQAPoi)KVvt{8FT|p;N{IlW0}i zvqM%J0h3=>P_wXC8UeG*SY!c{Fk02K23rsTvlm=L0RhmHU0p)~(37KGtdme)q#t9y Af&c&j delta 621 zcmbQfm+{M9MxM?9KX+a(DJ}*E2HuTaZY+$vlLJ_q8F@EfW{G43QaWr4fYjtO?DtuD zZ{FI%J9!;PjR>z9Z)oqFV~>;zTq>Wu{LXp*yBzOiYt9Eih0LiN6;H&@phr3 zKu(SDIuJ)oG?JgU{6^ZNUrQqH_BrtZ-86ZEXf;rVTkHssJTEp6s5n=A1;}zysRKar zsuWQFKgyk`++X=94P?AiX!#)&n{1>XShnDXm5zIa>?lf%95TK#4%@tsvL3 z>7ECYS9LSkcr7c|xAJaw)RPB_Z%)t;X5{5vuB+Z+M!My+g diff --git a/res/images/icon/T01_2_button_expand_cancel.png b/res/images/icon/T01_2_button_expand_cancel.png index 7dfcde3ba45daaceec2087b515730468710078c0..869620d0d664a3a34c11c686455dce10b054be61 100644 GIT binary patch delta 81 zcmV-X0IvV99ibfxiBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a n5jItgoW|lKa720J>GuiW_a2i*3E;CQ3M&JXQw<}tcMUiJmzN%L delta 102 zcmZ1|yIz*3Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E;CQ3e^I)z8xt5 delta 89 zcmew$`A3qcGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp rw(w3~$5A7~YsMSeJLlLVhU7qk}&iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a l5jItgoW|lKa720J>GuiW_a2i*3E-0_3f7bU3TTsO3tMjgAMpSH delta 100 zcmdlYen_0BGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLV0zz-X KEeXAo1O&5--Vg-< delta 58 zcmV-A0LA~Z3AYIhiBL{Q4GJ0x0000Du?o2Z0S%MG10)&^CboSqkpz@VDUmZCB6Adh Q>;gh>!Yv8C4U_)^v%5?YKmY&$ diff --git a/res/images/icon/myfile_controlbar_cion_up_folder.png b/res/images/icon/myfile_controlbar_cion_up_folder.png index c49cfdef9fecbadd3de6dc43b772925246d328a0..251ba9e3c220431960e5ac6d7fa5d7e914b1827f 100644 GIT binary patch delta 19 acmZ3^xs;QuGr-TCONxtufng)hY!(19I0Rt; delta 21 ccmZ3=xtx=yGr-TCmrII^fq{W{BiC#e05}N*djJ3c diff --git a/res/images/icon/myfile_icon_amr.png b/res/images/icon/myfile_icon_amr.png index ddb88311df8c04dc81d7413029bb3773e46b0538..13cc3d24e552cab658ca507311de2c34d7388e73 100644 GIT binary patch delta 63 zcmV-F0Kos66_OPSiBL{Q3K|Lk006NJ4g`}M1gew91nm~6U$g)$ly^jf(9=va_fn+D Vb2B0W36skOS+gYu?*o$+3Wb056|MjP delta 58 zcmbOvI!lzNGr-TCmrII^fq{W{BNrbFBkyDhmQ_IV5X)O2xt>)FNFHU4WaQl}$M&8X J$l>K`1ptN&4deg- diff --git a/res/images/icon/myfile_icon_default_albumart.jpg b/res/images/icon/myfile_icon_default_albumart.jpg index 8dfea27734e5465e679248f6bc6ce712e5b8cc09..7f49414637f7c8253d06eeaa08e96936bed542df 100644 GIT binary patch delta 1997 zcmWkudtA@=8b9yn`|U#Ri6|#xE>V%BNU0R-vT{giWsP-m$w4HeMJ9*R!UvxtW+GYX z{;3|;soZjzOU&XmmC}skAa`RL`}y~|yx!0Ae!rjReR-!nWt~bkn}{@%zpFfx22yJ~ z_lDYGc0pIsJ={oT^=g7h>>a8u^=>d$2d#V|?prsjvjhBe(apA4)Yw+5q`|#(kvS|= z*bHBy_bYU-6+4Evh!rE+)jYdRP!C7$C9&DzsaoT>gG3J}cM;^&U(9!^6Aoj&#j>%^ zB6qBdXdZi5q&mM;YsSroxZ{$jBFCFRec^hM)R>7!Ae!B))b2^oHIdt|ImO)Jd8c7vLyj0_=qdXi>`pD@oV|4-^5xIpRrhl2{xvUL6YQsSBPN ztt>%1BQtS+fwj83pq5l_++$L^mQ+9mE?Wv!9iK>ITtdA1KEVU( z-pW8tIIoUW+g6Wk@(dfWu81%S5wz}L2drJ7{V>pPpwNmtoQi+?S;O# z23;>+d)1-BZ1>`9;g;4U`lNp*R;Eu;Rq1|El#!>Yg0037YMYa|yUk4u+@7VXwmU*R z5EI1E9b1&z(V?r7-A718?oHCgFZ*MZXLf}yULJ~4Gja`)EBW`t(IeraXTfB%@1L)A zv@2g-x!TfQ%qdu)&K1nklugMfO$4ef;ujSuT*^Jg%JPNkc6pfIt@)OU&$^dhWbH$y z(8peq3ET?gn9U@^i7^B}Ii{;U~I10E9>8#I3$pIamUYipEW_>s-TRrs-dLuPZ&5Z_Bk`z>6eeQO=dI=t6vI0c?ryE`qgD-+eiE zUf3SGR*`jeQe2hCndNhye>%IdvQAnpLz>K8hCgLaJW| z$}LIA(0a$l8aI!x`1Q{Fzdeijv$1H?g{Mu4ynY?5A-_vOzVu&@EdFi%2LfiNBHxJh zbaW$Wo`G7vmVtjj4$U+OnUV=}P43)|7n~+=P3JlPfitnl!nYca*@rHg^vE`>eJ2|Z z#O664)bu_C56F~UoMPX@DA4)Y5%d6Sg>VA96yY0iT`^V?yO(`1La%ZJX&lXnfUG)- zLb>1=R$I)yIsfI(KE<(@^Ri!Wd>$;r%PUt*mv4_@K%WiYj%fX?B4hT|lfRC(Oqw}5 zbm5tx%SAl;2iOpY{1k~L|?Gv~X zzkY^C;JYs{!-OYvz?9hM9oA4qE#1=OKAo)i2c0@Wo;IQ~PBbQ0k|m}jO($*quI=0b zPLtC+Q5@HFqCF%dx=;s)b)^v`Q@YbcuI^4!m!ZAse%DuhXNBF|@G8D3vaZh_4zi%j z#MYK{msqo+LS2^HkS9O2A;S$P4<-kV3x`sfCZp|W1vl8yRPcaNG*#!A(exNH)QP_2 zdM8>4p5RO`H0kJSKpy2rsU*uL8girD$y?(kp0pj3yl5mlcu_KOp%0yeTpfEkvDi%IGNC2z}Z2> delta 2717 zcmX9=c|6wX7VkXDtMatSNEankv=ADk5L$#{tc|o!qOyciXs2sU`We4Z)Lf;;wa1HJ zGlj}%OuCh*d#|k39n%Pj_DuJjw|~y}^F8}H&+~iUH@kf7=ZdkH6J@}KMA>xU@;uo? zh7dbW9S}~9Zyb%Ve$rx6W~jBHQV3J`MpCc-P#GahYX#{#wcC+g(^-k`0@Eu+S*BNw zst|oOQXQF-hH|1|s4|~cytI}J#|%4BvBjt#eca|IP_ci{JBw9>2;)H{-sE-qHeFUAxD{u2}%o>1t_<<;5>2%*D6KVYjshj>2?w2HMdxlR_>N)4t1Zb zSccbTBwb#AP|60M+A#=!_n$^AXG7n3bWaV^Mv@;?OVt8*4-oiZ@=r(Y$-(A$DLK4| zTZzOhK5w)dfBUgQJ2I7uR4)I|m8%paTsw|Zqng@?scr{V zo>up=*SS;oapOxaY^|l6m05cotv=Tm(@1GIwxE1@gO;)AW-6-WH|nxzr1iI|$YFBB z5+tq-Ry1wg9r|?So9`;tk#=uC64`wV(%Cfa<_P&6Ur|&|X8;m|E;?i(qZ`{1-go0Q zlN&zK8Hcdq#Vo3^v%i@pwt3Y_O#Af(Vm0q5g}nK_J1O-)?V=nfNANDnOGajsspYTd zz_~@6VQZ3qzYwuGlUFvtBeaM=Fhnj!DnScy$!Rp~P*Ug9Or2`$PJGyQ*0{tSMQHhi0rMjhz67m`5_52w$UK3{ZnOq<^ZxLsHkO!%@8E(z3sS zG4T*BNTKi#(;=D4$LqpYq&>Po%awHXU>)IpeW+1XnFD?pE}ohXjtI^3VJ5=xe8BBX zRtw-L<@m`MjF3Jt26{)NL#A+$@S`~d<4Yw4T7xg;tX%^6GevWqmvArfYvIdt%fCt;%#RbMyPRtZK$2;3T}AZVwgK< zB293IkCgPdmm+CivNup{vJcSbBBuK)V&m7rCDhLS7IMk?U;bbEG}s8CI&d zIL|nqe8AyISwn#ymtJiHdu&lO4}c1^_XL0{bvzUZdW2u?0&UuvX&6jJa0-JYga=_T zf^csS#G{W_IJ~FaYa$iXNC|u44#jxIKpCpX#6qf)2H&wmx!tnz>9fzHUTq(FT$0c@ z*cQd59}j~zO>y%G6d>$A3i!cG%E!L!?LZt9U?xdF2_{gJrYTU1^koWoP>{n(#VtB} z5~kqHVre>ULdrc2&A2{kp9qU+gn~10j#jej9H^3;XO3c1?{dJH%(HX9TqduJK<}S; z`V!Qk+WSW+qAXAdlW4ffMPNqgSPUl#n@V6Gg|906ayPZ*u!gDxRbfw|R zt;x5x2EP7YqjU$qn}7b@i6J*}T}4&oH(dOD1#~od+&QDJO_izNHr;%>P&3wRq4&;P zYwnhC$?PYXK_$Mq3cCrbs}(0M)zyFz@fX)&3!=ED4n85Q{sml7`~5GljI0lDK`uT( zw~~!JbLNE3i5f7GZQ`c?xi51yTVd;aI( z*5`g7{~O7rR3$c+QfH24VHjxXp=wJZZQfC2?_v3fqn5WEGZ8=Go&J zo|B}f%INq+mkA8tcIm_fCeqigGle~$$lpx$@okNJ6W-=uuaV8ADeCMlHPx-bekc5O z8Y?E}$mtA!k|gEIZHsB?+T`P*5^90sZ_{*HA^Ra;LH@?uYoJWpL)^9l|4hP^%_=2 z*50)&hA_aLWg%vIut4g@gSjC{9t{6CimIMWLYF#EMlZam<;_kZ6ne8csD0qg94LXh IFO#wV0|oeX-~a#s diff --git a/res/images/icon/myfile_icon_email.png b/res/images/icon/myfile_icon_email.png index c923d38781d33d9a81948ce2a3706943343b89ee..4a18fd9ce514274e82ac3955233329d7e90ec61c 100644 GIT binary patch delta 49 zcmV-10M7rI5sncGiBL{Q3K|Lk006NJ>jSg+1L^^@;{_@KlMV+-lUWCElgS4rlkf*T HlPw5qcB>E0 delta 66 zcmeAZoFT~58Q|y6%O%Cdz`($}k?S=xBk$&~%&!=M)O}VhAT^nj-IIxzcXAMWK9F;e PT@6S+XSV^8${g7M9u5#H diff --git a/res/images/icon/myfile_icon_etc.png b/res/images/icon/myfile_icon_etc.png index 088cf2df1e90c95af811b7239f62b9aaadcfb073..95980adb5bbac4cafa83c757ae431c85de5b11d0 100644 GIT binary patch delta 72 zcmaFJeT$o`Gr-TCONxtufng($9*bC}*=+t0-^AtfvJnzII>e1FC26boFyt=akR{07E(#umAu6 delta 81 zcmcb`{g9idGr-TCmrII^fq{W{BbOeF1aGF&t=UG=mUprr ji!~$fGuiW_a2i*3E-0_3eU6m3UUFHY7AbJ$qXcu?hGTd5)EMjlXMSf Plid#&llBiSlOzyb*V-zI delta 164 zcmaE*(5T4M8Q|y6%O%Cdz`($}k;{#Rk#}+cOEV+y=F2RRj6h0pW1`E3P7tt{9#;Ai0Z2 z1xViGQ3gsd@+L9?IZ6EK(!9K@9|m^?oszwq7Mi!pC_U)l;@f8u=Lfa$@=kuhuM1Sg HD-a6+TOT#9 diff --git a/res/images/icon/myfile_icon_folder.png b/res/images/icon/myfile_icon_folder.png index e71a8b700d1d132ea3ca23edbdff38dea128056a..112d4c4fb8451869e65a526c85816fe74c74ce8c 100644 GIT binary patch delta 77 zcmV-T0J8sx8T%LtiBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a j5jItgoW|lKa720J>GuiW_a2i*3E;CQ3Oxa{WeXz#D)Jp| delta 96 zcmew@(ILsx8Q|y6%O%Cdz`($}k;{#Rk#}+cOEV+y=F2RRj6h0y*3 delta 28 jcmcb_ca@K)Gr-TCmrII^fq{W{BiBt= diff --git a/res/images/icon/myfile_icon_images.png b/res/images/icon/myfile_icon_images.png index d9133d6c4f3a3864b40ec45e7067d867a1a8677c..7e932e824d9256a2599893f1880f2119d30f7d01 100644 GIT binary patch delta 114 zcmV-&0FD3h9^f7diBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a z5jItgoW|lKa720J>GuiW_a2i*3E-0_3b>Qt3W1Yi3oDb33%Qd>3{A6^48{T#0GVW` Umf)b@=>Px#07*qoM6N<$g6=yl!T9f8b6aWAK delta 131 zcmZ24zE_;5Gr-TCmrII^fq{W{BA22#Z-GeatmE~*Y_Da@42(rWe4iw%$Hnk&bhygI z$h%pTc@HBa@8pXt4nR_nbqSE%%DNv&maqi_$>VH=K+=LeN``l7#5JCTW&7vxGo7!> eE@$8LysHSAK%Ky}BsUIGBA7$}JV diff --git a/res/images/icon/myfile_icon_music.png b/res/images/icon/myfile_icon_music.png index d4988b08f70279e84990a29cffd74cda4cfb4c83..39f59f8d8e01e53eade58369eda4fdcc4d9ae579 100644 GIT binary patch delta 86 zcmV-c0IC1KAFv+^iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a s5jItgoW|lKa720J>GuiW_a2i*3E;CQ3cdl8<_oj4nhbRTvk(ri0a`;MCjbBd delta 109 zcmdlWzh9oGGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVlp#~ry`sH diff --git a/res/images/icon/myfile_icon_pdf.png b/res/images/icon/myfile_icon_pdf.png index f937fcf9fa006f7b1a70c8f3a11cacd856aa1097..d8bc6eeda458ee682d30697c554dcce1802acba5 100644 GIT binary patch delta 86 zcmV-c0IC13BA+4(iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a s5jItgoW|lKa720J>GuiW_a2i*3E;CQ3aSFL(hNZXvlI?I0+Ue?-9ug>C;$Ke delta 109 zcmbQQv`&eqGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E-0_3e}VS3T=~X3+uC23?>1Sehn|Pt_=hM6#%cp V3kyYImi7Pu002ovPDHLkV1mz0D_Q^m delta 126 zcmdlcdqS3{Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E-0_3bm8n3TGU00ssL2{{sNKzbw}^>>;s1YT ZhTZ%1a+vPSp9Hjm!PC{xWt~$(697;gD6{|o diff --git a/res/images/icon/myfile_icon_rss.png b/res/images/icon/myfile_icon_rss.png index 65740a34f35f75af661293e593762243e5c5c34e..4d2e2faa2be31ae64c9b58ec0706847535a5b975 100644 GIT binary patch delta 88 zcmV-e0H^=97N!;oiBL{Q3K|Lk006NJf&`O~1iZ6M1u_AXe+DFzqy{6C$Oh_@vjxA&7H2-K7K2rH8$2|2S~2`mAViwY-`vkHS5zaJ+6 delta 115 zcmZ1`woQzuGr-TCmrII^fq{W{BUcj(Bk$xMmOYHTn>|>K7=fHBHWeT_k4+g!9%Oq3 zBv-RXi}Ggcw1ht86)9y}G<&|oTXFAz?caGPOK@BP%D>^z29n~OmOw)SICVgV)NrW- I$;DjF0OkcBlK=n! diff --git a/res/images/icon/myfile_icon_select_all.png b/res/images/icon/myfile_icon_select_all.png index 0c531fcda666b3446ee7fded5dfbdaa6c83b21ba..9723dd4ec761b40be99a5641314ef9f451e67238 100644 GIT binary patch delta 77 zcmV-T0J8tW8nqeGuiW_a2i*3E;CQ3XuV`xeJK_Eh-*z delta 96 zcmdlgbx4Y*Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp ww(w3~$5A7~YsMSeJLlLVcig~@o1OS{ cUm-sKq6Fz_T0FEUgOlV2sFRHc`ICnTS16RwYK>%{Ht|j6jYZTbnfR*7fG=%I_TL mojvzQNxY)n|3xe>Gox&_Xf*RqzRR`(sH&CyCy=b;2nPV%k{aj$ diff --git a/res/images/icon/myfile_icon_soft_back.png b/res/images/icon/myfile_icon_soft_back.png index f8e4d01a65a6f3b49842aeb4a12cc69b61ee0163..b66bcde890cd4937bc11fbed01d56cd39f39cd8a 100644 GIT binary patch delta 43 zcmV+`0M!4`5XcY;iBL{Q3K|Lk005B;f3b{T0h8ha6y2lGr-TCmrII^fq{W{B3C^l@5at}Mn>MrFBofpWC~LokbK3o4@jHHGXS-05JUg~ diff --git a/res/images/icon/myfile_icon_soft_search_back.png b/res/images/icon/myfile_icon_soft_search_back.png index 7a548a47b18cf363991289bfc646415661563abe..4c6751607badfbb10db19eabf5b5f124b2bf57e6 100644 GIT binary patch delta 19 acmcb~bDf8)Gr-TCONxtufng($FBh#CJ#NnYb0!xsM|7cjy~_?wOrjmX$$Up0AS@B%K!iX diff --git a/res/images/icon/myfile_icon_svg.png b/res/images/icon/myfile_icon_svg.png index 12eb18d9cd8b842e34f19cacb1cd4317e2548618..ba2253fdac3bce8a526a57681cf3e2a58ec916a4 100644 GIT binary patch delta 62 zcmV-E0KxyQ7NZsliBL{Q3K|Lk006NJCIz!I1v>$gZw76%-3Ac>lkW$xlb{If47X9u UGH9_q2-yh1Ba@m5#FJkN&P|FHsQ>@~ delta 78 zcmZ21wpNU%Gr-TCmrII^fq{W{BbOR0BkyJdR%=E^-pSc)xj@bhHbD^QCHn>-Ig{fJ dAMf_Svql*kZ8>go98~6=JdyJVP$HD;902e176$+T diff --git a/res/images/icon/myfile_icon_swf.png b/res/images/icon/myfile_icon_swf.png index 6bc8a79b23b71c475eb724775c93678cb4944160..26fc41975a12b755aefbf0ddfc6f1e2ccb12eea4 100644 GIT binary patch delta 32 ocmca2cwUgJGr-TCONxtufng(09_!?4R`<<^S@$wcZsZ6C0GVV7p8x;= delta 40 ucmX>vctwz>Gr-TCmrII^fq{W{BUc_PBk$x2R(D3;&HGvRG66X?9Kis|^$FJi diff --git a/res/images/icon/myfile_icon_task.png b/res/images/icon/myfile_icon_task.png index 8fa293819e8f0ea66b2d0b216dd0e31a1eb2077c..6554dc8a81da6f39e5f037924db8de9475047651 100644 GIT binary patch delta 88 zcmV-e0H^=?5bqEQiBL{Q3K|Lk006NJTLqJ71!uF+1#STtxV5y=h+;-G)1%tajyU^u uE6#m)IOLa9lUWBV35rLrhE<0kOY@VD2iXueGzhBz0000*ZN3VuehagMy4U>ik*%1vlGzhBz0000~|iat9d!vy2G4 S0kcR783B`G3$3#d3=;t*6cP;p delta 80 zcmbOswOER$Gr-TCmrII^fq{W{BiB|IM&8N$Sz;J@H%qe?G6Fe0Y~euiFvD4Sgp ZD73kSV>gJh=K}F2M{utNa#(qU83F&F5@rAZ diff --git a/res/images/icon/myfile_icon_vText.png b/res/images/icon/myfile_icon_vText.png index a0206f87ead6bd85c771bc316808db98ccb4355c..096f3d8ccb0576c81bbabab6bab6051f407ec662 100644 GIT binary patch delta 60 zcmV-C0K@-+5cUrWiBL{Q3K|Lk005B;HnBq%0h3w*zmpmQZIg%sLzBz`;ghZd?30@W ST$A_&RT$h+BvbqY|!<{NBsi~ujf6x{#- diff --git a/res/images/icon/myfile_icon_vcalender.png b/res/images/icon/myfile_icon_vcalender.png index 90271fd038cdb4e7205f6d691423a19a4459f29c..0e8068787b1b8dd06233ae49630eef9fb44df9b8 100644 GIT binary patch delta 77 zcmV-T0J8t-9NZiViBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a j5jItgoW|lKa720J>GuiW_a2i*3E;CQ3T*DYM3ElJ delta 96 zcmca3^HPSVGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp xw(w3~$5A7~YsMSeJLlLVfpJ;2moUnA3p#9 diff --git a/res/images/icon/myfile_icon_vcard.png b/res/images/icon/myfile_icon_vcard.png index cf09ea0efeba03e48a3ea04fe461b756e7fea11a..7e4081aa69b55d48610e6d1d697c99a4b463669b 100644 GIT binary patch delta 89 zcmV-f0H*(*AC4aiiBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a v5jItgoW|lKa720J>GuiW_a2i*3E-0_3d^(e3cdo9vJG965DsRucMc~3u;(J* delta 114 zcmeB^pC`}L8Q|y6%O%Cdz`($}k;{#Rk#}+cOEV+y=F2RRj6h0oic;Gp>D1K+Y20SRl#B Mmj)C{=Tm0{0FK)uQUCw| diff --git a/res/images/icon/myfile_icon_video.png b/res/images/icon/myfile_icon_video.png index a2325fac965b91633e3c8d58edc08e2036da14b7..683813bfe071cf18469034445c6a9b8a611794f1 100644 GIT binary patch delta 112 zcmV-$0FVE|9kCq>iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a z5jItgoW|lKa720J>GuiW_a2i*3E;CQ3X}l`6QsU_nxB)y3n;Vf3mpLx;*Oa40@bnv SGxfcxoPVocm!`8F4W$8t$S)88 delta 135 zcmdledq|e2Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLV n11NTvTb5CT_fg-BpG;Rbu^4~dyK+wb>bU94csKL#E@cD&NXjpr diff --git a/res/images/icon/myfile_icon_video_play.png b/res/images/icon/myfile_icon_video_play.png index dd3606cc577e3b9cb7625adb04a6bd7a9f1821ed..807726a5f886653f8475a85356a4f855315a8f31 100644 GIT binary patch delta 23 ecmZ3@zk;8uGr-TCONxtufng)hf40dy?DGLh(gq&@ delta 27 icmZ3%znY(?Gr-TCmrII^fq{W{BiDa6M&8Ms?DGLzRR%-= diff --git a/res/images/icon/myfile_icon_word.png b/res/images/icon/myfile_icon_word.png index 4585c4e681439515f483dfe11ec7c707201dd726..127365813ba5892885ee0739b2b01dea1abed65c 100644 GIT binary patch delta 45 zcmaDQ@r93S&`j#b38jYGXOer B4OajF delta 53 zcmaDN@=AoKGr-TCmrII^fq{W{BiC&Y}y$U9kv-IkGe Jb0j-AGXREi4VnM| diff --git a/res/images/icon/myfile_icon_zip.png b/res/images/icon/myfile_icon_zip.png index 227f5a13506a9a33187a73eda3cd1be8d876d6b6..0ee27b0437b2922fa65a0cb7d8cd7267622e8deb 100644 GIT binary patch delta 29 lcmeyw`;M2ZGr-TCONxtufng)h73R$knf(|y8?YW?1OSJp2*v;a delta 35 pcmaFI`-zvQGr-TCmrII^fq{W{Bi9vXM&8Z$nEe=mln(15MgXdl2=xE} diff --git a/res/images/icon/myfile_search_category_all.png b/res/images/icon/myfile_search_category_all.png index 321be7e4e6aaf6bced3d597f0484cceb3d821b0c..cb67408b3c2b866d4d2d19fd625bb3fcf09607be 100644 GIT binary patch delta 39 pcmbQuF@r;{Gr-TCONxtufx*+mB?w4~fG`IeknHW0-KhAB832*f2VDRF delta 42 scmbQiF`GlNGr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+DEEsQ0HD$bga7~l diff --git a/res/images/icon/myfile_search_category_doc.png b/res/images/icon/myfile_search_category_doc.png index 3eb012df2fb31e74fb18542a9b27110ddf4d2244..98dca4d2d27cd2ec0ed396b39739966c0e05cfcd 100644 GIT binary patch delta 39 pcmey!{*GO)Gr-TCONxtufx*+mB?w4~fG`IeknHW0-Kcnh833xi2i*Vw delta 42 scmaFI{*hg=Gr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+D0hJw0K2*f1ONa4 diff --git a/res/images/icon/myfile_search_category_img.png b/res/images/icon/myfile_search_category_img.png index 08a5c5fc56dc3067966d570a60c00f556ccc5e07..c87bbaf6a9acddd9e6daee65990fbae0c11bc296 100644 GIT binary patch delta 47 xcmbQh+07}}8Q|y6CB?ei delta 54 zcmeC?oWQBr8Q|y6%O%Cdz`(%k>ERLtq(wlOgAGXbcFOW@l&fTBag{@{Gr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+DA&%+!pl67ck*)Pl>q+# B3L5|b diff --git a/res/images/icon/myfile_search_category_video.png b/res/images/icon/myfile_search_category_video.png index 9761acb92d7bbe5fa1a5cda2cb5e9f02ff5ddbf8..dbdb55f807c682db787a1c30f68b29effb193b7c 100644 GIT binary patch delta 78 zcmdnSxq(xzGr-TCONxtufx*+mB?w4~fG`IeknHW0-KdzrEZ6M7 +#include +#include +#include +#include +#include +#include +#include + +#include "define.h" +#include "layout.h" +#include "view.h" +#include "data.h" +#include "util/utils.h" +#include "util/dialog_popup.h" +#include "util/fs-util.h" +#include "util/fs-error.h" +#include "util/file-util.h" + +static char* _folder_list_label_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object* _folder_list_content_get(void *data, Evas_Object *obj, const char *part); +static void _folder_list_del(void *data, Evas_Object *obj); + +static bool _draw_file_list(struct _priv *priv, int flag); +static bool _draw_file_list_item_selected(item_data_s *id); +static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info); + +static void _set_folder_item_data(item_data_s *id, fsNodeInfo *node) +{ + char *new_path = NULL; + char *temp_size = NULL; + int buffer_size; + + buffer_size = strlen(node->path) + strlen("/") + strlen(node->name); + new_path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(new_path, buffer_size+1, "%s%s%s", node->path, "/", node->name); + + id->child = mf_file_ls(new_path); + id->parent_path = node->path; + + id->name = node->name; + id->node = node; + + mf_file_attr_get_file_size_info(&temp_size, node->size); + buffer_size = strlen(temp_size); + id->file_size = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(id->file_size, buffer_size+1, "%s", temp_size); + + free(new_path); + free(temp_size); + return; +} + +static void _item_focus_cb(void *data, Evas_Object *obj, void *event_info) +{ + char *signal = NULL; + + signal = (char *)data; + + if (!strcmp(signal, "item,focused")) + elm_object_item_signal_emit(event_info, "mouse,in", "elm"); + else if (!strcmp(signal, "item,unfocused")) + elm_object_item_signal_emit(event_info, "mouse,out", "elm"); +} + +static Eina_Bool ecore_timer_cb(void *data) +{ + Evas_Object *genlist = (Evas_Object *)data; + Elm_Object_Item *it = elm_genlist_selected_item_get(genlist); + elm_genlist_item_selected_set(it, EINA_FALSE); + + return ECORE_CALLBACK_CANCEL; +} + +static void +check_changed_item_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object *genlist = (Evas_Object *)data; + ecore_timer_add(0.1, ecore_timer_cb, genlist); + + return; +} + +static Evas_Object* create_check(Evas_Object *parent, void *data) +{ + Evas_Object *check = NULL; + + check = elm_check_add(parent); + evas_object_smart_callback_add(check, "changed", check_changed_item_cb, data); + evas_object_propagate_events_set(check, EINA_FALSE); + + return check; +} + +static fsFileType _get_file_type(char *path, char *name) +{ + fsFileType fType; + int buffer_size = 0; + + char *file_path = NULL; + + buffer_size = strlen(path)+strlen("/")+strlen(name); + + file_path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(file_path, buffer_size+1, "%s%s%s", path, "/", name); + + fType = mf_file_attr_get_file_type_by_mime(file_path); + + free(file_path); + + return fType; +} + +static char* _get_file_size(char *path, char *file_name) +{ + int buffer_size, file_size; + char *file_path = NULL, *size = NULL; + + buffer_size = strlen(path)+strlen("/")+strlen(file_name); + + file_path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(file_path, buffer_size+1, "%s%s%s", path, "/", file_name); + + file_size = mf_file_size(file_path); + mf_file_attr_get_file_size_info(&size, file_size); + + free(file_path); + + return size; +} + +static void _focus_set(struct _priv *priv, int flag) +{ + Evas_Object *folder, *file, *path; + + folder = elm_object_part_content_get(priv->layout, PART_FOLDER_LIST); + file = elm_object_part_content_get(priv->layout, PART_FILE_LIST); + path = elm_object_part_content_get(priv->base, PART_FILE_PATH); + + if (flag == 1) { + elm_object_focus_next_object_set(path, folder, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(folder, path, ELM_FOCUS_UP); + elm_object_focus_next_object_set(file, path, ELM_FOCUS_UP); + elm_object_focus_next_object_set(folder, file, ELM_FOCUS_RIGHT); + elm_object_focus_next_object_set(file, folder, ELM_FOCUS_LEFT); + } else if (flag == 2) { + elm_object_focus_next_object_set(path, file, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(file, path, ELM_FOCUS_UP); + elm_object_focus_next_object_set(folder, file, ELM_FOCUS_RIGHT); + elm_object_focus_next_object_set(file, folder, ELM_FOCUS_LEFT); + } +} + +static bool _draw_child_folder_list(Evas_Object *obj, item_data_s *id, Elm_Object_Item *parent) +{ + Elm_Object_Item *it = NULL; + Eina_List *list = NULL; + Eina_List *temp_folder = NULL, *temp_file = NULL; + int i = 0, buffer_size, ret; + char *new_path = NULL, *new_path2 = NULL; + + item_data_s *id_local; + fsNodeInfo *node; + + int count = eina_list_count(id->child); + int level; + + Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new(); + itc->item_style = "custom_folder"; + itc->func.text_get = _folder_list_label_get; + itc->func.content_get = _folder_list_content_get; + itc->func.del = _folder_list_del; + + for (i = 0; i < count; i++) { + list = eina_list_nth_list(id->child, i); + char *data = (char *)eina_list_data_get(list); + + buffer_size = strlen(id->parent_path)+strlen("/")+strlen(id->name)+strlen("/")+strlen(data); + + new_path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(new_path, buffer_size+1, "%s%s%s%s%s", id->parent_path, "/", id->name, "/", data); + + buffer_size = strlen(id->parent_path)+strlen("/")+strlen(id->name); + + new_path2 = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(new_path2, buffer_size+1, "%s%s%s", id->parent_path, "/", id->name); + + if (mf_is_dir(new_path)) { + mf_file_attr_get_path_level(new_path, &level); + id_local = calloc(sizeof(item_data_s), 1); + id_local->index = i; + + id_local->name = data; + id_local->base = id->base; + id_local->layout = id->layout; + id_local->level = level; + + ret = mf_fs_oper_read_dir(new_path2, &temp_folder, &temp_file); + if (ret != MYFILE_ERR_NONE) { + free(new_path); + free(new_path2); + free(id_local->name); + free(id_local); + return false; + } + node = (fsNodeInfo *)eina_list_nth(temp_folder, i); + _set_folder_item_data(id_local, node); + + it = elm_genlist_item_insert_after(obj, itc, id_local, parent, parent, ELM_GENLIST_ITEM_NONE, _item_selected_cb, id_local); + id_local->item = it; + elm_object_item_data_set(it, id_local); + } + } + + elm_genlist_item_class_free(itc); + + free(new_path); + free(new_path2); + return true; +} + +static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct _priv *priv; + item_data_s *selected_item = (item_data_s *)elm_object_item_data_get(event_info); + path_item_data_s *pld; + + if (selected_item->expanded == 1) { + selected_item->expanded = 0; + elm_genlist_item_subitems_clear(event_info); + elm_object_item_data_set(event_info, selected_item); + return; + } + + priv = calloc(sizeof(priv), 1); + pld = calloc(sizeof(path_item_data_s), 1); + + int buffer_size, same = 0, level; + + priv->base = selected_item->base; + priv->layout = selected_item->layout; + + Evas_Object *path_object = elm_object_part_content_get(priv->base, PART_FILE_PATH); + const char *last_path = elm_object_item_part_text_get(elm_gengrid_last_item_get(path_object), "elm.text"); + + pld = (path_item_data_s *)elm_object_item_data_get(elm_gengrid_last_item_get(path_object)); + + selected_item->last_path = last_path; + + char *new_path = NULL; + + if (!strcmp(last_path, "Home")) { + buffer_size = strlen(selected_item->parent_path)+strlen("/")+strlen(selected_item->name); + + new_path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(new_path, buffer_size+1, "%s%s%s", selected_item->parent_path, "/", selected_item->name); + } else { + buffer_size = strlen(selected_item->parent_path)+strlen("/")+strlen(selected_item->name); + + new_path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(new_path, buffer_size+1, "%s%s%s", selected_item->parent_path, "/", selected_item->name); + + mf_file_attr_get_path_level(new_path, &level); + if (pld->level == level) + same = 1; + else if (pld->level < level) + same = 0; + else + same = level - pld->level; + } + + if (selected_item->child != NULL && eina_list_count(selected_item->child)) { + if (!_draw_child_folder_list(obj, selected_item, event_info)) { + _ERR("_draw_child_folder_list failed."); + + if (!new_path) + free(new_path); + if (!pld) + free(pld); + return; + } + selected_item->expanded = 1; + } + + priv->selected_parent_path = selected_item->parent_path; + priv->selected_folder = selected_item->name; + priv->same = same; + priv->expanded = selected_item->expanded; + + viewmgr_update_view(VIEW_BASE, UPDATE_PATH, priv); + + if (!_draw_file_list_item_selected(selected_item)) { + _ERR("_draw_file_list_item_selected failed."); + + if (!new_path) + free(new_path); + if (!pld) + free(pld); + return; + } + + if (!new_path) + free(new_path); + if (!pld) + free(pld); + + return; +} + +static char* +_file_list_label_get(void *data, Evas_Object *obj, const char *part) +{ + char buf[256]; + item_data_s *id = (item_data_s *)data; + + if (!strcmp("elm.text1", part)) { + if (id->is_empty) { + if (id->index == 0) + snprintf(buf, sizeof(buf), "%s", "."); + else if (id->index == 1) + snprintf(buf, sizeof(buf), "%s", ".."); + } else { + if (id->name != NULL) + snprintf(buf, sizeof(buf), "%s", id->name); + else + return NULL; + } + return strdup(buf); + } else if (!strcmp("elm.text2", part)) { + if (id->file_size == NULL) + return NULL; + else + snprintf(buf, sizeof(buf), "%s", id->file_size); + + return strdup(buf); + } else if (!strcmp("elm.text3", part)) { + snprintf(buf, sizeof(buf), "2016/04/12"); + return strdup(buf); + } + + return NULL; +} + + +static char* +_folder_list_label_get(void *data, Evas_Object *obj, const char *part) +{ + char buf[256]; + item_data_s *id = (item_data_s *)data; + Eina_List *list; + + if (!strcmp("elm.text.folder", part)) { + snprintf(buf, sizeof(buf), "%s", id->name); + return strdup(buf); + } else if (!strcmp("elm.text1", part)) { + if (eina_list_count(id->child) == 0 || id->is_home == 1) { + if (id->index == 0) + snprintf(buf, sizeof(buf), "%s", "."); + else if (id->index == 1) + snprintf(buf, sizeof(buf), "%s", ".."); + } else { + list = eina_list_nth_list(id->child, id->index); + char *data = (char *)eina_list_data_get(list); + snprintf(buf, sizeof(buf), "%s", data); + } + return strdup(buf); + } else if (!strcmp("elm.text2", part)) { + if (id->file_size == NULL) + return NULL; + else + snprintf(buf, sizeof(buf), "%s", id->file_size); + return strdup(buf); + } else if (!strcmp("elm.text3", part)) { + snprintf(buf, sizeof(buf), "2016/04/12"); + return strdup(buf); + } + + return NULL; +} + +static Evas_Object* +_folder_list_content_get(void *data, Evas_Object *obj, const char *part) +{ + item_data_s *id = (item_data_s *)data; + + if (!strcmp("elm.swallow.icon", part)) { + Evas_Object *icon = elm_image_add(obj); + + if (id->type == FILE_TYPE_IMAGE) + elm_image_file_set(icon, IMGDIR"/icon/myfile_icon_images.png", NULL); + else + elm_image_file_set(icon, IMGDIR"/icon/myfile_icon_folder.png", NULL); + + return icon; + } else if (!strcmp("elm.swallow.end", part)) + return create_check(obj, data); + + return NULL; +} + +static void +_folder_list_del(void *data, Evas_Object *obj) +{ +/* Unrealized callback can be called after this. + * Accessing item_data_s can be dangerous on unrealized callback. +*/ + item_data_s *id = (item_data_s *)data; + free(id); +} + +static bool _draw_folder_list(struct _priv *priv) +{ + Evas_Object *scroller = NULL; + Evas_Object *genlist = NULL; + + Elm_Object_Item *it = NULL; + item_data_s *id; + list_data_s *list_data = calloc(sizeof(list_data_s), 1); + + fsNodeInfo *node = NULL; + + char *path = NULL; + + scroller = elm_scroller_add(priv->layout); + genlist = elm_genlist_add(scroller); + elm_object_focus_allow_set(genlist, EINA_TRUE); + + Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new(); + itc->item_style = "custom_folder"; + itc->func.text_get = _folder_list_label_get; + itc->func.content_get = _folder_list_content_get; + itc->func.del = _folder_list_del; + + path = Get_Root_Path(STORAGE_TYPE_INTERNAL); + + list_data->path = path; + + int ret = mf_fs_oper_read_dir(list_data->path, &list_data->folder_list, &list_data->file_list); + if (ret != MYFILE_ERR_NONE) { + free(path); + free(list_data->path); + free(list_data); + return false; + } + + list_data->file_count = eina_list_count(list_data->file_list); + list_data->folder_count = eina_list_count(list_data->folder_list); + + int i; + + for (i = 0; i < list_data->folder_count; i++) { + id = calloc(sizeof(item_data_s), 1); + id->index = i; + + node = (fsNodeInfo *)eina_list_nth(list_data->folder_list, i); + id->base = priv->base; + id->layout = priv->layout; + id->expanded = 0; + id->level = 1; + _set_folder_item_data(id, node); + + it = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _item_selected_cb, id); + id->item = it; + elm_object_item_data_set(it, id); + } + + elm_genlist_item_class_free(itc); + + elm_object_part_content_set(priv->layout, PART_FOLDER_LIST, scroller); + elm_object_content_set(scroller, genlist); + + evas_object_smart_callback_add(genlist, "item,focused", _item_focus_cb, "item,focused"); + evas_object_smart_callback_add(genlist, "item,unfocused", _item_focus_cb, "item,unfocused"); + + free(list_data); + free(path); + + return true; +} + +static bool _draw_file_list_item_selected(item_data_s *id) +{ + Evas_Object *scroller = NULL; + Evas_Object *genlist = NULL; + + scroller = elm_scroller_add(id->layout); + genlist = elm_genlist_add(scroller); + elm_object_focus_allow_set(genlist, EINA_TRUE); + + Elm_Object_Item *it = NULL; + Elm_Genlist_Item_Class *itc = NULL; + + item_data_s *id_local = NULL; + + char *path = NULL; + + int buffer_size = strlen(id->parent_path)+strlen("/")+strlen(id->name); + path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(path, buffer_size+1, "%s%s%s", id->parent_path, "/", id->name); + + itc = elm_genlist_item_class_new(); + itc->item_style = "custom_file"; + itc->func.text_get = _file_list_label_get; + itc->func.content_get = _folder_list_content_get; + itc->func.del = _folder_list_del; + + int i, total_count = 0; + + if (id->child != NULL) + total_count = eina_list_count(id->child); + + if (!total_count) + id->is_empty = 1; + else + id->is_empty = 0; + + Eina_List *list = NULL; + + if (total_count == 0) { + for (i = 0; i < 2; i++) { + id_local = calloc(sizeof(item_data_s), 1); + id_local->index = i; + + id_local->is_empty = id->is_empty; + + it = elm_genlist_item_append(genlist, itc, id_local, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + id_local->item = it; + } + } else { + for (i = 0; i < total_count; i++) { + id_local = calloc(sizeof(item_data_s), 1); + id_local->index = i; + + list = eina_list_nth_list(id->child, i); + id_local->name = (char *)eina_list_data_get(list); + + id_local->type = _get_file_type(path, id_local->name); + id_local->file_size = _get_file_size(path, id_local->name); + id_local->is_empty = id->is_empty; + + it = elm_genlist_item_append(genlist, itc, id_local, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + id_local->item = it; + } + } + + elm_genlist_item_class_free(itc); + elm_object_part_content_set(id->layout, PART_FILE_LIST, scroller); + + elm_object_content_set(scroller, genlist); + + evas_object_smart_callback_add(genlist, "item,focused", _item_focus_cb, "item,focused"); + evas_object_smart_callback_add(genlist, "item,unfocused", _item_focus_cb, "item,unfocused"); + + Evas_Object *folder = elm_object_part_content_get(id->layout, PART_FOLDER_LIST); + Evas_Object *file = elm_object_part_content_get(id->layout, PART_FILE_LIST); + Evas_Object *path_obj = elm_object_part_content_get(id->base, PART_FILE_PATH); + + elm_object_focus_next_object_set(path_obj, folder, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(folder, path_obj, ELM_FOCUS_UP); + elm_object_focus_next_object_set(file, path_obj, ELM_FOCUS_UP); + elm_object_focus_next_object_set(folder, file, ELM_FOCUS_RIGHT); + elm_object_focus_next_object_set(file, folder, ELM_FOCUS_LEFT); + + free(path); + + return true; +} + +static bool _draw_file_list_root(struct _priv *priv) +{ + Evas_Object *scroller = NULL; + Evas_Object *genlist = NULL; + + Elm_Object_Item *it = NULL; + item_data_s *id; + Elm_Genlist_Item_Class *itc; + + int i = 0; + + scroller = elm_scroller_add(priv->layout); + genlist = elm_genlist_add(scroller); + elm_object_focus_allow_set(genlist, EINA_TRUE); + + itc = elm_genlist_item_class_new(); + itc->item_style = "custom_file"; + + itc->func.text_get = _folder_list_label_get; + itc->func.content_get = _folder_list_content_get; + itc->func.del = _folder_list_del; + + for (i = 0; i < 2; i++) { + id = calloc(sizeof(item_data_s), 1); + id->index = i; + id->is_home = 1; + + elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + id->item = it; + } + + elm_genlist_item_class_free(itc); + elm_object_part_content_set(priv->layout, PART_FILE_LIST, scroller); + + elm_object_content_set(scroller, genlist); + + evas_object_smart_callback_add(genlist, "item,focused", _item_focus_cb, "item,focused"); + evas_object_smart_callback_add(genlist, "item,unfocused", _item_focus_cb, "item,unfocused"); + + return true; +} + +static bool _draw_file_list(struct _priv *priv, int flag) +{ + Evas_Object *scroller = NULL; + Evas_Object *genlist = NULL; + + item_data_s *id; + Elm_Genlist_Item_Class *itc; + + int is_home = 0; + + char *path = NULL; + + if (priv->selected_folder == NULL) { + is_home = 1; + int buffer_size = strlen(priv->selected_parent_path); + path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(path, buffer_size+1, "%s", priv->selected_parent_path); + } else { + int buffer_size = strlen(priv->selected_parent_path)+strlen("/")+strlen(priv->selected_folder); + + path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(path, buffer_size+1, "%s%s%s", priv->selected_parent_path, "/", priv->selected_folder); + is_home = 0; + } + + scroller = elm_scroller_add(priv->layout); + genlist = elm_genlist_add(scroller); + elm_object_focus_allow_set(genlist, EINA_TRUE); + + if (flag == 2) { + itc = elm_genlist_item_class_new(); + itc->item_style = "custom_file_select"; + + itc->func.text_get = _folder_list_label_get; + itc->func.content_get = _folder_list_content_get; + itc->func.del = _folder_list_del; + } else { + itc = elm_genlist_item_class_new(); + itc->item_style = "custom_file"; + + itc->func.text_get = _folder_list_label_get; + itc->func.content_get = _folder_list_content_get; + itc->func.del = _folder_list_del; + } + + int i, total_count; + + Eina_List *list = mf_file_ls(path); + total_count = eina_list_count(list); + + Eina_List *temp; + + if (total_count == 0 || is_home == 1) { + for (i = 0; i < 2; i++) { + id = calloc(sizeof(item_data_s), 1); + id->index = i; + id->is_home = is_home; + + elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + } + } else { + for (i = 0; i < total_count; i++) { + id = calloc(sizeof(item_data_s), 1); + id->index = i; + id->is_home = is_home; + id->child = list; + temp = eina_list_nth_list(list, i); + + id->name = (char *)eina_list_data_get(temp);; + id->file_size = _get_file_size(path, id->name); + id->type = _get_file_type(path, id->name); + + elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + } + } + + elm_genlist_item_class_free(itc); + elm_object_part_content_set(priv->layout, PART_FILE_LIST, scroller); + + elm_object_content_set(scroller, genlist); + + _focus_set(priv, flag); + + evas_object_smart_callback_add(genlist, "item,focused", _item_focus_cb, "item,focused"); + evas_object_smart_callback_add(genlist, "item,unfocused", _item_focus_cb, "item,unfocused"); + + free(path); + + return true; +} + +static void _draw_view_content(struct _priv *priv) +{ + if (!_draw_folder_list(priv)) { + _ERR("Draw folder list failed."); + return; + } + if (!_draw_file_list_root(priv)) { + _ERR("Draw file list failed."); + return; + } +} + + +static bool _create(layoutmgr *lmgr, void *data) +{ + struct _priv *priv; + Evas_Object *base, *layout; + + if (!lmgr) { + _ERR("failed to get layoutmgr"); + return false; + } + + priv = calloc(1, sizeof(*priv)); + priv = data; + if (!priv) { + _ERR("failed to allocate priv"); + return false; + } + + base = layoutmgr_get_base(lmgr); + if (!base) { + _ERR("failed to get base object"); + goto err; + } + + layout = elm_layout_add(base); + if (!layout) { + _ERR("failed to create layout"); + goto err; + } + + if (!elm_layout_file_set(layout, EDJEFILE, GRP_VIEW_DEFAULT)) { + _ERR("failed to set layout file"); + goto err2; + } + + priv->base = base; + priv->layout = layout; + priv->lmgr = lmgr; + + layoutmgr_set_layout_data(lmgr, LAYOUT_DEFAULT, priv); + _draw_view_content(priv); + + _focus_set(priv, 1); + + return true; + +err2: + evas_object_del(layout); +err: + free(priv); + return false; +} + +static void _destroy(void *layout_data) +{ + struct _priv *priv; + + if (!layout_data) { + _ERR("failed to get layout data"); + return; + } + + priv = layout_data; + + evas_object_del(priv->layout); + + free(priv); +} + +static void _show(void *layout_data) +{ + struct _priv *priv; + + if (!layout_data) { + _ERR("failed to layout data"); + return; + } + + priv = layout_data; + + evas_object_show(priv->layout); + elm_object_part_content_set(priv->base, PART_CONTENT_AREA, priv->layout); +} + +static void _hide(void *layout_data) +{ + struct _priv *priv; + + if (!layout_data) { + _ERR("failed to get layout data"); + return; + } + + priv = layout_data; + + evas_object_hide(priv->layout); + elm_object_part_content_unset(priv->base, PART_CONTENT_AREA); +} + +static void _update(void *layout_data, int update_type, void *data) +{ + struct _priv *priv; + + if (!layout_data) { + _ERR("failed to get layout data"); + return; + } + + priv = layout_data; + + switch (update_type) { + case UPDATE_FILE: + elm_object_disabled_set(elm_object_part_content_get(priv->layout, PART_FOLDER_LIST), EINA_FALSE); + _draw_file_list(priv, 1); + break; + + case UPDATE_FILE_TO_SELECT: + elm_object_disabled_set(elm_object_part_content_get(priv->layout, PART_FOLDER_LIST), EINA_TRUE); + _draw_file_list(priv, 2); + break; + + default: + break; + } +} + +static layout_class _lclass = { + .layout_id = LAYOUT_DEFAULT, + .create = _create, + .show = _show, + .hide = _hide, + .destroy = _destroy, + .update = _update, +}; + +layout_class *layout_default_get_lclass(void) +{ + return &_lclass; +} diff --git a/src/main.c b/src/main.c old mode 100644 new mode 100755 index 6258032..72f19fc --- a/src/main.c +++ b/src/main.c @@ -21,8 +21,8 @@ #include #include "define.h" -#include "utils.h" #include "view.h" +#include "util/utils.h" SET_TAG(PACKAGE); @@ -58,7 +58,7 @@ static bool _create(void *data) } if (!viewmgr_add_view(view_base_get_vclass(), NULL)) { - _ERR("Add view failed."); + _ERR("Add view base failed."); goto err; } @@ -83,10 +83,7 @@ static void _terminate(void *data) ad = data; if (!viewmgr_remove_view(VIEW_BASE)) - _ERR("Remove view failed."); - - if (!viewmgr_remove_view(VIEW_ACTION_MENU)) - _ERR("Remove view failed."); + _ERR("Remove view default failed."); if (!viewmgr_destroy()) _ERR("Destroy viewmgr failed."); @@ -116,11 +113,11 @@ static void _app_control(app_control_h control, void *data) static void _pause(void *data) { - view_state state; + /*view_state state; state = viewmgr_get_view_state(VIEW_ACTION_MENU); if (state == VIEW_STATE_VISIBLE) - viewmgr_hide_view(VIEW_ACTION_MENU); + viewmgr_hide_view(VIEW_ACTION_MENU);*/ inputmgr_enable(EINA_FALSE); } diff --git a/src/view/dialog_popup_view.c b/src/util/dialog_popup.c old mode 100644 new mode 100755 similarity index 57% rename from src/view/dialog_popup_view.c rename to src/util/dialog_popup.c index d0b9e1c..8ef81ff --- a/src/view/dialog_popup_view.c +++ b/src/util/dialog_popup.c @@ -18,23 +18,43 @@ #include #include #include +#include #include #include #include - #include "define.h" -#include "utils.h" #include "view.h" -#include "dialog_popup_view.h" +#include "data.h" +#include "util/utils.h" +#include "util/dialog_popup.h" + +#define STYLE_TARGET_BTN "target_btn" + +static void _down_btn_cb(void *data, Evas_Object *obj, void *event_info); +static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Mouse_Move *ev); + +static input_handler focus_handler = { + .mouse_move = _mouse_move +}; +static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Mouse_Move *ev) +{ + elm_object_focus_set(obj, EINA_TRUE); +} + +static void _down_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + evas_object_del((Evas_Object *)data); +} -Evas_Object *dialog_popup_create(Evas_Object *win, dialog_popup_info_t *dialog_popup_info) +Evas_Object *dialog_popup_create(dialog_popup_info_t *dialog_popup_info) { Evas_Object *dialog_popup = NULL; Evas_Object *window_layout = NULL; Evas_Object *button_1 = NULL, *button_2 = NULL; - Evas_Object *scroller = NULL; Evas_Object *content_label = NULL; Evas_Object *content_check = NULL; Evas_Object *content_entry = NULL; @@ -50,6 +70,9 @@ Evas_Object *dialog_popup_create(Evas_Object *win, dialog_popup_info_t *dialog_p goto out; } + struct _priv *priv; + priv = dialog_popup_info->data; + /* Creating a Notification Window */ dialog_popup = elm_win_add(NULL, "dialog_popup", ELM_WIN_BASIC); @@ -74,6 +97,8 @@ Evas_Object *dialog_popup_create(Evas_Object *win, dialog_popup_info_t *dialog_p goto out; } + priv->popup_win = dialog_popup; + elm_win_alpha_set(dialog_popup, EINA_TRUE); elm_win_borderless_set(dialog_popup, EINA_TRUE); elm_win_autodel_set(dialog_popup, EINA_TRUE); @@ -83,107 +108,111 @@ Evas_Object *dialog_popup_create(Evas_Object *win, dialog_popup_info_t *dialog_p /* Layout */ window_layout = elm_layout_add(dialog_popup); - result = elm_layout_file_set(window_layout, EDJEFILE, GRP_DIALOG_POPUP); + if (dialog_popup_info->dialog_popup_type == DIALOG_POPUP_TYPE_YES_OR_CANCEL) + result = elm_layout_file_set(window_layout, EDJEFILE, GRP_DIALOG_POPUP_NO_TITLE); + else + result = elm_layout_file_set(window_layout, EDJEFILE, GRP_DIALOG_POPUP); + _DBG("Layout elm_layout_file_set for [%s] returns [%d]", EDJEFILE, result); evas_object_resize(window_layout, screen_w, screen_h); evas_object_show(window_layout); - /* content - title */ - if (dialog_popup_info->title) { - elm_object_part_text_set(window_layout, "part_title_label", dialog_popup_info->title); - } - - /* content - scroller */ - scroller = elm_scroller_add(window_layout); - elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); - elm_object_part_content_set(window_layout, "part_content_swallow", scroller); - elm_object_scale_set(scroller, 1/edje_scale_get()); - evas_object_show(scroller); - if (dialog_popup_info->dialog_popup_type == DIALOG_POPUP_TYPE_INPUT_NAME) { /* entry */ - content_entry = elm_entry_add (scroller); + content_entry = elm_entry_add(window_layout); + + if (dialog_popup_info->title) + elm_object_part_text_set(window_layout, "part_title_label", dialog_popup_info->title); if (content_entry == NULL) { _ERR("elm_entry_add failed"); goto out; } + elm_object_part_content_set(window_layout, "part_content_swallow", content_entry); elm_entry_single_line_set(content_entry, EINA_TRUE); elm_entry_editable_set(content_entry, EINA_TRUE); - elm_object_content_set(scroller, content_entry); + elm_object_part_text_set(content_entry, "guide", "Input folder/file name"); - if (dialog_popup_info->content) { + if (dialog_popup_info->content) elm_object_text_set(content_entry, dialog_popup_info->content); - } evas_object_show(content_entry); - } - else if (dialog_popup_info->dialog_popup_type == DIALOG_POPUP_TYPE_CONFIGURATION) - { + } else if (dialog_popup_info->dialog_popup_type == DIALOG_POPUP_TYPE_CONFIGURATION) { + if (dialog_popup_info->title) + elm_object_part_text_set(window_layout, "part_title_label", dialog_popup_info->title); + /* check */ - content_check = elm_check_add(scroller); + content_check = elm_check_add(window_layout); if (content_check == NULL) { _ERR("elm_check_add failed"); goto out; } - if (dialog_popup_info->content) { + if (dialog_popup_info->content) elm_object_text_set(content_check, dialog_popup_info->content); - } - elm_object_content_set(scroller, content_check); + + elm_object_part_content_set(window_layout, "part_content_swallow", content_check); evas_object_show(content_check); - } - else { + } else { /* label */ int content_len = 0; int buffer_size = 0; - const char *start_tag = ""; + const char *start_tag = ""; const char *end_tag = ""; - content_label = elm_label_add(scroller); + content_label = elm_label_add(window_layout); if (content_label == NULL) { _ERR("elm_label_add failed"); goto out; } - elm_label_line_wrap_set(content_label, ELM_WRAP_WORD); - elm_label_wrap_width_set(content_label, 563); - if (dialog_popup_info->content) { content_len = strlen(dialog_popup_info->content); buffer_size = strlen(start_tag) + content_len + strlen(end_tag); content = (char*)calloc(buffer_size + 1, sizeof(char)); - snprintf(content, buffer_size, "%s%s%s", start_tag, dialog_popup_info->content, end_tag); + snprintf(content, buffer_size+1, "%s%s%s", start_tag, dialog_popup_info->content, end_tag); elm_object_text_set(content_label, content); } - elm_object_content_set(scroller, content_label); + elm_object_part_content_set(window_layout, "part_content_swallow", content_label); + elm_object_scale_set(content_label, 1/edje_scale_get()); evas_object_show(content_label); } /* buttons */ button_1 = elm_button_add(window_layout); - if (dialog_popup_info->button_1_text) { - elm_object_text_set(button_1, dialog_popup_info->button_1_text); - } elm_object_focus_allow_set(button_1, EINA_TRUE); elm_object_part_content_set(window_layout, "part_button_1", button_1); + elm_object_style_set(button_1, STYLE_TARGET_BTN); + if (dialog_popup_info->button_1_text) + elm_object_part_text_set(button_1, "part_popup_btn_text", dialog_popup_info->button_1_text); + else + elm_object_part_text_set(button_1, "part_popup_btn_text", "OK"); + evas_object_show(button_1); button_2 = elm_button_add(window_layout); - if (dialog_popup_info->button_2_text) { - elm_object_text_set(button_2, dialog_popup_info->button_2_text); - } elm_object_focus_allow_set(button_2, EINA_TRUE); elm_object_part_content_set(window_layout, "part_button_2", button_2); + elm_object_style_set(button_2, STYLE_TARGET_BTN); + if (dialog_popup_info->button_2_text) + elm_object_part_text_set(button_2, "part_popup_btn_text", dialog_popup_info->button_2_text); + else + elm_object_part_text_set(button_2, "part_popup_btn_text", "Cancel"); + evas_object_show(button_2); + inputmgr_add_callback(button_1, 0, &focus_handler, dialog_popup); + inputmgr_add_callback(button_2, 0, &focus_handler, dialog_popup); + + evas_object_smart_callback_add(button_2, "clicked", _down_btn_cb, dialog_popup); + evas_object_show(dialog_popup); elm_win_activate(dialog_popup); out: - if(content != NULL) + if (content != NULL) free(content); return dialog_popup; diff --git a/src/util/file-attr.c b/src/util/file-attr.c new file mode 100755 index 0000000..0f3ede6 --- /dev/null +++ b/src/util/file-attr.c @@ -0,0 +1,1489 @@ +/* +* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include + +#include "data.h" +#include "util/fs-util.h" +#include "util/fs-error.h" +#include "util/file-util.h" + +#define MF_UDATE_NUM 1000 +#define MYFILE_BASIC_SIZE 1024 +#define MF_ROUND_D(x, dig) (floor((x) * pow(10, dig+1) + 0.5) / pow(10, dig+1)) + +#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 OR MEDIA_TYPE=2 OR MEDIA_TYPE=3)" + +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}, + {"image/jp2", FILE_TYPE_IMAGE}, + {"image/tif", FILE_TYPE_IMAGE}, + {"image/wmf", 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/ra", FILE_TYPE_MUSIC}, + {"audio/x-vorbis+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_VOICE}, + {"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}, + {"audio/x-flac", FILE_TYPE_MUSIC}, + {"text/x-iMelody", FILE_TYPE_SOUND}, + /*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}, + {"text/xml", 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_GUL}, + {"text/calendar", FILE_TYPE_VCALENDAR}, + + {"application/vnd.tizen.package", FILE_TYPE_TPK}, + /*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_VCONTACT */ + {"text/directory", FILE_TYPE_VCONTACT}, + {"text/x-vcard", FILE_TYPE_VCONTACT}, + {"application/snb", FILE_TYPE_SNB}, + {"application/x-hwp", FILE_TYPE_HWP}, + + /*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_MUSIC, + [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_SOUND, + [FILE_TYPE_HTML] = MF_ICON_HTML, + [FILE_TYPE_FLASH] = MF_ICON_FLASH, + [FILE_TYPE_TXT] = MF_ICON_TXT, + [FILE_TYPE_TPK] = MF_ICON_TPK, + [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, + [FILE_TYPE_HWP] = MF_ICON_HWP, + [FILE_TYPE_SNB] = MF_ICON_SNB, + [FILE_TYPE_GUL] = MF_ICON_GUL, + [FILE_TYPE_TASK] = MF_ICON_TASK, + [FILE_TYPE_EML] = MF_ICON_EMAIL, + [FILE_TYPE_CSV] = MF_ICON_EXCEL, + [FILE_TYPE_SVG] = MF_ICON_SVG, + [FILE_TYPE_WGT] = MF_ICON_TPK, +}; + +/********************* +**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 'c': + case 'C': + if (strcasecmp("csv", &file_ext[i]) == 0) + return FILE_TYPE_CSV; + + 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) + return FILE_TYPE_VIDEO; + + break; + case 'E': + case 'e': + if (strcasecmp("EML", &file_ext[i]) == 0) + return FILE_TYPE_EML; + + break; + case 'f': + case 'F': + if (strcasecmp("FLAC", &file_ext[i]) == 0) + return FILE_TYPE_MUSIC; + + 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; + + if (strcasecmp("GUL", &file_ext[i]) == 0) + return FILE_TYPE_GUL; + + break; + case 'h': + case 'H': + if (strcasecmp("HTML", &file_ext[i]) == 0) + return FILE_TYPE_HTML; + + if (strcasecmp("HTM", &file_ext[i]) == 0) + return FILE_TYPE_HTML; + + if (strcasecmp("HWP", &file_ext[i]) == 0) + return FILE_TYPE_HWP; + + 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; + + if (strcasecmp("ICS", &file_ext[i]) == 0) + return FILE_TYPE_VCALENDAR; + + 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; + + if (strcasecmp("JP2", &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; + + if (strcasecmp("ogg", &file_ext[i]) == 0) + return FILE_TYPE_MUSIC; + + 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': + if (strcasecmp("RA", &file_ext[i]) == 0) + return FILE_TYPE_MUSIC; + + 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; + + if (strcasecmp("SNB", &file_ext[i]) == 0) + return FILE_TYPE_SNB; + + if (strcasecmp("SPD", &file_ext[i]) == 0) + return FILE_TYPE_SPD; + + 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; + + if (strcasecmp("TPK", &file_ext[i]) == 0) + return FILE_TYPE_TPK; + + if (strcasecmp("TIF", &file_ext[i]) == 0) + return FILE_TYPE_IMAGE; + + 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; + + if (strcasecmp("VTS", &file_ext[i]) == 0) + return FILE_TYPE_TASK; + + 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; + + if (strcasecmp("WML", &file_ext[i]) == 0) + return FILE_TYPE_HTML; + + if (strcasecmp("WAVE", &file_ext[i]) == 0) + return FILE_TYPE_MUSIC; + + if (strcasecmp("WMF", &file_ext[i]) == 0) + return FILE_TYPE_IMAGE; + + 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; + + if (strcasecmp("XML", &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 = mf_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_mdate(const char *filename, i18n_udate *date) +{ + struct stat statbuf; + if (stat(filename, &statbuf) == -1) + return MYFILE_ERR_GET_STAT_FAIL; + + time_t tempdate = statbuf.st_mtime; + *date = (i18n_udate) tempdate * MF_UDATE_NUM; + return MYFILE_ERR_NONE; + +} + +int mf_file_attr_get_file_size(const char *filename, off_t *size) +{ + struct stat statbuf; + if (stat(filename, &statbuf) == -1) + return MYFILE_ERR_GET_STAT_FAIL; + + *size = statbuf.st_size; + return MYFILE_ERR_NONE; + +} + +int mf_file_attr_get_file_stat(const char *filename, fsNodeInfo **node) +{ + struct stat statbuf; + + if (stat(filename, &statbuf) == -1) + return MYFILE_ERR_GET_STAT_FAIL; + + time_t tempdate = statbuf.st_mtime; + (*node)->size = statbuf.st_size; + (*node)->date = (i18n_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 mf_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 = mf_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 (file_path != NULL && mf_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 . */ +#ifndef MYFILE_HIDEN_FILES_SHOW + if (strncmp(filename, ".", 1) == 0) + return MYFILE_ERR_INVALID_FILE_NAME; +#endif + + pattern = MYFILE_NAME_PATTERN; + z = regcomp(®, pattern, cflags); + + if (z != 0) { + regerror(z, ®, ebuf, sizeof(ebuf)); + fprintf(stderr, "%s: pattern '%s' \n", ebuf, pattern); + return MYFILE_ERR_INVALID_FILE_NAME; + } + + z = regexec(®, filename, nmatch, pm, 0); + if (z == REG_NOMATCH) + ret = MYFILE_ERR_NONE; + else + ret = MYFILE_ERR_INVALID_FILE_NAME; + + regfree(®); + return ret; +} + + +/********************* +**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 = mf_file_get(dir_path); + result = mf_file_attr_is_valid_name(file_name); + + if (result != MYFILE_ERR_NONE) + _ERR("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 = mf_file_get(file_path); + result = mf_file_attr_is_valid_name(file_name); + + if (result != MYFILE_ERR_NONE) + _ERR("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); + + *parent_path = g_strdup(path); + if (*parent_path == NULL) + return MYFILE_ERR_ALLOCATE_MEMORY_FAIL; + + const char *name = NULL; + name = mf_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) { + free(*parent_path); + *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 err = mf_file_attr_get_store_type_by_full(full_path, &store_type); + if (err != MYFILE_ERR_NONE) { + _ERR("get store type by path %s failed.", full_path); + return MYFILE_ERR_STORAGE_TYPE_ERROR; + } + + *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 *thumb_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); + int retcode = media_info_get_thumbnail_path(media, &(tmp_data->thumb_path)); + if (retcode != MEDIA_CONTENT_ERROR_NONE) { +// mf_debug("Get media thumbnail path failed!![%d]", retcode); + } + + return false; +} +*/ +int mf_file_attr_get_file_icon(const char *file_path, int *error_code, int view_type, char **thumbnail, media_info_h *media_info) +{ + int index = 0; + char *icon_path = g_strdup(DEFAULT_ICON); + fsFileType ftype = FILE_TYPE_NONE; + fsFileType ftype_by_mime = FILE_TYPE_NONE; + char *mime = NULL; + int thumbnail_type = MF_THUMBNAIL_TYPE_DEFAULT; + int retcode = -1; + char *ext = NULL; + + if (file_path == NULL) { + _ERR("file_path is NULL"); + return thumbnail_type; + } + + int ret = mf_file_attr_get_file_category(file_path, &ftype); + ftype_by_mime = ftype; + if (ret != MYFILE_ERR_NONE || ftype == FILE_TYPE_NONE || ftype == FILE_TYPE_ETC) { + int err_code = mf_file_attr_get_file_ext(file_path, &ext); + if (err_code != MYFILE_ERR_NONE || ext == NULL) { + _ERR("Fail to get file extension"); + return thumbnail_type; + } + retcode = mime_type_get_mime_type(ext, &mime); + if ((mime == NULL) || (retcode != MIME_TYPE_ERROR_NONE)) { + _ERR("Fail to get mime type, set etc icon"); + SAFE_FREE_CHAR(ext); + return thumbnail_type; + } + + for (index = 0; mime_type[index].mime; index++) { + if (strncmp(mime, mime_type[index].mime, strlen(mime)) == 0) { + ftype_by_mime = mime_type[index].ftype; + break; + } + } + } + + ftype = ftype_by_mime; + + SAFE_FREE_CHAR(icon_path); + SAFE_FREE_CHAR(ext); + + switch (ftype) { + case FILE_TYPE_IMAGE: + case FILE_TYPE_VIDEO: + case FILE_TYPE_MUSIC: + case FILE_TYPE_SOUND: { + thumbnail_type = MF_THUMBNAIL_TYPE_DEFAULT; + /*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) { + if (tmp_data.thumb_path && mf_file_exists(tmp_data.thumb_path)) { + SAFE_FREE_CHAR(icon_path); + icon_path = g_strdup(tmp_data.thumb_path); + thumbnail_type = MF_THUMBNAIL_TYPE_THUMBNAIL; + } else { + icon_path = g_strdup(mf_file_attr_get_default_icon_by_type(ftype)); + thumbnail_type = MF_THUMBNAIL_TYPE_DEFAULT; + *error_code = 1; + } + } else { + if (error_code) { + *error_code = err; + } + + icon_path = g_strdup(mf_file_attr_get_default_icon_by_type(ftype)); + thumbnail_type = MF_THUMBNAIL_TYPE_DEFAULT; + } + SAFE_FREE_CHAR(tmp_data.thumb_path);*/ + } + break; + default: + icon_path = g_strdup(mf_file_attr_get_default_icon_by_type(ftype)); + thumbnail_type = MF_THUMBNAIL_TYPE_DEFAULT; + break; + } + + *thumbnail = icon_path; + SAFE_FREE_CHAR(mime); + 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; + char *mime = NULL; + int retcode = -1; + + if (!file_path) + return ftype; + + char *ext = NULL; + int error_code = mf_file_attr_get_file_ext(file_path, &ext); + if (error_code != MYFILE_ERR_NONE || ext == NULL) { + _ERR("Fail to get file extension"); + return ftype; + } + + retcode = mime_type_get_mime_type(ext, &mime); + if ((mime == NULL) || (retcode != MIME_TYPE_ERROR_NONE)) { + _ERR("Fail to get mime type, set etc icon"); + SAFE_FREE_CHAR(ext); + 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; + SAFE_FREE_CHAR(mime); + SAFE_FREE_CHAR(ext); + return ftype; + } + } + + _ERR("No matched mimetype(%s) for file: %s", mime, file_path); + SAFE_FREE_CHAR(mime); + SAFE_FREE_CHAR(ext); + 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; +} + +/********************* +**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++) + count++; + + g_strfreev(result); + *level = count - start_level - 1; + 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 = mf_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 { + *result = false; + /*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 = mf_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) { + _ERR("source argument invalid"); + return MYFILE_ERR_SRC_ARG_INVALID; + } + + if (mf_file_attr_is_dir(fullpath) == 0) { + _ERR("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) { + _ERR("Fail to get path level"); + return error_code; + } + + if (level >= 3 || level <= 0) { + *result = false; + _ERR("Path Level is wrong"); + return MYFILE_ERR_NONE; + } + error_code = mf_file_attr_is_in_system_folder(fullpath, level, result); + + if (error_code != 0) { + _ERR("Fail .. is in system folder err :: %d", error_code); + return error_code; + } + + return MYFILE_ERR_NONE; +} + +void mf_file_attr_get_file_size_info(char **file_size, off_t src_size) +{ + if (file_size == NULL) { + _ERR("file_size is NULL"); + return; + } + + unsigned long long original_size = 0; + double size = 0; + int index = 0; + int len = 0; + + original_size = src_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; + } + } + + return; +} + + +int mf_file_attr_media_has_video(const char *filename) +{ + int ret = 0; + metadata_extractor_h handle = NULL; + char *value = NULL; + + if (!filename) + goto CATCH_ERROR; + + ret = metadata_extractor_create(&handle); + if (ret != METADATA_EXTRACTOR_ERROR_NONE) { + _ERR("metadata_extractor_create().. %d", ret); + goto CATCH_ERROR; + } + + ret = metadata_extractor_set_path(handle, filename); + if (ret != METADATA_EXTRACTOR_ERROR_NONE) { + _ERR("metadata_extractor_set_path().. %d", ret); + goto CATCH_ERROR; + } + + ret = metadata_extractor_get_metadata(handle, METADATA_HAS_VIDEO, &value); + if (ret == METADATA_EXTRACTOR_ERROR_NONE && value) { + if (g_strcmp0(value, "1") == 0) { + _ERR("ret is [%d] value is [%s]", ret, "1"); + if (handle) + metadata_extractor_destroy(handle); + + SAFE_FREE_CHAR(value); + return 1; + } + SAFE_FREE_CHAR(value); + } + + _ERR("ret is [%d] value is [%s]", ret, value); + SAFE_FREE_CHAR(value); + + if (handle) + metadata_extractor_destroy(handle); + + return 0; +CATCH_ERROR: + if (handle) + metadata_extractor_destroy(handle); + + return 0; +} + + +bool __mf_add_storage_info_to_list(media_storage_h storage, void *data) +{ + list_data_s *list_data; + list_data = data; + + char *path = NULL; + int ret = 0; + + path = list_data->path; + + ret = mf_fs_oper_read_dir(path, &list_data->folder_list, &list_data->file_list); + if (ret != MYFILE_ERR_NONE) { + free(path); + return false; + } + + list_data->file_count = eina_list_count(list_data->file_list); + list_data->folder_count = eina_list_count(list_data->folder_list); + + char *storage_name = NULL; + char *storage_uuid = NULL; + char *base_dir = NULL; + + media_content_storage_e storage_type; + media_storage_get_type(storage, &storage_type); + + media_storage_get_id(storage, &storage_uuid); + media_storage_get_name(storage, &storage_name); + media_storage_get_path(storage, &base_dir); + + _DBG("storage_uuid : %s, storage_name : %s, base_dir : %s", storage_uuid, storage_name, base_dir); + + return true; +} diff --git a/src/util/file-error.c b/src/util/file-error.c new file mode 100755 index 0000000..f56719a --- /dev/null +++ b/src/util/file-error.c @@ -0,0 +1,70 @@ +/* +* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include + +#include "util/fs-error.h" + +int mf_error_erron_to_mferror(int err_no) +{ + int err = MYFILE_ERR_NONE; + char buf[256] = {0,}; + char *str = (char *)strerror_r(err_no, buf, 256); + + _ERR("err_no is [%d] error - %s", err_no, str); + switch (err_no) { +#ifdef EINVAL + case EINVAL: + err = MYFILE_ERR_SRC_ARG_INVALID; + break; +#endif + +#ifdef EACCES /*The requested access to the file is not allowed*/ + case EACCES: /*report*/ + err = MYFILE_ERR_PERMISSION_DENY; + break; +#endif + +#ifdef EPERM + case EPERM: + err = MYFILE_ERR_PERMISSION_DENY; + break; +#endif + +#ifdef EFAULT /* pathname points outside your accessible address space*/ + case EFAULT: + err = MYFILE_ERR_FAULT; + 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 = MYFILE_ERR_NO_FREE_SPACE; + break; +#endif + +#ifdef EROFS /*pathname refers to a file on a read-only filesystem and write access was requested*/ + case EROFS: /*report*/ + err = MYFILE_ERR_READ_ONLY; + break; +#endif + + } + return err; +} + diff --git a/src/util/file-util.c b/src/util/file-util.c new file mode 100755 index 0000000..961226d --- /dev/null +++ b/src/util/file-util.c @@ -0,0 +1,313 @@ +/* +* Copyright (c) 2000-2015 Samsung Electronics Co., Ltd All Rights Reserved +* +* Licensed under the Apache License, Version 2.0 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://www.apache.org/licenses/LICENSE-2.0 +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#include +#include "util/file-util.h" + +#define PATH_MAX_SIZE 256 +#define BUF_MAX 16384 +static mode_t default_mode = S_IRUSR | S_IWUSR | S_IXUSR | S_IRGRP | S_IXGRP | S_IROTH | S_IXOTH; + +const char *mf_file_get(const char path[]) +{ + char *file = NULL; + if ((file = strrchr(path, '/'))) + file++; + else + file = (char *) path; + + return file; +} + +char *mf_dir_get(const char path[]) +{ + char *p = NULL; + char buf[PATH_MAX + 1] = {0,}; + + strncpy(buf, path, PATH_MAX); + p = strrchr(buf, '/'); + if (!p) + return strdup(path); + + if (p == buf) + return strdup("/"); + + *p = 0; + return strdup(buf); +} + +int mf_file_exists(const char *path) +{ + struct stat info = {0,}; + + if (stat(path, &info) == 0) + return 1; + else + return 0; +} + +Eina_Bool mf_is_dir(const char *path) +{ + if (!path) + return 0; + + struct stat info = {0,}; + + if (stat(path, &info) == 0) { + if (S_ISDIR(info.st_mode)) + return 1; + } + + return 0; +} + +int mf_is_dir_empty(const char *path) +{ + struct stat info = {0,}; + struct dirent ent_struct; + struct dirent *dp = NULL; + DIR *dirp = NULL; + + dirp = opendir(path); + if (!dirp) + return -1; + + while ((readdir_r(dirp, &ent_struct, &dp) == 0) && dp) { + if (stat(dp->d_name, &info) == 0 && (strcmp(dp->d_name, ".")) && (strcmp(dp->d_name, ".."))) { + closedir(dirp); + return 0; + } + } + closedir(dirp); + return 1; +} + +int mf_mkdir(const char *dir) +{ + if (mkdir(dir, default_mode) < 0) + return 0; + else + return 1; +} + +static int +mf_mkpath_if_not_exists(const char *path) +{ + struct stat st = {0,}; + if (stat(path, &st) < 0) + return mf_mkdir(path); + else if (!S_ISDIR(st.st_mode)) + return 0; + else + return 1; +} + +int mf_mkpath(const char *path) +{ + char ss[PATH_MAX] = {0,}; + unsigned int i = 0; + + if (mf_is_dir(path)) + return 1; + + for (i = 0; path[i] != '\0'; ss[i] = path[i], i++) { + if (i == sizeof(ss) - 1) + return 0; + + if ((path[i] == '/') && (i > 0)) { + ss[i] = '\0'; + if (!mf_mkpath_if_not_exists(ss)) + return 0; + } + } + ss[i] = '\0'; + + return mf_mkpath_if_not_exists(ss); +} + +char *mf_strip_ext(const char *path) +{ + char *p = NULL; + char *file = NULL; + + p = strrchr(path, '.'); + if (!p) + file = strdup(path); + else if (p != path) { + file = malloc(((p - path) + 1) * sizeof(char)); + if (file) { + memcpy(file, path, (p - path)); + file[p - path] = 0; + } + } + + return file; +} + +int mf_file_unlink(const char *filename) +{ + int status = unlink(filename); + if (status < 0) + return 0; + else + return 1; +} + +int mf_file_size(const char *filename) +{ + struct stat info = {0,}; + if (stat(filename, &info) == 0) { + if (!S_ISDIR(info.st_mode)) + return info.st_size; + } + + return 0; +} + +int mf_file_rmdir(const char *filename) +{ + int status = rmdir(filename); + if (status < 0) + return 0; + else + return 1; +} + +Eina_List *mf_file_ls(const char *dir) +{ + char *f; + DIR *dirp = NULL; + struct dirent ent_struct; + struct dirent *dp = NULL; + Eina_List *list = NULL; + + dirp = opendir(dir); + if (!dirp) + return NULL; + + while ((readdir_r(dirp, &ent_struct, &dp) == 0) && dp) { + if ((strcmp(dp->d_name , ".")) && (strcmp(dp->d_name , ".."))) { + f = strdup(dp->d_name); + list = eina_list_append(list, f); + } + } + closedir(dirp); + + list = eina_list_sort(list, eina_list_count(list), EINA_COMPARE_CB(strcoll)); + + return list; +} + +int mf_file_recursive_rm(const char *dir) +{ + char buf[PATH_MAX_SIZE] = {0,}; + struct dirent ent_struct; + struct dirent *dp = NULL; + DIR *dirp = NULL; + + if (readlink(dir, buf, sizeof(buf)) > 0) + return mf_file_unlink(dir); + + int ret = mf_is_dir(dir); + if (ret) { + ret = 1; + dirp = opendir(dir); + if (dirp) { + while ((readdir_r(dirp, &ent_struct, &dp) == 0) && dp) { + if ((strcmp(dp->d_name , ".")) && (strcmp(dp->d_name, ".."))) { + if (!mf_file_recursive_rm(dp->d_name)) + ret = 0; + } + } + closedir(dirp); + } + + if (!mf_file_rmdir(dir)) + ret = 0; + + return ret; + } else + return mf_file_unlink(dir); +} + +int mf_file_cp(const char *src, const char *dst) +{ + FILE *f1 = NULL; + FILE *f2 = NULL; + char buf[BUF_MAX] = {0,}; + char realpath1[PATH_MAX_SIZE] = {0,}; + char realpath2[PATH_MAX_SIZE] = {0,}; + size_t num; + int ret = 1; + + if (!realpath(src, realpath1)) + return 0; + + if (realpath(dst, realpath2) && !strcmp(realpath1, realpath2)) + return 0; + + f1 = fopen(src, "rb"); + if (!f1) + return 0; + + f2 = fopen(dst, "wb"); + if (!f2) { + fclose(f1); + return 0; + } + + while ((num = fread(buf, 1, sizeof(buf), f1)) > 0) { + if (fwrite(buf, 1, num, f2) != num) + ret = 0; + } + + fclose(f1); + fclose(f2); + + return ret; +} + +int mf_file_mv(const char *src, const char *dst) +{ + struct stat info = {0,}; + if (stat(dst, &info) == 0) + return 0; + + if (rename(src, dst)) { + memset(&info, 0x00, sizeof(struct stat)); + if (stat(src, &info) == 0) { + if (S_ISREG(info.st_mode)) { + mf_file_cp(src, dst); + if (chmod(dst, info.st_mode) < 0) + _DBG("failed to set attributes"); + if (unlink(src) < 0) + _DBG("failed to delete source"); + return 1; + } + } + return 0; + } + return 1; +} + +int mf_remove(const char *filename) +{ + int status = remove(filename); + if (status < 0) + return 0; + else + return 1; +} diff --git a/src/util/fs-util.c b/src/util/fs-util.c new file mode 100755 index 0000000..71c9e71 --- /dev/null +++ b/src/util/fs-util.c @@ -0,0 +1,337 @@ +#include +#include + +#include "util/fs-util.h" +#include "util/fs-error.h" +#include "util/file-util.h" + +#define DEBUG_FOLDER "SLP_debug" + +/********************* +**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); + + if (strncmp(fullpath, PHONE_FOLDER, len_phone) == 0) + return MYFILE_PHONE; + else if (strncmp(fullpath, MEMORY_FOLDER, len_memory) == 0) + return MYFILE_MMC; + else + return MYFILE_ERR_STORAGE_TYPE_ERROR; +} + +int mf_fm_svc_wrapper_get_location(const char *fullpath) +{ + return __mf_fm_svc_wrapper_COMESFROM(fullpath); +} + +/********************* +**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) && (!mf_file_exists(src))) + return MYFILE_ERR_SRC_NOT_EXIST; + + if ((check_option & MF_ERROR_CHECK_DST_EXIST) && (!mf_file_exists(dst))) + return MYFILE_ERR_DST_NOT_EXIST; + + + if (check_option & MF_ERROR_CHECK_SRC_PATH_VALID) { + if (!mf_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 (!mf_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 (!mf_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 (!mf_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_struct; + struct dirent *ent; + + if (path == NULL) { + _ERR("path is null"); + return MYFILE_ERR_INVALID_ARG; + } + + if (dir_list == NULL) { + _ERR("dir_list is null"); + return MYFILE_ERR_INVALID_ARG; + } + + if (file_list == NULL) { + _ERR("file_list is null"); + return MYFILE_ERR_INVALID_ARG; + } + + int option = MF_ERROR_CHECK_SRC_ARG_VALID | MF_ERROR_CHECK_SRC_EXIST | MF_ERROR_CHECK_SRC_PATH_VALID; + int storage_type = mf_fm_svc_wrapper_get_location(path); + 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 ((readdir_r(pDir, &ent_struct, &ent) == 0) && ent) { + GString *childpath = NULL; + fsNodeInfo *pNode = NULL; + + int len = strlen(ent->d_name); + if ((len == 1 && strncmp(ent->d_name, ".", strlen(".")) == 0) || (len == 2 && strncmp(ent->d_name, "..", strlen("..")) == 0)) + continue; + + /*int hiden_state = 0; + mf_util_get_pref_value(PREF_TYPE_HIDEN_STATE, &hiden_state); + if (hiden_state == MF_HIDEN_HIDE) { + 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)); + + pNode->path = g_strdup(path); + pNode->name = g_strdup(ent->d_name); + pNode->storage_type = storage_type; + pNode->list_type = mf_list_normal; + + 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)); + + childpath = g_string_new(path); + if (childpath == NULL) { + SAFE_FREE_CHAR(pNode->path); + SAFE_FREE_CHAR(pNode->name); + SAFE_FREE_CHAR(pNode); + 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; + pNode->type = mf_file_attr_get_file_type_by_mime(childpath->str); + } + *file_list = eina_list_append(*file_list, pNode); + } + g_string_free(childpath, TRUE); + } + closedir(pDir); + + return MYFILE_ERR_NONE; +} + + +/********************* +**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; + + errno = 0; + if (!mf_mkpath(dir)) { + ret = mf_error_erron_to_mferror(errno); + if (ret == MYFILE_ERR_NONE) + return MYFILE_ERR_DIR_CREATE_FAIL; + else + return ret; + } + sync(); + 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) +{ + 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; + + if (rename(src, dst)) + return MYFILE_ERR_RENAME_FAIL; + else + return MYFILE_ERR_NONE; +} diff --git a/src/util/utils.c b/src/util/utils.c new file mode 100755 index 0000000..779bfe0 --- /dev/null +++ b/src/util/utils.c @@ -0,0 +1,884 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "define.h" +#include "view.h" +#include "data.h" +#include "util/utils.h" +#include "util/dialog_popup.h" +#include "util/fs-util.h" +#include "util/fs-error.h" +#include "util/file-util.h" + +#define STYLE_TARGET_BTN "target_btn" + +typedef struct util_item_data { + int index; + Elm_Object_Item *item; + Eina_Bool expanded; + + char *folder_name; +} util_item_data_s; + +static char* _folder_list_label_get(void *data, Evas_Object *obj, const char *part); +static Evas_Object* _folder_list_content_get(void *data, Evas_Object *obj, const char *part); +static void _folder_list_del(void *data, Evas_Object *obj); + +static void _key_up_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Up *ev); + +static void _down_btn_cb(void *data, Evas_Object *obj, void *event_info); + +static void _selected(int id, void *data, Evas_Object *obj, Elm_Object_Item *item); +static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item); +static void _unfocused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item); + +static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Mouse_Move *ev); + +static input_handler popup_handler = { + .key_up = _key_up_cb, + .selected = _selected, + .focused = _focused, + .unfocused = _unfocused +}; + +static input_handler focus_handler = { + .mouse_move = _mouse_move +}; + +static Eina_Bool ecore_timer_cb(void *data) +{ + Evas_Object * genlist = (Evas_Object *)data; + Elm_Object_Item * it = elm_genlist_selected_item_get(genlist); + elm_genlist_item_selected_set(it, EINA_FALSE); + + return ECORE_CALLBACK_CANCEL; +} + +static void +check_changed_item_cb(void *data, Evas_Object *obj, void *event_info) +{ + Evas_Object * genlist = (Evas_Object *)data; + ecore_timer_add(0.1, ecore_timer_cb, genlist); +} + +static fsNodeInfo* _get_fsNodeInfo(Eina_List *list, int index) +{ + fsNodeInfo *node = NULL; + node = (fsNodeInfo *)eina_list_nth(list, index); + + return node; +} + +static void _selected(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) +{ + struct _priv *priv; + priv = data; + + int index = elm_genlist_item_index_get(item); + inputmgr_remove_callback(priv->popup_win, &popup_handler); + evas_object_del(priv->popup_win); + + if (index == 1 || index == 2 || index == 4) + viewmgr_update_view(VIEW_BASE, UPDATE_FILE_TO_SELECT, priv); + else if (index == 3) { + dialog_popup_info_t *info = calloc(sizeof(dialog_popup_info_t), 1); + + info->dialog_popup_type = DIALOG_POPUP_TYPE_INPUT_NAME; + info->title = "Rename"; + info->content = "Content 3"; + info->button_1_text = "OK"; + info->button_2_text = "Cancel"; + info->data = priv; + + dialog_popup_create(info); + } else if (index == 5) { + dialog_popup_info_t *info = calloc(sizeof(dialog_popup_info_t), 1); + + info->dialog_popup_type = DIALOG_POPUP_TYPE_YES_OR_CANCEL; + info->content = "Delete?"; + info->button_1_text = "OK"; + info->button_2_text = "Cancel"; + info->data = priv; + + dialog_popup_create(info); + } else if (index == 6) { + dialog_popup_info_t *info = calloc(sizeof(dialog_popup_info_t), 1); + + info->dialog_popup_type = DIALOG_POPUP_TYPE_CONFIGURATION; + info->title = "Setting"; + info->content = "Show hidden files"; + info->button_1_text = "OK"; + info->button_2_text = "Cancel"; + info->data = priv; + + dialog_popup_create(info); + } +} + +static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) +{ + elm_object_item_signal_emit(item, "mouse,in", "elm"); + elm_genlist_item_update(item); +} + +static void _unfocused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) +{ + elm_object_item_signal_emit(item, "mouse,out", "elm"); + elm_genlist_item_update(item); +} + +static Evas_Object* create_check(Evas_Object *parent, void *data) +{ + Evas_Object *check; + check = elm_check_add(parent); + evas_object_smart_callback_add(check, "changed", check_changed_item_cb, data); + evas_object_propagate_events_set(check, EINA_FALSE); + return check; +} + +static char* +_folder_list_label_get(void *data, Evas_Object *obj, const char *part) +{ + char buf[256]; + util_item_data_s *id = (util_item_data_s *)data; + + if (!strcmp("elm.text.file", part)) { + if (id->folder_name == NULL) + return NULL; + + snprintf(buf, sizeof(buf), "%s", id->folder_name); + return strdup(buf); + } else { + if (id->index == 0) { + snprintf(buf, sizeof(buf), "Copy"); + return strdup(buf); + } else if (id->index == 1) { + snprintf(buf, sizeof(buf), "Move"); + return strdup(buf); + } else if (id->index == 2) { + snprintf(buf, sizeof(buf), "Rename"); + return strdup(buf); + } else if (id->index == 3) { + snprintf(buf, sizeof(buf), "New folder"); + return strdup(buf); + } else if (id->index == 4) { + snprintf(buf, sizeof(buf), "Delete"); + return strdup(buf); + } else if (id->index == 5) { + snprintf(buf, sizeof(buf), "Setting"); + return strdup(buf); + } + } + return NULL; +} + +static Evas_Object* +_folder_list_content_get(void *data, Evas_Object *obj, const char *part) +{ + if (!strcmp("elm.swallow.icon", part)) { + Evas_Object *icon = elm_image_add(obj); + + elm_image_file_set(icon, IMGDIR"/icon/myfile_icon_folder.png", NULL); + return icon; + } else if (!strcmp("elm.swallow.end", part)) { + return create_check(obj, data); + } + + return NULL; +} + +static void +_folder_list_del(void *data, Evas_Object *obj) +{ + /* Unrealized callback can be called after this. */ + /* Accessing item_data_s can be dangerous on unrealized callback. */ + util_item_data_s *id = (util_item_data_s *)data; + free(id); +} + +static void _key_up_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Up *ev) +{ + if (!data) + return; + + struct _priv *priv; + priv = (struct _priv *)data; + + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_ESC)) { + inputmgr_remove_callback(priv->popup_win, &popup_handler); + evas_object_del(priv->popup_win); + } +} + +static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Mouse_Move *ev) +{ + elm_object_focus_set(obj, EINA_TRUE); +} + +static void _down_btn_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct _priv *priv; + priv = data; + + viewmgr_update_view(VIEW_BASE, UPDATE_FILE, priv); + evas_object_del(priv->popup_win); +} + +Evas_Object *utils_add_window(const char *name) +{ + Evas_Object *win; + + if (!name) { + _ERR("Invalid argument."); + return NULL; + } + + win = elm_win_add(NULL, name, ELM_WIN_BASIC); + if (!win) { + _ERR("elm_win_add failed."); + return NULL; + } + + elm_win_title_set(win, name); + elm_win_focus_highlight_enabled_set(win, EINA_TRUE); + + evas_object_show(win); + + return win; +} + +Evas_Object *utils_add_layout(Evas_Object *parent, const char *group, + Eina_Bool win_resize) +{ + Evas_Object *layout; + + if (!parent || !group) { + _ERR("Invalid argument."); + return NULL; + } + + layout = elm_layout_add(parent); + if (!layout) { + _ERR("elm_layout_add failed."); + return NULL; + } + + elm_layout_file_set(layout, EDJEFILE, group); + + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + + if (win_resize) + elm_win_resize_object_add(parent, layout); + + return layout; +} + +Evas_Object *utils_add_box(Evas_Object *parent, const char *part, + Eina_Bool horizontal, Evas_Coord padding_h, + Evas_Coord padding_v) +{ + Evas_Object *box; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + box = elm_box_add(parent); + if (!box) { + _ERR("elm_box_add failed."); + return NULL; + } + + elm_box_horizontal_set(box, horizontal); + elm_box_padding_set(box, ELM_SCALE_SIZE(padding_h), + ELM_SCALE_SIZE(padding_v)); + + evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); + + if (part) + elm_object_part_content_set(parent, part, box); + else + elm_object_content_set(parent, box); + + evas_object_show(box); + + return box; +} + +Evas_Object *utils_add_button(Evas_Object *parent, const char *part, + const char *text, const char *style) +{ + Evas_Object *btn; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + btn = elm_button_add(parent); + if (!btn) { + _ERR("elm_button_add failed."); + return NULL; + } + + if (part) + elm_object_part_content_set(parent, part, btn); + if (text) + elm_object_text_set(btn, text); + if (style) + elm_object_style_set(btn, style); + + evas_object_show(btn); + + return btn; +} + +Evas_Object *utils_add_gengrid(Evas_Object *parent, Eina_Bool horizontal, + int width, int height) +{ + Evas_Object *grid; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + grid = elm_gengrid_add(parent); + if (!grid) { + _ERR("elm_gengrid_add failed."); + return NULL; + } + + 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_gengrid_multi_select_set(grid, EINA_FALSE); + elm_gengrid_horizontal_set(grid, horizontal); + elm_gengrid_align_set(grid, 0.0, 0.0); + elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_ALWAYS); + elm_gengrid_item_size_set(grid, ELM_SCALE_SIZE(width), + ELM_SCALE_SIZE(height)); + elm_scroller_policy_set(grid, ELM_SCROLLER_POLICY_OFF, + ELM_SCROLLER_POLICY_OFF); + + return grid; +} + +Evas_Object *utils_add_table(Evas_Object *parent, const char *part, + int padding_x, int padding_y) +{ + Evas_Object *table; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + table = elm_table_add(parent); + if (!table) { + _ERR("elm_table_add failed."); + return NULL; + } + + elm_table_padding_set(table, ELM_SCALE_SIZE(padding_x), + ELM_SCALE_SIZE(padding_y)); + evas_object_show(table); + + if (part) + elm_object_part_content_set(parent, part, table); + + return table; +} + +static void _notify_timeout_cb(void *data, Evas_Object *obj, void *ei) +{ + if (!obj) + return; + + evas_object_del(obj); +} + +Evas_Object *utils_add_notify(Evas_Object *parent, const char *text, + const char *noti_style, const char *label_style, int timeout) +{ + Evas_Object *notify, *lbl; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + notify = elm_notify_add(parent); + if (!notify) { + _ERR("elm_notify_add failed."); + return NULL; + } + + evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, + EVAS_HINT_EXPAND); + elm_notify_align_set(notify, 0.0, 1.0); + elm_notify_timeout_set(notify, timeout); + + if (noti_style) + elm_object_style_set(notify, noti_style); + + lbl = elm_label_add(notify); + if (!lbl) { + _ERR("elm_label_add failed."); + evas_object_del(notify); + return NULL; + } + + elm_object_content_set(notify, lbl); + evas_object_show(lbl); + + if (label_style) + elm_object_style_set(lbl, label_style); + + if (text) + elm_object_text_set(lbl, text); + + evas_object_smart_callback_add(notify, SIG_TIMEOUT, + _notify_timeout_cb, NULL); + evas_object_show(notify); + + return notify; +} + +void utils_show_submenu_popup(struct _priv *priv) +{ + Evas_Object *notification_popup; + Evas_Object *window_layout = NULL; + Evas_Object *scroller, *genlist; + + util_item_data_s *id; + + Evas *e = NULL; + Ecore_Evas *ee = NULL; + Eina_Bool result = EINA_FALSE; + int screen_x, screen_y, screen_w, screen_h; + + notification_popup = elm_win_add(NULL, "notification_popup", ELM_WIN_BASIC); + priv->popup_win = notification_popup; + + if (notification_popup == NULL) { + _ERR("elm_win_add failed"); + goto out; + } + + e = evas_object_evas_get(notification_popup); + if (!e) { + _ERR("evas_object_evas_get failed"); + evas_object_del(notification_popup); + notification_popup = NULL; + goto out; + } + + ee = ecore_evas_ecore_evas_get(e); + if (!ee) { + _ERR("ecore_evas_ecore_evas_get failed"); + evas_object_del(notification_popup); + notification_popup = NULL; + goto out; + } + + elm_win_alpha_set(notification_popup, EINA_TRUE); + elm_win_borderless_set(notification_popup, EINA_TRUE); + elm_win_autodel_set(notification_popup, EINA_TRUE); + + elm_win_screen_size_get(notification_popup, &screen_x, &screen_y, &screen_w, &screen_h); + + window_layout = elm_layout_add(notification_popup); + result = elm_layout_file_set(window_layout, EDJEFILE, GRP_VIEW_SUBMENU); + _DBG("Layout elm_layout_file_set for [%s] returns [%d]", EDJEFILE, result); + evas_object_resize(window_layout, screen_w, screen_h); + evas_object_show(window_layout); + + scroller = elm_scroller_add(window_layout); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_object_part_content_set(window_layout, "submenu_genlist", scroller); + elm_scroller_movement_block_set(scroller, ELM_SCROLLER_MOVEMENT_BLOCK_VERTICAL); + elm_object_scale_set(scroller, 1/edje_scale_get()); + evas_object_show(scroller); + + genlist = elm_genlist_add(scroller); + elm_object_focus_allow_set(genlist, EINA_TRUE); + + Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new(); + itc->item_style = "custom_1text"; + itc->func.text_get = _folder_list_label_get; + + int i; + for (i = 0; i < 6; i++) { + id = calloc(sizeof(util_item_data_s), 1); + id->index = i; + + elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + } + + elm_genlist_item_class_free(itc); + elm_object_content_set(scroller, genlist); + + elm_object_item_focus_set(elm_genlist_first_item_get(genlist), EINA_TRUE); + inputmgr_add_callback(genlist, 0, &popup_handler, priv); + + evas_object_show(notification_popup); + elm_win_activate(notification_popup); + +out: + return; +} + +void utils_show_select_folder_popup(struct _priv *priv) +{ + Evas_Object *notification_popup; + Evas_Object *window_layout = NULL; + Evas_Object *ok_btn, *cancel_btn, *new_folder_btn; + Evas_Object *scroller, *genlist; + + util_item_data_s *id; + list_data_s *list_data = calloc(sizeof(list_data_s), 1); + + char *path = NULL; + fsNodeInfo *node = NULL; + + int screen_x, screen_y, screen_w, screen_h; + + notification_popup = elm_win_add(NULL, "notification_popup", ELM_WIN_BASIC); + priv->popup_win = notification_popup; + + elm_win_screen_size_get(notification_popup, &screen_x, &screen_y, &screen_w, &screen_h); + + elm_win_alpha_set(notification_popup, EINA_TRUE); + elm_win_borderless_set(notification_popup, EINA_TRUE); + elm_win_autodel_set(notification_popup, EINA_TRUE); + + window_layout = elm_layout_add(notification_popup); + elm_layout_file_set(window_layout, EDJEFILE, GRP_VIEW_SELECT_FOLDER); + evas_object_resize(window_layout, screen_w, screen_h); + evas_object_show(window_layout); + + scroller = elm_scroller_add(window_layout); + elm_scroller_policy_set(scroller, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_object_part_content_set(window_layout, "select_folder_genlist", scroller); + elm_object_scale_set(scroller, 1/edje_scale_get()); + elm_object_focus_allow_set(scroller, EINA_TRUE); + evas_object_show(scroller); + + ok_btn = elm_button_add(window_layout); + elm_object_style_set(ok_btn, STYLE_TARGET_BTN); + elm_object_focus_allow_set(ok_btn, EINA_TRUE); + elm_object_part_content_set(window_layout, "select_folder_ok_btn", ok_btn); + elm_object_part_text_set(ok_btn, "part_popup_btn_text", "OK"); + evas_object_show(ok_btn); + + cancel_btn = elm_button_add(window_layout); + elm_object_style_set(cancel_btn, STYLE_TARGET_BTN); + elm_object_focus_allow_set(cancel_btn, EINA_TRUE); + elm_object_part_content_set(window_layout, "select_folder_cancel_btn", cancel_btn); + elm_object_part_text_set(cancel_btn, "part_popup_btn_text", "Cancel"); + evas_object_show(cancel_btn); + + new_folder_btn = elm_button_add(window_layout); + elm_object_style_set(new_folder_btn, STYLE_TARGET_BTN); + elm_object_focus_allow_set(new_folder_btn, EINA_TRUE); + elm_object_part_content_set(window_layout, "select_folder_newfolder_btn", new_folder_btn); + elm_object_part_text_set(new_folder_btn, "part_popup_btn_text", "New Folder"); + evas_object_show(new_folder_btn); + + elm_object_focus_next_object_set(ok_btn, cancel_btn, ELM_FOCUS_RIGHT); + elm_object_focus_next_object_set(cancel_btn, ok_btn, ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(cancel_btn, new_folder_btn, ELM_FOCUS_RIGHT); + elm_object_focus_next_object_set(new_folder_btn, cancel_btn, ELM_FOCUS_LEFT); + + genlist = elm_genlist_add(scroller); + + path = Get_Root_Path(STORAGE_TYPE_INTERNAL); + list_data->path = path; + + int ret = mf_fs_oper_read_dir(list_data->path, &list_data->folder_list, &list_data->file_list); + if (ret != MYFILE_ERR_NONE) { + free(path); + free(list_data); + return; + } + + list_data->file_count = eina_list_count(list_data->file_list); + list_data->folder_count = eina_list_count(list_data->folder_list); + + Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new(); + itc->item_style = "custom_file_target"; + itc->func.text_get = _folder_list_label_get; + itc->func.content_get = _folder_list_content_get; + itc->func.del = _folder_list_del; + + int i; + for (i = 0; i < list_data->folder_count; i++) { + id = calloc(sizeof(util_item_data_s), 1); + id->index = i; + + node = _get_fsNodeInfo(list_data->folder_list, id->index); + id->folder_name = strdup(node->name); + + elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); + } + + elm_genlist_item_class_free(itc); + elm_object_content_set(scroller, genlist); + + inputmgr_add_callback(notification_popup, 0, &popup_handler, priv); + inputmgr_add_callback(genlist, 0, &popup_handler, priv); + + inputmgr_add_callback(ok_btn, 0, &focus_handler, priv); + inputmgr_add_callback(cancel_btn, 0, &focus_handler, priv); + inputmgr_add_callback(new_folder_btn, 0, &focus_handler, priv); + + evas_object_smart_callback_add(cancel_btn, "clicked", _down_btn_cb, priv); + + evas_object_show(notification_popup); + elm_win_activate(notification_popup); + + free(list_data); + + return; +} + +Evas_Object *utils_add_popup(Evas_Object *parent, const char *style, + const char *popup_title, const char *popup_text) +{ + Evas_Object *popup; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + popup = elm_popup_add(parent); + if (!popup) { + _ERR("elm_popup_add failed."); + return NULL; + } + + elm_popup_orient_set(popup, ELM_POPUP_ORIENT_TOP_RIGHT); + + + if (style) + elm_object_style_set(popup, style); + + if (popup_title) + elm_object_part_text_set(popup, PART_POPUP_TITLE, popup_title); + + if (popup_text) + elm_object_text_set(popup, popup_text); + + evas_object_show(popup); + + return popup; +} + +Evas_Object *utils_add_ctxpopup(Evas_Object *parent, int opt_size, int *opt_id, + const char **opt_text, input_handler *opt_handler, void *data) +{ + Evas_Object *ctxpopup, *box, *btn = NULL, *firstbtn = NULL; + int i; + + if (!parent || opt_size <= 0 || !opt_text) { + _ERR("Invalid argument."); + return NULL; + } + + ctxpopup = elm_ctxpopup_add(parent); + if (!ctxpopup) { + _ERR("elm_ctxpopup_add failed."); + return NULL; + } + + box = utils_add_box(ctxpopup, NULL, EINA_FALSE, 0, 0); + if (!box) { + _ERR("Add box failed."); + evas_object_del(ctxpopup); + return NULL; + } + + elm_object_style_set(ctxpopup, STYLE_CTXPOPUP); + elm_object_content_set(ctxpopup, box); + elm_ctxpopup_direction_priority_set(ctxpopup, 0, 0, 0, 0); + evas_object_show(ctxpopup); + + for (i = 0; i < opt_size; i++) { + btn = utils_add_button(box, NULL, opt_text[i], + STYLE_OPTION_BTN); + if (!btn) { + _ERR("Add button failed."); + evas_object_del(ctxpopup); + return NULL; + } + + elm_box_pack_end(box, btn); + + if (opt_handler) + inputmgr_add_callback(btn, opt_id[i], + opt_handler, data); + + if (i == 0) + firstbtn = btn; + } + + elm_object_focus_next_object_set(firstbtn, btn, ELM_FOCUS_UP); + elm_object_focus_next_object_set(btn, firstbtn, ELM_FOCUS_DOWN); + + return ctxpopup; +} + +Evas_Object *utils_add_scroller(Evas_Object *parent, const char *part, + Evas_Object *content) +{ + Evas_Object *scr; + + if (!parent) { + _ERR("Invalid argument."); + return NULL; + } + + scr = elm_scroller_add(parent); + if (!scr) { + _ERR("elm_scroller_add failed."); + return NULL; + } + + elm_scroller_policy_set(scr, + ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + elm_object_focus_allow_set(scr, EINA_FALSE); + + if (part) + elm_object_part_content_set(parent, part, scr); + + if (content) + elm_object_content_set(scr, content); + + return scr; +} + +bool utils_launch_app(const char *appid, const char *key, const char *value) +{ + app_control_h app_ctrl; + int r; + + if (!appid) { + _ERR("Invalid argument."); + return false; + } + + r = app_control_create(&app_ctrl); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control handle create failed."); + return false; + } + + r = app_control_set_operation(app_ctrl, APP_CONTROL_OPERATION_DEFAULT); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control set operation failed."); + app_control_destroy(app_ctrl); + return false; + } + + if (key && value) { + r = app_control_add_extra_data(app_ctrl, key, value); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control set extra data failed."); + app_control_destroy(app_ctrl); + return false; + } + } + + r = app_control_set_app_id(app_ctrl, appid); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control set app id failed."); + app_control_destroy(app_ctrl); + return false; + } + + r = app_control_send_launch_request(app_ctrl, NULL, NULL); + if (r != APP_CONTROL_ERROR_NONE) { + _ERR("App control send launch request failed."); + app_control_destroy(app_ctrl); + return false; + } + + app_control_destroy(app_ctrl); + + return true; +} + +bool utils_uninstall_app(const char *pkgid, const char *pkgtype) +{ + package_manager_request_h request_h; + int r, id; + + if (!pkgid || !pkgtype) { + _ERR("Invalid argument."); + return false; + } + + r = package_manager_request_create(&request_h); + if (r != PACKAGE_MANAGER_ERROR_NONE) { + _ERR("Request handle create failed."); + return false; + } + + r = package_manager_request_set_type(request_h, pkgtype); + if (r != PACKAGE_MANAGER_ERROR_NONE) { + _ERR("Set pkg type failed."); + package_manager_request_destroy(request_h); + return false; + } + + r = package_manager_request_set_mode(request_h, + PACKAGE_MANAGER_REQUEST_MODE_QUIET); + if (r != PACKAGE_MANAGER_ERROR_NONE) { + _ERR("Set request mode failed."); + package_manager_request_destroy(request_h); + return false; + } + + r = package_manager_request_uninstall(request_h, pkgid, &id); + if (r != PACKAGE_MANAGER_ERROR_NONE) { + _ERR("Uninstall failed."); + package_manager_request_destroy(request_h); + return false; + } + + package_manager_request_destroy(request_h); + + return true; +} diff --git a/src/utils.c b/src/utils.c deleted file mode 100644 index ab331b3..0000000 --- a/src/utils.c +++ /dev/null @@ -1,455 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include - -#include "define.h" -#include "utils.h" - -Evas_Object *utils_add_window(const char *name) -{ - Evas_Object *win; - - if (!name) { - _ERR("Invalid argument."); - return NULL; - } - - win = elm_win_add(NULL, name, ELM_WIN_BASIC); - if (!win) { - _ERR("elm_win_add failed."); - return NULL; - } - - elm_win_title_set(win, name); - elm_win_focus_highlight_enabled_set(win, EINA_TRUE); - - evas_object_show(win); - - return win; -} - -Evas_Object *utils_add_layout(Evas_Object *parent, const char *group, - Eina_Bool win_resize) -{ - Evas_Object *layout; - - if (!parent || !group) { - _ERR("Invalid argument."); - return NULL; - } - - layout = elm_layout_add(parent); - if (!layout) { - _ERR("elm_layout_add failed."); - return NULL; - } - - elm_layout_file_set(layout, EDJEFILE, group); - - evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - - if (win_resize) - elm_win_resize_object_add(parent, layout); - - return layout; -} - -Evas_Object *utils_add_box(Evas_Object *parent, const char *part, - Eina_Bool horizontal, Evas_Coord padding_h, - Evas_Coord padding_v) -{ - Evas_Object *box; - - if (!parent) { - _ERR("Invalid argument."); - return NULL; - } - - box = elm_box_add(parent); - if (!box) { - _ERR("elm_box_add failed."); - return NULL; - } - - elm_box_horizontal_set(box, horizontal); - elm_box_padding_set(box, ELM_SCALE_SIZE(padding_h), - ELM_SCALE_SIZE(padding_v)); - - evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL); - - if (part) - elm_object_part_content_set(parent, part, box); - else - elm_object_content_set(parent, box); - - evas_object_show(box); - - return box; -} - -Evas_Object *utils_add_button(Evas_Object *parent, const char *part, - const char *text, const char *style) -{ - Evas_Object *btn; - - if (!parent) { - _ERR("Invalid argument."); - return NULL; - } - - btn = elm_button_add(parent); - if (!btn) { - _ERR("elm_button_add failed."); - return NULL; - } - - if (part) - elm_object_part_content_set(parent, part, btn); - if (text) - elm_object_text_set(btn, text); - if (style) - elm_object_style_set(btn, style); - - evas_object_show(btn); - - return btn; -} - -Evas_Object *utils_add_gengrid(Evas_Object *parent, Eina_Bool horizontal, - int width, int height) -{ - Evas_Object *grid; - - if (!parent) { - _ERR("Invalid argument."); - return NULL; - } - - grid = elm_gengrid_add(parent); - if (!grid) { - _ERR("elm_gengrid_add failed."); - return NULL; - } - - 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_gengrid_multi_select_set(grid, EINA_FALSE); - elm_gengrid_horizontal_set(grid, horizontal); - elm_gengrid_align_set(grid, 0.0, 0.0); - elm_gengrid_select_mode_set(grid, ELM_OBJECT_SELECT_MODE_ALWAYS); - elm_gengrid_item_size_set(grid, ELM_SCALE_SIZE(width), - ELM_SCALE_SIZE(height)); - elm_scroller_policy_set(grid, ELM_SCROLLER_POLICY_OFF, - ELM_SCROLLER_POLICY_OFF); - - return grid; -} - -Evas_Object *utils_add_table(Evas_Object *parent, const char *part, - int padding_x, int padding_y) -{ - Evas_Object *table; - - if (!parent) { - _ERR("Invalid argument."); - return NULL; - } - - table = elm_table_add(parent); - if (!table) { - _ERR("elm_table_add failed."); - return NULL; - } - - elm_table_padding_set(table, ELM_SCALE_SIZE(padding_x), - ELM_SCALE_SIZE(padding_y)); - evas_object_show(table); - - if (part) - elm_object_part_content_set(parent, part, table); - - return table; -} - -static void _notify_timeout_cb(void *data, Evas_Object *obj, void *ei) -{ - if (!obj) - return; - - evas_object_del(obj); -} - -Evas_Object *utils_add_notify(Evas_Object *parent, const char *text, - const char *noti_style, const char *label_style, int timeout) -{ - Evas_Object *notify, *lbl; - - if (!parent) { - _ERR("Invalid argument."); - return NULL; - } - - notify = elm_notify_add(parent); - if (!notify) { - _ERR("elm_notify_add failed."); - return NULL; - } - - evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, - EVAS_HINT_EXPAND); - elm_notify_align_set(notify, 0.0, 1.0); - elm_notify_timeout_set(notify, timeout); - - if (noti_style) - elm_object_style_set(notify, noti_style); - - lbl = elm_label_add(notify); - if (!lbl) { - _ERR("elm_label_add failed."); - evas_object_del(notify); - return NULL; - } - - elm_object_content_set(notify, lbl); - evas_object_show(lbl); - - if (label_style) - elm_object_style_set(lbl, label_style); - - if (text) - elm_object_text_set(lbl, text); - - evas_object_smart_callback_add(notify, SIG_TIMEOUT, - _notify_timeout_cb, NULL); - evas_object_show(notify); - - return notify; -} - -Evas_Object *utils_add_popup(Evas_Object *parent, const char *style, - const char *popup_title, const char *popup_text) -{ - Evas_Object *popup; - - if (!parent) { - _ERR("Invalid argument."); - return NULL; - } - - popup = elm_popup_add(parent); - if (!popup) { - _ERR("elm_popup_add failed."); - return NULL; - } - - elm_popup_orient_set(popup, ELM_POPUP_ORIENT_CENTER); - evas_object_show(popup); - - if (style) - elm_object_style_set(popup, style); - - if (popup_title) - elm_object_part_text_set(popup, PART_POPUP_TITLE, popup_title); - - if (popup_text) - elm_object_text_set(popup, popup_text); - - return popup; -} - -Evas_Object *utils_add_ctxpopup(Evas_Object *parent, int opt_size, int *opt_id, - const char **opt_text, input_handler *opt_handler, void *data) -{ - Evas_Object *ctxpopup, *box, *btn = NULL, *firstbtn = NULL; - int i; - - if (!parent || opt_size <= 0 || !opt_text) { - _ERR("Invalid argument."); - return NULL; - } - - ctxpopup = elm_ctxpopup_add(parent); - if (!ctxpopup) { - _ERR("elm_ctxpopup_add failed."); - return NULL; - } - - box = utils_add_box(ctxpopup, NULL, EINA_FALSE, 0, 0); - if (!box) { - _ERR("Add box failed."); - evas_object_del(ctxpopup); - return NULL; - } - - elm_object_style_set(ctxpopup, STYLE_CTXPOPUP); - elm_object_content_set(ctxpopup, box); - elm_ctxpopup_direction_priority_set(ctxpopup, 0, 0, 0, 0); - evas_object_show(ctxpopup); - - for (i = 0; i < opt_size; i++) { - btn = utils_add_button(box, NULL, opt_text[i], - STYLE_OPTION_BTN); - if (!btn) { - _ERR("Add button failed."); - evas_object_del(ctxpopup); - return NULL; - } - - elm_box_pack_end(box, btn); - - if (opt_handler) - inputmgr_add_callback(btn, opt_id[i], - opt_handler, data); - - if (i == 0) - firstbtn = btn; - } - - elm_object_focus_next_object_set(firstbtn, btn, ELM_FOCUS_UP); - elm_object_focus_next_object_set(btn, firstbtn, ELM_FOCUS_DOWN); - - return ctxpopup; -} - -Evas_Object *utils_add_scroller(Evas_Object *parent, const char *part, - Evas_Object *content) -{ - Evas_Object *scr; - - if (!parent) { - _ERR("Invalid argument."); - return NULL; - } - - scr = elm_scroller_add(parent); - if (!scr) { - _ERR("elm_scroller_add failed."); - return NULL; - } - - elm_scroller_policy_set(scr, - ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); - elm_object_focus_allow_set(scr, EINA_FALSE); - - if (part) - elm_object_part_content_set(parent, part, scr); - - if (content) - elm_object_content_set(scr, content); - - return scr; -} - -bool utils_launch_app(const char *appid, const char *key, const char *value) -{ - app_control_h app_ctrl; - int r; - - if (!appid) { - _ERR("Invalid argument."); - return false; - } - - r = app_control_create(&app_ctrl); - if (r != APP_CONTROL_ERROR_NONE) { - _ERR("App control handle create failed."); - return false; - } - - r = app_control_set_operation(app_ctrl, APP_CONTROL_OPERATION_DEFAULT); - if (r != APP_CONTROL_ERROR_NONE) { - _ERR("App control set operation failed."); - app_control_destroy(app_ctrl); - return false; - } - - if (key && value) { - r = app_control_add_extra_data(app_ctrl, key, value); - if (r != APP_CONTROL_ERROR_NONE) { - _ERR("App control set extra data failed."); - app_control_destroy(app_ctrl); - return false; - } - } - - r = app_control_set_app_id(app_ctrl, appid); - if (r != APP_CONTROL_ERROR_NONE) { - _ERR("App control set app id failed."); - app_control_destroy(app_ctrl); - return false; - } - - r = app_control_send_launch_request(app_ctrl, NULL, NULL); - if (r != APP_CONTROL_ERROR_NONE) { - _ERR("App control send launch request failed."); - app_control_destroy(app_ctrl); - return false; - } - - app_control_destroy(app_ctrl); - - return true; -} - -bool utils_uninstall_app(const char *pkgid, const char *pkgtype) -{ - package_manager_request_h request_h; - int r, id; - - if (!pkgid || !pkgtype) { - _ERR("Invalid argument."); - return false; - } - - r = package_manager_request_create(&request_h); - if (r != PACKAGE_MANAGER_ERROR_NONE) { - _ERR("Request handle create failed."); - return false; - } - - r = package_manager_request_set_type(request_h, pkgtype); - if (r != PACKAGE_MANAGER_ERROR_NONE) { - _ERR("Set pkg type failed."); - package_manager_request_destroy(request_h); - return false; - } - - r = package_manager_request_set_mode(request_h, - PACKAGE_MANAGER_REQUEST_MODE_QUIET); - if (r != PACKAGE_MANAGER_ERROR_NONE) { - _ERR("Set request mode failed."); - package_manager_request_destroy(request_h); - return false; - } - - r = package_manager_request_uninstall(request_h, pkgid, &id); - if (r != PACKAGE_MANAGER_ERROR_NONE) { - _ERR("Uninstall failed."); - package_manager_request_destroy(request_h); - return false; - } - - package_manager_request_destroy(request_h); - - return true; -} diff --git a/src/view/base.c b/src/view/base.c new file mode 100755 index 0000000..db72771 --- /dev/null +++ b/src/view/base.c @@ -0,0 +1,448 @@ +/* + * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved + * + * Licensed under the Apache License, Version 2.0 (the License); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an AS IS BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include "define.h" +#include "view.h" +#include "layout.h" +#include "data.h" +#include "util/utils.h" +#include "util/dialog_popup.h" +#include "util/file-util.h" +#include "util/fs-util.h" +#include "util/fs-error.h" + +#define STYLE_MENU_BTN "menu_btn" + +struct _menu_item { + const char *name; + const char *layout_id; + layout_class *(*func_get_lclass)(void); +}; + +static struct _menu_item g_menu_item[E_LAYOUT_MAX] = { + [E_LAYOUT_DEFAULT] = { + "Default", + LAYOUT_DEFAULT, + layout_default_get_lclass, + } +}; + +static void +gengrid_it_cb(void *data, Evas_Object *obj, void *event_info) +{ + int index, count, i; + Elm_Object_Item *next_it, *deleted_it; + + index = elm_gengrid_item_index_get(event_info); + count = elm_gengrid_items_count(obj); + next_it = elm_gengrid_item_next_get(event_info); + deleted_it = next_it; + + for (i = 0; i < count-index; i++) { + next_it = elm_gengrid_item_next_get(deleted_it); + elm_object_item_del(deleted_it); + deleted_it = next_it; + } +} + +static char* +gengrid_text_get_cb(void *data, Evas_Object *obj, const char *part) +{ + char buf[1024]; + path_item_data_s *id = data; + int index = id->index; + + if (!strcmp(part, "elm.text")) { + if (index == -1) + snprintf(buf, 1023, "%s", id->selected_folder); + else if (index == 0) + snprintf(buf, 1023, "%s", "Home"); + + return strdup(buf); + } else + return NULL; +} + +static Evas_Object* +create_gengrid(struct _priv *priv) +{ + path_item_data_s *id; + int w, h; + Elm_Gengrid_Item_Class *gic; + Evas_Object *gengrid; + Elm_Object_Item *item; + + gengrid = elm_gengrid_add(priv->base); + evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(gengrid, EVAS_HINT_FILL, EVAS_HINT_FILL); + + w = (int)(ELM_SCALE_SIZE(150)); + h = (int)(ELM_SCALE_SIZE(100)); + elm_gengrid_item_size_set(gengrid, w, h); + elm_gengrid_align_set(gengrid, 0.0, 0.5); + elm_gengrid_horizontal_set(gengrid, EINA_TRUE); + elm_gengrid_multi_select_set(gengrid, EINA_FALSE); + elm_scroller_policy_set(gengrid, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF); + + priv->selected_parent_path = Get_Root_Path(STORAGE_TYPE_INTERNAL); + + gic = elm_gengrid_item_class_new(); + gic->item_style = "custom_1text"; + + gic->func.text_get = gengrid_text_get_cb; + + id = calloc(sizeof(path_item_data_s), 1); + id->index = 0; + id->parent_path = priv->selected_parent_path; + item = elm_gengrid_item_append(gengrid, gic, id, gengrid_it_cb, id); + id->item = item; + mf_file_attr_get_path_level(id->parent_path, &id->level); + + elm_object_item_data_set(item, id); + + evas_object_show(gengrid); + elm_gengrid_item_class_free(gic); + + return gengrid; +} + +static void +update_gengrid(void *data) +{ + struct _priv *priv = (struct _priv *)data; + + path_item_data_s *id; + Elm_Gengrid_Item_Class *gic; + Elm_Object_Item *item, *delete; + + int buffer_size; + char *new_path; + + Evas_Object *file_path = elm_object_part_content_get(priv->base, PART_FILE_PATH); + + buffer_size = strlen(priv->selected_parent_path)+strlen("/")+strlen(priv->selected_folder); + new_path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(new_path, buffer_size+1, "%s%s%s", priv->selected_parent_path, "/", priv->selected_folder); + + if (priv->same == 1) { + delete = elm_gengrid_last_item_get(file_path); + elm_object_item_del(delete); + } else if (priv->same < 0) { + int i; + int num = priv->same * (-1); + for (i = 0; i < num; i++) { + delete = elm_gengrid_last_item_get(file_path); + elm_object_item_del(delete); + } + delete = elm_gengrid_last_item_get(file_path); + elm_object_item_del(delete); + } + + gic = elm_gengrid_item_class_new(); + gic->item_style = "custom_1text"; + + gic->func.text_get = gengrid_text_get_cb; + + id = calloc(sizeof(path_item_data_s), 1); + id->selected_folder = priv->selected_folder; + id->parent_path = priv->selected_parent_path; + id->index = -1; + + id->full_path = new_path; + mf_file_attr_get_path_level(id->full_path, &id->level); + + item = elm_gengrid_item_append(file_path, gic, id, gengrid_it_cb, id); + id->item = item; + + elm_object_item_data_set(item, id); + evas_object_show(file_path); + elm_gengrid_item_class_free(gic); + + free(new_path); + return; +} + + +static void _menu_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct _priv *priv = data; + + Elm_Object_Item *item; + + Evas_Object *file_path = elm_object_part_content_get(priv->base, PART_FILE_PATH); + item = elm_gengrid_last_item_get(file_path); + + path_item_data_s *id = elm_object_item_data_get(item); + + priv->selected_folder = id->selected_folder; + priv->selected_parent_path = id->parent_path; + + utils_show_submenu_popup(priv); +} + +static void _menu_cb2(void *data, Evas_Object *obj, void *event_info) +{ + struct _priv *priv = data; + priv->popup_base = obj; + + Elm_Object_Item *item; + + Evas_Object *file_path = elm_object_part_content_get(priv->base, PART_FILE_PATH); + item = elm_gengrid_last_item_get(file_path); + + path_item_data_s *id = elm_object_item_data_get(item); + + priv->selected_folder = id->selected_folder; + priv->selected_parent_path = id->parent_path; + + utils_show_select_folder_popup(priv); +} + +static void _key_up_cb(int id, void *data, Evas *e, Evas_Object *obj, + Evas_Event_Key_Up *ev) +{ + if (!strcmp(ev->keyname, KEY_BACK) || + !strcmp(ev->keyname, KEY_ESC)) + ui_app_exit(); + + return; +} + +static input_handler _menu_input_handler = { + .key_up = _key_up_cb +}; + +static bool _draw_menu(struct _priv *priv) +{ + Evas_Object *icon = elm_button_add(priv->base); + + elm_object_style_set(icon, STYLE_MENU_BTN); + elm_object_part_content_set(priv->base, PART_MENU, icon); + evas_object_resize(icon, 46, 46); + evas_object_show(icon); + elm_object_focus_allow_set(icon, EINA_TRUE); + + Evas_Object *icon2 = elm_button_add(priv->base); + + elm_object_style_set(icon2, STYLE_MENU_BTN); + elm_object_part_content_set(priv->base, PART_CONFIRM, icon2); + evas_object_resize(icon2, 46, 46); + elm_object_focus_allow_set(icon2, EINA_TRUE); + + priv->icon1 = icon; + priv->icon2 = icon2; + + evas_object_smart_callback_add(icon, "clicked", _menu_cb, priv); + evas_object_smart_callback_add(icon2, "clicked", _menu_cb2, priv); + + Evas_Object *path = elm_object_part_content_get(priv->base, PART_FILE_PATH); + elm_object_focus_next_object_set(path, icon, ELM_FOCUS_UP); + elm_object_focus_next_object_set(icon, path, ELM_FOCUS_DOWN); + elm_object_focus_next_object_set(icon, icon2, ELM_FOCUS_LEFT); + elm_object_focus_next_object_set(icon2, icon, ELM_FOCUS_RIGHT); + + return true; +} + +static bool _draw_file_path(struct _priv *priv) +{ + Evas_Object *gengrid = NULL; + + gengrid = create_gengrid(priv); + evas_object_show(gengrid); + + elm_object_part_content_set(priv->base, PART_FILE_PATH, gengrid); + + return true; +} + +static bool _draw_view_content(struct _priv *priv) +{ + if (!priv) + return false; + + if (!_draw_file_path(priv)) { + _ERR("Draw file path failed."); + return false; + } + if (!_draw_menu(priv)) { + _ERR("Draw menu failed."); + return false; + } + + return true; +} + +static Evas_Object *_create(Evas_Object *win, void *data) +{ + struct _priv *priv; + Evas_Object *base; + layoutmgr *lmgr; + int i; + + if (!win) { + _ERR("Get window object failed."); + return NULL; + } + + priv = calloc(1, sizeof(*priv)); + if (!priv) { + _ERR("Calloc failed."); + return NULL; + } + + base = utils_add_layout(win, GRP_LAYOUT_BASE, EINA_TRUE); + + if (!base) { + _ERR("Add layout failed."); + free(priv); + return NULL; + } + + priv->win = win; + priv->base = base; + + if (!_draw_view_content(priv)) { + _ERR("failed to draw contents"); + free(priv); + return NULL; + } + + lmgr = layoutmgr_create(base); + priv->lmgr = lmgr; + + for (i = 0; i < 1; i++) + layoutmgr_add_layout(lmgr, g_menu_item[i].func_get_lclass(), priv); + + if (!viewmgr_set_view_data(VIEW_BASE, priv)) { + _ERR("Set view data failed."); + goto end; + } + + inputmgr_add_callback(priv->base, 0, &_menu_input_handler, priv); + + return base; + +end: + evas_object_del(base); + free(priv); + + return NULL; +} + +static void _show(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Get data failed."); + return; + } + priv = data; + + if (priv->base) { + evas_object_show(priv->base); + layoutmgr_show_layout(priv->lmgr, g_menu_item[E_LAYOUT_DEFAULT].layout_id); + } +} + +static void _hide(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Get data failed."); + return; + } + priv = data; + + if (priv->base) + evas_object_hide(priv->base); +} + +static void _update(void *view_data, int update_type, void *data) +{ + struct _priv *priv; + + if (!view_data) { + _ERR("failed to get view data"); + return; + } + + priv = data; + + switch (update_type) { + case UPDATE_FILE: + elm_object_signal_emit(priv->base, SIG_INVISIBLE, SOURCE_ELM); + layoutmgr_update_layout(priv->lmgr, g_menu_item[E_LAYOUT_DEFAULT].layout_id, + update_type, priv); + break; + + case UPDATE_FILE_TO_SELECT: + elm_object_signal_emit(priv->base, SIG_VISIBLE, SOURCE_ELM); + layoutmgr_update_layout(priv->lmgr, g_menu_item[E_LAYOUT_DEFAULT].layout_id, + update_type, priv); + break; + + case UPDATE_PATH: + update_gengrid(priv); + break; + + default: + break; + } + + return; +} + +static void _destroy(void *data) +{ + struct _priv *priv; + + if (!data) { + _ERR("Get data failed."); + return; + } + priv = data; + + if (priv->base) + evas_object_del(priv->base); + + free(priv); +} + +static view_class _vclass = { + .view_id = VIEW_BASE, + .create = _create, + .show = _show, + .hide = _hide, + .update = _update, + .destroy = _destroy, +}; + +view_class *view_base_get_vclass(void) +{ + return &_vclass; +} diff --git a/src/view/view_base.c b/src/view/view_base.c deleted file mode 100644 index b97e10b..0000000 --- a/src/view/view_base.c +++ /dev/null @@ -1,271 +0,0 @@ -/* - * Copyright (c) 2016 Samsung Electronics Co., Ltd All Rights Reserved - * - * Licensed under the Apache License, Version 2.0 (the License); - * you may not use this file except in compliance with the License. - * You may obtain a copy of the License at - * - * http://www.apache.org/licenses/LICENSE-2.0 - * - * Unless required by applicable law or agreed to in writing, software - * distributed under the License is distributed on an AS IS BASIS, - * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. - * See the License for the specific language governing permissions and - * limitations under the License. - */ - -#include -#include -#include -#include -#include -#include -#include - -#include "define.h" -#include "utils.h" -#include "view.h" -#include "dialog_popup_view.h" - -enum menu_type { - MENU_MYAPPS = 0, - MENU_APPSTORE, -}; - -const char *str_menu[] = { - STR_MYAPPS, - NULL -}; - -struct _priv { - Evas_Object *win; - Evas_Object *base; - Evas_Object *menu_btn[MENU_COUNT]; - Evas_Object *focused_menu; - Evas_Object *notify; - Elm_Object_Item *focused_item; -}; - -static void _mouse_move_cb(int id, void *data, Evas *e, Evas_Object *obj, - Evas_Event_Mouse_Move *ev) -{ - if (!obj) { - _ERR("Invalid argument."); - return; - } - - if (!elm_object_focus_get(obj)) - elm_object_focus_set(obj, EINA_TRUE); -} - -static void _menu_focused_cb(int id, void *data, Evas_Object *obj, - Elm_Object_Item *item) -{ - struct _priv *priv; - - if (!data || !obj) { - _ERR("Invalid argument."); - return; - } - priv = data; - - if (priv->focused_menu == obj) - return; - - if (priv->focused_menu) - elm_object_signal_emit(priv->focused_menu, - SIG_UNSELECTED, SRC_MENU_BTN); - - switch (id) { - case MENU_MYAPPS: - elm_object_signal_emit(priv->base, SIG_VISIBLE, SRC_MYAPPS); - break; - - case MENU_APPSTORE: - elm_object_signal_emit(priv->base, SIG_INVISIBLE, SRC_MYAPPS); - elm_object_part_text_set(priv->base, PART_CONTENTS_TEXT, - STR_NOT_SUPPORTED); - /* It will be implemented later. */ - break; - - default: - _ERR("Invalid menu type."); - return; - } - - priv->focused_menu = obj; -} - -static void _menu_key_down_cb(int id, void *data, Evas *e, Evas_Object *obj, - Evas_Event_Key_Down *ev) -{ - if (!data || !obj || !ev) { - _ERR("Invalid argument."); - return; - } -} - -static input_handler _menu_input_handler = { - .mouse_move = _mouse_move_cb, - .focused = _menu_focused_cb, - .key_down = _menu_key_down_cb -}; - -static bool _draw_top_area(struct _priv *priv) -{ - Evas_Object *box, *btn; - int i; - - elm_object_part_text_set(priv->base, PART_TOP_TITLE, STR_APPS); - - box = utils_add_box(priv->base, PART_MENU, EINA_TRUE, - SIZE_MENU_BOX_PAD_H, SIZE_MENU_BOX_PAD_V); - if (!box) { - _ERR("Add box failed."); - return false; - } - - for (i = 0; i < MENU_COUNT; i++) { - btn = utils_add_button(priv->base, NULL, str_menu[i], - STYLE_MENU_BTN); - if (!btn) { - _ERR("elm_button_add failed."); - evas_object_del(box); - return false; - } - - inputmgr_add_callback(btn, i, &_menu_input_handler, priv); - - elm_box_pack_end(box, btn); - - priv->menu_btn[i] = btn; - } - - elm_object_focus_next_object_set(priv->menu_btn[0], - priv->menu_btn[MENU_COUNT - 1], ELM_FOCUS_LEFT); - elm_object_focus_next_object_set(priv->menu_btn[MENU_COUNT - 1], - priv->menu_btn[0], ELM_FOCUS_RIGHT); - elm_object_focus_next_object_set(priv->menu_btn[0], priv->menu_btn[0], - ELM_FOCUS_DOWN); - - elm_object_focus_set(priv->menu_btn[0], EINA_TRUE); - - return true; -} - -static void _draw_view_content(struct _priv *priv) -{ - if (!_draw_top_area(priv)) { - _ERR("Draw top area failed."); - return; - } -} - -static Evas_Object *_create(Evas_Object *win, void *data) -{ - struct _priv *priv; - Evas_Object *base; - - if (!win) { - _ERR("Get window object failed."); - return NULL; - } - - priv = calloc(1, sizeof(*priv)); - if (!priv) { - _ERR("Calloc failed."); - return NULL; - } - - base = utils_add_layout(win, GRP_VIEW_BASE, EINA_TRUE); - if (!base) { - _ERR("Add layout failed."); - free(priv); - return NULL; - } - - - priv->win = win; - priv->base = base; - - if (!viewmgr_set_view_data(VIEW_BASE, priv)) { - _ERR("Set view data failed."); - goto end; - } - - _draw_view_content(priv); - - return base; - -end: - evas_object_del(base); - free(priv); - - return NULL; -} - -static void _show(void *data) -{ - struct _priv *priv; - - if (!data) { - _ERR("Get data failed."); - return; - } - priv = data; - - if (priv->base) - evas_object_show(priv->base); -} - -static void _hide(void *data) -{ - struct _priv *priv; - - if (!data) { - _ERR("Get data failed."); - return; - } - priv = data; - - if (priv->base) - evas_object_hide(priv->base); -} - -static void _update(void *view_data, int update_type, void *data) -{ - if (!view_data) { - _ERR("Get data failed."); - return; - } -} - -static void _destroy(void *data) -{ - struct _priv *priv; - - if (!data) { - _ERR("Get data failed."); - return; - } - priv = data; - - if (priv->base) - evas_object_del(priv->base); - - free(priv); -} - -static view_class _vclass = { - .view_id = VIEW_BASE, - .create = _create, - .show = _show, - .hide = _hide, - .update = _update, - .destroy = _destroy, -}; - -view_class *view_base_get_vclass(void) -{ - return &_vclass; -} -- 2.7.4 From a012a2fba116c9468c2216cd20d11f0ae151892c Mon Sep 17 00:00:00 2001 From: Hyerim Kim Date: Wed, 11 May 2016 16:18:03 +0900 Subject: [PATCH 5/6] Implementation air_myfiles - fix bug and memory leak Signed-off-by: Hyerim Kim Change-Id: I2b1f7c10951dd0b16e83ce3a2ea919ea64b51cc7 --- include/data.h | 12 +- include/util/file-util.h | 18 + res/edc/widget/gengrid.edc | 515 ++++++++++----------- res/images/U01_subdepth_folder_arrow.png | Bin 1150 -> 1154 bytes res/images/gengrid/00_check_activate.png | Bin 1376 -> 1380 bytes res/images/gengrid/00_check_bg.png | Bin 2873 -> 2886 bytes res/images/gengrid/00_check_bg_ef.png | Bin 2881 -> 2894 bytes res/images/gengrid/00_check_bg_line.png | Bin 2883 -> 2896 bytes res/images/gengrid/00_check_focus.png | Bin 1078 -> 1082 bytes res/images/gengrid/00_focus_01.#.png | Bin 2850 -> 2864 bytes res/images/gengrid/my_files_sd_card.png | Bin 1193 -> 1196 bytes res/images/gengrid/myfile_icon_video_play.png | Bin 3799 -> 3814 bytes res/images/icon/00_nocontents_devices.png | Bin 20481 -> 20563 bytes res/images/icon/00_nocontents_multimedia.png | Bin 44505 -> 44733 bytes res/images/icon/00_nocontents_picture.png | Bin 19965 -> 20051 bytes res/images/icon/00_nocontents_text.png | Bin 24215 -> 24308 bytes res/images/icon/T01_2_button_expand_cancel.png | Bin 3745 -> 3759 bytes res/images/icon/my_files_folder_favorite.png | Bin 3312 -> 3324 bytes res/images/icon/my_files_sd_card.png | Bin 2996 -> 3010 bytes res/images/icon/myfile_controlbar_cion_home.png | Bin 1202 -> 1207 bytes .../icon/myfile_controlbar_cion_up_folder.png | Bin 1189 -> 1191 bytes res/images/icon/myfile_icon_amr.png | Bin 2706 -> 2714 bytes res/images/icon/myfile_icon_default_albumart.jpg | Bin 153883 -> 154239 bytes res/images/icon/myfile_icon_email.png | Bin 2190 -> 2200 bytes res/images/icon/myfile_icon_etc.png | Bin 1498 -> 1505 bytes res/images/icon/myfile_icon_excel.png | Bin 4202 -> 4225 bytes res/images/icon/myfile_icon_folder.png | Bin 3195 -> 3208 bytes res/images/icon/myfile_icon_folder_sdcard.png | Bin 1874 -> 1877 bytes res/images/icon/myfile_icon_html.png | Bin 3057 -> 3062 bytes res/images/icon/myfile_icon_hwp.png | Bin 2688 -> 2699 bytes res/images/icon/myfile_icon_images.png | Bin 3936 -> 3954 bytes res/images/icon/myfile_icon_java.png | Bin 2991 -> 3005 bytes res/images/icon/myfile_icon_music.png | Bin 4016 -> 4031 bytes res/images/icon/myfile_icon_pdf.png | Bin 4383 -> 4398 bytes res/images/icon/myfile_icon_ppt.png | Bin 3766 -> 3784 bytes .../icon/myfile_icon_root_folder_device_memory.png | Bin 2899 -> 2913 bytes res/images/icon/myfile_icon_rss.png | Bin 2854 -> 2870 bytes res/images/icon/myfile_icon_select_all.png | Bin 3381 -> 3394 bytes res/images/icon/myfile_icon_snb.png | Bin 2261 -> 2270 bytes res/images/icon/myfile_icon_soft_back.png | Bin 2120 -> 2128 bytes res/images/icon/myfile_icon_soft_search_back.png | Bin 1623 -> 1625 bytes res/images/icon/myfile_icon_story.png | Bin 2999 -> 3009 bytes res/images/icon/myfile_icon_svg.png | Bin 2851 -> 2861 bytes res/images/icon/myfile_icon_swf.png | Bin 2255 -> 2260 bytes res/images/icon/myfile_icon_task.png | Bin 2159 -> 2169 bytes res/images/icon/myfile_icon_text.png | Bin 1777 -> 1780 bytes res/images/icon/myfile_icon_tpk.png | Bin 3352 -> 3363 bytes res/images/icon/myfile_icon_vText.png | Bin 2038 -> 2050 bytes res/images/icon/myfile_icon_vcalender.png | Bin 3676 -> 3689 bytes res/images/icon/myfile_icon_vcard.png | Bin 3982 -> 3998 bytes res/images/icon/myfile_icon_video.png | Bin 3761 -> 3778 bytes res/images/icon/myfile_icon_video_play.png | Bin 1960 -> 1963 bytes res/images/icon/myfile_icon_word.png | Bin 2660 -> 2666 bytes res/images/icon/myfile_icon_zip.png | Bin 1774 -> 1778 bytes res/images/icon/myfile_search_category_all.png | Bin 1048 -> 1051 bytes res/images/icon/myfile_search_category_doc.png | Bin 1006 -> 1009 bytes res/images/icon/myfile_search_category_img.png | Bin 1163 -> 1168 bytes res/images/icon/myfile_search_category_snd.png | Bin 1104 -> 1109 bytes res/images/icon/myfile_search_category_video.png | Bin 1200 -> 1206 bytes res/images/icon/myfile_title_icon_search.png | Bin 1355 -> 1361 bytes res/images/icon_button_more.png | Bin 1249 -> 1251 bytes res/images/icon_button_more_rotation.png | Bin 1313 -> 1316 bytes res/images/my_files_sd_card.png | Bin 1193 -> 1196 bytes src/layout/default.c | 468 +++++++++++++------ src/util/dialog_popup.c | 3 + src/util/file-attr.c | 2 +- src/util/file-util.c | 76 +++ src/util/utils.c | 97 ++-- src/view/base.c | 185 ++++++-- 69 files changed, 907 insertions(+), 469 deletions(-) mode change 100644 => 100755 res/images/U01_subdepth_folder_arrow.png mode change 100644 => 100755 res/images/gengrid/00_check_activate.png mode change 100644 => 100755 res/images/gengrid/00_check_bg.png mode change 100644 => 100755 res/images/gengrid/00_check_bg_ef.png mode change 100644 => 100755 res/images/gengrid/00_check_bg_line.png mode change 100644 => 100755 res/images/gengrid/00_check_focus.png mode change 100644 => 100755 res/images/gengrid/00_focus_01.#.png mode change 100644 => 100755 res/images/gengrid/my_files_sd_card.png mode change 100644 => 100755 res/images/gengrid/myfile_icon_video_play.png mode change 100644 => 100755 res/images/icon/00_nocontents_devices.png mode change 100644 => 100755 res/images/icon/00_nocontents_multimedia.png mode change 100644 => 100755 res/images/icon/00_nocontents_picture.png mode change 100644 => 100755 res/images/icon/00_nocontents_text.png mode change 100644 => 100755 res/images/icon/T01_2_button_expand_cancel.png mode change 100644 => 100755 res/images/icon/my_files_folder_favorite.png mode change 100644 => 100755 res/images/icon/my_files_sd_card.png mode change 100644 => 100755 res/images/icon/myfile_controlbar_cion_home.png mode change 100644 => 100755 res/images/icon/myfile_controlbar_cion_up_folder.png mode change 100644 => 100755 res/images/icon/myfile_icon_amr.png mode change 100644 => 100755 res/images/icon/myfile_icon_default_albumart.jpg mode change 100644 => 100755 res/images/icon/myfile_icon_email.png mode change 100644 => 100755 res/images/icon/myfile_icon_etc.png mode change 100644 => 100755 res/images/icon/myfile_icon_excel.png mode change 100644 => 100755 res/images/icon/myfile_icon_folder.png mode change 100644 => 100755 res/images/icon/myfile_icon_folder_sdcard.png mode change 100644 => 100755 res/images/icon/myfile_icon_html.png mode change 100644 => 100755 res/images/icon/myfile_icon_hwp.png mode change 100644 => 100755 res/images/icon/myfile_icon_images.png mode change 100644 => 100755 res/images/icon/myfile_icon_java.png mode change 100644 => 100755 res/images/icon/myfile_icon_music.png mode change 100644 => 100755 res/images/icon/myfile_icon_pdf.png mode change 100644 => 100755 res/images/icon/myfile_icon_ppt.png mode change 100644 => 100755 res/images/icon/myfile_icon_root_folder_device_memory.png mode change 100644 => 100755 res/images/icon/myfile_icon_rss.png mode change 100644 => 100755 res/images/icon/myfile_icon_select_all.png mode change 100644 => 100755 res/images/icon/myfile_icon_snb.png mode change 100644 => 100755 res/images/icon/myfile_icon_soft_back.png mode change 100644 => 100755 res/images/icon/myfile_icon_soft_search_back.png mode change 100644 => 100755 res/images/icon/myfile_icon_story.png mode change 100644 => 100755 res/images/icon/myfile_icon_svg.png mode change 100644 => 100755 res/images/icon/myfile_icon_swf.png mode change 100644 => 100755 res/images/icon/myfile_icon_task.png mode change 100644 => 100755 res/images/icon/myfile_icon_text.png mode change 100644 => 100755 res/images/icon/myfile_icon_tpk.png mode change 100644 => 100755 res/images/icon/myfile_icon_vText.png mode change 100644 => 100755 res/images/icon/myfile_icon_vcalender.png mode change 100644 => 100755 res/images/icon/myfile_icon_vcard.png mode change 100644 => 100755 res/images/icon/myfile_icon_video.png mode change 100644 => 100755 res/images/icon/myfile_icon_video_play.png mode change 100644 => 100755 res/images/icon/myfile_icon_word.png mode change 100644 => 100755 res/images/icon/myfile_icon_zip.png mode change 100644 => 100755 res/images/icon/myfile_search_category_all.png mode change 100644 => 100755 res/images/icon/myfile_search_category_doc.png mode change 100644 => 100755 res/images/icon/myfile_search_category_img.png mode change 100644 => 100755 res/images/icon/myfile_search_category_snd.png mode change 100644 => 100755 res/images/icon/myfile_search_category_video.png mode change 100644 => 100755 res/images/icon/myfile_title_icon_search.png mode change 100644 => 100755 res/images/icon_button_more.png mode change 100644 => 100755 res/images/icon_button_more_rotation.png mode change 100644 => 100755 res/images/my_files_sd_card.png diff --git a/include/data.h b/include/data.h index fb231be..92e15be 100755 --- a/include/data.h +++ b/include/data.h @@ -68,7 +68,7 @@ typedef struct path_item_data { int level; int expanded; -} path_item_data_s ; +} path_item_data_s; typedef struct item_data { int index; @@ -83,18 +83,18 @@ typedef struct item_data { const char *last_path; int is_home; - char *selected_folder_path; - Eina_List *child; - Eina_List *child_file_size; - char *parent_path; - int is_empty; int expanded; int level; + char *selected_folder_path; + char *parent_path; char *name; char *file_size; + Eina_List *child; + Eina_List *child_file_size; + fsNodeInfo *node; fsFileType type; diff --git a/include/util/file-util.h b/include/util/file-util.h index df1b252..6776a8a 100755 --- a/include/util/file-util.h +++ b/include/util/file-util.h @@ -25,6 +25,20 @@ #include #include +#include "util/fs-util.h" +#include "data.h" + +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_NAVILIST, + MYFILE_TYPE_ITEM_DATA, + MYFILE_TYPE_MAX +}; + const char* mf_file_get(const char path[]); char* mf_dir_get(const char path[]); int mf_file_exists(const char *path); @@ -42,4 +56,8 @@ int mf_file_cp(const char *src, const char *dst); int mf_file_mv(const char *src, const char *dst); int mf_remove(const char *filename); +void mf_util_free_eina_list_with_data(Eina_List **list, MYFILE_CONTENT_TYPE type); +void util_free_item_data_s(item_data_s *id); +void util_free_path_item_data_s(path_item_data_s *pid); + #endif /*__mf_FILE_UTIL_H__*/ diff --git a/res/edc/widget/gengrid.edc b/res/edc/widget/gengrid.edc index 9d7b02e..4a8bd35 100755 --- a/res/edc/widget/gengrid.edc +++ b/res/edc/widget/gengrid.edc @@ -37,293 +37,292 @@ group { name: "elm/gengrid/item/custom_1text/default"; { if(c_state!=DISABLED) run_program(PROGRAM:"do_disable"); + } + else + { + if(foc == 1) + { + if(c_state!=FOCUSED) + run_program(PROGRAM:"do_focus"); + } + else if(sel == 1) + { + if(c_state!=SELECTED) + run_program(PROGRAM:"do_select"); } else { - if(foc == 1) - { - if(c_state!=FOCUSED) - run_program(PROGRAM:"do_focus"); - } - else if(sel == 1) - { - if(c_state!=SELECTED) - run_program(PROGRAM:"do_select"); - } - else - { - if(c_state!=DEFAULT) - run_program(PROGRAM:"do_default"); - } + if(c_state!=DEFAULT) + run_program(PROGRAM:"do_default"); } } } - parts { - part { - name: "event"; type: RECT; - repeat_events: 1; - description { - state: "default" 0.0; - color: 0 0 0 0; - } + } + parts { + part { + name: "event"; type: RECT; + repeat_events: 1; + description { + state: "default" 0.0; + color: 0 0 0 0; } - part { - name: "base"; type: RECT; mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - color: 0 119 246 255; - visible: 0; - } - description { - state: "focused" 0.0; - inherit: "default" 0.0; - visible: 1; - } + } + part { + name: "base"; type: RECT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + color: 0 119 246 255; + visible: 0; } - part { name: "bg"; type: RECT; mouse_events: 0; - clip_to: "base"; - description { - state: "default" 0.0; - } + description { + state: "focused" 0.0; + inherit: "default" 0.0; + visible: 1; } - part { name: "pad.top"; type: SPACER; mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - min: 0 30; - max: 9999 30; - rel1.to: "bg"; - rel2.to: "bg"; - align: 0.5 0.0; - } + } + part { name: "bg"; type: RECT; mouse_events: 0; + clip_to: "base"; + description { + state: "default" 0.0; } - part { name: "pad.bottom"; type: SPACER; mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - min: 0 25; - max: 9999 25; - rel1.to: "bg"; - rel2.to: "bg"; - align: 0.5 1.0; - } + } + part { name: "pad.top"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 0 30; + max: 9999 30; + rel1.to: "bg"; + rel2.to: "bg"; + align: 0.5 0.0; } - part { name: "pad.left"; type: SPACER; mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - min: 20 0; - max: 20 9999; - rel1.to: "bg"; - rel2.to: "bg"; - align: 0.0 0.5; - } + } + part { name: "pad.bottom"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 0 25; + max: 9999 25; + rel1.to: "bg"; + rel2.to: "bg"; + align: 0.5 1.0; } - part { name: "pad.right"; type: SPACER; mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - min: 20 0; - max: 20 9999; - rel1.to: "bg"; - rel2.to: "bg"; - align: 1.0 0.5; - } + } + part { name: "pad.left"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 20 0; + max: 20 9999; + rel1.to: "bg"; + rel2.to: "bg"; + align: 0.0 0.5; } - part { name: "pad.middle"; type: SPACER; mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - min: 0 3; - max: 9999 3; - rel1.to_x: "pad.left"; - rel1.to_y: "elm.text"; - rel1.relative: 1.0 0.0; - rel2.to_x: "pad.right"; - rel2.to_y: "elm.text"; - rel2.relative: 0.0 0.0; - align: 0.5 1.0; - } + } + part { name: "pad.right"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 20 0; + max: 20 9999; + rel1.to: "bg"; + rel2.to: "bg"; + align: 1.0 0.5; } - part { name: "elm.swallow.end"; - clip_to: "disclip"; type: SWALLOW; - description { state: "default" 0.0; - fixed: 1 0; - align: 1.0 0.0; - aspect: 1.0 1.0; - aspect_preference: HORIZONTAL; - rel1.relative: 1.0 0.0; - rel2.relative: 1.0 1.0; - } + } + part { name: "pad.middle"; type: SPACER; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + min: 0 3; + max: 9999 3; + rel1.to_x: "pad.left"; + rel1.to_y: "elm.text"; + rel1.relative: 1.0 0.0; + rel2.to_x: "pad.right"; + rel2.to_y: "elm.text"; + rel2.relative: 0.0 0.0; + align: 0.5 1.0; } - part { name: "area_for_text"; type: RECT; mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - rel1.to_x: "pad.left"; - rel1.to_y: "pad.top"; - rel1.relative: 1.0 1.0; - rel2.to_x: "pad.right"; - rel2.to_y: "pad.bottom"; - rel2.relative: 0.0 0.0; - align: 0.5 0.5; - color: 255 255 255 0; - } + } + part { name: "elm.swallow.end"; + clip_to: "disclip"; type: SWALLOW; + description { state: "default" 0.0; + fixed: 1 0; + align: 1.0 0.0; + aspect: 1.0 1.0; + aspect_preference: HORIZONTAL; + rel1.relative: 1.0 0.0; + rel2.relative: 1.0 1.0; } - part { name: "elm.text"; type: TEXT; mouse_events: 0; - scale: 1; - description { state: "default" 0.0; - color: 51 51 51 255; - rel1.to: "area_for_text"; - rel2.to: "area_for_text"; - align: 0.5 0.0; - text { - font: FONT_TIZENSANS_LIGHT; - size: 23; - min: 0 1; - } - } - description { state: "focused" 0.0; - inherit: "default" 0.0; - color: 255 255 255 255; - } - description { state: "selected" 0.0; - inherit: "default" 0.0; - color: 51 51 51 255; - } - description { state: "disabled" 0.0; - inherit: "default" 0.0; - color: 51 51 51 255; + } + part { name: "area_for_text"; type: RECT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + rel1.to_x: "pad.left"; + rel1.to_y: "pad.top"; + rel1.relative: 1.0 1.0; + rel2.to_x: "pad.right"; + rel2.to_y: "pad.bottom"; + rel2.relative: 0.0 0.0; + align: 0.5 0.5; + color: 255 255 255 0; + } + } + part { name: "elm.text"; type: TEXT; mouse_events: 0; + scale: 1; + description { state: "default" 0.0; + color: 51 51 51 255; + rel1.to: "area_for_text"; + rel2.to: "area_for_text"; + align: 0.5 0.0; + text { + font: FONT_TIZENSANS_LIGHT; + size: 23; + min: 0 1; } } + description { state: "focused" 0.0; + inherit: "default" 0.0; + color: 255 255 255 255; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + color: 51 51 51 255; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + color: 51 51 51 255; + } + } - part { name: "disclip"; type: RECT; - description { state: "default" 0.0; - fixed: 1 1; - rel1.to: "base"; - rel2.to: "base"; - } - description { state: "focused" 0.0; - inherit: "default" 0.0; - } - description { state: "selected" 0.0; - inherit: "default" 0.0; - } - description { state: "disabled" 0.0; - inherit: "default" 0.0; - visible: 1; - } + part { name: "disclip"; type: RECT; + description { state: "default" 0.0; + fixed: 1 1; + rel1.to: "base"; + rel2.to: "base"; } - part { name: "event_blocker"; type: RECT; mouse_events: 1; - description { state: "default" 0.0; - fixed: 1 1; - color: 0 0 0 0; - visible: 0; - } - description { state: "focused" 0.0; - inherit: "default" 0.0; - } - description { state: "selected" 0.0; - i nherit: "default" 0.0; - } - description { state: "disabled" 0.0; - inherit: "default" 0.0; - visible: 1; - } + description { state: "focused" 0.0; + inherit: "default" 0.0; + } + description { state: "selected" 0.0; + inherit: "default" 0.0; + } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; } } - programs { - program { name: "go_focused"; - signal: "elm,state,focused"; source: "elm"; - script { - init_values(); - set_int(is_focused, 1); - set_states(); - } + part { name: "event_blocker"; type: RECT; mouse_events: 1; + description { state: "default" 0.0; + fixed: 1 1; + color: 0 0 0 0; + visible: 0; } - program { name: "go_unfocused"; - signal: "elm,state,unfocused"; source: "elm"; - script { - init_values(); - set_int(is_focused, 0); - set_states(); - } + description { state: "focused" 0.0; + inherit: "default" 0.0; } - program { - name: "focused_1"; - signal: "mouse,in"; - source: "event_blocker"; - action: STATE_SET "focused" 0.0; - target: "base"; - target: "elm.text"; - } - program { - name: "unfocused_1"; - signal: "mouse,out"; - source: "event_blocker"; - action: STATE_SET "default" 0.0; - target: "base"; - target: "elm.text"; - } - program { name: "go_active"; - signal: "elm,state,selected"; - source: "elm"; - script { - init_values(); - set_int(is_selected, 1); - set_states(); - } + description { state: "selected" 0.0; + inherit: "default" 0.0; } - program { name: "go_passive"; - signal: "elm,state,unselected"; - source: "elm"; - script { - init_values(); - set_int(is_selected, 0); - set_states(); - } + description { state: "disabled" 0.0; + inherit: "default" 0.0; + visible: 1; } - program { name: "go_disabled"; - signal: "elm,state,disabled"; - source: "elm"; - script { - init_values(); - set_int(is_enabled, 0); - set_states(); - } + } + } + programs { + program { name: "go_focused"; + signal: "elm,state,focused"; source: "elm"; + script { + init_values(); + set_int(is_focused, 1); + set_states(); } - program { name: "go_enabled"; - signal: "elm,state,enabled"; - source: "elm"; - script { - init_values(); - set_int(is_enabled, 1); - set_states(); - } + } + program { name: "go_unfocused"; + signal: "elm,state,unfocused"; source: "elm"; + script { + init_values(); + set_int(is_focused, 0); + set_states(); } - program { name: "do_default"; - action: STATE_SET "default" 0.0; - transition: LINEAR 0.1; - target: "base"; - target: "elm.text"; - target: "disclip"; - target: "event_blocker"; - } - program { name: "do_focus"; - action: STATE_SET "focused" 0.0; - target: "base"; - target: "elm.text"; - target: "disclip"; - target: "event_blocker"; - } - program { name: "do_select"; - action: STATE_SET "selected" 0.0; - target: "base"; - target: "elm.text"; - target: "disclip"; - target: "event_blocker"; - } - program { name: "do_disable"; - action: STATE_SET "disabled" 0.0; - target: "base"; - target: "elm.text"; - target: "disclip"; - target: "event_blocker"; + } + program { + name: "focused_1"; + signal: "mouse,in"; + source: "event_blocker"; + action: STATE_SET "focused" 0.0; + target: "base"; + target: "elm.text"; + } + program { + name: "unfocused_1"; + signal: "mouse,out"; + source: "event_blocker"; + action: STATE_SET "default" 0.0; + target: "base"; + target: "elm.text"; + } + program { name: "go_active"; + signal: "elm,state,selected"; + source: "elm"; + script { + init_values(); + set_int(is_selected, 1); + set_states(); + } + } + program { name: "go_passive"; + signal: "elm,state,unselected"; + source: "elm"; + script { + init_values(); + set_int(is_selected, 0); + set_states(); } } + program { name: "go_disabled"; + signal: "elm,state,disabled"; + source: "elm"; + script { + init_values(); + set_int(is_enabled, 0); + set_states(); + } + } + program { name: "go_enabled"; + signal: "elm,state,enabled"; + source: "elm"; + script { + init_values(); + set_int(is_enabled, 1); + set_states(); + } + } + program { name: "do_default"; + action: STATE_SET "default" 0.0; + transition: LINEAR 0.1; + target: "base"; + target: "elm.text"; + target: "disclip"; + target: "event_blocker"; + } + program { name: "do_focus"; + action: STATE_SET "focused" 0.0; + target: "base"; + target: "elm.text"; + target: "disclip"; + target: "event_blocker"; + } + program { name: "do_select"; + action: STATE_SET "selected" 0.0; + target: "base"; + target: "elm.text"; + target: "disclip"; + target: "event_blocker"; + } + program { name: "do_disable"; + action: STATE_SET "disabled" 0.0; + target: "base"; + target: "elm.text"; + target: "disclip"; + target: "event_blocker"; + } } } \ No newline at end of file diff --git a/res/images/U01_subdepth_folder_arrow.png b/res/images/U01_subdepth_folder_arrow.png old mode 100644 new mode 100755 index 9d01cecc75affbec160ba24880b848a5611038fd..50072fc4c0025a31009e3ab324f21468b99485d9 GIT binary patch delta 33 ncmeyz(ZtEq8Q|y6%O%Cdz`($}kxP<=k$18(iyn{+WYGlxdO!w6 delta 27 icmZqT{Kvu78Q|y6CB?KkEc$q delta 75 zcmV-R0JQ(c7P%G*iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a h5jItgoW|lKa720J>GuiW_a2i*3E-0_3Zs+D3VZQ99z_5E diff --git a/res/images/gengrid/00_check_bg_ef.png b/res/images/gengrid/00_check_bg_ef.png old mode 100644 new mode 100755 index 24192622fd32a1f93c7cafc30b72fb486ff4b42c..cb49cdddf80f3fc5307c4f3609c71ffd139afe06 GIT binary patch delta 117 zcmX>oc210^Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLV|I7^CtGE*x Ty2C|)W;1xY`njxgN@xNA0RAK+ delta 99 zcmV-p0G$8M7Qq$@iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a z5jItgoW|lKa720J>GuiW_a2i*3E;CQ3Jd`n009600|1Mv3t<3@R}=sM002ovPDHLk FV1oGmBcK2P diff --git a/res/images/gengrid/00_check_bg_line.png b/res/images/gengrid/00_check_bg_line.png old mode 100644 new mode 100755 index ed2b8d71511d14b8eab18a0e489ff38b7f7cafbe..6cf7c074f73aba9ecc86207bdcace817565e7112 GIT binary patch delta 94 zcmX>sc0r7%Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp vw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E-0_3b2#d3V8Qv9&i8v diff --git a/res/images/gengrid/00_check_focus.png b/res/images/gengrid/00_check_focus.png old mode 100644 new mode 100755 index 634fa91d718814ebaab10af957ff713a27b70a1f..7f51d0fdcf562d16a97443289fa8b0a7b810c995 GIT binary patch delta 33 ncmdnSv5SMJGr-TCmrII^fq{W{BiBx5M&8MXnL~l31dAL1hC~NZ delta 27 jcmdnRv5kYPGr-TCONxtufng)hPUgwSm_sMau*d-bXI=*) diff --git a/res/images/gengrid/00_focus_01.#.png b/res/images/gengrid/00_focus_01.#.png old mode 100644 new mode 100755 index 63beaf6b6d8bbe60fe8e299bdfa6b5184c20147c..e9a12061629738c9d206f2db6062955e1c33117e GIT binary patch delta 115 zcmZ1^wn0p>Gr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+C}+sR$UE7erJ0d;^Cgx@ zMj)llwg5;?KFxlgmG|bYExeQ0a@2_Mn(>DA&N=o-xxl6J$;??i_?jJ%s=7}Xhplrz&=W=7u00&L>Uyu7@V s)!AgZc%{uwv^psQm2dW8JHP}~#KZXxr1lrrdJwge=LC?NT*#LO032Bs;s5{u delta 92 zcmV-i0Hgor9oHQSiBL{Q3K|Lk005B;HjzWzvmgN{0kcQ~%>x&enVGp>EEY?FMJ{A3 yh_`g<(gZ(0zXg*p1|0|+HpqoSApiigR|dcWvlt2P0ka1SuK}~S49EeKfDUG193El- diff --git a/res/images/icon/00_nocontents_devices.png b/res/images/icon/00_nocontents_devices.png old mode 100644 new mode 100755 index 2e6c47d41f7490ca2a525b96f612352e12093861..4be21c5d6ce571b3bd8edbb95801d3a1d053fefd GIT binary patch delta 580 zcmZo%z<7B9BTr|5pF1y?6c+;n1MfyIHx@?T$pI|QjJ%sKvqUliDIK;2Kx*oxF~tMugXlH?()ou}8`UE|pJSe&@XZU55 zLV0I9_SQeuYuddc??igS3 z4upZh5pNnGXptd%346uLD?2a)+#>*N+hZL0I7{qQv;F>Y8pUtg_ut^tkMyv&M?k(+ncGDqF_iO+xW z@J`-p9R?KUws{KD{=qhhk#}*B9mujE$3`G|*|8Hy#yEun6>W5?0~x6A`VPlP3zRv(pO20h5^w%Clq*3<8sJ4;Pb(4_LF} z4|xHzToHi*v)&R+0h22f9SMNl9wIN)@jGv-%cl0T3-Jn+se` z7x3`dBEEEX3Yn937@(6E8SRq=8Y#0c8ixUsw;QgLW*jz?ogDF#j~!UE=p9o5lRO_J zlVKmkvnC)H1Cu@@DwAm=J(H&+<+F_>_yLoKCMJ`uCMc8ECOMN3Cq$D~CxNrqCz%10 zaVa^It0{T2B`R?Plb0>;vxhEj0tZ@o#U~bLwv+xagtLP&r2&&EGj)@nGbgjhGamx8 z=QSn)vko`b1GD8i1_240ra>+5Vdwe`llD7SvrRnZ0h2R6VxyKm1Cy6Qfs+|RiIby3 zRkQg*egd<2MdbpMUPvL6fJl6^{YX^;vr|hT0kd>WX91JkO&F8)O`nsMPT!MtPu{X3 Br$qn& diff --git a/res/images/icon/00_nocontents_multimedia.png b/res/images/icon/00_nocontents_multimedia.png old mode 100644 new mode 100755 index eaa8cec17a30905fab3cc8c3fcd2a5d748aba60f..d8393ddf489aa93b3b34124408a39b3129b49ca0 GIT binary patch delta 1538 zcmZ{jX;71A5XT9L2gK#@B0&XB&d!dGI)=+6B*e(JNl5IJeJH`5yaBk4`0d%SR7zwt)Im2lR z#qB)U)~8ONwc+NSrw-SjdXO-~p$CDZ9KQiiJ1zu0 z+P%4XM_Tiafx5&W0~15HdD?p2-JhrboA5u80sX!1|A`dchXio9(Zo#)R;OYZTIXOk z*0_8srI#c;a2W&3$#pHb)pZis;M#_;^+V%$>hmMJL91IH=&M)>mMID#E0r!%7!yWo zV9Xz#XOH8e#~k)~sE!Szu4~T|@BZHSw5}`3W^CAZ!I^{`szL;yKnC&u6BE{=F} z;YmIp!?nl9htq%XTL8Lh-U4-+k04ZO^c;KJ-zcM(i%6V3aXPoQ<()n-WwJMDo?HX^ zX%~U{+CTW7fT?`Xmw{%^^`FYEmrq5MIBnWJc6kS-f;)qFaLJ5w5YEr&!5G4~!L=|J z=oAtc8n4`ZgUKBWcwzWRX ze&y7dKtj#T&j-`xC&pb_X(WWbe;Y;pL;bjD=+C(NkXINt;1&KZm>gaL;ji$;?3$}j z2V3<^;8M-WWmi>%3OpH63K}AL%14ozU}}^XSR91~33sE~ksquYr=d>oPiYgT%f#Emk6qh&S+N zQWHX9)Fo`@n!bq-2az?SNN*uwY*Ln#B1x!7S`Wq9$d4k(C`ugY;z|l%bi9|uhl?$o zm6QAvw2+i$7-IjDDn2Tfy0BzjHUaEdwuY#@D77+LvoSovr|>Q3zi&ag z4U|>zuVbqC458A!HkOa>$2$-n?e~&W9|`UUF5^uK7k}#&)jM86K-{dYVHKWE*R^791 z$xX|X4(Zj*I$hJR0pl+GcBLS=RekC#iLEuod{gA%elXOEzeo7xHIu)ta-uWIc5iFf w2H6dJ(i1_#klJyOC)Vx*+iDGV3erdQ2=ns=p=q2Lmb!lK=n! delta 1141 zcmaKmX;9R49EbV+cSQwMRslH-VOK!e&~P~l2{m+C4naT^S=ay_kwaRJ0YoL%0~V3X z4{{6y2<8S7ieImp#1a^DS~JOEC$B;_NNe~5Ja?TnoD8yJ3^J-~a=djXf`>=(F&71iDt7AZIEeKIyRcVNmI z(z%0hFlfb32HWtip{ted&R~AxmAu5=&%0bByIftShb-HMEG=IvbxPzKn*YmNogPC| z?mu<)Tc&bm3Rm*<*Z!|So<=T=Qs!-E(9Shu90 z-Oj_%thUGP)s0Az$nm}8DP3}LXY|Zf&5-GyfMNGWI`aNAhIEfOJoHFM@S0m>?K#Nd zZ?9%*UTeDW#LiF&szUd}bc-A*TkKJ_r5~AL16m0umAtmuN7N3q@X zZR{0BxjX9_+3YfAaE@C6d0dKNMPXcBpg3FVuU6qfoS0_qHes-gZ@^da9yA%hl!IB) zDBdLfhVeb&v(H?0yl5_Zj7`b0IG1b>U2+-XKRHdtN-c+nspn9X7KLBaY{)2GpTnYz zY%0#^XS65Fki*_=g44bu^S-f=JvtbmyV-Ep^kx#S?-S9;KE`46Ko&*k+~vqc)xpv4 zhqMgWj_iOi?<95SMKai`*CIwOM~7O17wQqx6<9F5IO+$_!WGz67=%lO68fdElhKz& zyBW+%9^z$56oN|&&{rBuUS(Dc5y#h=Y9kCqe4+95uEQJdn#+>Q7ZwZaYSDiD0Ifni zLv{HI>MCE(VZ34`tSZ~^U1b7Xt4@%%s*OW-jW@2<*s)>!T+`RoS<6FL{branoVQP% z-TSIz+PgWX%{0|5*hh7&+Dx&{@1onCG1mzT-*D^E55zHUzQ`X5R3{g#1*xO`9 zCz_7&Ak<95>WdPbnPE+Hz0u7Wy;YKQ54}Z`gMN70Yzu>yYMg2b!BopxXwGC}X=@Br Otqy2zT}k&_N7z4Ot_<=3 diff --git a/res/images/icon/00_nocontents_picture.png b/res/images/icon/00_nocontents_picture.png old mode 100644 new mode 100755 index 2164256f1bf4967df20af94cd8b00acd9f211487..2a89eda0c3b8d41a54c2354a6aeb0b7479766669 GIT binary patch delta 655 zcmex6oAL4-MxM?9KX+a(DJ}*E2HuTaZY+$vlLJ_q8F@EfW{G43QaWr4fYjtO?DtuD zZ{FI%J9!;PjR>z9Z)oqFV~>;zTq>Wu{LXp*yBzOiYt9Eih0=7S=hh z(x7z(2l0ake3ivrRH zbinQ+-pRVg_CQTJ#wI{=f$@5vR)3RxkkR|hi}`rpWInF26#B5jz(nL7?_^txi9m^S z7EVA_0+v@m0r12+0Z6*o~cNUpVgFTv}O^!l%5AA7ce+y2cu z9yu@d1nyp&{g`+1CObQzk`H$Cfn>k^N1&Mv4z?hF>~*{XPlP3zmv*-$F0+Ue<){`g>Et6IbER%x{kCPJ* zytB{`D*}`J5qpz(5+jqG5*(Ac61%f@6F32ruM{k^+!PH0lj;^_lTa75lLZ))lbIO& zvz8gf0h3%CS(COKGz}lh8ITG-wFf>V3UPBZIkmnFBDC->=gF$u=GXFuc${3 z{C-f=7A2E7J-L(eJ?|DkV(a}mjt6TnM!&NxNNnjY5Z%_B@w3W6 zJpq#lLe#U}LVp3XT|{gFlgdSH7#;cjbC+i(hG!{KrK_2VVb_u0KX=*hp0iO#>;khs tNoWBT_{s2-z9Z)oqFV~>;zTq>Wu{LXp*yBzOiYt9Eih0LiN6;H&@phr3 zKu(SDIuJ)oG?JgU{6^ZNUrQqH_BrtZ-86ZEXf;rVTkHssJTEp6s5n=A1;}zysRKar zsuWQFKgyk`++X=94P?AiX!#)&n{1>XShnDXm5zIa>?lf%95TK#4%@tsvL3 z>7ECYS9LSkcr7c|xAJaw)RPB_Z%)t;X5{5vuB+Z+M!My+g delta 458 zcmV;*0X6>gy#bfK0SbvwPDctF3IG5Au?$88lT!qPv)2S!0kbg%paGN82j2tP+O(6l z2z(JXRgIj+;v;ZGdF1K$3E%e~lST>PlP3!QvnLA#0+TEak(0g+GL!KQUXxG`6_aKT zeUs!4rjv^g`jdtbG?Tj!J(KwminD|fO97M662-HY6RrW1MHN{Mci3j)`lMLhjzSLK z1(U56dy^>^#FOq8p0kY?r~;EV8o-nH8pV^n8=#Y395%C+9IXPALmzIFvLC0DS|GR& zvAmSUbJh+bpK-AB=oogBBO&>d9U`5xyCOOQv-Ttp0+R+Oud}u%lLC`UDuI*CDm0S; zD}u9xE42ZWIxWwW3NB~_Ie4#yvv@8a0kfDdQvnO7EhmILNhu|QHB7VkFl+;}Wi)*S zljAwClaxA1li)gqvt~P(0ki)+V*;~dKfMDIHyjWdqgH0<+l92_iMs$maKn={Lo$H(8iP)U=aQ0udeQAPoi)KVvt{8FT|p;N{IlW0}i zvqM%J0h3=>P_wXC8UeG*SY!c{Fk02K23rsTvlm=L0RhmHU0p)~(37KGtdme)q#t9y Af&c&j diff --git a/res/images/icon/T01_2_button_expand_cancel.png b/res/images/icon/T01_2_button_expand_cancel.png old mode 100644 new mode 100755 index 869620d0d664a3a34c11c686455dce10b054be61..7dfcde3ba45daaceec2087b515730468710078c0 GIT binary patch delta 102 zcmZ1|yIz*3Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E;CQ3M&JXQw<}tcMUiJmzN%L diff --git a/res/images/icon/my_files_folder_favorite.png b/res/images/icon/my_files_folder_favorite.png old mode 100644 new mode 100755 index 6a141514219cbef9aa88fc35d898131854a48626..05377739030751cad5de531fe9140cccbe366538 GIT binary patch delta 89 zcmew$`A3qcGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp rw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E;CQ3e^I)z8xt5 diff --git a/res/images/icon/my_files_sd_card.png b/res/images/icon/my_files_sd_card.png old mode 100644 new mode 100755 index a70873dd9d71eb3fd611ae14a2ff4e2f8e11d974..f768b7456fe234d0be0266444433a9f0aad2e339 GIT binary patch delta 100 zcmdlYen_0BGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVhU7qk}&iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a l5jItgoW|lKa720J>GuiW_a2i*3E-0_3f7bU3TTsO3tMjgAMpSH diff --git a/res/images/icon/myfile_controlbar_cion_home.png b/res/images/icon/myfile_controlbar_cion_home.png old mode 100644 new mode 100755 index 614b5f4cd1e27638f881549f8c413f43dbcf1a13..df0622f911872ac87fe291a09dda0595c7639ea6 GIT binary patch delta 58 zcmV-A0LA~Z3AYIhiBL{Q4GJ0x0000Du?o2Z0S%MG10)&^CboSqkpz@VDUmZCB6Adh Q>;gh>!Yv8C4U_)^v%5?YKmY&$ delta 52 zcmV-40L%Zk39<0zz-X KEeXAo1O&5--Vg-< diff --git a/res/images/icon/myfile_controlbar_cion_up_folder.png b/res/images/icon/myfile_controlbar_cion_up_folder.png old mode 100644 new mode 100755 index 251ba9e3c220431960e5ac6d7fa5d7e914b1827f..c49cfdef9fecbadd3de6dc43b772925246d328a0 GIT binary patch delta 21 ccmZ3=xtx=yGr-TCmrII^fq{W{BiC#e05}N*djJ3c delta 19 acmZ3^xs;QuGr-TCONxtufng)hY!(19I0Rt; diff --git a/res/images/icon/myfile_icon_amr.png b/res/images/icon/myfile_icon_amr.png old mode 100644 new mode 100755 index 13cc3d24e552cab658ca507311de2c34d7388e73..ddb88311df8c04dc81d7413029bb3773e46b0538 GIT binary patch delta 58 zcmbOvI!lzNGr-TCmrII^fq{W{BNrbFBkyDhmQ_IV5X)O2xt>)FNFHU4WaQl}$M&8X J$l>K`1ptN&4deg- delta 63 zcmV-F0Kos66_OPSiBL{Q3K|Lk006NJ4g`}M1gew91nm~6U$g)$ly^jf(9=va_fn+D Vb2B0W36skOS+gYu?*o$+3Wb056|MjP diff --git a/res/images/icon/myfile_icon_default_albumart.jpg b/res/images/icon/myfile_icon_default_albumart.jpg old mode 100644 new mode 100755 index 7f49414637f7c8253d06eeaa08e96936bed542df..8dfea27734e5465e679248f6bc6ce712e5b8cc09 GIT binary patch delta 2717 zcmX9=c|6wX7VkXDtMatSNEankv=ADk5L$#{tc|o!qOyciXs2sU`We4Z)Lf;;wa1HJ zGlj}%OuCh*d#|k39n%Pj_DuJjw|~y}^F8}H&+~iUH@kf7=ZdkH6J@}KMA>xU@;uo? zh7dbW9S}~9Zyb%Ve$rx6W~jBHQV3J`MpCc-P#GahYX#{#wcC+g(^-k`0@Eu+S*BNw zst|oOQXQF-hH|1|s4|~cytI}J#|%4BvBjt#eca|IP_ci{JBw9>2;)H{-sE-qHeFUAxD{u2}%o>1t_<<;5>2%*D6KVYjshj>2?w2HMdxlR_>N)4t1Zb zSccbTBwb#AP|60M+A#=!_n$^AXG7n3bWaV^Mv@;?OVt8*4-oiZ@=r(Y$-(A$DLK4| zTZzOhK5w)dfBUgQJ2I7uR4)I|m8%paTsw|Zqng@?scr{V zo>up=*SS;oapOxaY^|l6m05cotv=Tm(@1GIwxE1@gO;)AW-6-WH|nxzr1iI|$YFBB z5+tq-Ry1wg9r|?So9`;tk#=uC64`wV(%Cfa<_P&6Ur|&|X8;m|E;?i(qZ`{1-go0Q zlN&zK8Hcdq#Vo3^v%i@pwt3Y_O#Af(Vm0q5g}nK_J1O-)?V=nfNANDnOGajsspYTd zz_~@6VQZ3qzYwuGlUFvtBeaM=Fhnj!DnScy$!Rp~P*Ug9Or2`$PJGyQ*0{tSMQHhi0rMjhz67m`5_52w$UK3{ZnOq<^ZxLsHkO!%@8E(z3sS zG4T*BNTKi#(;=D4$LqpYq&>Po%awHXU>)IpeW+1XnFD?pE}ohXjtI^3VJ5=xe8BBX zRtw-L<@m`MjF3Jt26{)NL#A+$@S`~d<4Yw4T7xg;tX%^6GevWqmvArfYvIdt%fCt;%#RbMyPRtZK$2;3T}AZVwgK< zB293IkCgPdmm+CivNup{vJcSbBBuK)V&m7rCDhLS7IMk?U;bbEG}s8CI&d zIL|nqe8AyISwn#ymtJiHdu&lO4}c1^_XL0{bvzUZdW2u?0&UuvX&6jJa0-JYga=_T zf^csS#G{W_IJ~FaYa$iXNC|u44#jxIKpCpX#6qf)2H&wmx!tnz>9fzHUTq(FT$0c@ z*cQd59}j~zO>y%G6d>$A3i!cG%E!L!?LZt9U?xdF2_{gJrYTU1^koWoP>{n(#VtB} z5~kqHVre>ULdrc2&A2{kp9qU+gn~10j#jej9H^3;XO3c1?{dJH%(HX9TqduJK<}S; z`V!Qk+WSW+qAXAdlW4ffMPNqgSPUl#n@V6Gg|906ayPZ*u!gDxRbfw|R zt;x5x2EP7YqjU$qn}7b@i6J*}T}4&oH(dOD1#~od+&QDJO_izNHr;%>P&3wRq4&;P zYwnhC$?PYXK_$Mq3cCrbs}(0M)zyFz@fX)&3!=ED4n85Q{sml7`~5GljI0lDK`uT( zw~~!JbLNE3i5f7GZQ`c?xi51yTVd;aI( z*5`g7{~O7rR3$c+QfH24VHjxXp=wJZZQfC2?_v3fqn5WEGZ8=Go&J zo|B}f%INq+mkA8tcIm_fCeqigGle~$$lpx$@okNJ6W-=uuaV8ADeCMlHPx-bekc5O z8Y?E}$mtA!k|gEIZHsB?+T`P*5^90sZ_{*HA^Ra;LH@?uYoJWpL)^9l|4hP^%_=2 z*50)&hA_aLWg%vIut4g@gSjC{9t{6CimIMWLYF#EMlZam<;_kZ6ne8csD0qg94LXh IFO#wV0|oeX-~a#s delta 1997 zcmWkudtA@=8b9yn`|U#Ri6|#xE>V%BNU0R-vT{giWsP-m$w4HeMJ9*R!UvxtW+GYX z{;3|;soZjzOU&XmmC}skAa`RL`}y~|yx!0Ae!rjReR-!nWt~bkn}{@%zpFfx22yJ~ z_lDYGc0pIsJ={oT^=g7h>>a8u^=>d$2d#V|?prsjvjhBe(apA4)Yw+5q`|#(kvS|= z*bHBy_bYU-6+4Evh!rE+)jYdRP!C7$C9&DzsaoT>gG3J}cM;^&U(9!^6Aoj&#j>%^ zB6qBdXdZi5q&mM;YsSroxZ{$jBFCFRec^hM)R>7!Ae!B))b2^oHIdt|ImO)Jd8c7vLyj0_=qdXi>`pD@oV|4-^5xIpRrhl2{xvUL6YQsSBPN ztt>%1BQtS+fwj83pq5l_++$L^mQ+9mE?Wv!9iK>ITtdA1KEVU( z-pW8tIIoUW+g6Wk@(dfWu81%S5wz}L2drJ7{V>pPpwNmtoQi+?S;O# z23;>+d)1-BZ1>`9;g;4U`lNp*R;Eu;Rq1|El#!>Yg0037YMYa|yUk4u+@7VXwmU*R z5EI1E9b1&z(V?r7-A718?oHCgFZ*MZXLf}yULJ~4Gja`)EBW`t(IeraXTfB%@1L)A zv@2g-x!TfQ%qdu)&K1nklugMfO$4ef;ujSuT*^Jg%JPNkc6pfIt@)OU&$^dhWbH$y z(8peq3ET?gn9U@^i7^B}Ii{;U~I10E9>8#I3$pIamUYipEW_>s-TRrs-dLuPZ&5Z_Bk`z>6eeQO=dI=t6vI0c?ryE`qgD-+eiE zUf3SGR*`jeQe2hCndNhye>%IdvQAnpLz>K8hCgLaJW| z$}LIA(0a$l8aI!x`1Q{Fzdeijv$1H?g{Mu4ynY?5A-_vOzVu&@EdFi%2LfiNBHxJh zbaW$Wo`G7vmVtjj4$U+OnUV=}P43)|7n~+=P3JlPfitnl!nYca*@rHg^vE`>eJ2|Z z#O664)bu_C56F~UoMPX@DA4)Y5%d6Sg>VA96yY0iT`^V?yO(`1La%ZJX&lXnfUG)- zLb>1=R$I)yIsfI(KE<(@^Ri!Wd>$;r%PUt*mv4_@K%WiYj%fX?B4hT|lfRC(Oqw}5 zbm5tx%SAl;2iOpY{1k~L|?Gv~X zzkY^C;JYs{!-OYvz?9hM9oA4qE#1=OKAo)i2c0@Wo;IQ~PBbQ0k|m}jO($*quI=0b zPLtC+Q5@HFqCF%dx=;s)b)^v`Q@YbcuI^4!m!ZAse%DuhXNBF|@G8D3vaZh_4zi%j z#MYK{msqo+LS2^HkS9O2A;S$P4<-kV3x`sfCZp|W1vl8yRPcaNG*#!A(exNH)QP_2 zdM8>4p5RO`H0kJSKpy2rsU*uL8girD$y?(kp0pj3yl5mlcu_KOp%0yeTpfEkvDi%IGNC2z}Z2> diff --git a/res/images/icon/myfile_icon_email.png b/res/images/icon/myfile_icon_email.png old mode 100644 new mode 100755 index 4a18fd9ce514274e82ac3955233329d7e90ec61c..c923d38781d33d9a81948ce2a3706943343b89ee GIT binary patch delta 66 zcmeAZoFT~58Q|y6%O%Cdz`($}k?S=xBk$&~%&!=M)O}VhAT^nj-IIxzcXAMWK9F;e PT@6S+XSV^8${g7M9u5#H delta 49 zcmV-10M7rI5sncGiBL{Q3K|Lk006NJ>jSg+1L^^@;{_@KlMV+-lUWCElgS4rlkf*T HlPw5qcB>E0 diff --git a/res/images/icon/myfile_icon_etc.png b/res/images/icon/myfile_icon_etc.png old mode 100644 new mode 100755 index 95980adb5bbac4cafa83c757ae431c85de5b11d0..088cf2df1e90c95af811b7239f62b9aaadcfb073 GIT binary patch delta 81 zcmcb`{g9idGr-TCmrII^fq{W{BbOeF1aGF&t=UG=mUprr ji!~$fAtfvJnzII>e1FC26boFyt=akR{07E(#umAu6 diff --git a/res/images/icon/myfile_icon_excel.png b/res/images/icon/myfile_icon_excel.png old mode 100644 new mode 100755 index 47cba42bcba1f03f87f585473ccb32300d5c7ffe..929d14f4df4f290a6e28b1af1a654ef2bb5b8a58 GIT binary patch delta 164 zcmaE*(5T4M8Q|y6%O%Cdz`($}k;{#Rk#}+cOEV+y=F2RRj6h0pW1`E3P7tt{9#;Ai0Z2 z1xViGQ3gsd@+L9?IZ6EK(!9K@9|m^?oszwq7Mi!pC_U)l;@f8u=Lfa$@=kuhuM1Sg HD-a6+TOT#9 delta 109 zcmV-z0FwWKA?hFsiBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a z5jItgoW|lKa720J>GuiW_a2i*3E-0_3eU6m3UUFHY7AbJ$qXcu?hGTd5)EMjlXMSf Plid#&llBiSlOzyb*V-zI diff --git a/res/images/icon/myfile_icon_folder.png b/res/images/icon/myfile_icon_folder.png old mode 100644 new mode 100755 index 112d4c4fb8451869e65a526c85816fe74c74ce8c..e71a8b700d1d132ea3ca23edbdff38dea128056a GIT binary patch delta 96 zcmew@(ILsx8Q|y6%O%Cdz`($}k;{#Rk#}+cOEV+y=F2RRj6h0GuiW_a2i*3E;CQ3Oxa{WeXz#D)Jp| diff --git a/res/images/icon/myfile_icon_folder_sdcard.png b/res/images/icon/myfile_icon_folder_sdcard.png old mode 100644 new mode 100755 index 11ccd7017f9b2492467bfb22b0bb952cfe9e7805..b1dcf7ac998b5f88263afbba8b2ec7da10f91dee GIT binary patch delta 28 jcmcb_ca@K)Gr-TCmrII^fq{W{BiBty*3 diff --git a/res/images/icon/myfile_icon_html.png b/res/images/icon/myfile_icon_html.png old mode 100644 new mode 100755 index 425f0f9cf16b04b92a5fc1acf816d503f1a5d1c6..d893a80b9ba6164ab3b21d6c76addf02feacfea6 GIT binary patch delta 38 tcmew;{!N^xGr-TCmrII^fq{W{BNrPRBkyJbwk#GFUeyxb%{5%5i~z9&2uc6| delta 32 ncmew+{!yH(Gr-TCONxtufng&L8{1}Kwk#GV)soGPT&0Wvka7qP diff --git a/res/images/icon/myfile_icon_hwp.png b/res/images/icon/myfile_icon_hwp.png old mode 100644 new mode 100755 index b32fc7f2afe38e213678fc478b0efb515696dc55..a17f6e133e530e43621059829a109517a96ff1e8 GIT binary patch delta 72 zcmZn=?H1+f4DfU3<&xrJU|`_g$d$yx$U8ZQ= delta 55 zcmV-70LcG~6@V2AiBL{Q3K|Lk006NJVg!?K1k|%c1w#S_L;Th~(36e_TeIp1JOPs^ N30sqd32~G536;pg5_|vv diff --git a/res/images/icon/myfile_icon_images.png b/res/images/icon/myfile_icon_images.png old mode 100644 new mode 100755 index 7e932e824d9256a2599893f1880f2119d30f7d01..d9133d6c4f3a3864b40ec45e7067d867a1a8677c GIT binary patch delta 142 zcmaDL_eqYYGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E-0_3b>Qt3W1Yi3oDb33%Qd>3{A6^48{T#0GVW` Umf)b@=>Px#07*qoM6N<$g6=yl!TVH=K+=LeN``l7#5JCTW&7vxGo7!> eE@$8LysHSAK%Ky}BsUIGBA7$}JV delta 86 zcmV-c0IC1I7q1rziBL{Q3K|Lk005B;Ar){GWtzu-O$O^7b}%y(R88b#Cth5!MAZVb s8Uwrmlh*`5lNbf0lf4DMlYItLlhFoolS2nulb#0}v$+Qv1C!JW>9f8b6aWAK diff --git a/res/images/icon/myfile_icon_music.png b/res/images/icon/myfile_icon_music.png old mode 100644 new mode 100755 index 39f59f8d8e01e53eade58369eda4fdcc4d9ae579..d4988b08f70279e84990a29cffd74cda4cfb4c83 GIT binary patch delta 109 zcmdlWzh9oGGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVlp#~ry`sH delta 86 zcmV-c0IC1KAFv+^iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a s5jItgoW|lKa720J>GuiW_a2i*3E;CQ3cdl8<_oj4nhbRTvk(ri0a`;MCjbBd diff --git a/res/images/icon/myfile_icon_pdf.png b/res/images/icon/myfile_icon_pdf.png old mode 100644 new mode 100755 index d8bc6eeda458ee682d30697c554dcce1802acba5..f937fcf9fa006f7b1a70c8f3a11cacd856aa1097 GIT binary patch delta 109 zcmbQQv`&eqGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E;CQ3aSFL(hNZXvlI?I0+Ue?-9ug>C;$Ke diff --git a/res/images/icon/myfile_icon_ppt.png b/res/images/icon/myfile_icon_ppt.png old mode 100644 new mode 100755 index 7c72b2d67c89bfe5fb5735c894eea713443aab76..76e3dd4c06dc6b6a15c1778f37695385d2ba4a80 GIT binary patch delta 126 zcmdlcdqS3{Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E-0_3e}VS3T=~X3+uC23?>1Sehn|Pt_=hM6#%cp V3kyYImi7Pu002ovPDHLkV1mz0D_Q^m diff --git a/res/images/icon/myfile_icon_root_folder_device_memory.png b/res/images/icon/myfile_icon_root_folder_device_memory.png old mode 100644 new mode 100755 index 230baa0a10b2524c238751b43333621f6fb122a1..fcfd79d0f35caba1beef1866524e1078166cc272 GIT binary patch delta 124 zcmcaC_E3zcGr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLVw}^>>;s1YT ZhTZ%1a+vPSp9Hjm!PC{xWt~$(697;gD6{|o delta 104 zcmV-u0GI#a7Sk3AiBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a z5jItgoW|lKa720J>GuiW_a2i*3E-0_3bm8n3TGU00ssL2{{sNKzb|>K7=fHBHWeT_k4+g!9%Oq3 zBv-RXi}Ggcw1ht86)9y}G<&|oTXFAz?caGPOK@BP%D>^z29n~OmOw)SICVgV)NrW- I$;DjF0OkcBlK=n! delta 88 zcmV-e0H^=97N!;oiBL{Q3K|Lk006NJf&`O~1iZ6M1u_AXe+DFzqy{6C$Oh_@vjxA&7H2-K7K2rH8$2|2S~2`mAViwY-`vkHS5zaJ+6 diff --git a/res/images/icon/myfile_icon_select_all.png b/res/images/icon/myfile_icon_select_all.png old mode 100644 new mode 100755 index 9723dd4ec761b40be99a5641314ef9f451e67238..0c531fcda666b3446ee7fded5dfbdaa6c83b21ba GIT binary patch delta 96 zcmdlgbx4Y*Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp ww(w3~$5A7~YsMSeJLlLVGuiW_a2i*3E;CQ3XuV`xeJK_Eh-*z diff --git a/res/images/icon/myfile_icon_snb.png b/res/images/icon/myfile_icon_snb.png old mode 100644 new mode 100755 index b4b1e9e17024ed263a2d357e7689edb3861655f3..5903558b0ae1505ece37a67aee93cd99e8b88664 GIT binary patch delta 84 zcmcaAcu$b0Gr-TCmrII^fq{W{BbNXxBkyD>RwYK>%{Ht|j6jYZTbnfR*7fG=%I_TL mojvzQNxY)n|3xe>Gox&_Xf*RqzRR`(sH&CyCy=b;2nPV%k{aj$ delta 70 zcmV-M0J;C(5!De2iBL{Q3K|Lk006NJ5CxMR1tPOR1p)z+Lk5N!wXZj>cig~@o1OS{ cUm-sKq6Fz_T0FEUgOlV2sFRHc`ICnTS16ha6y2lGr-TCmrII^fq{W{B3C^l@5at}Mn>MrFBofpWC~LokbK3o4@jHHGXS-05JUg~ delta 43 zcmV+`0M!4`5XcY;iBL{Q3K|Lk005B;f3b{T0h8h#CJ#NnYb0!xsM|7cjy~_?wOrjmX$$Up0AS@B%K!iX delta 75 zcmV-R0JQ(X7q=G*iBL{Q3K|Lk006NJpaiq61fBs2Y^07)ocjVFce7Ro=K`}n2?YU@ hL<(LKD|y==FErsu_b6bo7=E;#oG+8M3X79M3xAz=8fgFk diff --git a/res/images/icon/myfile_icon_svg.png b/res/images/icon/myfile_icon_svg.png old mode 100644 new mode 100755 index ba2253fdac3bce8a526a57681cf3e2a58ec916a4..12eb18d9cd8b842e34f19cacb1cd4317e2548618 GIT binary patch delta 78 zcmZ21wpNU%Gr-TCmrII^fq{W{BbOR0BkyJdR%=E^-pSc)xj@bhHbD^QCHn>-Ig{fJ dAMf_Svql*kZ8>go98~6=JdyJVP$HD;902e176$+T delta 62 zcmV-E0KxyQ7NZsliBL{Q3K|Lk006NJCIz!I1v>$gZw76%-3Ac>lkW$xlb{If47X9u UGH9_q2-yh1Ba@m5#FJkN&P|FHsQ>@~ diff --git a/res/images/icon/myfile_icon_swf.png b/res/images/icon/myfile_icon_swf.png old mode 100644 new mode 100755 index 26fc41975a12b755aefbf0ddfc6f1e2ccb12eea4..6bc8a79b23b71c475eb724775c93678cb4944160 GIT binary patch delta 40 ucmX>vctwz>Gr-TCmrII^fq{W{BUc_PBk$x2R(D3;&HGvRG66X?9Kis|^$FJi delta 32 ocmca2cwUgJGr-TCONxtufng(09_!?4R`<<^S@$wcZsZ6C0GVV7p8x;= diff --git a/res/images/icon/myfile_icon_task.png b/res/images/icon/myfile_icon_task.png old mode 100644 new mode 100755 index 6554dc8a81da6f39e5f037924db8de9475047651..8fa293819e8f0ea66b2d0b216dd0e31a1eb2077c GIT binary patch delta 100 zcmV-q0Gt2s5cv=ciBL{Q4GJ0x0000Du?kxS0S%L71!n;bv&;o<0UHgtwY1TQVn#I6 zquSAq4LJLCE6#m)IOLa94U*ZN3VuehagMy4U>ik*%1vlGzhBz0000vD4Sgp ZD73kSV>gJh=K}F2M{utNa#(qU83F&F5@rAZ delta 60 zcmV-C0K@;I8kiaiiBL{Q3K|Lk006NJwFHyG1YENp1#tnBkp@?j=>~|iat9d!vy2G4 S0kcR783B`G3$3#d3=;t*6cP;p diff --git a/res/images/icon/myfile_icon_vText.png b/res/images/icon/myfile_icon_vText.png old mode 100644 new mode 100755 index 096f3d8ccb0576c81bbabab6bab6051f407ec662..a0206f87ead6bd85c771bc316808db98ccb4355c GIT binary patch delta 82 zcmeyy-z31(8Q|y6%O%Cdz`(#ek;{ycccX(CBO~wRFvk5rQj{qdNH#G!1IeRI4}s(| d<~Klc5=#t_e8&>T$h+BvbqY|!<{NBsi~ujf6x{#- delta 60 zcmV-C0K@-+5cUrWiBL{Q3K|Lk005B;HnBq%0h3w*zmpmQZIg%sLzBz`;ghZd?30@W ST$A_&RfpJ;2moUnA3p#9 delta 77 zcmV-T0J8t-9NZiViBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a j5jItgoW|lKa720J>GuiW_a2i*3E;CQ3T*DYM3ElJ diff --git a/res/images/icon/myfile_icon_vcard.png b/res/images/icon/myfile_icon_vcard.png old mode 100644 new mode 100755 index 7e4081aa69b55d48610e6d1d697c99a4b463669b..cf09ea0efeba03e48a3ea04fe461b756e7fea11a GIT binary patch delta 114 zcmeB^pC`}L8Q|y6%O%Cdz`($}k;{#Rk#}+cOEV+y=F2RRj6h0oic;Gp>D1K+Y20SRl#B Mmj)C{=Tm0{0FK)uQUCw| delta 89 zcmV-f0H*(*AC4aiiBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a v5jItgoW|lKa720J>GuiW_a2i*3E-0_3d^(e3cdo9vJG965DsRucMc~3u;(J* diff --git a/res/images/icon/myfile_icon_video.png b/res/images/icon/myfile_icon_video.png old mode 100644 new mode 100755 index 683813bfe071cf18469034445c6a9b8a611794f1..a2325fac965b91633e3c8d58edc08e2036da14b7 GIT binary patch delta 135 zcmdledq|e2Gr-TCmrII^fq{W{BbOTsBk$w@mS#rY&6ims8G)1z+X5gp`3(DgR^FSp zw(w3~$5A7~YsMSeJLlLV n11NTvTb5CT_fg-BpG;Rbu^4~dyK+wb>bU94csKL#E@cD&NXjpr delta 112 zcmV-$0FVE|9kCq>iBL{Q3K|Lk006NJMg)^n1cS5J1X%&IF$SOklhOy@1KHZNleP$a z5jItgoW|lKa720J>GuiW_a2i*3E;CQ3X}l`6QsU_nxB)y3n;Vf3mpLx;*Oa40@bnv SGxfcxoPVocm!`8F4W$8t$S)88 diff --git a/res/images/icon/myfile_icon_video_play.png b/res/images/icon/myfile_icon_video_play.png old mode 100644 new mode 100755 index 807726a5f886653f8475a85356a4f855315a8f31..dd3606cc577e3b9cb7625adb04a6bd7a9f1821ed GIT binary patch delta 27 icmZ3%znY(?Gr-TCmrII^fq{W{BiDa6M&8Ms?DGLzRR%-= delta 23 ecmZ3@zk;8uGr-TCONxtufng)hf40dy?DGLh(gq&@ diff --git a/res/images/icon/myfile_icon_word.png b/res/images/icon/myfile_icon_word.png old mode 100644 new mode 100755 index 127365813ba5892885ee0739b2b01dea1abed65c..4585c4e681439515f483dfe11ec7c707201dd726 GIT binary patch delta 53 zcmaDN@=AoKGr-TCmrII^fq{W{BiC&Y}y$U9kv-IkGe Jb0j-AGXREi4VnM| delta 45 zcmaDQ@r93S&`j#b38jYGXOer B4OajF diff --git a/res/images/icon/myfile_icon_zip.png b/res/images/icon/myfile_icon_zip.png old mode 100644 new mode 100755 index 0ee27b0437b2922fa65a0cb7d8cd7267622e8deb..227f5a13506a9a33187a73eda3cd1be8d876d6b6 GIT binary patch delta 35 pcmaFI`-zvQGr-TCmrII^fq{W{Bi9vXM&8Z$nEe=mln(15MgXdl2=xE} delta 29 lcmeyw`;M2ZGr-TCONxtufng)h73R$knf(|y8?YW?1OSJp2*v;a diff --git a/res/images/icon/myfile_search_category_all.png b/res/images/icon/myfile_search_category_all.png old mode 100644 new mode 100755 index cb67408b3c2b866d4d2d19fd625bb3fcf09607be..321be7e4e6aaf6bced3d597f0484cceb3d821b0c GIT binary patch delta 42 scmbQiF`GlNGr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+DEEsQ0HD$bga7~l delta 39 pcmbQuF@r;{Gr-TCONxtufx*+mB?w4~fG`IeknHW0-KhAB832*f2VDRF diff --git a/res/images/icon/myfile_search_category_doc.png b/res/images/icon/myfile_search_category_doc.png old mode 100644 new mode 100755 index 98dca4d2d27cd2ec0ed396b39739966c0e05cfcd..3eb012df2fb31e74fb18542a9b27110ddf4d2244 GIT binary patch delta 42 scmaFI{*hg=Gr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+D0hJw0K2*f1ONa4 delta 39 pcmey!{*GO)Gr-TCONxtufx*+mB?w4~fG`IeknHW0-Kcnh833xi2i*Vw diff --git a/res/images/icon/myfile_search_category_img.png b/res/images/icon/myfile_search_category_img.png old mode 100644 new mode 100755 index c87bbaf6a9acddd9e6daee65990fbae0c11bc296..08a5c5fc56dc3067966d570a60c00f556ccc5e07 GIT binary patch delta 54 zcmeC?oWQBr8Q|y6%O%Cdz`(%k>ERLtq(wlOgAGXbcFOW@l&fTBei diff --git a/res/images/icon/myfile_search_category_snd.png b/res/images/icon/myfile_search_category_snd.png old mode 100644 new mode 100755 index e819ea87a45495beff8826e406c75c03ecbfff8f..9984a9a8d293a6a649782066b743cf201690d9a0 GIT binary patch delta 51 zcmcb>ag{@{Gr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+DA&%+!pl67ck*)Pl>q+# B3L5|b delta 46 wcmcc0ae+gwGr-TCONxtufx*+mB?w4~fG`IeknHW0-Kf~k%)~r#@*3uq0Nqmw-2eap diff --git a/res/images/icon/myfile_search_category_video.png b/res/images/icon/myfile_search_category_video.png old mode 100644 new mode 100755 index dbdb55f807c682db787a1c30f68b29effb193b7c..9761acb92d7bbe5fa1a5cda2cb5e9f02ff5ddbf8 GIT binary patch delta 60 zcmdnMxs6k?Gr-TCmrII^fq{Y7)59eQNQ;0l2OE&=?Ud!+D3`#@$UC`?Sq@0fVa^1S HtSqYmO{EK6 delta 78 zcmdnSxq(xzGr-TCONxtufx*+mB?w4~fG`IeknHW0-KdzrEZ6M7path == NULL || node->name == NULL) { + _ERR("path or name is null."); + + if (node->path == NULL) + id->parent_path = NULL; + else + id->parent_path = strdup(node->path); + + if (node->name == NULL) + id->name = NULL; + else + id->name = strdup(node->name); + + if (node == NULL) + id->node = NULL; + else + id->node = node; + + id->file_size = NULL; + return; + } + buffer_size = strlen(node->path) + strlen("/") + strlen(node->name); new_path = (char *)calloc(buffer_size+1, sizeof(char)); snprintf(new_path, buffer_size+1, "%s%s%s", node->path, "/", node->name); id->child = mf_file_ls(new_path); - id->parent_path = node->path; + SAFE_FREE_CHAR(new_path); - id->name = node->name; + /* Below items should be duplicated by strdup */ + id->parent_path = strdup(node->path); + id->name = strdup(node->name); id->node = node; mf_file_attr_get_file_size_info(&temp_size, node->size); - buffer_size = strlen(temp_size); - id->file_size = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(id->file_size, buffer_size+1, "%s", temp_size); - free(new_path); - free(temp_size); + if (temp_size == NULL) { + _ERR("file size is null."); + id->file_size = NULL; + SAFE_FREE_CHAR(node->path); + SAFE_FREE_CHAR(node->name); + + return; + } + + id->file_size = strdup(temp_size); + + SAFE_FREE_CHAR(node->path); + SAFE_FREE_CHAR(node->name); + SAFE_FREE_CHAR(temp_size); return; } static void _item_focus_cb(void *data, Evas_Object *obj, void *event_info) { - char *signal = NULL; + if (data == NULL) + return; + char *signal = NULL; signal = (char *)data; if (!strcmp(signal, "item,focused")) elm_object_item_signal_emit(event_info, "mouse,in", "elm"); else if (!strcmp(signal, "item,unfocused")) elm_object_item_signal_emit(event_info, "mouse,out", "elm"); + + return; } static Eina_Bool ecore_timer_cb(void *data) @@ -108,45 +145,81 @@ static Evas_Object* create_check(Evas_Object *parent, void *data) return check; } +static char* _get_list_data_get(Eina_List *list, int index) +{ + char *data = NULL; + Eina_List *list_local = NULL; + + list_local = eina_list_nth_list(list, index); + + if (list_local == NULL) { + _ERR("list is null. failed get list data"); + mf_util_free_eina_list_with_data(&list_local, MYFILE_TYPE_CHAR); + return data; + } + + data = (char *)eina_list_data_get(list_local); + + return data; +} + static fsFileType _get_file_type(char *path, char *name) { - fsFileType fType; - int buffer_size = 0; + fsFileType fType = FILE_TYPE_NONE; + + if (path == NULL || name == NULL) { + _ERR("path or name is null. failed get file type."); + return fType; + } char *file_path = NULL; + int buffer_size = 0; buffer_size = strlen(path)+strlen("/")+strlen(name); - file_path = (char *)calloc(buffer_size+1, sizeof(char)); snprintf(file_path, buffer_size+1, "%s%s%s", path, "/", name); - fType = mf_file_attr_get_file_type_by_mime(file_path); + if (mf_file_attr_is_dir(file_path)) { + fType = FILE_TYPE_DIR; + free(file_path); + return fType; + } - free(file_path); + fType = mf_file_attr_get_file_type_by_mime(file_path); + SAFE_FREE_CHAR(file_path); return fType; } static char* _get_file_size(char *path, char *file_name) { + if (path == NULL || file_name == NULL) { + _ERR("path or name is null. failed get file size."); + return NULL; + } + int buffer_size, file_size; char *file_path = NULL, *size = NULL; buffer_size = strlen(path)+strlen("/")+strlen(file_name); - file_path = (char *)calloc(buffer_size+1, sizeof(char)); snprintf(file_path, buffer_size+1, "%s%s%s", path, "/", file_name); file_size = mf_file_size(file_path); mf_file_attr_get_file_size_info(&size, file_size); - free(file_path); + SAFE_FREE_CHAR(file_path); return size; } static void _focus_set(struct _priv *priv, int flag) { + if (priv == NULL) { + _ERR("priv is null. failed set focus"); + return; + } + Evas_Object *folder, *file, *path; folder = elm_object_part_content_get(priv->layout, PART_FOLDER_LIST); @@ -165,21 +238,27 @@ static void _focus_set(struct _priv *priv, int flag) elm_object_focus_next_object_set(folder, file, ELM_FOCUS_RIGHT); elm_object_focus_next_object_set(file, folder, ELM_FOCUS_LEFT); } + + return; } -static bool _draw_child_folder_list(Evas_Object *obj, item_data_s *id, Elm_Object_Item *parent) +static bool _draw_child_folder_list(Evas_Object *obj, item_data_s *id, struct _priv *priv) { + if (id == NULL) { + _ERR("id is null. failed draw child folder list"); + return false; + } + + Elm_Object_Item *parent = id->item; Elm_Object_Item *it = NULL; - Eina_List *list = NULL; - Eina_List *temp_folder = NULL, *temp_file = NULL; - int i = 0, buffer_size, ret; - char *new_path = NULL, *new_path2 = NULL; + + int i = 0, buffer_size, ret, count, level; + char *new_path = NULL, *new_path2 = NULL, *data = NULL; item_data_s *id_local; fsNodeInfo *node; - int count = eina_list_count(id->child); - int level; + count = eina_list_count(id->child); Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new(); itc->item_style = "custom_folder"; @@ -187,59 +266,96 @@ static bool _draw_child_folder_list(Evas_Object *obj, item_data_s *id, Elm_Objec itc->func.content_get = _folder_list_content_get; itc->func.del = _folder_list_del; + if (id->parent_path == NULL || id->name == NULL) { + _ERR("parent_path or name is null. failed _draw_child_folder_list"); + return false; + } + for (i = 0; i < count; i++) { - list = eina_list_nth_list(id->child, i); - char *data = (char *)eina_list_data_get(list); + Eina_List *temp_folder = NULL, *temp_file = NULL; + data = _get_list_data_get(id->child, i); - buffer_size = strlen(id->parent_path)+strlen("/")+strlen(id->name)+strlen("/")+strlen(data); + if (data == NULL) { + _ERR("data is null."); + continue; + } + buffer_size = strlen(id->parent_path)+strlen("/")+strlen(id->name)+strlen("/")+strlen(data); new_path = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(new_path, buffer_size+1, "%s%s%s%s%s", id->parent_path, "/", id->name, "/", data); + snprintf(new_path, buffer_size+1, "%s/%s/%s", id->parent_path, id->name, data); buffer_size = strlen(id->parent_path)+strlen("/")+strlen(id->name); - new_path2 = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(new_path2, buffer_size+1, "%s%s%s", id->parent_path, "/", id->name); + snprintf(new_path2, buffer_size+1, "%s/%s", id->parent_path, id->name); if (mf_is_dir(new_path)) { mf_file_attr_get_path_level(new_path, &level); - id_local = calloc(sizeof(item_data_s), 1); + id_local = calloc(1, sizeof(item_data_s)); id_local->index = i; - id_local->name = data; + id_local->name = strdup(data); id_local->base = id->base; id_local->layout = id->layout; id_local->level = level; ret = mf_fs_oper_read_dir(new_path2, &temp_folder, &temp_file); if (ret != MYFILE_ERR_NONE) { - free(new_path); - free(new_path2); - free(id_local->name); + _ERR("failed read dir. ret : %d", ret); + SAFE_FREE_CHAR(new_path); + SAFE_FREE_CHAR(new_path2); + mf_util_free_eina_list_with_data(&temp_folder, MYFILE_TYPE_FSNODE); + mf_util_free_eina_list_with_data(&temp_file, MYFILE_TYPE_FSNODE); free(id_local); - return false; + id_local = NULL; + + continue; } + node = (fsNodeInfo *)eina_list_nth(temp_folder, i); _set_folder_item_data(id_local, node); - it = elm_genlist_item_insert_after(obj, itc, id_local, parent, parent, ELM_GENLIST_ITEM_NONE, _item_selected_cb, id_local); + /* TODO: creating and passing the private data (not id_local) as user data */ + /* TODO: Created private data should be handled during the gen_list item's life cycle */ + it = elm_genlist_item_insert_after(obj, itc, id_local, parent, parent, ELM_GENLIST_ITEM_NONE, _item_selected_cb, priv); id_local->item = it; elm_object_item_data_set(it, id_local); } + SAFE_FREE_CHAR(data); } elm_genlist_item_class_free(itc); - free(new_path); - free(new_path2); + SAFE_FREE_CHAR(new_path); + SAFE_FREE_CHAR(new_path2); return true; } static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info) { struct _priv *priv; + + if (event_info == NULL) { + _ERR("event_info is null"); + return; + } + + if (data == NULL) { + _ERR("data is null. failed item_selected_cb"); + return; + } + + priv = (struct _priv *)data; item_data_s *selected_item = (item_data_s *)elm_object_item_data_get(event_info); - path_item_data_s *pld; + + path_item_data_s *pid; + + int buffer_size, same = 0, level; + char *new_path = NULL; + + if (selected_item == NULL) { + _ERR("selected_item info is null."); + return; + } if (selected_item->expanded == 1) { selected_item->expanded = 0; @@ -248,52 +364,67 @@ static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info) return; } - priv = calloc(sizeof(priv), 1); - pld = calloc(sizeof(path_item_data_s), 1); + Evas_Object *path_object = elm_object_part_content_get(selected_item->base, PART_FILE_PATH); - int buffer_size, same = 0, level; + if (path_object == NULL) { + _ERR("path_object is null."); + return; + } - priv->base = selected_item->base; - priv->layout = selected_item->layout; + Elm_Object_Item *gengrid = elm_gengrid_last_item_get(path_object); - Evas_Object *path_object = elm_object_part_content_get(priv->base, PART_FILE_PATH); - const char *last_path = elm_object_item_part_text_get(elm_gengrid_last_item_get(path_object), "elm.text"); + if (gengrid == NULL) { + _ERR("gengrid is null."); + return; + } - pld = (path_item_data_s *)elm_object_item_data_get(elm_gengrid_last_item_get(path_object)); + selected_item->last_path = elm_object_item_part_text_get(gengrid, "elm.text"); - selected_item->last_path = last_path; + if (selected_item->last_path == NULL) { + _ERR("last_path is null."); + return; + } - char *new_path = NULL; + Elm_Object_Item *gengrid_item = elm_gengrid_last_item_get(path_object); - if (!strcmp(last_path, "Home")) { - buffer_size = strlen(selected_item->parent_path)+strlen("/")+strlen(selected_item->name); + if (gengrid_item == NULL) { + _ERR("gengrid_item is null."); + return; + } - new_path = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(new_path, buffer_size+1, "%s%s%s", selected_item->parent_path, "/", selected_item->name); - } else { - buffer_size = strlen(selected_item->parent_path)+strlen("/")+strlen(selected_item->name); + pid = (path_item_data_s*)elm_object_item_data_get(gengrid_item); - new_path = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(new_path, buffer_size+1, "%s%s%s", selected_item->parent_path, "/", selected_item->name); + if (pid == NULL) { + _ERR("pid is null."); + return; + } + + if (selected_item->parent_path == NULL || selected_item->name == NULL) { + _ERR("parent_path or name is null."); + util_free_path_item_data_s(pid); + free(pid); + pid = NULL; + return; + } + buffer_size = strlen(selected_item->parent_path)+strlen("/")+strlen(selected_item->name); + new_path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(new_path, buffer_size+1, "%s/%s", selected_item->parent_path, selected_item->name); + + if (strcmp(selected_item->last_path, "Home")) { mf_file_attr_get_path_level(new_path, &level); - if (pld->level == level) + if (pid->level == level) same = 1; - else if (pld->level < level) + else if (pid->level < level) same = 0; else - same = level - pld->level; + same = level - pid->level; } if (selected_item->child != NULL && eina_list_count(selected_item->child)) { - if (!_draw_child_folder_list(obj, selected_item, event_info)) { + if (!_draw_child_folder_list(obj, selected_item, priv)) { _ERR("_draw_child_folder_list failed."); - - if (!new_path) - free(new_path); - if (!pld) - free(pld); - return; + goto out; } selected_item->expanded = 1; } @@ -305,20 +436,18 @@ static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info) viewmgr_update_view(VIEW_BASE, UPDATE_PATH, priv); - if (!_draw_file_list_item_selected(selected_item)) { + if (!_draw_file_list_item_selected(priv, selected_item->child)) { _ERR("_draw_file_list_item_selected failed."); - - if (!new_path) - free(new_path); - if (!pld) - free(pld); - return; + goto out; } - if (!new_path) - free(new_path); - if (!pld) - free(pld); +out: + SAFE_FREE_CHAR(new_path); + if (pid != NULL) { + util_free_path_item_data_s(pid); + free(pid); + pid = NULL; + } return; } @@ -326,9 +455,17 @@ static void _item_selected_cb(void *data, Evas_Object *obj, void *event_info) static char* _file_list_label_get(void *data, Evas_Object *obj, const char *part) { + if (data == NULL) { + _ERR("data is null. Failed to get label"); + return NULL; + } + char buf[256]; item_data_s *id = (item_data_s *)data; + if (id == NULL) + return NULL; + if (!strcmp("elm.text1", part)) { if (id->is_empty) { if (id->index == 0) @@ -361,12 +498,24 @@ _file_list_label_get(void *data, Evas_Object *obj, const char *part) static char* _folder_list_label_get(void *data, Evas_Object *obj, const char *part) { + if (data == NULL) { + _ERR("data is null. Failed to get label text"); + return NULL; + } + char buf[256]; item_data_s *id = (item_data_s *)data; Eina_List *list; + if (id == NULL) + return NULL; + if (!strcmp("elm.text.folder", part)) { - snprintf(buf, sizeof(buf), "%s", id->name); + if (id->name == NULL) + return NULL; + else + snprintf(buf, sizeof(buf), "%s", id->name); + return strdup(buf); } else if (!strcmp("elm.text1", part)) { if (eina_list_count(id->child) == 0 || id->is_home == 1) { @@ -377,7 +526,11 @@ _folder_list_label_get(void *data, Evas_Object *obj, const char *part) } else { list = eina_list_nth_list(id->child, id->index); char *data = (char *)eina_list_data_get(list); - snprintf(buf, sizeof(buf), "%s", data); + + if (data == NULL) + return NULL; + else + snprintf(buf, sizeof(buf), "%s", data); } return strdup(buf); } else if (!strcmp("elm.text2", part)) { @@ -385,6 +538,7 @@ _folder_list_label_get(void *data, Evas_Object *obj, const char *part) return NULL; else snprintf(buf, sizeof(buf), "%s", id->file_size); + return strdup(buf); } else if (!strcmp("elm.text3", part)) { snprintf(buf, sizeof(buf), "2016/04/12"); @@ -397,6 +551,11 @@ _folder_list_label_get(void *data, Evas_Object *obj, const char *part) static Evas_Object* _folder_list_content_get(void *data, Evas_Object *obj, const char *part) { + if (data == NULL) { + _ERR("data is null. failed get content"); + return NULL; + } + item_data_s *id = (item_data_s *)data; if (!strcmp("elm.swallow.icon", part)) { @@ -421,17 +580,23 @@ _folder_list_del(void *data, Evas_Object *obj) * Accessing item_data_s can be dangerous on unrealized callback. */ item_data_s *id = (item_data_s *)data; + util_free_item_data_s(id); free(id); } static bool _draw_folder_list(struct _priv *priv) { + if (priv == NULL) { + _ERR("priv is null. failed draw folder list"); + return false; + } + Evas_Object *scroller = NULL; Evas_Object *genlist = NULL; Elm_Object_Item *it = NULL; item_data_s *id; - list_data_s *list_data = calloc(sizeof(list_data_s), 1); + list_data_s *list_data = calloc(1, sizeof(list_data_s)); fsNodeInfo *node = NULL; @@ -448,14 +613,17 @@ static bool _draw_folder_list(struct _priv *priv) itc->func.del = _folder_list_del; path = Get_Root_Path(STORAGE_TYPE_INTERNAL); - list_data->path = path; int ret = mf_fs_oper_read_dir(list_data->path, &list_data->folder_list, &list_data->file_list); if (ret != MYFILE_ERR_NONE) { - free(path); - free(list_data->path); + _ERR("failed read dir. ret : %d", ret); + SAFE_FREE_CHAR(path); + + mf_util_free_eina_list_with_data(&list_data->folder_list, MYFILE_TYPE_FSNODE); + mf_util_free_eina_list_with_data(&list_data->file_list, MYFILE_TYPE_FSNODE); free(list_data); + list_data = NULL; return false; } @@ -465,17 +633,18 @@ static bool _draw_folder_list(struct _priv *priv) int i; for (i = 0; i < list_data->folder_count; i++) { - id = calloc(sizeof(item_data_s), 1); + id = calloc(1, sizeof(item_data_s)); id->index = i; - node = (fsNodeInfo *)eina_list_nth(list_data->folder_list, i); id->base = priv->base; id->layout = priv->layout; id->expanded = 0; id->level = 1; + + node = (fsNodeInfo *)eina_list_nth(list_data->folder_list, i); _set_folder_item_data(id, node); - it = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _item_selected_cb, id); + it = elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, _item_selected_cb, priv); id->item = it; elm_object_item_data_set(it, id); } @@ -488,18 +657,37 @@ static bool _draw_folder_list(struct _priv *priv) evas_object_smart_callback_add(genlist, "item,focused", _item_focus_cb, "item,focused"); evas_object_smart_callback_add(genlist, "item,unfocused", _item_focus_cb, "item,unfocused"); + /* file list and folder list should be freed here */ + mf_util_free_eina_list_with_data(&list_data->folder_list, MYFILE_TYPE_FSNODE); + mf_util_free_eina_list_with_data(&list_data->file_list, MYFILE_TYPE_FSNODE); free(list_data); - free(path); + list_data = NULL; + SAFE_FREE_CHAR(path); return true; } -static bool _draw_file_list_item_selected(item_data_s *id) +static bool _draw_file_list_item_selected(struct _priv *priv, Eina_List *child) { + if (priv == NULL) { + _ERR("id is null. failed _draw_file_list_item_selected."); + return false; + } + Evas_Object *scroller = NULL; Evas_Object *genlist = NULL; - scroller = elm_scroller_add(id->layout); + char *path = NULL; + + if (priv->selected_parent_path == NULL || priv->selected_folder == NULL) { + _ERR("priv->selected_parent_path or priv->selected_folder is null. failed _draw_file_list_item_selected."); + return false; + } + int buffer_size = strlen(priv->selected_parent_path)+strlen("/")+strlen(priv->selected_folder); + path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(path, buffer_size+1, "%s/%s", priv->selected_parent_path, priv->selected_folder); + + scroller = elm_scroller_add(priv->layout); genlist = elm_genlist_add(scroller); elm_object_focus_allow_set(genlist, EINA_TRUE); @@ -508,12 +696,6 @@ static bool _draw_file_list_item_selected(item_data_s *id) item_data_s *id_local = NULL; - char *path = NULL; - - int buffer_size = strlen(id->parent_path)+strlen("/")+strlen(id->name); - path = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(path, buffer_size+1, "%s%s%s", id->parent_path, "/", id->name); - itc = elm_genlist_item_class_new(); itc->item_style = "custom_file"; itc->func.text_get = _file_list_label_get; @@ -522,37 +704,32 @@ static bool _draw_file_list_item_selected(item_data_s *id) int i, total_count = 0; - if (id->child != NULL) - total_count = eina_list_count(id->child); - - if (!total_count) - id->is_empty = 1; - else - id->is_empty = 0; + if (child != NULL) + total_count = eina_list_count(child); Eina_List *list = NULL; if (total_count == 0) { for (i = 0; i < 2; i++) { - id_local = calloc(sizeof(item_data_s), 1); + id_local = calloc(1, sizeof(item_data_s)); id_local->index = i; - id_local->is_empty = id->is_empty; + id_local->is_empty = 1; it = elm_genlist_item_append(genlist, itc, id_local, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); id_local->item = it; } } else { for (i = 0; i < total_count; i++) { - id_local = calloc(sizeof(item_data_s), 1); + id_local = calloc(1, sizeof(item_data_s)); id_local->index = i; + id_local->is_empty = 0; - list = eina_list_nth_list(id->child, i); + list = eina_list_nth_list(child, i); id_local->name = (char *)eina_list_data_get(list); id_local->type = _get_file_type(path, id_local->name); id_local->file_size = _get_file_size(path, id_local->name); - id_local->is_empty = id->is_empty; it = elm_genlist_item_append(genlist, itc, id_local, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); id_local->item = it; @@ -560,24 +737,15 @@ static bool _draw_file_list_item_selected(item_data_s *id) } elm_genlist_item_class_free(itc); - elm_object_part_content_set(id->layout, PART_FILE_LIST, scroller); + elm_object_part_content_set(priv->layout, PART_FILE_LIST, scroller); elm_object_content_set(scroller, genlist); evas_object_smart_callback_add(genlist, "item,focused", _item_focus_cb, "item,focused"); evas_object_smart_callback_add(genlist, "item,unfocused", _item_focus_cb, "item,unfocused"); - Evas_Object *folder = elm_object_part_content_get(id->layout, PART_FOLDER_LIST); - Evas_Object *file = elm_object_part_content_get(id->layout, PART_FILE_LIST); - Evas_Object *path_obj = elm_object_part_content_get(id->base, PART_FILE_PATH); - - elm_object_focus_next_object_set(path_obj, folder, ELM_FOCUS_DOWN); - elm_object_focus_next_object_set(folder, path_obj, ELM_FOCUS_UP); - elm_object_focus_next_object_set(file, path_obj, ELM_FOCUS_UP); - elm_object_focus_next_object_set(folder, file, ELM_FOCUS_RIGHT); - elm_object_focus_next_object_set(file, folder, ELM_FOCUS_LEFT); - - free(path); + _focus_set(priv, 1); + SAFE_FREE_CHAR(path); return true; } @@ -605,7 +773,7 @@ static bool _draw_file_list_root(struct _priv *priv) itc->func.del = _folder_list_del; for (i = 0; i < 2; i++) { - id = calloc(sizeof(item_data_s), 1); + id = calloc(1, sizeof(item_data_s)); id->index = i; id->is_home = 1; @@ -626,27 +794,41 @@ static bool _draw_file_list_root(struct _priv *priv) static bool _draw_file_list(struct _priv *priv, int flag) { + if (priv == NULL) { + _ERR("priv is null. Failed draw file list"); + return false; + } + Evas_Object *scroller = NULL; Evas_Object *genlist = NULL; item_data_s *id; Elm_Genlist_Item_Class *itc; - int is_home = 0; + Eina_List *list = NULL, *temp = NULL; + + int is_home = 0, buffer_size = 0; + int i, total_count; char *path = NULL; if (priv->selected_folder == NULL) { is_home = 1; - int buffer_size = strlen(priv->selected_parent_path); - path = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(path, buffer_size+1, "%s", priv->selected_parent_path); - } else { - int buffer_size = strlen(priv->selected_parent_path)+strlen("/")+strlen(priv->selected_folder); - path = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(path, buffer_size+1, "%s%s%s", priv->selected_parent_path, "/", priv->selected_folder); + if (priv->selected_parent_path == NULL) + path = NULL; + else + path = strdup(priv->selected_parent_path); + } else { is_home = 0; + + if (priv->selected_parent_path == NULL) + path = NULL; + else { + buffer_size = strlen(priv->selected_parent_path)+strlen("/")+strlen(priv->selected_folder); + path = (char *)calloc(buffer_size+1, sizeof(char)); + snprintf(path, buffer_size+1, "%s/%s", priv->selected_parent_path, priv->selected_folder); + } } scroller = elm_scroller_add(priv->layout); @@ -669,16 +851,16 @@ static bool _draw_file_list(struct _priv *priv, int flag) itc->func.del = _folder_list_del; } - int i, total_count; - - Eina_List *list = mf_file_ls(path); - total_count = eina_list_count(list); - - Eina_List *temp; + if (path == NULL) + total_count = 0; + else { + list = mf_file_ls(path); + total_count = eina_list_count(list); + } if (total_count == 0 || is_home == 1) { for (i = 0; i < 2; i++) { - id = calloc(sizeof(item_data_s), 1); + id = calloc(1, sizeof(item_data_s)); id->index = i; id->is_home = is_home; @@ -686,13 +868,13 @@ static bool _draw_file_list(struct _priv *priv, int flag) } } else { for (i = 0; i < total_count; i++) { - id = calloc(sizeof(item_data_s), 1); + id = calloc(1, sizeof(item_data_s)); id->index = i; id->is_home = is_home; id->child = list; temp = eina_list_nth_list(list, i); - id->name = (char *)eina_list_data_get(temp);; + id->name = (char *)eina_list_data_get(temp); id->file_size = _get_file_size(path, id->name); id->type = _get_file_type(path, id->name); @@ -710,7 +892,7 @@ static bool _draw_file_list(struct _priv *priv, int flag) evas_object_smart_callback_add(genlist, "item,focused", _item_focus_cb, "item,focused"); evas_object_smart_callback_add(genlist, "item,unfocused", _item_focus_cb, "item,unfocused"); - free(path); + SAFE_FREE_CHAR(path); return true; } @@ -738,8 +920,12 @@ static bool _create(layoutmgr *lmgr, void *data) return false; } - priv = calloc(1, sizeof(*priv)); - priv = data; + if (!data) { + _ERR("failed get data from base"); + return false; + } + + priv = (struct _priv *)data; if (!priv) { _ERR("failed to allocate priv"); return false; diff --git a/src/util/dialog_popup.c b/src/util/dialog_popup.c index 8ef81ff..686f624 100755 --- a/src/util/dialog_popup.c +++ b/src/util/dialog_popup.c @@ -215,5 +215,8 @@ out: if (content != NULL) free(content); + free(dialog_popup_info); + dialog_popup_info = NULL; + return dialog_popup; } diff --git a/src/util/file-attr.c b/src/util/file-attr.c index 0f3ede6..39971c2 100755 --- a/src/util/file-attr.c +++ b/src/util/file-attr.c @@ -1359,7 +1359,7 @@ void mf_file_attr_get_file_size_info(char **file_size, off_t src_size) unsigned long long original_size = 0; double size = 0; int index = 0; - int len = 0; + int len = 0; /* TODO: Check this variable */ original_size = src_size; size = (double)original_size; diff --git a/src/util/file-util.c b/src/util/file-util.c index 961226d..c1e5132 100755 --- a/src/util/file-util.c +++ b/src/util/file-util.c @@ -15,6 +15,7 @@ * */ #include + #include "util/file-util.h" #define PATH_MAX_SIZE 256 @@ -311,3 +312,78 @@ int mf_remove(const char *filename) else return 1; } + +void mf_util_free_eina_list_with_data(Eina_List **list, MYFILE_CONTENT_TYPE type) +{ + 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) { + GString *node = (GString *)pNode; + SAFE_FREE_GSTRING(node); + } + break;*/ + case MYFILE_TYPE_CHAR: + EINA_LIST_FOREACH(*list, l, pNode) { + char *node = (char *)pNode; + SAFE_FREE_CHAR(node); + } + 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; +/* case MYFILE_TYPE_ITEM_DATA: + EINA_LIST_FOREACH(*list, l, pNode) { + mfItemData_s *Node = (mfItemData_s *)pNode; + mf_util_normal_item_data_free(&Node); + } + break;*/ + default: + break; + } + + eina_list_free(*list); + *list = NULL; + + return; +} + +void util_free_item_data_s(item_data_s *id) +{ + if (id == NULL) + return; + + SAFE_FREE_CHAR(id->selected_folder_path); + SAFE_FREE_CHAR(id->parent_path); + SAFE_FREE_CHAR(id->name); + SAFE_FREE_CHAR(id->file_size); + + return; +} + +void util_free_path_item_data_s(path_item_data_s *pid) +{ + if (pid == NULL) + return; + + SAFE_FREE_CHAR(pid->full_path); + SAFE_FREE_CHAR(pid->parent_path); + + return; +} diff --git a/src/util/utils.c b/src/util/utils.c index 779bfe0..1c87ab5 100755 --- a/src/util/utils.c +++ b/src/util/utils.c @@ -88,6 +88,10 @@ check_changed_item_cb(void *data, Evas_Object *obj, void *event_info) static fsNodeInfo* _get_fsNodeInfo(Eina_List *list, int index) { fsNodeInfo *node = NULL; + + if (list == NULL) + return node; + node = (fsNodeInfo *)eina_list_nth(list, index); return node; @@ -95,8 +99,13 @@ static fsNodeInfo* _get_fsNodeInfo(Eina_List *list, int index) static void _selected(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) { + if (data == NULL) { + _ERR("data is null. failed select popup menu"); + return; + } + struct _priv *priv; - priv = data; + priv = (struct _priv *)data; int index = elm_genlist_item_index_get(item); inputmgr_remove_callback(priv->popup_win, &popup_handler); @@ -105,7 +114,7 @@ static void _selected(int id, void *data, Evas_Object *obj, Elm_Object_Item *ite if (index == 1 || index == 2 || index == 4) viewmgr_update_view(VIEW_BASE, UPDATE_FILE_TO_SELECT, priv); else if (index == 3) { - dialog_popup_info_t *info = calloc(sizeof(dialog_popup_info_t), 1); + dialog_popup_info_t *info = calloc(1, sizeof(dialog_popup_info_t)); info->dialog_popup_type = DIALOG_POPUP_TYPE_INPUT_NAME; info->title = "Rename"; @@ -116,7 +125,7 @@ static void _selected(int id, void *data, Evas_Object *obj, Elm_Object_Item *ite dialog_popup_create(info); } else if (index == 5) { - dialog_popup_info_t *info = calloc(sizeof(dialog_popup_info_t), 1); + dialog_popup_info_t *info = calloc(1, sizeof(dialog_popup_info_t)); info->dialog_popup_type = DIALOG_POPUP_TYPE_YES_OR_CANCEL; info->content = "Delete?"; @@ -126,7 +135,7 @@ static void _selected(int id, void *data, Evas_Object *obj, Elm_Object_Item *ite dialog_popup_create(info); } else if (index == 6) { - dialog_popup_info_t *info = calloc(sizeof(dialog_popup_info_t), 1); + dialog_popup_info_t *info = calloc(1, sizeof(dialog_popup_info_t)); info->dialog_popup_type = DIALOG_POPUP_TYPE_CONFIGURATION; info->title = "Setting"; @@ -137,6 +146,8 @@ static void _selected(int id, void *data, Evas_Object *obj, Elm_Object_Item *ite dialog_popup_create(info); } + + return; } static void _focused(int id, void *data, Evas_Object *obj, Elm_Object_Item *item) @@ -163,6 +174,11 @@ static Evas_Object* create_check(Evas_Object *parent, void *data) static char* _folder_list_label_get(void *data, Evas_Object *obj, const char *part) { + if (data == NULL) { + _ERR("data is null. Failed get label"); + return NULL; + } + char buf[256]; util_item_data_s *id = (util_item_data_s *)data; @@ -171,29 +187,23 @@ _folder_list_label_get(void *data, Evas_Object *obj, const char *part) return NULL; snprintf(buf, sizeof(buf), "%s", id->folder_name); - return strdup(buf); } else { - if (id->index == 0) { + if (id->index == 0) snprintf(buf, sizeof(buf), "Copy"); - return strdup(buf); - } else if (id->index == 1) { + else if (id->index == 1) snprintf(buf, sizeof(buf), "Move"); - return strdup(buf); - } else if (id->index == 2) { + else if (id->index == 2) snprintf(buf, sizeof(buf), "Rename"); - return strdup(buf); - } else if (id->index == 3) { + else if (id->index == 3) snprintf(buf, sizeof(buf), "New folder"); - return strdup(buf); - } else if (id->index == 4) { + else if (id->index == 4) snprintf(buf, sizeof(buf), "Delete"); - return strdup(buf); - } else if (id->index == 5) { + else if (id->index == 5) snprintf(buf, sizeof(buf), "Setting"); - return strdup(buf); - } + else + return NULL; } - return NULL; + return strdup(buf); } static Evas_Object* @@ -244,8 +254,11 @@ static void _mouse_move(int id, void *data, Evas *e, Evas_Object *obj, static void _down_btn_cb(void *data, Evas_Object *obj, void *event_info) { + if (!data) + return; + struct _priv *priv; - priv = data; + priv = (struct _priv *)data; viewmgr_update_view(VIEW_BASE, UPDATE_FILE, priv); evas_object_del(priv->popup_win); @@ -253,14 +266,14 @@ static void _down_btn_cb(void *data, Evas_Object *obj, void *event_info) Evas_Object *utils_add_window(const char *name) { - Evas_Object *win; - if (!name) { _ERR("Invalid argument."); return NULL; } + Evas_Object *win; win = elm_win_add(NULL, name, ELM_WIN_BASIC); + if (!win) { _ERR("elm_win_add failed."); return NULL; @@ -477,6 +490,11 @@ Evas_Object *utils_add_notify(Evas_Object *parent, const char *text, void utils_show_submenu_popup(struct _priv *priv) { + if (priv == NULL) { + _ERR("priv is null. failed to show submenu popup"); + return; + } + Evas_Object *notification_popup; Evas_Object *window_layout = NULL; Evas_Object *scroller, *genlist; @@ -537,10 +555,11 @@ void utils_show_submenu_popup(struct _priv *priv) Elm_Genlist_Item_Class *itc = elm_genlist_item_class_new(); itc->item_style = "custom_1text"; itc->func.text_get = _folder_list_label_get; + itc->func.del = _folder_list_del; int i; for (i = 0; i < 6; i++) { - id = calloc(sizeof(util_item_data_s), 1); + id = calloc(1, sizeof(util_item_data_s)); id->index = i; elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); @@ -561,13 +580,18 @@ out: void utils_show_select_folder_popup(struct _priv *priv) { + if (priv == NULL) { + _ERR("priv is null. Failed to show select folder popup"); + return; + } + Evas_Object *notification_popup; Evas_Object *window_layout = NULL; Evas_Object *ok_btn, *cancel_btn, *new_folder_btn; Evas_Object *scroller, *genlist; util_item_data_s *id; - list_data_s *list_data = calloc(sizeof(list_data_s), 1); + list_data_s *list_data = calloc(1, sizeof(list_data_s)); char *path = NULL; fsNodeInfo *node = NULL; @@ -624,12 +648,22 @@ void utils_show_select_folder_popup(struct _priv *priv) genlist = elm_genlist_add(scroller); path = Get_Root_Path(STORAGE_TYPE_INTERNAL); - list_data->path = path; + if (path == NULL) + list_data->path = NULL; + else + list_data->path = path; int ret = mf_fs_oper_read_dir(list_data->path, &list_data->folder_list, &list_data->file_list); if (ret != MYFILE_ERR_NONE) { - free(path); + _ERR("failed read dir. ret : %d", ret); + SAFE_FREE_CHAR(path); + mf_util_free_eina_list_with_data(&list_data->folder_list, MYFILE_TYPE_FSNODE); + mf_util_free_eina_list_with_data(&list_data->file_list, MYFILE_TYPE_FSNODE); free(list_data); + list_data = NULL; + + evas_object_del(notification_popup); + notification_popup = NULL; return; } @@ -644,12 +678,16 @@ void utils_show_select_folder_popup(struct _priv *priv) int i; for (i = 0; i < list_data->folder_count; i++) { - id = calloc(sizeof(util_item_data_s), 1); + id = calloc(1, sizeof(util_item_data_s)); id->index = i; node = _get_fsNodeInfo(list_data->folder_list, id->index); - id->folder_name = strdup(node->name); + if (node->name == NULL) + id->folder_name = NULL; + else + id->folder_name = strdup(node->name); + SAFE_FREE_CHAR(node->name); elm_genlist_item_append(genlist, itc, id, NULL, ELM_GENLIST_ITEM_NONE, NULL, NULL); } @@ -668,7 +706,10 @@ void utils_show_select_folder_popup(struct _priv *priv) evas_object_show(notification_popup); elm_win_activate(notification_popup); + mf_util_free_eina_list_with_data(&list_data->folder_list, MYFILE_TYPE_FSNODE); + mf_util_free_eina_list_with_data(&list_data->file_list, MYFILE_TYPE_FSNODE); free(list_data); + list_data = NULL; return; } diff --git a/src/view/base.c b/src/view/base.c index db72771..893aa76 100755 --- a/src/view/base.c +++ b/src/view/base.c @@ -52,8 +52,18 @@ static struct _menu_item g_menu_item[E_LAYOUT_MAX] = { static void gengrid_it_cb(void *data, Evas_Object *obj, void *event_info) { + if (event_info == NULL) { + _ERR("event_info is null. failed gengrid_it_cb"); + return; + } + + if (obj == NULL) { + _ERR("obj is null. failed gengrid_it_cb"); + return; + } + int index, count, i; - Elm_Object_Item *next_it, *deleted_it; + Elm_Object_Item *next_it = NULL, *deleted_it = NULL; index = elm_gengrid_item_index_get(event_info); count = elm_gengrid_items_count(obj); @@ -65,18 +75,30 @@ gengrid_it_cb(void *data, Evas_Object *obj, void *event_info) elm_object_item_del(deleted_it); deleted_it = next_it; } + + return; } static char* -gengrid_text_get_cb(void *data, Evas_Object *obj, const char *part) +_gengrid_text_get_cb(void *data, Evas_Object *obj, const char *part) { + if (data == NULL) { + _ERR("data is null. failed get text"); + return NULL; + } char buf[1024]; - path_item_data_s *id = data; + path_item_data_s *id = (path_item_data_s *)data; int index = id->index; if (!strcmp(part, "elm.text")) { - if (index == -1) - snprintf(buf, 1023, "%s", id->selected_folder); + if (index == -1) { + if (id->selected_folder == NULL) { + _ERR("id->selected_folder is null."); + return NULL; + } + else + snprintf(buf, 1023, "%s", id->selected_folder); + } else if (index == 0) snprintf(buf, 1023, "%s", "Home"); @@ -88,11 +110,16 @@ gengrid_text_get_cb(void *data, Evas_Object *obj, const char *part) static Evas_Object* create_gengrid(struct _priv *priv) { - path_item_data_s *id; + if (priv == NULL) { + _ERR("priv is null. failed to create_gengrid"); + return NULL; + } + + path_item_data_s *id = NULL; int w, h; - Elm_Gengrid_Item_Class *gic; - Evas_Object *gengrid; - Elm_Object_Item *item; + Elm_Gengrid_Item_Class *gic = NULL; + Evas_Object *gengrid = NULL; + Elm_Object_Item *item = NULL; gengrid = elm_gengrid_add(priv->base); evas_object_size_hint_weight_set(gengrid, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); @@ -108,15 +135,21 @@ create_gengrid(struct _priv *priv) priv->selected_parent_path = Get_Root_Path(STORAGE_TYPE_INTERNAL); + if (priv->selected_parent_path == NULL) { + _ERR("priv->selected_parent_path is null. failed to create_gengrid"); + return NULL; + } + gic = elm_gengrid_item_class_new(); gic->item_style = "custom_1text"; - gic->func.text_get = gengrid_text_get_cb; + gic->func.text_get = _gengrid_text_get_cb; - id = calloc(sizeof(path_item_data_s), 1); + id = calloc(1, sizeof(path_item_data_s)); id->index = 0; + id->parent_path = priv->selected_parent_path; - item = elm_gengrid_item_append(gengrid, gic, id, gengrid_it_cb, id); + item = elm_gengrid_item_append(gengrid, gic, id, gengrid_it_cb, NULL); id->item = item; mf_file_attr_get_path_level(id->parent_path, &id->level); @@ -131,20 +164,42 @@ create_gengrid(struct _priv *priv) static void update_gengrid(void *data) { + if (data == NULL) { + _ERR("data is null, failed to update gengrid"); + return; + } + struct _priv *priv = (struct _priv *)data; - path_item_data_s *id; - Elm_Gengrid_Item_Class *gic; - Elm_Object_Item *item, *delete; + path_item_data_s *id = NULL; + Elm_Gengrid_Item_Class *gic = NULL; + Elm_Object_Item *item = NULL, *delete = NULL; int buffer_size; char *new_path; + Evas_Object *file_path = NULL; - Evas_Object *file_path = elm_object_part_content_get(priv->base, PART_FILE_PATH); + if (priv->base == NULL) { + _ERR("priv->base is null. failed to update gengrid"); + return; + } + + file_path = elm_object_part_content_get(priv->base, PART_FILE_PATH); + + if (priv->selected_parent_path == NULL || priv->selected_folder == NULL) { + _ERR("selected_parent_path or selected_folder is null. failed to update gengrid"); + return; + } buffer_size = strlen(priv->selected_parent_path)+strlen("/")+strlen(priv->selected_folder); new_path = (char *)calloc(buffer_size+1, sizeof(char)); - snprintf(new_path, buffer_size+1, "%s%s%s", priv->selected_parent_path, "/", priv->selected_folder); + snprintf(new_path, buffer_size+1, "%s/%s", priv->selected_parent_path, priv->selected_folder); + + if(new_path == NULL) { + _ERR("new_path is null. failed to update gengrid"); + SAFE_FREE_CHAR(new_path); + return; + } if (priv->same == 1) { delete = elm_gengrid_last_item_get(file_path); @@ -152,59 +207,97 @@ update_gengrid(void *data) } else if (priv->same < 0) { int i; int num = priv->same * (-1); - for (i = 0; i < num; i++) { + for (i = 0; i <= num; i++) { delete = elm_gengrid_last_item_get(file_path); elm_object_item_del(delete); } - delete = elm_gengrid_last_item_get(file_path); - elm_object_item_del(delete); } gic = elm_gengrid_item_class_new(); gic->item_style = "custom_1text"; - gic->func.text_get = gengrid_text_get_cb; + gic->func.text_get = _gengrid_text_get_cb; - id = calloc(sizeof(path_item_data_s), 1); + id = calloc(1, sizeof(path_item_data_s)); id->selected_folder = priv->selected_folder; - id->parent_path = priv->selected_parent_path; +// id->parent_path = priv->selected_parent_path; id->index = -1; + id->full_path = strdup(new_path); + + if (id->full_path == NULL) { + _ERR("id->full_path is null. failed to update gengrid"); + util_free_path_item_data_s(id); + SAFE_FREE_CHAR(new_path); + return; + } - id->full_path = new_path; mf_file_attr_get_path_level(id->full_path, &id->level); - item = elm_gengrid_item_append(file_path, gic, id, gengrid_it_cb, id); + item = elm_gengrid_item_append(file_path, gic, id, gengrid_it_cb, NULL); id->item = item; elm_object_item_data_set(item, id); evas_object_show(file_path); elm_gengrid_item_class_free(gic); - free(new_path); + SAFE_FREE_CHAR(new_path); return; } static void _menu_cb(void *data, Evas_Object *obj, void *event_info) { - struct _priv *priv = data; + if (data == NULL) { + _ERR("data is null. failed menu_cb"); + return; + } - Elm_Object_Item *item; + struct _priv *priv = (struct _priv *)data; + + Elm_Object_Item *item = NULL; + + if (priv->base == NULL) { + _ERR("priv->base is null. failed _menu_cb"); + return; + } Evas_Object *file_path = elm_object_part_content_get(priv->base, PART_FILE_PATH); + + if (file_path == NULL) { + _ERR("file_path is null. failed _menu_cb"); + return; + } + item = elm_gengrid_last_item_get(file_path); - path_item_data_s *id = elm_object_item_data_get(item); + if (item == NULL) { + _ERR("item is null. failed _menu_cb"); + return; + } - priv->selected_folder = id->selected_folder; - priv->selected_parent_path = id->parent_path; + path_item_data_s *id = (path_item_data_s *)elm_object_item_data_get(item); + + if (id->selected_folder == NULL) + priv->selected_folder = NULL; + else + priv->selected_folder = id->selected_folder; + + if (id->parent_path == NULL) + priv->selected_parent_path = NULL; + else + priv->selected_parent_path = id->parent_path; utils_show_submenu_popup(priv); } static void _menu_cb2(void *data, Evas_Object *obj, void *event_info) { - struct _priv *priv = data; + if (data == NULL) { + _ERR("data is null. failed menu_cb2"); + return; + } + + struct _priv *priv = (struct _priv *)data; priv->popup_base = obj; Elm_Object_Item *item; @@ -214,8 +307,15 @@ static void _menu_cb2(void *data, Evas_Object *obj, void *event_info) path_item_data_s *id = elm_object_item_data_get(item); - priv->selected_folder = id->selected_folder; - priv->selected_parent_path = id->parent_path; + if (id->selected_folder == NULL) + priv->selected_folder = NULL; + else + priv->selected_folder = id->selected_folder; + + if (id->parent_path == NULL) + priv->selected_parent_path = NULL; + else + priv->selected_parent_path = id->parent_path; utils_show_select_folder_popup(priv); } @@ -236,6 +336,11 @@ static input_handler _menu_input_handler = { static bool _draw_menu(struct _priv *priv) { + if (priv == NULL) { + _ERR("priv is null. failed draw menu"); + return false; + } + Evas_Object *icon = elm_button_add(priv->base); elm_object_style_set(icon, STYLE_MENU_BTN); @@ -270,9 +375,19 @@ static bool _draw_file_path(struct _priv *priv) { Evas_Object *gengrid = NULL; + if (priv == NULL) { + _ERR("priv is null. failed draw file path"); + return false; + } + gengrid = create_gengrid(priv); - evas_object_show(gengrid); + if (gengrid == NULL) { + _ERR("gengrid is null. failed draw file path"); + return false; + } + + evas_object_show(gengrid); elm_object_part_content_set(priv->base, PART_FILE_PATH, gengrid); return true; -- 2.7.4 From cd7762172de195f955ed42bc81e2dd85c6eca50f Mon Sep 17 00:00:00 2001 From: Kyuho Jo Date: Wed, 11 May 2016 16:53:06 +0900 Subject: [PATCH 6/6] Remove a dependency to capi-base-utils-i18n Because capi-base-utils-i18n is not exist on some TV devices, dependency to capi-base-utils-i18n is removed. Change-Id: Id9079c9ad6be85cf68627af751972f16dfaaf544 Signed-off-by: Kyuho Jo --- CMakeLists.txt | 1 - include/util/fs-util.h | 5 ++--- packaging/org.tizen.myfiles.spec | 1 - src/util/file-attr.c | 6 +++--- 4 files changed, 5 insertions(+), 8 deletions(-) diff --git a/CMakeLists.txt b/CMakeLists.txt index 545661c..d8aa664 100755 --- a/CMakeLists.txt +++ b/CMakeLists.txt @@ -29,7 +29,6 @@ pkg_check_modules(PKGS REQUIRED capi-appfw-package-manager storage capi-content-media-content - capi-base-utils-i18n capi-media-metadata-extractor capi-content-mime-type libtzplatform-config diff --git a/include/util/fs-util.h b/include/util/fs-util.h index b36628f..b2f1ed7 100755 --- a/include/util/fs-util.h +++ b/include/util/fs-util.h @@ -28,7 +28,6 @@ #include #include #include -#include #include #include #include @@ -299,7 +298,7 @@ typedef struct _FS_NODE_INFO fsNodeInfo; struct _FS_NODE_INFO { char *path; char *name; - i18n_udate date; + double date; fsFileType type; int storage_type; int list_type; @@ -371,7 +370,7 @@ int mf_file_attr_get_logical_path_by_full(const char *full_path, char **path); 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); -int mf_file_attr_get_file_mdate(const char *filename, i18n_udate *date); +int mf_file_attr_get_file_mdate(const char *filename, double *date); int mf_file_attr_media_has_video(const char *filename); int mf_file_attr_get_file_size(const char *filename, off_t *size); int mf_file_attr_get_file_icon(const char *file_path, int *error_code, int view_type, char **thumbnail, media_info_h *media_info); diff --git a/packaging/org.tizen.myfiles.spec b/packaging/org.tizen.myfiles.spec index 32e9003..65fe8c9 100755 --- a/packaging/org.tizen.myfiles.spec +++ b/packaging/org.tizen.myfiles.spec @@ -18,7 +18,6 @@ BuildRequires: pkgconfig(capi-appfw-package-manager) BuildRequires: pkgconfig(storage) BuildRequires: pkgconfig(capi-appfw-package-manager) BuildRequires: pkgconfig(capi-content-media-content) -BuildRequires: pkgconfig(capi-base-utils-i18n) BuildRequires: pkgconfig(capi-content-mime-type) BuildRequires: pkgconfig(capi-media-metadata-extractor) BuildRequires: pkgconfig(libtzplatform-config) diff --git a/src/util/file-attr.c b/src/util/file-attr.c index 39971c2..8070eb3 100755 --- a/src/util/file-attr.c +++ b/src/util/file-attr.c @@ -605,14 +605,14 @@ int mf_file_attr_get_file_category(const char *filepath, fsFileType * category) ** Get file size and last modified date by file path ** *********************/ -int mf_file_attr_get_file_mdate(const char *filename, i18n_udate *date) +int mf_file_attr_get_file_mdate(const char *filename, double *date) { struct stat statbuf; if (stat(filename, &statbuf) == -1) return MYFILE_ERR_GET_STAT_FAIL; time_t tempdate = statbuf.st_mtime; - *date = (i18n_udate) tempdate * MF_UDATE_NUM; + *date = (double) tempdate * MF_UDATE_NUM; return MYFILE_ERR_NONE; } @@ -637,7 +637,7 @@ int mf_file_attr_get_file_stat(const char *filename, fsNodeInfo **node) time_t tempdate = statbuf.st_mtime; (*node)->size = statbuf.st_size; - (*node)->date = (i18n_udate) tempdate * MF_UDATE_NUM; + (*node)->date = (double) tempdate * MF_UDATE_NUM; return MYFILE_ERR_NONE; } -- 2.7.4