From 9e5eed2afa86560a00b780b4deb16ed7da0895aa Mon Sep 17 00:00:00 2001 From: Sehong Na Date: Sat, 31 May 2014 12:55:44 +0900 Subject: [PATCH 1/1] Initialize Tizen 2.3 --- .readme | 1 + 03_mainmenu_icon_notes.png | Bin 0 -> 11233 bytes CMakeLists.txt | 109 + INSTALL | 33 + LICENSE | 206 ++ NOTICE | 3 + debian/changelog | 2503 ++++++++++++++++++++++ debian/com.samsung.memo.install.in | 7 + debian/com.samsung.memo.postinst.in | 7 + debian/compat | 1 + debian/control | 19 + debian/dirs | 2 + debian/docs | 1 + debian/rules | 117 + edc/common.edc | 85 + edc/doodle_editor.edc | 128 ++ edc/doodle_viewer.edc | 69 + edc/edit_list.edc | 113 + edc/edit_tool.edc | 100 + edc/list.edc | 128 ++ edc/text_editor.edc | 67 + edc/text_viewer.edc | 30 + extend/extended-edc.h | 363 ++++ extend/extended-elm.c | 438 ++++ extend/extended-elm.h | 44 + extend/gravel.h | 60 + extend/supplement.c | 90 + extend/supplement.h | 59 + images/00_search_input_field_bg.png | Bin 0 -> 366 bytes images/01_header_icon_add.png | Bin 0 -> 2999 bytes images/01_header_icon_cancel.png | Bin 0 -> 2980 bytes images/01_header_icon_delete.png | Bin 0 -> 3072 bytes images/01_header_icon_done.png | Bin 0 -> 3007 bytes images/01_header_icon_edit.png | Bin 0 -> 3049 bytes images/01_header_icon_others.png | Bin 0 -> 2934 bytes include/memo-assist.h | 89 + include/memo-genlist.h | 47 + include/memo.h | 89 + include/memo_autolink.h | 44 + include/memo_doodle_editor.h | 28 + include/memo_log.h | 39 + include/memo_string.h | 69 + include/memo_text_editor.h | 28 + include/memo_ug.h | 51 + memo.edc | 30 + org.tizen.memo.manifest | 13 + org.tizen.memo.png | Bin 0 -> 57662 bytes org.tizen.memo.rule | 23 + org.tizen.memo.xml | 60 + packaging/org.tizen.memo.spec | 71 + po/CMakeLists.txt | 24 + po/POTFILES.in | 8 + po/ar.po | 39 + po/bg.po | 39 + po/ca.po | 39 + po/cs.po | 39 + po/da.po | 39 + po/de_DE.po | 39 + po/el_GR.po | 39 + po/en.po | 39 + po/en_US.po | 39 + po/es_ES.po | 39 + po/fi.po | 39 + po/fr_FR.po | 39 + po/he.po | 39 + po/header.sh | 1 + po/hi.po | 39 + po/hr.po | 39 + po/hu.po | 39 + po/id.po | 39 + po/it_IT.po | 39 + po/ja_JP.po | 39 + po/ko_KR.po | 39 + po/lt.po | 39 + po/lv.po | 39 + po/memo.pot | 85 + po/ms.po | 39 + po/nl_NL.po | 39 + po/no.po | 39 + po/pl.po | 39 + po/pt_PT.po | 39 + po/ro.po | 39 + po/ru_RU.po | 39 + po/sk.po | 39 + po/sl.po | 39 + po/sr.po | 39 + po/sv.po | 39 + po/th.po | 39 + po/tr_TR.po | 39 + po/uk.po | 39 + po/update-po.sh | 60 + po/vi.po | 39 + po/zh_CN.po | 39 + po/zh_HK.po | 39 + po/zh_TW.po | 39 + scripts/copyright | 17 + scripts/float.sh | 28 + scripts/images_strip.sh | 20 + scripts/str.in | 40 + scripts/string.sh | 93 + scripts/temp | 2 + src/memo-assist.c | 671 ++++++ src/memo-genlist.c | 262 +++ src/memo.c | 358 ++++ src/memo_autolink.c | 552 +++++ src/memo_detail.c | 475 ++++ src/memo_doodle_editor.c | 616 ++++++ src/memo_doodle_viewer.c | 282 +++ src/memo_edit.c | 256 +++ src/memo_edit_list.c | 133 ++ src/memo_list.c | 144 ++ src/memo_list_editor.c | 253 +++ src/memo_list_viewer.c | 395 ++++ src/memo_text_editor.c | 492 +++++ src/memo_text_viewer.c | 141 ++ src/memo_ug.c | 376 ++++ theme/CMakeLists.txt | 18 + theme/black/images/00_picker_btn_normal.png | Bin 0 -> 2981 bytes theme/black/images/00_picker_btn_press.png | Bin 0 -> 2986 bytes theme/black/images/P02_icon_color.png | Bin 0 -> 4599 bytes theme/black/images/P02_icon_color_focus.png | Bin 0 -> 4599 bytes theme/black/images/P02_icon_eraser.png | Bin 0 -> 3629 bytes theme/black/images/P02_icon_eraser_press.png | Bin 0 -> 3629 bytes theme/black/images/P02_icon_font_color.png | Bin 0 -> 4021 bytes theme/black/images/P02_icon_font_color_press.png | Bin 0 -> 4021 bytes theme/black/images/P02_icon_font_size.png | Bin 0 -> 3229 bytes theme/black/images/P02_icon_font_size_press.png | Bin 0 -> 3229 bytes theme/black/images/P02_icon_stroke.png | Bin 0 -> 2928 bytes theme/black/images/P02_icon_stroke_press.png | Bin 0 -> 2928 bytes theme/black/memo.edc | 23 + theme/common.edc | 71 + theme/white/images/00_picker_btn_normal.png | Bin 0 -> 3227 bytes theme/white/images/00_picker_btn_press.png | Bin 0 -> 891 bytes theme/white/images/P02_icon_color.png | Bin 0 -> 4261 bytes theme/white/images/P02_icon_color_focus.png | Bin 0 -> 4261 bytes theme/white/images/P02_icon_eraser.png | Bin 0 -> 3301 bytes theme/white/images/P02_icon_eraser_press.png | Bin 0 -> 3252 bytes theme/white/images/P02_icon_font_color.png | Bin 0 -> 3605 bytes theme/white/images/P02_icon_font_color_press.png | Bin 0 -> 3581 bytes theme/white/images/P02_icon_font_size.png | Bin 0 -> 3226 bytes theme/white/images/P02_icon_font_size_press.png | Bin 0 -> 3199 bytes theme/white/images/P02_icon_stroke.png | Bin 0 -> 2944 bytes theme/white/images/P02_icon_stroke_press.png | Bin 0 -> 2924 bytes theme/white/memo.edc | 23 + 144 files changed, 12943 insertions(+) create mode 100644 .readme create mode 100644 03_mainmenu_icon_notes.png create mode 100755 CMakeLists.txt create mode 100644 INSTALL create mode 100644 LICENSE create mode 100644 NOTICE create mode 100755 debian/changelog create mode 100644 debian/com.samsung.memo.install.in create mode 100644 debian/com.samsung.memo.postinst.in create mode 100644 debian/compat create mode 100755 debian/control create mode 100644 debian/dirs create mode 100644 debian/docs create mode 100755 debian/rules create mode 100644 edc/common.edc create mode 100644 edc/doodle_editor.edc create mode 100644 edc/doodle_viewer.edc create mode 100644 edc/edit_list.edc create mode 100644 edc/edit_tool.edc create mode 100644 edc/list.edc create mode 100644 edc/text_editor.edc create mode 100644 edc/text_viewer.edc create mode 100644 extend/extended-edc.h create mode 100644 extend/extended-elm.c create mode 100644 extend/extended-elm.h create mode 100644 extend/gravel.h create mode 100644 extend/supplement.c create mode 100644 extend/supplement.h create mode 100644 images/00_search_input_field_bg.png create mode 100644 images/01_header_icon_add.png create mode 100644 images/01_header_icon_cancel.png create mode 100644 images/01_header_icon_delete.png create mode 100644 images/01_header_icon_done.png create mode 100644 images/01_header_icon_edit.png create mode 100644 images/01_header_icon_others.png create mode 100644 include/memo-assist.h create mode 100644 include/memo-genlist.h create mode 100644 include/memo.h create mode 100644 include/memo_autolink.h create mode 100644 include/memo_doodle_editor.h create mode 100644 include/memo_log.h create mode 100644 include/memo_string.h create mode 100644 include/memo_text_editor.h create mode 100644 include/memo_ug.h create mode 100644 memo.edc create mode 100755 org.tizen.memo.manifest create mode 100755 org.tizen.memo.png create mode 100755 org.tizen.memo.rule create mode 100644 org.tizen.memo.xml create mode 100755 packaging/org.tizen.memo.spec create mode 100644 po/CMakeLists.txt create mode 100644 po/POTFILES.in create mode 100755 po/ar.po create mode 100755 po/bg.po create mode 100755 po/ca.po create mode 100755 po/cs.po create mode 100755 po/da.po create mode 100644 po/de_DE.po create mode 100644 po/el_GR.po create mode 100644 po/en.po create mode 100755 po/en_US.po create mode 100644 po/es_ES.po create mode 100755 po/fi.po create mode 100644 po/fr_FR.po create mode 100755 po/he.po create mode 100755 po/header.sh create mode 100755 po/hi.po create mode 100755 po/hr.po create mode 100755 po/hu.po create mode 100755 po/id.po create mode 100644 po/it_IT.po create mode 100644 po/ja_JP.po create mode 100644 po/ko_KR.po create mode 100755 po/lt.po create mode 100755 po/lv.po create mode 100644 po/memo.pot create mode 100755 po/ms.po create mode 100644 po/nl_NL.po create mode 100755 po/no.po create mode 100755 po/pl.po create mode 100644 po/pt_PT.po create mode 100755 po/ro.po create mode 100644 po/ru_RU.po create mode 100755 po/sk.po create mode 100755 po/sl.po create mode 100755 po/sr.po create mode 100755 po/sv.po create mode 100755 po/th.po create mode 100644 po/tr_TR.po create mode 100755 po/uk.po create mode 100755 po/update-po.sh create mode 100755 po/vi.po create mode 100644 po/zh_CN.po create mode 100644 po/zh_HK.po create mode 100644 po/zh_TW.po create mode 100644 scripts/copyright create mode 100755 scripts/float.sh create mode 100755 scripts/images_strip.sh create mode 100644 scripts/str.in create mode 100644 scripts/string.sh create mode 100644 scripts/temp create mode 100644 src/memo-assist.c create mode 100644 src/memo-genlist.c create mode 100644 src/memo.c create mode 100644 src/memo_autolink.c create mode 100644 src/memo_detail.c create mode 100644 src/memo_doodle_editor.c create mode 100644 src/memo_doodle_viewer.c create mode 100644 src/memo_edit.c create mode 100644 src/memo_edit_list.c create mode 100644 src/memo_list.c create mode 100644 src/memo_list_editor.c create mode 100644 src/memo_list_viewer.c create mode 100644 src/memo_text_editor.c create mode 100644 src/memo_text_viewer.c create mode 100644 src/memo_ug.c create mode 100644 theme/CMakeLists.txt create mode 100644 theme/black/images/00_picker_btn_normal.png create mode 100644 theme/black/images/00_picker_btn_press.png create mode 100644 theme/black/images/P02_icon_color.png create mode 100644 theme/black/images/P02_icon_color_focus.png create mode 100644 theme/black/images/P02_icon_eraser.png create mode 100644 theme/black/images/P02_icon_eraser_press.png create mode 100644 theme/black/images/P02_icon_font_color.png create mode 100644 theme/black/images/P02_icon_font_color_press.png create mode 100644 theme/black/images/P02_icon_font_size.png create mode 100644 theme/black/images/P02_icon_font_size_press.png create mode 100644 theme/black/images/P02_icon_stroke.png create mode 100644 theme/black/images/P02_icon_stroke_press.png create mode 100644 theme/black/memo.edc create mode 100644 theme/common.edc create mode 100644 theme/white/images/00_picker_btn_normal.png create mode 100644 theme/white/images/00_picker_btn_press.png create mode 100644 theme/white/images/P02_icon_color.png create mode 100644 theme/white/images/P02_icon_color_focus.png create mode 100644 theme/white/images/P02_icon_eraser.png create mode 100644 theme/white/images/P02_icon_eraser_press.png create mode 100644 theme/white/images/P02_icon_font_color.png create mode 100644 theme/white/images/P02_icon_font_color_press.png create mode 100644 theme/white/images/P02_icon_font_size.png create mode 100644 theme/white/images/P02_icon_font_size_press.png create mode 100644 theme/white/images/P02_icon_stroke.png create mode 100644 theme/white/images/P02_icon_stroke_press.png create mode 100644 theme/white/memo.edc diff --git a/.readme b/.readme new file mode 100644 index 0000000..8b13789 --- /dev/null +++ b/.readme @@ -0,0 +1 @@ + diff --git a/03_mainmenu_icon_notes.png b/03_mainmenu_icon_notes.png new file mode 100644 index 0000000000000000000000000000000000000000..7d00e15f8277e13f5a07e69553ed75caa2477a62 GIT binary patch literal 11233 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å%K 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 literal 0 HcmV?d00001 diff --git a/CMakeLists.txt b/CMakeLists.txt new file mode 100755 index 0000000..c14f517 --- /dev/null +++ b/CMakeLists.txt @@ -0,0 +1,109 @@ +CMAKE_MINIMUM_REQUIRED(VERSION 2.6) +PROJECT(memo C) + +SET(SRCS extend/supplement.c + extend/extended-elm.c + src/memo.c + src/memo-assist.c + src/memo-genlist.c + src/memo_list.c + src/memo_edit.c + src/memo_edit_list.c + src/memo_list_viewer.c + src/memo_list_editor.c + src/memo_text_viewer.c + src/memo_text_editor.c + src/memo_doodle_viewer.c + src/memo_doodle_editor.c + src/memo_detail.c + src/memo_ug.c + src/memo_autolink.c) + +SET(VENDOR "tizen") +SET(PKGPREFIX "org.${VENDOR}") +SET(PACKAGE ${PROJECT_NAME}) +SET(PKGNAME "${PKGPREFIX}.${PACKAGE}") +SET(PREFIX ${CMAKE_INSTALL_PREFIX}) +SET(BINDIR "${PREFIX}/bin") +SET(RESDIR "${PREFIX}/res") +SET(DATADIR "/opt/usr/apps/org.tizen.memo/data") +SET(LOCALEDIR "${RESDIR}/locale") +SET(ICONDIR "${RESDIR}/images") +SET(EDJDIR "${RESDIR}/edje") +SET(DOODLEDIR "${DATADIR}/doodle") + +IF("${CMAKE_BUILD_TYPE}" STREQUAL "") + SET(CMAKE_BUILD_TYPE "Release") +ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "") +MESSAGE("Build type: ${CMAKE_BUILD_TYPE}") + +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/include) +INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/extend) + +INCLUDE(FindPkgConfig) +pkg_check_modules(pkgs REQUIRED appcore-efl elementary ecore ecore-x ecore-imf ecore-input eina evas edje memo iniparser ui-gadget-1 dlog bundle appsvc capi-appfw-application capi-system-runtime-info) + +FOREACH(flag ${pkgs_CFLAGS}) + SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}") +ENDFOREACH(flag) + +SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -fPIC") +SET(CMAKE_C_FLAGS_DEBUG "-O0 -g") +SET(CMAKE_C_FLAGS_RELEASE "-O2") + +FIND_PROGRAM(UNAME NAMES uname) +EXEC_PROGRAM("${UNAME}" ARGS "-m" OUTPUT_VARIABLE "ARCH") +IF("${ARCH}" STREQUAL "arm") + ADD_DEFINITIONS("-DTARGET") + MESSAGE("add -DTARGET") +ENDIF("${ARCH}" STREQUAL "arm") + +ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"") +ADD_DEFINITIONS("-DPACKAGE_PREFIX=\"${PKGPREFIX}\"") +ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"") +ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"") +ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"") +ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"") +ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"") +ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"") +ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"") +ADD_DEFINITIONS("-DEDJ_DIR=\"${EDJDIR}\"") +ADD_DEFINITIONS("-DEDJ_FILE=\"${EDJDIR}/${PACKAGE}.edj\"") +ADD_DEFINITIONS("-DDOODLEDIR=\"${DOODLEDIR}\"") +ADD_DEFINITIONS("-DMEMO_BUFFER_SIZE=256") +ADD_DEFINITIONS("-DLOG_TAG=\"${PROJECT_NAME}\"") + +SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed") + +ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS}) +TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} "-pie" "-lm -L/usr/lib -licui18n -licuuc -licudata -lm") + +ADD_CUSTOM_TARGET(memo.edj + COMMAND edje_cc -id ${CMAKE_SOURCE_DIR}/images + ${CMAKE_SOURCE_DIR}/memo.edc ${CMAKE_BINARY_DIR}/memo.edj + DEPENDS ${CMAKE_SOURCE_DIR}/memo.edc +) +ADD_DEPENDENCIES(${PROJECT_NAME} memo.edj) + +INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR}) +INSTALL(FILES ${CMAKE_BINARY_DIR}/memo.edj DESTINATION ${EDJDIR}) +INSTALL(DIRECTORY DESTINATION ${DOODLEDIR}) + +# install desktop file & icon +INSTALL(FILES ${CMAKE_BINARY_DIR}/${PKGNAME}.xml DESTINATION /usr/share/packages) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/org.tizen.memo.png DESTINATION /usr/share/icons/default/small) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/images/01_header_icon_edit.png DESTINATION ${ICONDIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/images/01_header_icon_add.png DESTINATION ${ICONDIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/images/01_header_icon_others.png DESTINATION ${ICONDIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/images/01_header_icon_cancel.png DESTINATION ${ICONDIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/images/01_header_icon_done.png DESTINATION ${ICONDIR}) +INSTALL(FILES ${CMAKE_SOURCE_DIR}/images/01_header_icon_delete.png DESTINATION ${ICONDIR}) + +# install SMACK rule file +INSTALL(FILES ${CMAKE_SOURCE_DIR}/${PKGNAME}.rule DESTINATION /etc/smack/accesses.d) + +# i18n +ADD_SUBDIRECTORY(po) +# theme +ADD_SUBDIRECTORY(theme) + diff --git a/INSTALL b/INSTALL new file mode 100644 index 0000000..3f81c54 --- /dev/null +++ b/INSTALL @@ -0,0 +1,33 @@ +1. make the build directory + + ex) + + $ mkdir build + + +2. change the working directory to the build directory + + ex) + + $ cd build + + +3. run 'cmake' + + $ cmake ${SOURCE_DIR} -DCMAKE_INSTALL_PREFIX=/opt/apps/@@PKGNAME@@ + + ex) + + $ cmake .. -DCMAKE_INSTALL_PREFIX=/opt/apps/@@PKGNAME@@ + + or + + $ cmake .. + + +4. make & make install + + ex) + + $ make -j 2 && make install + diff --git a/LICENSE b/LICENSE new file mode 100644 index 0000000..249b868 --- /dev/null +++ b/LICENSE @@ -0,0 +1,206 @@ +Flora License + +Version 1.1, April, 2013 + +http://floralicense.org/license/ + +TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION + +1. Definitions. + +"License" shall mean the terms and conditions for use, reproduction, +and distribution as defined by Sections 1 through 9 of this document. + +"Licensor" shall mean the copyright owner or entity authorized by +the copyright owner that is granting the License. + +"Legal Entity" shall mean the union of the acting entity and +all other entities that control, are controlled by, or are +under common control with that entity. For the purposes of +this definition, "control" means (i) the power, direct or indirect, +to cause the direction or management of such entity, +whether by contract or otherwise, or (ii) ownership of fifty percent (50%) +or more of the outstanding shares, or (iii) beneficial ownership of +such entity. + +"You" (or "Your") shall mean an individual or Legal Entity +exercising permissions granted by this License. + +"Source" form shall mean the preferred form for making modifications, +including but not limited to software source code, documentation source, +and configuration files. + +"Object" form shall mean any form resulting from mechanical +transformation or translation of a Source form, including but +not limited to compiled object code, generated documentation, +and conversions to other media types. + +"Work" shall mean the work of authorship, whether in Source or Object form, +made available under the License, as indicated by a copyright notice +that is included in or attached to the work (an example is provided +in the Appendix below). + +"Derivative Works" shall mean any work, whether in Source or Object form, +that is based on (or derived from) the Work and for which the editorial +revisions, annotations, elaborations, or other modifications represent, +as a whole, an original work of authorship. For the purposes of this License, +Derivative Works shall not include works that remain separable from, +or merely link (or bind by name) to the interfaces of, the Work and +Derivative Works thereof. + +"Contribution" shall mean any work of authorship, including the original +version of the Work and any modifications or additions to that Work or +Derivative Works thereof, that is intentionally submitted to Licensor +for inclusion in the Work by the copyright owner or by an individual or +Legal Entity authorized to submit on behalf of the copyright owner. +For the purposes of this definition, "submitted" means any form of +electronic, verbal, or written communication sent to the Licensor or +its representatives, including but not limited to communication on +electronic mailing lists, source code control systems, and issue +tracking systems that are managed by, or on behalf of, the Licensor +for the purpose of discussing and improving the Work, but excluding +communication that is conspicuously marked or otherwise designated +in writing by the copyright owner as "Not a Contribution." + +"Contributor" shall mean Licensor and any individual or Legal Entity +on behalf of whom a Contribution has been received by Licensor and +subsequently incorporated within the Work. + +"Tizen Certified Platform" shall mean a software platform that complies +with the standards set forth in the Tizen Compliance Specification +and passes the Tizen Compliance Tests as defined from time to time +by the Tizen Technical Steering Group and certified by the Tizen +Association or its designated agent. + +2. Grant of Copyright License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +copyright license to reproduce, prepare Derivative Works of, +publicly display, publicly perform, sublicense, and distribute the +Work and such Derivative Works in Source or Object form. + +3. Grant of Patent License. Subject to the terms and conditions of +this License, each Contributor hereby grants to You a perpetual, +worldwide, non-exclusive, no-charge, royalty-free, irrevocable +(except as stated in this section) patent license to make, have made, +use, offer to sell, sell, import, and otherwise transfer the Work +solely as incorporated into a Tizen Certified Platform, where such +license applies only to those patent claims licensable by such +Contributor that are necessarily infringed by their Contribution(s) +alone or by combination of their Contribution(s) with the Work solely +as incorporated into a Tizen Certified Platform to which such +Contribution(s) was submitted. If You institute patent litigation +against any entity (including a cross-claim or counterclaim +in a lawsuit) alleging that the Work or a Contribution incorporated +within the Work constitutes direct or contributory patent infringement, +then any patent licenses granted to You under this License for that +Work shall terminate as of the date such litigation is filed. + +4. Redistribution. You may reproduce and distribute copies of the +Work or Derivative Works thereof pursuant to the copyright license +above, in any medium, with or without modifications, and in Source or +Object form, provided that You meet the following conditions: + + 1. You must give any other recipients of the Work or Derivative Works + a copy of this License; and + 2. You must cause any modified files to carry prominent notices stating + that You changed the files; and + 3. You must retain, in the Source form of any Derivative Works that + You distribute, all copyright, patent, trademark, and attribution + notices from the Source form of the Work, excluding those notices + that do not pertain to any part of the Derivative Works; and + 4. If the Work includes a "NOTICE" text file as part of its distribution, + then any Derivative Works that You distribute must include a readable + copy of the attribution notices contained within such NOTICE file, + excluding those notices that do not pertain to any part of + the Derivative Works, in at least one of the following places: + within a NOTICE text file distributed as part of the Derivative Works; + within the Source form or documentation, if provided along with the + Derivative Works; or, within a display generated by the Derivative Works, + if and wherever such third-party notices normally appear. + The contents of the NOTICE file are for informational purposes only + and do not modify the License. You may add Your own attribution notices + within Derivative Works that You distribute, alongside or as an addendum + to the NOTICE text from the Work, provided that such additional attribution + notices cannot be construed as modifying the License. You may add Your own + copyright statement to Your modifications and may provide additional or + different license terms and conditions for use, reproduction, or + distribution of Your modifications, or for any such Derivative Works + as a whole, provided Your use, reproduction, and distribution of + the Work otherwise complies with the conditions stated in this License + and your own copyright statement or terms and conditions do not conflict + the conditions stated in the License including section 3. + +5. Submission of Contributions. Unless You explicitly state otherwise, +any Contribution intentionally submitted for inclusion in the Work +by You to the Licensor shall be under the terms and conditions of +this License, without any additional terms or conditions. +Notwithstanding the above, nothing herein shall supersede or modify +the terms of any separate license agreement you may have executed +with Licensor regarding such Contributions. + +6. Trademarks. This License does not grant permission to use the trade +names, trademarks, service marks, or product names of the Licensor, +except as required for reasonable and customary use in describing the +origin of the Work and reproducing the content of the NOTICE file. + +7. Disclaimer of Warranty. Unless required by applicable law or +agreed to in writing, Licensor provides the Work (and each +Contributor provides its Contributions) on an "AS IS" BASIS, +WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or +implied, including, without limitation, any warranties or conditions +of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A +PARTICULAR PURPOSE. You are solely responsible for determining the +appropriateness of using or redistributing the Work and assume any +risks associated with Your exercise of permissions under this License. + +8. Limitation of Liability. In no event and under no legal theory, +whether in tort (including negligence), contract, or otherwise, +unless required by applicable law (such as deliberate and grossly +negligent acts) or agreed to in writing, shall any Contributor be +liable to You for damages, including any direct, indirect, special, +incidental, or consequential damages of any character arising as a +result of this License or out of the use or inability to use the +Work (including but not limited to damages for loss of goodwill, +work stoppage, computer failure or malfunction, or any and all +other commercial damages or losses), even if such Contributor +has been advised of the possibility of such damages. + +9. Accepting Warranty or Additional Liability. While redistributing +the Work or Derivative Works thereof, You may choose to offer, +and charge a fee for, acceptance of support, warranty, indemnity, +or other liability obligations and/or rights consistent with this +License. However, in accepting such obligations, You may act only +on Your own behalf and on Your sole responsibility, not on behalf +of any other Contributor, and only if You agree to indemnify, +defend, and hold each Contributor harmless for any liability +incurred by, or claims asserted against, such Contributor by reason +of your accepting any such warranty or additional liability. + +END OF TERMS AND CONDITIONS + +APPENDIX: How to apply the Flora License to your work + +To apply the Flora License to your work, attach the following +boilerplate notice, with the fields enclosed by brackets "[]" +replaced with your own identifying information. (Don't include +the brackets!) The text should be enclosed in the appropriate +comment syntax for the file format. We also recommend that a +file or class name and description of purpose be included on the +same "printed page" as the copyright notice for easier +identification within third-party archives. + + Copyright 2013 Samsung Electronics Co., Ltd + + Licensed under the Flora License, Version 1.1 (the "License"); + you may not use this file except in compliance with the License. + You may obtain a copy of the License at + + http://floralicense.org/license/ + + Unless required by applicable law or agreed to in writing, software + distributed under the License is distributed on an "AS IS" BASIS, + WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + See the License for the specific language governing permissions and + limitations under the License. + diff --git a/NOTICE b/NOTICE new file mode 100644 index 0000000..6e010c0 --- /dev/null +++ b/NOTICE @@ -0,0 +1,3 @@ +Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved. +Except as noted, this software is licensed under Flora License, Version 1.1. +Please, see the LICENSE.Flora file for Flora License, Version 1.1 terms and conditions. diff --git a/debian/changelog b/debian/changelog new file mode 100755 index 0000000..b7f35b1 --- /dev/null +++ b/debian/changelog @@ -0,0 +1,2503 @@ +memo (0.2.0-11) unstable; urgency=low + + * [Request]Apply Manifest + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-11 + + -- B.J. Im Thu, 31 Jul 2012 18:01:30 +0900 +memo (0.2.0-10) unstable; urgency=low + + * [Request]Hide memo in menu screen. + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-10 + + -- Wei Hua Sat, 28 Jul 2012 13:58:30 +0800 + +memo (0.2.0-9) unstable; urgency=low + + * Fix Voice call launching problem + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-9 + + -- Goo Lee Sat, 21 Jul 2012 17:57:30 +0800 + +memo (0.2.0-8) unstable; urgency=low + + * [Request] UG API migration . + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-8 + + -- Wei Hua Sat, Jul 2012 14:45:30 +0800 + +memo (0.2.0-7) unstable; urgency=low + + * [Bug] Fix emulator issue about when click the add comment filed in doodle editor view ,the "add comments" text won't disappear. + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-7 + + -- Wei Hua Fri, 13 Jul 2012 09:56:30 +0800 + +memo (0.2.0-6) unstable; urgency=low + + * [Bug] Fix Memo crash when click cancel/save button in livebox. + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-6 + + -- Wei Hua Wed, 11 Jul 2012 19:34:30 +0800 + +memo (0.2.0-5) unstable; urgency=low + + * [Bug] Fix Memo list is displayed after selecting New on PD of memo icon + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-5 + + -- Wei Hua Fri, 6 Jul 2012 17:32:30 +0800 + +memo (0.2.0-4) unstable; urgency=low + + * [Request] Remove discard vconf code. + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-4 + + -- Wei Hua Fri, 8 Jun 2012 15:55:30 +0800 + +memo (0.2.0-3) unstable; urgency=low + + * [Bug] Fix can't save the doodle in obs binary. + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-3 + + -- Wei Hua Thr, 7 Jun 2012 11:35:30 +0800 + +memo (0.2.0-2) unstable; urgency=low + + * [Request] Modify the desktop icon path. + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-2 + + -- Wei Hua Wed, 23 May 2012 10:45:30 +0800 + +memo (0.2.0-1) unstable; urgency=low + + * [Request] Update the sbs code to obs + * Git : slp/apps/m/memo + * Tag : memo_0.2.0-1 + + -- Wei Hua Tue, 22 May 2012 14:33:30 +0800 +memo (0.1.5-92) unstable; urgency=low + + * [Request] Support Dynamic Font Change + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-92 + + -- Wei Hua Tue, 15 May 2012 13:30:00 +0800 + +memo (0.1.5-91) unstable; urgency=low + + * [Request] Support Dynamic Font Change + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-91 + + -- Wei Hua Mon, 14 May 2012 17:37:44 +0800 +memo (0.1.5-90) unstable; urgency=low + + * [S1-2646] Add callback on entry pre-edit changed signal + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-90 + + -- Goo Lee Tue, 24 Apr 2012 13:42:44 +0800 + +memo (0.1.5-89) unstable; urgency=low + + * [S1-1922]IME is opened automatically when entring into detail view + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-89 + + -- Canjiang Lu Mon, 26 Mar 2012 14:48:44 +0800 + +memo (0.1.5-88) unstable; urgency=low + + * Color selector is enabled. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-88 + + -- Canjiang Lu Fri, 23 Mar 2012 11:38:34 +0800 + +memo (0.1.5-87) unstable; urgency=low + + * Upload + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-87 + + -- Canjiang Lu Tue, 20 Mar 2012 13:19:31 +0800 + +memo (0.1.5-86) unstable; urgency=low + + * [Request]Changing SLP Prefix. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-86 + + -- Canjiang Lu Fri, 16 Mar 2012 09:31:46 +0800 + +memo (0.1.5-85) unstable; urgency=low + + * [Request]Elementary v1.0 PKG upload. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-85 + + -- Canjiang Lu Tue, 13 Mar 2012 20:31:39 +0800 + +memo (0.1.5-84) unstable; urgency=low + + * [Request]elm_nocontents related APIs are deprecated. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-84 + + -- Feng Li Tue, 13 Mar 2012 14:05:09 +0800 + +memo (0.1.5-83) unstable; urgency=low + + * [Request]elm_entry_autocapitalization_set API is deprecated. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-83 + + -- Feng Li Mon, 12 Mar 2012 17:00:07 +0800 + +memo (0.1.5-82) unstable; urgency=low + + * [Request]Changeset1 for adding performance log. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-82 + + -- Feng Li Mon, 12 Mar 2012 14:30:07 +0800 + +memo (0.1.5-81) unstable; urgency=low + + * [Request]Changeset1 for add support against share memo with NFC UG. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-81 + + -- Feng Li Fri, 09 Mar 2012 11:30:25 +0800 + +memo (0.1.5-80) unstable; urgency=low + + * [S1-1312]Apply scale in memo share popup box + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-80 + + -- Goo Lee Thu, 08 Mar 2012 17:50:22 +0800 + +memo (0.1.5-79) unstable; urgency=low + + * [Request]Changeset2 for Elm_Editfield and Elm_Searchbar widgets deprecation. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-79 + + -- Feng Li Sat, 03 Mar 2012 16:01:22 +0800 + +memo (0.1.5-78) unstable; urgency=low + + * [Request]upload + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-78 + + -- Canjiang Lu Sat, 03 Mar 2012 09:00:28 +0800 + +memo (0.1.5-77) unstable; urgency=low + + * [Request]Changeset1 for Elm_Editfield and Elm_Searchbar widgets deprecation. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-77 + + -- Xiaolong Ma Fri, 02 Mar 2012 18:03:02 +0800 + +memo (0.1.5-76) unstable; urgency=low + + * [Request]Changeset1 for Elementary API change as EFL migration. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-76 + + -- Feng Li Wed, 15 Feb 2012 18:03:02 +0800 + +memo (0.1.5-75) unstable; urgency=low + + * [Request]CAPI replacement changeset 1. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-75 + + -- Feng Li Tue, 14 Feb 2012 18:01:02 +0800 + +memo (0.1.5-74) unstable; urgency=low + + * [Request]Policy change for icons installation. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-74 + + -- Feng Li Thu, 2 Feb 2012 14:26:02 +0800 + +memo (0.1.5-73) unstable; urgency=low + + * [Request]Voice call launch method chnages from AUL to appsvc. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-73 + + -- Feng Li Mon, 30 Jan 2012 10:34:02 +0800 + +memo (0.1.5-72) unstable; urgency=low + + * [Fix bug][S1-1001]Show empty view when there's no memo. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-72 + + -- Canjiang Lu Sun, 29 Jan 2012 14:19:59 +0800 + +memo (0.1.5-71) unstable; urgency=low + + * [Fix bug]Update list viewer other then destroy and reload to eliminate the flickering screen. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-71 + + -- Canjiang Lu Thu, 19 Jan 2012 08:44:39 +0800 + +memo (0.1.5-70) unstable; urgency=low + + * [Upload]Increase version. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-70 + + -- Canjiang Lu Thu, 05 Jan 2012 11:09:26 +0800 + +memo (0.1.5-69) unstable; urgency=low + + * [Request]Multi-resolution support. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-69 + + -- Canjiang Lu Wed, 04 Jan 2012 14:22:17 +0800 + +memo (0.1.5-68) unstable; urgency=low + + * [Request]API usage of elm_genlist updated. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-68 + + -- Canjiang Lu Thu, 29 Dec 2011 15:51:22 +0800 + +memo (0.1.5-67) unstable; urgency=low + + * [Request]Remove dependency of libaccount-svc. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-67 + + -- Canjiang Lu Tue, 27 Dec 2011 15:08:31 +0800 + +memo (0.1.5-66) unstable; urgency=low + + * [Bug]Update title of edit view with i18n string + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-66 + + -- Canjiang Lu Mon, 26 Dec 2011 16:17:07 +0800 + +memo (0.1.5-65) unstable; urgency=low + + * [Upload]Remove deprecated header files. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-65 + + -- Canjiang Lu Tue, 20 Dec 2011 11:18:46 +0800 + +memo (0.1.5-64) unstable; urgency=low + + * [PKG upload]update version and upload + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-64 + + -- Canjiang Lu Mon, 19 Dec 2011 16:02:09 +0800 + +memo (0.1.5-63) unstable; urgency=low + + * [Bug]Text content of voice-talk isn't passed into memo editor. + * Git : slp/apps/m/memo + * Tag : memo_0.1.5-63 + + -- Canjiang Lu Thu, 08 Dec 2011 09:13:10 +0800 + +memo (0.1.5-62) unstable; urgency=low + + * [Bug]Markup tag of comment displayed directly in list view. Save comment with utf8 encoding. + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-62 + + -- Canjiang Lu Tue, 06 Dec 2011 14:24:35 +0800 + +memo (0.1.5-61) unstable; urgency=low + + * [Bug]Titles of some buttons are not in line with UI guideline. + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-61 + + -- Canjiang Lu Sat, 03 Dec 2011 15:21:07 +0800 + +memo (0.1.5-60) unstable; urgency=low + + * only pure text can be pasted into entry(editfield, searchbar) with new introduced API elm_entry_cnp_mode_set + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-60 + + -- Canjiang Lu Thu, 01 Dec 2011 15:48:24 +0800 + +memo (0.1.5-59) unstable; urgency=low + + * customized desktop icon from emulator/target + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-59 + + -- Canjiang Lu Fri, 25 Nov 2011 13:14:06 +0800 + +memo (0.1.5-58) unstable; urgency=low + + * [CQ][H0100137227]use 1 pixel for bottom margin of genlist + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-58 + + -- Canjiang Lu Wed, 23 Nov 2011 14:30:43 +0800 + +memo (0.1.5-57) unstable; urgency=low + + * [CQ][H0100137310]customized border color for font/stroke color selector + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-57 + + -- Canjiang Lu Wed, 23 Nov 2011 13:49:05 +0800 + +memo (0.1.5-56) unstable; urgency=low + + * [CQ][H0100136706]Useless area between Options list and Close button in Share pop-up + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-56 + + -- Canjiang Lu Tue, 22 Nov 2011 12:03:41 +0800 + +memo (0.1.5-55) unstable; urgency=low + + * remove unnecessary ecore_idler, since popup and imf hide effect do not conflict anymore + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-55 + + -- Canjiang Lu Mon, 21 Nov 2011 13:37:47 +0800 + +memo (0.1.5-54) unstable; urgency=low + + * [fix bug]H0100137141, use win as parent of popup to prevent mouse events received by cancel button + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-54 + + -- Canjiang Lu Mon, 21 Nov 2011 11:38:32 +0800 + +memo (0.1.5-53) unstable; urgency=low + + * remove font info of paste content using Elm_Entry_Filter + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-53 + + -- Canjiang Lu Sat, 19 Nov 2011 16:06:21 +0800 + +memo (0.1.5-52) unstable; urgency=low + + * font attribute will be respected only with font_respect field of memo_data_t as 1 + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-52 + + -- Canjiang Lu Sat, 19 Nov 2011 10:41:36 +0800 + +memo (0.1.5-51) unstable; urgency=low + + * [list view]respect for font color attribute of each record + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-51 + + -- Canjiang Lu Thu, 17 Nov 2011 08:20:48 +0800 + +memo (0.1.5-50) unstable; urgency=low + + * make item class of autolink popup permanently + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-50 + + -- Canjiang Lu Wed, 16 Nov 2011 17:24:54 +0800 + +memo (0.1.5-49) unstable; urgency=low + + * ug effect update + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-49 + + -- Canjiang Lu Mon, 14 Nov 2011 17:21:16 +0800 + +memo (0.1.5-48) unstable; urgency=low + + * [fix bug]H0100136703, adjust font size of time + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-48 + + -- Canjiang Lu Thu, 10 Nov 2011 09:19:22 +0800 + +memo (0.1.5-47) unstable; urgency=low + + * naviframe layout update + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-47 + + -- Canjiang Lu Wed, 09 Nov 2011 10:57:09 +0800 + +memo (0.1.5-46) unstable; urgency=low + + * [fix bug]H0100136581, H0100136582, unselect genlist item when mouse up + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-46 + + -- Canjiang Lu Wed, 09 Nov 2011 09:50:53 +0800 + +memo (0.1.5-45) unstable; urgency=low + + * send update notificaion when doodle saved + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-45 + + -- Canjiang Lu Sat, 05 Nov 2011 14:24:36 +0800 + +memo (0.1.5-44) unstable; urgency=low + + * remove C99 comment + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-44 + + -- Canjiang Lu Sat, 05 Nov 2011 11:23:56 +0800 + +memo (0.1.5-43) unstable; urgency=low + + * fix height of genlist item + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-43 + + -- Canjiang Lu Sat, 29 Oct 2011 14:25:32 +0800 + +memo (0.1.5-42) unstable; urgency=low + + * Fix CQ defect H0100135931 + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-42 + + -- Goo Lee Fri, 28 Oct 2011 16:45:16 +0800 + +memo (0.1.5-41) unstable; urgency=low + + * black theme as default + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-41 + + -- Canjiang Lu Fri, 28 Oct 2011 09:37:16 +0800 + +memo (0.1.5-40) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-40 + + -- Canjiang Lu Thu, 27 Oct 2011 16:07:39 +0800 + +memo (0.1.5-39) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-39 + + -- Canjiang Lu Wed, 26 Oct 2011 14:06:10 +0800 + +memo (0.1.5-38) unstable; urgency=low + + * set default font color of editfield as black + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-38 + + -- Canjiang Lu Wed, 26 Oct 2011 10:47:47 +0800 + +memo (0.1.5-37) unstable; urgency=low + + * reserve information of previous page when push content into naviframe + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-37 + + -- Canjiang Lu Thu, 20 Oct 2011 15:00:24 +0800 + +memo (0.1.5-36) unstable; urgency=low + + * copyright for edc + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-36 + + -- Canjiang Lu Wed, 19 Oct 2011 14:56:46 +0800 + +memo (0.1.5-35) unstable; urgency=low + + * copyright update + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-35 + + -- Canjiang Lu Wed, 19 Oct 2011 14:37:28 +0800 + +memo (0.1.5-34) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-34 + + -- Canjiang Lu Wed, 19 Oct 2011 13:16:59 +0800 + +memo (0.1.5-33) unstable; urgency=low + + * desktop icon update + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-33 + + -- Canjiang Lu Wed, 19 Oct 2011 10:28:02 +0800 + +memo (0.1.5-32) unstable; urgency=low + + * Enlarge default edit font size. + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.5-32 + + -- Yang Qing Mon, 17 Oct 2011 14:54:53 +0800 + +memo (0.1.5-31) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-31 + + -- Canjiang Lu Wed, 12 Oct 2011 16:41:00 +0800 + +memo (0.1.5-30) unstable; urgency=low + + * disable icon of navigation buttons + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-30 + + -- Canjiang Lu Wed, 12 Oct 2011 10:23:08 +0800 + +memo (0.1.5-29) unstable; urgency=low + + * adjust height of searchbar + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-29 + + -- Canjiang Lu Tue, 11 Oct 2011 13:16:40 +0800 + +memo (0.1.5-28) unstable; urgency=low + + * HD black theme check + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-28 + + -- Canjiang Lu Tue, 11 Oct 2011 09:39:02 +0800 + +memo (0.1.5-27) unstable; urgency=low + + * make item class of popup permanently + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-27 + + -- Canjiang Lu Mon, 10 Oct 2011 14:45:05 +0800 + +memo (0.1.5-26) unstable; urgency=low + + * HD layout + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-26 + + -- Canjiang Lu Mon, 10 Oct 2011 10:25:53 +0800 + +memo (0.1.5-25) unstable; urgency=low + + * launch twitter with appsvc + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-25 + + -- Canjiang Lu Thu, 06 Oct 2011 13:36:46 +0800 + +memo (0.1.5-24) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-24 + + -- Canjiang Lu Thu, 06 Oct 2011 10:48:32 +0800 + +memo (0.1.5-23) unstable; urgency=low + + * [fix bug]H0100134010, remove end-key handler + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-23 + + -- Canjiang Lu Mon, 26 Sep 2011 12:57:12 +0800 + +memo (0.1.5-22) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-22 + + -- Canjiang Lu Wed, 21 Sep 2011 13:25:37 +0800 + +memo (0.1.5-21) unstable; urgency=low + + * [font size/color selector]set background as black when in black theme + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-21 + + -- Canjiang Lu Tue, 20 Sep 2011 13:24:18 +0800 + +memo (0.1.5-20) unstable; urgency=low + + * package size optimize + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-20 + + -- Canjiang Lu Tue, 20 Sep 2011 08:55:53 +0800 + +memo (0.1.5-19) unstable; urgency=low + + * mark memo as uninstallable + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-19 + + -- Canjiang Lu Fri, 16 Sep 2011 10:08:33 +0800 + +memo (0.1.5-18) unstable; urgency=low + + * memo_search_data prototype changed + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-18 + + -- Canjiang Lu Tue, 06 Sep 2011 11:18:10 +0800 + +memo (0.1.5-17) unstable; urgency=low + + * acquire user confirmation when shift between text/draw mode if record already been modified + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-17 + + -- Canjiang Lu Sat, 03 Sep 2011 14:12:59 +0800 + +memo (0.1.5-16) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-16 + + -- Canjiang Lu Thu, 01 Sep 2011 10:53:31 +0800 + +memo (0.1.5-15) unstable; urgency=low + + * [text viewer]enable context menu + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-15 + + -- Canjiang Lu Wed, 31 Aug 2011 16:30:21 +0800 + +memo (0.1.5-14) unstable; urgency=low + + * [fix bug]H0100132498, use vconf to monitor data modification from external app + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-14 + + -- Canjiang Lu Wed, 31 Aug 2011 10:29:35 +0800 + +memo (0.1.5-13) unstable; urgency=low + + * set name of edj file as memo + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-13 + + -- Canjiang Lu Tue, 30 Aug 2011 10:32:15 +0800 + +memo (0.1.5-12) unstable; urgency=low + + * whitespace of korean character may disappear sometimes + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-12 + + -- Canjiang Lu Thu, 25 Aug 2011 17:01:21 +0800 + +memo (0.1.5-11) unstable; urgency=low + + * add back button in first view + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-11 + + -- Canjiang Lu Wed, 24 Aug 2011 10:23:37 +0800 + +memo (0.1.5-10) unstable; urgency=low + + * close memo when database modified by external application(kies) + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-10 + + -- Canjiang Lu Tue, 23 Aug 2011 13:27:08 +0800 + +memo (0.1.5-9) unstable; urgency=low + + * remove restriction of 128 bytes of autolink information + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-9 + + -- Canjiang Lu Fri, 12 Aug 2011 14:55:28 +0800 + +memo (0.1.5-8) unstable; urgency=low + + * [text editor]enable auto panel of imf + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-8 + + -- Canjiang Lu Fri, 05 Aug 2011 16:28:39 +0800 + +memo (0.1.5-7) unstable; urgency=low + + * NBeat layout update + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-7 + + -- Canjiang Lu Mon, 01 Aug 2011 14:25:53 +0800 + +memo (0.1.5-6) unstable; urgency=low + + * remove layout main of each view + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-6 + + -- Canjiang Lu Fri, 29 Jul 2011 10:42:21 +0800 + +memo (0.1.5-5) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-5 + + -- Canjiang Lu Wed, 27 Jul 2011 08:18:54 +0800 + +memo (0.1.5-4) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-4 + + -- Canjiang Lu Tue, 26 Jul 2011 14:04:01 +0800 + +memo (0.1.5-3) unstable; urgency=low + + * enable share option of detail view + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-3 + + -- Canjiang Lu Mon, 25 Jul 2011 11:02:17 +0800 + +memo (0.1.5-2) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-2 + + -- Canjiang Lu Thu, 21 Jul 2011 11:45:19 +0800 + +memo (0.1.5-1) unstable; urgency=low + + * efl update + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-1 + + -- Canjiang Lu Thu, 21 Jul 2011 11:10:00 +0800 + +memo (0.1.5-0) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.5-0 + + -- Canjiang Lu Thu, 21 Jul 2011 10:47:56 +0800 + +memo (0.1.4-99) unstable; urgency=low + + * adjust dependency + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-99 + + -- Canjiang Lu Wed, 20 Jul 2011 11:41:16 +0800 + +memo (0.1.4-98) unstable; urgency=low + + * apply default state of Option header + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-98 + + -- Canjiang Lu Mon, 18 Jul 2011 09:54:58 +0800 + +memo (0.1.4-97) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-97 + + -- Canjiang Lu Mon, 18 Jul 2011 08:58:56 +0800 + +memo (0.1.4-96) unstable; urgency=low + + * adjust layout of color selector + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-96 + + -- Canjiang Lu Wed, 13 Jul 2011 15:30:23 +0800 + +memo (0.1.4-95) unstable; urgency=low + + * UG hide/show effect update + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-95 + + -- Canjiang Lu Wed, 13 Jul 2011 08:52:54 +0800 + +memo (0.1.4-94) unstable; urgency=low + + * remove effect when launch edit view as init view + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-94 + + -- Canjiang Lu Tue, 12 Jul 2011 11:43:16 +0800 + +memo (0.1.4-93) unstable; urgency=low + + * seperator of email/message changed + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-93 + + -- Canjiang Lu Fri, 08 Jul 2011 10:45:58 +0800 + +memo (0.1.4-92) unstable; urgency=low + + * appcore_get_timeformat applied + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-92 + + -- Canjiang Lu Wed, 29 Jun 2011 15:42:48 +0800 + +memo (0.1.4-91) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-91 + + -- Canjiang Lu Tue, 28 Jun 2011 15:23:11 +0800 + +memo (0.1.4-90) unstable; urgency=low + + * center alignment of navigator buttons + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-90 + + -- Canjiang Lu Tue, 28 Jun 2011 11:40:25 +0800 + +memo (0.1.4-89) unstable; urgency=low + + * adjust genlist style of popup + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-89 + + -- Canjiang Lu Fri, 24 Jun 2011 13:52:27 +0800 + +memo (0.1.4-88) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-88 + + -- Canjiang Lu Wed, 22 Jun 2011 14:58:03 +0800 + +memo (0.1.4-87) unstable; urgency=low + + * i18n, adjust time format by udatpg_getBestPattern + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-87 + + -- Canjiang Lu Mon, 20 Jun 2011 13:11:03 +0800 + +memo (0.1.4-86) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-86 + + -- Canjiang Lu Mon, 20 Jun 2011 09:44:28 +0800 + +memo (0.1.4-85) unstable; urgency=low + + * [fix crash]56995, remove usage of elm_conform + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-85 + + -- Canjiang Lu Thu, 09 Jun 2011 16:17:44 +0800 + +memo (0.1.4-84) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-84 + + -- Canjiang Lu Wed, 08 Jun 2011 10:18:00 +0800 + +memo (0.1.4-83) unstable; urgency=low + + * [fix bug]H0100127570,H0100127571 + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-83 + + -- Canjiang Lu Tue, 31 May 2011 14:30:36 +0800 + +memo (0.1.4-82) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-82 + + -- Canjiang Lu Mon, 30 May 2011 11:15:10 +0800 + +memo (0.1.4-81) unstable; urgency=low + + * [fix bug]H0100127223, preserve index of record of detail view + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-81 + + -- Canjiang Lu Mon, 23 May 2011 16:27:02 +0800 + +memo (0.1.4-80) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-80 + + -- Canjiang Lu Thu, 19 May 2011 13:56:31 +0800 + +memo (0.1.4-79) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-79 + + -- Canjiang Lu Wed, 18 May 2011 08:28:30 +0800 + +memo (0.1.4-78) unstable; urgency=low + + * update dependency of libicu + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-78 + + -- Canjiang Lu Mon, 16 May 2011 10:36:55 +0800 + +memo (0.1.4-77) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-77 + + -- Canjiang Lu Thu, 12 May 2011 08:36:02 +0800 + +memo (0.1.4-76) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-76 + + -- Canjiang Lu Wed, 11 May 2011 08:45:09 +0800 + +memo (0.1.4-75) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-75 + + -- Canjiang Lu Fri, 06 May 2011 11:05:23 +0800 + +memo (0.1.4-74) unstable; urgency=low + + * Upload version + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-74 + + -- Junho Lee Wed, 04 May 2011 19:24:41 +0900 + +memo (0.1.4-73) unstable; urgency=low + + * Change sns package name in control file. + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-73 + + -- Junho Lee Wed, 04 May 2011 19:22:23 +0900 + +memo (0.1.4-72) unstable; urgency=low + + * [detail]apply transit effect after render flush, otherwise popup for email/phone number cannot open + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-72 + + -- Canjiang Lu Wed, 04 May 2011 10:33:19 +0800 + +memo (0.1.4-71) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-71 + + -- Canjiang Lu Wed, 04 May 2011 10:01:52 +0800 + +memo (0.1.4-70) unstable; urgency=low + + * apply modification of genlist sweep and elm_transit + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-70 + + -- Canjiang Lu Wed, 27 Apr 2011 15:53:49 +0800 + +memo (0.1.4-69) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-69 + + -- Canjiang Lu Tue, 26 Apr 2011 09:54:02 +0800 + +memo (0.1.4-68) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-68 + + -- Canjiang Lu Sat, 23 Apr 2011 11:18:09 +0800 + +memo (0.1.4-67) unstable; urgency=low + + * upload + * Git : 165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-67 + + -- canjiang lu Fri, 22 Apr 2011 09:30:53 +0800 + +memo (0.1.4-66) unstable; urgency=low + + * upload + * Git : git_server:slp/apps/m/memo + * Tag : memo_0.1.4-66 + + -- Canjiang Lu Thu, 21 Apr 2011 11:00:24 +0800 + +memo (0.1.4-65) unstable; urgency=low + + * upload + * Git : git_server:slp/apps/m/memo + * Tag : memo_0.1.4-65 + + -- Canjiang Lu Wed, 20 Apr 2011 14:09:55 +0800 + +memo (0.1.4-64) unstable; urgency=low + + * upload + * Git : git_server:slp/apps/m/memo + * Tag : memo_0.1.4-64 + + -- Canjiang Lu Mon, 18 Apr 2011 13:55:12 +0800 + +memo (0.1.4-63) unstable; urgency=low + + * upload + * Git : 165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-63 + + -- canjiang lu Wed, 13 Apr 2011 16:14:27 +0800 + +memo (0.1.4-62) unstable; urgency=low + + * change source name to memo + * Git : 165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-62 + + -- canjiang lu Tue, 12 Apr 2011 08:50:20 +0800 + +memo (0.1.4-61) unstable; urgency=low + + * upload + * Git : 165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-61 + + -- canjiang lu Sat, 09 Apr 2011 16:42:53 +0800 + +memo (0.1.4-60) unstable; urgency=low + + * [Upload]Increase a version. + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-60 + + -- Yang Qing Wed, 06 Apr 2011 10:16:35 +0800 + +memo (0.1.4-59) unstable; urgency=low + + * add bytes limitation to searchbar + * Git : 165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-59 + + -- canjiang lu Tue, 05 Apr 2011 15:09:29 +0800 + +memo (0.1.4-58) unstable; urgency=low + + * change source name to memo + * Git : 165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-58 + + -- canjiang lu Sat, 02 Apr 2011 16:53:24 +0800 + +memo (0.1.4-57) unstable; urgency=low + + * upload + * Git : 165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-57 + + -- canjiang lu Sat, 02 Apr 2011 16:43:50 +0800 + +memo (0.1.4-56) unstable; urgency=low + + * [Upload]Increase a version. + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-56 + + -- Yang Qing Fri, 01 Apr 2011 15:52:06 +0800 + +memo (0.1.4-55) unstable; urgency=low + + * [Upload]Complete UI developing. + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-55 + + -- Yang Qing Wed, 30 Mar 2011 16:58:22 +0800 + +memo (0.1.4-54) unstable; urgency=low + + * [Upload][Share]Implement share popup. + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-54 + + -- Yang Qing Mon, 28 Mar 2011 20:19:55 +0800 + +memo (0.1.4-53) unstable; urgency=low + + * [Upload]Increase a version. + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-53 + + -- Yang Qing Mon, 28 Mar 2011 09:04:32 +0800 + +memo (0.1.4-52) unstable; urgency=low + + * [Upload]For nbeat version + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-52 + + -- Yang Qing Wed, 23 Mar 2011 10:25:57 +0800 + +memo (0.1.4-51) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-51 + + -- Yang Qing Mon, 21 Mar 2011 11:13:50 +0800 + +memo (0.1.4-50) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-50 + + -- Yang Qing Thu, 17 Mar 2011 08:53:48 +0800 + +memo (0.1.4-49) unstable; urgency=low + + * [H0100121385]Fix a bug about add comment + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-49 + + -- Yang Qing Tue, 15 Mar 2011 16:39:58 +0800 + +memo (0.1.4-48) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-48 + + -- Yang Qing Mon, 14 Mar 2011 13:31:17 +0800 + +memo (0.1.4-47) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-47 + + -- Yang Qing Fri, 11 Mar 2011 14:54:21 +0800 + +memo (0.1.4-46) unstable; urgency=low + + * increase version for upload + * Git : 165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-46 + + -- canjiang lu Thu, 10 Mar 2011 16:54:55 +0800 + +memo (0.1.4-45) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-45 + + -- Yang Qing Thu, 03 Mar 2011 16:32:25 +0800 + +memo (0.1.4-44) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-44 + + -- Yang Qing Wed, 02 Mar 2011 15:49:25 +0800 + +memo (0.1.4-43) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-43 + + -- Yang Qing Tue, 01 Mar 2011 09:33:16 +0800 + +memo (0.1.4-42) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-42 + + -- Yang Qing Fri, 25 Feb 2011 13:51:41 +0800 + +memo (0.1.4-41) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-41 + + -- Yang Qing Thu, 24 Feb 2011 10:12:04 +0800 + +memo (0.1.4-40) unstable; urgency=low + + * upload + * Git : git@165.213.180.234:slp/apps/m/memo + * Tag : memo_0.1.4-40 + + -- canjiang lu Wed, 23 Feb 2011 14:14:11 +0800 + +memo (0.1.4-39) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-39 + + -- canjiang lu Wed, 23 Feb 2011 11:00:12 +0800 + +memo (0.1.4-38) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-38 + + -- canjiang lu Tue, 22 Feb 2011 16:44:32 +0800 + +memo (0.1.4-36) unstable; urgency=low + + * upload + * Git : git@git_server:slp/apps/m/memo + * Tag : memo_0.1.4-36 + + -- canjiang lu Tue, 22 Feb 2011 16:42:30 +0800 + +memo (0.1.4-35) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-35 + + -- Yang Qing Fri, 18 Feb 2011 16:20:06 +0800 + +memo (0.1.4-34) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-34 + + -- Canjiang Lu Wed, 16 Feb 2011 13:47:07 +0800 + +memo (0.1.4-33) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-33 + + -- Canjiang Lu Tue, 15 Feb 2011 16:57:46 +0800 + +memo (0.1.4-32) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-32 + + -- Canjiang Lu Mon, 14 Feb 2011 13:46:04 +0800 + +memo (0.1.4-31) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-31 + + -- Canjiang Lu Mon, 14 Feb 2011 11:01:16 +0800 + +memo (0.1.4-30) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-30 + + -- Canjiang Lu Sat, 12 Feb 2011 10:13:55 +0800 + +memo (0.1.4-29) unstable; urgency=low + + * Fix width of doodle image in memo ug + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-29 + + -- Canjiang Lu Fri, 11 Feb 2011 21:00:54 +0900 + +memo (0.1.4-28) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-28 + + -- Canjiang Lu Fri, 11 Feb 2011 16:50:21 +0800 + +memo (0.1.4-27) unstable; urgency=low + + * Change line height + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-27 + + -- Junho Lee Fri, 11 Feb 2011 13:11:09 +0900 + +memo (0.1.4-26) unstable; urgency=low + + * Fix memo bug for live magazine + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-26 + + -- Junho Lee Thu, 10 Feb 2011 21:49:20 +0900 + +memo (0.1.4-25) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-25 + + -- Canjiang Lu Thu, 10 Feb 2011 11:38:32 +0800 + +memo (0.1.4-24) unstable; urgency=low + + * Change tile image type for live-magazine + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-24 + + -- Junho Lee Wed, 09 Feb 2011 16:26:43 +0900 + +memo (0.1.4-23) unstable; urgency=low + + * Change icon for new launcher + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-23 + + -- Junho Lee Tue, 08 Feb 2011 21:37:37 +0900 + +memo (0.1.4-22) unstable; urgency=low + + * Change icon for new launcher + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-22 + + -- Junho Lee Tue, 08 Feb 2011 21:00:55 +0900 + +memo (0.1.4-21) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-21 + + -- Canjiang Lu Tue, 08 Feb 2011 15:26:18 +0800 + +memo (0.1.4-20) unstable; urgency=low + + * modify end key behavior + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-20 + + -- Yang Qing Mon, 07 Feb 2011 14:24:30 +0800 + +memo (0.1.4-19) unstable; urgency=low + + * Change icon path + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-19 + + -- Junho Lee Mon, 07 Feb 2011 10:01:19 +0900 + +memo (0.1.4-18) unstable; urgency=low + + * fix a crash when save empty content + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-18 + + -- Yang Qing Sun, 06 Feb 2011 13:47:39 +0800 + +memo (0.1.4-17) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-17 + + -- Canjiang Lu Tue, 01 Feb 2011 15:21:14 +0800 + +memo (0.1.4-16) unstable; urgency=low + + * modify date style & background for live magazine + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-16 + + -- Yang Qing Tue, 01 Feb 2011 13:34:42 +0800 + +memo (0.1.4-15) unstable; urgency=low + + * desktop icon rollback + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-15 + + -- Canjiang Lu Mon, 31 Jan 2011 16:52:10 +0800 + +memo (0.1.4-14) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-14 + + -- Canjiang Lu Mon, 31 Jan 2011 10:55:05 +0800 + +memo (0.1.4-13) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-13 + + -- Canjiang Lu Mon, 31 Jan 2011 08:59:53 +0800 + +memo (0.1.4-12) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-12 + + -- Canjiang Lu Wed, 26 Jan 2011 20:49:57 +0800 + +memo (0.1.4-11) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-11 + + -- Canjiang Lu Wed, 26 Jan 2011 20:26:30 +0800 + +memo (0.1.4-10) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-10 + + -- Canjiang Lu Mon, 24 Jan 2011 10:49:43 +0800 + +memo (0.1.4-9) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-9 + + -- Canjiang Lu Sun, 23 Jan 2011 16:11:18 +0800 + +memo (0.1.4-8) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-8 + + -- Canjiang Lu Thu, 20 Jan 2011 13:53:06 +0800 + +memo (0.1.4-7) unstable; urgency=low + + * Prevent memory leak in memo + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-7 + + -- Junho Lee Wed, 19 Jan 2011 21:43:34 +0900 + +memo (0.1.4-6) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-6 + + -- Canjiang Lu Wed, 19 Jan 2011 15:17:50 +0800 + +memo (0.1.4-5) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.4-5 + + -- Canjiang Lu Wed, 19 Jan 2011 08:49:50 +0800 + +memo (0.1.4-4) unstable; urgency=low + + * comment out code for destroy ad->win_main + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-4 + + -- Junho Lee Tue, 18 Jan 2011 11:36:20 +0900 + +memo (0.1.4-3) unstable; urgency=low + + + * comment out code for destroy ad->win_main + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-3 + + -- Yang Qing Tue, 18 Jan 2011 10:25:05 +0900 + +memo (0.1.4-2) unstable; urgency=low + + * increase a version + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-2 + + -- Yang Qing Mon, 17 Jan 2011 16:53:09 +0800 + +memo (0.1.4-1) unstable; urgency=low + + * upload + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.4-1 + + -- Yang Qing Mon, 17 Jan 2011 10:10:26 +0800 + +memo (0.1.3-99) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-99 + + -- Canjiang Lu Thu, 13 Jan 2011 16:45:44 +0800 + +memo (0.1.3-98) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-98 + + -- Canjiang Lu Thu, 13 Jan 2011 14:18:41 +0800 + +memo (0.1.3-97) unstable; urgency=low + + * calendar aul name changed + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-97 + + -- Yang Qing Thu, 13 Jan 2011 13:28:28 +0800 + +memo (0.1.3-96) unstable; urgency=low + + * increase a version + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-96 + + -- Yang Qing Wed, 12 Jan 2011 14:30:31 +0800 + +memo (0.1.3-95) unstable; urgency=low + + * Disable fakeimage + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-95 + + -- Junho Lee Wed, 12 Jan 2011 13:28:53 +0900 + +memo (0.1.3-94) unstable; urgency=low + + * Increase version + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-94 + + -- Junho Lee Tue, 11 Jan 2011 21:21:20 +0900 + +memo (0.1.3-93) unstable; urgency=low + + * Enable fake image + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-93 + + -- Junho Lee Tue, 11 Jan 2011 16:57:11 +0900 + +memo (0.1.3-92) unstable; urgency=low + + * Using icons instead of +d, +t (for demo) + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-92 + + -- Canjiang Lu Mon, 10 Jan 2011 20:42:11 +0900 + +memo (0.1.3-91) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-91 + + -- Canjiang Lu Mon, 10 Jan 2011 16:09:53 +0800 + +memo (0.1.3-90) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-90 + + -- Canjiang Lu Mon, 10 Jan 2011 14:05:30 +0800 + +memo (0.1.3-89) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-89 + + -- Canjiang Lu Sat, 08 Jan 2011 15:34:33 +0800 + +memo (0.1.3-88) unstable; urgency=low + + * make sure only one entry instance at anytime + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-88 + + -- Junho Lee Wed, 05 Jan 2011 15:24:45 +0900 + +memo (0.1.3-87) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-87 + + -- Canjiang Lu Tue, 04 Jan 2011 17:04:39 +0800 + +memo (0.1.3-86) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-86 + + -- Canjiang Lu Tue, 04 Jan 2011 16:09:36 +0800 + +memo (0.1.3-85) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-85 + + -- Canjiang Lu Wed, 29 Dec 2010 09:47:58 +0800 + +memo (0.1.3-84) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-84 + + -- Yang Qing Wed, 29 Dec 2010 09:46:49 +0800 + +memo (0.1.3-83) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-83 + + -- Yang Qing Tue, 28 Dec 2010 11:05:16 +0800 + +memo (0.1.3-82) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-82 + + -- Canjiang Lu Tue, 28 Dec 2010 10:56:40 +0800 + +memo (0.1.3-81) unstable; urgency=low + + * upload + * Git: git@git_server:slp/apps/m/memo + * Tag: memo_0.1.3-81 + + -- Canjiang Lu Fri, 24 Dec 2010 14:13:23 +0800 + +memo (0.1.3-80) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-80 + + -- Canjiang Lu Tue, 21 Dec 2010 17:27:45 +0800 + +memo (0.1.3-79) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-79 + + -- Canjiang Lu Sat, 18 Dec 2010 20:26:05 +0800 + +memo (0.1.3-78) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-78 + + -- Canjiang Lu Fri, 17 Dec 2010 16:38:29 +0800 + +memo (0.1.3-77) unstable; urgency=low + + * fixed detail view BS + * Git: git@165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-77 + + -- Yang Qing Tue, 14 Dec 2010 16:40:25 +0800 + +memo (0.1.3-76) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-76 + + -- Canjiang Lu Tue, 14 Dec 2010 14:45:35 +0800 + +memo (0.1.3-75) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-75 + + -- Canjiang Lu Tue, 14 Dec 2010 10:44:14 +0800 + +memo (0.1.3-74) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-74 + + -- Canjiang Lu Tue, 14 Dec 2010 10:37:27 +0800 + +memo (0.1.3-73) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-73 + + -- Canjiang Lu Thu, 09 Dec 2010 15:01:13 +0800 + +memo (0.1.3-72) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-72 + + -- Canjiang Lu Thu, 09 Dec 2010 10:15:15 +0800 + +memo (0.1.3-71) unstable; urgency=low + + * Update changelog + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-71 + + -- Junho Lee Wed, 08 Dec 2010 20:43:15 +0900 + +memo (0.1.3-70) unstable; urgency=low + + * upload + * Git: 165.213.180.234:slp/apps/m/memo + * Tag: memo_0.1.3-70 + + -- Canjiang Lu Tue, 07 Dec 2010 14:54:04 +0800 + +memo (0.1.3-69) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-69 + + -- Canjiang Lu Wed, 01 Dec 2010 14:32:48 +0800 + +memo (0.1.3-68) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-68 + + -- Canjiang Lu Wed, 01 Dec 2010 13:20:46 +0800 + +memo (0.1.3-67) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-67 + + -- Canjiang Lu Tue, 30 Nov 2010 17:07:50 +0800 + +memo (0.1.3-66) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-66 + + -- Canjiang Lu Mon, 29 Nov 2010 13:57:51 +0800 + +memo (0.1.3-65) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-65 + + -- Canjiang Lu Fri, 26 Nov 2010 10:25:37 +0800 + +memo (0.1.3-64) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-64 + + -- Canjiang Lu Thu, 25 Nov 2010 14:20:20 +0800 + +memo (0.1.3-63) unstable; urgency=low + + * add -pie option for link + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-63 + + -- Canjiang Lu Thu, 25 Nov 2010 08:41:54 +0800 + +memo (0.1.3-62) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-62 + + -- Canjiang Lu Wed, 24 Nov 2010 13:38:49 +0800 + +memo (0.1.3-61) unstable; urgency=low + + * reupload for build break + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-61 + + -- Canjiang Lu Wed, 24 Nov 2010 08:56:43 +0800 + +memo (0.1.3-60) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-60 + + -- Canjiang Lu Tue, 23 Nov 2010 16:25:29 +0800 + +memo (0.1.3-59) unstable; urgency=low + + * ellipsis mode for label + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-59 + + -- Canjiang Lu Tue, 23 Nov 2010 13:53:01 +0800 + +memo (0.1.3-58) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-58 + + -- Canjiang Lu Mon, 22 Nov 2010 10:36:21 +0800 + +memo (0.1.3-57) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-57 + + -- Canjiang Lu Fri, 19 Nov 2010 14:18:20 +0800 + +memo (0.1.3-56) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-56 + + -- Canjiang Lu Wed, 17 Nov 2010 14:23:35 +0800 + +memo (0.1.3-55) unstable; urgency=low + + * replace entry with label in list view + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-55 + + -- Canjiang Lu Wed, 17 Nov 2010 13:15:53 +0800 + +memo (0.1.3-54) unstable; urgency=low + + * y + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-54 + + -- Canjiang Lu Tue, 16 Nov 2010 17:09:11 +0800 + +memo (0.1.3-53) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-53 + + -- Canjiang Lu Mon, 15 Nov 2010 15:43:21 +0800 + +memo (0.1.3-52) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-52 + + -- Canjiang Lu Sat, 13 Nov 2010 16:38:36 +0800 + +memo (0.1.3-51) unstable; urgency=low + + * add missing file + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-51 + + -- Canjiang Lu Sat, 13 Nov 2010 16:08:50 +0800 + +memo (0.1.3-50) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-50 + + -- Canjiang Lu Sat, 13 Nov 2010 16:04:06 +0800 + +memo (0.1.3-49) unstable; urgency=low + + * + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-49 + + -- Canjiang Lu Thu, 11 Nov 2010 13:52:31 +0800 + +memo (0.1.3-48) unstable; urgency=low + + * enable dbg package + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-48 + + -- Canjiang Lu Thu, 11 Nov 2010 09:25:11 +0800 + +memo (0.1.3-47) unstable; urgency=low + + * [detai view]delay destory in idle slip + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-47 + + -- Canjiang Lu Wed, 10 Nov 2010 13:38:45 +0800 + +memo (0.1.3-46) unstable; urgency=low + + * reupload for build break + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-46 + + -- Canjiang Lu Mon, 08 Nov 2010 13:37:21 +0800 + +memo (0.1.3-45) unstable; urgency=low + + * force change when delete records + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-45 + + -- Canjiang Lu Mon, 08 Nov 2010 11:16:57 +0800 + +memo (0.1.3-44) unstable; urgency=low + + * reupload for build break + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-44 + + -- Canjiang Lu Thu, 04 Nov 2010 10:00:47 +0800 + +memo (0.1.3-43) unstable; urgency=low + + * remove libui-window dependency + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-43 + + -- Canjiang Lu Thu, 04 Nov 2010 09:25:26 +0800 + +memo (0.1.3-42) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-42 + + -- Canjiang Lu Tue, 02 Nov 2010 10:44:52 +0800 + +memo (0.1.3-41) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-41 + + -- Canjiang Lu Fri, 29 Oct 2010 11:19:19 +0800 + +memo (0.1.3-40) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-40 + + -- Canjiang Lu Wed, 27 Oct 2010 16:57:27 +0800 + +memo (0.1.3-39) unstable; urgency=low + + * use po files directly + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-39 + + -- Canjiang Lu Tue, 26 Oct 2010 16:24:15 +0800 + +memo (0.1.3-38) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-38 + + -- Canjiang Lu Tue, 26 Oct 2010 10:12:42 +0800 + +memo (0.1.3-37) unstable; urgency=low + + * Fix uploader email address. + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-37 + + -- Junho Lee Mon, 25 Oct 2010 21:13:16 +0900 + +memo (0.1.3-36) unstable; urgency=low + + * Apply request from IME part(remove defect about IME). + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-36 + + -- Junho Lee Mon, 25 Oct 2010 20:33:38 +0900 + +memo (0.1.3-35) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-35 + + -- Canjiang Lu Fri, 22 Oct 2010 09:12:40 +0800 + +memo (0.1.3-34) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-34 + + -- Canjiang Lu Mon, 18 Oct 2010 14:40:43 +0800 + +memo (0.1.3-33) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-33 + + -- Canjiang Lu Mon, 18 Oct 2010 10:22:02 +0800 + +memo (0.1.3-32) unstable; urgency=low + + * remove sentinel data when record is added + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-32 + + -- Canjiang Lu Mon, 18 Oct 2010 08:47:47 +0800 + +memo (0.1.3-31) unstable; urgency=low + + * optimize memo for over 100 records + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-31 + + -- Canjiang Lu Mon, 18 Oct 2010 08:29:55 +0800 + +memo (0.1.3-30) unstable; urgency=low + + * adjust size of ctxpopup for font/stroke tools + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-30 + + -- Canjiang Lu Thu, 14 Oct 2010 13:52:28 +0800 + +memo (0.1.3-29) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-29 + + -- Canjiang Lu Wed, 13 Oct 2010 16:34:44 +0800 + +memo (0.1.3-28) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-28 + + -- Canjiang Lu Wed, 13 Oct 2010 15:21:36 +0800 + +memo (0.1.3-27) unstable; urgency=low + + * add sentinel record + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-27 + + -- Canjiang Lu Mon, 11 Oct 2010 14:24:19 +0800 + +memo (0.1.3-26) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-26 + + -- Canjiang Lu Sat, 09 Oct 2010 14:56:47 +0800 + +memo (0.1.3-25) unstable; urgency=low + + * scalable ui applied + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-25 + + -- Canjiang Lu Mon, 27 Sep 2010 16:43:33 +0800 + +memo (0.1.3-24) unstable; urgency=low + + * reupload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-24 + + -- Canjiang Lu Sat, 25 Sep 2010 17:28:06 +0800 + +memo (0.1.3-23) unstable; urgency=low + + * recover fake image + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-23 + + -- Canjiang Lu Sat, 25 Sep 2010 15:30:38 +0800 + +memo (0.1.3-22) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-22 + + -- Canjiang Lu Sat, 25 Sep 2010 09:56:11 +0800 + +memo (0.1.3-21) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-21 + + -- Canjiang Lu Sat, 25 Sep 2010 09:24:49 +0800 + +memo (0.1.3-20) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-20 + + -- Canjiang Lu Thu, 23 Sep 2010 16:53:04 +0800 + +memo (0.1.3-19) unstable; urgency=low + + * add scale instruction in desktop file + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-19 + + -- Canjiang Lu Tue, 21 Sep 2010 17:20:08 +0800 + +memo (0.1.3-18) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-18 + + -- Canjiang Lu Mon, 20 Sep 2010 17:53:14 +0800 + +memo (0.1.3-17) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-17 + + -- Canjiang Lu Mon, 20 Sep 2010 17:38:38 +0800 + +memo (0.1.3-16) unstable; urgency=low + + * rename memo->Memo in menuscreen + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-16 + + -- Canjiang Lu Mon, 20 Sep 2010 13:19:09 +0800 + +memo (0.1.3-15) unstable; urgency=low + + * recover cancel button in search view + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-15 + + -- Canjiang Lu Mon, 20 Sep 2010 11:19:20 +0800 + +memo (0.1.3-14) unstable; urgency=low + + * update version + + -- Junho Lee Thu, 16 Sep 2010 20:20:27 +0900 + +memo (0.1.3-13) unstable; urgency=low + + * comment out fake image for demo + + -- Junho Lee Thu, 16 Sep 2010 20:13:44 +0900 + +memo (0.1.3-12) unstable; urgency=low + + * remove Imlib2 + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-12 + + -- Canjiang Lu Thu, 16 Sep 2010 08:47:14 +0800 + +memo (0.1.3-11) unstable; urgency=low + + * capture fake image only in portrait view + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-11 + + -- Canjiang Lu Wed, 15 Sep 2010 16:37:41 +0800 + +memo (0.1.3-10) unstable; urgency=low + + * optimize doodle storage + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-10 + + -- Canjiang Lu Wed, 15 Sep 2010 13:42:16 +0800 + +memo (0.1.3-9) unstable; urgency=low + + * apply new icon + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-9 + + -- Canjiang Lu Wed, 15 Sep 2010 08:54:13 +0800 + +memo (0.1.3-8) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-8 + + -- Canjiang Lu Mon, 13 Sep 2010 13:26:06 +0800 + +memo (0.1.3-7) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-7 + + -- Canjiang Lu Sat, 11 Sep 2010 10:06:12 +0800 + +memo (0.1.3-6) unstable; urgency=low + + * margin of color selector + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-6 + + -- Canjiang Lu Thu, 09 Sep 2010 17:37:45 +0800 + +memo (0.1.3-5) unstable; urgency=low + + * default detail view in landscape mode + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-5 + + -- Canjiang Lu Thu, 09 Sep 2010 17:13:04 +0800 + +memo (0.1.3-4) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-4 + + -- Canjiang Lu Thu, 09 Sep 2010 14:33:38 +0800 + +memo (0.1.3-3) unstable; urgency=low + + * [fix bug]kessl00000448 + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-3 + + -- Canjiang Lu Wed, 08 Sep 2010 09:49:27 +0800 + +memo (0.1.3-2) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-2 + + -- Canjiang Lu Sat, 04 Sep 2010 16:08:34 +0800 + +memo (0.1.3-1) unstable; urgency=low + + * update version + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-1 + + -- Canjiang Lu Thu, 02 Sep 2010 14:34:10 +0800 + +memo (0.1.3-0) unstable; urgency=low + + * version update + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.3-0 + + -- Canjiang Lu Thu, 02 Sep 2010 14:11:47 +0800 + +memo (0.1.2-99) unstable; urgency=low + + * fix build error + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-99 + + -- Canjiang Lu Thu, 02 Sep 2010 12:11:47 +0800 + +memo (0.1.2-98) unstable; urgency=low + + * remove smemo.db + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-98 + + -- Canjiang Lu Thu, 02 Sep 2010 11:12:00 +0800 + +memo (0.1.2-97) unstable; urgency=low + + * [edit list view]select info + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-97 + + -- Canjiang Lu Tue, 31 Aug 2010 15:13:06 +0800 + +memo (0.1.2-96) unstable; urgency=low + + * fake image + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-96 + + -- Canjiang Lu Sat, 28 Aug 2010 14:55:56 +0800 + +memo (0.1.2-95) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-95 + + -- Canjiang Lu Thu, 26 Aug 2010 09:42:43 +0800 + +memo (0.1.2-94) unstable; urgency=low + + * pre alpha release + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-94 + + -- Canjiang Lu Thu, 19 Aug 2010 15:54:45 +0800 + +memo (0.1.2-93) unstable; urgency=low + + * upload + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-93 + + -- Canjiang Lu Wed, 18 Aug 2010 13:58:18 +0800 + +memo (0.1.2-92) unstable; urgency=low + + * [upload] + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-92 + + -- Canjiang Lu Tue, 17 Aug 2010 17:31:57 +0800 + +memo (0.1.2-91) unstable; urgency=low + + * [upload] + * Git: 165.213.180.234:/git/slp/apps/memo/ + * Tag: memo_0.1.2-91 + + -- Canjiang Lu Mon, 16 Aug 2010 17:22:00 +0800 + +memo (0.1.2-90) unstable; urgency=low + + * beat release + * Git: 165.213.180.234:/git/slp/apps/memo + * Tag: memo_0.1.2-90 + + -- Canjiang Lu Tue, 10 Aug 2010 17:56:57 +0800 + +memo (0.1.0-1) unstable; urgency=low + + * beat release + * Git: 165.213.180.234:/git/slp/apps/memo + * Tag: memo_0.1.0-1 + + -- Canjiang Lu Tue, 10 Aug 2010 17:10:10 +0800 + +memo (0.1.0) unstable; urgency=low + + * Initial Release. + + -- unknown Fri, 23 Apr 2010 20:30:14 +0900 diff --git a/debian/com.samsung.memo.install.in b/debian/com.samsung.memo.install.in new file mode 100644 index 0000000..4b47199 --- /dev/null +++ b/debian/com.samsung.memo.install.in @@ -0,0 +1,7 @@ +@PREFIX@/bin/* +@PREFIX@/res/locale/* +@PREFIX@/res/icons/* +@PREFIX@/res/edje/* +@PREFIX@/data/* +/opt/share/applications/* +/opt/share/icons/default/small/* diff --git a/debian/com.samsung.memo.postinst.in b/debian/com.samsung.memo.postinst.in new file mode 100644 index 0000000..a15f185 --- /dev/null +++ b/debian/com.samsung.memo.postinst.in @@ -0,0 +1,7 @@ +#!/bin/sh +if [ ${USER} == "root" ] +then + # Change file owner + chown -R 5000:5000 @DATADIR@ +fi + # Change file permissions diff --git a/debian/compat b/debian/compat new file mode 100644 index 0000000..7ed6ff8 --- /dev/null +++ b/debian/compat @@ -0,0 +1 @@ +5 diff --git a/debian/control b/debian/control new file mode 100755 index 0000000..0244db7 --- /dev/null +++ b/debian/control @@ -0,0 +1,19 @@ +Source: memo +Section: devel +Priority: extra +Maintainer: Zhibin Zhou , Canjiang Lu , Feng Li , Wei Hua +Build-Depends: debhelper (>= 5), libappcore-efl-dev, libelm-dev, libecore-dev, libeina-dev, libevas-dev, libedje-dev, libslp-memo-dev, iniparser-dev, libui-gadget-dev, libug-contacts-dev, dlog-dev, libbundle-dev, libicu-dev, libappsvc-dev, libheynoti-dev, capi-appfw-application-dev, capi-system-runtime-info-dev +Standards-Version: 3.7.2 + +Package: com.samsung.memo +Section: utils +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: memo + +Package: com.samsung.memo-dbg +Section: debug +Architecture: any +Depends: ${shlibs:Depends}, ${misc:Depends} +Description: memo for debugging + diff --git a/debian/dirs b/debian/dirs new file mode 100644 index 0000000..ca882bb --- /dev/null +++ b/debian/dirs @@ -0,0 +1,2 @@ +usr/bin +usr/sbin diff --git a/debian/docs b/debian/docs new file mode 100644 index 0000000..a0f0008 --- /dev/null +++ b/debian/docs @@ -0,0 +1 @@ +CMakeLists.txt diff --git a/debian/rules b/debian/rules new file mode 100755 index 0000000..d2aa05f --- /dev/null +++ b/debian/rules @@ -0,0 +1,117 @@ +#!/usr/bin/make -f +# -*- makefile -*- +# Sample debian/rules that uses debhelper. +# This file was originally written by Joey Hess and Craig Small. +# As a special exception, when this file is copied by dh-make into a +# dh-make output file, you may use that output file without restriction. +# This special exception was added by Craig Small in version 0.37 of dh-make. + +# Uncomment this to turn on verbose mode. +#export DH_VERBOSE=1 + +CFLAGS += -Wall -g +LDFLAGS ?= +PREFIX ?= /opt/apps/com.samsung.memo +RESDIR ?= /opt/apps/com.samsung.memo/res +DATADIR ?= /opt/apps/com.samsung.memo/data + +ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS))) + CFLAGS += -O0 +else + CFLAGS += -O2 +endif + +CFLAGS += -fPIC +LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed -Wl,--hash-style=both + +CMAKE_BUILD_DIR ?= $(CURDIR)/cmake_build_tmp + +configure: configure-stamp +configure-stamp: + dh_testdir + # Add here commands to configure the package. + mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && \ + CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX="$(PREFIX)" + + touch configure-stamp + +build: build-stamp + +build-stamp: configure-stamp + dh_testdir + + # Add here commands to compile the package. + cd $(CMAKE_BUILD_DIR) && $(MAKE) + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + cat $$f > $${f%.in}; \ + sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \ + sed -i -e "s#@RESDIR@#$(RESDIR)#g" $${f%.in}; \ + sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \ + done + + touch $@ + +clean: + dh_testdir + dh_testroot + rm -f build-stamp configure-stamp + + # Add here commands to clean up after the build process. + rm -rf $(CMAKE_BUILD_DIR) + + for f in `find $(CURDIR)/debian/ -name "*.in"`; do \ + rm -f $${f%.in}; \ + done + + rm -fr $(CURDIR)/debian/memo-dbg/ + + dh_clean + +install: build + dh_testdir + dh_testroot + dh_clean -k + dh_installdirs + + # Add here commands to install the package into debian/wavplayer. + cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install + + +# Build architecture-independent files here. +binary-indep: build install +# We have nothing to do by default. + +# Build architecture-dependent files here. +binary-arch: build install + dh_testdir + dh_testroot + #dh_installchangelogs + #dh_installdocs + dh_installexamples + dh_install --sourcedir=debian/tmp +# dh_installmenu +# dh_installdebconf +# dh_installlogrotate +# dh_installemacsen +# dh_installpam +# dh_installmime +# dh_python +# dh_installinit +# dh_installcron +# dh_installinfo + dh_installman + dh_link + dh_strip --dbg-package=com.samsung.memo-dbg + dh_compress + dh_fixperms +# dh_perl + dh_makeshlibs + dh_installdeb + dh_shlibdeps + dh_gencontrol + dh_md5sums + dh_builddeb + +binary: binary-indep binary-arch +.PHONY: build clean binary-indep binary-arch binary install configure diff --git a/edc/common.edc b/edc/common.edc new file mode 100644 index 0000000..f872484 --- /dev/null +++ b/edc/common.edc @@ -0,0 +1,85 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#define GENLIST_PART_BOTTOM_LINE \ +part { \ + name: "bottom_line"; \ + type: RECT; \ + mouse_events: 0; \ + description { state: "default" 0.0; \ + min: 0 1; \ + fixed: 0 1; \ + visible: 1; \ + color: 169 169 169 255; \ + rel1 { \ + relative: 0.0 1.0; \ + offset: 0 -1; \ + } \ + } \ +} + +styles +{ + style + { + name: "textblock_style_main"; + base: "font=SLP:style=Roman text_class=slp_roman font_size=42 align=left color=#F9F9F9 wrap=char"; + } +} + +#define PART_TEXT_BLACK_LEFT(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize)\ +PART_TEXT_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize, 0.0, 0.5, 0, 0, 0, 255) + +#define PART_TEXT_GRAY_RIGHT(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize)\ +PART_TEXT_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize, 1.0, 0.5, 85, 70, 58, 255) + +#define PART_TEXT_WHITE_LEFT(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize)\ +PART_TEXT_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize, 0.0, 0.5, 255, 255, 255, 255) + +#define PART_TEXT_GRAY_CENTER(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize)\ +PART_TEXT_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize, 0.5, 0.5, 85, 70, 58, 255) + +#define PART_TEXT_DETAIL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize)\ +PART_TEXT_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize, 0.0, 0.5, 0, 0, 0, 255) + +#define PART_TEXT_DATE(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize)\ +PART_TEXT_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, \ + iText, iFont, iClass, iSize, 0.0, 0.5, 124, 124, 124, 255) + +group{ + name: "empty_layout"; + parts{ + PART_BG("bg") + PART_SWALLOW("elm.swallow.content", "bg") + } +} + +#define IMF_HEIGHT_480_800 538 +#define IMF_HEIGHT_600_1024 550 +#define IMF_HEIGHT_720_1280 580 diff --git a/edc/doodle_editor.edc b/edc/doodle_editor.edc new file mode 100644 index 0000000..b4cc0ce --- /dev/null +++ b/edc/doodle_editor.edc @@ -0,0 +1,128 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#define DOODLE_EDITOR(iName, imf_height)\ +group{\ + name: iName;\ + parts{\ + PART_BG("bg") /* 720 * unknown */\ + PART_V_PIXEL_RECT("top_margin", 16, "bg", 0.0, 0.0)\ + PART_V_PIXEL_RECT("text.bg", 48, "top_margin", 1.0, 0.0)\ + PART_V_PIXEL_RECT("top_margin2", 10, "text.bg", 1.0, 0.0)\ + PART_RECT("_doodle.bg", 0.0, 1.0, "top_margin2", 1.0, 0.0, "bottom_margin2")\ + PART_V_PIXEL_RECT("bottom_margin2", 108, "bottom_margin", 0.0, 1.0)\ + PART_V_PIXEL_RECT("bottom_margin", 86, "bg", 1.0, 1.0)\ + PART_V_PIXEL_RECT("_bottom_margin", 108, "bg", 1.0, 1.0)\ + PART_V_PIXEL_RECT("tool.bg", 0, "bg", 1.0, 1.0)\ + /* layout */\ + PART_V_PIXEL_RECT("doodle.bg", 700, "_doodle.bg", 0.5, 0.5)\ + PART_COLOR_RECT("doodle.bg.color", "doodle.bg", 255, 255, 255, 255)\ + PART_V_PIXEL_RECT("toolbar.bg", 86, "bg", 1.0, 1.0)\ + PART_V_PIXEL_RECT("toolbar.bg.up", 86, "tool.bg", 0.0, 1.0)\ + PART_V_PIXEL_RECT("comment.bg.up", 108, "tool.bg", 0.0, 1.0)\ + PART_V_PIXEL_RECT("comment.bg", 108, "bottom_margin", 0.0, 1.0)\ + PART_V_PIXEL_RECT("comment.bg.down", 108, "bg", 1.0, 1.0)\ + /* content */\ + PART_TEXT_GRAY_RIGHT("elm.text.date", 16/720, 0.0, "text.bg", (720-16)/720, 1.0, "text.bg", "date", "SLP:style=Medium", "slp_medium", 32)\ + PART_SWALLOW_REL("elm.swallow.doodle", 16/720, 0.0, "doodle.bg", (720-16)/720, 1.0, "doodle.bg")\ + PART_SWALLOW("elm.swallow.toolbar", "toolbar.bg")\ + PART_SWALLOW("elm.swallow.tool", "tool.bg")\ + PART_SWALLOW("elm.swallow.comment", "comment.bg")\ + }/* end part */\ + programs {\ + program {\ + name: "init";\ + signal: "load";\ + source: "";\ + script {\ + SCRIPT_CUSTOM_PART("elm.swallow.toolbar");\ + SCRIPT_CUSTOM_PART("elm.swallow.comment");\ + SCRIPT_CUSTOM_PART("_doodle.bg");\ + SCRIPT_CUSTOM_PART("tool.bg");\ + }\ + } /* end program */\ +\ + program {\ + name: "abbrev";\ + signal: "abbrev";\ + source: "elm";\ + script {\ + SCRIPT_SET_VISIBLE(elm.swallow.toolbar, 1);\ + SCRIPT_SET_VISIBLE(elm.swallow.comment, 0);\ + SCRIPT_SET_REL(elm.swallow.toolbar, 0.0, 0.0, "toolbar.bg.up", 1.0, 1.0, "toolbar.bg.up");\ + SCRIPT_SET_REL("_doodle.bg", 0.0, 1.0, "top_margin2", 1.0, 0.0, "bottom_margin2");\ + set_state_val(PART:"tool.bg", STATE_MIN, 0, imf_height);\ + }\ + } /* end program */\ + program {\ + name: "expand";\ + signal: "expand";\ + source: "elm";\ + script {\ + SCRIPT_SET_VISIBLE(elm.swallow.toolbar, 1);\ + SCRIPT_SET_VISIBLE(elm.swallow.comment, 1);\ + SCRIPT_SET_REL(elm.swallow.toolbar, 0.0, 0.0, "toolbar.bg", 1.0, 1.0, "toolbar.bg");\ + SCRIPT_SET_REL(elm.swallow.comment, 0.0, 0.0, "comment.bg", 1.0, 1.0, "comment.bg");\ + SCRIPT_SET_REL("_doodle.bg", 0.0, 1.0, "top_margin2", 1.0, 0.0, "bottom_margin2");\ + set_state_val(PART:"tool.bg", STATE_MIN, 0, 0);\ + }\ + } /* end program */\ + program {\ + name: "comment_abbrev";\ + signal: "abbrev";\ + source: "comment";\ + script {\ + SCRIPT_SET_VISIBLE(elm.swallow.toolbar, 0);\ + SCRIPT_SET_VISIBLE(elm.swallow.comment, 1);\ + SCRIPT_SET_REL(elm.swallow.comment, 0.0, 0.0, "comment.bg.up", 1.0, 1.0, "comment.bg.up");\ + SCRIPT_SET_REL("_doodle.bg", 0.0, 1.0, "top_margin2", 1.0, 0.0, "_bottom_margin");\ + }\ + } /* end program */\ + program {\ + name: "comment_expand";\ + signal: "expand";\ + source: "comment";\ + script {\ + SCRIPT_SET_VISIBLE(elm.swallow.toolbar, 0);\ + SCRIPT_SET_VISIBLE(elm.swallow.comment, 1);\ + SCRIPT_SET_REL(elm.swallow.comment, 0.0, 0.0, "comment.bg.down", 1.0, 1.0, "comment.bg.down");\ + SCRIPT_SET_REL("_doodle.bg", 0.0, 1.0, "top_margin2", 1.0, 0.0, "_bottom_margin");\ + }\ + } /* end program */\ + }/* end programs */\ +} + +DOODLE_EDITOR("doodle_editor_480_800", IMF_HEIGHT_480_800) +DOODLE_EDITOR("doodle_editor_600_1024", IMF_HEIGHT_600_1024) +DOODLE_EDITOR("doodle_editor_720_1280", IMF_HEIGHT_720_1280) + +group{ + name: "doodle_comment"; + images { + image: "00_search_input_field_bg.png" COMP; + } + parts{ + PART_BG("bg") /* 720 * 67 */ + PART_COLOR_RECT("bg.color", "bg", 30, 25, 22, 255) + PART_RECT("image.bg", 16/720, 8/67, "bg", (720-16)/720, (67-9)/67, "bg") + PART_BORDER_IMAGE("image", "image.bg", "00_search_input_field_bg.png", 6, 6, 7, 5) + PART_V_PIXEL_RECT("editfield.bg", 50, "image.bg", 0.5, 0.5) + PART_SWALLOW_REL("elm.swallow.editfield", 10/460, 0.0, "editfield.bg", (460-10)/460, 1.0, "editfield.bg") + }/* end parts */ +}/* end group */ + diff --git a/edc/doodle_viewer.edc b/edc/doodle_viewer.edc new file mode 100644 index 0000000..a867fa2 --- /dev/null +++ b/edc/doodle_viewer.edc @@ -0,0 +1,69 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#define DOODLE_VIEWER(iName, imf_height)\ +group {\ + name: iName;\ + parts{\ + PART_BG("bg") /* 720 * unknown */\ + PART_V_PIXEL_RECT("top_margin", 10, "bg", 0.0, 0.0)\ + PART_V_PIXEL_RECT("text.bg", 48, "top_margin", 1.0, 0.0)\ + PART_V_PIXEL_RECT("top_margin2", 10, "text.bg", 1.0, 0.0)\ + PART_RECT("_doodle.bg", 0.0, 1.0, "top_margin2", 1.0, 0.0, "bottom_margin")\ + PART_V_PIXEL_RECT("bottom_margin", 108, "bg", 1.0, 1.0)\ + /* layout */\ + PART_V_PIXEL_RECT("doodle.bg", 700, "_doodle.bg", 0.5, 0.5)\ + PART_COLOR_RECT("doodle.bg.color", "doodle.bg", 255, 255, 255, 255)\ + PART_V_PIXEL_RECT("comment.bg.up", 108, "bg", 1.0, 1.0)\ + PART_V_PIXEL_RECT("comment.bg", 108, "bg", 1.0, 1.0)\ + /* content */\ + PART_TEXT_GRAY_RIGHT("elm.text.date", 16/720, 0.0, "text.bg", (720-16)/720, 1.0, "text.bg", "date", "SLP:style=Medium", "slp_medium", 32)\ + PART_SWALLOW_REL("elm.swallow.doodle", 16/720, 0.0, "doodle.bg", (720-16)/720, 1.0, "doodle.bg")\ + PART_SWALLOW("elm.swallow.comment", "comment.bg")\ + }/* end part */\ + programs {\ + program {\ + name: "init";\ + signal: "load";\ + source: "";\ + script {\ + SCRIPT_CUSTOM_PART("elm.swallow.comment");\ + }\ + } /* end program */\ + program {\ + name: "comment_abbrev";\ + signal: "abbrev";\ + source: "comment";\ + script {\ + SCRIPT_SET_REL(elm.swallow.comment, 0.0, 0.0, "comment.bg.up", 1.0, 1.0, "comment.bg.up");\ + }\ + } /* end program */\ + program {\ + name: "comment_expand";\ + signal: "expand";\ + source: "comment";\ + script {\ + SCRIPT_SET_REL(elm.swallow.comment, 0.0, 0.0, "comment.bg", 1.0, 1.0, "comment.bg");\ + }\ + } /* end program */\ + }/* end programs */\ +} + +DOODLE_VIEWER("doodle_viewer_480_800", IMF_HEIGHT_480_800) +DOODLE_VIEWER("doodle_viewer_600_1024", IMF_HEIGHT_600_1024) +DOODLE_VIEWER("doodle_viewer_720_1280", IMF_HEIGHT_720_1280) diff --git a/edc/edit_list.edc b/edc/edit_list.edc new file mode 100644 index 0000000..1390634 --- /dev/null +++ b/edc/edit_list.edc @@ -0,0 +1,113 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +group{ + name: "edit_list_frame"; + parts{ + PART_BG("bg") /* 480 x 705 */ + PART_SWALLOW_REL("elm.swallow.select.all", 0.0, 0.0, "bg", 1.0, 66/705, "bg") + PART_SWALLOW_REL("elm.swallow.content", 0.0, 66/705, "bg", 1.0, /* (706-70)/705 */ 1.0, "bg") + }/* end parts */ +}/* end group */ + +group { + name: "edit_list_item_select_all"; + parts { + /* area definition */ + PART_BG("bg"); /* 480 x 66 */ + PART_SWALLOW_REL("elm.swallow.check", 15/480, 8/66, "bg", 65/480, 58/66, "bg"); + PART_TEXT_DETAIL("elm.text.select.all", 75/480, 0.0, "bg", 1.0, 1.0, "bg", "Select all", "SLP", "slp", 44); + PART_V_PIXEL_RECT("bottom.margin", 2, "bg", 1.0, 1.0) + PART_COLOR_RECT("bottom.margin.color", "bottom.margin", 87, 87, 87, 255) + PART_EVENT_RECT("event", "bg") + } /* parts */ +} /* group */ + +#define EDIT_GL_STYLE(iStyle, iX2TextBlock) \ +group { name: "elm/genlist/item/memo/edit/"iStyle"/default"; \ + alias: "elm/genlist/item_odd/memo/edit/"iStyle"/default"; \ + data.item: "stacking" "above"; \ + data.item: "selectraise" "on"; \ + data.item: "texts" "elm.text elm.text.date"; \ + data.item: "contents" "elm.swallow.doodle elm.swallow.check"; \ + data.item: "treesize" "20"; \ + parts { \ + PART_BG("bg") \ + PART_SWALLOW_REL("elm.swallow.check", 16/720, 16/128, "bg", (16+96)/720, (128-16)/128, "bg") \ + part \ + { \ + name: "elm.text"; \ + type: TEXTBLOCK; \ + mouse_events: 1; \ + scale: 1; \ + description \ + { \ + state: "default" 0.0; \ + fixed: 1 0; \ + min: (iX2TextBlock-16-96-16) 56; \ + max: (iX2TextBlock-16-96-16) 56; \ + align: 0 0; \ + rel1 { relative: (16+96+16)/720 16/128; to: "bg"; } \ + rel2 { relative: iX2TextBlock/720 (128-16-32-8)/128; to: "bg"; } \ + text \ + { \ + style: "textblock_style_main"; \ + min: 1 1; \ + } \ + } \ + } \ + PART_TEXT_DATE("elm.text.date", (16+96+16)/720, (128-16-32)/128, "bg", (720-16)/720, (128-16)/128, "bg", "", "SLP:style=Medium","slp_medium", 32) \ + PART_SWALLOW_REL("elm.swallow.doodle", (720-16-96)/720, 16/128, "bg", (720-16)/720, (128-16)/128, "bg") \ + GENLIST_PART_BOTTOM_LINE \ + PART_EVENT_RECT("event", "bg") \ + }/* end parts */ \ + programs {\ + program {\ + name: "init";\ + signal: "load";\ + source: "";\ + script {\ + SCRIPT_CUSTOM_PART(bg);\ + SCRIPT_SET_COLOR(bg, 248, 246, 239, 255);\ + }\ + } /* end program */\ + program \ + {\ + name: "go_active"; \ + signal: "elm,state,selected"; \ + source: "elm"; \ + script {\ + SCRIPT_SET_COLOR(bg, 42, 137, 194, 255);\ + }\ + transition: LINEAR 0.1; \ + } \ + program \ + { \ + name: "go_passive"; \ + signal: "elm,state,unselected"; \ + source: "elm"; \ + script {\ + SCRIPT_SET_COLOR(bg, 248, 246, 239, 255);\ + }\ + transition: LINEAR 0.1; \ + }\ + }\ +} + +EDIT_GL_STYLE("list", (720-16)) +EDIT_GL_STYLE("list_draw", (720-16-96-16)) diff --git a/edc/edit_tool.edc b/edc/edit_tool.edc new file mode 100644 index 0000000..21104b6 --- /dev/null +++ b/edc/edit_tool.edc @@ -0,0 +1,100 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +group{ + name: "color_selector"; + parts{ + PART_BG("bg") + PART_V_PIXEL_RECT("rect.up", 200, "bg", 0.0, 0.0) + PART_PIXEL_RECT("border.bg", (500+6), (160+5), 0.5, 0.5, "rect.up", 0.5, 0.5) + PART_PIXEL_RECT("color.bg", 500, 160, 0.5, 0.5, "rect.up", 0.5, 0.5) + PART_SWALLOW_REL("elm.swallow.color", 0.0, 0.0, "color.bg", 1.0, 1.0, "color.bg") + PART_EVENT_RECT("event", "rect.up") + PART_SWALLOW_REL("elm.swallow.selector", 4/480, 1.0, "rect.up", (480-4)/480, 1.0, "bg") + }/* end parts */ + programs { + program { + name: "init"; + signal: "load"; + source: ""; + script { + SCRIPT_CUSTOM_PART(bg); + SCRIPT_CUSTOM_PART(border.bg); + } + } /* end program */ + program + { + name: "black_theme"; + signal: "black"; + source: "elm"; + script { + SCRIPT_SET_COLOR(bg, 0, 0, 0, 255); + SCRIPT_SET_COLOR(border.bg, 255, 255, 255, 255); + } + } + program + { + name: "white_theme"; + signal: "white"; + source: "elm"; + script { + SCRIPT_SET_COLOR(bg, 255, 255, 255, 255); + SCRIPT_SET_COLOR(border.bg, 0, 0, 0, 255); + } + } + }/* end programs */ +}/* end group */ + +group{ + name: "pencil_size_selector"; + parts{ + PART_BG("bg") + PART_SWALLOW("bg.color", "bg") + PART_RECT("rect.up", 0.0, 0.0, "bg", 1.0, 0.5, "bg") + PART_PIXEL_RECT("pencil.bg", 300, 0, 0.5, 0.5, "rect.up", 0.5, 0.5) + PART_SWALLOW("elm.swallow.pencil", "pencil.bg") + PART_EVENT_RECT("event", "rect.up") + PART_SWALLOW_REL("elm.swallow.selector", 5/480, 0.5, "bg", (480-5)/480, 1.0, "bg") + }/* end parts */ +}/* end group */ + +group{ + name: "font_size_selector"; + parts{ + PART_BG("bg") + PART_SWALLOW("bg.color", "bg") + PART_RECT("rect.up", 0.0, 0.0, "bg", 1.0, 0.5, "bg") + PART_SWALLOW("elm.swallow.label", "rect.up") + PART_EVENT_RECT("event", "rect.up") + PART_SWALLOW_REL("elm.swallow.selector", 5/480, 0.5, "bg", (480-5)/480, 1.0, "bg") + }/* end parts */ +}/* end group */ + +group{ + name: "edit_toolbar"; + parts{ + PART_BG("bg") /* 720 x 86 */ + PART_COLOR_RECT("color", "bg", 204, 204, 204, 255) + PART_SWALLOW_REL("elm.swallow.btn1", (10)/720, 10/86, "bg", (10+74)/720, (86-10)/86, "bg") + PART_SWALLOW_REL("elm.swallow.btn2", (10+16+74)/720, 10/86, "bg", (10+16+74*2)/720, (86-10)/86, "bg") + PART_SWALLOW_REL("elm.swallow.btn3", (10+16*2+74*2)/720, 10/86, "bg", (10+16*2+74*3)/720, (86-10)/86, "bg") + PART_SWALLOW_REL("elm.swallow.btn4", (720-10-160)/720, 10/86, "bg", (720-10)/720, (86-10)/86, "bg") + PART_V_PIXEL_RECT("bottom_margin", 1, "bg", 1.0, 0.0) + PART_COLOR_RECT("bottom_margin_color", "bottom_margin", 204, 204, 204, 255) + }/* end parts */ +}/* end group */ diff --git a/edc/list.edc b/edc/list.edc new file mode 100644 index 0000000..1b81c94 --- /dev/null +++ b/edc/list.edc @@ -0,0 +1,128 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +group{ + name: "list_frame"; + parts{ + PART_BG("bg") /* unknown x 480 */ + PART_SWALLOW_REL("elm.swallow.content", 0.0, 0.0, "bg", 1.0, 1.0, "bg") + PART_SWALLOW_REL("elm.swallow.nocontent", 0.0, 0.0, "bg", 1.0, 1.0, "bg") + }/* end part */ + programs { + program { + name: "init"; + signal: "load"; + source: ""; + script { + SCRIPT_CUSTOM_PART(elm.swallow.nocontent); + } + } /* end program */ + program + { + name: "show_nocontent"; + signal: "show"; + source: "nocontent"; + script { + SCRIPT_SET_VISIBLE(elm.swallow.nocontent, 1); + } + } + program + { + name: "hide_nocontent"; + signal: "hide"; + source: "nocontent"; + script { + SCRIPT_SET_VISIBLE(elm.swallow.nocontent, 0); + } + } + }/* end programs */ +} + +#define GL_STYLE(iStyle, iX2TextBlock) \ +group { name: "elm/genlist/item/memo/"iStyle"/default"; \ + alias: "elm/genlist/item_odd/memo/"iStyle"/default"; \ + alias: "elm/genlist/item_compress/memo/"iStyle"/default"; \ + alias: "elm/genlist/item_compress_odd/memo/"iStyle"/default"; \ + data.item: "texts" "elm.text.date elm.text"; \ + data.item: "contents" "elm.swallow.doodle"; \ + data.item: "allow_slide" "1"; \ + parts { \ + PART_BG("bg") \ + part \ + { \ + name: "elm.text"; \ + type: TEXTBLOCK; \ + mouse_events: 1; \ + scale: 1; \ + description \ + { \ + state: "default" 0.0; \ + fixed: 1 0; \ + min: (iX2TextBlock-16) 56; \ + max: (iX2TextBlock-16) 56; \ + align: 0 0; \ + rel1 { relative: 16/720 16/128; to: "bg"; } \ + rel2 { relative: iX2TextBlock/720 (128-16-32-8)/128; to: "bg"; } \ + text \ + { \ + style: "textblock_style_main"; \ + min: 1 1; \ + } \ + } \ + } \ + PART_TEXT_DATE("elm.text.date", 16/720, (128-16-32)/128, "bg", (720-16)/720, (128-16)/128, "bg", "", "SLP:style=Medium", "slp_medium", 32) \ + PART_SWALLOW_REL("elm.swallow.doodle", (720-16-96)/720, 16/128, "bg", (720-16)/720, (128-16)/128, "bg") \ + /* margin */ \ + GENLIST_PART_BOTTOM_LINE \ + PART_EVENT_RECT("event", "bg") \ + }/* end parts */ \ + programs {\ + program {\ + name: "init";\ + signal: "load";\ + source: "";\ + script {\ + SCRIPT_CUSTOM_PART(bg);\ + SCRIPT_SET_COLOR(bg, 248, 246, 239, 255);\ + }\ + } /* end program */\ + program \ + {\ + name: "go_active"; \ + signal: "elm,state,selected"; \ + source: "elm"; \ + script {\ + SCRIPT_SET_COLOR(bg, 42, 137, 194, 255);\ + }\ + transition: LINEAR 0.1; \ + } \ + program \ + { \ + name: "go_passive"; \ + signal: "elm,state,unselected"; \ + source: "elm"; \ + script {\ + SCRIPT_SET_COLOR(bg, 248, 246, 239, 255);\ + }\ + transition: LINEAR 0.1; \ + }\ + }\ +} + +GL_STYLE("list", (720-16)) +GL_STYLE("list_draw", (720-16-96-16)) diff --git a/edc/text_editor.edc b/edc/text_editor.edc new file mode 100644 index 0000000..fad88d5 --- /dev/null +++ b/edc/text_editor.edc @@ -0,0 +1,67 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#define TEXT_EDITOR(iName, imf_height)\ +group{\ + name: iName;\ + parts{\ + PART_BG_EX("bg", 720, 0) /* 720 * unknown */\ + PART_V_PIXEL_RECT("top_margin", 16, "bg", 0.0, 0.0)\ + PART_V_PIXEL_RECT("text.bg", 48, "top_margin", 1.0, 0.0)\ + PART_V_PIXEL_RECT("top_margin2", 10, "text.bg", 1.0, 0.0)\ + PART_V_PIXEL_RECT("toolbar.bg", 86, "tool.bg", 0.0, 1.0)\ + PART_V_PIXEL_RECT("tool.bg", 0, "bg", 1.0, 1.0)\ + /* content */\ + PART_TEXT_GRAY_RIGHT("elm.text.date", 16/720, 0.0, "text.bg", (720-16)/720, 1.0, "text.bg", "date", "SLP:style=Medium", "slp_medium", 32)\ + PART_SWALLOW_REL("elm.swallow.text", 16/720, 1.0, "top_margin2", 1.0, 0.0, "toolbar.bg")\ + PART_SWALLOW("elm.swallow.toolbar", "toolbar.bg")\ + PART_SWALLOW("elm.swallow.tool", "tool.bg")\ + }/* end part */\ + programs {\ + program {\ + name: "init";\ + signal: "load";\ + source: "";\ + script {\ + SCRIPT_CUSTOM_PART("tool.bg");\ + SCRIPT_CUSTOM_PART("elm.swallow.text");\ + }\ + } /* end program */\ +\ + program {\ + name: "abbrev";\ + signal: "abbrev";\ + source: "elm";\ + script {\ + set_state_val(PART:"tool.bg", STATE_MIN, 0, imf_height);\ + }\ + } /* end program */\ + program {\ + name: "expand";\ + signal: "expand";\ + source: "elm";\ + script {\ + set_state_val(PART:"tool.bg", STATE_MIN, 0, 0);\ + }\ + } /* end program */\ + }/* end programs */\ +} + +TEXT_EDITOR("text_editor_480_800", IMF_HEIGHT_480_800) +TEXT_EDITOR("text_editor_600_1024", IMF_HEIGHT_600_1024) +TEXT_EDITOR("text_editor_720_1280", IMF_HEIGHT_720_1280) diff --git a/edc/text_viewer.edc b/edc/text_viewer.edc new file mode 100644 index 0000000..364c6c0 --- /dev/null +++ b/edc/text_viewer.edc @@ -0,0 +1,30 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +group{ + name: "text_viewer"; + parts{ + PART_BG("bg") /* 480 * unknown */ + PART_V_PIXEL_RECT("top_margin", 10, "bg", 0.0, 0.0) + PART_V_PIXEL_RECT("text.bg", 48, "top_margin", 1.0, 0.0) + PART_V_PIXEL_RECT("top_margin2", 10, "text.bg", 1.0, 0.0) + /* content */ + PART_TEXT_GRAY_RIGHT("elm.text.date", 10/480, 0.0, "text.bg", 470/480, 1.0, "text.bg", "date", "SLP:style=Medium", "slp_medium", 32) + PART_SWALLOW_REL("elm.swallow.text", 10/480, 1.0, "top_margin2", 470/480, 1.0, "bg") + }/* end part */ +} diff --git a/extend/extended-edc.h b/extend/extended-edc.h new file mode 100644 index 0000000..cb536be --- /dev/null +++ b/extend/extended-edc.h @@ -0,0 +1,363 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __EXTENDED_EDC_H__ +#define __EXTENDED_EDC_H__ + +#define PPART PART: +#define PIMAGE IMAGE: + +/***********************************************************************/ +/* size difinition layer */ +#define PART_BG(iName)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + color: 248 246 239 255;\ + } \ +} \ + +#define PART_BG_EX(iName, iMinx, iMiny)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + min: iMinx iMiny;\ + color: 0 0 0 0;\ + } \ +} \ + +#define PART_RECT(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: iR1x iR1y; to: iR1t; } \ + rel2 { relative: iR2x iR2y; to: iR2t; } \ + color: 0 0 0 0;\ + } \ +} \ + +#define PART_V_PIXEL_RECT(iName, size, iTo, iRy, iAy)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + min: 0 size;\ + align: 0.5 iAy;\ + fixed: 0 1;\ + rel1 { relative: 0.0 iRy; to: iTo; } \ + rel2 { relative: 1.0 iRy; to: iTo; } \ + color: 0 0 0 0;\ + } \ +} \ + +#define PART_H_PIXEL_RECT(iName, size, iTo, iRx, iAx)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + min: size 0;\ + align: iAx 0.5;\ + fixed: 1 0;\ + rel1 { relative: iRx 0.0; to: iTo; } \ + rel2 { relative: iRx 1.0; to: iTo; } \ + color: 0 0 0 0;\ + } \ +} \ + +#define PART_PIXEL_RECT(iName, iX, iY, iRx, iRy, iTo, iAx, iAy)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + min: iX iY;\ + align: iAx iAy;\ + fixed: 1 1;\ + rel1 { relative: iRx iRy; to: iTo; } \ + rel2 { relative: iRx iRy; to: iTo; } \ + color: 0 0 0 0;\ + } \ +} \ + + +/* vertical divided rect, index range from 0~N-1 + * iIndex must be immediate integer and expression like (1+2) is not allowed + */ +#define PART_V_DIVID_RECT(iName, iTo, iIndex, iN)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: 0.0 (iIndex%iN)/iN; to: iTo; } \ + rel2 { relative: 1.0 (iIndex%iN+1)/iN; to: iTo; } \ + color: 0 0 0 0;\ + } \ +} \ + +/* horizontal divided rect, index range from 0~N-1 + * iIndex must be immediate integer and expression like (1+2) is not allowed + */ +#define PART_H_DIVID_RECT(iName, iTo, iIndex, iN)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: (iIndex%iN)/iN 0.0; to: iTo; } \ + rel2 { relative: (iIndex%iN+1)/iN 1.0; to: iTo; } \ + color: 0 0 0 0;\ + } \ +} \ + +#define PART_CLIPPER_RECT(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: iR1x iR1y; to: iR1t; } \ + rel2 { relative: iR2x iR2y; to: iR2t; } \ + color: 255 255 255 255;\ + } \ +} \ + +/***********************************************************************/ +/* mouse event filter layer */ +#define PART_EVENT_RECT(iName, iTo)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 1;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: 0.0 0.0; to: iTo; } \ + rel2 { relative: 1.0 1.0; to: iTo; } \ + color: 0 0 0 0;\ + } \ +} \ + +/***********************************************************************/ +/* content layer */ +#define PART_COLOR_RECT(iName, iTo, iCr, iCg, iCb, iCa)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: 0.0 0.0; to: iTo; } \ + rel2 { relative: 1.0 1.0; to: iTo; } \ + color: iCr iCg iCb iCa;\ + } \ +} \ + +#define PART_COLOR_RECT_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t, iCr, iCg, iCb, iCa)\ +part {\ + name: iName;\ + type: RECT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: iR1x iR1y; to: iR1t; } \ + rel2 { relative: iR2x iR2y; to: iR2t; } \ + color: iCr iCg iCb iCa;\ + } \ +} \ + +#define PART_IMAGE(iName, iTo, iImage)\ +part {\ + name: iName;\ + type: IMAGE;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: 0.0 0.0; to: iTo; } \ + rel2 { relative: 1.0 1.0; to: iTo; } \ + image.normal : iImage;\ + } \ +} \ + +#define PART_IMAGE_REL(iName, iImage, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +PART_RECT("_"iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +PART_IMAGE(iName, "_"iName, iImage)\ + +#define PART_BORDER_IMAGE(iName, iTo, iImage, iBl, iBr, iBt, iBb)\ +part {\ + name: iName;\ + type: IMAGE;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: 0.0 0.0; to: iTo; } \ + rel2 { relative: 1.0 1.0; to: iTo; } \ + image.normal : iImage;\ + image.border : iBl iBr iBt iBb;\ + } \ +} \ + +#define PART_SWALLOW(iName, iTo)\ +part {\ + name: iName;\ + type: SWALLOW;\ + mouse_events: 1;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: 0.0 0.0; to: iTo; } \ + rel2 { relative: 1.0 1.0; to: iTo; } \ + fixed: 1 1; \ + } \ +} \ + +#define PART_SWALLOW_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +PART_RECT("_"iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +PART_SWALLOW(iName, "_"iName)\ + +#define PART_UNVISIBLE_SWALLOW(iName, iTo)\ +part {\ + name: iName;\ + type: SWALLOW;\ + mouse_events: 1;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + visible: 0;\ + rel1 { relative: 0.0 0.0; to: iTo; } \ + rel2 { relative: 1.0 1.0; to: iTo; } \ + } \ +} \ + +#define PART_UNVISIBLE_SWALLOW_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +PART_RECT("_"iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +PART_UNVISIBLE_SWALLOW(iName, "_"iName)\ + +#define PART_CLIPPED_SWALLOW(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t,\ + iAx, iAy, iCliper)\ +part {\ + name: iName;\ + type: SWALLOW;\ + mouse_events: 0;\ + scale: 1;\ + clip_to: iCliper;\ + description {\ + state: "default" 0.0;\ + align: iAx iAy;\ + fixed: 1 1;\ + rel1 { relative: iR1x iR1y; to: iR1t; } \ + rel2 { relative: iR2x iR2y; to: iR2t; } \ + } \ +} \ + +#define PART_TEXT(iName, iTo, iText, iFont, iClass, iSize,\ + iAx, iAy, iCr, iCg, iCb, iCa)\ +part {\ + name: iName;\ + type: TEXT;\ + mouse_events: 0;\ + scale: 1;\ + description {\ + state: "default" 0.0;\ + rel1 { relative: 0.0 0.0; to: iTo; } \ + rel2 { relative: 1.0 1.0; to: iTo; } \ + color: iCr iCg iCb iCa;\ + text {\ + text: iText;\ + font: iFont;\ + text_class: iClass;\ + size: iSize;\ + align: iAx iAy;\ + } \ + } \ +} \ + +#define PART_TEXT_REL(iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t,\ + iText, iFont, iClass, iSize, iAx, iAy, iCr, iCg, iCb, iCa)\ +PART_RECT("_"iName, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +PART_TEXT(iName, "_"iName, iText, iFont, iClass, iSize, iAx, iAy, iCr, iCg, iCb, iCa)\ + +/***********************************************************************/ +/* script */ +/* ugh!!!, iPart, iR1t, iR2t and iV of SCRIPT_SET_IMAGE should not be quoted with "" */ +#define SCRIPT_CUSTOM_PART(iPart)\ +custom_state(PPART#iPart, "default", 0.0);\ +set_state(PPART#iPart, "custom", 0.0) + +/* pay attention, rel paramater can only be float, script will not do evaluation of mathematics expression + eg. 10/100 is illegal, 0.1 is correct */ +#define SCRIPT_SET_REL(iPart, iR1x, iR1y, iR1t, iR2x, iR2y, iR2t)\ +set_state_val(PPART#iPart, STATE_REL1, iR1x, iR1y);\ +set_state_val(PPART#iPart, STATE_REL1_TO, PPART#iR1t, PPART#iR1t);\ +set_state_val(PPART#iPart, STATE_REL2, iR2x, iR2y);\ +set_state_val(PPART#iPart, STATE_REL2_TO, PPART#iR2t, PPART#iR2t)\ + +#define SCRIPT_SET_VISIBLE(iPart, iV)\ +set_state_val(PPART#iPart, STATE_VISIBLE, iV) + +#define SCRIPT_SET_IMAGE(iPart, iV)\ +set_state_val(PPART#iPart, STATE_IMAGE, PIMAGE#iV) + +#define SCRIPT_SET_COLOR(iPart, iCr, iCg, iCb, iCa)\ +set_state_val(PPART#iPart, STATE_COLOR, iCr, iCg, iCb, iCa) + + +/***********************************************************************/ +/* program */ +/* ugh!!! isignal, isource, iPart should not quoted with "" */ +#define PROGRAM_SET_VISIBLE(isignal, isource, iPart, iV)\ +program {\ + name: #isource#isignal;\ + source: #isource;\ + signal: #isignal;\ + script {\ + SCRIPT_SET_VISIBLE(iPart, iV);\ + } \ +} \ + +#endif /* __EXTENDED_EDC_H__ */ diff --git a/extend/extended-elm.c b/extend/extended-elm.c new file mode 100644 index 0000000..44d3f09 --- /dev/null +++ b/extend/extended-elm.c @@ -0,0 +1,438 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include + +/** + * elm_scroller_create + * + * @brief This function is an encapsulated vesion of elm_scroller_add + * + * @param [in] parent The parent object + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_scroller_create(Evas_Object *parent) +{ + Evas_Object *sc; + sc = elm_scroller_add(parent); + elm_scroller_bounce_set(sc, EINA_FALSE, EINA_TRUE); + elm_scroller_policy_set(sc, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_AUTO); + evas_object_size_hint_weight_set(sc, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(sc, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_show(sc); + return sc; +} + +/** + * elm_layout_create + * + * @brief This function is an encapsulated vesion of elm_layout_add + * + * @param [in] parent The parent object + * + * @param [in] file The path to file (edj) that will be used as layout + * + * @param [in] group The group that the layout belongs in edje file + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_layout_create(Evas_Object *parent, const char *file, const char *group) +{ + Evas_Object *ly; + ly = elm_layout_add(parent); + if (elm_layout_file_set(ly, file, group)) { + evas_object_size_hint_align_set(ly, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(ly, EVAS_HINT_EXPAND, 0); + evas_object_show(ly); + } else { + evas_object_del(ly); + ly = NULL; + } + return ly; +} + +/** + * elm_label_create + * + * @brief This function is an encapsulated vesion of elm_label_add + * + * @param [in] parent The parent object + * + * @param [in] text The label will be used on the object + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_label_create(Evas_Object *parent, const char *text) +{ + Evas_Object *label; + label = elm_label_add(parent); + elm_label_line_wrap_set(label, ELM_WRAP_CHAR); + elm_object_text_set(label, text); + evas_object_size_hint_align_set(label, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(label, EVAS_HINT_EXPAND, 0); + evas_object_show(label); + return label; +} + +/** + * elm_check_create + * + * @brief This function is an encapsulated vesion of elm_check_add + * + * @param [in] parent The parent object + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_check_create(Evas_Object *parent) +{ + Evas_Object *check; + check = elm_check_add(parent); + evas_object_size_hint_align_set(check, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, 0); + evas_object_show(check); + return check; +} + +/** + * elm_button_create + * + * @brief This function is an encapsulated vesion of elm_button_add + * + * @param [in] parent The parent object + * + * @param [in] text The label will be used on the object + * + * @param [in] click_cb The callback function when clicked + * + * @param [in] data User data to be passed to the callback function + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_button_create(Evas_Object *parent, const char *text, Evas_Smart_Cb click_cb, + void *data) +{ + Evas_Object *btn; + btn = elm_button_add(parent); + elm_object_text_set(btn, text); + evas_object_smart_callback_add(btn, "clicked", click_cb, data); + evas_object_size_hint_align_set(btn, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(btn, EVAS_HINT_EXPAND, 0); + evas_object_show(btn); + return btn; +} + +/** + * elm_entry_create + * + * @brief This function is an encapsulated vesion of elm_entry_add + * + * @param [in] parent The parent object + * + * @param [in] text The label will be used on the object + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_entry_create(Evas_Object *parent, const char *text) +{ + Evas_Object *entry; + entry = elm_entry_add(parent); + //elm_entry_entry_set(entry, text); + evas_object_size_hint_align_set(entry, EVAS_HINT_FILL, 0); + evas_object_size_hint_weight_set(entry, EVAS_HINT_EXPAND, 0); + elm_entry_input_panel_enabled_set(entry, EINA_FALSE); + elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT); + evas_object_show(entry); + return entry; +} + +/** + * elm_icon_create + * + * @brief This function is an encapsulated vesion of elm_icon_add + * + * @param [in] parent The parent object + * + * @param [in] file The path of icon file + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_icon_create(Evas_Object *parent, const char *file) +{ + Evas_Object *ic; + ic = elm_icon_add(parent); + elm_icon_file_set(ic, file, NULL); + evas_object_size_hint_aspect_set(ic, EVAS_ASPECT_CONTROL_VERTICAL, 1, 1); + elm_icon_resizable_set(ic, 1, 1); + evas_object_show(ic); + return ic; +} + +/** + * elm_navigator_btn_create + * + * @brief This function is an encapsulated vesion of elm_icon_add + * + * @param [in] parent The parent object + * + * @param [in] text The label will be used on the object + * + * @param [in] icon_path The icon will be displayed on the object + * + * @param [in] style "navigationbar_control/left(center|right)" + * + * @param [in] click_cb The callback function when clicked + * + * @param [in] data User data to be passed to the callback function + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_navigator_btn_create(Evas_Object *parent, const char *text, + const char *icon_path, const char *style, + Evas_Smart_Cb click_cb, void *data) +{ + Evas_Object *btn = NULL; + + btn = elm_button_create(parent, text, click_cb, data); + elm_object_style_set(btn, "naviframe/title/default"); + return btn; +} + +/** + * elm_swallowed_scroller + * + * @brief This function is an encapsulated vesion of elm_scroller_add + * + * @param [in] parent The parent object + * + * @param [in] part The swallow part name in the parent layout obj + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_swallowed_scroller(Evas_Object *parent, const char *part) +{ + Evas_Object *eo = elm_scroller_create(parent); + elm_object_part_content_set(parent, part, eo); + return eo; +} + +/** + * elm_swallowed_layout + * + * @brief This function is an encapsulated vesion of elm_layout_add + * + * @param [in] parent The parent object + * + * @param [in] part The swallow part name in the parent layout obj + * + * @param [in] file The path to file (edj) that will be used as layout + * + * @param [in] group The group that the layout belongs in edje file + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_swallowed_layout(Evas_Object *parent, const char *part, const char *file, + const char *group) +{ + Evas_Object *eo = elm_layout_create(parent, file, group); + elm_object_part_content_set(parent, part, eo); + return eo; +} + +/** + * elm_swallowed_button + * + * @brief This function is an encapsulated vesion of elm_button_add + * + * @param [in] parent The parent object + * + * @param [in] part The swallow part name in the parent layout obj + * + * @param [in] text The label will be used on the object + * + * @param [in] click_cb The callback function when clicked + * + * @param [in] data User data to be passed to the callback function + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_swallowed_button(Evas_Object *parent, const char *part, const char *text, + Evas_Smart_Cb click_cb, void *data) +{ + Evas_Object *eo = elm_button_create(parent, text, click_cb, data); + elm_object_part_content_set(parent, part, eo); + return eo; +} + +/** + * elm_swallowed_entry + * + * @brief This function is an encapsulated vesion of elm_entry_add + * + * @param [in] parent The parent object + * + * @param [in] part The swallow part name in the parent layout obj + * + * @param [in] text The label will be used on the object + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_swallowed_entry(Evas_Object *parent, const char *part, const char *text) +{ + Evas_Object *eo = elm_entry_create(parent, text); + elm_object_part_content_set(parent, part, eo); + return eo; +} + +/** + * elm_swallowed_icon + * + * @brief This function is an encapsulated vesion of elm_icon_add + * + * @param [in] parent The parent object + * + * @param [in] part The swallow part name in the parent layout obj + * + * @param [in] file The path of icon file + * + * @return Return pointer to elm object (Success) or NULL (Failed) + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *elm_swallowed_icon(Evas_Object *parent, const char *part, const char *file) +{ + Evas_Object *eo = elm_icon_create(parent, file); + elm_object_part_content_set(parent, part, eo); + return eo; +} + +/** + * elm_layout_content_del + * + * @brief Destroy object from layout + * + * @param [in] parent The parent object + * + * @param [in] part The name of swallowed part in the parent layout obj + * + * @return None + * + * @exception None + * + * @remark None + * + * @see + * + */ +void elm_layout_content_del(Evas_Object *parent, const char *part) +{ + Evas_Object *eo = elm_object_part_content_unset(parent, part); + if (eo != NULL) { + evas_object_del(eo); + } +} + diff --git a/extend/extended-elm.h b/extend/extended-elm.h new file mode 100644 index 0000000..5ffd9ac --- /dev/null +++ b/extend/extended-elm.h @@ -0,0 +1,44 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __EXTENDED_ELM_H__ +#define __EXTENDED_ELM_H__ + +#include + +Evas_Object *elm_scroller_create(Evas_Object *parent); +Evas_Object *elm_layout_create(Evas_Object *parent, const char *file, const char *group); +Evas_Object *elm_label_create(Evas_Object *parent, const char *text); +Evas_Object *elm_check_create(Evas_Object *parent); +Evas_Object *elm_button_create(Evas_Object *parent, const char *text, Evas_Smart_Cb click_cb, + void *data); +Evas_Object *elm_entry_create(Evas_Object *parent, const char *text); +Evas_Object *elm_icon_create(Evas_Object *parent, const char *file); +Evas_Object *elm_navigator_btn_create(Evas_Object *parent, const char *text, + const char *icon_path, const char *style, + Evas_Smart_Cb click_cb, void *data); +Evas_Object *elm_swallowed_scroller(Evas_Object *parent, const char *part); +Evas_Object *elm_swallowed_layout(Evas_Object *parent, const char *part, const char *file, + const char *group); +Evas_Object *elm_swallowed_button(Evas_Object *parent, const char *part, const char *text, + Evas_Smart_Cb click_cb, void *data); +Evas_Object *elm_swallowed_entry(Evas_Object *parent, const char *part, const char *text); +Evas_Object *elm_swallowed_icon(Evas_Object *parent, const char *part, const char *file); +void elm_layout_content_del(Evas_Object *parent, const char *part); + +#endif /* __EXTENDED_ELM_H__ */ diff --git a/extend/gravel.h b/extend/gravel.h new file mode 100644 index 0000000..29fb58a --- /dev/null +++ b/extend/gravel.h @@ -0,0 +1,60 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __GRAVEL_H__ +#define __GRAVEL_H__ + +#include + +/* use prefix 'P' means print */ +#define PTAG LOGD("[%s : %d]\n", __FILE__, __LINE__) +#define PLOG(fmt, arg...) LOGD(" ## "fmt, ##arg) +#define PFUNC_ENTER LOGD("ENTER : %s\n", __func__) +#define PFUNC_LEAVE LOGD("LEAVE : %s\n", __func__) + +#define ARRAY_SIZE(array) \ + ((int)(sizeof(array) / sizeof(array[0]))) + +#define STR_EQUAL(str1, str2) \ + (strcmp(str1, str2) == 0) + +#define SSTRLEN(str)\ + (str == NULL ? 0 : strlen(str))\ + +#define sncat(to, size, from) \ + strncat(to, from, size-strlen(to)-1) + +#define sncatprintf(s, size, fmt, args...) \ + snprintf(s+strlen(s), size-strlen(s), fmt, ##args) + +#define SMALLOC(Type)\ + (Type *)calloc(1, sizeof(Type))\ + +#define SFREE(var)\ + if (var != NULL) {\ + free(var);\ + var = NULL;\ + } \ + +#define RETIF(condition)\ + if (condition) return + +#define RETVIF(condition, val)\ + if (condition) return val + +#endif /* __GRAVEL_H__ */ diff --git a/extend/supplement.c b/extend/supplement.c new file mode 100644 index 0000000..f6f8d81 --- /dev/null +++ b/extend/supplement.c @@ -0,0 +1,90 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include + +static bool _service_iterate_dump_cb(service_h service, const char *key, void *user_data) +{ + LOGD("%s -> %s\n", key, user_data); + return 0; +} + +void service_dump(service_h service) +{ + if (service != NULL) { + service_foreach_extra_data(service, _service_iterate_dump_cb, NULL); + } +} + +Eina_Bool service_key_check(service_h service, const char *key, const char *val) +{ + char *str = NULL; + service_get_extra_data(service, key, &str); + if (str != NULL) { + if (strcmp(str, val) == 0) { + SFREE(str); + return EINA_TRUE; + } + SFREE(str); + } + return EINA_FALSE; +} + +void evas_object_geometry_dump(Evas_Object *eo) +{ + Evas_Coord x, y, w, h; + evas_object_geometry_get(eo, &x, &y, &w, &h); + LOGD("[evas_object_geometry_dump] geometry of %x : %d %d %d %d\n", eo, x, y, w, h); +} + +void evas_object_event_hit(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + LOGD("[%s] %x : %s\n", __func__, obj, (char *)data); +} + +void evas_object_smart_event_hit(void *data, Evas_Object *obj, void *event_info) +{ + LOGD("[%s] %x : %s\n", __func__, obj, (char *)data); +} + +typedef struct __rf_data_t { + Evas_Smart_Cb cb; + void *data; +}rf_data_t; + +static void _render_flush_post_cb(void *data, Evas *e, void *event_info) +{ + rf_data_t *rf = (rf_data_t *)data; + rf->cb(rf->data, NULL, NULL); + evas_event_callback_del(e, EVAS_CALLBACK_RENDER_FLUSH_POST, _render_flush_post_cb); + SFREE(rf); +} + +void evas_object_render_flush_hook(Evas_Object *obj, Evas_Smart_Cb cb, void *data) +{ + RETIF(obj==NULL); + Evas *e = evas_object_evas_get(obj); + rf_data_t *rf = SMALLOC(rf_data_t); + RETIF(rf==NULL); + rf->cb = cb; + rf->data = data; + evas_event_callback_add(e, EVAS_CALLBACK_RENDER_FLUSH_POST, _render_flush_post_cb, rf); +} + diff --git a/extend/supplement.h b/extend/supplement.h new file mode 100644 index 0000000..4707249 --- /dev/null +++ b/extend/supplement.h @@ -0,0 +1,59 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __SUPPLEMENT_H__ +#define __SUPPLEMENT_H__ + +#include +#include +#include + +/* extended type definition */ +typedef struct ui_gadget ui_gadget_t; +typedef struct ug_cbs ug_cbs_t; +//typedef struct ui_gadget_s ui_gadget_h; + +/* extended macroes */ +#define evas_object_single_event_dump(obj, event) \ + evas_object_event_callback_add(obj, event, evas_object_event_hit, #obj"\t"#event) + +#define evas_object_events_dump(obj) \ +do { \ + evas_object_single_event_dump(obj, EVAS_CALLBACK_MOVE); \ + evas_object_single_event_dump(obj, EVAS_CALLBACK_RESIZE); \ + evas_object_single_event_dump(obj, EVAS_CALLBACK_MOUSE_DOWN); \ + evas_object_single_event_dump(obj, EVAS_CALLBACK_HOLD); \ + evas_object_single_event_dump(obj, EVAS_CALLBACK_MOUSE_UP); \ + evas_object_single_event_dump(obj, EVAS_CALLBACK_DEL); \ + evas_object_single_event_dump(obj, EVAS_CALLBACK_FREE); \ +} while (0) + +/* dump specified event of smart object */ +#define evas_object_smart_event_dump(obj, event) \ + evas_object_smart_callback_add(obj, event, evas_object_smart_event_hit, #obj "\t" event); + +/* extended functions */ +void service_dump(service_h service); +Eina_Bool service_key_check(service_h service, const char *key, const char *val); +void evas_object_geometry_dump(Evas_Object *eo); +void evas_object_event_hit(void *data, Evas *e, Evas_Object *obj, void *event_info); +void evas_object_smart_event_hit(void *data, Evas_Object *obj, void *event_info); +void evas_object_render_flush_hook(Evas_Object *obj, Evas_Smart_Cb cb, void *data); +void elm_widget_on_focus_hook_set(Evas_Object *obj, void (*func) (void *data, Evas_Object *obj), void *data); + +#endif /* __SUPPLEMENT_H__ */ diff --git a/images/00_search_input_field_bg.png b/images/00_search_input_field_bg.png new file mode 100644 index 0000000000000000000000000000000000000000..cc89625a615e1b65d3fe8f9b7f8622af0eee23c5 GIT binary patch literal 366 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 Bl!yQT literal 0 HcmV?d00001 diff --git a/images/01_header_icon_edit.png b/images/01_header_icon_edit.png new file mode 100644 index 0000000000000000000000000000000000000000..ea2535d3b28e09833c5431e7844143f59ff01c7d GIT binary patch literal 3049 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 literal 0 HcmV?d00001 diff --git a/images/01_header_icon_others.png b/images/01_header_icon_others.png new file mode 100644 index 0000000000000000000000000000000000000000..4fc9dfa92b33e61e2360138137b741581fad45c0 GIT binary patch literal 2934 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 literal 0 HcmV?d00001 diff --git a/include/memo-assist.h b/include/memo-assist.h new file mode 100644 index 0000000..bc27be4 --- /dev/null +++ b/include/memo-assist.h @@ -0,0 +1,89 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MEMO_ASSIST_H__ +#define __MEMO_ASSIST_H__ + +#include +#include +#include +#include + +#define DOODLE_TITLE_PREFIX "Drawing-" + +#define ARGB_JOIN(a, r, g, b) \ + (((a) << 24) + ((r) << 16) + ((g) << 8) + (b)) + +#define IN_RECT_CHECK(x, y, rx, ry, rw, rh)\ + (((unsigned)((x) - (rx)) < (rw)) && ((unsigned)((y) - (ry)) < (rh))) + +#define CLIP_RECT_TO_RECT(x, y, w, h, rx, ry, rw, rh)\ +{\ + int _t0, _t1;\ +\ + _t0 = MAX(x, (rx));\ + _t1 = MIN(x + w, (rx) + (rw));\ + x = _t0;\ + w = _t1 - _t0;\ + _t0 = MAX(y, (ry));\ + _t1 = MIN(y + h, (ry) + (rh));\ + y = _t0;\ + h = _t1 - _t0;\ +} + +typedef void (*Memo_Component_Callback)(void *data, const char *msg, void *event); + +typedef struct memo_data memo_data_t; +typedef struct memo_data_list memo_data_list_t; + +typedef enum { + MOUSE_EVENT_INVALID = 0, + MOUSE_EVENT_CLICK, + MOUSE_EVENT_DRAG_LEFT, + MOUSE_EVENT_DRAG_RIGHT, + MOUSE_EVENT_DRAG_UP, + MOUSE_EVENT_DRAG_DOWN, +} mouse_behaviour_t; + +#define MOUSE_POSITION_INVALID 9999 + +char * strcasestr (const char *haystack, const char *needle); +char * strptime (const char *s, const char *fmt, struct tm *tp); +void icu_init(); +char *memo_get_doodle_title(); +void memo_time_format(char *buf, int len, time_t time); +time_t memo_get_binary_release_date(); +mouse_behaviour_t mouse_event_identify(int startx, int starty, int endx, int endy); +void evas_object_flick_callback_add(Evas_Object *obj, Evas_Smart_Cb on_flick, void *data); +void memo_com_dummy_cb(void *data, const char *msg, void *event); +void memo_create_yes_no_popup(Evas_Object *win, const char *msg, Evas_Smart_Cb on_yes, Evas_Smart_Cb on_no, void *data); +void memo_tool_btn_focus_set(Evas_Object *eo, Eina_Bool status); +void *memo_load_font_size_selector(Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data); +void memo_del_font_size_selector(void *h_fss); +void *memo_load_color_selector(Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data); +void memo_del_color_selector(void *h_cs); +void *memo_load_pencil_size_selector(Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data); +void memo_del_pencil_size_selector(void *h_pss); +void memo_navigator_pop(Evas_Object *navi); +Elm_Object_Item *memo_naviframe_item_push(Evas_Object *obj, const char *title_label, + Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style); +Eina_Bool memo_comment_savable(Evas_Object *entry, const char *orig_utf8); +void memo_comment_recover(Evas_Object *entry, const char *orig_utf8); +Evas_Object *memo_controlbar_add(Evas_Object *parent); + +#endif /* __MEMO_ASSIST_H__ */ diff --git a/include/memo-genlist.h b/include/memo-genlist.h new file mode 100644 index 0000000..4d5b9d4 --- /dev/null +++ b/include/memo-genlist.h @@ -0,0 +1,47 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MEMO_GENLIST_H__ +#define __MEMO_GENLIST_H__ + +typedef struct __gl_data_t { + /* common */ + int index; + int has_doodle; + time_t mod_time; + Evas_Smart_Cb on_select; + /* checkbox */ + Eina_Bool check; + Evas_Smart_Cb on_change; + /* sweep */ + Evas_Smart_Cb on_delete; + Evas_Smart_Cb on_send; + /* search */ + const char *search; + /* user data */ + void *user_data; +} gl_data_t; + +char *memo_gl_label_get(void *data, Evas_Object *obj, const char *part); +Evas_Object *memo_gl_icon_get(void *data, Evas_Object *obj, const char *part); +Eina_Bool memo_gl_state_get(void *data, Evas_Object *obj, const char *part); +void memo_gl_del(void *data, Evas_Object *obj); +void memo_gl_itc_init(Elm_Genlist_Item_Class *itc, const char *style); +void memo_gld_init(gl_data_t *data, memo_data_t *md, void *user_data, Evas_Smart_Cb on_select); + +#endif /* __MEMO_GENLIST_H__ */ diff --git a/include/memo.h b/include/memo.h new file mode 100644 index 0000000..7bff87a --- /dev/null +++ b/include/memo.h @@ -0,0 +1,89 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MEMO_APP_H__ +#define __MEMO_APP_H__ + +#include +#include +#include +#include +#include +#include +#include +#include + +#define MEMO_GROUP_NAME_MAX 128 /**< max length for group name */ +#define MEMO_MAX_RECORD 400 + +#define MAX_REALIZED_RECORD 8 + +#define DEFAULT_FONT_SIZE 32 + +#define AUL_PARAM_ID "__AUL_PARAM_ID" +#define MEMO_NAVIFRAME_ITEM_PREV_BTN "prev_btn" + +typedef enum { + MEMO_VIEW_NULL = 0, + MEMO_LIST_VIEW, + MEMO_DETAIL_VIEW, + MEMO_EDIT_VIEW, + MEMO_EDIT_LIST_VIEW, + MEMO_VIEWS, +} memo_view_type_t; + +typedef struct __appdata { + Evas *evas; + Evas_Object *win_main; + Evas_Object *ly_main; /* window */ + Evas_Object *navigator; + Evas_Object * conform; + + /* add more variables here */ + memo_view_type_t init_view; + int index; /* index of last clicked memo */ + int index_detail; /* for temporarily usage only */ + char buf[MEMO_BUFFER_SIZE]; /* for temporarily usage only */ + char *init_str; + Evas_Object *popup; /* popup when data modified by external app(kies) */ +} appdata; + +void *memo_load_list_view(appdata *ad); +void *memo_load_edit_view(appdata *ad); +void *memo_load_edit_list_view(appdata *ad); +void *memo_load_detail_view(appdata *ad); + +void *memo_load_list_viewer(Evas_Object *parent, Evas_Object *win, service_h service, Memo_Component_Callback cb, void *data); +void memo_clear_list_viewer(void *h_lv); +void memo_update_list_viewer(void *h_lv); +void memo_destroy_list_viewer(void *h_lv); +void memo_list_editor_share_records(void *h_le); +void memo_list_editor_delete_records(void *h_le); +void *memo_load_list_editor(Evas_Object *parent, Evas_Object *win, service_h service, Memo_Component_Callback cb, void *data); +void memo_destroy_list_editor(void *h_le); +void *memo_load_text_viewer(Evas_Object *parent, Evas_Object *win, int id, service_h service, Memo_Component_Callback cb, void *data); +void memo_destroy_text_viewer(void *h_tv); +void memo_text_viewer_share_record(void *h_tv); +void *memo_load_doodle_viewer(Evas_Object *parent, Evas_Object *win, int id, service_h service, Memo_Component_Callback cb, void *data); +void memo_destroy_doodle_viewer(void *h_dv); +void memo_doodle_viewer_pre_del(void *h_dv); +void memo_doodle_viewer_share_record(void *h_dv); +void memo_doodle_viewer_save(void *h_dv); +void memo_doodle_viewer_cancel(void *h_dv); + +#endif /* __MEMO_APP_H__ */ diff --git a/include/memo_autolink.h b/include/memo_autolink.h new file mode 100644 index 0000000..a879237 --- /dev/null +++ b/include/memo_autolink.h @@ -0,0 +1,44 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef __MEMO_AUTOLINK_H__ +#define __MEMO_AUTOLINK_H__ + +enum anchor_t { + NOT_ANCHOR = 0, + ANCHOR_PHONE, + ANCHOR_EMAIL, + ANCHOR_URL, +}; + +struct anchor_popup_item_t { + char *label; + void (*response) (void *data, Evas_Object *obj, void *event_info); + const char *domain; /* for i18n */ +}; + +typedef struct autolink_data_t { + Evas_Object *win_main; + Evas_Object *popup; + enum anchor_t type; + char *info; +} autolink_data; + +GString *autolink_add_anchor(const char *content); +void autolink_anchor_clicked_cb(void *data, Evas_Object *obj, void *event_info); + +#endif /* __MEMO_AUTOLINK_H__ */ diff --git a/include/memo_doodle_editor.h b/include/memo_doodle_editor.h new file mode 100644 index 0000000..0f8a3f2 --- /dev/null +++ b/include/memo_doodle_editor.h @@ -0,0 +1,28 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MEMO_DOODLE_EDITOR_H__ +#define __MEMO_DOODLE_EDITOR_H__ + +void memo_doodle_editor_time_format_update(void *h_de); +void memo_doodle_editor_cancel(void *h_de); +void memo_doodle_editor_save(void *h_de); +void *memo_load_doodle_editor(Evas_Object *win, Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data); +void memo_destroy_doodle_editor(void *h_de); + +#endif /* __MEMO_DOODLE_EDITOR_H__ */ diff --git a/include/memo_log.h b/include/memo_log.h new file mode 100644 index 0000000..8216c93 --- /dev/null +++ b/include/memo_log.h @@ -0,0 +1,39 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MEMO_LOG_H__ +#define __MEMO_LOG_H__ + +#include + +#ifdef LOG_TAG +#undef LOG_TAG +#endif +#define LOG_TAG "MEMO" + + +#ifdef PERFORMANCE_LOG +#define DBG(fmt, arg...) SLOGD("%s(%d) " fmt, __FUNCTION__, __LINE__, ##arg) +#define MEMO_FUN_BEG() DBG("START") +#define MEMO_FUN_END() DBG("END") +#else +#define MEMO_FUN_BEG() +#define MEMO_FUN_END() +#endif + +#endif /* __MEMO_LOG_H__ */ diff --git a/include/memo_string.h b/include/memo_string.h new file mode 100644 index 0000000..22f839c --- /dev/null +++ b/include/memo_string.h @@ -0,0 +1,69 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MEMO_STRING_H__ +#define __MEMO_STRING_H__ + +/* system string */ +#define MEMO_I18N_BACK dgettext("sys_string", "IDS_COM_BODY_BACK") /* Back */ +#define MEMO_I18N_CALENDAR dgettext("sys_string", "IDS_COM_BODY_CALENDAR") /* Calendar */ +#define MEMO_I18N_CANCEL dgettext("sys_string", "IDS_COM_POP_CANCEL") /* Cancel */ +#define MEMO_I18N_CLOSE dgettext("sys_string", "IDS_COM_BODY_CLOSE") /* Close */ +#define MEMO_I18N_CREATE dgettext("sys_string", "IDS_COM_BODY_CREATE") /* Create */ +#define MEMO_I18N_DELETE dgettext("sys_string", "IDS_COM_BODY_DELETE") /* Delete */ +#define MEMO_I18N_EDIT dgettext("sys_string", "IDS_COM_BODY_EDIT") /* Edit */ +#define MEMO_I18N_EMAIL dgettext("sys_string", "IDS_COM_BODY_EMAIL") /* Email */ +#define MEMO_I18N_FACEBOOK dgettext("sys_string", "IDS_COM_BODY_FACEBOOK") /* Facebook */ +#define MEMO_I18N_MEMO dgettext("sys_string", "IDS_COM_BODY_MEMO") /* Memo */ +#define MEMO_I18N_MESSAGE dgettext("sys_string", "IDS_COM_BODY_MESSAGE") /* Message */ +#define MEMO_I18N_NO dgettext("sys_string", "IDS_COM_SK_NO") /* No */ +#define MEMO_I18N_SAVE dgettext("sys_string", "IDS_COM_OPT_SAVE") /* Save */ +#define MEMO_I18N_SEARCH dgettext("sys_string", "IDS_COM_BODY_SEARCH") /* Search */ +#define MEMO_I18N_SELECT_ALL dgettext("sys_string", "IDS_COM_BODY_SELECT_ALL") /* Select all */ +#define MEMO_I18N_SEND dgettext("sys_string", "IDS_COM_BODY_SEND") /* Send */ +#define MEMO_I18N_SEND_MESSAGE dgettext("sys_string", "IDS_COM_BODY_SEND_MESSAGE") /* Send message */ +#define MEMO_I18N_SET dgettext("sys_string", "IDS_COM_SK_SET") /* Set */ +#define MEMO_I18N_SHARE dgettext("sys_string", "IDS_COM_BUTTON_SHARE") /* Share */ +#define MEMO_I18N_TWITTER dgettext("sys_string", "IDS_COM_BODY_TWITTER") /* Twitter */ +#define MEMO_I18N_NFC dgettext("sys_string", "IDS_COM_BODY_NFC") /* NFC */ +#define MEMO_I18N_VIDEO_CALL dgettext("sys_string", "IDS_COM_BODY_VIDEO_CALL") /* Video call */ +#define MEMO_I18N_VOICE_CALL dgettext("sys_string", "IDS_COM_BODY_VOICE_CALL") /* Voice call */ +#define MEMO_I18N_YES dgettext("sys_string", "IDS_COM_SK_YES") /* Yes */ + +/* app string */ +#define MEMO_I18N_ADD_COMMENT dgettext("memo", "IDS_MEMO_BODY_ADD_COMMENT") /* Add comment */ +#define MEMO_I18N_ADD_TO_CONTACT dgettext("memo", "IDS_MEMO_BODY_ADD_TO_CONTACT") /* Add to contact */ +#define MEMO_I18N_DRAWING dgettext("memo", "IDS_MEMO_BODY_DRAWING") /* Drawing */ +#define MEMO_I18N_EDIT_NOTE dgettext("memo", "IDS_MEMO_BODY_EDIT_NOTE") /* Edit note */ +#define MEMO_I18N_EDIT_MEMO dgettext("memo", "IDS_MEMO_BODY_EDIT_MEMO") /* Edit memo */ +#define MEMO_I18N_CREATE_MEMO dgettext("memo", "IDS_MEMO_HEADER_CREATE_MEMO") /* Create memo */ +#define MEMO_I18N_NO_MEMOS dgettext("memo", "IDS_MEMO_BODY_NO_MEMOS") /* No memos */ +#define MEMO_I18N_SAVE_MEMO dgettext("memo", "IDS_MEMO_POP_DIALOG_SAVE_MEMO") /* Save memo? */ +#define MEMO_I18N_SELECT_MEMO dgettext("memo", "IDS_MEMO_HEADER_SELECT_MEMO_ABB") /* Select memo */ +#define MEMO_I18N_SEND_EMAIL dgettext("memo", "IDS_MEMO_OPT_SEND_EMAIL") /* Send email */ +#define MEMO_I18N_TEXT dgettext("memo", "IDS_MEMO_BODY_TEXT") /* Text */ +#define MEMO_I18N_1_MEMO_SELECTED dgettext("memo", "IDS_MEMO_POP_1_MEMO_SELECTED") /* 1 memo selected */ +#define MEMO_I18N_D_MEMOS_SELECTED dgettext("memo", "IDS_MEMO_POP_PD_MEMOS_SELECTED") /* %d memos selected */ + +/* custom string */ +#define MEMO_I18N_EDIT_COMMENT _("Edit comment") /* Edit comment */ +#define MEMO_I18N_EDIT_DRAWING _("Edit drawing") /* Edit drawing */ +#define MEMO_I18N_CREATE_DRAWING _("Create Drawing") /* Create Drawing */ +#define MEMO_I18N_CREATE_NOTE _("Create Note") /* Create Note */ + +#endif /* __MEMO_STRING_H__ */ diff --git a/include/memo_text_editor.h b/include/memo_text_editor.h new file mode 100644 index 0000000..34effc0 --- /dev/null +++ b/include/memo_text_editor.h @@ -0,0 +1,28 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#ifndef __MEMO_TEXT_EDITOR_H__ +#define __MEMO_TEXT_EDITOR_H__ + +void memo_text_editor_time_format_update(void *h_de); +void memo_text_editor_cancel(void *h_te); +void memo_text_editor_save(void *h_te); +void *memo_load_text_editor(Evas_Object *win, Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data); +void memo_destroy_text_editor(void *h_te); + +#endif /* __MEMO_TEXT_EDITOR_H__ */ diff --git a/include/memo_ug.h b/include/memo_ug.h new file mode 100644 index 0000000..e230987 --- /dev/null +++ b/include/memo_ug.h @@ -0,0 +1,51 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#ifndef __MEMO_SG_H__ +#define __MEMO_SG_H__ + +#include +#include +#include +#include + + +/* UG Name */ +#define UG_NAME_EMAIL "email-composer-efl" +#define UG_NAME_MESSAGE "msg-composer-efl" +#define UG_NAME_CONTACT_ADD "contacts-details-efl" +#define UG_NAME_CALENDAR "calendar-edit-efl" +#define UG_NAME_NFC "share-nfc-efl" + +/* AUL NAME */ +#define AUL_NAME_CALENDER PACKAGE_PREFIX".efl-calendar" +#define AUL_NAME_VIOCE_CALL PACKAGE_PREFIX".call" +#define AUL_NAME_VEDIO_CALL PACKAGE_PREFIX".vtmain" + +/* UG Function Declaration*/ +/* auto stripped function prototype from (../src/memo_ug.c) */ +void ug_launch_common(service_h service, char *ug_name); +void ug_launch_common_var(char *ug_name, ...); +void ug_launch_message(Eina_List *list); +void ug_launch_email(Eina_List *list); +void ug_launch_calender(Eina_List *list); +void ug_launch_facebook(Eina_List *list); +void memo_ug_init(Evas_Object *win); +void memo_share(Evas_Object *parent, int *indexes, int n); +/* end auto strip */ + +#endif /* __MEMO_SG_H__ */ diff --git a/memo.edc b/memo.edc new file mode 100644 index 0000000..ebdef54 --- /dev/null +++ b/memo.edc @@ -0,0 +1,30 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include + +collections { + #include + #include + #include + #include + #include + #include + #include + #include +} diff --git a/org.tizen.memo.manifest b/org.tizen.memo.manifest new file mode 100755 index 0000000..475f473 --- /dev/null +++ b/org.tizen.memo.manifest @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/org.tizen.memo.png b/org.tizen.memo.png new file mode 100755 index 0000000000000000000000000000000000000000..28382d862af3b01220f023fd01ce0985c7199673 GIT binary patch literal 57662 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 + + + Memo + + org.tizen.memo.png + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + + diff --git a/packaging/org.tizen.memo.spec b/packaging/org.tizen.memo.spec new file mode 100755 index 0000000..b864e9d --- /dev/null +++ b/packaging/org.tizen.memo.spec @@ -0,0 +1,71 @@ +#sbs-git:slp/apps/m/memo memo 0.1.5 27cb9ac9efc61361edf86770614768505e688a17 +Name: org.tizen.memo +Summary: Memo displays the time as text +Version: 0.2.10 +Release: 1 +Group: TO_BE/FILLED_IN +License: Flora +Source0: %{name}-%{version}.tar.gz +BuildRequires: pkgconfig(appcore-efl) +BuildRequires: pkgconfig(appsvc) +BuildRequires: pkgconfig(elementary) +BuildRequires: pkgconfig(ecore) +BuildRequires: pkgconfig(ecore-x) +BuildRequires: pkgconfig(ecore-imf) +BuildRequires: pkgconfig(ecore-input) +BuildRequires: pkgconfig(eina) +BuildRequires: pkgconfig(evas) +BuildRequires: pkgconfig(edje) +BuildRequires: pkgconfig(utilX) +BuildRequires: pkgconfig(iniparser) +BuildRequires: pkgconfig(ui-gadget-1) +BuildRequires: pkgconfig(dlog) +BuildRequires: pkgconfig(bundle) +BuildRequires: pkgconfig(icu-i18n) +BuildRequires: pkgconfig(memo) +BuildRequires: pkgconfig(capi-appfw-application) +BuildRequires: pkgconfig(capi-system-runtime-info) + +BuildRequires: libug-contacts-devel + +BuildRequires: cmake +BuildRequires: edje-bin +BuildRequires: embryo-bin +BuildRequires: gettext-devel + +Requires: email-service + +%description +Memo displays the time as text (e.g. "It's just gone +five to ten"), and your next appointments, memos, +and alarms in a small window. + +%prep +%setup -q + +%build +export PREFIX="/usr/apps/org.tizen.memo" +export CFLAGS+=" -fPIC" +export LDFLAGS+=" -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed -Wl,--hash-style=both" + +cmake . -DCMAKE_INSTALL_PREFIX="$PREFIX" + +make %{?jobs:-j%jobs} + +%install +rm -rf %{buildroot} +mkdir -p %{buildroot}/usr/share/license +cp LICENSE %{buildroot}/usr/share/license/%{name} +%make_install + + +%files +%manifest org.tizen.memo.manifest +/etc/smack/accesses.d/org.tizen.memo.rule +%defattr(-,root,root,-) +/usr/apps/org.tizen.memo/* +/usr/share/packages/org.tizen.memo.xml +/usr/share/icons/default/small/org.tizen.memo.png +%defattr(-,root,root,757) +/opt/usr/apps/org.tizen.memo/data/* +/usr/share/license/%{name} diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt new file mode 100644 index 0000000..fe43d1f --- /dev/null +++ b/po/CMakeLists.txt @@ -0,0 +1,24 @@ +# for i18n + +SET(POFILES de_DE.po el_GR.po en.po es_ES.po fr_FR.po it_IT.po ja_JP.po ko_KR.po nl_NL.po pt_PT.po ru_RU.po tr_TR.po zh_CN.po zh_HK.po zh_TW.po) + +SET(MSGFMT "/usr/bin/msgfmt") + +FOREACH(pofile ${POFILES}) + SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile}) + MESSAGE("PO: ${pofile}") + GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE) + GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE) + SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo) + ADD_CUSTOM_COMMAND( + OUTPUT ${moFile} + COMMAND ${MSGFMT} -o ${moFile} ${absPofile} + DEPENDS ${absPofile} + ) + INSTALL(FILES ${moFile} + DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo) + SET(moFiles ${moFiles} ${moFile}) +ENDFOREACH(pofile) + +MESSAGE(".mo files: ${moFiles}") +ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles}) diff --git a/po/POTFILES.in b/po/POTFILES.in new file mode 100644 index 0000000..0efcb39 --- /dev/null +++ b/po/POTFILES.in @@ -0,0 +1,8 @@ +# List of source files containing translatable strings. +src/memo.c +src/memo_edit.c +src/memo_edit_list.c +src/memo_portrait_view.c +src/memo_search.c +src/memo_sg.c +src/memo_util.c diff --git a/po/ar.po b/po/ar.po new file mode 100755 index 0000000..af76b72 --- /dev/null +++ b/po/ar.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "حفظ المذكرة؟" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "تم تحديد 1مذكرة" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "تم تحديد %d مذكرات‬" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "إرسال بريد إلكتروني" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "إضافة تعليق" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "إضافة إلى جهة اتصال" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "الرسم" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "تعديل الملاحظة" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "نص" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "تحديد مذكرة" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "إنشاء مذكرة" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "تعديل المذكرة" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "لا توجد مذكرات" + diff --git a/po/bg.po b/po/bg.po new file mode 100755 index 0000000..6b2bd6b --- /dev/null +++ b/po/bg.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Записване на бележката?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Избрана е 1 паметна бележка" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Избрани са %d паметни бележки" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Изпращане на еmail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Добавяне на коментар" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Добави към запис" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Рисунка" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Редактиране на бележка" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Текст" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Избор на бележка" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Създаване на записка" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Редакция на записка" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Няма бележки" + diff --git a/po/ca.po b/po/ca.po new file mode 100755 index 0000000..a8edfb7 --- /dev/null +++ b/po/ca.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Desar memoràndum?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 nota seleccionada" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d notes seleccionades" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Enviar correu electrònic" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Afegir comentari" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Afegir a contacte" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Dibuix" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Editar nota" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Text" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Seleccionar nota" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Crear memo" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Editar memo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Sense memorànd" + diff --git a/po/cs.po b/po/cs.po new file mode 100755 index 0000000..0dd4a67 --- /dev/null +++ b/po/cs.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Uložit poznámku?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Byla vybrána 1 poznámka" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Bylo vybráno %d poznámek" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Odeslat e-mail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Přidat komentář" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Přidat do kontaktu" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Kreslení" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Upravit poznámku" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Text" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Zvolit poznámku" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Vytvořit poznámku" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Poznámka" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Žádné poznámky" + diff --git a/po/da.po b/po/da.po new file mode 100755 index 0000000..aa1f3ca --- /dev/null +++ b/po/da.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Gem notat?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 notat valgt" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d notater valgt" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Send e-mail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Tilføj kommentar" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Føj til kontakt" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Tegning" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Rediger note" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Tekst" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Vælg notat" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Opret notat" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Rediger notat" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Ingen notater" + diff --git a/po/de_DE.po b/po/de_DE.po new file mode 100644 index 0000000..e74f0dd --- /dev/null +++ b/po/de_DE.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Memo speichern?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 Memo ausgewählt." + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d Memos ausgewählt." + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "E-Mail senden" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Kommentar hinzufügen" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Zu Kontakt hinzufügen" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Zeichnung" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Memo bearbeiten" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Text" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Memo wählen" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Memo erstellen" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Memo bearbeiten" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Keine Memos" + diff --git a/po/el_GR.po b/po/el_GR.po new file mode 100644 index 0000000..44b663b --- /dev/null +++ b/po/el_GR.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Αποθήκευση σημειώματος;" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Επιλέχθηκε 1 σημείωμα" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Επιλέχθηκαν %d σημειώματα" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Αποστολή email" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Προσθήκη σχολίου" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Προσθήκη σε επαφή" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Σχέδιο" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Επεξεργασία σημείωσης" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Κείμενο" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Επιλογή σημειώματος" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Δημιουργία σημειώματος" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Επεξεργασία σημειώματος" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Κανένα σημείωμα" + diff --git a/po/en.po b/po/en.po new file mode 100644 index 0000000..058ae46 --- /dev/null +++ b/po/en.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Save memo?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 memo selected" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d memos selected" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Send email" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Add comment" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Add to contact" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Drawing" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Edit note" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Text" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Select memo" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Create memo" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Edit memo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "No memos" + diff --git a/po/en_US.po b/po/en_US.po new file mode 100755 index 0000000..058ae46 --- /dev/null +++ b/po/en_US.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Save memo?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 memo selected" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d memos selected" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Send email" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Add comment" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Add to contact" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Drawing" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Edit note" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Text" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Select memo" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Create memo" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Edit memo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "No memos" + diff --git a/po/es_ES.po b/po/es_ES.po new file mode 100644 index 0000000..6ba2fb8 --- /dev/null +++ b/po/es_ES.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "¿Guardar nota?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 nota seleccionada" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d notas seleccionadas" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Enviar correo electrónico" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Añadir comentario" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Añadir a contacto" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Dibujo" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Editar nota" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Texto" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Seleccionar nota" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Crear nota" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Editar nota" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "No hay notas" + diff --git a/po/fi.po b/po/fi.po new file mode 100755 index 0000000..032e461 --- /dev/null +++ b/po/fi.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Tallennetaanko muistio?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 muistio valittu" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d muistiota valittu" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Lähetä sähköpostiviesti" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Lisää kommentti" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Lisää yhteystietoon" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Piirros" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Muokkaa huomautusta" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Teksti" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Valitse muistio" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Luo muistio" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Muokkaa muistiota" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Ei muistioita" + diff --git a/po/fr_FR.po b/po/fr_FR.po new file mode 100644 index 0000000..4396486 --- /dev/null +++ b/po/fr_FR.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Enregistrer un mémo ?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 mémo sélectionné" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d mémos sélectionnés" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Envoyer un e-mail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Ajouter commentaire" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Ajouter aux contacts" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Dessin" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Modifier note" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Texte" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Sélectionner mémo" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Nouveau mémo" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Modifier un mémo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Aucun mémo" + diff --git a/po/he.po b/po/he.po new file mode 100755 index 0000000..db04583 --- /dev/null +++ b/po/he.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "לשמור תזכיר?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 תזכיר נבחר" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "‏‎%d תזכירים נבחרו" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "שלח דוא"ל" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "הוסף הערה" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "הוסף לאיש קשר" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "ציור" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "ערוך הערה" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "טקסט" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "בחר תזכיר" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "צור תזכיר" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "ערוך תזכיר" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "אין תזכירים" + diff --git a/po/header.sh b/po/header.sh new file mode 100755 index 0000000..20805ad --- /dev/null +++ b/po/header.sh @@ -0,0 +1 @@ +cat en.po | awk '{ if($1=="msgid") {ID=$0;} else if ($1=="msgstr"){printf("%s %s\n", ID, $0);}}' | sed "s/msgid//" | sed "s/msgstr//" | sed "s/^.*IDS_MEMO_\(.*\)\".*\"\(.*\)\".*$/#define MEMO_I18N_\1 _(\"IDS_MEMO_\1\") \/\/\2/" diff --git a/po/hi.po b/po/hi.po new file mode 100755 index 0000000..2fe8aed --- /dev/null +++ b/po/hi.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "मेमो सेव करें?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 मेमो चुना गया" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d मेमो चुने गए" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "ईमेल भेजें" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "टिप्पणी जोड़ें" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "संपर्क में जोड़ें" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "चित्रकारी" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "टिप्पणी संपादित करें" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "टेक्स्ट" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "मेमो चुनें" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "मेमो बनाएँ" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "मेमो संपादित करें" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "मेमो नहीं" + diff --git a/po/hr.po b/po/hr.po new file mode 100755 index 0000000..fd0cb1e --- /dev/null +++ b/po/hr.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Spremiti zapis?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 biljeÅ¡ka odabrana" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d odabranih biljeÅ¡ki" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "PoÅ¡alji email" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Dodaj komentar" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Dodaj kontaktu" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Crtež" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Uredi biljeÅ¡ku" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Tekst" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Odaberite biljeÅ¡ku" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Novi zapis" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Uredi" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Nema zapisa" + diff --git a/po/hu.po b/po/hu.po new file mode 100755 index 0000000..8eb6656 --- /dev/null +++ b/po/hu.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Menti a jegyzetet?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 jegyzet kijelölve" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d jegyzet kijelölve" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "E-mail küldése" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Megjegyzés hozzáadása" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Hozzáadás névjegyhez" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Rajz" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Jegyzet szerkesztése" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Szöveg" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Jegyzet kiválasztása" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Emlékeztető létrehozása" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Emlékeztető szerkesztése" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Nincs jegyzet" + diff --git a/po/id.po b/po/id.po new file mode 100755 index 0000000..1a318fd --- /dev/null +++ b/po/id.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Simpan memo?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 memo dipilih" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d memo dipilih" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Kirim email" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Tambah komentar" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Tambah ke kontak" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Gambar" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Edit catatan" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Teks" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Pilih memo" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Membuat memo" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Edit memo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Tdk ada memo" + diff --git a/po/it_IT.po b/po/it_IT.po new file mode 100644 index 0000000..8dcbe0b --- /dev/null +++ b/po/it_IT.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Salvare promemoria?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 promemoria selezionato" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d promemoria selezionati" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Invia e-mail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Agg. commento" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Aggiungi a contatto" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Disegno" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Modifica nota" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Testo" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Seleziona promemoria" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Crea promemoria" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Modifica promemoria" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Nessun promemoria" + diff --git a/po/ja_JP.po b/po/ja_JP.po new file mode 100644 index 0000000..fb98fc6 --- /dev/null +++ b/po/ja_JP.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "メモ​を​保存​しますか?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1件のメモを選択" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d件のメモを選択" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Eメール送信" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "コメント​​追加​" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "電話帳に追加" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "スケッチ" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "ノート​を​編集​します" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "テキスト" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "メモ​を​選択​して​ください" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "メモ​を​作成​します" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "メモ​を​編集" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "メモがありません。" + diff --git a/po/ko_KR.po b/po/ko_KR.po new file mode 100644 index 0000000..be2c236 --- /dev/null +++ b/po/ko_KR.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "메모를 저장할까요?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1개의 메모가 선택되었습니다" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d개의 메모가 선택되었습니다" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "이메일 보내기" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "댓글 추가" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "연락처에 추가" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "그림" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "메모 편집" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "문자" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "메모 선택" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "메모 추가" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "메모 편집" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "메모가 없습니다" + diff --git a/po/lt.po b/po/lt.po new file mode 100755 index 0000000..a8816e6 --- /dev/null +++ b/po/lt.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "IÅ¡saugoti komentarą?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Pasirinktas 1 įraÅ¡as" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Pasirinkta įrašų: %d" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Siųsti el. laiÅ¡ką" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Pridėti komentarą" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Ä®traukti adresatą" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "PieÅ¡inys" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Redaguoti pastabą" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Tekstas" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Pasirinkite įrašą" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Kurti įrašą" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Redaguoti įrašą" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "PraneÅ¡imų nėra" + diff --git a/po/lv.po b/po/lv.po new file mode 100755 index 0000000..53b1318 --- /dev/null +++ b/po/lv.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Vai saglabāt atgādni?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Izvēlēta 1 piezÄ«me" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Izvēlētas %d piezÄ«mes" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "SÅ«tÄ«t e-pasta ziņu" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Pievienot komentāru" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Pievienot kontaktam" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "ZÄ«mējums" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Rediģēt piezÄ«mi" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Teksts" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "PiezÄ«mes izvēle" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Izveidot zÄ«mÄ«ti" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Rediģēt zÄ«mÄ«ti" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "PiezÄ«mju nav" + diff --git a/po/memo.pot b/po/memo.pot new file mode 100644 index 0000000..f600dba --- /dev/null +++ b/po/memo.pot @@ -0,0 +1,85 @@ +# SOME DESCRIPTIVE TITLE. +# Copyright (C) YEAR THE PACKAGE'S COPYRIGHT HOLDER +# This file is distributed under the same license as the PACKAGE package. +# FIRST AUTHOR , YEAR. +# +#, fuzzy +msgid "" +msgstr "" +"Project-Id-Version: PACKAGE VERSION\n" +"Report-Msgid-Bugs-To: \n" +"POT-Creation-Date: 2010-10-13 09:15+0800\n" +"PO-Revision-Date: YEAR-MO-DA HO:MI+ZONE\n" +"Last-Translator: FULL NAME \n" +"Language-Team: LANGUAGE \n" +"MIME-Version: 1.0\n" +"Content-Type: text/plain; charset=CHARSET\n" +"Content-Transfer-Encoding: 8bit\n" + +#: src/memo_edit.c:400 +msgid "Text" +msgstr "" + +#: src/memo_edit.c:401 +msgid "Draw" +msgstr "" + +#. create right button of navi bar +#: src/memo_edit.c:730 +msgid "IDS_COM_SK_DONE" +msgstr "" + +#. create right button of navi bar +#: src/memo_edit.c:732 src/memo_edit_list.c:277 src/memo_search.c:139 +msgid "IDS_MEMO_SK3_CANCEL" +msgstr "" + +#: src/memo_edit.c:733 +msgid "New" +msgstr "" + +#. buttons +#: src/memo_edit.c:733 src/memo_edit_list.c:278 src/memo_portrait_view.c:394 +msgid "IDS_COM_SK_EDIT" +msgstr "" + +#: src/memo_edit_list.c:160 src/memo_edit_list.c:185 +#: src/memo_portrait_view.c:116 src/memo_portrait_view.c:142 +msgid "via message" +msgstr "" + +#: src/memo_edit_list.c:164 src/memo_edit_list.c:186 +#: src/memo_portrait_view.c:120 src/memo_portrait_view.c:143 +msgid "via email" +msgstr "" + +#: src/memo_edit_list.c:187 src/memo_portrait_view.c:144 +msgid "to calendar" +msgstr "" + +#: src/memo_edit_list.c:188 src/memo_portrait_view.c:145 +msgid "to Facebook" +msgstr "" + +#: src/memo_edit_list.c:189 src/memo_portrait_view.c:146 +msgid "to Twitter" +msgstr "" + +#: src/memo_edit_list.c:191 src/memo_portrait_view.c:148 +#: src/memo_portrait_view.c:310 +msgid "Close" +msgstr "" + +#. create right button of navi bar +#. buttons +#: src/memo_edit_list.c:276 src/memo_portrait_view.c:307 +msgid "IDS_COM_SK_DELETE" +msgstr "" + +#: src/memo_edit_list.c:286 src/memo_portrait_view.c:308 +msgid "IDS_COM_SK_SEND" +msgstr "" + +#: src/memo_search.c:140 +msgid "IDS_COM_SK_SEARCH" +msgstr "" diff --git a/po/ms.po b/po/ms.po new file mode 100755 index 0000000..4093f36 --- /dev/null +++ b/po/ms.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Simpan memo?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 memo dipilih" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d memo dipilih" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Hantar emel" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Tambah ulasan" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Tambah ke kenalan" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Melukis" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Sunting nota" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Teks" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Pilih memo" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Cipta memo" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Sunting memo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Tiada memo" + diff --git a/po/nl_NL.po b/po/nl_NL.po new file mode 100644 index 0000000..f0f2c8a --- /dev/null +++ b/po/nl_NL.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Notitie opslaan?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 notitie geselecteerd" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d notities geselecteerd" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "E-mail verzenden" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Opmerking toevoegen" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Toevoegen aan contactpersoon" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Tekening" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Notitie bewerken" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Tekst" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Memo selecteren" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Nieuwe notitie" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Notitie wijzigen" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Geen notities" + diff --git a/po/no.po b/po/no.po new file mode 100755 index 0000000..f2f1215 --- /dev/null +++ b/po/no.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Lagre notat?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 notat valgt" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d notater valgt" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Send e-post" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Legg til kommentar" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Legg til kontakt" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Tegning" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Endre notat" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Tekst" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Velg notat" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Opprett notat" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Rediger memo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Ingen notater" + diff --git a/po/pl.po b/po/pl.po new file mode 100755 index 0000000..ab3ae9a --- /dev/null +++ b/po/pl.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Zapisać notatkę?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Wybranych notatek: 1" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Wybranych notatek: %d" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Wyślij e-mail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Dodaj komentarz" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Dodaj do kontaktów" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Obrazek" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Edytuj notatkę" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Tekst" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Zaznaczanie notatki" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Utwórz notatkę" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Edytuj notatkę" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Brak notatek" + diff --git a/po/pt_PT.po b/po/pt_PT.po new file mode 100644 index 0000000..196b8c2 --- /dev/null +++ b/po/pt_PT.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Guardar memorando?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 memorando seleccionado" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d memorandos seleccionados" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Enviar e-mail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Adicionar comentário" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Adicionar a contacto" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Desenho" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Editar nota" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Texto" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Seleccionar memorando" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Criar memorando" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Editar memorando" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Nenhuns memos" + diff --git a/po/ro.po b/po/ro.po new file mode 100755 index 0000000..4219e9b --- /dev/null +++ b/po/ro.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "SalvaÅ£i nota?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 notă selectată" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d note selectate" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Trimitere email" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Adăugare comentariu" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Adăugare la contacte" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Desen" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Editare notă" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Text" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Selectare notă" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Creare notă" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Editare memo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Nu există note" + diff --git a/po/ru_RU.po b/po/ru_RU.po new file mode 100644 index 0000000..02ce435 --- /dev/null +++ b/po/ru_RU.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Сохранить заметку?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Выбрана 1 заметка" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Выбрано заметок: %d" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Отправить E-mail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Добавить комментарий" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Добавить к контакту" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Рисунок" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Изменить заметку" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Текст" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Выберите заметку" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Создать заметку" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Изменить заметку" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Нет заметок" + diff --git a/po/sk.po b/po/sk.po new file mode 100755 index 0000000..9b4461e --- /dev/null +++ b/po/sk.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "UložiÅ¥ poznámku?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 vybratá poznámka" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Vybraté poznámky: %d" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "OdoslaÅ¥ e-mail" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "PridaÅ¥ komentár" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "PridaÅ¥ do kontaktu" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Kresba" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "UpraviÅ¥ poznámku" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Text" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Vyberte poznámku" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "VytvoriÅ¥ poznámku" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "UpraviÅ¥ poznámku" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Žiadne poznámky" + diff --git a/po/sl.po b/po/sl.po new file mode 100755 index 0000000..499a240 --- /dev/null +++ b/po/sl.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Shranim beležko?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 beležka izbrana" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d beležk izbranih" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "PoÅ¡lji e-poÅ¡to" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Dodaj komentar" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Dodaj v stike" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Risanje" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Uredi beležko" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Besedilo" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Izberi beležko" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Ustvari beležko" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Uredi beležko" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Ni beležk" + diff --git a/po/sr.po b/po/sr.po new file mode 100755 index 0000000..0f93f64 --- /dev/null +++ b/po/sr.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Sačuvaj beleÅ¡ku?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Izabrana je 1 beleÅ¡ka" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Izabrano je %d beleÅ¡ki" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "PoÅ¡alji e-poruku" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Dodaj komentar" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Dodaj u kontakte" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Crtež" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Izmeni napomenu" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Tekst" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Izaberi beleÅ¡ku" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Kreiraj beleÅ¡ku" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Izmeni beleÅ¡ku" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Nema beleÅ¡ki" + diff --git a/po/sv.po b/po/sv.po new file mode 100755 index 0000000..38d104b --- /dev/null +++ b/po/sv.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Spara memo?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 valt memo" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d valda memon" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Skicka e-post" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Lägg till kommentar" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Lägg till till kontakt" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Ritning" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Redigera anteckning" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Text" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Välj memo" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Skapa memo" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Redigera memo" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Inga memon" + diff --git a/po/th.po b/po/th.po new file mode 100755 index 0000000..763ff4b --- /dev/null +++ b/po/th.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "บันทึก\n​สมุด​บันทึก?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "เลือก​สมุด​บันทึก 1 ​รายการ" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "เลือก​สมุด​บันทึก %d ​รายการ" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "ส่ง​อี​เมล์" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "เพิ่ม​ความ​คิด​เห็น" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "เพิ่ม​ใน​ราย​ชื่อ" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "รูป​วาด" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "แก้ไข​บันทึก" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "ตัว​อักษร" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "เลือก​สมุด​บันทึก" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "สร้าง​สมุด​บันทึก" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "แก้ไข​สมุด​บันทึก" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "ไม่มีสมุดบันทึก" + diff --git a/po/tr_TR.po b/po/tr_TR.po new file mode 100644 index 0000000..b95adee --- /dev/null +++ b/po/tr_TR.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Not kaydet?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 not seçildi" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d not seçildi" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "E-posta gönder" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Yorum ekle" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Rehbere ekle" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Çizim" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Notu düzenle" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Metin" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Not seçin" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Not oluştur" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Not düzenle" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Not yok" + diff --git a/po/uk.po b/po/uk.po new file mode 100755 index 0000000..a2506cf --- /dev/null +++ b/po/uk.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "Зберегти нагадування?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "Вибрано 1 нагадування" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "Вибрано нагадувань: %d" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Надіслати Email" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Додати коментар" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Додати до контакту" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Креслення" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Редагувати нотатку" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Текст" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Вибрати нагадування" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Створити нагадування" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Редагувати нагадування" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Немає нагадувань" + diff --git a/po/update-po.sh b/po/update-po.sh new file mode 100755 index 0000000..73a4be2 --- /dev/null +++ b/po/update-po.sh @@ -0,0 +1,60 @@ +#!/bin/sh + +PACKAGE=memo +SRCROOT=.. +POTFILES=POTFILES.in + +#ALL_LINGUAS= am az be ca cs da de el en_CA en_GB es et fi fr hr hu it ja ko lv mk ml ms nb ne nl pa pl pt pt_BR ru rw sk sl sr sr@Latn sv ta tr uk vi zh_CN zh_TW +ALL_LINGUAS="de el en_US es fr it ja ko nl pt ru tk zh_CN zh_HK zh_TW" + +XGETTEXT=/usr/bin/xgettext +MSGMERGE=/usr/bin/msgmerge + +echo -n "Make ${PACKAGE}.pot " +if [ ! -e $POTFILES ] ; then + echo "$POTFILES not found" + exit 1 +fi + +$XGETTEXT --default-domain=${PACKAGE} --directory=${SRCROOT} \ + --add-comments --keyword=_ --keyword=N_ --files-from=$POTFILES +if [ $? -ne 0 ]; then + echo "xgettext error" + exit 1 +fi + +if [ ! -f ${PACKAGE}.po ]; then + echo "No such file: ${PACKAGE}.po" + exit 1 +fi + +rm -f ${PACKAGE}.pot && mv ${PACKAGE}.po ${PACKAGE}.pot +echo "done" + +for LANG in $ALL_LINGUAS; do + echo "$LANG : " + + if [ ! -e $LANG.po ] ; then + sed 's/CHARSET/UTF-8/g' ${PACKAGE}.pot > ${LANG}.po + echo "${LANG}.po created" + else + if $MSGMERGE ${LANG}.po ${PACKAGE}.pot -o ${LANG}.new.po ; then + if cmp ${LANG}.po ${LANG}.new.po > /dev/null 2>&1; then + rm -f ${LANG}.new.po + else + if mv -f ${LANG}.new.po ${LANG}.po; then + echo "" + else + echo "msgmerge for $LANG.po failed: cannot move $LANG.new.po to $LANG.po" 1>&2 + rm -f ${LANG}.new.po + exit 1 + fi + fi + else + echo "msgmerge for $LANG failed!" + rm -f ${LANG}.new.po + fi + fi + echo "" +done + diff --git a/po/vi.po b/po/vi.po new file mode 100755 index 0000000..dbc2015 --- /dev/null +++ b/po/vi.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "LÆ°u ghi chú?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "1 ghi chú đã chọn" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "%d ghi chú đã chọn" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "Gá»­i email" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "Thêm bình luận" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "Thêm vào danh bạ" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "Hình vẽ" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "Sá»­a ghi chú" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "Văn bản" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "Chọn ghi nhớ" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "Tạo bản ghi chú" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "Sá»­a ghi chú" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "Không có ghi chú" + diff --git a/po/zh_CN.po b/po/zh_CN.po new file mode 100644 index 0000000..479eb02 --- /dev/null +++ b/po/zh_CN.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "要保存备忘录吗?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "已选择1个备忘录" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "已选择%d个备忘录" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "发送邮件" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "添加评论" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "添加到联系人" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "画图" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "编辑注释" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "文本" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "选择备忘录" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "新建备忘录" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "编辑备忘录" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "无备忘录" + diff --git a/po/zh_HK.po b/po/zh_HK.po new file mode 100644 index 0000000..98d1834 --- /dev/null +++ b/po/zh_HK.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "要儲存備忘錄嗎?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "已選擇 1 個備忘錄" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "已選擇 %d 個備忘錄" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "發送電子郵件" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "加入評語" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "加到聯絡人" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "繪製" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "編輯記事" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "文字" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "選擇備忘錄" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "建立備忘錄" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "編輯備忘錄" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "沒有備忘錄" + diff --git a/po/zh_TW.po b/po/zh_TW.po new file mode 100644 index 0000000..72afc6f --- /dev/null +++ b/po/zh_TW.po @@ -0,0 +1,39 @@ +msgid "IDS_MEMO_POP_DIALOG_SAVE_MEMO" +msgstr "要儲存備忘錄嗎?" + +msgid "IDS_MEMO_POP_1_MEMO_SELECTED" +msgstr "已選取 1 項備忘錄" + +msgid "IDS_MEMO_POP_PD_MEMOS_SELECTED" +msgstr "已選取 %d 項備忘錄" + +msgid "IDS_MEMO_OPT_SEND_EMAIL" +msgstr "傳送電子郵件" + +msgid "IDS_MEMO_BODY_ADD_COMMENT" +msgstr "新增留言" + +msgid "IDS_MEMO_BODY_ADD_TO_CONTACT" +msgstr "加到聯絡人" + +msgid "IDS_MEMO_BODY_DRAWING" +msgstr "繪圖" + +msgid "IDS_MEMO_BODY_EDIT_NOTE" +msgstr "編輯備註" + +msgid "IDS_MEMO_BODY_TEXT" +msgstr "文字" + +msgid "IDS_MEMO_HEADER_SELECT_MEMO_ABB" +msgstr "選擇備忘錄" + +msgid "IDS_MEMO_HEADER_CREATE_MEMO" +msgstr "建立備忘錄" + +msgid "IDS_MEMO_BODY_EDIT_MEMO" +msgstr "編輯備忘錄" + +msgid "IDS_MEMO_BODY_NO_MEMOS" +msgstr "無備忘錄" + diff --git a/scripts/copyright b/scripts/copyright new file mode 100644 index 0000000..dd461b5 --- /dev/null +++ b/scripts/copyright @@ -0,0 +1,17 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ diff --git a/scripts/float.sh b/scripts/float.sh new file mode 100755 index 0000000..f1e8a4f --- /dev/null +++ b/scripts/float.sh @@ -0,0 +1,28 @@ +#!/bin/bash +dest="../include/memo_edc_float.h" +scale=5 + +rm -f $dest +cat ./copyright > $dest +echo "#ifndef __MEMO_EDC_FLOAT_H__ +#define __MEMO_EDC_FLOAT_H__ + +/* Don't modify this file manually, generate it by float.sh located in scripts directory!!! */ +" >> $dest + +files=$(ls ../edc/ | grep "in$") +for i in $files ; do + rpath=$(realpath ../edc/$i) + echo "Handling $rpath ..." + while l=$(line) ; do + n=$(echo $l | awk '{print $1}') + f=$(echo $l | sed -r "s/^\w+\s+/scale=$scale;/" | bc | sed -r "s/^\./0./") + echo "#define $n $f" >> $dest + done < $rpath +done + +echo " +#endif /* __MEMO_EDC_FLOAT_H__ */ +" >> $dest + +chmod -w $dest diff --git a/scripts/images_strip.sh b/scripts/images_strip.sh new file mode 100755 index 0000000..7c79afa --- /dev/null +++ b/scripts/images_strip.sh @@ -0,0 +1,20 @@ +#!/bin/bash +#theme image strip +find ../theme -depth -iname "*.png" | xargs -n 1 -I {} basename {} | sort -u > /tmp/origin +while LINE=$(line) ; do + result=$(grep $LINE ../theme -r) + if [[ "$result" == "" ]] ; then + echo "remove $LINE ......" + find ../theme -depth -iname "$LINE" | xargs -n 1 rm -f + fi +done < /tmp/origin + +#system image strip +find ../images -depth -iname "*.png" | xargs -n 1 -I {} basename {} | sort -u > /tmp/origin +while LINE=$(line) ; do + result=$(grep $LINE ../src ../edc ../memo.edc ../include ../extend -r) + if [[ "$result" == "" ]] ; then + echo "remove $LINE ......" + find ../images -depth -iname "$LINE" | xargs -n 1 rm -f + fi +done < /tmp/origin diff --git a/scripts/str.in b/scripts/str.in new file mode 100644 index 0000000..d28414d --- /dev/null +++ b/scripts/str.in @@ -0,0 +1,40 @@ +Add comment +Add to contact +Back +Calendar +Cancel +Close +Create +Delete +Drawing +Edit +Edit comment +Edit drawing +Edit note +Edit memo +Email +Facebook +Memo +Message +Create memo +Create Drawing +Create Note +No +No memos +Save +Save memo? +Search +Select all +Select memo +Send +Send email +Send message +Set +Share +Text +Twitter +Video call +Voice call +Yes +1 memo selected +%d memos selected diff --git a/scripts/string.sh b/scripts/string.sh new file mode 100644 index 0000000..4e845d6 --- /dev/null +++ b/scripts/string.sh @@ -0,0 +1,93 @@ +SYS_MO="$HOME/sbs/target-armel/usr/share/locale/en/LC_MESSAGES/sys_string.mo" +APP_MO="$HOME/sbs/target-armel/opt/apps/org.tizen.memo/res/locale/en/LC_MESSAGES/memo.mo" +TEMP_STR="./temp" +IN="str.in" +APP_NAME="memo" + +declare -a SYS_ID +declare -a APP_ID +declare -a CUSTOM_ID + +out=../include/"$APP_NAME""_string.h" +rm -fr $out + +sbs -et apt-get install sys-string-0 -y --force-yes + +function get_str_id () { + local str=$1 + local mo=$2 + local result="" + if [[ -e $mo ]] ; then + result=`msgunfmt $mo | grep "\"$str\"" -B 1 | head -n 1 | awk '{print $2}'` + fi + echo $result +} + +function get_tmp_id () { + local str=$1 + local result="" + if [[ -e $TEMP_STR ]] ; then + result=`cat $TEMP_STR | grep "$str" -A 1 | tail -n 1 | awk '{print $1}'` + fi + echo $result +} + +function gen_id () { + local prefix=$1 + local str=$2 + local id=$prefix`echo $str | tr a-z A-Z | sed "s/ /_/g" | sed "s/?//g" | sed "s/%//g"` + echo $id +} + +function dump () { + local dest=$1 + local str=$2 + printf "$str\n" >> $dest +} + +#copy right +cat ./copyright > $out +dump $out "" +dump $out "#ifndef __MEMO_STRING_H__" +dump $out "#define __MEMO_STRING_H__" + +LINES=`cat $IN |wc -l` +for (( i=1; i<=$LINES; i++ )) ; do + string=`cat $IN | sed -n "$i p"` + sys_id=$(get_str_id "$string" "$SYS_MO") + app_id=$(get_str_id "$string" "$APP_MO") + tmp_id=$(get_tmp_id "$string") + if [ "$sys_id" != "" ] ; then + SYS_ID[${#SYS_ID[@]}]=$(gen_id "MEMO_I18N_" "$string") #append id to array + SYS_ID[${#SYS_ID[@]}]="dgettext(\"sys_string\", $sys_id) /* $string */" #append def to array + elif [ "$app_id" != "" ] ; then + APP_ID[${#APP_ID[@]}]=$(gen_id "MEMO_I18N_" "$string") + APP_ID[${#APP_ID[@]}]="dgettext(\"memo\", $app_id) /* $string */" + elif [ "$tmp_id" != "" ] ; then + CUSTOM_ID[${#CUSTOM_ID[@]}]=$(gen_id "MEMO_I18N_" "$string") + CUSTOM_ID[${#CUSTOM_ID[@]}]="dgettext(\"memo\", \"$tmp_id\") /* $string */" + else + CUSTOM_ID[${#CUSTOM_ID[@]}]=$(gen_id "MEMO_I18N_" "$string") + CUSTOM_ID[${#CUSTOM_ID[@]}]="_(\"$string\") /* $string */" + fi +done + +#dump results +dump $out "" +dump $out "/* system string */" +for (( i=0; i<${#SYS_ID[@]} ; i+=2 )) ; do + printf "#define %-36s %s\n" ${SYS_ID[$i]} "${SYS_ID[$i+1]}">> $out +done +dump $out "" +dump $out "/* app string */" +for (( i=0; i<${#APP_ID[@]} ; i+=2 )) ; do + printf "#define %-36s %s\n" ${APP_ID[$i]} "${APP_ID[$i+1]}">> $out +done +dump $out "" +dump $out "/* custom string */" +for (( i=0; i<${#CUSTOM_ID[@]} ; i+=2 )) ; do + printf "#define %-36s %s\n" "${CUSTOM_ID[$i]}" "${CUSTOM_ID[$i+1]}" >> $out +done + +dump $out "" +dump $out "#endif /* __MEMO_STRING_H__ */" diff --git a/scripts/temp b/scripts/temp new file mode 100644 index 0000000..650ebc9 --- /dev/null +++ b/scripts/temp @@ -0,0 +1,2 @@ +#Add comment +#IDS_MEMO_ADD_COMMENT diff --git a/src/memo-assist.c b/src/memo-assist.c new file mode 100644 index 0000000..4d83c66 --- /dev/null +++ b/src/memo-assist.c @@ -0,0 +1,671 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "memo_log.h" + +#define ICU_TIME_BUFFER 256 +static UDateFormat* dfmt = NULL; +extern Eina_Bool launch_by_new; +extern Eina_Bool normal_memo_launch ; + + +/** + * memo_get_doodle_title + * + * @brief + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +char *memo_get_doodle_title() +{ + memo_data_list_t *l = NULL; + memo_data_list_t *t = NULL; + char buf[MEMO_BUFFER_SIZE]; + int i = 0; + int d = 0; + l = memo_get_all_data_list(); + for (t = l; t != NULL; t = t->next) { + if (t->md.has_doodle) { + d = atoi(t->md.content + strlen(DOODLE_TITLE_PREFIX)); + i = (d > i) ? d : i; + } + } + i++; + snprintf(buf, MEMO_BUFFER_SIZE, "%s%04d", DOODLE_TITLE_PREFIX, i); + memo_free_data_list(l); + return strdup(buf); +} + +void icu_init() +{ + UErrorCode status = U_ZERO_ERROR; + const char *locale; + UChar ubuf[ICU_TIME_BUFFER]; + UChar bestPattern[ICU_TIME_BUFFER]; + UDateTimePatternGenerator *generator; + int retcode; + bool isclockformat24h = true; + char *timezone_id = NULL; + UChar utimezone_id[256] = {0,}; + + /* reset timezone according to vconf */ + timezone_id = vconf_get_str(VCONFKEY_SETAPPL_TIMEZONE_ID); + u_uastrcpy(utimezone_id, timezone_id); + SFREE(timezone_id); + ucal_setDefaultTimeZone(utimezone_id , &status); + /* init */ + uloc_setDefault(getenv("LC_TIME"), &status); /* ICU API to set default locale */ + locale = uloc_getDefault(); + /* format */ + retcode = runtime_info_get_value_bool(RUNTIME_INFO_KEY_24HOUR_CLOCK_FORMAT_ENABLED, &isclockformat24h); + if (retcode != RUNTIME_INFO_ERROR_NONE) + isclockformat24h = false; + if (isclockformat24h) { + /* 14 May 09 15:37 */ + u_strFromUTF8(ubuf, MEMO_BUFFER_SIZE, NULL, "dMMMyyHHmm", -1, &status); + } else { + /* 14 May 09 03:37 PM */ + u_strFromUTF8(ubuf, MEMO_BUFFER_SIZE, NULL, "dMMMyyhhmma", -1, &status); + } + /* get pattern */ + generator = udatpg_open(locale, &status); + udatpg_getBestPattern(generator, ubuf, u_strlen(ubuf), bestPattern, ICU_TIME_BUFFER, &status); + udatpg_close(generator); + /* format */ + if (dfmt != NULL) { + udat_close(dfmt); + } + dfmt = udat_open(UDAT_IGNORE, UDAT_IGNORE, locale, NULL, -1, bestPattern, -1, &status); +} + +/** + * memo_time_format + * + * @brief + * + * @param [in] buf buffer used to store formated time + * + * @param [in] len length of buf + * + * @param [in] time actual time + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +void memo_time_format(char *buf, int len, time_t time) +{ + UErrorCode status = U_ZERO_ERROR; + UChar ubuf[ICU_TIME_BUFFER]; + + if (dfmt == NULL) { + icu_init(); + } + udat_format(dfmt, (UDate)time*1000, ubuf, ICU_TIME_BUFFER, NULL, &status); + u_strToUTF8(buf, len, NULL, ubuf, -1, &status); +} + +time_t memo_get_binary_release_date() +{ + struct tm time = {0}; + char *date = NULL; + dictionary *about_dic = iniparser_load("/etc/info.ini"); + + RETVIF(about_dic==NULL, 0); + date = iniparser_getstr(about_dic, "Build:Date"); + strptime(date, "%Y.%m.%d", &time); + iniparser_freedict(about_dic); + return timelocal(&time); +} + +/** + * mouse_event_identify + * + * @brief + * + * @param [in] startx + * + * @param [in] starty + * + * @param [in] endx + * + * @param [in] endy + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +mouse_behaviour_t mouse_event_identify(int startx, int starty, int endx, int endy) +{ + int gapx = 0; + int gapy = 0; + + if ((startx == MOUSE_POSITION_INVALID) + || (starty == MOUSE_POSITION_INVALID) + || (endx == MOUSE_POSITION_INVALID) + || (endy == MOUSE_POSITION_INVALID)) { + return MOUSE_EVENT_INVALID; + } + + gapx = endx - startx; + gapy = endy - starty; + if ((abs(gapx) <= 10) && (abs(gapy) <= 10)) { /* click */ + return MOUSE_EVENT_CLICK; + } else if (abs(gapx) > abs(gapy)) { /* horizonal drag */ + return gapx > 0 ? MOUSE_EVENT_DRAG_RIGHT : MOUSE_EVENT_DRAG_LEFT; + } else { /* vertical drag */ + return gapy > 0 ? MOUSE_EVENT_DRAG_DOWN : MOUSE_EVENT_DRAG_UP; + } +} + +static void _evas_object_on_mouse_down(void *data, Evas *e, Evas_Object *evas_obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info; + evas_object_data_set(evas_obj, "startx", (const void *)ev->output.x); + evas_object_data_set(evas_obj, "starty", (const void *)ev->output.y); +} + +static void _evas_object_on_mouse_up(void *data, Evas *e, Evas_Object *evas_obj, void *event_info) +{ + Evas_Event_Mouse_Down *ev = (Evas_Event_Mouse_Down *)event_info; + int startx = (int)evas_object_data_get(evas_obj, "startx"); + int starty = (int)evas_object_data_get(evas_obj, "starty"); + Evas_Smart_Cb on_flick = (Evas_Smart_Cb)evas_object_data_get(evas_obj, "on_flick"); + mouse_behaviour_t mbt = mouse_event_identify(startx, starty, ev->output.x, ev->output.y); + evas_object_data_set(evas_obj, "startx", (const void *)MOUSE_POSITION_INVALID); + evas_object_data_set(evas_obj, "starty", (const void *)MOUSE_POSITION_INVALID); + if (on_flick != NULL) { + on_flick(data, evas_obj, (void *)mbt); + } +} + +void evas_object_flick_callback_add(Evas_Object *obj, Evas_Smart_Cb on_flick, void *data) +{ + evas_object_data_set(obj, "startx", (const void *)MOUSE_POSITION_INVALID); + evas_object_data_set(obj, "starty", (const void *)MOUSE_POSITION_INVALID); + evas_object_data_set(obj, "on_flick", (const void *)on_flick); + evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_DOWN, _evas_object_on_mouse_down, data); + evas_object_event_callback_add(obj, EVAS_CALLBACK_MOUSE_UP, _evas_object_on_mouse_up, data); +} + +void memo_com_dummy_cb(void *data, const char *msg, void *event) +{ + LOGD("msg : %s\n", msg); +} + +typedef struct __pop_data_t { + Evas_Smart_Cb on_yes; + Evas_Smart_Cb on_no; + void *user_data; + Evas_Object *pop; +} pop_data_t; + +static void _on_yes_cb(void *data, Evas_Object *obj, void *event_info) +{ + pop_data_t *pData = (pop_data_t *)data; + if (pData->on_yes != NULL) { + pData->on_yes(pData->user_data, obj, event_info); + } + evas_object_del(pData->pop); + SFREE(pData); +} + +static void _on_no_cb(void *data, Evas_Object *obj, void *event_info) +{ + pop_data_t *pData = (pop_data_t *)data; + if (pData->on_no != NULL) { + pData->on_no(pData->user_data, obj, event_info); + } + evas_object_del(pData->pop); + SFREE(pData); +} + +/** + * memo_create_yes_no_popup + * + * @brief + * + * @param [in] win + * + * @param [in] msg + * + * @param [in] on_yes + * + * @param [in] on_no + * + * @param [in] data + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +void memo_create_yes_no_popup(Evas_Object *win, const char *msg, Evas_Smart_Cb on_yes, Evas_Smart_Cb on_no, void *data) +{ + pop_data_t *pd = SMALLOC(pop_data_t); + RETIF(pd == NULL); + + pd->on_yes = on_yes; + pd->on_no = on_no; + pd->user_data = data; + Evas_Object *popup = elm_popup_add(win); + pd->pop = popup; + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(popup, msg); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_text_set(btn1, MEMO_I18N_YES); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", _on_yes_cb, pd); + Evas_Object *btn2 = elm_button_add(popup); + elm_object_text_set(btn2, MEMO_I18N_NO); + elm_object_part_content_set(popup, "button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", _on_no_cb, pd); + evas_object_show(popup); +} + +void memo_tool_btn_focus_set(Evas_Object *eo, Eina_Bool status) +{ + edje_object_signal_emit(elm_layout_edje_get(eo), (status ? "focus" : "normal"), "elm"); +} + +static void _set_bg(Evas_Object *obj, service_h service) +{ + unsigned char *color = NULL; + int bg_color = 0xff000000; /* ARGB */ + char *s = NULL; + service_get_extra_data(service, "bg_color", &s); + if (s != NULL) { + bg_color = atoi(s); + SFREE(s); + } + color = (unsigned char *)&bg_color; + evas_object_color_set(obj, color[2], color[1], color[0], color[3]); +} + +typedef struct __font_size_selector_t { + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + /* content */ + Evas_Object *body_main; + Evas_Object *slider; + Evas_Object *label; + Evas_Object *event_rect; /* for sweep */ + /* other */ + int min; + int max; + int current; +}font_size_selector_t; + +static void _on_font_size_change_cb(void *data, Evas_Object *obj, void *event_info) +{ + font_size_selector_t *fss = (font_size_selector_t *)data; + double fontSize = elm_slider_value_get(fss->slider); + fss->current = floor(fontSize + 0.5); + char buf[MEMO_BUFFER_SIZE]; + snprintf(buf, MEMO_BUFFER_SIZE, "Abc", fss->current); + elm_object_text_set(fss->label, buf); + fss->cb(fss->data, "change", (void *)fss->current); +} + +static void _fss_on_flick(void *data, Evas_Object *evas_obj, void *event_info) +{ + font_size_selector_t *fss = (font_size_selector_t *)data; + if ((mouse_behaviour_t)event_info == MOUSE_EVENT_DRAG_DOWN) { + fss->cb(fss->data, "flick,down", (void *)fss->current); + } +} + +void *memo_load_font_size_selector(Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data) +{ + font_size_selector_t *fss = SMALLOC(font_size_selector_t); + RETVIF(fss==NULL, NULL); + service_dump(service); + fss->parent = parent; + fss->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + fss->data = data; + + /* init */ + fss->min = 20; + fss->max = 60; + fss->current = 30; + char *s = NULL; + service_get_extra_data(service, "current", &s); + if (s != NULL) { + fss->current = atoi(s); + SFREE(s); + } + + fss->body_main = elm_layout_create(fss->parent, EDJ_FILE, "font_size_selector"); + fss->cb(fss->data, "layout", fss->body_main); + + /* background */ + Evas_Object *bg = evas_object_rectangle_add(evas_object_evas_get(parent)); + _set_bg(bg, service); + elm_object_part_content_set(fss->body_main, "bg.color", bg); + /* slider */ + fss->slider = elm_slider_add(fss->body_main); + elm_object_style_set(fss->slider, "expanded_indicator_button"); + elm_slider_indicator_show_set(fss->slider, EINA_TRUE); + elm_slider_min_max_set(fss->slider, fss->min, fss->max); + elm_slider_indicator_format_set(fss->slider, "%1.0f"); + elm_slider_value_set(fss->slider, fss->current); + evas_object_smart_callback_add(fss->slider, "changed", _on_font_size_change_cb, fss); + elm_object_part_content_set(fss->body_main, "elm.swallow.selector", fss->slider); + /* preview text */ + fss->label = elm_label_add(fss->body_main); + char buf[MEMO_BUFFER_SIZE]; + snprintf(buf, MEMO_BUFFER_SIZE, "Abc", fss->current); + elm_object_text_set(fss->label, buf); + elm_object_part_content_set(fss->body_main, "elm.swallow.label", fss->label); + /* for flick event */ + fss->event_rect = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(fss->body_main), "event"); + evas_object_flick_callback_add(fss->event_rect, _fss_on_flick, fss); + + return (void *)fss; +} + +void memo_del_font_size_selector(void *h_fss) +{ + font_size_selector_t *fss = (font_size_selector_t *)h_fss; + evas_object_del(fss->body_main); + SFREE(fss); +} + +typedef struct __color_selector_t { + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + /* content */ + Evas_Object *body_main; + Evas_Object *selector; + Evas_Object *rect; /* color rect */ + Evas_Object *event_rect; /* for sweep */ + /* other */ + int color; /* ARGB */ +}color_selector_t; + +static void _on_color_change_cb(void *data, Evas_Object *obj, void *event_info) +{ + int r, g, b, a; + color_selector_t *cs = (color_selector_t *)data; + elm_colorselector_color_get(cs->selector, &r, &g, &b, &a); + evas_object_color_set(cs->rect, r, g, b, a); + int color = ARGB_JOIN(a, r, g, b); + if (cs->color != color) { + cs->color = color; + cs->cb(cs->data, "change", (void *)cs->color); + } +} + +static void _cs_on_flick(void *data, Evas_Object *evas_obj, void *event_info) +{ + color_selector_t *cs = (color_selector_t *)data; + if ((mouse_behaviour_t)event_info == MOUSE_EVENT_DRAG_DOWN) { + cs->cb(cs->data, "flick,down", (void *)cs->color); + } +} + +void *memo_load_color_selector(Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data) +{ + color_selector_t *cs = SMALLOC(color_selector_t); + RETVIF(cs==NULL, NULL); + service_dump(service); + cs->parent = parent; + cs->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + cs->data = data; + + /* init */ + cs->color = 0xff000000; + char *s = NULL; + service_get_extra_data(service, "color", &s); + if (s != NULL) { + cs->color = atoi(s); + SFREE(s); + } + cs->body_main = elm_layout_create(cs->parent, EDJ_FILE, "color_selector"); + cs->cb(cs->data, "layout", cs->body_main); + + /* background */ + service_get_extra_data(service, "bg_color", &s); + if (s != NULL) { + edje_object_signal_emit(elm_layout_edje_get(cs->body_main), "white", "elm"); + SFREE(s); + } else { + edje_object_signal_emit(elm_layout_edje_get(cs->body_main), "white", "elm"); + } + /* selector */ + cs->selector = elm_colorselector_add(cs->body_main); + elm_colorselector_mode_set(cs->selector, ELM_COLORSELECTOR_COMPONENTS); + elm_object_part_content_set(cs->body_main, "elm.swallow.selector", cs->selector); + unsigned char *color = (unsigned char *)&cs->color; + elm_colorselector_color_set(cs->selector, color[2], color[1], color[0], color[3]); + evas_object_smart_callback_add(cs->selector, "changed", _on_color_change_cb, cs); + /* preview color rect */ + cs->rect = evas_object_rectangle_add(evas_object_evas_get(parent)); + evas_object_color_set(cs->rect, color[2], color[1], color[0], color[3]); + elm_object_part_content_set(cs->body_main, "elm.swallow.color", cs->rect); + /* for flick event */ + cs->event_rect = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(cs->body_main), "event"); + evas_object_flick_callback_add(cs->event_rect, _cs_on_flick, cs); + + return (void *)cs; +} + +void memo_del_color_selector(void *h_cs) +{ + color_selector_t *cs = (color_selector_t *)h_cs; + evas_object_del(cs->body_main); + SFREE(cs); +} + +typedef struct __pencil_size_selector_t { + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + /* content */ + Evas_Object *body_main; + Evas_Object *slider; + Evas_Object *rect; /* previw rect */ + Evas_Object *event_rect; /* for sweep */ + /* other */ + int min; + int max; + int current; +}pencil_size_selector_t; + +static void _on_pencil_size_change_cb(void *data, Evas_Object *obj, void *event_info) +{ + pencil_size_selector_t *pss = (pencil_size_selector_t *)data; + double penSize = elm_slider_value_get(pss->slider); + pss->current = floor(penSize + 0.5); + evas_object_size_hint_min_set(pss->rect, 0, pss->current); + pss->cb(pss->data, "change", (void *)pss->current); +} + +static void _pss_on_flick(void *data, Evas_Object *evas_obj, void *event_info) +{ + pencil_size_selector_t *pss = (pencil_size_selector_t *)data; + if ((mouse_behaviour_t)event_info == MOUSE_EVENT_DRAG_DOWN) { + pss->cb(pss->data, "flick,down", (void *)pss->current); + } +} + +void *memo_load_pencil_size_selector(Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data) +{ + pencil_size_selector_t *pss = SMALLOC(pencil_size_selector_t); + RETVIF(pss==NULL, NULL); + service_dump(service); + pss->parent = parent; + pss->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + pss->data = data; + + /* init */ + pss->min = 1; + pss->max = 8; + pss->current = 8; + char *s = NULL; + service_get_extra_data(service, "current", &s); + if (s != NULL) { + pss->current = atoi(s); + SFREE(s); + } + + pss->body_main = elm_layout_create(pss->parent, EDJ_FILE, "pencil_size_selector"); + pss->cb(pss->data, "layout", pss->body_main); + + /* background */ + Evas_Object *bg = evas_object_rectangle_add(evas_object_evas_get(parent)); + _set_bg(bg, service); + elm_object_part_content_set(pss->body_main, "bg.color", bg); + /* slider */ + pss->slider = elm_slider_add(pss->body_main); + elm_object_style_set (pss->slider, "expanded_indicator_button"); + elm_slider_indicator_show_set(pss->slider, EINA_TRUE); + elm_slider_min_max_set(pss->slider, pss->min, pss->max); + elm_slider_indicator_format_set(pss->slider, "%1.0f"); + elm_slider_value_set(pss->slider, pss->current); + evas_object_smart_callback_add(pss->slider, "changed", _on_pencil_size_change_cb, pss); + elm_object_part_content_set(pss->body_main, "elm.swallow.selector", pss->slider); + /* preview size rect */ + pss->rect = evas_object_rectangle_add(evas_object_evas_get(parent)); + evas_object_color_set(pss->rect, 0, 0, 0, 255); + evas_object_size_hint_min_set(pss->rect, 0, pss->current); + elm_object_part_content_set(pss->body_main, "elm.swallow.pencil", pss->rect); + /* for flick event */ + pss->event_rect = (Evas_Object *)edje_object_part_object_get(elm_layout_edje_get(pss->body_main), "event"); + evas_object_flick_callback_add(pss->event_rect, _pss_on_flick, pss); + + return (void *)pss; +} + +void memo_del_pencil_size_selector(void *h_pss) +{ + pencil_size_selector_t *pss = (pencil_size_selector_t *)h_pss; + evas_object_del(pss->body_main); + SFREE(pss); +} + +void memo_navigator_pop(Evas_Object *navi) +{ + Elm_Object_Item *top_it = elm_naviframe_top_item_get(navi); + Evas_Object *eo = elm_object_item_content_get(top_it); + Evas_Object *prev_eo = evas_object_data_get(eo, "previous_obj"); + if(prev_eo == NULL) { /* exit when view stack is empty */ + elm_exit(); + if(normal_memo_launch) { + normal_memo_launch = EINA_FALSE; + } + } else { + Evas_Smart_Cb cb = evas_object_data_get(prev_eo, "update_cb"); + if(launch_by_new && !cb) { + elm_naviframe_item_pop(navi); + return ; + } + RETIF(cb == NULL); + void *cb_data = evas_object_data_get(prev_eo, "update_data"); + cb(cb_data, NULL, NULL); + } + elm_naviframe_item_pop(navi); +} + +Elm_Object_Item *memo_naviframe_item_push(Evas_Object *obj, const char *title_label, + Evas_Object *prev_btn, Evas_Object *next_btn, Evas_Object *content, const char *item_style) +{ + Elm_Object_Item *top_it = elm_naviframe_top_item_get(obj); + if (top_it != NULL) { + Evas_Object *eo = elm_object_item_content_get(top_it); + if (eo != NULL) { + evas_object_data_set(content, "previous_obj", eo); + } + } + + return elm_naviframe_item_push(obj, title_label, prev_btn, next_btn, content, item_style); +} + +Eina_Bool memo_comment_savable(Evas_Object *entry, const char *orig_utf8) +{ + const char *text = elm_entry_entry_get(entry); + char *content = elm_entry_markup_to_utf8(text); + Eina_Bool savable = EINA_TRUE; + + if (strcmp(content, "") == 0) { + savable = EINA_FALSE; + } else if (orig_utf8 != NULL) { /* check if same as init string */ + if (strcmp(orig_utf8, content)==0) { + savable = EINA_FALSE; + } + } + SFREE(content); + return savable; +} + +void memo_comment_recover(Evas_Object *entry, const char *orig_utf8) +{ + if (orig_utf8 == NULL) { + elm_entry_entry_set(entry, MEMO_I18N_ADD_COMMENT); + } else { + char *content = elm_entry_utf8_to_markup(orig_utf8); + elm_entry_entry_set(entry, content); + SFREE(content); + } +} + +Evas_Object *memo_controlbar_add(Evas_Object *parent) +{ + Evas_Object *toolbar = elm_toolbar_add(parent); + elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND); + elm_toolbar_homogeneous_set(toolbar, EINA_FALSE); + return toolbar; +} diff --git a/src/memo-genlist.c b/src/memo-genlist.c new file mode 100644 index 0000000..5deb351 --- /dev/null +++ b/src/memo-genlist.c @@ -0,0 +1,262 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "memo_log.h" + +static void _str_append_utf8(char *s, int size, const char *utf8) +{ + char *content = NULL; + content = elm_entry_utf8_to_markup(utf8); + RETIF(content == NULL); + sncat(s,size, content); + SFREE(content); +} +/** + * memo_gl_label_get + * + * @brief + * + * @param [in] data user specified data + * + * @param [in] obj evas_object of elm_genlist_item + * + * @param [in] part part name in genlist group + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +char *memo_gl_label_get(void *data, Evas_Object *obj, const char *part) +{ + MEMO_FUN_BEG(); + gl_data_t *gld = (gl_data_t *)data; + char buf[MEMO_BUFFER_SIZE] = {0}; + char input[MEMO_BUFFER_SIZE] = {0}; + char output[MEMO_BUFFER_SIZE] = {0}; + const char *p = NULL; + const char *pre = NULL; + + if (!strcmp(part, "elm.text.date")) { + memo_time_format(buf, MEMO_BUFFER_SIZE, gld->mod_time); + MEMO_FUN_END(); + return strdup(buf); + } else if (!strcmp(part, "elm.slide.text.1")) { + memo_data_t *md = memo_get_data(gld->index); + snprintf(input, MEMO_BUFFER_SIZE, "%s", + (md->comment == NULL ? md->content : md->comment)); /* limit input */ + memo_free_data(md); + MEMO_FUN_END(); + return strdup(input); + } else if (!strcmp(part, "elm.text")) { + memo_data_t *md = memo_get_data(gld->index); + /* limit input */ + if (md->comment != NULL) { + snprintf(input, MEMO_BUFFER_SIZE, "%s", md->comment); + } else { + snprintf(input, MEMO_BUFFER_SIZE, "%s", md->content); + } + /* truncate to single line */ + p = strstr(input, "\342\200\251"); + if (p != NULL) { + input[p-input] = '\0'; + } + /* font color information */ + unsigned char *color = (unsigned char *)&md->font_color; + snprintf(output, MEMO_BUFFER_SIZE, "", color[2], color[1], color[0]); + /* append text information */ + if (gld->search == NULL) { + _str_append_utf8(output, MEMO_BUFFER_SIZE, input); + } else { + pre = input; + /* search and composite */ + p = (const char *)strcasestr(pre, gld->search); + if (p != NULL) { + /* append characters before matched string */ + if (p != pre) { + buf[0]='\0'; + strncat(buf, pre, p-pre); + _str_append_utf8(output, MEMO_BUFFER_SIZE, buf); + } + /* highlight str */ + sncat(output, MEMO_BUFFER_SIZE, ""); + buf[0]='\0'; + strncat(buf, p, strlen(gld->search)); + _str_append_utf8(output, MEMO_BUFFER_SIZE, buf); + sncat(output, MEMO_BUFFER_SIZE, ""); + /* set pointer after matched string */ + pre = p+strlen(gld->search); + } + /* append remaining string */ + _str_append_utf8(output, MEMO_BUFFER_SIZE, pre); + } + memo_free_data(md); + MEMO_FUN_END(); + return strdup(output); + } + MEMO_FUN_END(); + return NULL; +} + +/** + * memo_gl_icon_get + * + * @brief + * + * @param [in] data user specified data + * + * @param [in] obj evas_object of elm_genlist_item + * + * @param [in] part part name in genlist group + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +Evas_Object *memo_gl_icon_get(void *data, Evas_Object *obj, const char *part) +{ + MEMO_FUN_BEG(); + gl_data_t *gld = (gl_data_t *)data; + char buf[MEMO_BUFFER_SIZE]; + Evas_Object *eo = NULL; + + if (!strcmp(part, "elm.swallow.doodle")) { + if (gld->has_doodle != 0) { + snprintf(buf, MEMO_BUFFER_SIZE, DOODLEDIR "/%d.png", gld->index); + eo = elm_icon_create(obj, buf); + } + } else if (!strcmp(part, "elm.swallow.check")) { + eo = elm_check_add(obj); + elm_check_state_pointer_set(eo, &gld->check); + if (gld->on_change != NULL) { + evas_object_smart_callback_add(eo, "changed", gld->on_change, gld); + } + } else if (!strcmp(part, "elm.slide.swallow.1")) { + eo = elm_button_create(obj, MEMO_I18N_DELETE, gld->on_delete, gld); + } else if (!strcmp(part, "elm.slide.swallow.2")) { + eo = elm_button_create(obj, MEMO_I18N_SHARE, gld->on_send, gld); + } + MEMO_FUN_END(); + return eo; +} + +Eina_Bool memo_gl_state_get(void *data, Evas_Object *obj, const char *part) +{ + return EINA_FALSE; +} + +/** + * memo_gl_del + * + * @brief + * + * @param [in] data user specified data + * + * @param [in] obj evas_object of elm_genlist_item + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +void memo_gl_del(void *data, Evas_Object *obj) +{ + gl_data_t *gld = (gl_data_t *)data; + SFREE(gld); + return; +} + +/** + * memo_gl_itc_init + * + * @brief + * + * @param [in] itc handle of Elm_Genlist_Item_Class + * + * @param [in] style + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +void memo_gl_itc_init(Elm_Genlist_Item_Class *itc, const char *style) +{ + itc->item_style = style; + itc->func.text_get = memo_gl_label_get; + itc->func.content_get = memo_gl_icon_get; + itc->func.state_get = memo_gl_state_get; + itc->func.del = memo_gl_del; +} + +/** + * memo_gld_init + * + * @brief + * + * @param [in] data handle of gl_data_t + * + * @param [in] md original memo record data + * + * @param [in] user_data user specified data + * + * @param [in] on_select callback function when genlist item is selected + * + * @return + * + * @exception None + * + * @remark None + * + * @see + * + */ +void memo_gld_init(gl_data_t *data, memo_data_t *md, void *user_data, Evas_Smart_Cb on_select) +{ + data->index = md->id; + data->has_doodle = md->has_doodle; + data->mod_time = md->modi_time; + data->on_select = on_select; + data->user_data = user_data; +} + diff --git a/src/memo.c b/src/memo.c new file mode 100644 index 0000000..1db5d75 --- /dev/null +++ b/src/memo.c @@ -0,0 +1,358 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include /* ug_send_key_event */ +#include +#include +#include +#include +#include "memo_log.h" + +Eina_Bool launch_by_new = EINA_FALSE; /*check wether clicked new icon*/ +Eina_Bool is_previous_edit_view = EINA_FALSE;/*check wether previous view is edit view*/ +Eina_Bool normal_memo_launch = EINA_FALSE; + + +static void on_time_format_update(appdata *ad) +{ + MEMO_FUN_BEG(); + Elm_Object_Item *top_it = elm_naviframe_top_item_get(ad->navigator); + Evas_Object *eo = elm_object_item_content_get(top_it); + if(eo != NULL) { + Evas_Smart_Cb cb = evas_object_data_get(eo, "time_format_update_cb"); + RETIF(cb == NULL); + void *cb_data = evas_object_data_get(eo, "time_format_update_data"); + cb(cb_data, NULL, NULL); + } + MEMO_FUN_END(); +} + +void memo_timezone_changed_cb(keynode_t * node, void *data) +{ + MEMO_FUN_BEG(); + appdata *ad = data; + /* update ICU */ + icu_init(); + /* update top view */ + on_time_format_update(ad); + MEMO_FUN_END(); +} + +void tzone_vconf_noti_reg(void *data) +{ + MEMO_FUN_BEG(); + int ret = 0; + ret = + vconf_notify_key_changed(VCONFKEY_SETAPPL_TIMEZONE_INT, + memo_timezone_changed_cb, data); + MEMO_FUN_BEG(); +} + +static void win_del(void *data, Evas_Object *obj, void *event) +{ + MEMO_FUN_BEG(); + if(normal_memo_launch) { + normal_memo_launch = EINA_FALSE; + } + elm_exit(); + MEMO_FUN_END(); +} + +static void app_lang(void *data) +{ + //Take necessary actions when system language setting changes +} + +static void app_region(void *data) +{ + MEMO_FUN_BEG(); + //Take necessary actions when system region settings changes + appdata *ad = data; + /* time format 12/24 chanaged, update ICU */ + icu_init(); + /* update top view */ + on_time_format_update(ad); + MEMO_FUN_END(); +} + +static Evas_Object *create_win(const char *name) +{ + MEMO_FUN_BEG(); + Evas_Object *eo; + int w, h; + + eo = elm_win_add(NULL, name, ELM_WIN_BASIC); + if (eo) { + elm_win_title_set(eo, name); + elm_win_borderless_set(eo, EINA_TRUE); + evas_object_smart_callback_add(eo, "delete,request", win_del, NULL); + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + evas_object_resize(eo, w, h); + } + + MEMO_FUN_BEG(); + return eo; +} + +static void _on_reload_cb(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + evas_object_del((Evas_Object *)data); + if(normal_memo_launch) { + normal_memo_launch = EINA_FALSE; + } + elm_exit(); + MEMO_FUN_END(); +} + +void on_change(keynode_t *node, void *user_data) +{ + MEMO_FUN_BEG(); + appdata *ad = (appdata *)user_data; + int sync = vconf_keynode_get_int(node); + if (sync == 1) { + if (ad->popup == NULL) { + Evas_Object *popup = elm_popup_add(ad->win_main); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(popup, "Memo data changed unexpectedly, close application and reload!"); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_text_set(btn1, MEMO_I18N_YES); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", _on_reload_cb, popup); + evas_object_show(popup); + ad->popup = popup; + } + } + MEMO_FUN_END(); +} + +static int app_create_delay(void *data) +{ + MEMO_FUN_BEG(); + appdata *ad = (appdata *)data; + Evas_Object *win; + int r; + + /* create window */ + win = create_win(PACKAGE); + if (win == NULL) { + return -1; + } + normal_memo_launch = EINA_TRUE; + ad->win_main = win; + elm_win_conformant_set(win, EINA_TRUE); + + /* monitor update of memo database from external application */ + int sync = 0; + if (vconf_get_int("memory/mobex_engine/memo_sync_status", &sync) == 0) { + if (sync == 1) { /* KIES syncing */ + Evas_Object *popup = elm_popup_add(ad->win_main); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_object_text_set(popup, "Memo data changed unexpectedly, close application and reload!"); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_text_set(btn1, MEMO_I18N_YES); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", _on_reload_cb, popup); + evas_object_show(popup); + ad->popup = popup; + } + } + vconf_notify_key_changed("memory/mobex_engine/memo_sync_status", on_change, ad); + + /* theme extension */ + elm_theme_extension_add(NULL, EDJ_FILE); + + /* show indicator */ + elm_win_indicator_mode_set(win, ELM_WIN_INDICATOR_SHOW); + + /* init ui gadget */ + memo_ug_init(ad->win_main); + + /* bg */ + Evas_Object *bg = elm_bg_add(win); + elm_bg_color_set(bg, 0, 0, 0); /* black */ + evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(bg); + + /*conformat*/ + Evas_Object *conform = elm_conformant_add(win); + elm_win_resize_object_add(win, conform); + evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(conform); + ad->conform = conform; + + /* window */ + ad->ly_main = elm_layout_add(conform); + elm_layout_theme_set(ad->ly_main, "layout", "application", "default"); + evas_object_size_hint_weight_set(ad->ly_main, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_show(ad->ly_main); + elm_object_content_set(conform, ad->ly_main); + + /* navigationbar */ + ad->navigator = elm_naviframe_add(ad->ly_main); + elm_object_part_content_set(ad->ly_main, "elm.swallow.content", ad->navigator); + + if (ad->init_view == MEMO_LIST_VIEW) { + memo_load_list_view(ad); + } else if (ad->init_view == MEMO_DETAIL_VIEW) { + memo_load_detail_view(ad); + } else if (ad->init_view == MEMO_EDIT_VIEW) { + memo_load_edit_view(ad); + } + + /* init internationalization */ + r = appcore_set_i18n(PACKAGE, LOCALEDIR); + if (r) { + MEMO_FUN_END(); + return -1; + } + app_lang(ad); + + /* timezone inoti */ + tzone_vconf_noti_reg(ad); + + MEMO_FUN_END(); + return 0; +} + +static bool app_create(void *data) +{ + MEMO_FUN_BEG(); + /* init memo database */ + memo_init(NULL); + MEMO_FUN_END(); + return true; +} + +static void app_terminate(void *data) +{ + MEMO_FUN_BEG(); + appdata *ad = (appdata *)data; + /* fini memo database */ + memo_fini(); + + if (ad->win_main) { + evas_object_del(ad->win_main); + } + MEMO_FUN_END(); +} + +static void app_pause(void *data) +{ + // Take necessary actions when application becomes invisible. +} + +static void app_resume(void *data) +{ + // Take necessary actions when application becomes visible. +} + +static void app_service(service_h service, void *data) +{ + MEMO_FUN_BEG(); + appdata *ad = (appdata *)data; + char *value = NULL; + int lanuch_by_normal = EINA_FALSE; + /* launch memo */ + ad->init_view = MEMO_LIST_VIEW; + ad->index = -1; + + int r = service_get_operation(service, &value); + if (value) { + if (!strcmp(value, SERVICE_OPERATION_DEFAULT)) { + free(value); + value = NULL; + r= service_get_extra_data(service, "caller", &value); + if(value && !strcmp(value,"New")){ + ad->init_view = MEMO_EDIT_VIEW; + ad->index = -1; + free(value); + value = NULL; + launch_by_new = TRUE; + } else if ((value && !strcmp(value,"Normal")) || (value && !strcmp(value,"Search"))) { + ad->init_view = MEMO_LIST_VIEW; + ad->index = -1; + free(value); + value = NULL; + lanuch_by_normal = EINA_TRUE; + } + } + } + if (ad->win_main != NULL) { /* memo has already launced. */ + elm_win_activate(ad->win_main); + if (is_previous_edit_view && !lanuch_by_normal && launch_by_new) { /* previous view is edit view and click the new icon go the create view again*/ + return ; + } + if (is_previous_edit_view && lanuch_by_normal && launch_by_new) { /*first click new ,then back and click normal memo */ + is_previous_edit_view = EINA_FALSE; + launch_by_new = EINA_FALSE; + memo_load_list_view(ad); + return ; + + } + if (ad->init_view == MEMO_EDIT_VIEW) { + memo_load_edit_view(ad); + return ; + } + if( normal_memo_launch ) { /* normal click memo icon in livebox*/ + return ; + } + } + + app_create_delay(ad); + evas_object_show(ad->win_main); + + MEMO_FUN_END(); + return; +} + +/** + * @describe + * The entry of the program + * + * @param argc + * @param argv + * @param int + * @exception + */ +int main(int argc, char *argv[]) +{ + MEMO_FUN_BEG(); + appdata ad; + + app_event_callback_s event_callback; + + event_callback.create = app_create; + event_callback.terminate = app_terminate; + event_callback.pause = app_pause; + event_callback.resume = app_resume; + event_callback.service = app_service; + event_callback.low_memory = NULL; + event_callback.low_battery = NULL; + event_callback.device_orientation = NULL; + event_callback.language_changed = app_lang; + event_callback.region_format_changed = app_region; + + memset(&ad, 0x0, sizeof(appdata)); + + MEMO_FUN_END(); + return app_efl_main(&argc, &argv, &event_callback, &ad); +} diff --git a/src/memo_autolink.c b/src/memo_autolink.c new file mode 100644 index 0000000..f230e9d --- /dev/null +++ b/src/memo_autolink.c @@ -0,0 +1,552 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "memo_log.h" + +static void _autolink_popup_response_cb(void *data, Evas_Object *obj, void *event_info); + +/* BEGIN CONVERTE BETWEEN enum anchor_t AND string */ + +static char *_autolink_anchor_type_to_string(enum anchor_t type) +{ + switch (type) { + case ANCHOR_EMAIL: + return "email"; + case ANCHOR_PHONE: + return "phone_num"; + case ANCHOR_URL: + return "url"; + default: + return ""; + } +} + +/* END CONVERTE BETWEEN enum anchor_t AND string */ + +/* BEGIN POPUP CALLBACK */ + +static void _autolink_send_email_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct autolink_data_t *ald = (struct autolink_data_t *)data; + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, "RUN_TYPE", "5"); + service_add_extra_data(service, "TO", ald->info); + + ug_launch_common(service, UG_NAME_EMAIL); + _autolink_popup_response_cb(ald, ald->popup, NULL); + } + +static void _autolink_send_message_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct autolink_data_t *ald = (struct autolink_data_t *)data; + + ug_launch_common_var(UG_NAME_MESSAGE, "TO", ald->info, NULL); + _autolink_popup_response_cb(ald, ald->popup, NULL); +} + +static void _autolink_vioce_call_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct autolink_data_t *ald = (struct autolink_data_t *)data; + bundle *bd = bundle_create(); + char telnum[255] = {0,}; + + appsvc_set_operation(bd, APPSVC_OPERATION_CALL); + snprintf(telnum, sizeof(telnum), "tel:%s", ald->info); + appsvc_set_uri(bd, telnum); + appsvc_run_service(bd, 0, NULL, NULL); + + bundle_free(bd); + _autolink_popup_response_cb(ald, ald->popup, NULL); +} + +static void _autolink_video_call_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + struct autolink_data_t *ald = (struct autolink_data_t *)data; + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, "KEY_CALL_TYPE", "mo"); + service_add_extra_data(service, "KEY_CALL_HANDLE", "1"); + service_add_extra_data(service, "KEY_CALLING_PARTY_NUMBER", ald->info); + service_add_extra_data(service, "KEY_CLI_CAUSE", "-1"); + service_add_extra_data(service, "KEY_FORWARDED", "-1"); + service_set_package(service, AUL_NAME_VEDIO_CALL); + service_send_launch_request(service, NULL, NULL); + + service_destroy(service); + _autolink_popup_response_cb(ald, ald->popup, NULL); +} + +static void _autolink_email_add_to_contact_selected_cb(void *data, Evas_Object *obj, + void *event_info) +{ + struct autolink_data_t *ald = (struct autolink_data_t *)data; + + char buf[10]; + snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_ADD_WITH_EMAIL); + + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(service, CT_UG_BUNDLE_EMAIL, ald->info); + + ug_launch_common(service, UG_CONTACTS_DETAILS); + _autolink_popup_response_cb(ald, ald->popup, NULL); +} + +static void _autolink_phone_add_to_contact_selected_cb(void *data, Evas_Object *obj, + void *event_info) +{ + struct autolink_data_t *ald = (struct autolink_data_t *)data; + + char buf[10]; + snprintf(buf, sizeof(buf), "%d", CT_UG_REQUEST_ADD_WITH_NUM); + + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, CT_UG_BUNDLE_TYPE, buf); + service_add_extra_data(service, CT_UG_BUNDLE_NUM, ald->info); + + ug_launch_common(service, UG_CONTACTS_DETAILS); + _autolink_popup_response_cb(ald, ald->popup, NULL); +} + +/* END POPUP CALLBACK */ + +static struct anchor_popup_item_t g_email_list[] = { + {"IDS_MEMO_OPT_SEND_EMAIL", _autolink_send_email_selected_cb, "memo"}, + {"IDS_MEMO_BODY_ADD_TO_CONTACT", _autolink_email_add_to_contact_selected_cb, "memo"}, +}; + +static struct anchor_popup_item_t g_phone_list[] = { + {"IDS_COM_BODY_VOICE_CALL", _autolink_vioce_call_selected_cb, "sys_string"}, + {"IDS_COM_BODY_SEND_MESSAGE", _autolink_send_message_selected_cb, "sys_string"}, + {"IDS_COM_BODY_VIDEO_CALL", _autolink_video_call_selected_cb, "sys_string"}, + {"IDS_MEMO_BODY_ADD_TO_CONTACT", _autolink_phone_add_to_contact_selected_cb, "memo"}, +}; + +static char *_autolink_gl_label_get(void *data, Evas_Object *obj, const char *part) +{ + char *label = (char *)data; + if (strcmp(part, "elm.text") == 0) { + return strdup(label); + } + return NULL; +} + +static void _autolink_popup_response_cb(void *data, Evas_Object *obj, void *event_info) +{ + PFUNC_ENTER; + + assert(data != NULL); + struct autolink_data_t *ald = (struct autolink_data_t *)data; + if (ald->popup != NULL) { + evas_object_del(ald->popup); + } + + assert(ald->info != NULL); + free(ald->info); + free(ald); + + PFUNC_LEAVE; +} + +void _autolink_popup_show(char *title, struct autolink_data_t *ald) +{ + struct anchor_popup_item_t *list = NULL; + int count = 0; + Evas_Object *box = NULL; + + switch (ald->type) { + case ANCHOR_EMAIL: + list = g_email_list; + count = ARRAY_SIZE(g_email_list); + break; + case ANCHOR_PHONE: + list = g_phone_list; + count = ARRAY_SIZE(g_phone_list); + break; + default: + break; + } + + Evas_Object *popup = elm_popup_add(ald->win_main); + ald->popup = popup; + elm_object_style_set(popup, "min_menustyle"); + elm_object_part_text_set(popup, "title,text", title); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_text_set(btn1, MEMO_I18N_CLOSE); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", _autolink_popup_response_cb, ald); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + static Elm_Genlist_Item_Class itc; + memset(&itc, 0, sizeof(Elm_Genlist_Item_Class)); + itc.item_style = "1text"; + itc.func.text_get = _autolink_gl_label_get; + + Evas_Object *genlist = elm_genlist_add(popup); + evas_object_smart_callback_add(genlist, "selected", NULL, NULL); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + + int i = 0; + for (i = 0; i < count; ++i) { + elm_genlist_item_append(genlist, &itc, dgettext(list[i].domain, list[i].label), + NULL, ELM_GENLIST_ITEM_NONE, list[i].response, ald); + } + + evas_object_show(genlist); + box = elm_box_add(popup); + evas_object_size_hint_min_set(box, 0, (count>3 ? 3 : count)*71); + elm_box_pack_end(box, genlist); + evas_object_show(box); + elm_object_content_set(popup, box); + evas_object_show(popup); +} + +void autolink_anchor_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + Elm_Entry_Anchor_Info *ei = (Elm_Entry_Anchor_Info *)event_info; + autolink_data *ald = SMALLOC(autolink_data); + RETIF(ald == NULL); + + int info_len = strlen(ei->name) + 1; + ald->info = calloc(1, info_len); + if (ald->info == NULL) { + SFREE(ald); + return; + } + + ald->win_main = (Evas_Object *)data; + /* retrieve anchor info, eg `url|www phone_num|8888 email|abc@k.com` */ + switch (ei->name[0]) { + case 'u': + ald->type = ANCHOR_URL; + break; + case 'p': + ald->type = ANCHOR_PHONE; + break; + case 'e': + ald->type = ANCHOR_EMAIL; + break; + default : + ald->type = NOT_ANCHOR; + break; + } + const char *start = ei->name + strlen(_autolink_anchor_type_to_string(ald->type)) +1; + const char *end = strchr(ei->name, ' '); + strncpy(ald->info, start, end - start); + LOGD("Anchor clicked (%s)\n", ald->info); + + if ((ald->type == ANCHOR_EMAIL) || (ald->type == ANCHOR_PHONE)){ + _autolink_popup_show(ald->info, ald); + return; + } + + if (ald->type == ANCHOR_URL) { + aul_open_content(ald->info); /* launch browser */ + } + SFREE(ald->info); + SFREE(ald); +} + +static Eina_Bool str_is_begin_with(const char *str, const char *prefix) +{ + if (strlen(str) < strlen(prefix)) { + return EINA_FALSE; + } + + int i = 0; + for (i = 0; i < strlen(prefix); ++i) { + if (str[i] != prefix[i]) { + return EINA_FALSE; + } + } + + return EINA_TRUE; +} + +/* TYPE CHECKER BEGIN */ +/* + * [Checker Function Specification] + * These function get target type from beginning of string. + * The only parameter str is the string that want to be checked. + * Let's assume the returned value is r. There are 3 cases: + * r > 0 : From beginning to r of str match the target type. + * r = 0 : Str doesn't have target type, no longer check. + * r < 0 : It doesn't match from beginning, but from -r position maybe matched. + * It will be checked next time. + */ +static int _autolink_url_checker(const char* str) +{ + char *prefix[] = {"http://", "www.", "wap."}; + + int i = 0; + for (i = 0; i < ARRAY_SIZE(prefix); ++i) { + if (str_is_begin_with(str, prefix[i])) { /* Begin with specified prefix */ + int j = 0; + while(str[j] != '\0' && !isspace(str[j])) { + if (str[j] == '<') { /* tag begin */ + break; + } + j++; + } + + if(j == strlen(prefix[i])) { /* only with prefix alone */ + break; + } else { + return j; + } + } + } + + /* not matched, get next position */ +#if 0 /* Need correct */ + int next = 0; + char *p = NULL; + for (i = 0; i < ARRAY_SIZE(prefix); ++i) { + p = strstr(str, prefix[i]); + if (p != NULL) { + if (next == 0) { + next = p - str; + } else if (next > p - str) { + next = p - str; + } + } + } +#endif + + return -1; +} + +static int _autolink_email_checker(const char* str) +{ + char *p = NULL; + p = strchr(str, '@'); + + if (NULL == p) { + return 0; + } else if (p == str) { /* '@' at beginning */ + return -1; + } + + char next = p[1]; + if (next == '@') { /* consecutive '@' */ + return -(p + 2 - str); + } else if (next == '.') { /* "@." */ + return -(p + 2 - str); + } else if (next == '\0') { /* '@' at end of string */ + return -(p + 1 - str); + } else if (isspace(next) || next == '<') { /* '@' at end of word */ + return -(p + 2 - str); + } + + /* check if valid before @ */ + char *q = p; + while (q >= str) { + if (isspace(*q)) { + return -(q + 1 - str); + } + + if (*q == '>' || *q == '/') { /* tag end and other illega character */ + return -(q + 1 - str); + } + + if (*q == '.' && ( q == str || *(q - 1) == '.')) { + return -(q + 1 - str); + } + + q--; + } + + /* get the end position of email */ + q = p + 1; + while (*q != '\0' && !isspace(*q)) { + if (*q == '.' && *(q + 1) == '.') { + break; + } + + if (*q == '<') { /* tag begin */ + break; + } + + q++; + } + return q - str; +} + +static int _autolink_phone_checker(const char *str) +{ + /* search beginning */ + int i = 0; + for (i = 0; str[i] != '\0'; ++i) { + /* digit, '+', '*' and '#' at the beginning of phone is valid. */ + if (isdigit(str[i]) || str[i] == '+' || str[i] == '*' || str[i] == '#') { + break; + } + } + + if (i > 0) { + return -i; + } + + for (i = 1; str[i] != '\0'; ++i) { + if (isdigit(str[i]) || str[i] == '*' || str[i] == '#') { + /* NOP */ + } else if (str[i] == '-') { + if (str[i - 1] == '-' || str[i - 1] == ' ') { /* "--" or " -" */ + i -= 1; + break; + } + } else if (str[i] == ' ') { + if (str[i - 1] == '-') { /* "- " */ + i -= 1; + break; + } else if (str[i - 1] == ' ' && isdigit(str[i + 1])) { /* consecutive ' ' */ + int j = 0; + while (isdigit(str[i + 1 + j])) { ++j; } + if (j > 5) { + while (str[i] == ' ') { i--; } + return i + 1; + } + } + } else { /* other character */ + break; + } + } + + int len = i; + if (len < 3) { + return -len; + } else { + return len; + } +} + +/* TYEP CHECKER END */ + +static void _autolink_box_anchor(GString *text, char *type, char *content) +{ + char *buf = NULL; + if (strcmp(type, "phone_num") == 0) { /* remove '-' and ' ' in phone num. */ + buf = (char *)malloc(strlen(content) + 1); + RETIF(buf == NULL); + int i = 0, j = 0; + while (content[i] != '\0') { + if (content[i] == '-' || content[i] == ' ') { + ++i; + } else { + buf[j] = content[i]; + ++i; + ++j; + } + } + buf[j] = '\0'; + } else { + buf = content; + } + + g_string_append_printf(text, + "%s", + type, buf, content); + + if (buf != content) { + free(buf); + } +} + +GString *autolink_add_anchor(const char *content) +{ + MEMO_FUN_BEG(); + assert(content != NULL); + + const char *p = content; + char *gt = NULL; + GString *text = g_string_new(""); + GString *buf = g_string_new(""); + + struct checker_t { + int (*check)(const char* str); + char *type; + Eina_Bool invoke; + } checkers[] = { + {_autolink_url_checker, "url", EINA_TRUE}, + {_autolink_email_checker, "email", EINA_TRUE}, + {_autolink_phone_checker, "phone_num", EINA_TRUE}, + }; + + while (*p != '\0') { + + if (p[0] == '<') { /* tag begin */ + gt = strchr(p, '>'); /* search tag end */ + assert(gt != NULL); /* assert '<' and '>' are matched */ + g_string_append_len(text, p, gt - p + 1); + p = gt + 1; + } + + int i = 0; + int r = 0; + int next_pos = -1; + for (i = 0; i < ARRAY_SIZE(checkers); ++i) { + if (checkers[i].invoke == EINA_TRUE) { + r = checkers[i].check(p); + if (r == 0) { /* no longer check */ + checkers[i].invoke = EINA_FALSE; + } else if (r > 0) { /* Get */ + g_string_assign(buf, ""); /* reset buffer */ + g_string_append_len(buf, p, r); + _autolink_box_anchor(text, checkers[i].type, buf->str); + next_pos = r; + break; + } else { /* r < 0 */ + if (next_pos <= 0 || next_pos > -r) { + next_pos = -r; + } + } + } + } + + if (next_pos < 0) { + g_string_append(text, p); + break; + } else if ( i == ARRAY_SIZE(checkers)) { + g_string_append_len(text, p, next_pos); + } + + p += next_pos; + } + + g_string_free(buf, TRUE); + printf("\t\t********** %s\n", text->str); + + MEMO_FUN_END(); + return text; +} diff --git a/src/memo_detail.c b/src/memo_detail.c new file mode 100644 index 0000000..0a5bcb6 --- /dev/null +++ b/src/memo_detail.c @@ -0,0 +1,475 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "memo_log.h" + +#define MODE_DETAIL 0 +#define MODE_COMMENT 1 + +typedef struct __detail_view_t { + appdata *ad; + Evas_Object *navigator; + Elm_Object_Item *navi_it; + Evas_Object *body_main; /* content */ + Evas_Object *ctrl_bar; + Evas_Object *content; + Evas_Object *btn_cancel; + Evas_Object *btn_done; + + int indexes[MEMO_MAX_RECORD]; + int count; + int p; /* position of current record in indexes */ + void *viewer; + int effect; + Eina_Bool text_mode; /* text or doodle mode */ +} detail_view_t; + +static void _doodle_viewer_callback(void *data, const char *msg, void *event); +static void _text_viewer_callback(void *data, const char *msg, void *event); +static void _memo_detail_load_content(detail_view_t *dv); + +typedef void (*Transit_Done_Cb) (void *data, Elm_Transit * transit); + +void _transition_apply(Evas_Object *obj, int effect, Transit_Done_Cb on_done, void *data) +{ + if (effect == 0) { + if (on_done != NULL) { + on_done(data, NULL); + } + return; + } + + Elm_Transit *transit = elm_transit_add(); + elm_transit_objects_final_state_keep_set(transit, EINA_TRUE); + elm_transit_object_add(transit, obj); + if (effect == 1) { /* show & left */ + elm_transit_effect_translation_add(transit, 0, 0, -480, 0); + } else if (effect == 2) { /* show &right */ + elm_transit_effect_translation_add(transit, 0, 0, 480, 0); + } else if (effect == 3) { /* hide & left */ + elm_transit_effect_translation_add(transit, 0, 0, -480, 0); + } else if (effect == 4) { /* hide &right */ + elm_transit_effect_translation_add(transit, 0, 0, 480, 0); + } + elm_transit_del_cb_set(transit, on_done, data); + elm_transit_tween_mode_set(transit, ELM_TRANSIT_TWEEN_MODE_LINEAR); + elm_transit_duration_set(transit, 0.4); + elm_transit_go(transit); +} + +static void _on_load_transit_done_cb(void *data, Elm_Transit * transit) +{ + detail_view_t *dv = (detail_view_t *)data; + elm_object_part_content_set(dv->body_main, "elm.swallow.content", dv->content); +} + +static void _on_text_fade_transit_done_cb(void *data, Elm_Transit * transit) +{ + memo_destroy_text_viewer(data); +} + +static void _on_doodle_fade_transit_done_cb(void *data, Elm_Transit * transit) +{ + memo_destroy_doodle_viewer(data); +} + +static void _on_back_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + memo_navigator_pop(dv->navigator); +} + +static void _on_create_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + evas_object_del(obj); + obj = NULL; + + detail_view_t *dv = (detail_view_t *)data; + appdata *ad = dv->ad; + ad->index_detail = dv->indexes[dv->p]; + ad->index = -1; + memo_load_edit_view(ad); +} + +static void _on_delete_yes(void *data, Evas_Object *obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + int index = -1; + int i = 0; + + /* delete records */ + memo_del_data(dv->indexes[dv->p]); + /* check effect */ + if (dv->p < dv->count-1) { /* next */ + index = dv->indexes[dv->p+1]; + dv->effect = 1; + } else if (dv->p > 0) { /* prev */ + index = dv->indexes[dv->p-1]; + dv->effect = 2; + } else { /* no record */ + memo_navigator_pop(dv->navigator); + return; + } + /* recalculate position */ + dv->count = memo_get_indexes(dv->indexes, MEMO_MAX_RECORD, MEMO_SORT_CREATE_TIME); + for (i=0; icount; i++) { + if (dv->indexes[i] == index) { + dv->p = i; + break; + } + } + elm_object_part_content_unset(dv->body_main, "elm.swallow.content"); + _transition_apply(dv->content, dv->effect+2, dv->text_mode ? _on_text_fade_transit_done_cb : _on_doodle_fade_transit_done_cb, dv->viewer); + _memo_detail_load_content(dv); +} + +static void _on_delete_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + appdata *ad = dv->ad; + snprintf(dv->ad->buf, MEMO_BUFFER_SIZE, "%s?", MEMO_I18N_DELETE); + memo_create_yes_no_popup(ad->win_main, dv->ad->buf, _on_delete_yes, NULL, dv); +} + +static void _on_edit_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + evas_object_del(obj); + obj = NULL; + + detail_view_t *dv = (detail_view_t *)data; + appdata *ad = dv->ad; + ad->index = dv->indexes[dv->p]; + ad->index_detail = dv->indexes[dv->p]; + if (!dv->text_mode) { + /* hide IMF panel of comment editor immediately */ + /* destroy doodle immediately, otherwise doodle disappear when edit */ + memo_doodle_viewer_pre_del(dv->viewer); + } + memo_load_edit_view(ad); +} + +static void _on_share_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + if (dv->text_mode) { + memo_text_viewer_share_record(dv->viewer); + } else { + memo_doodle_viewer_share_record(dv->viewer); + } +} + +static void _on_done_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + memo_doodle_viewer_save(dv->viewer); +} + +static void _on_cancel_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + memo_doodle_viewer_cancel(dv->viewer); +} + +static void _memo_detail_load_content(detail_view_t *dv) +{ + MEMO_FUN_BEG(); + memo_data_t *record = memo_get_data(dv->indexes[dv->p]); + if (record->has_doodle) { + dv->viewer = memo_load_doodle_viewer(dv->body_main, dv->ad->win_main, record->id, NULL, _doodle_viewer_callback, dv); + dv->text_mode = EINA_FALSE; + } else { + dv->viewer = memo_load_text_viewer(dv->body_main, dv->ad->win_main, record->id, NULL, _text_viewer_callback, dv); + dv->text_mode = EINA_TRUE; + } + memo_free_data(record); + snprintf(dv->ad->buf, MEMO_BUFFER_SIZE, "%d/%d", dv->p + 1, dv->count); + elm_object_item_text_set(dv->navi_it, dv->ad->buf); + MEMO_FUN_END(); +} + +static void _memo_detail_navibar_mode_set(detail_view_t *dv, int mode) +{ + if (MODE_DETAIL == mode) { + snprintf(dv->ad->buf, MEMO_BUFFER_SIZE, "%d/%d", dv->p + 1, dv->count); + elm_object_item_text_set(dv->navi_it, dv->ad->buf); + if (dv->btn_cancel != NULL) { + elm_object_item_part_content_unset(dv->navi_it, "title_left_btn"); + evas_object_del(dv->btn_cancel); + dv->btn_cancel = NULL; + } + if (dv->btn_done != NULL) { + elm_object_item_part_content_unset(dv->navi_it, "title_right_btn"); + evas_object_del(dv->btn_done); + dv->btn_done = NULL; + } + } else if (MODE_COMMENT == mode) { + if (dv->btn_cancel == NULL) { + dv->btn_cancel = elm_button_create(dv->navigator, MEMO_I18N_CANCEL, + _on_cancel_btn_clicked, dv); + elm_object_style_set(dv->btn_cancel, "naviframe/back_btn/default"); + elm_object_item_part_content_set(dv->navi_it, "title_prev_btn", dv->btn_cancel); + } + if (dv->btn_done == NULL) { + dv->btn_done = elm_button_create(dv->navigator, MEMO_I18N_SAVE, + _on_done_btn_clicked, dv); + elm_object_style_set(dv->btn_done, "naviframe/toolbar/default"); + elm_object_item_part_content_set(dv->navi_it, "title_toolbar_button1", dv->btn_done); + } + /*show the toolbar*/ + elm_object_item_signal_emit(dv->navi_it, "elm,state,sip,shown", ""); + } +} + +static void _text_viewer_callback(void *data, const char *msg, void *event) +{ + detail_view_t *dv = (detail_view_t *)data; + if (strcmp(msg, "layout") == 0) { + if (dv->effect != 0) { + Evas_Object *obj = (Evas_Object *)event; + int x, y, w, h; + evas_object_geometry_get(dv->content, &x, &y, &w, &h); + evas_object_resize(obj, w, h); + if (dv->effect == 1) { /* show & left */ + evas_object_move(obj, x+480, y); + } else if (dv->effect == 2) { /* show &right */ + evas_object_move(obj, x-480, y); + } else { + evas_object_move(obj, x, y); + } + _transition_apply(obj, dv->effect, _on_load_transit_done_cb, dv); + dv->effect = 0; + } else { + elm_object_part_content_set(dv->body_main, "elm.swallow.content", (Evas_Object *)event); + } + dv->content = (Evas_Object *)event; + } else if (strcmp(msg, "title") == 0) { + elm_object_item_text_set(dv->navi_it, (const char *)event); + } else if (strcmp(msg, "sweep,left") == 0) { + if (dv->p < dv->count-1) { + dv->p = dv->p + 1; + elm_object_part_content_unset(dv->body_main, "elm.swallow.content"); + _transition_apply(dv->content, 3, _on_text_fade_transit_done_cb, dv->viewer); + dv->effect = 1; + _memo_detail_load_content(dv); + } + } else if (strcmp(msg, "sweep,right") == 0) { + if (dv->p > 0) { + dv->p = dv->p -1; + elm_object_part_content_unset(dv->body_main, "elm.swallow.content"); + _transition_apply(dv->content, 4, _on_text_fade_transit_done_cb, dv->viewer); + dv->effect = 2; + _memo_detail_load_content(dv); + } + } +} + +static void _doodle_viewer_callback(void *data, const char *msg, void *event) +{ + detail_view_t *dv = (detail_view_t *)data; + if (strcmp(msg, "layout") == 0) { + if (dv->effect != 0) { + Evas_Object *obj = (Evas_Object *)event; + int x, y, w, h; + evas_object_geometry_get(dv->content, &x, &y, &w, &h); + evas_object_resize(obj, w, h); + if (dv->effect == 1) { /* show & left */ + evas_object_move(obj, x+480, y); + } else if (dv->effect == 2) { /* show &right */ + evas_object_move(obj, x-480, y); + } else { + evas_object_move(obj, x, y); + } + _transition_apply(obj, dv->effect, _on_load_transit_done_cb, dv); + } else { + elm_object_part_content_set(dv->body_main, "elm.swallow.content", (Evas_Object *)event); + } + dv->content = (Evas_Object *)event; + dv->effect = 0; + } else if (strcmp(msg, "savable") == 0) { + elm_object_disabled_set(dv->btn_done, (int)event==0? EINA_TRUE : EINA_FALSE); + } else if (strcmp(msg, "title") == 0) { + elm_object_item_text_set(dv->navi_it, (const char *)event); + } else if (strcmp(msg, "comment_save") == 0) { + } else if (strcmp(msg, "comment_mode") == 0) { + _memo_detail_navibar_mode_set(dv, (int)event); + } else if (strcmp(msg, "sweep,left") == 0) { + if (dv->p < dv->count-1) { + dv->p = dv->p + 1; + elm_object_part_content_unset(dv->body_main, "elm.swallow.content"); + _transition_apply(dv->content, 3, _on_doodle_fade_transit_done_cb, dv->viewer); + dv->effect = 1; + _memo_detail_load_content(dv); + } + } else if (strcmp(msg, "sweep,right") == 0) { + if (dv->p > 0) { + dv->p = dv->p -1; + elm_object_part_content_unset(dv->body_main, "elm.swallow.content"); + _transition_apply(dv->content, 4, _on_doodle_fade_transit_done_cb, dv->viewer); + dv->effect = 2; + _memo_detail_load_content(dv); + } + } +} + +static void _on_delete(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + elm_object_part_content_unset(dv->body_main, "elm.swallow.content"); + if (dv->text_mode) { + memo_destroy_text_viewer(dv->viewer); + } else { + memo_destroy_doodle_viewer(dv->viewer); + } + dv->viewer = NULL; + if (dv->btn_cancel != NULL) { + evas_object_del(dv->btn_cancel); + } + if (dv->btn_done != NULL) { + evas_object_del(dv->btn_done); + } + SFREE(dv); +} + +static void _on_update(void *data, Evas_Object *obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + elm_object_part_content_unset(dv->body_main, "elm.swallow.content"); + if (dv->text_mode) { + memo_destroy_text_viewer(dv->viewer); + } else { + memo_destroy_doodle_viewer(dv->viewer); + } + + int i = 0; + //dv->p = -1; + dv->count = memo_get_indexes(dv->indexes, MEMO_MAX_RECORD, MEMO_SORT_CREATE_TIME); + for (i=0; icount; i++) { + if (dv->indexes[i] == dv->ad->index) { + dv->p = i; + break; + } + } + + _memo_detail_navibar_mode_set(dv, MODE_DETAIL); + _memo_detail_load_content(dv); +} + +static void __ctxpopup_dismissed_cb(void *data, Evas_Object * obj, + void *event_info) +{ + evas_object_del(obj); + obj = NULL; +} + +static void __more_cb(void *data, Evas_Object * obj, void *event_info) +{ + detail_view_t *dv = (detail_view_t *)data; + + Evas_Object *ctxpopup = + elm_ctxpopup_add(dv->ad->win_main); + elm_ctxpopup_direction_priority_set(ctxpopup, ELM_CTXPOPUP_DIRECTION_DOWN, + ELM_CTXPOPUP_DIRECTION_UNKNOWN, + ELM_CTXPOPUP_DIRECTION_UNKNOWN, + ELM_CTXPOPUP_DIRECTION_UNKNOWN); + evas_object_smart_callback_add(ctxpopup, "dismissed", + __ctxpopup_dismissed_cb, NULL); + elm_ctxpopup_item_append(ctxpopup, MEMO_I18N_EDIT, NULL, + _on_edit_btn_clicked, dv); + elm_ctxpopup_item_append(ctxpopup, MEMO_I18N_CREATE, NULL, + _on_create_btn_clicked, + dv); + + Evas_Coord x = 0; + Evas_Coord y = 0; + Evas_Coord w = 0; + Evas_Coord h = 0; + evas_object_geometry_get(obj, &x, &y, &w, &h); + evas_object_move(ctxpopup, (x+(w/2)) , y+h); + evas_object_show(ctxpopup); +} + +void *memo_load_detail_view(appdata *ad) +{ + detail_view_t *dv = SMALLOC(detail_view_t); + RETVIF(dv == NULL, NULL); + dv->ad = ad; + int i = 0; + + /* init */ + dv->p = -1; + dv->count = memo_get_indexes(dv->indexes, MEMO_MAX_RECORD, MEMO_SORT_CREATE_TIME); + for (i=0; icount; i++) { + if (dv->indexes[i] == ad->index) { + dv->p = i; + break; + } + } + + if(dv->p == -1) { + SFREE(dv); + return NULL; + } + dv->navigator = ad->navigator; + /* body main */ + dv->body_main = elm_layout_create(dv->navigator, EDJ_FILE, "empty_layout"); + evas_object_event_callback_add(dv->body_main, EVAS_CALLBACK_DEL, _on_delete, dv); + evas_object_data_set(dv->body_main, "update_cb", _on_update); + evas_object_data_set(dv->body_main, "update_data", dv); + evas_object_data_set(dv->body_main, "time_format_update_cb", _on_update); + evas_object_data_set(dv->body_main, "time_format_update_data", dv); + /* prev button */ + Evas_Object *btn = elm_button_add(dv->navigator); + evas_object_smart_callback_add(btn, "clicked", _on_back_btn_clicked, dv); + elm_object_style_set(btn, "naviframe/back_btn/default"); + /* compose */ + Elm_Object_Item *navi_it = memo_naviframe_item_push(dv->navigator, "", btn, NULL, dv->body_main, NULL); + dv->navi_it = navi_it; + + /* contrl bar */ + Evas_Object *btn3 = elm_button_add(ad->navigator); + elm_object_style_set(btn3, "naviframe/more/default"); + elm_object_item_part_content_set(navi_it, "toolbar_more_btn", btn3); + evas_object_smart_callback_add(btn3, "clicked", __more_cb, + dv); + Evas_Object *btn1 = elm_button_add(ad->navigator); + elm_object_text_set(btn1, MEMO_I18N_DELETE); + elm_object_style_set(btn1, "naviframe/toolbar/default"); + elm_object_item_part_content_set(navi_it, "toolbar_button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", _on_delete_btn_clicked, + dv); + Evas_Object *btn2 = elm_button_add(ad->navigator); + elm_object_text_set(btn2, MEMO_I18N_SHARE); + elm_object_style_set(btn2, "naviframe/toolbar/default"); + elm_object_item_part_content_set(navi_it, "toolbar_button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", _on_share_btn_clicked, + dv); + _memo_detail_navibar_mode_set(dv, MODE_DETAIL); + /* load content */ + _memo_detail_load_content(dv); + return (void *)dv; +} + diff --git a/src/memo_doodle_editor.c b/src/memo_doodle_editor.c new file mode 100644 index 0000000..547ce34 --- /dev/null +++ b/src/memo_doodle_editor.c @@ -0,0 +1,616 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct __doodle_editor_t { + Evas_Object *win; + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + memo_data_t *record; + char buf[MEMO_BUFFER_SIZE]; /* for temporarily usage only */ + Eina_Bool savable; + Eina_Bool erase; /* erase mode */ + Eina_Bool comment; /* edit comment mode */ + Eina_Bool doodle_init; + Eina_Bool stroke_down; /* see comment in _on_doodle_move_cb */ + int stroke_size; + int stroke_color; + + /* content */ + Evas_Object *body_main; + Evas_Object *doodle; + Evas_Object *toolbar; + Evas_Object *btn_size; + void *h_ss; + Evas_Object *btn_color; + void *h_cs; + Evas_Object *edit_field; + + /* entry */ + Evas_Object *entry; + Ecore_IMF_Context *imf_context; +} doodle_editor_t; + +static void _stroke_size_selector_del(doodle_editor_t *de); +static void _stroke_color_selector_del(doodle_editor_t *de); + +static void _save_record(doodle_editor_t *de) +{ + memo_begin_trans(); + if (de->record->id != -1) { + memo_mod_data(de->record); + } else { + de->record->content = memo_get_doodle_title(); + memo_add_data(de->record); + } + /* save doodle to file */ + snprintf(de->buf, MEMO_BUFFER_SIZE, DOODLEDIR "/%d.png", (int)de->record->id); + evas_object_image_save(de->doodle, de->buf, NULL, NULL); + memo_end_trans(); +} + +static void _on_save_yes(void *data, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + _save_record(de); + de->cb(de->data, "save", NULL); +} + +static void _on_save_no(void *data, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + de->cb(de->data, "cancel", NULL); +} + +static Eina_Bool _launch_yes_no_popup(void *data) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + memo_create_yes_no_popup(de->win, MEMO_I18N_SAVE_MEMO, _on_save_yes, _on_save_no, de); + return EINA_FALSE; +} + +static void _stroke_size_selector_callback(void *data, const char *msg, void *event) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + if (strcmp(msg, "layout") == 0) { + elm_object_part_content_set(de->body_main, "elm.swallow.tool", (Evas_Object *)event); + } else if (strcmp(msg, "change") == 0) { + de->stroke_size = (int)event; + } else if (strcmp(msg, "flick,down") == 0) { + _stroke_size_selector_del(de); + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "elm"); + } +} + +static void _stroke_size_selector_del(doodle_editor_t *de) +{ + if (de->h_ss != NULL) { + elm_object_part_content_unset(de->body_main, "elm.swallow.tool"); + memo_del_pencil_size_selector(de->h_ss); + de->h_ss = NULL; + memo_tool_btn_focus_set(de->btn_size, EINA_FALSE); + } +} + +static void _on_stroke_size_btn_up(void *data, Evas *e, Evas_Object *evas_obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + if (de->h_ss != NULL) { /* stroke size selector already open */ + return; + } + if (de->h_cs != NULL) { /* destroy stroke color selector */ + _stroke_color_selector_del(de); + } + if (de->erase) { /* deselect eraser */ + de->erase = EINA_FALSE; + Evas_Object *eo = (Evas_Object *)elm_object_part_content_get(de->toolbar, "elm.swallow.btn3"); + memo_tool_btn_focus_set(eo, de->erase); + } + /* load stroke size selector */ + service_h service = NULL; + service_create(&service); + snprintf(de->buf, MEMO_BUFFER_SIZE, "%d", de->stroke_size); + service_add_extra_data(service, "current", de->buf); + snprintf(de->buf, MEMO_BUFFER_SIZE, "%d", 0xFFFFFFFF); + service_add_extra_data(service, "bg_color", de->buf); + de->h_ss = memo_load_pencil_size_selector(de->body_main, service, _stroke_size_selector_callback, de); + service_destroy(service); + memo_tool_btn_focus_set(de->btn_size, EINA_TRUE); + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "abbrev", "elm"); +} + +void _stroke_color_selector_callback(void *data, const char *msg, void *event) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + if (strcmp(msg, "layout") == 0) { + elm_object_part_content_set(de->body_main, "elm.swallow.tool", (Evas_Object *)event); + } else if (strcmp(msg, "change") == 0) { + de->stroke_color = (int)event; + } else if (strcmp(msg, "flick,down") == 0) { + _stroke_color_selector_del(de); + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "elm"); + } +} + +static void _stroke_color_selector_del(doodle_editor_t *de) +{ + if (de->h_cs != NULL) { + elm_object_part_content_unset(de->body_main, "elm.swallow.tool"); + memo_del_color_selector(de->h_cs); + memo_tool_btn_focus_set(de->btn_color, EINA_FALSE); + de->h_cs = NULL; + } +} + +static void _on_stroke_color_btn_up(void *data, Evas *e, Evas_Object *evas_obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + if (de->h_cs!= NULL) { /* stroke color selector already open */ + return; + } + if (de->h_ss!= NULL) { /* destroy stroke size selector */ + _stroke_size_selector_del(de); + } + if (de->erase) { /* deselect eraser */ + de->erase = EINA_FALSE; + Evas_Object *eo = (Evas_Object *)elm_object_part_content_get(de->toolbar, "elm.swallow.btn3"); + memo_tool_btn_focus_set(eo, de->erase); + } + /* load stroke color selector */ + service_h service = NULL; + service_create(&service); + snprintf(de->buf, MEMO_BUFFER_SIZE, "%d", de->stroke_color); + service_add_extra_data(service, "color", de->buf); + snprintf(de->buf, MEMO_BUFFER_SIZE, "%d", 0xFFFFFFFF); + service_add_extra_data(service, "bg_color", de->buf); + de->h_cs = memo_load_color_selector(de->body_main, service, _stroke_color_selector_callback, de); + service_destroy(service); + memo_tool_btn_focus_set(de->btn_color, EINA_TRUE); + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "abbrev", "elm"); +} + +static void _input_panel_event_callback(void *data, Ecore_IMF_Context *ctx, int value) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + if (de->comment) { + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "comment"); + } + } else if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) { + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "comment"); + if (!de->comment) { /* first shift to comment mode */ + if (de->record->comment == NULL) { /* remove DUMMY_COMMENT */ + elm_entry_entry_set(de->entry, ""); + } + de->cb(de->data, "savable", (void *)0); + } + de->comment = EINA_TRUE; + de->cb(de->data, "title", de->record->comment == NULL ? MEMO_I18N_ADD_COMMENT : MEMO_I18N_EDIT_COMMENT); + } +} + +static void _on_entry_content_change(void *data, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + RETIF(!de->comment); + if (elm_object_focus_get(de->edit_field)) { + if (elm_entry_is_empty(obj)) + elm_object_signal_emit(de->edit_field, "elm,state,eraser,hide", "elm"); + else + elm_object_signal_emit(de->edit_field, "elm,state,eraser,show", "elm"); + } + Eina_Bool savable = memo_comment_savable(de->entry, de->record->comment); + de->cb(de->data, "savable", (void *)(savable?1:0)); +} + +static void _focused_cb(void *data, Evas_Object *obj, void *event_info) // Focused callback will show X marked button and hide guidetext. +{ +#ifdef __i386__ + doodle_editor_t *de = (doodle_editor_t *)data; + if (!elm_entry_is_empty(obj)) { + elm_object_signal_emit(de->edit_field, "elm,state,eraser,show", "elm"); + } + elm_object_signal_emit(de->edit_field, "elm,state,guidetext,hide", "elm"); + + Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(de->entry); + if (ecore_imf_context_input_panel_state_get(imf_context) != + ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + //USB keyboard is inactive + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "abbrev", "comment"); + } + else { + if (!de->comment) { /* first shift to comment mode */ + if (de->record->comment == NULL) { /* remove DUMMY_COMMENT */ + elm_entry_entry_set(de->entry, ""); + } + de->cb(de->data, "savable", (void *)0); + } + de->comment = EINA_TRUE; + de->cb(de->data, "title", de->record->comment == NULL ? MEMO_I18N_ADD_COMMENT : MEMO_I18N_EDIT_COMMENT); + } +#else + if (!elm_entry_is_empty(obj)) + elm_object_signal_emit(data, "elm,state,eraser,show", "elm"); + elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm"); +#endif +} + +static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info) // Unfocused callback will show guidetext and hide X marked button. +{ +#ifdef __i386__ + doodle_editor_t *de = (doodle_editor_t *)data; + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit(de->edit_field, "elm,state,guidetext,show", "elm"); + } + elm_object_signal_emit(de->edit_field, "elm,state,eraser,hide", "elm"); + + Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(de->entry); + if (ecore_imf_context_input_panel_state_get(imf_context) == + ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + //USB keyboard is active + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "elm"); + de->cb(de->data, "title", de->record->id==-1 ? MEMO_I18N_CREATE_DRAWING : MEMO_I18N_EDIT_DRAWING); + } else { + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "elm"); + } +#else + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit(data, "elm,state,guidetext,show", "elm"); + } + elm_object_signal_emit(data, "elm,state,eraser,hide", "elm"); +#endif +} + +static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button is clicked, empty entry's contents. +{ + elm_entry_entry_set(data, ""); +} + +static void _draw_argb32(int *img, int w, int h, int x, int y, int size, int color) +{ + int cx, cy, cw, ch; + int i, j; + + cx = x; + cy = y; + cw = size; + ch = size; + CLIP_RECT_TO_RECT(cx, cy, cw, ch, 0, 0, w, h); + for (i = 0; i < ch; i++) { + for (j = 0; j < cw; j++) { + memcpy(img + (i + cy) * w + (cx + j), &color, 4); + } + } +} + +static void _on_doodle_down_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + if (de->comment) { + return; + } + if (de->h_ss!= NULL) { /* destroy stroke size selector */ + _stroke_size_selector_del(de); + } + if (de->h_cs != NULL) { /* destroy stroke color selector */ + _stroke_color_selector_del(de); + } + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "elm"); + de->stroke_down = EINA_TRUE; + de->record->has_doodle = 1; + if (!de->erase) { + de->savable = EINA_TRUE; + } else if (de->record->id != -1) { /* edit existing doodle with eraser */ + de->savable = EINA_TRUE; + } + de->cb(de->data, "savable", (void *)(de->savable?1:0)); +} + +static void _on_doodle_move_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + Evas_Event_Mouse_Move *event = (Evas_Event_Mouse_Move *)event_info; + int *img_data = NULL; + Evas_Coord x, y, w, h; + int px = 0; + int py = 0; + int i = 0; + int gap_max = 0; + int gap_x = 0; + int gap_y = 0; + int color = 0; + + /* a little mouse move events will be received before mouse down event, + if those mouse move event is not filtered, + a line (from last up point to current move point) will be draw */ + if (!de->stroke_down) { + return; + } + + color = de->erase ? 0xFFFFFFFF : de->stroke_color; + evas_object_geometry_get(de->doodle, &x, &y, &w, &h); + img_data = evas_object_image_data_get(de->doodle, 1); + gap_x = event->cur.output.x - event->prev.output.x; + gap_y = event->cur.output.y - event->prev.output.y; + gap_max = MAX(abs(gap_x), abs(gap_y)); + + for (i = 0; i < gap_max; i++) { + px = event->prev.output.x + i * gap_x / gap_max; + py = event->prev.output.y + i * gap_y / gap_max; + /* mouse position in image */ + px -= x; + py -= y; + _draw_argb32(img_data, w, h, px, py, de->stroke_size, color); + } + evas_object_image_data_update_add(de->doodle, 0, 0, w, h); +} + +static void _on_doodle_up_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + de->stroke_down = EINA_FALSE; +} + +/* this function must be execute only once + * in resize callback we will get the actual size of doodle + * we need to transfer origin image data to fit the actual canvas size + */ +static void _on_doodle_resize_cb(void *data, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + Evas_Coord w, h; + int *img_data = NULL; + + if (de->doodle_init) { /* reenter control */ + return; + } else { + de->doodle_init = EINA_TRUE; + evas_object_geometry_get(de->doodle, NULL, NULL, &w, &h); + evas_object_image_size_set(de->doodle, w, h); + img_data = evas_object_image_data_get(de->doodle, 1); + if (img_data != NULL) { /* set background color as white */ + memset(img_data, 0xFFFFFFFF, sizeof(int)*w*h); + evas_object_image_data_update_add(de->doodle, 0, 0, w, h); + } + } +} + +static void _on_eraser_up(void *data, Evas *e, Evas_Object *evas_obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + if (de->h_ss!= NULL) { /* destroy stroke size selector */ + _stroke_size_selector_del(de); + } + if (de->h_cs != NULL) { /* destroy stroke color selector */ + _stroke_color_selector_del(de); + } + de->erase = !(de->erase); + Evas_Object *eo = (Evas_Object *)elm_object_part_content_get(de->toolbar, "elm.swallow.btn3"); + memo_tool_btn_focus_set(eo, de->erase); + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "elm"); +} + +static void _on_yes(void *data, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + _save_record(de); + de->cb(de->data, "text", NULL); +} + +static void _on_no(void *data, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + de->cb(de->data, "text", NULL); +} + +static void _on_text_mode(void *data, Evas_Object *obj, void *event_info) +{ + doodle_editor_t *de = (doodle_editor_t *)data; + if (de->savable) { /* modified, need user confirmation */ + memo_create_yes_no_popup(de->win, MEMO_I18N_SAVE_MEMO, _on_yes, _on_no, de); + } else { + de->cb(de->data, "text", NULL); + } +} + +static void _create_doodle_editor_layout(doodle_editor_t *de, service_h service) +{ + int w = 0; + int h = 0; + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + snprintf(de->buf, MEMO_BUFFER_SIZE, "doodle_editor_%d_%d", w, h); + de->body_main = elm_layout_create(de->parent, EDJ_FILE, de->buf); + de->cb(de->data, "layout", de->body_main); + /* title */ + de->cb(de->data, "title", de->record->id==-1 ? MEMO_I18N_CREATE_MEMO : MEMO_I18N_EDIT_MEMO); + /* date */ + memo_time_format(de->buf, MEMO_BUFFER_SIZE, de->record->modi_time); + edje_object_part_text_set(elm_layout_edje_get(de->body_main), "elm.text.date", de->buf); + + /* toolbar */ + de->toolbar = elm_swallowed_layout(de->body_main, "elm.swallow.toolbar", EDJ_FILE, "edit_toolbar"); + de->btn_size = elm_swallowed_layout(de->toolbar, "elm.swallow.btn1", EDJ_DIR"/white/memo.edj", "tl_stroke_size"); + evas_object_event_callback_add(de->btn_size, EVAS_CALLBACK_MOUSE_UP, _on_stroke_size_btn_up, de); + de->btn_color = elm_swallowed_layout(de->toolbar, "elm.swallow.btn2", EDJ_DIR"/white/memo.edj", "tl_stroke_color"); + evas_object_event_callback_add(de->btn_color, EVAS_CALLBACK_MOUSE_UP, _on_stroke_color_btn_up, de); + Evas_Object *eo = elm_swallowed_layout(de->toolbar, "elm.swallow.btn3", EDJ_DIR"/white/memo.edj", "tl_stroke_eraser"); + evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_UP, _on_eraser_up, de); + if (!service_key_check(service, "toggle", "disable")) { + elm_swallowed_button(de->toolbar, "elm.swallow.btn4", MEMO_I18N_TEXT, _on_text_mode, de); + } + + /* doodle */ + Evas *evas = evas_object_evas_get(de->parent); + de->doodle = evas_object_image_filled_add(evas); + evas_object_image_colorspace_set(de->doodle, EVAS_COLORSPACE_ARGB8888); + evas_object_image_alpha_set(de->doodle, 1); + /* doodle data */ + if (de->record->has_doodle == 1) { + snprintf(de->buf, MEMO_BUFFER_SIZE, DOODLEDIR "/%d.png", (int)de->record->id); + evas_object_image_file_set(de->doodle, de->buf, NULL); + } else { + evas_object_render_flush_hook(de->doodle, _on_doodle_resize_cb, de); + } + evas_object_event_callback_add(de->doodle, EVAS_CALLBACK_MOUSE_DOWN, _on_doodle_down_cb, de); + evas_object_event_callback_add(de->doodle, EVAS_CALLBACK_MOUSE_MOVE, _on_doodle_move_cb, de); + evas_object_event_callback_add(de->doodle, EVAS_CALLBACK_MOUSE_UP, _on_doodle_up_cb, de); + evas_object_show(de->doodle); + elm_object_part_content_set(de->body_main, "elm.swallow.doodle", de->doodle); + + /* comment */ + eo = elm_swallowed_layout(de->body_main, "elm.swallow.comment", EDJ_FILE, "doodle_comment"); + //EditField + Evas_Object *layout = elm_layout_add(eo); + elm_layout_theme_set(layout, "layout", "editfield", "default"); + elm_object_part_content_set(eo, "elm.swallow.editfield", layout); + Evas_Object *entry = elm_entry_add(eo); + elm_object_part_content_set(layout, "elm.swallow.content", entry); + de->edit_field = layout; + + elm_object_style_set(entry, "font_color_black"); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_entry_scrollable_set(entry, EINA_TRUE); + evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(layout, EVAS_HINT_EXPAND, 0.5); + de->entry = entry; + elm_entry_cnp_mode_set(de->entry, ELM_CNP_MODE_PLAINTEXT); + de->imf_context = elm_entry_imf_context_get(de->entry); + /* if not hide explicitly, seems hide event of sweep down can not be received */ + ecore_imf_context_input_panel_hide(de->imf_context); + memo_comment_recover(de->entry, de->record->comment); + ecore_imf_context_input_panel_event_callback_add(de->imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, + _input_panel_event_callback, de); + evas_object_smart_callback_add(de->entry, "changed", _on_entry_content_change, de); +#ifdef __i386__ + evas_object_smart_callback_add(de->entry, "focused", _focused_cb, de); + evas_object_smart_callback_add(de->entry, "unfocused", _unfocused_cb, de); +#else + evas_object_smart_callback_add(de->entry, "preedit,changed", _on_entry_content_change, de); + evas_object_smart_callback_add(entry, "focused", _focused_cb, layout); + evas_object_smart_callback_add(entry, "unfocused", _unfocused_cb, layout); +#endif + elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, entry); + + /* savable */ + de->cb(de->data, "savable", (void *)(de->savable?1:0)); +} + +void memo_doodle_editor_time_format_update(void *h_de) +{ + doodle_editor_t *de = (doodle_editor_t *)h_de; + memo_time_format(de->buf, MEMO_BUFFER_SIZE, de->record->modi_time); + edje_object_part_text_set(elm_layout_edje_get(de->body_main), "elm.text.date", de->buf); +} + +void memo_doodle_editor_cancel(void *h_de) +{ + doodle_editor_t *de = (doodle_editor_t *)h_de; + if (de->comment) { + de->comment = EINA_FALSE; + ecore_imf_context_input_panel_hide(de->imf_context); + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "elm"); + memo_comment_recover(de->entry, de->record->comment); + de->cb(de->data, "title", de->record->id==-1 ? MEMO_I18N_CREATE_MEMO : MEMO_I18N_EDIT_MEMO); + de->cb(de->data, "savable", (void *)(de->savable?1:0)); + de->cb(de->data, "comment cancel", NULL); + } else { + if (!de->savable) { /* not modified, return directly */ + de->cb(de->data, "cancel", NULL); + } else { + _launch_yes_no_popup(de); + } + } +} + +void memo_doodle_editor_save(void *h_de) +{ + doodle_editor_t *de = (doodle_editor_t *)h_de; + if (de->comment) { + de->comment = EINA_FALSE; + ecore_imf_context_input_panel_hide(de->imf_context); + edje_object_signal_emit(elm_layout_edje_get(de->body_main), "expand", "elm"); + Eina_Bool savable = memo_comment_savable(de->entry, de->record->comment); + if (savable) { + de->record->comment = elm_entry_markup_to_utf8(elm_entry_entry_get(de->entry)); + if (de->record->id != -1) { /* when edit existing, modification of comment will make record savable */ + de->savable = EINA_TRUE; + } + } + de->cb(de->data, "title", de->record->id==-1 ? MEMO_I18N_CREATE_MEMO : MEMO_I18N_EDIT_MEMO); + de->cb(de->data, "savable", (void *)(de->savable?1:0)); + elm_object_focus_set(de->edit_field, EINA_FALSE); /* when disable done button, focus may reset to edit field */ + de->cb(de->data, "comment done", NULL); + } else { + _save_record(de); + de->cb(de->data, "save", NULL); + } +} + +void *memo_load_doodle_editor(Evas_Object *win, Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data) +{ + doodle_editor_t *de = SMALLOC(doodle_editor_t); + RETVIF(de==NULL, NULL); + service_dump(service); + de->win = win; + de->parent = parent; + de->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + de->data = data; + + /* init */ + char *s = NULL; + service_get_extra_data(service, "index", &s); + if (s == NULL) { + de->record = memo_create_data(); + de->record->id = -1; + de->record->modi_time = time((time_t *) 0); + } else { /* load item */ + de->record = memo_get_data(atoi(s)); + SFREE(s); + } + de->stroke_size = 8; + de->stroke_color = 0xff000000; + + _create_doodle_editor_layout(de, service); + return (void *)de; +} + +void memo_destroy_doodle_editor(void *h_de) +{ + doodle_editor_t *de = (doodle_editor_t *)h_de; + if (de->h_ss!= NULL) { /* destroy stroke size selector */ + _stroke_size_selector_del(de); + } + if (de->h_cs != NULL) { /* destroy stroke color selector */ + _stroke_color_selector_del(de); + } + memo_free_data(de->record); + evas_object_del(de->body_main); + SFREE(de); +} diff --git a/src/memo_doodle_viewer.c b/src/memo_doodle_viewer.c new file mode 100644 index 0000000..f02ff0b --- /dev/null +++ b/src/memo_doodle_viewer.c @@ -0,0 +1,282 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct __doodle_viewer_t { + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + char buf[MEMO_BUFFER_SIZE]; /* for temporarily usage only */ + + /* content */ + Evas_Object *win_main; + memo_data_t *record; + Evas_Object *body_main; + Evas_Object *doodle; + Evas_Object *edit_field; + Evas_Object *entry; + Ecore_IMF_Context *imf_context; + Eina_Bool comment_mode; +} doodle_viewer_t; + +static void _on_flick(void *data, Evas_Object *evas_obj, void *event_info) +{ + doodle_viewer_t *dv = (doodle_viewer_t *)data; + RETIF(dv->comment_mode); + if ((mouse_behaviour_t)event_info == MOUSE_EVENT_DRAG_LEFT) { + dv->cb(dv->data, "sweep,left", NULL); + } else if ((mouse_behaviour_t)event_info == MOUSE_EVENT_DRAG_RIGHT) { + dv->cb(dv->data, "sweep,right", NULL); + } +} + +static void _on_entry_content_change(void *data, Evas_Object *obj, void *event_info) +{ + doodle_viewer_t *dv = (doodle_viewer_t *)data; + if (elm_object_focus_get(dv->edit_field)) { + if (elm_entry_is_empty(obj)) { + elm_object_signal_emit(dv->edit_field, "elm,state,eraser,hide", "elm"); + } else { + elm_object_signal_emit(dv->edit_field, "elm,state,eraser,show", "elm"); + } + } + Eina_Bool savable = memo_comment_savable(dv->entry, dv->record->comment); + dv->cb(dv->data, "savable", (void *)(savable?1:0)); +} + +// Focused callback will show X marked button and hide guidetext +static void _focused_cb(void *data, Evas_Object *obj, void *event_info) +{ +#ifdef __i386__ + doodle_viewer_t *dv = (doodle_viewer_t *)data; + if (!elm_entry_is_empty(obj)) { + elm_object_signal_emit(dv->edit_field, "elm,state,eraser,show", "elm"); + } + elm_object_signal_emit(dv->edit_field, "elm,state,guidetext,hide", "elm"); + + Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(dv->entry); + if (ecore_imf_context_input_panel_state_get(imf_context) != + ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + //USB keyboard is inactive + edje_object_signal_emit(elm_layout_edje_get(dv->body_main), "abbrev", "comment"); + } + else { + if (dv->record->comment == NULL) { /* remove DUMMY_COMMENT */ + elm_entry_entry_set(dv->entry, ""); + } + dv->comment_mode = EINA_TRUE; + dv->cb(dv->data, "comment_mode", (void *)(dv->comment_mode?1:0)); + dv->cb(dv->data, "title", dv->record->comment == NULL ? MEMO_I18N_ADD_COMMENT : MEMO_I18N_EDIT_COMMENT); + Eina_Bool savable = memo_comment_savable(dv->entry, dv->record->comment); + dv->cb(dv->data, "savable", (void *)(savable?1:0)); + } +#else + if (!elm_entry_is_empty(obj)) { + elm_object_signal_emit(data, "elm,state,eraser,show", "elm"); + } + elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm"); +#endif +} + +// Unfocused callback will show guidetext and hide X marked button +static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ +#ifdef __i386__ + doodle_viewer_t *dv = (doodle_viewer_t *)data; + if (elm_entry_is_empty(obj)){ + elm_object_signal_emit(dv->edit_field, "elm,state,guidetext,show", "elm"); + } + elm_object_signal_emit(dv->edit_field, "elm,state,eraser,hide", "elm"); + Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(dv->entry); + if (ecore_imf_context_input_panel_state_get(imf_context) == + ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + //USB keyboard is active + elm_object_focus_allow_set(dv->entry, EINA_FALSE); + } +#else + if (elm_entry_is_empty(obj)){ + elm_object_signal_emit(data, "elm,state,guidetext,show", "elm"); + } + elm_object_signal_emit(data, "elm,state,eraser,hide", "elm"); +#endif +} + +// When X marked button is clicked, empty entry’s contents +static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + elm_entry_entry_set(data, ""); +} + +static void _input_panel_event_callback(void *data, Ecore_IMF_Context *ctx, int value) +{ + doodle_viewer_t *dv = (doodle_viewer_t *)data; + if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + edje_object_signal_emit(elm_layout_edje_get(dv->body_main), "expand", "comment"); + } else if (value == ECORE_IMF_INPUT_PANEL_STATE_SHOW) { + edje_object_signal_emit(elm_layout_edje_get(dv->body_main), "abbrev", "comment"); + if (dv->record->comment == NULL) { /* remove DUMMY_COMMENT */ + elm_entry_entry_set(dv->entry, ""); + } + dv->comment_mode = EINA_TRUE; + dv->cb(dv->data, "comment_mode", (void *)(dv->comment_mode?1:0)); + dv->cb(dv->data, "title", dv->record->comment == NULL ? MEMO_I18N_ADD_COMMENT : MEMO_I18N_EDIT_COMMENT); + Eina_Bool savable = memo_comment_savable(dv->entry, dv->record->comment); + dv->cb(dv->data, "savable", (void *)(savable?1:0)); + } +} + +static void _create_doodle_viewer_layout(doodle_viewer_t *dv, service_h service) +{ + int w = 0; + int h = 0; + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + snprintf(dv->buf, MEMO_BUFFER_SIZE, "doodle_viewer_%d_%d", w, h); + dv->body_main = elm_layout_create(dv->parent, EDJ_FILE, dv->buf); + dv->cb(dv->data, "layout", dv->body_main); + + /* date */ + memo_time_format(dv->buf, MEMO_BUFFER_SIZE, dv->record->modi_time); + edje_object_part_text_set(elm_layout_edje_get(dv->body_main), "elm.text.date", dv->buf); + + /* doodle */ + snprintf(dv->buf, MEMO_BUFFER_SIZE, DOODLEDIR "/%d.png", dv->record->id); + dv->doodle = elm_swallowed_icon(dv->body_main, "elm.swallow.doodle", dv->buf); + /* flick event */ + evas_object_flick_callback_add(dv->doodle, _on_flick, dv); + + /* comment */ + Evas_Object *eo = elm_swallowed_layout(dv->body_main, "elm.swallow.comment", EDJ_FILE, "doodle_comment"); + //EdieField + Evas_Object *layout = elm_layout_add(eo); + elm_layout_theme_set(layout, "layout", "editfield", "default"); + elm_object_part_content_set(eo, "elm.swallow.editfield", layout); + Evas_Object *ef = elm_entry_add(eo); + elm_object_part_content_set(layout, "elm.swallow.content", ef); + dv->edit_field = layout; + + elm_object_style_set(ef, "font_color_black"); + elm_entry_single_line_set(ef, EINA_TRUE); + elm_entry_scrollable_set(ef, EINA_TRUE); + evas_object_size_hint_weight_set(ef, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(ef, EVAS_HINT_EXPAND, 0.5); + + dv->entry = ef; + elm_entry_cnp_mode_set(dv->entry, ELM_CNP_MODE_PLAINTEXT); + memo_comment_recover(dv->entry, dv->record->comment); + /* if not hide explicitly, seems hide event of sweep down can not be received */ + dv->imf_context = elm_entry_imf_context_get(dv->entry); + ecore_imf_context_input_panel_hide(dv->imf_context); + ecore_imf_context_input_panel_event_callback_add(dv->imf_context, ECORE_IMF_INPUT_PANEL_STATE_EVENT, + _input_panel_event_callback, dv); + evas_object_smart_callback_add(dv->entry, "changed", _on_entry_content_change, dv); +#ifdef __i386__ + evas_object_smart_callback_add(dv->entry, "focused", _focused_cb, dv); + evas_object_smart_callback_add(dv->entry, "unfocused", _unfocused_cb, dv); +#else + + evas_object_smart_callback_add(dv->entry, "preedit,changed", _on_entry_content_change, dv); + evas_object_smart_callback_add(dv->entry, "focused", _focused_cb, layout); + evas_object_smart_callback_add(dv->entry, "unfocused", _unfocused_cb, layout); +#endif + elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, dv->entry); +} + +void memo_doodle_viewer_share_record(void *h_dv) +{ + doodle_viewer_t *dv = (doodle_viewer_t *)h_dv; + memo_share(dv->win_main, (int *)&dv->record->id, 1); +} + +void memo_doodle_viewer_save(void *h_dv) +{ + doodle_viewer_t *dv = (doodle_viewer_t *)h_dv; + dv->record->comment = elm_entry_markup_to_utf8(elm_entry_entry_get(dv->entry)); + memo_mod_data(dv->record); + dv->cb(dv->data, "comment_save", NULL); + dv->comment_mode = EINA_FALSE; + dv->cb(dv->data, "comment_mode", (void *)(dv->comment_mode?1:0)); + elm_object_focus_set(dv->edit_field, EINA_FALSE); +#ifdef __i386__ + elm_object_focus_allow_set(dv->entry, EINA_TRUE); +#endif +} + +void memo_doodle_viewer_cancel(void *h_dv) +{ + doodle_viewer_t *dv = (doodle_viewer_t *)h_dv; + memo_comment_recover(dv->entry, dv->record->comment); + dv->comment_mode = EINA_FALSE; + dv->cb(dv->data, "comment_mode", (void *)(dv->comment_mode?1:0)); + elm_object_focus_set(dv->edit_field, EINA_FALSE); +#ifdef __i386__ + elm_object_focus_allow_set(dv->entry, EINA_TRUE); +#endif +} + +void *memo_load_doodle_viewer(Evas_Object *parent, Evas_Object *win, int id, service_h service, Memo_Component_Callback cb, void *data) +{ + doodle_viewer_t *dv = SMALLOC(doodle_viewer_t); + RETVIF(dv==NULL, NULL); + service_dump(service); + dv->parent = parent; + dv->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + dv->data = data; + + /* init */ + dv->win_main = win; + dv->record = memo_get_data(id); + _create_doodle_viewer_layout(dv, service); + return (void *)dv; +} + +void memo_doodle_viewer_pre_del(void *h_dv) +{ + doodle_viewer_t *dv = (doodle_viewer_t *)h_dv; + if (dv->imf_context != NULL) { + ecore_imf_context_input_panel_event_callback_del(dv->imf_context, + ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_event_callback); + ecore_imf_context_input_panel_hide(dv->imf_context); + } + dv->imf_context = NULL; + elm_layout_content_del(dv->body_main, "elm.swallow.doodle"); +} + +void memo_destroy_doodle_viewer(void *h_dv) +{ + doodle_viewer_t *dv = (doodle_viewer_t *)h_dv; + if (dv->imf_context != NULL) { + ecore_imf_context_input_panel_event_callback_del(dv->imf_context, + ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_event_callback); + ecore_imf_context_input_panel_hide(dv->imf_context); + } + evas_object_del(dv->body_main); + memo_free_data(dv->record); + SFREE(dv); +} + diff --git a/src/memo_edit.c b/src/memo_edit.c new file mode 100644 index 0000000..d7ec25d --- /dev/null +++ b/src/memo_edit.c @@ -0,0 +1,256 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include "memo_log.h" + +typedef struct __edit_view_t { + appdata *ad; + Evas_Object *navigator; + Elm_Object_Item *navi_it; + Evas_Object *body_main; /* content */ + Evas_Object *l_btn; + Evas_Object *r_btn; + Eina_Bool drawing; /* drawing or text mode */ + + /* add more variables here */ + void *h_ed; +} edit_view_t; + +extern Eina_Bool launch_by_new; +extern Eina_Bool is_previous_edit_view; +extern Eina_Bool normal_memo_launch; +static void _text_editor_callback(void *data, const char *msg, void *event); +static void _doodle_editor_callback(void *data, const char *msg, void *event); + +static void _on_left_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + edit_view_t *ev = (edit_view_t *)data; + if (ev->drawing) { + memo_doodle_editor_save(ev->h_ed); + } else { + memo_text_editor_save(ev->h_ed); + } + MEMO_FUN_END(); +} + +static void _on_right_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + edit_view_t *ev = (edit_view_t *)data; + if (ev->drawing) { + memo_doodle_editor_cancel(ev->h_ed); + } else { + memo_text_editor_cancel(ev->h_ed); + } + MEMO_FUN_END(); +} + +static void _text_editor_callback(void *data, const char *msg, void *event) +{ + MEMO_FUN_BEG(); + edit_view_t *ev = (edit_view_t *)data; + if (strcmp(msg, "layout") == 0) { + elm_object_part_content_set(ev->body_main, "elm.swallow.content", (Evas_Object *)event); + } else if (strcmp(msg, "title") == 0) { + elm_object_item_text_set(ev->navi_it, (const char *)event); + } else if (strcmp(msg, "savable") == 0) { + elm_object_disabled_set(ev->l_btn, (int)event==0? EINA_TRUE:EINA_FALSE); + } else if (strcmp(msg, "save") == 0) { + ev->ad->index = ev->ad->index_detail; + memo_navigator_pop(ev->navigator); + if(normal_memo_launch && launch_by_new ) { + elm_win_lower(ev->ad->win_main); + launch_by_new = EINA_FALSE ; + } + if(is_previous_edit_view) { + is_previous_edit_view = EINA_FALSE ; + } + } else if (strcmp(msg, "cancel") == 0) { + ev->ad->index = ev->ad->index_detail; + memo_navigator_pop(ev->navigator); + if(normal_memo_launch && launch_by_new ) { + LOGD("lower lower"); + elm_win_lower(ev->ad->win_main); + launch_by_new = EINA_FALSE ; + } + if(is_previous_edit_view) { + is_previous_edit_view = EINA_FALSE ; + } + + } else if (strcmp(msg, "drawing") == 0) { + elm_object_part_content_unset(ev->body_main, "elm.swallow.content"); + memo_destroy_text_editor(ev->h_ed); + ev->h_ed = memo_load_doodle_editor(ev->ad->win_main, ev->body_main, NULL, _doodle_editor_callback, ev); + ev->drawing = EINA_TRUE; + } + MEMO_FUN_END(); +} + +static void _doodle_editor_callback(void *data, const char *msg, void *event) +{ + MEMO_FUN_BEG(); + edit_view_t *ev = (edit_view_t *)data; + if (strcmp(msg, "layout") == 0) { + elm_object_part_content_set(ev->body_main, "elm.swallow.content", (Evas_Object *)event); + } else if (strcmp(msg, "title") == 0) { + elm_object_item_text_set(ev->navi_it, (const char *)event); + } else if (strcmp(msg, "savable") == 0) { + elm_object_disabled_set(ev->l_btn, (int)event==0? EINA_TRUE:EINA_FALSE); + } else if (strcmp(msg, "save") == 0) { + ev->ad->index = ev->ad->index_detail; + memo_navigator_pop(ev->navigator); + if(normal_memo_launch && launch_by_new ) { + elm_win_lower(ev->ad->win_main); + launch_by_new = EINA_FALSE ; + } + if(is_previous_edit_view) { + is_previous_edit_view = EINA_FALSE ; + } + } else if (strcmp(msg, "cancel") == 0) { + ev->ad->index = ev->ad->index_detail; + memo_navigator_pop(ev->navigator); + if(normal_memo_launch && launch_by_new ) { + elm_win_lower(ev->ad->win_main); + launch_by_new = EINA_FALSE ; + } + if(is_previous_edit_view) { + is_previous_edit_view = EINA_FALSE ; + } + } else if (strcmp(msg, "text") == 0) { + elm_object_part_content_unset(ev->body_main, "elm.swallow.content"); + memo_destroy_doodle_editor(ev->h_ed); + ev->h_ed = memo_load_text_editor(ev->ad->win_main, ev->body_main, NULL, _text_editor_callback, ev); + ev->drawing = EINA_FALSE; + } + MEMO_FUN_END(); +} + +static void _edit_on_delete(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + edit_view_t *ev = (edit_view_t *)data; + elm_object_part_content_unset(ev->body_main, "elm.swallow.content"); + if (ev->drawing) { + memo_destroy_doodle_editor(ev->h_ed); + } else { + memo_destroy_text_editor(ev->h_ed); + } + evas_object_del(ev->l_btn); + evas_object_del(ev->r_btn); + SFREE(ev); + MEMO_FUN_END(); +} + +static void _on_update(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + edit_view_t *ev = (edit_view_t *)data; + if (ev->drawing) { + memo_doodle_editor_time_format_update(ev->h_ed); + } else { + memo_text_editor_time_format_update(ev->h_ed); + } + MEMO_FUN_END(); +} + +void *memo_load_edit_view(appdata *ad) +{ + MEMO_FUN_BEG(); + + if (ad->index == -1) { + int c = 0; + if (memo_get_count(&c) == 0) { + RETVIF(c == MEMO_MAX_RECORD, NULL); + } + } + + edit_view_t *ev = SMALLOC(edit_view_t); + RETVIF(ev == NULL, NULL); + is_previous_edit_view = EINA_TRUE; + ev->ad = ad; + + ev->navigator = ad->navigator; + /* body main */ + ev->body_main = elm_layout_create(ev->navigator, EDJ_FILE, "empty_layout"); + elm_naviframe_prev_btn_auto_pushed_set(ev->navigator, EINA_FALSE); + Elm_Object_Item *navi_it = memo_naviframe_item_push(ev->navigator, "", NULL, NULL, ev->body_main, NULL); + ev->navi_it = navi_it; + evas_object_event_callback_add(ev->body_main, EVAS_CALLBACK_DEL, _edit_on_delete, ev); + evas_object_data_set(ev->body_main, "time_format_update_cb", _on_update); + evas_object_data_set(ev->body_main, "time_format_update_data", ev); + /* delete "<-" button */ + Evas_Object *btn = elm_object_item_part_content_get(navi_it, MEMO_NAVIFRAME_ITEM_PREV_BTN); + if (btn != NULL) { + evas_object_del(btn); + } + ev->r_btn = elm_button_create(ev->navigator, MEMO_I18N_CANCEL, + _on_right_btn_clicked, ev); + elm_object_style_set(ev->r_btn, "naviframe/back_btn/default"); + elm_object_item_part_content_set(navi_it, "title_right_btn", ev->r_btn); + ev->l_btn = elm_button_create(ev->navigator, MEMO_I18N_SAVE, + _on_left_btn_clicked, ev); + elm_object_style_set(ev->l_btn, "naviframe/title_icon"); + + Evas_Object *icon = elm_icon_add(ev->l_btn); + elm_image_file_set(icon, "usr/apps/org.tizen.memo/res/images/01_header_icon_add.png", NULL); + evas_object_size_hint_aspect_set(icon, EVAS_ASPECT_CONTROL_VERTICAL, 1 , 1); + elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE); + elm_object_content_set(ev->l_btn, icon); + + elm_object_item_part_content_set(navi_it, "title_left_btn", ev->l_btn); + + /*show the toolbar*/ + elm_object_item_signal_emit(navi_it, "elm,state,sip,shown", ""); + + /* load editor */ + service_h service = NULL; + service_create(&service); + if (ad->init_str != NULL) { + service_add_extra_data(service, "init_str", ad->init_str); + SFREE(ad->init_str); + } + if (ad->index == -1) { + ev->h_ed = memo_load_text_editor(ev->ad->win_main, ev->body_main, service, _text_editor_callback, ev); + ev->drawing = EINA_FALSE; + } else { + memo_data_t *md = memo_get_data(ad->index); + snprintf(ev->ad->buf, MEMO_BUFFER_SIZE, "%d", ad->index); + service_add_extra_data(service, "index", ev->ad->buf); + if (md->has_doodle == 1) { + ev->h_ed = memo_load_doodle_editor(ev->ad->win_main, ev->body_main, service, _doodle_editor_callback, ev); + ev->drawing = EINA_TRUE; + } else { + ev->h_ed = memo_load_text_editor(ev->ad->win_main, ev->body_main, service, _text_editor_callback, ev); + ev->drawing = EINA_FALSE; + } + memo_free_data(md); + } + service_destroy(service); + MEMO_FUN_END(); + return (void *)ev; +} + diff --git a/src/memo_edit_list.c b/src/memo_edit_list.c new file mode 100644 index 0000000..a4c97d3 --- /dev/null +++ b/src/memo_edit_list.c @@ -0,0 +1,133 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include + +#include +#include "memo_ug.h" + +typedef struct __edit_list_view_t { + appdata *ad; + Evas_Object *navigator; + Elm_Object_Item *navi_it; + Evas_Object *body_main; + Evas_Object *delete_btn; + Evas_Object *share_btn; + Evas_Object *control_bar; + void *viewer; +} edit_list_view_t; + +static void on_delete_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + edit_list_view_t *elv = (edit_list_view_t *)data; + memo_list_editor_delete_records(elv->viewer); +} + +static void _on_cancel_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + edit_list_view_t *elv = (edit_list_view_t *)data; + memo_navigator_pop(elv->navigator); +} + +static void _elv_on_send_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + edit_list_view_t *elv = (edit_list_view_t *)data; + memo_list_editor_share_records(elv->viewer); +} + +static void _list_editor_callback(void *data, const char *msg, void *event) +{ + edit_list_view_t *elv = (edit_list_view_t *)data; + if (strcmp(msg, "layout") == 0) { + elm_object_part_content_set(elv->body_main, "elm.swallow.content", (Evas_Object *)event); + } else if (strcmp(msg, "title") == 0) { + elm_object_item_text_set(elv->navi_it, (const char *)event); + } else if (strcmp(msg, "count") == 0) { + elm_object_disabled_set(elv->delete_btn, ((int)event == 0) ? EINA_TRUE : EINA_FALSE); + elm_object_disabled_set(elv->share_btn, ((int)event == 0) ? EINA_TRUE : EINA_FALSE); + } else if (strcmp(msg, "delete_done") == 0) { + memo_navigator_pop(elv->navigator); + } +} + +void _on_delete(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + edit_list_view_t *elv = (edit_list_view_t *)data; + elm_object_part_content_unset(elv->body_main, "elm.swallow.content"); + memo_destroy_list_editor(elv->viewer); + elv->viewer = NULL; + SFREE(elv); +} + +static void _on_update(void *data, Evas_Object *obj, void *event_info) +{ + edit_list_view_t *elv = (edit_list_view_t *)data; + if (elv->viewer != NULL) { + elm_object_part_content_unset(elv->body_main, "elm.swallow.content"); + memo_destroy_list_editor(elv->viewer); + } + elv->viewer = memo_load_list_editor(elv->body_main, elv->ad->win_main, NULL, _list_editor_callback, elv); +} + +void *memo_load_edit_list_view(appdata *ad) +{ + edit_list_view_t *elv = SMALLOC(edit_list_view_t); + RETVIF(elv == NULL, NULL); + + elv->ad = ad; + elv->navigator = ad->navigator; + + /* body main */ + elv->body_main = elm_layout_create(elv->navigator, EDJ_FILE, "empty_layout"); + Evas_Object *btn3 = elm_button_add(elv->navigator); + evas_object_smart_callback_add(btn3, "clicked", _on_cancel_btn_clicked, elv); + elm_object_style_set(btn3, "naviframe/back_btn/default"); + Elm_Object_Item *navi_it = memo_naviframe_item_push(elv->navigator, MEMO_I18N_SELECT_MEMO, btn3, NULL, elv->body_main, NULL); + elv->navi_it = navi_it; + evas_object_event_callback_add(elv->body_main, EVAS_CALLBACK_DEL, _on_delete, elv); + evas_object_data_set(elv->body_main, "time_format_update_cb", _on_update); + evas_object_data_set(elv->body_main, "time_format_update_data", elv); + + /* control bar */ + Evas_Object *btn1 = elm_button_add(elv->navigator); + elm_object_text_set(btn1, MEMO_I18N_DELETE); + elm_object_style_set(btn1, "naviframe/toolbar/default"); + elm_object_item_part_content_set(navi_it, "toolbar_button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", on_delete_btn_clicked, + elv); + elv->delete_btn = btn1; + + Evas_Object *btn2 = elm_button_add(elv->navigator); + elm_object_text_set(btn2, MEMO_I18N_SHARE); + elm_object_style_set(btn2, "naviframe/toolbar/default"); + elm_object_item_part_content_set(navi_it, "toolbar_button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", _elv_on_send_btn_clicked, + elv); + elv->share_btn = btn2; + /* custom body main here */ + elv->viewer = memo_load_list_editor(elv->body_main, elv->ad->win_main, NULL, _list_editor_callback, elv); + return elv; +} + diff --git a/src/memo_list.c b/src/memo_list.c new file mode 100644 index 0000000..77ea6aa --- /dev/null +++ b/src/memo_list.c @@ -0,0 +1,144 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include + +typedef struct __list_view_t { + appdata *ad; + Evas_Object *navigator; + Elm_Object_Item *navi_it; + Evas_Object *body_main; + Evas_Object *l_btn; + void *viewer; +} list_view_t; + +static void _on_left_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + list_view_t *lv = (list_view_t *)data; + appdata *ad = lv->ad; + ad->index = -1; + memo_load_edit_list_view(ad); +} + +static void _on_right_btn_clicked(void *data, Evas_Object *obj, void *event_info) +{ + list_view_t *lv = (list_view_t *)data; + appdata *ad = lv->ad; + ad->index = -1; + memo_load_edit_view(ad); +} + +static Eina_Bool _launch_detail_view(void *data) +{ + list_view_t *lv = (list_view_t *)data; + /* destroy content to make sure no doodle file is referenced, + otherwise, doodle may disappear when edit, + ugh, we may remove this when it not occurs later */ + memo_clear_list_viewer(lv->viewer); + memo_load_detail_view(lv->ad); + return EINA_FALSE; +} + +static void _list_viewer_callback(void *data, const char *msg, void *event) +{ + list_view_t *lv = (list_view_t *)data; + if (strcmp(msg, "layout") == 0) { + elm_object_part_content_set(lv->body_main, "elm.swallow.content", (Evas_Object *)event); + } else if (strcmp(msg, "title") == 0) { + elm_object_item_text_set(lv->navi_it, (const char *)event); + } else if (strcmp(msg, "delete") == 0) { + } else if (strcmp(msg, "count") == 0) { + /* disable edit button */ + elm_object_disabled_set(lv->l_btn, ((int)event == 0) ? EINA_TRUE : EINA_FALSE); + } else if (strcmp(msg, "select") == 0) { + lv->ad->index = (int)event; + ecore_idler_add(_launch_detail_view, lv); + } +} + +static void _on_delete(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + list_view_t *lv = (list_view_t *)data; + if (lv->viewer != NULL) { + elm_object_part_content_unset(lv->body_main, "elm.swallow.content"); + memo_destroy_list_viewer(lv->viewer); + lv->viewer = NULL; + } + SFREE(lv); +} + +static void _on_update(void *data, Evas_Object *obj, void *event_info) +{ + list_view_t *lv = (list_view_t *)data; + if (lv->viewer != NULL) { + memo_update_list_viewer(lv->viewer); + } +} + +void _back_btn_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + /* change Applications's windwos to background */ + Evas_Object *win = (Evas_Object *) data; + elm_win_lower(win); +} + +void *memo_load_list_view(appdata *ad) +{ + list_view_t *lv = SMALLOC(list_view_t); + RETVIF(lv == NULL, NULL); + lv->ad = ad; + + lv->navigator = ad->navigator; + /* body main */ + lv->body_main = elm_layout_create(lv->navigator, EDJ_FILE, "empty_layout"); + /* back btn of navigation bar */ + Evas_Object *btn = elm_button_add(lv->navigator); + elm_object_style_set(btn, "naviframe/back_btn/default"); + evas_object_smart_callback_add(btn, "clicked", _back_btn_clicked_cb, lv->ad->win_main); + + Elm_Object_Item *navi_it = memo_naviframe_item_push(lv->navigator, "", btn, NULL, lv->body_main, NULL); + lv->navi_it = navi_it; + evas_object_event_callback_add(lv->body_main, EVAS_CALLBACK_DEL, _on_delete, lv); + evas_object_data_set(lv->body_main, "update_cb", _on_update); + evas_object_data_set(lv->body_main, "update_data", lv); + evas_object_data_set(lv->body_main, "time_format_update_cb", _on_update); + evas_object_data_set(lv->body_main, "time_format_update_data", lv); + /* control bar */ + Evas_Object *btn1 = elm_button_add(ad->navigator); + elm_object_text_set(btn1, MEMO_I18N_EDIT); + elm_object_style_set(btn1, "naviframe/toolbar/default"); + elm_object_item_part_content_set(navi_it, "toolbar_button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", _on_left_btn_clicked, + lv); + lv->l_btn = btn1; + Evas_Object *btn2 = elm_button_add(ad->navigator); + elm_object_text_set(btn2, MEMO_I18N_CREATE); + elm_object_style_set(btn2, "naviframe/toolbar/default"); + elm_object_item_part_content_set(navi_it, "toolbar_button2", btn2); + evas_object_smart_callback_add(btn2, "clicked", _on_right_btn_clicked, + lv); + /* custom body main here */ + lv->viewer = memo_load_list_viewer(lv->body_main, lv->ad->win_main, NULL, _list_viewer_callback, lv); + return (void *)lv; +} + diff --git a/src/memo_list_editor.c b/src/memo_list_editor.c new file mode 100644 index 0000000..3450aa6 --- /dev/null +++ b/src/memo_list_editor.c @@ -0,0 +1,253 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include + +typedef struct __list_editor { + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + char buf[MEMO_BUFFER_SIZE]; /* for temporarily usage only */ + + /* content */ + Evas_Object *body_main; + Evas_Object *select_all; + Evas_Object *genlist; + + /* other */ + Evas_Object *win_main; + Elm_Genlist_Item_Class itc; + Elm_Genlist_Item_Class itc_draw; + int count; /* count of records */ + int select_count; /* count of records */ + Evas_Object *selectioninfo; + Evas_Object *selectioninfo_layout; +} list_editor; + +#pragma GCC diagnostic ignored "-Wformat-extra-args" +static void create_selectioninfo(list_editor *le) +{ + if (le->selectioninfo == NULL) { + le->selectioninfo = elm_notify_add(le->body_main); + elm_notify_orient_set(le->selectioninfo, ELM_NOTIFY_ORIENT_BOTTOM); + le->selectioninfo_layout = elm_layout_add(le->body_main); + elm_layout_theme_set(le->selectioninfo_layout, "standard", "selectioninfo", + "vertical/bottom_12"); + elm_object_content_set(le->selectioninfo, le->selectioninfo_layout); + } + + if (le->select_count == 0) { + evas_object_hide(le->selectioninfo); + } else { + char text[128]; + if (le->select_count == 1) { + snprintf(text, 128, "%s", MEMO_I18N_1_MEMO_SELECTED); + } else { + snprintf(text, 128, MEMO_I18N_D_MEMOS_SELECTED, le->select_count); + } + edje_object_part_text_set(elm_layout_edje_get(le->selectioninfo_layout), "elm.text", text); + elm_notify_timeout_set(le->selectioninfo, 2); + evas_object_show(le->selectioninfo); + } +} +#pragma GCC diagnostic warning "-Wformat-extra-args" + +static void _on_item_select_cb(void *data, Evas_Object *obj, void *event_info) +{ + Elm_Object_Item *it = (Elm_Object_Item *)event_info; + gl_data_t *gld = (gl_data_t *)elm_object_item_data_get(it); + list_editor *le = (list_editor *)gld->user_data; + + elm_genlist_item_selected_set(it, 0); + + gld->check = !gld->check; + elm_genlist_item_update(it); + (gld->check) ? (le->select_count++) : (le->select_count--); + if (le->select_count == le->count) { /* update select all */ + elm_check_state_set(le->select_all, EINA_TRUE); + } else { + elm_check_state_set(le->select_all, EINA_FALSE); + } + /* update select info */ + create_selectioninfo(le); + le->cb(le->data, "count", (void *)le->select_count); +} + +static void memo_data_iterate_cb (memo_data_t *md, void *user_data) +{ + list_editor *le = (list_editor *)user_data; + gl_data_t *gld = SMALLOC(gl_data_t); + RETIF(gld == NULL); + memo_gld_init(gld, md, le, NULL); + if (md->has_doodle) { + elm_genlist_item_append(le->genlist, &le->itc_draw,(void *)gld, + NULL, ELM_GENLIST_ITEM_NONE, _on_item_select_cb, NULL); + } else { + elm_genlist_item_append(le->genlist, &le->itc,(void *)gld, + NULL, ELM_GENLIST_ITEM_NONE, _on_item_select_cb, NULL); + } + le->count++; +} + +static void on_select_all_change_cb(void *data, Evas *e, Evas_Object *obj, void *event_info) +{ + list_editor *le = (list_editor *)data; + Evas_Event_Mouse_Up *ev = event_info; + Eina_Bool bSelect = EINA_FALSE; + Eina_List *realized_list; + Elm_Object_Item *it; + Eina_List *l = NULL; + gl_data_t *gld = NULL; + + Evas_Coord x, y, w, h; + evas_object_geometry_get(obj, &x, &y, &w, &h); + if (!IN_RECT_CHECK(ev->output.x, ev->output.y, x, y, w, h)) { + return; + } + + bSelect = elm_check_state_get(le->select_all); + bSelect = !bSelect; + elm_check_state_set(le->select_all, bSelect); + bSelect ? (le->select_count = le->count) : (le->select_count = 0); + it = elm_genlist_first_item_get(le->genlist); + while (it != NULL) { + gld = (gl_data_t *)elm_object_item_data_get(it); + if (gld->index != -1) { + gld->check = bSelect; + } + it = elm_genlist_item_next_get(it); + } + realized_list = elm_genlist_realized_items_get(le->genlist); + EINA_LIST_FOREACH(realized_list, l, it) { + elm_genlist_item_update(it); + } + create_selectioninfo(le); + le->cb(le->data, "count", (void *)le->select_count); +} + +static void _create_list_editor_layout(list_editor *le, service_h service) +{ + Evas_Object *eo = NULL; + Evas_Object *check = NULL; + + le->body_main = elm_layout_create(le->parent, EDJ_FILE, "edit_list_frame"); + le->cb(le->data, "layout", le->body_main); + + /* select all */ + eo = elm_layout_create(le->body_main, EDJ_FILE, "edit_list_item_select_all"); + edje_object_part_text_set(elm_layout_edje_get(eo), "elm.text.select.all", MEMO_I18N_SELECT_ALL); + check = elm_check_create(eo); + elm_object_part_content_set(eo, "elm.swallow.check", check); + evas_object_event_callback_add(eo, EVAS_CALLBACK_MOUSE_UP, on_select_all_change_cb, le); + elm_object_part_content_set(le->body_main, "elm.swallow.select.all", eo); + le->select_all = check; + /* genlist */ + le->genlist = elm_genlist_add(le->body_main); + elm_object_part_content_set(le->body_main, "elm.swallow.content", le->genlist); + elm_genlist_block_count_set(le->genlist, 8); + /* records */ + le->count = 0; + memo_all_data(memo_data_iterate_cb, le); + /* notify */ + le->cb(le->data, "count", (void *)le->select_count); +} + +static void on_delete_yes(void *data, Evas_Object *obj, void *event_info) +{ + list_editor *le = (list_editor *)data; + Elm_Object_Item *it; + Elm_Object_Item *pre; + gl_data_t *gld = NULL; + + memo_begin_trans(); + it = elm_genlist_first_item_get(le->genlist); + while (it != NULL) { + pre = it; + it = elm_genlist_item_next_get(it); + gld = (gl_data_t *)elm_object_item_data_get(pre); + if (gld->check) { + memo_del_data(gld->index); + elm_object_item_del(pre); + } + } + memo_end_trans(); + le->cb(le->data, "delete_done", le->body_main); +} + +void memo_list_editor_share_records(void *h_le) +{ + list_editor *le = (list_editor *)h_le; + int indexes[400] = {0}; + int c = 0; + Elm_Object_Item *it; + gl_data_t *gld = NULL; + it = elm_genlist_first_item_get(le->genlist); + while (it != NULL) { + gld = (gl_data_t *)elm_object_item_data_get(it); + if (gld->check) { + indexes[c++] = gld->index; + } + it = elm_genlist_item_next_get(it); + } + memo_share(le->win_main, indexes, c); +} + +void memo_list_editor_delete_records(void *h_le) +{ + list_editor *le = (list_editor *)h_le; + snprintf(le->buf, MEMO_BUFFER_SIZE, "%s?", MEMO_I18N_DELETE); + memo_create_yes_no_popup(le->win_main, le->buf, on_delete_yes, NULL, le); +} + +void *memo_load_list_editor(Evas_Object *parent, Evas_Object *win, service_h service, Memo_Component_Callback cb, void *data) +{ + list_editor *le = SMALLOC(list_editor); + RETVIF(le==NULL, NULL); + service_dump(service); + le->parent = parent; + le->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + le->data = data; + + /* init */ + memo_gl_itc_init(&le->itc, "memo/edit/list"); + memo_gl_itc_init(&le->itc_draw, "memo/edit/list_draw"); + le->win_main = win; + + _create_list_editor_layout(le, service); + return (void *)le; +} + +void memo_destroy_list_editor(void *h_le) +{ + list_editor *le = (list_editor *)h_le; + evas_object_del(le->body_main); + SFREE(le); +} + diff --git a/src/memo_list_viewer.c b/src/memo_list_viewer.c new file mode 100644 index 0000000..d8d681b --- /dev/null +++ b/src/memo_list_viewer.c @@ -0,0 +1,395 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "memo_log.h" + +typedef struct __list_viewer_t { + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + char buf[MEMO_BUFFER_SIZE]; /* for temporarily usage only */ + + /* content */ + Evas_Object *body_main; + Evas_Object *eo_layout; + Evas_Object *searchbar; + Evas_Object *searchbar_layout; + Evas_Object *genlist; + Evas_Object *nocontent; + + /* other */ + Evas_Object *win_main; + Elm_Genlist_Item_Class itc; + Elm_Genlist_Item_Class itc_draw; + Ecore_IMF_Context *imf_context; + Elm_Entry_Filter_Limit_Size limit_filter_data; + int mode; /* 0:list, 1:search */ + char *search_str; + int count; /* count of records */ +} list_viewer_t; +static void _update_list(void *data, Evas_Object *obj, void *event_info); + +static void _on_item_select_cb(void *data, Evas_Object *obj, void *event_info) +{ + Elm_Object_Item *it = (Elm_Object_Item *)event_info; + gl_data_t *gld = (gl_data_t *)elm_object_item_data_get(it); + list_viewer_t *lv = (list_viewer_t *)gld->user_data; + + elm_genlist_item_selected_set(it, 0); + RETIF(gld->index == -1); + /* return directly in sweep mode */ + RETIF(it == (Elm_Object_Item *)elm_genlist_decorated_item_get(obj)); + lv->cb(lv->data, "select", (void *)gld->index); +} + +static void _my_gl_mode_right(void *data, Evas_Object *obj, void *event_info) +{ + if (!event_info) return; + + Elm_Object_Item *it = (Elm_Object_Item *)event_info; + gl_data_t *gld = (gl_data_t *)elm_object_item_data_get(it); + list_viewer_t *lv = (list_viewer_t *)gld->user_data; + RETIF(lv->mode == 1); /* disable sweep feature when in search mode */ + /* Start genlist sweep */ + if (it) { + elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_DEFAULT); + } + elm_genlist_item_decorate_mode_set(it, "slide", EINA_TRUE); + elm_genlist_item_select_mode_set(it, ELM_OBJECT_SELECT_MODE_NONE); +} + +static void _my_gl_mode_left(void *data, Evas_Object *obj, void *event_info) +{ + if (!event_info) return; + + /* Finish genlist sweep */ + elm_genlist_item_decorate_mode_set(event_info, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(event_info, ELM_OBJECT_SELECT_MODE_DEFAULT); +} + +static void _my_gl_mode_cancel(void *data, Evas_Object *obj, void *event_info) +{ + if (!obj) return; + + /* Get sweeped item */ + Elm_Object_Item *it = (Elm_Object_Item *)elm_genlist_decorated_item_get(obj); + + /* Finish genlist sweep */ + if (it) { + elm_genlist_item_decorate_mode_set(it, "slide", EINA_FALSE); + elm_genlist_item_select_mode_set(it, EINA_FALSE); + } +} + +static void _on_delete_yes(void *data, Evas_Object *obj, void *event_info) +{ + gl_data_t *gld = (gl_data_t *)data; + gl_data_t *d = NULL; + list_viewer_t *lv = (list_viewer_t *)gld->user_data; + if(lv == NULL) { + return; + } + Elm_Object_Item *it = NULL; + it = elm_genlist_first_item_get(lv->genlist); + while (it != NULL) { + d = (gl_data_t *)elm_object_item_data_get(it); + if (d->index == gld->index) { + memo_del_data(gld->index); + lv->cb(lv->data, "delete", NULL); + elm_object_item_del(it); + lv->count--; + snprintf(lv->buf, MEMO_BUFFER_SIZE, "%s(%d)", MEMO_I18N_MEMO, lv->count); + lv->cb(lv->data, "title", lv->buf); + lv->cb(lv->data, "count", (void *)lv->count); + break; + } + it = elm_genlist_item_next_get(it); + } + _update_list(lv, NULL, NULL); +} + +static void _on_delete_button_clicked(void *data, Evas_Object *obj, void *event_info) +{ + gl_data_t *gld = (gl_data_t *)data; + list_viewer_t *lv = (list_viewer_t *)gld->user_data; + snprintf(lv->buf, MEMO_BUFFER_SIZE, "%s?", MEMO_I18N_DELETE); + memo_create_yes_no_popup(lv->win_main,lv->buf, _on_delete_yes, NULL, gld); +} + +static void _on_send_button_clicked(void *data, Evas_Object *obj, void *event_info) +{ + gl_data_t *gld = (gl_data_t *)data; + gl_data_t *d = NULL; + list_viewer_t *lv = (list_viewer_t *)gld->user_data; + Elm_Object_Item *it = NULL; + + it = elm_genlist_first_item_get(lv->genlist); + while (it != NULL) { + d = (gl_data_t *)elm_object_item_data_get(it); + if (d->index == gld->index) { + memo_share(lv->win_main, &gld->index, 1); + break; + } + it = elm_genlist_item_next_get(it); + } +} + +static void memo_data_iterate_cb (memo_data_t *md, void *user_data) +{ + list_viewer_t *lv = (list_viewer_t *)user_data; + gl_data_t *gld = SMALLOC(gl_data_t); + RETIF(gld == NULL); + memo_gld_init(gld, md, lv, NULL); + gld->on_send = _on_send_button_clicked; + gld->on_delete = _on_delete_button_clicked; + gld->search = (lv->mode==1 ? lv->search_str : NULL); + if (md->has_doodle) { + elm_genlist_item_append(lv->genlist, &lv->itc_draw,(void *)gld, + NULL, ELM_GENLIST_ITEM_NONE, _on_item_select_cb, NULL); + } else { + elm_genlist_item_append(lv->genlist, &lv->itc,(void *)gld, + NULL, ELM_GENLIST_ITEM_NONE, _on_item_select_cb, NULL); + } + lv->count++; +} + +static void _on_search_activated(void *data, Evas_Object *obj, void *event_info) +{ + list_viewer_t *lv = (list_viewer_t *)data; + ecore_imf_context_input_panel_hide(lv->imf_context); +} + +static void _update_list(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + list_viewer_t *lv = (list_viewer_t *)data; + + /* clear search result */ + elm_genlist_clear(lv->genlist); + /* get search string */ + SFREE(lv->search_str); + lv->search_str = elm_entry_markup_to_utf8(elm_object_text_get(lv->searchbar)); + if (strcmp(lv->search_str, "") == 0) { + SFREE(lv->search_str); + lv->search_str = NULL; + } + + lv->count = 0; + if (lv->mode == 0) { + memo_all_data(memo_data_iterate_cb, lv); + } else { + memo_search_data((lv->search_str == NULL ? "" : lv->search_str) , -1, 0, MEMO_SORT_CREATE_TIME, memo_data_iterate_cb, lv); + + } + snprintf(lv->buf, MEMO_BUFFER_SIZE, "%s(%d)", MEMO_I18N_MEMO, lv->count); + lv->cb(lv->data, "title", lv->buf); + lv->cb(lv->data, "count", (void *)lv->count); + LOGD("lv->count = %d",lv->count); + if (lv->count == 0) { + edje_object_signal_emit(elm_layout_edje_get(lv->eo_layout), "show", "nocontent"); + } else { + edje_object_signal_emit(elm_layout_edje_get(lv->eo_layout), "hide", "nocontent"); + } + MEMO_FUN_END(); +} + +static void _focused_cb(void *data, Evas_Object *obj, void *event_info) +{ + list_viewer_t *lv = (list_viewer_t *)data; + lv->mode = 1; /* shift to search mode */ + + if (!elm_entry_is_empty(obj)) + elm_object_signal_emit(lv->searchbar_layout, "elm,state,eraser,show", "elm"); + elm_object_signal_emit(lv->searchbar_layout, "elm,state,guidetext,hide", "elm"); + elm_object_signal_emit(lv->searchbar_layout, "cancel,in", ""); +} + +static void _on_searchbar_clicked(void *data, Evas_Object *obj, void *event_info) +{ + list_viewer_t *lv = (list_viewer_t *)data; + if (!elm_entry_is_empty(obj)) { + elm_object_signal_emit(lv->searchbar_layout, "elm,state,eraser,show", "elm"); + } + elm_object_signal_emit(lv->searchbar_layout, "elm,state,guidetext,hide","elm"); + _update_list(lv, NULL, NULL); +} + +static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info) +{ + list_viewer_t *lv = (list_viewer_t *)data; + lv->mode = 0; /* shift to search mode */ + + if (elm_entry_is_empty(obj)) + elm_object_signal_emit(lv->searchbar_layout, "elm,state,guidetext,show", "elm"); + elm_object_signal_emit(lv->searchbar_layout, "elm,state,eraser,hide", "elm"); +} + +// When X marked button is clicked, empty entry’s contents +static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + elm_entry_entry_set(data, ""); +} + +static void _bg_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + elm_object_focus_set(data, EINA_TRUE); +} + +static void _searchsymbol_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) +{ + //LOGD("[Search Bar] SearchSymbol Callback Called"); + elm_object_focus_set(data, EINA_TRUE); +} + +static void _cancel_clicked_cb(void *data, Evas_Object *obj, void *event_info) +{ + list_viewer_t *lv = (list_viewer_t *)data; + + const char* text; + evas_object_hide(obj); + + elm_object_signal_emit(lv->searchbar_layout, "cancel,out", ""); + text = elm_entry_entry_get(lv->searchbar); + if (text != NULL && strlen(text) > 0) { + elm_entry_entry_set(lv->searchbar, NULL); + } + elm_object_focus_set(lv->searchbar, EINA_FALSE); +} + +static void _create_list_viewer_layout(list_viewer_t *lv, service_h service) +{ + MEMO_FUN_BEG(); + lv->body_main = elm_layout_add(lv->parent); + elm_layout_theme_set(lv->body_main, "layout", "application", "searchbar_base"); + elm_object_signal_emit(lv->body_main, "elm,state,show,searchbar", "elm"); + lv->cb(lv->data, "layout", lv->body_main); + + lv->eo_layout = elm_layout_create(lv->body_main, EDJ_FILE, "list_frame"); + elm_object_part_content_set(lv->body_main, "elm.swallow.content", lv->eo_layout); + + /* search bar */ + Evas_Object *searchbar_layout = elm_layout_add(lv->body_main); + elm_layout_theme_set(searchbar_layout, "layout", "searchbar", "cancel_button"); + elm_object_part_content_set(lv->body_main, "searchbar", searchbar_layout); + + Evas_Object *entry = elm_entry_add(searchbar_layout); /*Create entry*/ + elm_entry_scrollable_set(entry, EINA_TRUE); + elm_entry_single_line_set(entry, EINA_TRUE); + elm_object_part_content_set(searchbar_layout, "elm.swallow.content", entry); + elm_object_part_text_set(searchbar_layout, "elm.guidetext", "Search"); /*Should be Language Specific*/ + + Evas_Object *cancel_btn = elm_button_add(searchbar_layout); + elm_object_part_content_set(searchbar_layout, "button_cancel", cancel_btn); + elm_object_style_set(cancel_btn, "searchbar/default"); + elm_object_text_set(cancel_btn, "Cancel"); + + lv->searchbar = entry; + lv->searchbar_layout = searchbar_layout; + elm_entry_cnp_mode_set(entry, ELM_CNP_MODE_PLAINTEXT); + lv->imf_context = elm_entry_imf_context_get(entry); + lv->limit_filter_data.max_char_count = 0; + lv->limit_filter_data.max_byte_count = 64; + + /* limit size */ + elm_entry_markup_filter_append(entry, elm_entry_filter_limit_size, &lv->limit_filter_data); + evas_object_smart_callback_add(entry, "changed", _on_searchbar_clicked, lv); + evas_object_smart_callback_add(entry, "preedit,changed", _on_searchbar_clicked, lv); + evas_object_smart_callback_add(entry, "focused", _focused_cb, lv); + evas_object_smart_callback_add(entry, "unfocused", _unfocused_cb, lv); + elm_object_signal_callback_add(searchbar_layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, entry); + elm_object_signal_callback_add(searchbar_layout, "elm,bg,clicked", "elm", _bg_clicked_cb, entry); + elm_object_signal_callback_add(searchbar_layout, "elm,action,click", "", _searchsymbol_clicked_cb, entry); + evas_object_smart_callback_add(cancel_btn, "clicked", _cancel_clicked_cb, lv); + evas_object_smart_callback_add(entry, "activated", _on_search_activated, lv); + + /* no content */ + lv->nocontent = elm_layout_add(lv->eo_layout); + elm_layout_theme_set(lv->nocontent, "layout", "nocontents", "text"); + elm_object_part_text_set(lv->nocontent, "elm.text", MEMO_I18N_NO_MEMOS); + elm_object_style_set(lv->nocontent, "text"); + elm_object_part_content_set(lv->eo_layout, "elm.swallow.nocontent", lv->nocontent); + + /* genlist */ + lv->genlist = elm_genlist_add(lv->eo_layout); + evas_object_smart_callback_add(lv->genlist, "drag,start,right", _my_gl_mode_right, NULL); + evas_object_smart_callback_add(lv->genlist, "drag,start,left", _my_gl_mode_left, NULL); + evas_object_smart_callback_add(lv->genlist, "drag,start,up", _my_gl_mode_cancel, NULL); + evas_object_smart_callback_add(lv->genlist, "drag,start,down", _my_gl_mode_cancel, NULL); + elm_object_part_content_set(lv->eo_layout, "elm.swallow.content", lv->genlist); + elm_genlist_block_count_set(lv->genlist, 10); + + _update_list(lv, NULL, NULL); + MEMO_FUN_END(); +} + +void *memo_load_list_viewer(Evas_Object *parent, Evas_Object *win, service_h service, Memo_Component_Callback cb, void *data) +{ + MEMO_FUN_BEG(); + list_viewer_t *lv = SMALLOC(list_viewer_t); + RETVIF(lv==NULL, NULL); + service_dump(service); + lv->parent = parent; + lv->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + lv->data = data; + + /* init */ + memo_gl_itc_init(&lv->itc, "memo/list"); + lv->itc.decorate_item_style = "mode/slide2"; + memo_gl_itc_init(&lv->itc_draw, "memo/list_draw"); + lv->itc_draw.decorate_item_style = "mode/slide2"; + lv->win_main = win; + + _create_list_viewer_layout(lv, service); + MEMO_FUN_END(); + return (void *)lv; +} + +void memo_clear_list_viewer(void *h_lv) +{ + list_viewer_t *lv = (list_viewer_t *)h_lv; + elm_genlist_clear(lv->genlist); +} + +void memo_update_list_viewer(void *h_lv) +{ + list_viewer_t *lv = (list_viewer_t *)h_lv; + _update_list(lv, NULL, NULL); +} + +void memo_destroy_list_viewer(void *h_lv) +{ + list_viewer_t *lv = (list_viewer_t *)h_lv; + evas_object_del(lv->body_main); + SFREE(lv->search_str); + SFREE(lv); +} + diff --git a/src/memo_text_editor.c b/src/memo_text_editor.c new file mode 100644 index 0000000..7f1ff6e --- /dev/null +++ b/src/memo_text_editor.c @@ -0,0 +1,492 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "memo_log.h" + +typedef struct __text_editor_t { + Evas_Object *win; + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + memo_data_t *record; + char buf[MEMO_BUFFER_SIZE]; /* for temporarily usage only */ + Eina_Bool savable; + + /* content */ + Evas_Object *body_main; + Evas_Object *toolbar; + Evas_Object *btn_size; + void *h_fss; + Evas_Object *btn_color; + void *h_fcs; + + /* entry */ + Evas_Object *entry; + Ecore_IMF_Context *imf_context; + Elm_Entry_Filter_Limit_Size limit_filter_data; + + /* original font information */ + int init_fsize; + int init_fcolor; +} text_editor_t; + +static void _font_size_selector_del(text_editor_t *te); +static void _font_color_selector_del(text_editor_t *te); + +static void _save_record(text_editor_t *te) +{ + MEMO_FUN_BEG(); + if (te->record->content != NULL) { + SFREE(te->record->content); + } + + /* content will be freed automatically in memo_free_data when editor destoried */ + te->record->content = elm_entry_markup_to_utf8(elm_entry_entry_get(te->entry)); + /* records synced from KIES has no font info, apply font enforce policy here to overwrite default font info */ + te->record->font_respect = 1; + if (te->record->id != -1) { + memo_mod_data(te->record); + } else { + memo_add_data(te->record); + } + MEMO_FUN_END(); +} + +static void _on_save_yes(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + _save_record(te); + te->cb(te->data, "save", NULL); + MEMO_FUN_END(); +} + +static void _on_save_no(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + te->cb(te->data, "cancel", NULL); + MEMO_FUN_END(); +} + +static Eina_Bool _launch_yes_no_popup(void *data) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + memo_create_yes_no_popup(te->win, MEMO_I18N_SAVE_MEMO, _on_save_yes, _on_save_no, te); + MEMO_FUN_END(); + return EINA_FALSE; +} + +static void _entry_content_update(text_editor_t *te) +{ + MEMO_FUN_BEG(); + unsigned char *color = (unsigned char *)&te->record->font_color; + char *content = elm_entry_markup_to_utf8(elm_entry_entry_get(te->entry)); + char *markup = elm_entry_utf8_to_markup(content); + snprintf(te->buf, MEMO_BUFFER_SIZE, + "", te->record->font_size, color[2], color[1], + color[0]); + //elm_entry_entry_set(te->entry, te->buf); + elm_entry_entry_insert(te->entry, markup); + SFREE(content); + SFREE(markup); + MEMO_FUN_END(); +} + +static void _font_size_selector_callback(void *data, const char *msg, void *event) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + if (strcmp(msg, "layout") == 0) { + elm_object_part_content_set(te->body_main, "elm.swallow.tool", (Evas_Object *)event); + } else if (strcmp(msg, "change") == 0) { + te->record->font_size = (int)event; + _entry_content_update(te); + } else if (strcmp(msg, "flick,down") == 0) { + _font_size_selector_del(te); + edje_object_signal_emit(elm_layout_edje_get(te->body_main), "expand", "elm"); + } + MEMO_FUN_END(); +} + +static void _font_size_selector_del(text_editor_t *te) +{ + MEMO_FUN_BEG(); + if (te->h_fss != NULL) { + elm_object_part_content_unset(te->body_main, "elm.swallow.tool"); + memo_del_font_size_selector(te->h_fss); + te->h_fss = NULL; + memo_tool_btn_focus_set(te->btn_size, EINA_FALSE); + } + MEMO_FUN_END(); +} + +static void _on_font_size_btn_up(void *data, Evas *e, Evas_Object *evas_obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + if (te->h_fss != NULL) { /* font size selector already open */ + MEMO_FUN_END(); + return; + } + if (te->h_fcs != NULL) { /* destroy font color selector */ + _font_color_selector_del(te); + } + /* load font size selector */ + service_h service = NULL; + service_create(&service); + snprintf(te->buf, MEMO_BUFFER_SIZE, "%d", te->record->font_size); + service_add_extra_data(service, "current", te->buf); + snprintf(te->buf, MEMO_BUFFER_SIZE, "%d", 0xFFFFFFFF); + service_add_extra_data(service, "bg_color", te->buf); + te->h_fss = memo_load_font_size_selector(te->body_main, service, _font_size_selector_callback, te); + service_destroy(service); + memo_tool_btn_focus_set(te->btn_size, EINA_TRUE); + edje_object_signal_emit(elm_layout_edje_get(te->body_main), "abbrev", "elm"); + /* hide input panel */ + ecore_imf_context_input_panel_hide(te->imf_context); + MEMO_FUN_END(); +} + +void _font_color_selector_callback(void *data, const char *msg, void *event) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + if (strcmp(msg, "layout") == 0) { + elm_object_part_content_set(te->body_main, "elm.swallow.tool", (Evas_Object *)event); + } else if (strcmp(msg, "change") == 0) { + LOGD("%s : %x\n", msg, (int)event); + te->record->font_color = (int)event; + _entry_content_update(te); + } else if (strcmp(msg, "flick,down") == 0) { + _font_color_selector_del(te); + edje_object_signal_emit(elm_layout_edje_get(te->body_main), "expand", "elm"); + } + MEMO_FUN_END(); +} + +static void _font_color_selector_del(text_editor_t *te) +{ + MEMO_FUN_BEG(); + if (te->h_fcs != NULL) { + elm_object_part_content_unset(te->body_main, "elm.swallow.tool"); + memo_del_color_selector(te->h_fcs); + memo_tool_btn_focus_set(te->btn_color, EINA_FALSE); + te->h_fcs = NULL; + } + MEMO_FUN_END(); +} + +static void _on_font_color_btn_up(void *data, Evas *e, Evas_Object *evas_obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + if (te->h_fcs!= NULL) { /* font color selector already open */ + MEMO_FUN_END(); + return; + } + if (te->h_fss!= NULL) { /* destroy font size selector */ + _font_size_selector_del(te); + } + /* load font color selector */ + service_h service = NULL; + service_create(&service); + snprintf(te->buf, MEMO_BUFFER_SIZE, "%d", te->record->font_color); + service_add_extra_data(service, "color", te->buf); + snprintf(te->buf, MEMO_BUFFER_SIZE, "%d", 0xFFFFFFFF); + service_add_extra_data(service, "bg_color", te->buf); + te->h_fcs = memo_load_color_selector(te->body_main, service, _font_color_selector_callback, te); + service_destroy(service); + memo_tool_btn_focus_set(te->btn_color, EINA_TRUE); + edje_object_signal_emit(elm_layout_edje_get(te->body_main), "abbrev", "elm"); + /* hide input panel */ + ecore_imf_context_input_panel_hide(te->imf_context); + MEMO_FUN_END(); +} + +static void _input_panel_event_callback(void *data, Ecore_IMF_Context *ctx, int value) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + if (value == ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + if ((te->h_fss==NULL) && (te->h_fcs==NULL)) { /* hide by sweep donw */ + edje_object_signal_emit(elm_layout_edje_get(te->body_main), "expand", "elm"); + } + } + MEMO_FUN_END(); +} + +static void _on_entry_clicked(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + if (te->h_fss!= NULL) { /* destroy font size selector */ + _font_size_selector_del(te); + } + if (te->h_fcs != NULL) { /* destroy font color selector */ + _font_color_selector_del(te); + } +#ifdef __i386__ + Ecore_IMF_Context *imf_context = elm_entry_imf_context_get(te->entry); + if (ecore_imf_context_input_panel_state_get(imf_context) == + ECORE_IMF_INPUT_PANEL_STATE_HIDE) { + //USB keyboard is active + edje_object_signal_emit(elm_layout_edje_get(te->body_main), "expand", "elm"); + } +#endif + MEMO_FUN_END(); +} + +static void _on_entry_content_change(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + unsigned char *color = (unsigned char *)&te->record->font_color; + + const char *text = elm_entry_entry_get(te->entry); + char *content = elm_entry_markup_to_utf8(text); + te->savable = EINA_TRUE; + if (strcmp(content, "") == 0) { + te->savable = EINA_FALSE; + } else if (te->record->content != NULL) { /* check if same as init string */ + if ((te->init_fsize==te->record->font_size) + && (te->init_fcolor==te->record->font_color) + && (strcmp(te->record->content, content)==0)) { + te->savable = EINA_FALSE; + } + } + te->cb(te->data, "savable", (void *)(te->savable?1:0)); +#if 0 + /* after paste/cut, the font size/color information may be cleared */ + snprintf(te->buf, MEMO_BUFFER_SIZE, "", + te->record->font_size, color[2], color[1], color[0]); + if (text[0] == '\0') { /* no content */ + elm_entry_entry_insert(te->entry, te->buf); + } else if (text[0] != '<') { /* insert font information */ + elm_entry_cursor_begin_set(te->entry); + elm_entry_entry_insert(te->entry, te->buf); + elm_entry_cursor_end_set(te->entry); + } + + if (!strstr(text, "")) + { + elm_entry_cursor_end_set(te->entry); + elm_entry_entry_insert(te->entry, ""); + } +#endif + SFREE(content); + MEMO_FUN_END(); +} + +static void _on_yes(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + _save_record(te); + te->cb(te->data, "drawing", NULL); + MEMO_FUN_END(); +} + +static void _on_no(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + te->cb(te->data, "drawing", NULL); + MEMO_FUN_END(); +} + +static void _on_drawing_mode(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)data; + if (te->savable) { /* modified, need user confirmation */ + memo_create_yes_no_popup(te->win, MEMO_I18N_SAVE_MEMO, _on_yes, _on_no, te); + } else { + te->cb(te->data, "drawing", NULL); + } + MEMO_FUN_END(); +} + +static void _create_text_editor_layout(text_editor_t *te, service_h service) +{ + MEMO_FUN_BEG(); + int w = 0; + int h = 0; + ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h); + snprintf(te->buf, MEMO_BUFFER_SIZE, "text_editor_%d_%d", w, h); + te->body_main = elm_layout_create(te->parent, EDJ_FILE, te->buf); + te->cb(te->data, "layout", te->body_main); + /* title */ + te->cb(te->data, "title", te->record->id==-1 ? MEMO_I18N_CREATE_MEMO : MEMO_I18N_EDIT_MEMO); + /* date */ + memo_time_format(te->buf, MEMO_BUFFER_SIZE, te->record->modi_time); + edje_object_part_text_set(elm_layout_edje_get(te->body_main), "elm.text.date", te->buf); + /* toolbar */ + te->toolbar = elm_swallowed_layout(te->body_main, "elm.swallow.toolbar", EDJ_FILE, "edit_toolbar"); + /* + te->btn_size = elm_swallowed_layout(te->toolbar, "elm.swallow.btn1", EDJ_DIR"/white/memo.edj", "tl_font_size"); + evas_object_event_callback_add(te->btn_size, EVAS_CALLBACK_MOUSE_UP, _on_font_size_btn_up, te); + te->btn_color = elm_swallowed_layout(te->toolbar, "elm.swallow.btn2", EDJ_DIR"/white/memo.edj", "tl_font_color"); + evas_object_event_callback_add(te->btn_color, EVAS_CALLBACK_MOUSE_UP, _on_font_color_btn_up, te); + */ + if (!service_key_check(service, "toggle", "disable")) { + elm_swallowed_button(te->toolbar, "elm.swallow.btn4", MEMO_I18N_DRAWING, _on_drawing_mode, te); + } + /* entry */ + Evas_Object *sc = elm_swallowed_scroller(te->body_main, "elm.swallow.text"); + + /*color and font setting is useless now */ + unsigned char *color = (unsigned char *)&te->record->font_color; + snprintf(te->buf, MEMO_BUFFER_SIZE, "", + te->record->font_size, color[2], color[1], color[0]); + + te->entry = elm_entry_create(te->body_main, NULL); + elm_entry_input_panel_enabled_set(te->entry, EINA_TRUE); + evas_object_size_hint_align_set(te->entry, EVAS_HINT_FILL, EVAS_HINT_FILL); + evas_object_size_hint_weight_set(te->entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_entry_autocapital_type_set(te->entry, ELM_AUTOCAPITAL_TYPE_SENTENCE); + elm_entry_text_style_user_push(te->entry, "DEFAULT='right_margin=16'"); + elm_object_content_set(sc, te->entry); + evas_object_smart_callback_add(te->entry, "changed", _on_entry_content_change, te); + evas_object_smart_callback_add(te->entry, "preedit,changed", _on_entry_content_change, te); + evas_object_smart_callback_add(te->entry, "clicked", _on_entry_clicked, te); + /* limit size */ + elm_entry_markup_filter_append(te->entry, elm_entry_filter_limit_size, &te->limit_filter_data); + /* entry content */ + if (te->record->content != NULL) { + char *content = elm_entry_utf8_to_markup(te->record->content); + elm_entry_entry_insert(te->entry, content); + SFREE(content); + } else { /* set init string */ + char *str = NULL; + service_get_extra_data(service, "init_str", &str); + if (str != NULL) { + elm_entry_entry_insert(te->entry, str); + SFREE(str); + } + } + elm_object_focus_set(te->entry, EINA_TRUE); + /* imf context */ + te->imf_context = elm_entry_imf_context_get(te->entry); + ecore_imf_context_input_panel_event_callback_add(te->imf_context, + ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_event_callback, te); + /* savable */ + te->cb(te->data, "savable", (void *)(te->savable?1:0)); + MEMO_FUN_END(); +} + +void memo_text_editor_time_format_update(void *h_te) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)h_te; + memo_time_format(te->buf, MEMO_BUFFER_SIZE, te->record->modi_time); + edje_object_part_text_set(elm_layout_edje_get(te->body_main), "elm.text.date", te->buf); + MEMO_FUN_END(); +} + +void memo_text_editor_cancel(void *h_te) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)h_te; + if (!te->savable) { /* not modified, return directly */ + te->cb(te->data, "cancel", NULL); + } else { + /* hide imf, otherwise popup will be covered by imf */ + if (te->imf_context != NULL) { + ecore_imf_context_input_panel_hide(te->imf_context); + } + _launch_yes_no_popup(te); + } + MEMO_FUN_END(); +} + +void memo_text_editor_save(void *h_te) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)h_te; + _save_record(te); + te->cb(te->data, "save", NULL); + MEMO_FUN_END(); +} + +void *memo_load_text_editor(Evas_Object *win, Evas_Object *parent, service_h service, Memo_Component_Callback cb, void *data) +{ + MEMO_FUN_BEG(); + text_editor_t *te = SMALLOC(text_editor_t); + RETVIF(te==NULL, NULL); + service_dump(service); + te->win = win; + te->parent = parent; + te->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + te->data = data; + + /* init */ + char *s = NULL; + service_get_extra_data(service, "index", &s); + if (s == NULL) { + te->record = memo_create_data(); + te->record->id = -1; + te->record->modi_time = time((time_t *) 0); + te->record->font_size = 44; + te->record->font_color = 0xff000000; + } else { /* load item */ + te->record = memo_get_data(atoi(s)); + SFREE(s); + } + te->init_fsize = te->record->font_size; + te->init_fcolor = te->record->font_color; + /* limitation */ + te->limit_filter_data.max_char_count = 0; + te->limit_filter_data.max_byte_count = 1000; + + _create_text_editor_layout(te, service); + MEMO_FUN_END(); + return (void *)te; +} + +void memo_destroy_text_editor(void *h_te) +{ + MEMO_FUN_BEG(); + text_editor_t *te = (text_editor_t *)h_te; + ecore_imf_context_input_panel_event_callback_del(te->imf_context, + ECORE_IMF_INPUT_PANEL_STATE_EVENT, _input_panel_event_callback); + ecore_imf_context_input_panel_hide(te->imf_context); + if (te->h_fss!= NULL) { /* destroy font size selector */ + _font_size_selector_del(te); + } + if (te->h_fcs != NULL) { /* destroy font color selector */ + _font_color_selector_del(te); + } + memo_free_data(te->record); + evas_object_del(te->body_main); + SFREE(te); + MEMO_FUN_END(); +} diff --git a/src/memo_text_viewer.c b/src/memo_text_viewer.c new file mode 100644 index 0000000..cc467bc --- /dev/null +++ b/src/memo_text_viewer.c @@ -0,0 +1,141 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include +#include "memo_log.h" + +typedef struct __text_viewer_t { + Evas_Object *parent; + Memo_Component_Callback cb; + void *data; + char buf[MEMO_BUFFER_SIZE]; /* for temporarily usage only */ + + /* content */ + Evas_Object *win_main; + memo_data_t *record; + Evas_Object *body_main; + Evas_Object *entry; + char *content; +} text_viewer_t; + +static void _on_flick(void *data, Evas_Object *evas_obj, void *event_info) +{ + MEMO_FUN_BEG(); + text_viewer_t *tv = (text_viewer_t *)data; + if ((mouse_behaviour_t)event_info == MOUSE_EVENT_DRAG_LEFT) { + tv->cb(tv->data, "sweep,left", NULL); + } else if ((mouse_behaviour_t)event_info == MOUSE_EVENT_DRAG_RIGHT) { + tv->cb(tv->data, "sweep,right", NULL); + } + MEMO_FUN_END(); +} + +static void _on_entry_resize(void *data, Evas_Object *obj, void *event_info) +{ + MEMO_FUN_BEG(); + LOGD("---------------_on_entry_resize"); + text_viewer_t *tv = (text_viewer_t *)data; + elm_entry_entry_set(tv->entry, tv->content); + MEMO_FUN_END(); +} + +static void _create_text_viewer_layout(text_viewer_t *tv, service_h service) +{ + MEMO_FUN_BEG(); + tv->body_main = elm_layout_create(tv->parent, EDJ_FILE, "text_viewer"); + tv->cb(tv->data, "layout", tv->body_main); + + /* date */ + memo_time_format(tv->buf, MEMO_BUFFER_SIZE, tv->record->modi_time); + edje_object_part_text_set(elm_layout_edje_get(tv->body_main), "elm.text.date", tv->buf); + + char *markup = elm_entry_utf8_to_markup(tv->record->content); + + GString *text = autolink_add_anchor(markup); + SFREE(markup); + unsigned char *color = (unsigned char *)&tv->record->font_color; + snprintf(tv->buf, MEMO_BUFFER_SIZE, + "", tv->record->font_size, color[2], + color[1], color[0]); + g_string_prepend(text, tv->buf); + + Evas_Object *sc = elm_swallowed_scroller(tv->body_main, "elm.swallow.text"); + tv->entry = elm_entry_create(tv->body_main, text->str); + tv->content = strdup(text->str); + + evas_object_smart_callback_add(tv->entry, "anchor,clicked", + autolink_anchor_clicked_cb, tv->win_main); + + evas_object_size_hint_weight_set(tv->entry, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(tv->entry, EVAS_HINT_FILL, EVAS_HINT_EXPAND); + elm_entry_editable_set(tv->entry, EINA_FALSE); + elm_entry_autocapital_type_set(tv->entry, ELM_AUTOCAPITAL_TYPE_SENTENCE); + elm_object_content_set(sc, tv->entry); + evas_object_render_flush_hook(tv->entry, _on_entry_resize, tv); + /* flick event */ + evas_object_flick_callback_add(tv->entry, _on_flick, tv); + g_string_free(text, TRUE); + MEMO_FUN_END(); +} + +void memo_text_viewer_share_record(void *h_tv) +{ + MEMO_FUN_BEG(); + text_viewer_t *tv = (text_viewer_t *)h_tv; + memo_share(tv->win_main, (int *)&tv->record->id, 1); + MEMO_FUN_END(); +} + +void *memo_load_text_viewer(Evas_Object *parent, Evas_Object *win, int id, service_h service, Memo_Component_Callback cb, void *data) +{ + MEMO_FUN_BEG(); + text_viewer_t *tv = SMALLOC(text_viewer_t); + RETVIF(tv==NULL, NULL); + service_dump(service); + tv->parent = parent; + tv->cb = (cb==NULL ? memo_com_dummy_cb : cb); /* make sure cb is not null, no need to check legitimacy of cb when call */ + tv->data = data; + + /* init */ + tv->win_main = win; + tv->record = memo_get_data(id); + _create_text_viewer_layout(tv, service); + MEMO_FUN_END(); + return (void *)tv; +} + +void memo_destroy_text_viewer(void *h_tv) +{ + MEMO_FUN_BEG(); + text_viewer_t *tv = (text_viewer_t *)h_tv; + evas_object_del(tv->body_main); + memo_free_data(tv->record); + SFREE(tv->content); + SFREE(tv); + MEMO_FUN_END(); +} + diff --git a/src/memo_ug.c b/src/memo_ug.c new file mode 100644 index 0000000..abd1939 --- /dev/null +++ b/src/memo_ug.c @@ -0,0 +1,376 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ +#include +#include +#include +#include "memo.h" +#include +#include "memo_ug.h" +#include "memo_string.h" +#include + +static void _on_response_cb(void *data, Evas_Object *obj, void *event_info); + +static GString *get_shared_text(Eina_List *list) +{ + Eina_List *l = NULL; + struct memo_data *md = NULL; + GString *buf = g_string_new(""); + + EINA_LIST_FOREACH(list, l, md) { + if ((md != NULL) && !(md->has_doodle)) { + g_string_append_printf(buf, "%s\n", md->content); + } + } + + return buf; +} + +static GString *get_shared_attachment(Eina_List *list) +{ + Eina_List *l = NULL; + struct memo_data *md = NULL; + GString *buf = g_string_new(""); + + EINA_LIST_FOREACH(list, l, md) { + if ((md != NULL) && (md->has_doodle)) { + g_string_append_printf(buf, DOODLEDIR "/%d.png\n", (int)md->id); + } + } + + return buf; +} + +static void _ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv) +{ + Evas_Object *base, *win; + base = (Evas_Object *)ug_get_layout(ug); + if (base == NULL) { + return; + } + + win = ug_get_window(); + switch (mode) { + case UG_MODE_FULLVIEW: + evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + elm_win_resize_object_add(win, base); + /* disable effect */ + //ug_disable_effect(ug); + evas_object_show(base); + break; + default: + break; + } +} + +static void _ug_result_cb(ui_gadget_h ug, service_h service, void *priv) +{ + service_dump(service); +} + +static void _ug_destroy_cb(ui_gadget_h ug, void *priv) +{ + if (ug != NULL) { + ug_destroy(ug); + } +} + +/** + * ug_launch_common + * + * @description + * This is a basic function which designed to invoke any ui gadget. + * + * @param[in] service a service type which will send to ug directly + * @param[in] ug_name UG name marco defined in memo_ug.h + * @return void + */ +void ug_launch_common(service_h service, char *ug_name) +{ + ug_cbs_t cbs={0, }; + + cbs.layout_cb = _ug_layout_cb; + cbs.destroy_cb = _ug_destroy_cb; + cbs.result_cb = _ug_result_cb; + cbs.priv = NULL; + + service_dump(service); + ug_create(NULL, ug_name, UG_MODE_FULLVIEW, service, &cbs); + service_destroy(service); +} + +/** + * ug_launch_common_var + * + * @description + * This function supply a variadic version of ug_launch_common_var. + * The first and only required variable is the ug_name. + * Its type is string, but the caller should use the macro name which defined in memo_ug.h + * The other variables are optional, it should appear for key-value pair + * The end of optional variables must be NULL. + * + * @param[in] ug_name UG name marco defined in memo_ug.h + * @param[in] ... pair of key and value, end with NULL + * @return void + */ +void ug_launch_common_var(char *ug_name, ...) +{ + char *key = NULL; + char *val = NULL; + service_h service = NULL; + service_create(&service); + + va_list ap; + va_start(ap, ug_name); + while (1) { + key = va_arg(ap, char *); + val = va_arg(ap, char *); + + if (key == NULL || val == NULL) { + break; + } + service_add_extra_data(service, key, val); + } + va_end(ap); + + ug_launch_common(service, ug_name); +} + +void ug_launch_message(Eina_List *list) +{ + GString *text = get_shared_text(list); + GString *attachment = get_shared_attachment(list); + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, "BODY", text->str); + service_add_extra_data(service, "ATTACHFILE", attachment->len == 0 ? NULL : attachment->str); + + ug_launch_common(service, UG_NAME_MESSAGE); + + g_string_free(text, TRUE); + g_string_free(attachment, TRUE); +} + +void ug_launch_email(Eina_List *list) +{ + GString *text = get_shared_text(list); + GString *attachment = get_shared_attachment(list); + + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, "RUN_TYPE", "5"); + service_add_extra_data(service, "TO", ""); + service_add_extra_data(service, "CC", ""); + service_add_extra_data(service, "BCC", NULL); + service_add_extra_data(service, "SUBJECT", ""); + service_add_extra_data(service, "BODY", text->str); + service_add_extra_data(service, "ATTACHMENT", attachment->len == 0 ? NULL : attachment->str); + + ug_launch_common(service, UG_NAME_EMAIL); + + g_string_free(text, TRUE); + g_string_free(attachment, TRUE); +} + +void ug_launch_calender(Eina_List *list) +{ + GString *text = get_shared_text(list); + + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, "index", "0"); + service_add_extra_data(service, "note", text->str); + + ug_launch_common(service, UG_NAME_CALENDAR); + + g_string_free(text, TRUE); +} + +void ug_launch_facebook(Eina_List *list) +{ + GString *text = get_shared_text(list); + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, "feature", "status_post"); + service_add_extra_data(service, "text", text->str); + ug_launch_common(service, "facebook-efl"); + g_string_free(text, TRUE); +} + +void ug_launch_nfc(Eina_List *list) +{ + GString *text = get_shared_text(list); + service_h service = NULL; + service_create(&service); + service_add_extra_data(service, "count", "1"); /* only one buffer suppored */ + service_add_extra_data(service, "request_type", "data_buffer"); + service_add_extra_data(service, "request_data", text->str); + ug_launch_common(service, UG_NAME_NFC); + g_string_free(text, TRUE); +} + +void memo_ug_init(Evas_Object *win) +{ + enum ug_option opt = UG_OPT_INDICATOR_ENABLE; + UG_INIT_EFL(win, opt); +} + +/* BEGIN SHARE POPUP */ + +typedef struct _share_popup_data { + Evas_Object *popup; + Eina_List *list; /* records of memo */ +}share_popup_data; + +static void _share_messge_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + share_popup_data *spd = (share_popup_data *)data; + ug_launch_message(spd->list); + _on_response_cb(spd, spd->popup, NULL); +} + +static void _share_email_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + share_popup_data *spd = (share_popup_data *)data; + ug_launch_email(spd->list); + _on_response_cb(spd, spd->popup, NULL); +} + +static void _share_calender_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + share_popup_data *spd = (share_popup_data *)data; + ug_launch_calender(spd->list); + _on_response_cb(spd, spd->popup, NULL); +} + +static void _share_facebook_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + share_popup_data *spd = (share_popup_data *)data; + ug_launch_facebook(spd->list); + _on_response_cb(spd, spd->popup, NULL); +} + +static void _share_nfc_selected_cb(void *data, Evas_Object *obj, void *event_info) +{ + share_popup_data *spd = (share_popup_data *)data; + ug_launch_nfc(spd->list); + _on_response_cb(spd, spd->popup, NULL); +} + +static void _on_response_cb(void *data, Evas_Object *obj, void *event_info) +{ + share_popup_data *spd = (share_popup_data *)data; + if (spd->popup != NULL) { + evas_object_del(spd->popup); + spd->popup = NULL; + } + if (spd->list != NULL) { + memo_data_t *md = NULL; + EINA_LIST_FREE(spd->list, md) { + memo_free_data(md); + } + } + SFREE(spd); +} + +static char *_gl_label_get(void *data, Evas_Object *obj, const char *part) +{ + char *label = (char *)data; + if (strcmp(part, "elm.text") == 0) { + return strdup(label); + } + return NULL; +} + +void memo_share(Evas_Object *parent, int *indexes, int n) +{ + share_popup_data *spd = SMALLOC(share_popup_data); + RETIF(spd == NULL); + + int i = 0; + int c = 0; + int nfc_enable = -1; + Evas_Object *box = NULL; + Eina_Bool has_doodle = EINA_FALSE; + memo_data_t *md = NULL; + for (i=0; ihas_doodle) { + has_doodle = EINA_TRUE; + } + spd->list = eina_list_append(spd->list, md); + } + + static Elm_Genlist_Item_Class itc; + memset(&itc, 0, sizeof(Elm_Genlist_Item_Class)); + itc.item_style = "1text"; + itc.func.text_get = _gl_label_get; + + Evas_Object *popup = elm_popup_add(parent); + spd->popup = popup; + elm_object_style_set(popup, "min_menustyle"); + elm_object_part_text_set(popup, "title,text", MEMO_I18N_SHARE); + Evas_Object *btn1 = elm_button_add(popup); + elm_object_text_set(btn1, MEMO_I18N_CLOSE); + elm_object_part_content_set(popup, "button1", btn1); + evas_object_smart_callback_add(btn1, "clicked", _on_response_cb, spd); + evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + + Evas_Object *genlist = elm_genlist_add(popup); + evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND); + evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL); + + /* message */ + elm_genlist_item_append(genlist, &itc, MEMO_I18N_MESSAGE, + NULL, ELM_GENLIST_ITEM_NONE, _share_messge_selected_cb, spd); + c++; + /* email */ + if (n == 1) { + elm_genlist_item_append(genlist, &itc, MEMO_I18N_EMAIL, + NULL, ELM_GENLIST_ITEM_NONE, _share_email_selected_cb, spd); + c++; + } + if (!has_doodle) { + /* calendar */ + elm_genlist_item_append(genlist, &itc, MEMO_I18N_CALENDAR, + NULL, ELM_GENLIST_ITEM_NONE, _share_calender_selected_cb, spd); + c++; +#if 0 + /* facebook */ + elm_genlist_item_append(genlist, &itc, MEMO_I18N_FACEBOOK, + NULL, ELM_GENLIST_ITEM_NONE, _share_facebook_selected_cb, spd); + c++; + /* NFC */ + if (!vconf_get_bool(VCONFKEY_NFC_FEATURE, &nfc_enable)) { + if(nfc_enable == VCONFKEY_NFC_FEATURE_ON) { + elm_genlist_item_append(genlist, &itc, MEMO_I18N_NFC, + NULL, ELM_GENLIST_ITEM_NONE, _share_nfc_selected_cb, spd); + c++; + } + } +#endif + } + evas_object_show(genlist); + box = elm_box_add(popup); + evas_object_size_hint_min_set(box, 0, (c>3 ? 3 : c)*113*elm_config_scale_get()); + elm_box_pack_end(box, genlist); + evas_object_show(box); + elm_object_content_set(popup, box); + evas_object_show(popup); +} + diff --git a/theme/CMakeLists.txt b/theme/CMakeLists.txt new file mode 100644 index 0000000..990eec3 --- /dev/null +++ b/theme/CMakeLists.txt @@ -0,0 +1,18 @@ +SET(THFILES white black) + +FOREACH(thfile ${THFILES}) + SET(src ${CMAKE_CURRENT_SOURCE_DIR}/${thfile}/memo.edc) + SET(obj ${CMAKE_CURRENT_BINARY_DIR}/${thfile}.edj) + MESSAGE("THEME: ${thfile}") + ADD_CUSTOM_COMMAND( + OUTPUT ${obj} + COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/${thfile}/images + ${src} ${obj} DEPENDS ${src} + ) + INSTALL(FILES ${obj} + DESTINATION ${EDJDIR}/${thfile} RENAME memo.edj) + SET(edjFiles ${edjFiles} ${obj}) +ENDFOREACH(thfile) + +MESSAGE(".edj files: ${edjFiles}") +ADD_CUSTOM_TARGET(th ALL DEPENDS ${edjFiles}) diff --git a/theme/black/images/00_picker_btn_normal.png b/theme/black/images/00_picker_btn_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..9dc73c475ed9c13045d7dd9af4ec27ae68e0b57c GIT binary patch literal 2981 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 bJiZ425!E*>M&6GE00000NkvXXu0mjfja7qw literal 0 HcmV?d00001 diff --git a/theme/black/images/00_picker_btn_press.png b/theme/black/images/00_picker_btn_press.png new file mode 100644 index 0000000000000000000000000000000000000000..f65239f57b7ba89815ab0d39ce8cef1acb3fa2e5 GIT binary patch literal 2986 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 literal 0 HcmV?d00001 diff --git a/theme/black/images/P02_icon_eraser_press.png b/theme/black/images/P02_icon_eraser_press.png new file mode 100644 index 0000000000000000000000000000000000000000..0cab0382d9671482ab566fc6e89f6222302a5941 GIT binary patch literal 3629 zcmV+|4$|?7P)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} z000A6NklIA5iKTRr(nX@HB2hPW z(?}_$lqe|4*w zdVs6I=9Gswa4ZvZZWDLZMPNt5=YIuuO0ocHA#k`+pv>$vus>mlR)F*+vwLp?(~SXT zW=DbJiNlknhr%}8`6?cdMJE8UhDF}%=&=`nFXiPAxUGI zGT=VYoB8}rZ9$pYD&SG5zEf&c(r9LU6<8C^sV68i>kE(;CWbTy9LmH!2@K_w3-wDq zGiy5mixWfo9?qrd5O*7JDrepqNs~namHyT=0i^d4i1iuUW>nIZDhlK70%^CBw0Cm9?4~H~#xKuTyBA}L6u(m1S zZ1lBW;K;vlIXVUPm|4FkmA(L5a%!V%?Y||cS{=7A;ohvD@-Gi2gH6(+M(Xl^m95r2 za8ND><)9ptgK|&~%0amtl!J0m4$49OulhLv*LW5Y+#_me00000NkvXXu0mjf`(wgh literal 0 HcmV?d00001 diff --git a/theme/black/images/P02_icon_font_color.png b/theme/black/images/P02_icon_font_color.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bd5b47ad5d2868451c61c3dcefff4213d3a7bf GIT binary patch literal 4021 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 bL-F?je-o}+Rp=Oy00000NkvXXu0mjf#|?-S literal 0 HcmV?d00001 diff --git a/theme/black/images/P02_icon_font_color_press.png b/theme/black/images/P02_icon_font_color_press.png new file mode 100644 index 0000000000000000000000000000000000000000..a2bd5b47ad5d2868451c61c3dcefff4213d3a7bf GIT binary patch literal 4021 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 bL-F?je-o}+Rp=Oy00000NkvXXu0mjf#|?-S literal 0 HcmV?d00001 diff --git a/theme/black/images/P02_icon_font_size.png b/theme/black/images/P02_icon_font_size.png new file mode 100644 index 0000000000000000000000000000000000000000..52931cb7db89fff40655d50186d94c03660cfa02 GIT binary patch literal 3229 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 P00000NkvXXu0mjf%4Yr1 literal 0 HcmV?d00001 diff --git a/theme/black/images/P02_icon_font_size_press.png b/theme/black/images/P02_icon_font_size_press.png new file mode 100644 index 0000000000000000000000000000000000000000..52931cb7db89fff40655d50186d94c03660cfa02 GIT binary patch literal 3229 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 P00000NkvXXu0mjf%4Yr1 literal 0 HcmV?d00001 diff --git a/theme/black/images/P02_icon_stroke.png b/theme/black/images/P02_icon_stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..656b7888533e30a5421b3dfc1be6be16a32ed0f9 GIT binary patch literal 2928 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 + +collections { + #include <../common.edc> +} diff --git a/theme/common.edc b/theme/common.edc new file mode 100644 index 0000000..c1f4513 --- /dev/null +++ b/theme/common.edc @@ -0,0 +1,71 @@ +/* +* +* Copyright 2012 Samsung Electronics Co., Ltd +* +* Licensed under the Flora License, Version 1.1 (the "License"); +* you may not use this file except in compliance with the License. +* You may obtain a copy of the License at +* +* http://floralicense.org/license/ +* +* Unless required by applicable law or agreed to in writing, software +* distributed under the License is distributed on an "AS IS" BASIS, +* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. +* See the License for the specific language governing permissions and +* limitations under the License. +* +*/ + +#define ICON_BUTTON(iName, img_default, img_focus)\ +group {\ + name: iName;\ + images{\ + image: img_default COMP;\ + image: img_focus COMP;\ + image: "00_picker_btn_press.png" COMP;\ + image: "00_picker_btn_normal.png" COMP;\ + }\ + parts {\ + PART_BG("bg")\ + PART_BORDER_IMAGE("image_bg", "bg", "00_picker_btn_normal.png", 4, 4, 0, 0)\ + PART_IMAGE("image_icon", "bg", img_default)\ + PART_EVENT_RECT("event", "bg")\ + }/* end parts */\ +\ + programs {\ + program {\ + name: "init";\ + signal: "load";\ + source: "";\ + script {\ + SCRIPT_CUSTOM_PART("image_bg");\ + SCRIPT_CUSTOM_PART("image_icon");\ + }\ + } /* end program */\ + program {\ + name: "focus";\ + signal: "focus";\ + source: "elm";\ + script {\ + SCRIPT_SET_IMAGE("image_bg", "00_picker_btn_press.png");\ + SCRIPT_SET_IMAGE("image_icon", img_focus);\ + }\ + } /* end program */\ + program {\ + name: "normal";\ + signal: "normal";\ + source: "elm";\ + script {\ + SCRIPT_SET_IMAGE("image_bg", "00_picker_btn_normal.png");\ + SCRIPT_SET_IMAGE("image_icon", img_default);\ + }\ + } /* end program */\ + }/* end programs */\ +} + +ICON_BUTTON("tl_font_size", "P02_icon_font_size.png", "P02_icon_font_size_press.png") +ICON_BUTTON("tl_font_color", "P02_icon_font_color.png", "P02_icon_font_color_press.png") +ICON_BUTTON("tl_stroke_size", "P02_icon_stroke.png", "P02_icon_stroke_press.png") +ICON_BUTTON("tl_stroke_color", "P02_icon_color.png", "P02_icon_color_focus.png") +ICON_BUTTON("tl_stroke_eraser", "P02_icon_eraser.png", "P02_icon_eraser_press.png") + diff --git a/theme/white/images/00_picker_btn_normal.png b/theme/white/images/00_picker_btn_normal.png new file mode 100644 index 0000000000000000000000000000000000000000..df4433ec92f202f54c32f7f7d68264c3edcf5a7d GIT binary patch literal 3227 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 N002ovPDHLkV1gtk05kvq literal 0 HcmV?d00001 diff --git a/theme/white/images/00_picker_btn_press.png b/theme/white/images/00_picker_btn_press.png new file mode 100644 index 0000000000000000000000000000000000000000..83284d1116a08e59f5463e07fe3e65e045861415 GIT binary patch literal 891 zcmeAS@N?(olHy`uVBq!ia0vp^0zhoU!3-pmJXhy2FfeWi@Ck916c+gZ|G$TU2$12b zBjjl)>aH*Bsw?ECCkzzvFcfjq74kF^1+ryC1%M<3x$BEeN!J3hKhINl)DihOPuX~>SG?(${(rRe|Dl}!2QvO2E&hM9=0%sppT+9G7OMW7 zukvr1#?J++|MtZF+v4?awb{QFy8o7G{abDFW3I}-J+a^CD!=NH`Zh=T{Uq71vy}d= zxBW6x@%?1kAM;fHt+o2MT<7z2g_k{&pQg#bn<(>dx!%WV^8ZiPeVi)yZ@KP=DRO_8 zYQFB1{}R2y?|)_g{&-LR$<Qr{N_{a%?X5_TRp7b+ay4*RsD^Z$d9SX+*5G z4>RXG-8BFD1@!_6F^e@Eh9cKm6}VP2wR0bAKQ!;aLx%?iDg_b(7IQdc&b1hDEoN%Z zJ~;o-+5-wMz#G#&oQxuEEPU-u?b40T`yY5G zdVY{&V-@Amko%~?=oM)8ZT+DXN7YrU)bC^kc(0E&e|agPDXLjABPXlOA}Z>3L)onM po5uZov)V7+yvi$4RrT^8^ZJJSVFx$OPY1>bgQu&X%Q~loCIHI{h~)qP literal 0 HcmV?d00001 diff --git a/theme/white/images/P02_icon_color.png b/theme/white/images/P02_icon_color.png new file mode 100644 index 0000000000000000000000000000000000000000..23a7fe7d1901038564ca157bc9dacc6dc96392b4 GIT binary patch literal 4261 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 literal 0 HcmV?d00001 diff --git a/theme/white/images/P02_icon_eraser_press.png b/theme/white/images/P02_icon_eraser_press.png new file mode 100644 index 0000000000000000000000000000000000000000..82e1ce1d822016af5ba72fceefee92ff2f377a9d GIT binary patch literal 3252 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 b$lCz`)2{rV{G_Cq00000NkvXXu0mjf&|%#w literal 0 HcmV?d00001 diff --git a/theme/white/images/P02_icon_font_color_press.png b/theme/white/images/P02_icon_font_color_press.png new file mode 100644 index 0000000000000000000000000000000000000000..2e75f621bd4be0485094f9bfe2ca1baf413ea47f GIT binary patch literal 3581 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 DJc-s< literal 0 HcmV?d00001 diff --git a/theme/white/images/P02_icon_font_size.png b/theme/white/images/P02_icon_font_size.png new file mode 100644 index 0000000000000000000000000000000000000000..b397b98da71910536a7511885433531111525be0 GIT binary patch literal 3226 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 M07*qoM6N<$f~IsO?*IS* literal 0 HcmV?d00001 diff --git a/theme/white/images/P02_icon_font_size_press.png b/theme/white/images/P02_icon_font_size_press.png new file mode 100644 index 0000000000000000000000000000000000000000..4966066f0eb879889af46ce98b87bbc405f4c0ad GIT binary patch literal 3199 zcmV-_41n{AP)KLZ*U+5Lu!Sk^o_Z5E4Meg@_7P6crJiNL9pw)e1;Xm069{HJUZAPk55R%$-RIA z6-eL&AQ0xu!e<4=008gy@A0LT~suv4>S3ILP<0Bm`DLLvaF4FK%)Nj?Pt*r}7;7Xa9z9H|HZjR63e zC`Tj$K)V27Re@400>HumpsYY5E(E}?0f1SyGDiY{y#)Yvj#!WnKwtoXnL;eg03bL5 z07D)V%>y7z1E4U{zu>7~aD})?0RX_umCct+(lZpemCzb@^6=o|A>zVpu|i=NDG+7} zl4`aK{0#b-!z=TL9Wt0BGO&T{GJWpjryhdijfaIQ&2!o}p04JRKYg3k&Tf zVxhe-O!X z{f;To;xw^bEES6JSc$k$B2CA6xl)ltA<32E66t?3@gJ7`36pmX0IY^jz)rRYwaaY4 ze(nJRiw;=Qb^t(r^DT@T3y}a2XEZW-_W%Hszxj_qD**t_m!#tW0KDiJT&R>6OvVTR z07RgHDzHHZ48atvzz&?j9lXF70$~P3Knx_nJP<+#`N z#-MZ2bTkiLfR>_b(HgWKJ%F~Nr_oF3b#wrIijHG|(J>BYjM-sajE6;FiC7vY#};Gd zST$CUHDeuEH+B^pz@B062qXfFfD`NpUW5?BY=V%GM_5c)L#QR}BeW8_2v-S%gfYS= zB9o|3v?Y2H`NVi)In3rTB8+ej^> zQ=~r95NVuDChL%G$=>7$vVg20myx%S50Foi`^m%Pw-h?Xh~i8Mq9jtJloCocWk2Nv zrJpiFnV_ms&8eQ$2&#xWpIS+6pmtC%Q-`S&GF4Q#^mhymh7E(qNMa}%YZ-ePrx>>xFPTiH1=E+A$W$=bG8>s^ zm=Bn5Rah$aDtr}@$`X}2l~$F0mFKEdRdZE8)p@E5RI61Ft6o-prbbn>P~)iy)E2AN zsU20jsWz_8Qg>31P|s0cqrPALg8E|(vWA65poU1JRAaZs8I2(p#xiB`SVGovRs-uS zYnV-9TeA7=Om+qP8+I>yOjAR1s%ETak!GFdam@h^# z)@rS0t$wXH+Irf)+G6c;?H29p+V6F6oj{!|o%K3xI`?%6x;DB|x`n#ibhIR?(H}Q3Gzd138Ei2)WAMz7W9Vy`X}HnwgyEn!VS)>mv$8&{hQn>w4zwy3R}t;BYlZQm5)6pty=DfLrs+A-|>>;~;Q z_F?uV_HFjh9n2gO9o9Q^JA86v({H5aB!kjoO6 zc9$1ZZKsN-Zl8L~mE{`ly3)1N^`o1+o7}D0ZPeY&J;i;i`%NyJ8_8Y6J?}yE@b_5a zam?eLr<8@mESk|3$_SkmS{wQ>%qC18))9_|&j{ZT zes8AvOzF(F2#DZEY>2oYX&IRp`F#{ADl)1r>QS^)ba8a|EY_^#S^HO&t^Rgqwv=MZThqqEWH8 zxJo>d=ABlR_Bh=;eM9Tw|Ih34~oTE|= zX_mAr*D$vzw@+p(E0Yc6dFE}(8oqt`+R{gE3x4zjX+Sb3_cYE^= zgB=w+-tUy`ytONMS8KgRef4hA?t0j zufM;t32jm~jUGrkaOInTZ`zyfns>EuS}G30LFK_G-==(f<51|K&cocp&EJ`SxAh3? zNO>#LI=^+SEu(FqJ)ynt=!~PC9bO$rzPJB=?=j6w@a-(u02P7 zaQ)#(uUl{HW%tYNS3ItC^iAtK(eKlL`f9+{bJzISE?u8_z3;~C8@FyI-5j_jy7l;W z_U#vU3hqqYU3!mrul&B+{ptt$59)uk{;_4iZQ%G|z+lhASr6|H35TBkl>gI*;nGLU zN7W-nBaM%pA0HbH8olyl&XeJ%vZoWz%6?Y=dFykl=imL}`%BMQ{Mhgd`HRoLu6e2R za__6DuR6yg#~-}Tc|Gx_{H@O0eebyMy5GmWADJlpK>kqk(fVV@r_fLLKIeS?{4e)} z^ZO;zpECde03c&XQcVB=dL;k=fP(-4`Tqa_faw4Lbua(`>RI+y?e7jKeZ#YO-C z0jxRyg>UF}t;v(MV=?EO9atk&9VR}oh`xR%3Y@T_sRqfM>Xkx7kJYd+85 z1de8Vgjpm0^g0j`ixF|Tp?@xZl?x5FMu(zN<)9upc|%tgsWY-%1gXR zmuW-JcLhEu38;Yo2PyvnzSZJ(tcVVg@%Kqan8kku{1`rGhU{To>X%brVMC_>dtHE! z>MF0XKldZ&u$21ysoRcg_|Q_MYHh_&;Z3$b)m&vE@AJ5XJzcE!IN;A4GGVAwkH l!eId~;03&Z7x32P#{k9f+s=)f)ldKc002ovPDHLkV1l<@AJYH; literal 0 HcmV?d00001 diff --git a/theme/white/images/P02_icon_stroke.png b/theme/white/images/P02_icon_stroke.png new file mode 100644 index 0000000000000000000000000000000000000000..5a317a876f7f8653137b73fe3555939afeca3708 GIT binary patch literal 2944 zcmV-`3xD*9P)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} z00021Nkl0Ui+ zQw;Bx#D6yD;vY{j9Dt!hb8bu5_)w`io#Xdho2+rC$`_`JE5F3b_pBA}0(#^GT$*1% qmWpuU!i5VLF1$i+00030{{sM5BPpyNl^ziQ0000KLZ*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} z0001&Nkl8a|mL_$`m-hcMt zQ)I`EQVLg0$3-JtxNzaZg$u7qUr~Dp#st%Pq$nzmtR1)|z~k%}Ux1;NRteAAhKF+l zrUcV`HhfANPFv-ZS4(hz6<7YhuYAv1;r=S$Jb8r%V8n_0000 + +collections { + #include <../common.edc> +} -- 2.7.4