Initialize Tizen 2.3 tizen_2.3 2.3a_release submit/tizen_2.3/20140531.102920
authorSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:55:44 +0000 (12:55 +0900)
committerSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:55:44 +0000 (12:55 +0900)
144 files changed:
.readme [new file with mode: 0644]
03_mainmenu_icon_notes.png [new file with mode: 0644]
CMakeLists.txt [new file with mode: 0755]
INSTALL [new file with mode: 0644]
LICENSE [new file with mode: 0644]
NOTICE [new file with mode: 0644]
debian/changelog [new file with mode: 0755]
debian/com.samsung.memo.install.in [new file with mode: 0644]
debian/com.samsung.memo.postinst.in [new file with mode: 0644]
debian/compat [new file with mode: 0644]
debian/control [new file with mode: 0755]
debian/dirs [new file with mode: 0644]
debian/docs [new file with mode: 0644]
debian/rules [new file with mode: 0755]
edc/common.edc [new file with mode: 0644]
edc/doodle_editor.edc [new file with mode: 0644]
edc/doodle_viewer.edc [new file with mode: 0644]
edc/edit_list.edc [new file with mode: 0644]
edc/edit_tool.edc [new file with mode: 0644]
edc/list.edc [new file with mode: 0644]
edc/text_editor.edc [new file with mode: 0644]
edc/text_viewer.edc [new file with mode: 0644]
extend/extended-edc.h [new file with mode: 0644]
extend/extended-elm.c [new file with mode: 0644]
extend/extended-elm.h [new file with mode: 0644]
extend/gravel.h [new file with mode: 0644]
extend/supplement.c [new file with mode: 0644]
extend/supplement.h [new file with mode: 0644]
images/00_search_input_field_bg.png [new file with mode: 0644]
images/01_header_icon_add.png [new file with mode: 0644]
images/01_header_icon_cancel.png [new file with mode: 0644]
images/01_header_icon_delete.png [new file with mode: 0644]
images/01_header_icon_done.png [new file with mode: 0644]
images/01_header_icon_edit.png [new file with mode: 0644]
images/01_header_icon_others.png [new file with mode: 0644]
include/memo-assist.h [new file with mode: 0644]
include/memo-genlist.h [new file with mode: 0644]
include/memo.h [new file with mode: 0644]
include/memo_autolink.h [new file with mode: 0644]
include/memo_doodle_editor.h [new file with mode: 0644]
include/memo_log.h [new file with mode: 0644]
include/memo_string.h [new file with mode: 0644]
include/memo_text_editor.h [new file with mode: 0644]
include/memo_ug.h [new file with mode: 0644]
memo.edc [new file with mode: 0644]
org.tizen.memo.manifest [new file with mode: 0755]
org.tizen.memo.png [new file with mode: 0755]
org.tizen.memo.rule [new file with mode: 0755]
org.tizen.memo.xml [new file with mode: 0644]
packaging/org.tizen.memo.spec [new file with mode: 0755]
po/CMakeLists.txt [new file with mode: 0644]
po/POTFILES.in [new file with mode: 0644]
po/ar.po [new file with mode: 0755]
po/bg.po [new file with mode: 0755]
po/ca.po [new file with mode: 0755]
po/cs.po [new file with mode: 0755]
po/da.po [new file with mode: 0755]
po/de_DE.po [new file with mode: 0644]
po/el_GR.po [new file with mode: 0644]
po/en.po [new file with mode: 0644]
po/en_US.po [new file with mode: 0755]
po/es_ES.po [new file with mode: 0644]
po/fi.po [new file with mode: 0755]
po/fr_FR.po [new file with mode: 0644]
po/he.po [new file with mode: 0755]
po/header.sh [new file with mode: 0755]
po/hi.po [new file with mode: 0755]
po/hr.po [new file with mode: 0755]
po/hu.po [new file with mode: 0755]
po/id.po [new file with mode: 0755]
po/it_IT.po [new file with mode: 0644]
po/ja_JP.po [new file with mode: 0644]
po/ko_KR.po [new file with mode: 0644]
po/lt.po [new file with mode: 0755]
po/lv.po [new file with mode: 0755]
po/memo.pot [new file with mode: 0644]
po/ms.po [new file with mode: 0755]
po/nl_NL.po [new file with mode: 0644]
po/no.po [new file with mode: 0755]
po/pl.po [new file with mode: 0755]
po/pt_PT.po [new file with mode: 0644]
po/ro.po [new file with mode: 0755]
po/ru_RU.po [new file with mode: 0644]
po/sk.po [new file with mode: 0755]
po/sl.po [new file with mode: 0755]
po/sr.po [new file with mode: 0755]
po/sv.po [new file with mode: 0755]
po/th.po [new file with mode: 0755]
po/tr_TR.po [new file with mode: 0644]
po/uk.po [new file with mode: 0755]
po/update-po.sh [new file with mode: 0755]
po/vi.po [new file with mode: 0755]
po/zh_CN.po [new file with mode: 0644]
po/zh_HK.po [new file with mode: 0644]
po/zh_TW.po [new file with mode: 0644]
scripts/copyright [new file with mode: 0644]
scripts/float.sh [new file with mode: 0755]
scripts/images_strip.sh [new file with mode: 0755]
scripts/str.in [new file with mode: 0644]
scripts/string.sh [new file with mode: 0644]
scripts/temp [new file with mode: 0644]
src/memo-assist.c [new file with mode: 0644]
src/memo-genlist.c [new file with mode: 0644]
src/memo.c [new file with mode: 0644]
src/memo_autolink.c [new file with mode: 0644]
src/memo_detail.c [new file with mode: 0644]
src/memo_doodle_editor.c [new file with mode: 0644]
src/memo_doodle_viewer.c [new file with mode: 0644]
src/memo_edit.c [new file with mode: 0644]
src/memo_edit_list.c [new file with mode: 0644]
src/memo_list.c [new file with mode: 0644]
src/memo_list_editor.c [new file with mode: 0644]
src/memo_list_viewer.c [new file with mode: 0644]
src/memo_text_editor.c [new file with mode: 0644]
src/memo_text_viewer.c [new file with mode: 0644]
src/memo_ug.c [new file with mode: 0644]
theme/CMakeLists.txt [new file with mode: 0644]
theme/black/images/00_picker_btn_normal.png [new file with mode: 0644]
theme/black/images/00_picker_btn_press.png [new file with mode: 0644]
theme/black/images/P02_icon_color.png [new file with mode: 0644]
theme/black/images/P02_icon_color_focus.png [new file with mode: 0644]
theme/black/images/P02_icon_eraser.png [new file with mode: 0644]
theme/black/images/P02_icon_eraser_press.png [new file with mode: 0644]
theme/black/images/P02_icon_font_color.png [new file with mode: 0644]
theme/black/images/P02_icon_font_color_press.png [new file with mode: 0644]
theme/black/images/P02_icon_font_size.png [new file with mode: 0644]
theme/black/images/P02_icon_font_size_press.png [new file with mode: 0644]
theme/black/images/P02_icon_stroke.png [new file with mode: 0644]
theme/black/images/P02_icon_stroke_press.png [new file with mode: 0644]
theme/black/memo.edc [new file with mode: 0644]
theme/common.edc [new file with mode: 0644]
theme/white/images/00_picker_btn_normal.png [new file with mode: 0644]
theme/white/images/00_picker_btn_press.png [new file with mode: 0644]
theme/white/images/P02_icon_color.png [new file with mode: 0644]
theme/white/images/P02_icon_color_focus.png [new file with mode: 0644]
theme/white/images/P02_icon_eraser.png [new file with mode: 0644]
theme/white/images/P02_icon_eraser_press.png [new file with mode: 0644]
theme/white/images/P02_icon_font_color.png [new file with mode: 0644]
theme/white/images/P02_icon_font_color_press.png [new file with mode: 0644]
theme/white/images/P02_icon_font_size.png [new file with mode: 0644]
theme/white/images/P02_icon_font_size_press.png [new file with mode: 0644]
theme/white/images/P02_icon_stroke.png [new file with mode: 0644]
theme/white/images/P02_icon_stroke_press.png [new file with mode: 0644]
theme/white/memo.edc [new file with mode: 0644]

diff --git a/.readme b/.readme
new file mode 100644 (file)
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 (file)
index 0000000..7d00e15
Binary files /dev/null and b/03_mainmenu_icon_notes.png differ
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..c14f517
--- /dev/null
@@ -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 (file)
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 (file)
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 (file)
index 0000000..6e010c0
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,3 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.\r
+Except as noted, this software is licensed under Flora License, Version 1.1.\r
+Please, see the LICENSE.Flora file for Flora License, Version 1.1 terms and conditions.\r
diff --git a/debian/changelog b/debian/changelog
new file mode 100755 (executable)
index 0000000..b7f35b1
--- /dev/null
@@ -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 <byungjai.im@samsung.com>  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 <wei2012.hua@samsung.com>  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 <goo81.lee@samsung.com>  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 <wei2012.hua@samsung.com>  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 <wei2012.hua@samsung.com>  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 <wei2012.hua@samsung.com>  Wed, 11 Jul 2012 19:34:30 +0800
+
+memo (0.2.0-5) unstable; urgency=low
+
+  * [Bug] <S1-3987> 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 <wei2012.hua@samsung.com>  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 <wei2012.hua@samsung.com>  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 <wei2012.hua@samsung.com>  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 <wei2012.hua@samsung.com>  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 <wei2012.hua@samsung.com>  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 <wei2012.hua@samsung.com>  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 <wei2012.hua@samsung.com>  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 <goo81.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <feng.li@samsung.com>  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 <feng.li@samsung.com>  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 <feng.li@samsung.com>  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 <feng.li@samsung.com>  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 <goo81.lee@samsung.com>  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 <feng.li@samsung.com>  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 <canjiang.lu@samsung.com>  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 <xiaolong_.ma@samsung.com>  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 <feng.li@samsung.com>  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 <feng.li@samsung.com>  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 <feng.li@samsung.com>  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 <feng.li@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <goo81.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <junho4810.lee@samsung.com>  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 <junho4810.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <junho4810.lee@samsung.com>  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 <junho4810.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <junho4810.lee@samsung.com>  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 <junho4810.lee@samsung.com>  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 <junho4810.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <junho4810.lee@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <junho4810.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <junho4810.lee@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <qing_.yang@samsung.com>  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 <junho4810.lee@samsung.com>  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 <junho4810.lee@samsung.com>  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 <junho4810.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <junho4810.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <qing_.yang@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <junho4810.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <junho4810.lee@samsung.com>  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 <Junho Lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  Mon, 20 Sep 2010 11:19:20 +0800
+
+memo (0.1.3-14) unstable; urgency=low
+
+  * update version
+
+ -- Junho Lee <junho4810.lee@samsung.com>  Thu, 16 Sep 2010 20:20:27 +0900
+
+memo (0.1.3-13) unstable; urgency=low
+
+  * comment out fake image for demo
+
+ -- Junho Lee <junho4810.lee@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  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 <canjiang.lu@samsung.com>  Tue, 10 Aug 2010 17:10:10 +0800
+
+memo (0.1.0) unstable; urgency=low
+
+  * Initial Release.
+
+ -- unknown <date>  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 (file)
index 0000000..4b47199
--- /dev/null
@@ -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 (file)
index 0000000..a15f185
--- /dev/null
@@ -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 (file)
index 0000000..7ed6ff8
--- /dev/null
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100755 (executable)
index 0000000..0244db7
--- /dev/null
@@ -0,0 +1,19 @@
+Source: memo
+Section: devel
+Priority: extra
+Maintainer: Zhibin Zhou <zhibin.zhou@samsung.com>, Canjiang Lu <canjiang.lu@samsung.com>, Feng Li <feng.li@samsung.com>, Wei Hua <wei2012.hua@samsung.com>
+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 (file)
index 0000000..ca882bb
--- /dev/null
@@ -0,0 +1,2 @@
+usr/bin
+usr/sbin
diff --git a/debian/docs b/debian/docs
new file mode 100644 (file)
index 0000000..a0f0008
--- /dev/null
@@ -0,0 +1 @@
+CMakeLists.txt
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..d2aa05f
--- /dev/null
@@ -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 (file)
index 0000000..f872484
--- /dev/null
@@ -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 (file)
index 0000000..b4cc0ce
--- /dev/null
@@ -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 (file)
index 0000000..a867fa2
--- /dev/null
@@ -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 (file)
index 0000000..1390634
--- /dev/null
@@ -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 (file)
index 0000000..21104b6
--- /dev/null
@@ -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 (file)
index 0000000..1b81c94
--- /dev/null
@@ -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 (file)
index 0000000..fad88d5
--- /dev/null
@@ -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 (file)
index 0000000..364c6c0
--- /dev/null
@@ -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 (file)
index 0000000..cb536be
--- /dev/null
@@ -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 (file)
index 0000000..44d3f09
--- /dev/null
@@ -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 <extended-elm.h>
+
+/**
+ * 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 (file)
index 0000000..5ffd9ac
--- /dev/null
@@ -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 <Elementary.h>
+
+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 (file)
index 0000000..29fb58a
--- /dev/null
@@ -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 <dlog.h>
+
+/* 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 (file)
index 0000000..f6f8d81
--- /dev/null
@@ -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 <dlog.h>
+#include <gravel.h>
+#include <supplement.h>
+
+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 (file)
index 0000000..4707249
--- /dev/null
@@ -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 <Elementary.h>
+#include <bundle.h>
+#include <ui-gadget.h>
+
+/* 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 (file)
index 0000000..cc89625
Binary files /dev/null and b/images/00_search_input_field_bg.png differ
diff --git a/images/01_header_icon_add.png b/images/01_header_icon_add.png
new file mode 100644 (file)
index 0000000..43c4984
Binary files /dev/null and b/images/01_header_icon_add.png differ
diff --git a/images/01_header_icon_cancel.png b/images/01_header_icon_cancel.png
new file mode 100644 (file)
index 0000000..4fb54c3
Binary files /dev/null and b/images/01_header_icon_cancel.png differ
diff --git a/images/01_header_icon_delete.png b/images/01_header_icon_delete.png
new file mode 100644 (file)
index 0000000..07e2898
Binary files /dev/null and b/images/01_header_icon_delete.png differ
diff --git a/images/01_header_icon_done.png b/images/01_header_icon_done.png
new file mode 100644 (file)
index 0000000..d771640
Binary files /dev/null and b/images/01_header_icon_done.png differ
diff --git a/images/01_header_icon_edit.png b/images/01_header_icon_edit.png
new file mode 100644 (file)
index 0000000..ea2535d
Binary files /dev/null and b/images/01_header_icon_edit.png differ
diff --git a/images/01_header_icon_others.png b/images/01_header_icon_others.png
new file mode 100644 (file)
index 0000000..4fc9dfa
Binary files /dev/null and b/images/01_header_icon_others.png differ
diff --git a/include/memo-assist.h b/include/memo-assist.h
new file mode 100644 (file)
index 0000000..bc27be4
--- /dev/null
@@ -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 <memo-db.h>
+#include <bundle.h>
+#include <memo_string.h>
+#include <ui-gadget.h>
+
+#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 (file)
index 0000000..4d5b9d4
--- /dev/null
@@ -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 (file)
index 0000000..7bff87a
--- /dev/null
@@ -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 <appcore-efl.h>
+#include <Elementary.h>
+#include <memo-assist.h>
+#include <memo_string.h>
+#include <gravel.h>
+#include <supplement.h>
+#include <extended-elm.h>
+#include <memo-genlist.h>
+
+#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 (file)
index 0000000..a879237
--- /dev/null
@@ -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 (file)
index 0000000..0f8a3f2
--- /dev/null
@@ -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 (file)
index 0000000..8216c93
--- /dev/null
@@ -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 <dlog.h>
+
+#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 (file)
index 0000000..22f839c
--- /dev/null
@@ -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 (file)
index 0000000..34effc0
--- /dev/null
@@ -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 (file)
index 0000000..e230987
--- /dev/null
@@ -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 <glib.h>
+#include <bundle.h>
+#include <stdarg.h>
+#include <ui-gadget.h>
+
+
+/* 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 (file)
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 <extend/extended-edc.h>
+
+collections {
+    #include <edc/common.edc>
+    #include <edc/list.edc>
+    #include <edc/edit_list.edc>
+    #include <edc/text_viewer.edc>
+    #include <edc/text_editor.edc>
+    #include <edc/doodle_viewer.edc>
+    #include <edc/doodle_editor.edc>
+    #include <edc/edit_tool.edc>
+}
diff --git a/org.tizen.memo.manifest b/org.tizen.memo.manifest
new file mode 100755 (executable)
index 0000000..475f473
--- /dev/null
@@ -0,0 +1,13 @@
+<manifest>
+       <define>
+               <domain name="org.tizen.memo" />
+       </define>
+       <assign>
+               <filesystem path="/opt/share/applications/org.tizen.memo.desktop" label="_" />
+               <filesystem path="/opt/share/icons/default/small/org.tizen.memo.png" label="_" />
+        </assign>
+       <request>
+               <domain name="org.tizen.memo" />
+       </request>
+</manifest>
+
diff --git a/org.tizen.memo.png b/org.tizen.memo.png
new file mode 100755 (executable)
index 0000000..28382d8
Binary files /dev/null and b/org.tizen.memo.png differ
diff --git a/org.tizen.memo.rule b/org.tizen.memo.rule
new file mode 100755 (executable)
index 0000000..c9aad0d
--- /dev/null
@@ -0,0 +1,23 @@
+org.tizen.memo system::vconf rwxat
+org.tizen.memo system::homedir rwxat
+org.tizen.memo system::media rwxat
+org.tizen.memo net-config r----
+org.tizen.memo xorg rw---
+org.tizen.memo libslp-memo::db rw---
+org.tizen.memo isf rwx--
+org.tizen.memo msg-service rw---
+org.tizen.memo contacts-service rw---
+org.tizen.memo libaccounts-svc r----
+org.tizen.memo email-service::db rw---
+org.tizen.memo dbus -w---
+org.tizen.memo libaccounts-svc::db rw---
+org.tizen.memo worldclock::db rw---
+org.tizen.memo pkgmgr r----
+org.tizen.memo syspopup::db rw---
+org.tizen.memo contacts-service::db rw---
+org.tizen.memo libug-phone::data rwx--
+org.tizen.memo efreet --x--
+org.tizen.memo media-data::db rw---
+org.tizen.memo app-svc::db rw---
+org.tizen.memo calendar-service::db rw---
+org.tizen.memo email-service -w---
diff --git a/org.tizen.memo.xml b/org.tizen.memo.xml
new file mode 100644 (file)
index 0000000..80c4db4
--- /dev/null
@@ -0,0 +1,60 @@
+<?xml version="1.0" encoding="utf-8" ?> 
+<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.memo" version="0.2.0" install-location="internal-only">
+       <label>Memo</label> 
+       <description>Memo</description> 
+       <ui-application appid="org.tizen.memo" exec="/usr/apps/org.tizen.memo/bin/memo" nodisplay="false" multiple="false" type="capp" taskmanage="true">
+               <icon>org.tizen.memo.png</icon>
+               <label>Memo</label>
+               <label xml:lang="hy-am">Հուշագիր</label>
+               <label xml:lang="az-az">Yaddaş qeydi</label>
+               <label xml:lang="eu-es">Oroigarria</label>
+               <label xml:lang="bg-bg">Пам. бел.</label>
+               <label xml:lang="ca-es">Memoràndum</label>
+               <label xml:lang="zh-cn">备忘录</label>
+               <label xml:lang="zh-hk">備忘錄</label>
+               <label xml:lang="zh-tw">備忘錄</label> 
+               <label xml:lang="hr-hr">Zapis</label>
+               <label xml:lang="cs-cz">Poznámky</label>
+               <label xml:lang="da-dk">Notat</label>
+               <label xml:lang="nl-nl">Memo</label>
+               <label xml:lang="en-gb">Memo</label>
+               <label xml:lang="en-us">Memo</label> 
+               <label xml:lang="et-ee">Memo</label>
+               <label xml:lang="fi-fi">Muistio</label>
+               <label xml:lang="fr-fr">Mémo</label>
+               <label xml:lang="gl-es">Nota</label>
+               <label xml:lang="ka-ge">შეხსენება</label>
+               <label xml:lang="de-de">Memo</label>
+               <label xml:lang="el-gr">Σημείωση</label>
+               <label xml:lang="hu-hu">Jegyzet</label>
+               <label xml:lang="is-is">M.atriði</label>
+               <label xml:lang="ga-ie">Meabhrán</label>
+               <label xml:lang="it-it">Promemoria</label>
+               <label xml:lang="ja-jp">メモ</label>
+               <label xml:lang="kk-kz">Ескерту</label>
+               <label xml:lang="ko-kr">메모</label>
+               <label xml:lang="lv-lv">Atgādne</label>
+               <label xml:lang="lt-lt">Užrašas</label>
+               <label xml:lang="mk-mk">Белешка</label>
+               <label xml:lang="nb-no">Notat</label>
+               <label xml:lang="pl-pl">Notatka</label>
+               <label xml:lang="pt-pt">Memorando</label>
+               <label xml:lang="pt-br">Bloco de notas</label>
+               <label xml:lang="ro-ro">Notă</label>
+               <label xml:lang="ru-ru">Заметки</label>
+               <label xml:lang="sr-rs">Beleška</label>
+               <label xml:lang="sk-sk">Poznámka</label>
+               <label xml:lang="sl-si">Beležka</label>
+               <label xml:lang="es-es">Nota</label>
+               <label xml:lang="es-us">Memo</label>
+               <label xml:lang="sv-se">Memo</label>
+               <label xml:lang="tr-tr">Not</label>
+               <label xml:lang="uk-ua">Нагадув.</label>
+               <label xml:lang="uz-uz">Yozuv</label>
+               <label xml:lang="ar-ae">المذكرة</label>
+               <label xml:lang="zh-sg">备忘录</label>
+               <label xml:lang="hi-in">मेमो</label> 
+               <label xml:lang="en-ph">Memo</label>
+               <label xml:lang="fr-ca">Mémo</label>
+       </ui-application>
+</manifest>
diff --git a/packaging/org.tizen.memo.spec b/packaging/org.tizen.memo.spec
new file mode 100755 (executable)
index 0000000..b864e9d
--- /dev/null
@@ -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 (file)
index 0000000..fe43d1f
--- /dev/null
@@ -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 (file)
index 0000000..0efcb39
--- /dev/null
@@ -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 (executable)
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 (executable)
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 (executable)
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 (executable)
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 (executable)
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 (file)
index 0000000..e74f0dd
--- /dev/null
@@ -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 (file)
index 0000000..44b663b
--- /dev/null
@@ -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 (file)
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 (executable)
index 0000000..058ae46
--- /dev/null
@@ -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 (file)
index 0000000..6ba2fb8
--- /dev/null
@@ -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 (executable)
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 (file)
index 0000000..4396486
--- /dev/null
@@ -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 (executable)
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 (executable)
index 0000000..20805ad
--- /dev/null
@@ -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 (executable)
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 (executable)
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 (executable)
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 (executable)
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 (file)
index 0000000..8dcbe0b
--- /dev/null
@@ -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 (file)
index 0000000..fb98fc6
--- /dev/null
@@ -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 (file)
index 0000000..be2c236
--- /dev/null
@@ -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 (executable)
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 (executable)
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 (file)
index 0000000..f600dba
--- /dev/null
@@ -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 <EMAIL@ADDRESS>, 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 <EMAIL@ADDRESS>\n"
+"Language-Team: LANGUAGE <LL@li.org>\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 (executable)
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 (file)
index 0000000..f0f2c8a
--- /dev/null
@@ -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 (executable)
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 (executable)
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 (file)
index 0000000..196b8c2
--- /dev/null
@@ -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 (executable)
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 (file)
index 0000000..02ce435
--- /dev/null
@@ -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 (executable)
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 (executable)
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 (executable)
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 (executable)
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 (executable)
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 (file)
index 0000000..b95adee
--- /dev/null
@@ -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 (executable)
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 (executable)
index 0000000..73a4be2
--- /dev/null
@@ -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 (executable)
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 (file)
index 0000000..479eb02
--- /dev/null
@@ -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 (file)
index 0000000..98d1834
--- /dev/null
@@ -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 (file)
index 0000000..72afc6f
--- /dev/null
@@ -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 (file)
index 0000000..dd461b5
--- /dev/null
@@ -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 (executable)
index 0000000..f1e8a4f
--- /dev/null
@@ -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 (executable)
index 0000000..7c79afa
--- /dev/null
@@ -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 (file)
index 0000000..d28414d
--- /dev/null
@@ -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 (file)
index 0000000..4e845d6
--- /dev/null
@@ -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 (file)
index 0000000..650ebc9
--- /dev/null
@@ -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 (file)
index 0000000..4d83c66
--- /dev/null
@@ -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 <stdio.h>
+#include <unicode/ustring.h>
+#include <unicode/utypes.h>
+#include <unicode/udat.h>
+#include <unicode/udatpg.h>
+#include <iniparser.h>
+#include <dictionary.h>
+#include <vconf-keys.h>
+#include <vconf.h>
+#include <gravel.h>
+#include <extended-elm.h>
+#include <supplement.h>
+#include <memo-assist.h>
+#include <runtime_info.h>
+#include <math.h>
+#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, "<color=#000000FF><font_size=%d><align=center>Abc</align></font_size></color>", 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, "<color=#000000FF><font_size=%d><align=center>Abc</align></font_size></color>", 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 (file)
index 0000000..5deb351
--- /dev/null
@@ -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 <Elementary.h>
+#include <gravel.h>
+#include <extended-elm.h>
+#include <memo-db.h>
+#include <appcore-common.h>
+#include <memo-assist.h>
+#include <memo_string.h>
+#include <memo-genlist.h>
+#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=#%02x%02x%02x>", 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, "<color=#3F8DAD>");
+                buf[0]='\0';
+                strncat(buf, p, strlen(gld->search));
+                _str_append_utf8(output, MEMO_BUFFER_SIZE, buf);
+                sncat(output, MEMO_BUFFER_SIZE, "</color>");
+                /* 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 (file)
index 0000000..1db5d75
--- /dev/null
@@ -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 <stdio.h>
+#include <app.h>
+#include <appcore-efl.h>
+#include <ui-gadget.h>        /* ug_send_key_event */
+#include <Ecore_X.h>
+#include <vconf.h>
+#include <memo.h>
+#include <memo_ug.h>
+#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 (file)
index 0000000..f230e9d
--- /dev/null
@@ -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 <Elementary.h>
+#include <dlog.h>
+#include <gravel.h>
+#include <extended-elm.h>
+#include <assert.h>
+#include <glib.h>
+#include <memo_string.h>
+#include <aul.h>
+#include <appsvc.h>
+#include <contacts-ug.h>
+#include <memo_autolink.h>
+#include <memo_ug.h>
+#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,
+        "<color=#72b1f2FF><a href=%s|%s underline=on underline_color=#72b1f2FF>%s</a></color>",
+        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 (file)
index 0000000..0a5bcb6
--- /dev/null
@@ -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 <stdlib.h>
+#include <stdio.h>
+#include <string.h>
+#include <assert.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <memo_ug.h>
+#include <memo.h>
+#include <memo_autolink.h>
+#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; i<dv->count; 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; i<dv->count; 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; i<dv->count; 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 (file)
index 0000000..547ce34
--- /dev/null
@@ -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 <stdlib.h>
+#include <stdio.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <dlog.h>
+#include <gravel.h>
+#include <extended-elm.h>
+#include <supplement.h>
+#include <memo-assist.h>
+#include <memo_string.h>
+
+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 (file)
index 0000000..f02ff0b
--- /dev/null
@@ -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 <appcore-efl.h>
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <dlog.h>
+#include <gravel.h>
+#include <extended-elm.h>
+#include <supplement.h>
+#include <memo-assist.h>
+#include <memo_string.h>
+#include <memo_ug.h>
+#include <memo_autolink.h>
+
+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 (file)
index 0000000..d7ec25d
--- /dev/null
@@ -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 <stdlib.h>
+#include <stdio.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <memo.h>
+#include <memo_text_editor.h>
+#include <memo_doodle_editor.h>
+#include <extended-elm.h>
+#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 (file)
index 0000000..a4c97d3
--- /dev/null
@@ -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 <stdlib.h>
+#include <stdio.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <stdint.h>
+#include <math.h>
+#include <sys/stat.h>
+#include <vconf.h>
+
+#include <memo.h>
+#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 (file)
index 0000000..77ea6aa
--- /dev/null
@@ -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 <stdlib.h>
+#include <stdio.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <memo.h>
+#include <memo_ug.h>
+
+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 (file)
index 0000000..3450aa6
--- /dev/null
@@ -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 <stdlib.h>
+#include <stdio.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <dlog.h>
+#include <gravel.h>
+#include <vconf-keys.h>
+#include <extended-elm.h>
+#include <supplement.h>
+#include <memo-assist.h>
+#include <memo_string.h>
+#include <memo-genlist.h>
+#include <memo_ug.h>
+
+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 (file)
index 0000000..d8d681b
--- /dev/null
@@ -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 <stdlib.h>
+#include <stdio.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <dlog.h>
+#include <gravel.h>
+#include <vconf-keys.h>
+#include <extended-elm.h>
+#include <supplement.h>
+#include <memo-assist.h>
+#include <memo_string.h>
+#include <memo-genlist.h>
+#include <memo_ug.h>
+#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 (file)
index 0000000..7f1ff6e
--- /dev/null
@@ -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 <stdlib.h>
+#include <stdio.h>
+#include <appcore-efl.h>
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <dlog.h>
+#include <gravel.h>
+#include <vconf-keys.h>
+#include <extended-elm.h>
+#include <supplement.h>
+#include <memo-assist.h>
+#include <memo_string.h>
+#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,
+         "<font_size=%d><color=#%02x%02x%02x>", 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, "<font_size=%d><color=#%02x%02x%02x>",
+        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, "</color></font_size>"))
+    {
+        elm_entry_cursor_end_set(te->entry);
+        elm_entry_entry_insert(te->entry, "</color></font_size>");
+    }
+#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, "<font_size=%d><color=#%02x%02x%02x>",
+        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 (file)
index 0000000..cc467bc
--- /dev/null
@@ -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 <appcore-efl.h>
+#include <Elementary.h>
+#include <dlog.h>
+#include <gravel.h>
+#include <extended-elm.h>
+#include <supplement.h>
+#include <memo-assist.h>
+#include <memo_string.h>
+#include <memo_ug.h>
+#include <memo_autolink.h>
+#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,
+         "<font_size=%d><color=#%02x%02x%02x>", 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 (file)
index 0000000..abd1939
--- /dev/null
@@ -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 <Ecore_X.h>
+#include <aul.h>
+#include <appsvc.h>
+#include "memo.h"
+#include <supplement.h>
+#include "memo_ug.h"
+#include "memo_string.h"
+#include <vconf.h>
+
+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; i<n ; i++) { /* retrieve records */
+        md = memo_get_data(indexes[i]);
+        if (md->has_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 (file)
index 0000000..990eec3
--- /dev/null
@@ -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 (file)
index 0000000..9dc73c4
Binary files /dev/null and b/theme/black/images/00_picker_btn_normal.png differ
diff --git a/theme/black/images/00_picker_btn_press.png b/theme/black/images/00_picker_btn_press.png
new file mode 100644 (file)
index 0000000..f65239f
Binary files /dev/null and b/theme/black/images/00_picker_btn_press.png differ
diff --git a/theme/black/images/P02_icon_color.png b/theme/black/images/P02_icon_color.png
new file mode 100644 (file)
index 0000000..8394206
Binary files /dev/null and b/theme/black/images/P02_icon_color.png differ
diff --git a/theme/black/images/P02_icon_color_focus.png b/theme/black/images/P02_icon_color_focus.png
new file mode 100644 (file)
index 0000000..8394206
Binary files /dev/null and b/theme/black/images/P02_icon_color_focus.png differ
diff --git a/theme/black/images/P02_icon_eraser.png b/theme/black/images/P02_icon_eraser.png
new file mode 100644 (file)
index 0000000..0cab038
Binary files /dev/null and b/theme/black/images/P02_icon_eraser.png differ
diff --git a/theme/black/images/P02_icon_eraser_press.png b/theme/black/images/P02_icon_eraser_press.png
new file mode 100644 (file)
index 0000000..0cab038
Binary files /dev/null and b/theme/black/images/P02_icon_eraser_press.png differ
diff --git a/theme/black/images/P02_icon_font_color.png b/theme/black/images/P02_icon_font_color.png
new file mode 100644 (file)
index 0000000..a2bd5b4
Binary files /dev/null and b/theme/black/images/P02_icon_font_color.png differ
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 (file)
index 0000000..a2bd5b4
Binary files /dev/null and b/theme/black/images/P02_icon_font_color_press.png differ
diff --git a/theme/black/images/P02_icon_font_size.png b/theme/black/images/P02_icon_font_size.png
new file mode 100644 (file)
index 0000000..52931cb
Binary files /dev/null and b/theme/black/images/P02_icon_font_size.png differ
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 (file)
index 0000000..52931cb
Binary files /dev/null and b/theme/black/images/P02_icon_font_size_press.png differ
diff --git a/theme/black/images/P02_icon_stroke.png b/theme/black/images/P02_icon_stroke.png
new file mode 100644 (file)
index 0000000..656b788
Binary files /dev/null and b/theme/black/images/P02_icon_stroke.png differ
diff --git a/theme/black/images/P02_icon_stroke_press.png b/theme/black/images/P02_icon_stroke_press.png
new file mode 100644 (file)
index 0000000..656b788
Binary files /dev/null and b/theme/black/images/P02_icon_stroke_press.png differ
diff --git a/theme/black/memo.edc b/theme/black/memo.edc
new file mode 100644 (file)
index 0000000..44a03bb
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+*
+* 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 <../../extend/extended-edc.h>
+
+collections {
+    #include <../common.edc>
+}
diff --git a/theme/common.edc b/theme/common.edc
new file mode 100644 (file)
index 0000000..c1f4513
--- /dev/null
@@ -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 (file)
index 0000000..df4433e
Binary files /dev/null and b/theme/white/images/00_picker_btn_normal.png differ
diff --git a/theme/white/images/00_picker_btn_press.png b/theme/white/images/00_picker_btn_press.png
new file mode 100644 (file)
index 0000000..83284d1
Binary files /dev/null and b/theme/white/images/00_picker_btn_press.png differ
diff --git a/theme/white/images/P02_icon_color.png b/theme/white/images/P02_icon_color.png
new file mode 100644 (file)
index 0000000..23a7fe7
Binary files /dev/null and b/theme/white/images/P02_icon_color.png differ
diff --git a/theme/white/images/P02_icon_color_focus.png b/theme/white/images/P02_icon_color_focus.png
new file mode 100644 (file)
index 0000000..23a7fe7
Binary files /dev/null and b/theme/white/images/P02_icon_color_focus.png differ
diff --git a/theme/white/images/P02_icon_eraser.png b/theme/white/images/P02_icon_eraser.png
new file mode 100644 (file)
index 0000000..ab26f48
Binary files /dev/null and b/theme/white/images/P02_icon_eraser.png differ
diff --git a/theme/white/images/P02_icon_eraser_press.png b/theme/white/images/P02_icon_eraser_press.png
new file mode 100644 (file)
index 0000000..82e1ce1
Binary files /dev/null and b/theme/white/images/P02_icon_eraser_press.png differ
diff --git a/theme/white/images/P02_icon_font_color.png b/theme/white/images/P02_icon_font_color.png
new file mode 100644 (file)
index 0000000..2e9c514
Binary files /dev/null and b/theme/white/images/P02_icon_font_color.png differ
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 (file)
index 0000000..2e75f62
Binary files /dev/null and b/theme/white/images/P02_icon_font_color_press.png differ
diff --git a/theme/white/images/P02_icon_font_size.png b/theme/white/images/P02_icon_font_size.png
new file mode 100644 (file)
index 0000000..b397b98
Binary files /dev/null and b/theme/white/images/P02_icon_font_size.png differ
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 (file)
index 0000000..4966066
Binary files /dev/null and b/theme/white/images/P02_icon_font_size_press.png differ
diff --git a/theme/white/images/P02_icon_stroke.png b/theme/white/images/P02_icon_stroke.png
new file mode 100644 (file)
index 0000000..5a317a8
Binary files /dev/null and b/theme/white/images/P02_icon_stroke.png differ
diff --git a/theme/white/images/P02_icon_stroke_press.png b/theme/white/images/P02_icon_stroke_press.png
new file mode 100644 (file)
index 0000000..5e26ff8
Binary files /dev/null and b/theme/white/images/P02_icon_stroke_press.png differ
diff --git a/theme/white/memo.edc b/theme/white/memo.edc
new file mode 100644 (file)
index 0000000..44a03bb
--- /dev/null
@@ -0,0 +1,23 @@
+/*
+*
+* 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 <../../extend/extended-edc.h>
+
+collections {
+    #include <../common.edc>
+}