Initialize Tizen 2.3 tizen_2.3 2.3a_release submit/tizen_2.3/20140531.101204
authorSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:53:47 +0000 (12:53 +0900)
committerSehong Na <sehong.na@samsung.com>
Sat, 31 May 2014 03:53:47 +0000 (12:53 +0900)
132 files changed:
AUTHORS [new file with mode: 0644]
CMakeLists.txt [new file with mode: 0644]
LICENSE.Flora [new file with mode: 0644]
NOTICE [new file with mode: 0644]
debian/changelog [new file with mode: 0755]
mobileprint/CMakeLists.txt [new file with mode: 0644]
mobileprint/app/CMakeLists.txt [new file with mode: 0644]
mobileprint/app/icon_mobileprint.png [new file with mode: 0644]
mobileprint/app/image_editor_conn.c [new file with mode: 0644]
mobileprint/app/mobileprint.c [new file with mode: 0644]
mobileprint/app/preview_content.c [new file with mode: 0644]
mobileprint/app/pts_common.c [new file with mode: 0644]
mobileprint/app/pts_main_view.c [new file with mode: 0644]
mobileprint/app/pts_print_search.c [new file with mode: 0644]
mobileprint/app/pts_setting_view.c [new file with mode: 0644]
mobileprint/app/pts_util.c [new file with mode: 0644]
mobileprint/edc/genlist_custom.edc [new file with mode: 0644]
mobileprint/edc/mobileprint.edc [new file with mode: 0644]
mobileprint/images/A01_print_popup_icon_Rotate.png [new file with mode: 0644]
mobileprint/images/A01_print_popup_icon_Rotate02.png [new file with mode: 0644]
mobileprint/images/A01_print_popup_icon_print.png [new file with mode: 0644]
mobileprint/images/A01_print_popup_icon_scaling.png [new file with mode: 0644]
mobileprint/images/A01_print_popup_icon_setting.png [new file with mode: 0644]
mobileprint/images/A01_print_popup_icon_size.png [new file with mode: 0644]
mobileprint/include/image_editor_conn.h [new file with mode: 0644]
mobileprint/include/mobileprint.h [new file with mode: 0755]
mobileprint/include/preview_content.h [new file with mode: 0644]
mobileprint/include/pts_common.h [new file with mode: 0755]
mobileprint/include/pts_debug.h [new file with mode: 0755]
mobileprint/include/pts_main_view.h [new file with mode: 0755]
mobileprint/include/pts_setting_view.h [new file with mode: 0755]
mobileprint/include/pts_util.h [new file with mode: 0644]
mobileprint/mobileprint.xml [new file with mode: 0644]
mobileprint/po/CMakeLists.txt [new file with mode: 0755]
mobileprint/po/POTFILES.in [new file with mode: 0755]
mobileprint/po/ar.po [new file with mode: 0644]
mobileprint/po/az.po [new file with mode: 0644]
mobileprint/po/bg.po [new file with mode: 0644]
mobileprint/po/ca.po [new file with mode: 0644]
mobileprint/po/cs.po [new file with mode: 0644]
mobileprint/po/da.po [new file with mode: 0644]
mobileprint/po/de_DE.po [new file with mode: 0644]
mobileprint/po/el_GR.po [new file with mode: 0644]
mobileprint/po/en.po [new file with mode: 0644]
mobileprint/po/en_PH.po [new file with mode: 0644]
mobileprint/po/en_US.po [new file with mode: 0644]
mobileprint/po/es_ES.po [new file with mode: 0644]
mobileprint/po/es_US.po [new file with mode: 0644]
mobileprint/po/et.po [new file with mode: 0644]
mobileprint/po/eu.po [new file with mode: 0644]
mobileprint/po/fi.po [new file with mode: 0644]
mobileprint/po/fr_CA.po [new file with mode: 0644]
mobileprint/po/fr_FR.po [new file with mode: 0644]
mobileprint/po/ga.po [new file with mode: 0644]
mobileprint/po/gl.po [new file with mode: 0644]
mobileprint/po/hi.po [new file with mode: 0644]
mobileprint/po/hr.po [new file with mode: 0644]
mobileprint/po/hu.po [new file with mode: 0644]
mobileprint/po/hy.po [new file with mode: 0644]
mobileprint/po/is.po [new file with mode: 0644]
mobileprint/po/it_IT.po [new file with mode: 0644]
mobileprint/po/ja_JP.po [new file with mode: 0644]
mobileprint/po/ka.po [new file with mode: 0644]
mobileprint/po/kk.po [new file with mode: 0644]
mobileprint/po/ko_KR.po [new file with mode: 0644]
mobileprint/po/lt.po [new file with mode: 0644]
mobileprint/po/lv.po [new file with mode: 0644]
mobileprint/po/mk.po [new file with mode: 0644]
mobileprint/po/mobileprint.pot [new file with mode: 0644]
mobileprint/po/nb.po [new file with mode: 0644]
mobileprint/po/nl_NL.po [new file with mode: 0644]
mobileprint/po/pl.po [new file with mode: 0644]
mobileprint/po/pt_BR.po [new file with mode: 0644]
mobileprint/po/pt_PT.po [new file with mode: 0644]
mobileprint/po/ro.po [new file with mode: 0644]
mobileprint/po/ru_RU.po [new file with mode: 0644]
mobileprint/po/sk.po [new file with mode: 0644]
mobileprint/po/sl.po [new file with mode: 0644]
mobileprint/po/sr.po [new file with mode: 0644]
mobileprint/po/sv.po [new file with mode: 0644]
mobileprint/po/tr_TR.po [new file with mode: 0644]
mobileprint/po/uk.po [new file with mode: 0644]
mobileprint/po/update-po.sh [new file with mode: 0755]
mobileprint/po/uz.po [new file with mode: 0644]
mobileprint/po/zh_CN.po [new file with mode: 0644]
mobileprint/po/zh_HK.po [new file with mode: 0644]
mobileprint/po/zh_SG.po [new file with mode: 0644]
mobileprint/po/zh_TW.po [new file with mode: 0644]
mobileprint/preview_engine/CMakeLists.txt [new file with mode: 0644]
mobileprint/preview_engine/include/preview_engine.h [new file with mode: 0644]
mobileprint/preview_engine/include/preview_model.h [new file with mode: 0644]
mobileprint/preview_engine/include/preview_task_model.h [new file with mode: 0644]
mobileprint/preview_engine/lib/CMakeLists.txt [new file with mode: 0644]
mobileprint/preview_engine/lib/preview_engine.c [new file with mode: 0644]
mobileprint/preview_engine/lib/preview_model.c [new file with mode: 0644]
mobileprint/preview_engine/lib/preview_task_model.c [new file with mode: 0644]
mobileprint/previewgen/CMakeLists.txt [new file with mode: 0644]
mobileprint/previewgen/default.ppd [new file with mode: 0644]
mobileprint/previewgen/include/evas_render.h [new file with mode: 0644]
mobileprint/previewgen/include/image_scaler.h [new file with mode: 0644]
mobileprint/previewgen/include/page_preview.h [new file with mode: 0644]
mobileprint/previewgen/include/paper_size.h [new file with mode: 0644]
mobileprint/previewgen/include/pdfgen.h [new file with mode: 0644]
mobileprint/previewgen/include/pgen_debug.h [new file with mode: 0644]
mobileprint/previewgen/include/preview_coords.h [new file with mode: 0644]
mobileprint/previewgen/include/preview_util.h [new file with mode: 0644]
mobileprint/previewgen/include/previewgen.h [new file with mode: 0644]
mobileprint/previewgen/lib/CMakeLists.txt [new file with mode: 0644]
mobileprint/previewgen/lib/evas_render.c [new file with mode: 0644]
mobileprint/previewgen/lib/image_scaler.c [new file with mode: 0644]
mobileprint/previewgen/lib/page_preview.c [new file with mode: 0644]
mobileprint/previewgen/lib/paper_size.c [new file with mode: 0644]
mobileprint/previewgen/lib/pdfgen.c [new file with mode: 0644]
mobileprint/previewgen/lib/preview_coords.c [new file with mode: 0644]
mobileprint/previewgen/lib/preview_util.c [new file with mode: 0644]
mobileprint/previewgen/lib/previewgen.c [new file with mode: 0644]
mobileprint/previewgen/util/CMakeLists.txt [new file with mode: 0644]
mobileprint/previewgen/util/main.c [new file with mode: 0644]
mobileprint/smsc/CMakeLists.txt [new file with mode: 0644]
mobileprint/smsc/include/smsc_control.h [new file with mode: 0644]
mobileprint/smsc/include/smsc_debug.h [new file with mode: 0644]
mobileprint/smsc/include/smsc_position.h [new file with mode: 0644]
mobileprint/smsc/include/smsc_smart.h [new file with mode: 0644]
mobileprint/smsc/include/smsc_widget.h [new file with mode: 0644]
mobileprint/smsc/lib/CMakeLists.txt [new file with mode: 0644]
mobileprint/smsc/lib/smsc_control.c [new file with mode: 0644]
mobileprint/smsc/lib/smsc_position.c [new file with mode: 0644]
mobileprint/smsc/lib/smsc_smart.c [new file with mode: 0644]
mobileprint/smsc/lib/smsc_widget.c [new file with mode: 0644]
org.tizen.mobileprint.manifest [new file with mode: 0644]
org.tizen.mobileprint.rule [new file with mode: 0644]
packaging/mobileprint.spec [new file with mode: 0644]

diff --git a/AUTHORS b/AUTHORS
new file mode 100644 (file)
index 0000000..16d062b
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,8 @@
+GangHeok Kim <gangheok.kim@samsung.com>
+Taeksu Shin <taeksu.shin@samsung.com>
+Dongwook Lee <dwmax.lee@samsung.com>
+Oleg Lekarev <o.lekarev@samsung.com>
+Dmitriy Gonzha <d.gonzha@samsung.com>
+Timofei Khirianov <t.khirianov@samsung.com>
+Ilya Mankaev <i.mankaev@samsung.com>
+Victor Malov <v.malov@samsung.com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100644 (file)
index 0000000..e7bdab1
--- /dev/null
@@ -0,0 +1,32 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED 
+                                       elementary 
+                                       appcore-efl
+                                       bundle
+                                       syspopup-caller
+                                       glib-2.0
+                                       ecore
+                                       eina
+                                       ecore-input
+                                       ecore-x
+                                       evas
+                                       dlog
+                                       edje
+                                       print-service   
+                                       ui-gadget-1
+                                       appsvc
+                                       capi-appfw-application
+                                       vconf
+                                       notification
+                                       pmapi
+                                       sysman
+                                       efl-assist
+                                       )
+                    
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag} -fdata-sections -ffunction-sections -Wl,--gc-sections")
+ENDFOREACH(flag)                    
+
+ADD_SUBDIRECTORY(mobileprint)
diff --git a/LICENSE.Flora b/LICENSE.Flora
new file mode 100644 (file)
index 0000000..4a0af40
--- /dev/null
@@ -0,0 +1,206 @@
+Flora License
+
+Version 1.1, April, 2013
+
+http://floralicense.org/license/
+
+TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
+
+1. Definitions.
+
+"License" shall mean the terms and conditions for use, reproduction,
+and distribution as defined by Sections 1 through 9 of this document.
+
+"Licensor" shall mean the copyright owner or entity authorized by
+the copyright owner that is granting the License.
+
+"Legal Entity" shall mean the union of the acting entity and
+all other entities that control, are controlled by, or are
+under common control with that entity. For the purposes of
+this definition, "control" means (i) the power, direct or indirect,
+to cause the direction or management of such entity,
+whether by contract or otherwise, or (ii) ownership of fifty percent (50%)
+or more of the outstanding shares, or (iii) beneficial ownership of
+such entity.
+
+"You" (or "Your") shall mean an individual or Legal Entity
+exercising permissions granted by this License.
+
+"Source" form shall mean the preferred form for making modifications,
+including but not limited to software source code, documentation source,
+and configuration files.
+
+"Object" form shall mean any form resulting from mechanical
+transformation or translation of a Source form, including but
+not limited to compiled object code, generated documentation,
+and conversions to other media types.
+
+"Work" shall mean the work of authorship, whether in Source or Object form,
+made available under the License, as indicated by a copyright notice
+that is included in or attached to the work (an example is provided
+in the Appendix below).
+
+"Derivative Works" shall mean any work, whether in Source or Object form,
+that is based on (or derived from) the Work and for which the editorial
+revisions, annotations, elaborations, or other modifications represent,
+as a whole, an original work of authorship. For the purposes of this License,
+Derivative Works shall not include works that remain separable from,
+or merely link (or bind by name) to the interfaces of, the Work and
+Derivative Works thereof.
+
+"Contribution" shall mean any work of authorship, including the original
+version of the Work and any modifications or additions to that Work or
+Derivative Works thereof, that is intentionally submitted to Licensor
+for inclusion in the Work by the copyright owner or by an individual or
+Legal Entity authorized to submit on behalf of the copyright owner.
+For the purposes of this definition, "submitted" means any form of
+electronic, verbal, or written communication sent to the Licensor or
+its representatives, including but not limited to communication on
+electronic mailing lists, source code control systems, and issue
+tracking systems that are managed by, or on behalf of, the Licensor
+for the purpose of discussing and improving the Work, but excluding
+communication that is conspicuously marked or otherwise designated
+in writing by the copyright owner as "Not a Contribution."
+
+"Contributor" shall mean Licensor and any individual or Legal Entity
+on behalf of whom a Contribution has been received by Licensor and
+subsequently incorporated within the Work.
+
+"Tizen Certified Platform" shall mean a software platform that complies
+with the standards set forth in the Tizen Compliance Specification
+and passes the Tizen Compliance Tests as defined from time to time
+by the Tizen Technical Steering Group and certified by the Tizen
+Association or its designated agent.
+
+2. Grant of Copyright License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+copyright license to reproduce, prepare Derivative Works of,
+publicly display, publicly perform, sublicense, and distribute the
+Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License.  Subject to the terms and conditions of
+this License, each Contributor hereby grants to You a perpetual,
+worldwide, non-exclusive, no-charge, royalty-free, irrevocable
+(except as stated in this section) patent license to make, have made,
+use, offer to sell, sell, import, and otherwise transfer the Work
+solely as incorporated into a Tizen Certified Platform, where such
+license applies only to those patent claims licensable by such
+Contributor that are necessarily infringed by their Contribution(s)
+alone or by combination of their Contribution(s) with the Work solely
+as incorporated into a Tizen Certified Platform to which such
+Contribution(s) was submitted. If You institute patent litigation
+against any entity (including a cross-claim or counterclaim
+in a lawsuit) alleging that the Work or a Contribution incorporated
+within the Work constitutes direct or contributory patent infringement,
+then any patent licenses granted to You under this License for that
+Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution.  You may reproduce and distribute copies of the
+Work or Derivative Works thereof pursuant to the copyright license
+above, in any medium, with or without modifications, and in Source or
+Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works
+     a copy of this License; and
+  2. You must cause any modified files to carry prominent notices stating
+     that You changed the files; and
+  3. You must retain, in the Source form of any Derivative Works that
+     You distribute, all copyright, patent, trademark, and attribution
+     notices from the Source form of the Work, excluding those notices
+     that do not pertain to any part of the Derivative Works; and
+  4. If the Work includes a "NOTICE" text file as part of its distribution,
+     then any Derivative Works that You distribute must include a readable
+     copy of the attribution notices contained within such NOTICE file,
+     excluding those notices that do not pertain to any part of
+     the Derivative Works, in at least one of the following places:
+     within a NOTICE text file distributed as part of the Derivative Works;
+     within the Source form or documentation, if provided along with the
+     Derivative Works; or, within a display generated by the Derivative Works,
+     if and wherever such third-party notices normally appear.
+     The contents of the NOTICE file are for informational purposes only
+     and do not modify the License. You may add Your own attribution notices
+     within Derivative Works that You distribute, alongside or as an addendum
+     to the NOTICE text from the Work, provided that such additional attribution
+     notices cannot be construed as modifying the License. You may add Your own
+     copyright statement to Your modifications and may provide additional or
+     different license terms and conditions for use, reproduction, or
+     distribution of Your modifications, or for any such Derivative Works
+     as a whole, provided Your use, reproduction, and distribution of
+     the Work otherwise complies with the conditions stated in this License
+     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 [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.1 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://floralicense.org/license/
+
+   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..970ec4a
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,4 @@
+Copyright (c) 2012 Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Flora License, Version 1.1
+Please, see the LICENSE.Flora file for Flora License, Version 1.1 terms and conditions.
+
diff --git a/debian/changelog b/debian/changelog
new file mode 100755 (executable)
index 0000000..294e129
--- /dev/null
@@ -0,0 +1,1416 @@
+mobileprint (0.2.24-1) unstable; urgency=low
+
+  * Changed default empty image
+  * Git: apps/home/mobileprint
+  * Tag: mobileprint_0.2.24-1
+
+ -- gpeegpee <gpeegpee@gpeegpee-desktop>  Fri, 26 Jul 2013 11:46:49 +0900
+
+mobileprint (0.2.23-1) unstable; urgency=low
+
+  * Changed popup button from positive/negative to negative/positive
+  * Git: apps/home/mobileprint
+  * Tag: mobileprint_0.2.23-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 17 Jul 2013 17:39:14 +0900
+
+mobileprint (0.2.22-1) unstable; urgency=low
+
+  * Fixed prevent defects
+  * Git: apps/home/mobileprint
+  * Tag: mobileprint_0.2.22-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 15 Jul 2013 17:58:17 +0900
+
+mobileprint (0.2.21-1) unstable; urgency=low
+
+  * Clean up for tizen 2.1 source open
+  * Refactored structure
+  * Updated refresh position of printer list popup to follow latest UX
+  * Git: apps/home/mobileprint
+  * Tag: mobileprint_0.2.21-1
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 29 Mar 2013 22:36:32 +0900
+
+mobileprint (0.2.20-1) unstable; urgency=low
+
+  * Fixed Jira issues(S1-12503,S1-12482) by SRR
+  * Show refresh btn for 1st searching (workaround by different searching result)
+  * Show cancel btn for 1 page printing
+  * Added current page printing
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.20-1
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 23 Mar 2013 11:35:47 +0900
+
+mobileprint (0.2.19-1) unstable; urgency=low
+
+  * Removed unnecessary smack permission
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.19-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 20 Mar 2013 16:41:19 +0900
+
+mobileprint (0.2.18-1) unstable; urgency=low
+
+  * Code clean-up
+  * Added test code for multi contents
+  * Added missing commit to fix build error(undefined symbol of ptdb)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.18-1
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Mon, 18 Mar 2013 15:29:18 +0900
+
+mobileprint (0.2.17-11) unstable; urgency=low
+
+  * Applied SRR patches (screen reader, getppd API, multiple images support, prevent fix)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-11
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 14 Mar 2013 23:35:51 +0900
+
+mobileprint (0.2.17-10) unstable; urgency=low
+
+  * Changed to show dimming list for unsupported printer
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-10
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 28 Feb 2013 17:58:59 +0900
+
+mobileprint (0.2.17-9) unstable; urgency=low
+
+  * Added work-around solution fixing that printing thread is not called
+  * Fixed smack incorrect label
+  * - wifi-direct-popup is changed to org.tizen.wifi-direct-popup
+  * - stest-service label is added for UI application dump
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-9
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 25 Feb 2013 17:43:13 +0900
+
+mobileprint (0.2.17-8) unstable; urgency=low
+
+  * Removed org.tizen.usb-printer-detector package
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-8
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 18 Feb 2013 13:35:54 +0900
+
+mobileprint (0.2.17-7) unstable; urgency=low
+
+  * SMACK rules updated
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-7
+
+ -- Danny Jeongseok Seo <s.seo@samsung.com>  Thu, 14 Feb 2013 21:48:34 +0900
+
+mobileprint (0.2.17-6) unstable; urgency=low
+
+  * Fixed wrong 2pages-in-one-sheet in scaling by SRR
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-6
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 12 Feb 2013 17:51:33 +0900
+
+mobileprint (0.2.17-5) unstable; urgency=low
+
+  * Fixed wrong loading animation in smooth scroll by SRR
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-5
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 12 Feb 2013 15:03:39 +0900
+
+mobileprint (0.2.17-4) unstable; urgency=low
+
+  * Updated wifi-direct-ug routine to support WFDS Print
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-4
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 08 Feb 2013 17:03:04 +0900
+
+mobileprint (0.2.17-3) unstable; urgency=low
+
+  * Fixed S1-12189(total page to support multiple copies)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-3
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 05 Feb 2013 20:26:17 +0900
+
+mobileprint (0.2.17-2) unstable; urgency=low
+
+  * Smack rule updated
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-2
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 01 Feb 2013 14:09:51 +0900
+
+mobileprint (0.2.17-1) unstable; urgency=low
+
+  * Fixed ISE showing issue in custom_popup
+  * Fixed flickering issue in preview screen
+  * Fixed top white space when back from custom_popup
+  * Fixed conformant operation for ISE showing
+  * Fixed rotation checking routine for mixed scenario
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.17-1
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 29 Jan 2013 20:33:48 +0900
+
+mobileprint (0.2.16-10) unstable; urgency=low
+
+  * Fixed wrong progress routine after disabled page number correction
+  * Changed edc value of progress popup
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-10
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 25 Jan 2013 23:10:12 +0900
+
+mobileprint (0.2.16-9) unstable; urgency=low
+
+  * Don't use page number correction(P130107-3058)
+  * Added dummy noti id checking when try to terminate app
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-9
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 25 Jan 2013 17:21:22 +0900
+
+mobileprint (0.2.16-8) unstable; urgency=low
+
+  * Fixed cancel crash caused by temp files cleaning routine
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-8
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sun, 20 Jan 2013 10:06:02 +0900
+
+mobileprint (0.2.16-7) unstable; urgency=low
+
+  * Applied temp files cleaning routine after app terminated
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-7
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 18 Jan 2013 22:37:40 +0900
+
+mobileprint (0.2.16-6) unstable; urgency=low
+
+  * Changed app directory(/opt/usr/apps -> /usr/apps)
+  * Read-only data is used in /usr/apps
+  * Read-Write data is used in /opt/usr/apps/data
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-6
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 18 Jan 2013 14:15:32 +0900
+
+mobileprint (0.2.16-5) unstable; urgency=low
+
+  * Changed Flora license url
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-5
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 17 Jan 2013 18:04:24 +0900
+
+mobileprint (0.2.16-4) unstable; urgency=low
+
+  * Fixed that printer list popup height is shown above screen
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-4
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 16 Jan 2013 20:46:01 +0900
+
+mobileprint (0.2.16-3) unstable; urgency=low
+
+  * Applied code clean up and fixed img preview failed bug (SMRC)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-3
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 15 Jan 2013 22:45:48 +0900
+
+mobileprint (0.2.16-1) unstable; urgency=low
+
+  * Changed preview-engine architecture from ecore_thread to ecore_exe(P121213-2630)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.16-1
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Mon, 14 Jan 2013 17:20:43 +0900
+
+mobileprint (0.2.15-54) unstable; urgency=low
+
+  * Updated job processing routine in case of exception scenario
+  * Fixed PLM issues
+  * Disabled taskmanage
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-54
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 02 Jan 2013 20:50:28 +0900
+
+mobileprint (0.2.15-53) unstable; urgency=low
+
+  * Applied GUI icon images
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-53
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 21 Dec 2012 16:01:41 +0900
+
+mobileprint (0.2.15-52) unstable; urgency=low
+
+  * Changed log macro
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-52
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 17 Dec 2012 23:15:31 +0900
+
+mobileprint (0.2.15-51) unstable; urgency=low
+
+  * Updated no found popup routine
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-51
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 13 Dec 2012 19:24:04 +0900
+
+mobileprint (0.2.15-50) unstable; urgency=low
+
+  * Fixed the bug that preview is failed initially
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-50
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 07 Dec 2012 16:30:28 +0900
+
+mobileprint (0.2.15-49) unstable; urgency=low
+
+  * Updated Tag for SR
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-49
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 06 Dec 2012 20:44:10 +0900
+
+mobileprint (0.2.15-48) unstable; urgency=low
+
+  * Updated Tag for SR
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-48
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 05 Dec 2012 14:37:20 +0900
+
+mobileprint (0.2.15-47) unstable; urgency=low
+
+  * Updated display routine for printer label information
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-47
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 04 Dec 2012 22:18:49 +0900
+
+mobileprint (0.2.15-46) unstable; urgency=low
+
+  * Modified updating routine of printer label
+  * Applied min_menustyle in printer list popup
+  * Applied refresh button in printer list popup
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-46
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 24 Nov 2012 20:34:17 +0900
+
+mobileprint (0.2.15-45) unstable; urgency=low
+
+  * Fixed routine to show copies ctx popup in new conformant policy
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-45
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 23 Nov 2012 17:30:59 +0900
+
+mobileprint (0.2.15-44) unstable; urgency=low
+
+  * Applied custom theme of genlist item style to follow custom popup UX
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-44
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 15 Nov 2012 22:45:01 +0900
+
+mobileprint (0.2.15-43) unstable; urgency=low
+
+  * Update version to SR
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-43
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 13 Nov 2012 20:13:04 +0900
+
+mobileprint (0.2.15-42) unstable; urgency=low
+
+  * Modified get_file_type function
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-42
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 09 Nov 2012 19:47:09 +0900
+
+mobileprint (0.2.15-41) unstable; urgency=low
+
+  * Fixed to support desktop mode
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-41
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 07 Nov 2012 13:43:11 +0900
+
+mobileprint (0.2.15-40) unstable; urgency=low
+
+  * Fixed color option crash by garbage value
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-40
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 03 Nov 2012 20:13:53 +0900
+
+mobileprint (0.2.15-39) unstable; urgency=low
+
+  * Applied mobile print UX 2.0 based on new winset
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-39
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 03 Nov 2012 14:42:49 +0900
+
+mobileprint (0.2.15-38) unstable; urgency=low
+
+  * Fixed prevent error
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-38
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 02 Nov 2012 18:28:07 +0900
+
+mobileprint (0.2.15-37) unstable; urgency=low
+
+  * Fixed PLM issue (P121025-5769)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-37
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 02 Nov 2012 00:41:31 +0900
+
+mobileprint (0.2.15-36) unstable; urgency=low
+
+  * Fixed to show setting view
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-36
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 01 Nov 2012 23:17:48 +0900
+
+mobileprint (0.2.15-35) unstable; urgency=low
+
+  * Applied New indicator
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-35
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 01 Nov 2012 00:05:29 +0900
+
+mobileprint (0.2.15-34) unstable; urgency=low
+
+  * Changed directory(/opt -> /opt/usr)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-34
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 29 Oct 2012 18:33:40 +0900
+
+mobileprint (0.2.15-33) unstable; urgency=low
+
+  * Unified job progress routine
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-33
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 27 Oct 2012 16:36:52 +0900
+
+mobileprint (0.2.15-32) unstable; urgency=low
+
+  * Fixed PLM issues (P121025-5719, P121025-5720)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-32
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 26 Oct 2012 16:31:27 +0900
+
+mobileprint (0.2.15-31) unstable; urgency=low
+
+  * Changed vconf key value(VCONFKEY_SYSMEN... -> VCONFKEY_SYSMAN...)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-31
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 24 Oct 2012 14:29:00 +0900
+
+mobileprint (0.2.15-30) unstable; urgency=low
+
+  * Fixed crash in seleting printer in lists
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-30
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 23 Oct 2012 14:39:03 +0900
+
+mobileprint (0.2.15-29) unstable; urgency=low
+
+  * Recovered previous height value of custom popup
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-29
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 19 Oct 2012 18:47:18 +0900
+
+mobileprint (0.2.15-28) unstable; urgency=low
+
+  * Deleted smack rules
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-28
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 16 Oct 2012 15:30:00 +0900
+
+mobileprint (0.2.15-27) unstable; urgency=low
+
+  * Fixed smack manifest
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-27
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 15 Oct 2012 11:25:37 +0900
+
+mobileprint (0.2.15-26) unstable; urgency=low
+
+  * Fixed that after canceling custom size, preview image is changed to custom size
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-26
+
+ -- GangHeok Kim <gangheok.kim@samsung.comO>  Fri, 12 Oct 2012 21:26:44 +0900
+
+mobileprint (0.2.15-25) unstable; urgency=low
+
+  * Fixed custom size popup height
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-25
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 12 Oct 2012 21:11:29 +0900
+
+mobileprint (0.2.15-24) unstable; urgency=low
+
+  * Applied image custom size printing
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-24
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 12 Oct 2012 17:19:14 +0900
+
+mobileprint (0.2.15-23) unstable; urgency=low
+
+  * Added license file
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-23
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 12 Oct 2012 10:54:39 +0900
+
+mobileprint (0.2.15-22) unstable; urgency=low
+
+  * Code Clean up
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-22
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 10 Oct 2012 19:37:19 +0900
+
+mobileprint (0.2.15-21) unstable; urgency=low
+
+  * Applied SLP Coding Style
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-21
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 08 Oct 2012 11:08:17 +0900
+
+mobileprint (0.2.15-20) unstable; urgency=low
+
+  * Fixed CCR issues(17085, 17530)
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-20
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 04 Oct 2012 18:29:11 +0900
+
+mobileprint (0.2.15-19) unstable; urgency=low
+
+  * Applied image size printing without custom
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-19
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 27 Sep 2012 16:29:17 +0900
+
+mobileprint (0.2.15-18) unstable; urgency=low
+
+  * Added domain request in smack manifest file
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-18
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 21 Sep 2012 16:46:43 +0900
+
+mobileprint (0.2.15-17) unstable; urgency=low
+
+  * Added smack manifest file
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-17
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 21 Sep 2012 14:35:19 +0900
+
+mobileprint (0.2.15-16) unstable; urgency=low
+
+  * Added exception of HP printer modelname that include "Hewlett-Packard"
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-16
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 11 Sep 2012 15:53:34 +0900
+
+mobileprint (0.2.15-15) unstable; urgency=low
+
+  * Changed system() to popen or fork/exec function because of security
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-15
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 11 Sep 2012 13:39:47 +0900
+
+mobileprint (0.2.15-14) unstable; urgency=low
+
+  * Added pt_files field in job_spooling to do proper spooling operation
+  * Fixed compilation warning
+  * Added n_up field in job_spooling
+  * Fixed some crash by missed parameter checking
+  * Changed time of hiding main view to get better UX
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-14
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 06 Sep 2012 21:47:36 +0900
+
+mobileprint (0.2.15-13) unstable; urgency=low
+
+  * Fixed total page numer of quickpanel notification in case of n-up scenario
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-13
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 05 Sep 2012 16:59:55 +0900
+
+mobileprint (0.2.15-12) unstable; urgency=low
+
+  * Changed appsvc string to appcontrol
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-12
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 04 Sep 2012 21:38:23 +0900
+
+mobileprint (0.2.15-11) unstable; urgency=low
+
+  * Fixed incorrect size_popup/custom popup height in rotating
+  * Fixed crash in exiting mobileprint
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-11
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 04 Sep 2012 13:40:37 +0900
+
+mobileprint (0.2.15-10) unstable; urgency=low
+
+  * Changed updating notification routine
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-10
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Mon, 03 Sep 2012 20:29:29 +0900
+
+mobileprint (0.2.15-9) unstable; urgency=low
+
+  * Fixed n-up printing for PDF document
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-9
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 03 Sep 2012 14:58:40 +0900
+
+mobileprint (0.2.15-8) unstable; urgency=low
+
+  * Recover wrongly reverted page update routine
+  * Added dummy notification during image converting time
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-8
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Mon, 03 Sep 2012 14:00:11 +0900
+
+mobileprint (0.2.15-7) unstable; urgency=low
+
+  * Updated tag value for SR
+  * Updated page count routine for printing
+  * Added termination routine in case of no more job
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-7
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sun, 02 Sep 2012 03:44:59 +0900
+
+mobileprint (0.2.15-6) unstable; urgency=low
+
+  * Updated page count routine
+  * Changed printer searching UX from view to popup in setting view
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-6
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 01 Sep 2012 18:48:00 +0900
+
+mobileprint (0.2.15-5) unstable; urgency=low
+
+  * Updated page count routine of job spooling to show properly in case of multiple page pdf
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-5
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 31 Aug 2012 19:11:25 +0900
+
+mobileprint (0.2.15-4) unstable; urgency=low
+
+  * Updated 51 languages po file
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-4
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 31 Aug 2012 13:55:06 +0900
+
+mobileprint (0.2.15-3) unstable; urgency=low
+
+  * Fixed popup height to change according to genlist item
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.15-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 31 Aug 2012 12:08:56 +0900
+
+mobileprint (0.2.14-3) unstable; urgency=low
+
+  * Fixed to show incorrect printer name in connecting USB printer
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.14-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 27 Aug 2012 19:57:51 +0900
+
+mobileprint (0.2.13-3) unstable; urgency=low
+
+  * Added removing routine of job_spooling_list
+  * Updated notification routine
+  * Fixed display bug between waiting and printing
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.13-3
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 25 Aug 2012 20:48:56 +0900
+
+mobileprint (0.2.13-2) unstable; urgency=low
+
+  * Updated job spooling routine
+  * Fixed crash bug of usb-printer-detector
+  * Git: magnolia/apps/home/mobileprint
+  * Tag: mobileprint_0.2.13-2
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 24 Aug 2012 18:36:02 +0900
+
+mobileprint (0.2.13-1) unstable; urgency=low
+
+  * Printer searching flow is modified. Cleanup warning.
+  * Git: magnolia/apps/home/mobileprint.
+  * Tag: mobileprint_0.2.13-1
+
+ -- Dongwook Lee <dwmax.lee@samsung.com>  Mon, 20 Aug 2012 01:07:29 +0900
+
+mobileprint (0.2.12-5) unstable; urgency=low
+
+  * Applied ecore main loop pause/resume routine for safe evas operation in thread
+  * Updated custom size popup to follow UX
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.12-5
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Mon, 20 Aug 2012 17:42:48 +0900
+
+mobileprint (0.2.12-4) unstable; urgency=low
+
+  * Changed to use cups usb backend to get usb printer name instead of usb-devices utility.
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.12-4
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Sat, 18 Aug 2012 19:48:29 +0900
+
+mobileprint (0.2.12-3) unstable; urgency=low
+
+  * Replace contextpopup, "timepicker", with "datetime/default" according to EFL team's recommandation.
+  * "timepicker" style does not have "dismiss" event, which is causing ctxpot is not disappeared when it loose focus.
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.12-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 17 Aug 2012 00:33:26 +0900
+
+mobileprint (0.2.12-2) unstable; urgency=low
+
+  * Added epson printer paper size case
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.12-2
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 13 Aug 2012 11:18:38 +0900
+
+mobileprint (0.2.12-1) unstable; urgency=low
+
+  * Fixed setting view bug
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.12-1
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sun, 12 Aug 2012 22:50:51 +0900
+
+mobileprint (0.2.11-21) unstable; urgency=low
+
+  * Disabled to show main-view in wifi-qs case
+  * Added NULL check routine in preview source
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-21
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 10 Aug 2012 14:44:08 +0900
+
+mobileprint (0.2.11-20) unstable; urgency=low
+
+  * Fixed PLM defect(P120806-3900) that mobileprint was crashed in search printer popup after rotating device
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-20
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 10 Aug 2012 14:25:56 +0900
+
+mobileprint (0.2.11-19) unstable; urgency=low
+
+  * Added printer image for mobileprint noti
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-19
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 10 Aug 2012 13:16:37 +0900
+
+mobileprint (0.2.11-18) unstable; urgency=low
+
+  * Applied winset GUI guide(margin, title Uppercase, ctxpopup)
+  * Removed unused image file
+  * Changed edc for whilt bg color
+  * Changed tickernoti position to top of screen
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-18
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 08 Aug 2012 18:37:09 +0900
+
+mobileprint (0.2.11-17) unstable; urgency=low
+
+  * Applied new printing progress UX
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-17
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 08 Aug 2012 00:34:59 +0900
+
+mobileprint (0.2.11-16) unstable; urgency=low
+
+  * Fixed issue that mobileprint is crashed in changing orientation after set size option.
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-16
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 07 Aug 2012 18:00:24 +0900
+
+mobileprint (0.2.11-15) unstable; urgency=low
+
+  * Fixed missing winset popup button style in custom size popup and size popup
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-15
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 07 Aug 2012 09:38:52 +0900
+
+mobileprint (0.2.11-14) unstable; urgency=low
+
+  * Added USB printer device name
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-14
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 07 Aug 2012 00:21:57 +0900
+
+mobileprint (0.2.11-13) unstable; urgency=low
+
+  * Fixed winset popup button color and Changed print setting option according
+    to UX Guide
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-13
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 06 Aug 2012 17:46:35 +0900
+
+mobileprint (0.2.11-12) unstable; urgency=low
+
+  * Applied scaling preview when selected predefiend size in size popup
+  * Recovered UG_INIT_EFL to launch UG properly
+  * Fixed radio button set bug of size popup in case of cancelation
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-12
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 03 Aug 2012 21:52:45 +0900
+
+mobileprint (0.2.11-11) unstable; urgency=low
+
+  * fixed PLM defect(P120802-4098) that do not check device orientation in launching
+  * fixed that mobileprint is not raised when mobileprint is called by app_service in background
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-11
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 02 Aug 2012 20:46:19 +0900
+
+mobileprint (0.2.11-10) unstable; urgency=low
+
+  * Changed appfw manifest install directory
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-10
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 01 Aug 2012 11:21:27 +0900
+
+mobileprint (0.2.11-9) unstable; urgency=low
+
+  * Applied appfw manifest
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-9
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 31 Jul 2012 11:17:04 +0900
+
+mobileprint (0.2.11-8) unstable; urgency=low
+
+  * Fixed elm_win_alpha_set bug in case of runtime changing
+  * Applied WEB type UX change
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-8
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Sun, 29 Jul 2012 13:27:11 +0900
+
+mobileprint (0.2.11-7) unstable; urgency=low
+
+  * Enabled scaling button in main view
+  * Fixed not expandable bug of setting view
+  * Fixed shrinked bug of top/bottom menu in case of landscape mode
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-7
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 26 Jul 2012 23:52:50 +0900
+
+mobileprint (0.2.11-6) unstable; urgency=low
+
+  * Applied multi-threaded multi-page preview generation patch of SMRC
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-6
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 24 Jul 2012 19:49:53 +0900
+
+mobileprint (0.2.11-5) unstable; urgency=low
+
+  * Fixed to use DLOG for normal developer
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.11-5
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 24 Jul 2012 14:17:53 +0900
+
+mobileprint (0.2.10-5) unstable; urgency=low
+
+  * Updated and Disabled appfw manifest file(com.samsung.mobileprint.xml / com.samsung.usb-printer-detector.xml)
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.10-5
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 23 Jul 2012 20:53:47 +0900
+
+mobileprint (0.2.10-4) unstable; urgency=low
+
+  * Applied new UX 2nd time
+  * Fixed landscape BS
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.10-4
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 21 Jul 2012 05:52:10 +0900
+
+mobileprint (0.2.10-3) unstable; urgency=low
+
+  * Applied new UX
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.10-3
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 19 Jul 2012 20:22:54 +0900
+
+mobileprint (0.2.10-2) unstable; urgency=low
+
+  * Applied new ui-gadget package
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.10-2
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 19 Jul 2012 19:44:33 +0900
+
+mobileprint (0.2.10-1) unstable; urgency=low
+
+  * Disabled auto rotation for new UX
+  * Replaced printer name label from optionheader(winset) to normal content
+  * Disabled file browse popup in case of USB OTG
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.10-1
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 17 Jul 2012 10:18:44 +0900
+
+mobileprint (0.2.9-22) unstable; urgency=low
+
+  * Applied new tag for OBS SR
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.9-22
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 11 Jul 2012 21:19:15 +0900
+
+mobileprint (0.2.9-21) unstable; urgency=low
+
+  * Fixed epson filter crash in case of unsupported papaer size
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.9-21
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 11 Jul 2012 18:05:53 +0900
+
+mobileprint (0.2.9-20) unstable; urgency=low
+
+  * Fixed some jira defects
+  * Applied new UX
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.9-20
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 10 Jul 2012 11:10:24 +0900
+
+mobileprint (0.2.9-19) unstable; urgency=low
+
+  * Fixed to accept filetype as app_service argument
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.9-19
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 05 Jul 2012 21:36:32 +0900
+
+mobileprint (0.2.8-18) unstable; urgency=low
+
+  * Fixed crash by wrong checking routine of paper size for preview generation
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-18
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 04 Jul 2012 21:51:04 +0900
+
+mobileprint (0.2.8-17) unstable; urgency=low
+
+  * Changed wifi operation from wifi-efl-UG to wifi-qs
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-17
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 04 Jul 2012 13:58:21 +0900
+
+mobileprint (0.2.8-16) unstable; urgency=low
+
+  * Disabled new preview generation during printing state until spooling feature is applied.
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-16
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 30 Jun 2012 16:14:49 +0900
+
+mobileprint (0.2.8-15) unstable; urgency=low
+
+  * Updated manifest for maintaining and disabled manifest
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-15
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 26 Jun 2012 20:50:53 +0900
+
+mobileprint (0.2.8-14) unstable; urgency=low
+
+  * libpreviewgen speed-up hack by decreasing resolutions
+  * Print settings menu bugfixes
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-14
+
+ -- Dmitriy Gonzha <d.gonzha@samsung.com>  Fri, 22 Jun 2012 18:56:31 +0400
+
+mobileprint (0.2.8-13) unstable; urgency=low
+
+  * Fixed some wrong used parameter and compilation warning
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-13
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 21 Jun 2012 23:41:50 +0900
+
+mobileprint (0.2.8-12) unstable; urgency=low
+
+  * Applied preview and setting patch of SMRC
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-12
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 19 Jun 2012 01:11:50 +0900
+
+mobileprint (0.2.8-11) unstable; urgency=low
+
+  * Fixed preview reset bug when launched by printing progress noti
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-11
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 16 Jun 2012 00:18:59 +0900
+
+mobileprint (0.2.8-10) unstable; urgency=low
+
+  * Fixed preview generation bug in case of white space included file
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-10
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 15 Jun 2012 19:45:00 +0900
+
+mobileprint (0.2.8-9) unstable; urgency=low
+
+  * Fixed preview options(i.e. fit-to-page and gray) in case of no active printer
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-9
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Thu, 14 Jun 2012 17:47:16 +0900
+
+mobileprint (0.2.8-8) unstable; urgency=low
+
+  * Fixed preview image checking bug in case of used capital letter
+  * Commented out smack manifest field of spec file until policy is activated
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-8
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Wed, 13 Jun 2012 10:59:36 +0900
+
+mobileprint (0.2.8-7) unstable; urgency=low
+
+  * Applied smack labeling
+  * Removed unused commented codes
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-7
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 09 Jun 2012 01:26:35 +0900
+
+mobileprint (0.2.8-6) unstable; urgency=low
+
+  * Fixed cancel routine to remove spooling job progress noti
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-6
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 08 Jun 2012 22:52:12 +0900
+
+mobileprint (0.2.8-5) unstable; urgency=low
+
+  * Fixed wrong update of USB printer noti
+  * Applied printer icon
+  * Fixed compilation warnings
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-5
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 08 Jun 2012 15:35:14 +0900
+
+mobileprint (0.2.8-4) unstable; urgency=low
+
+  * Applied SMRC preview patch for gray
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-4
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 05 Jun 2012 20:30:22 +0900
+
+mobileprint (0.2.8-3) unstable; urgency=low
+
+  * Applied SMRC preview patch
+  * Updated UPD string
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-3
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Sat, 02 Jun 2012 14:44:40 +0900
+
+mobileprint (0.2.8-2) unstable; urgency=low
+
+  * Applied latest SMRC patch to support PDF preview and setting operation
+  * Updated UI based on UX document
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-2
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 01 Jun 2012 17:43:18 +0900
+
+mobileprint (0.2.8-1) unstable; urgency=low
+
+  * Changed elm_win_activate() to evas_object_raise() with BT popup issue
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.8-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 31 May 2012 11:06:59 +0900
+
+mobileprint (0.2.7-9) unstable; urgency=low
+
+  * Added missing desktop icon file in spec
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.7-9
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 31 May 2012 10:43:46 +0900
+
+mobileprint (0.2.7-8) unstable; urgency=low
+
+  * changed desktop icon file path
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.7-8
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 30 May 2012 20:06:21 +0900
+
+mobileprint (0.2.7-7) unstable; urgency=low
+
+  * Updated spooling job progress for popup
+  * Removed unused code
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.7-7
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 25 May 2012 21:25:21 +0900
+
+mobileprint (0.2.7-6) unstable; urgency=low
+
+  * Added spooling job notification of quickpanel
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.7-6
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Fri, 25 May 2012 15:27:12 +0900
+
+mobileprint (0.2.7-5) unstable; urgency=low
+
+  * added pm control routine for usb-printer-detector
+  * applied wifi connecting popup for mobileprint
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.7-5
+
+ -- Taeksu Shin <taeksu.shin@samsung.com>  Tue, 15 May 2012 21:48:28 +0900
+
+mobileprint (0.2.7-4) unstable; urgency=low
+
+  * added usb-printer-detector pacakge
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.7-4
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 10 May 2012 15:32:03 +0900
+
+mobileprint (0.2.7-3) unstable; urgency=low
+
+  * fixed crash in calling by aul on background(Crash 18357, Bucket 45310)
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.7-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 03 May 2012 21:49:09 +0900
+
+mobileprint (0.2.6-3) unstable; urgency=low
+
+  * changed desktop file to hide app icon
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.6-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 26 Apr 2012 21:33:14 +0900
+
+mobileprint (0.2.6-2) unstable; urgency=low
+
+  * disabled to make mobileprint icon
+  * fixed obs build error
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.6-2
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 26 Apr 2012 18:16:44 +0900
+
+mobileprint (0.2.6-1) unstable; urgency=low
+
+  * fixed mobileprint.spec to match version
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.6-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Thu, 26 Apr 2012 13:16:28 +0900
+
+mobileprint (0.2.5.3-1) unstable; urgency=low
+
+  * disabled print setting view
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.5.3-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 23 Apr 2012 17:57:36 +0900
+
+mobileprint (0.2.5.2-1) unstable; urgency=low
+
+  * Added pdf preview feature and color printing
+  * disabled print setting option
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.5.2-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Mon, 16 Apr 2012 21:52:49 +0900
+
+mobileprint (0.2.5.1-5) unstable; urgency=low
+
+  * Added Build-Require to build rpm package
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.5.1-5
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 13 Apr 2012 17:28:19 +0900
+
+mobileprint (0.2.5.1-4) unstable; urgency=low
+
+  * Changed Elementary API as EFL migration
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.5.1-4
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 15 Feb 2012 17:28:52 +0900
+
+mobileprint (0.2.5.0-4) unstable; urgency=low
+
+  * Add usb hot-spot and multifile support
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.5.0-4
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 08 Feb 2012 15:22:47 +0900
+
+mobileprint (0.2.4.2-4) unstable; urgency=low
+
+  * Modified CMakelist.txt
+  * Git: slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.4.2-4
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 13 Dec 2011 18:58:17 +0900
+
+mobileprint (0.2.4.2-3) unstable; urgency=low
+
+  * Added job cancel feature
+  * Git: 165.213.180.234:slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.4.2-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 09 Dec 2011 16:44:13 +0900
+
+mobileprint (0.2.4.1-2) unstable; urgency=low
+
+  * Added LICENSE
+  * Git: 165.213.180.234:slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.4.1-2
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 02 Dec 2011 18:41:44 +0900
+
+mobileprint (0.2.4.1-1) unstable; urgency=low
+
+  * Added boilerplate
+  * Git: 165.213.180.234:slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.4.1-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 02 Dec 2011 15:45:43 +0900
+
+mobileprint (0.2.4.0-1) unstable; urgency=low
+
+  * Changed internal api to Capi
+  * Git: 165.213.180.234:slp/apps/m/mobileprint
+  * Tag: mobileprint_0.2.4.0-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 30 Nov 2011 14:20:52 +0900
+
+ug-cups-printer-efl (0.2.3.4-5) unstable; urgency=low
+
+  * Modified debian/changelog
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: ug-cups-printer-efl_0.2.3.4-5
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Tue, 22 Nov 2011 09:39:18 +0900
+
+ug-cups-printer-efl (0.2.3.4-4) unstable; urgency=low
+
+  * Modified Maintainer email
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: mobileprint_0.2.3.4-4
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 11 Nov 2011 21:23:23 +0900
+
+ug-cups-printer-efl (0.2.3.4-3) unstable; urgency=low
+
+  * Added disable ug_effect code
+  * Modified print tab bar position
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: mobileprint_0.2.3.4-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 11 Nov 2011 21:23:23 +0900
+
+ug-cups-printer-efl (0.2.3.3-3) unstable; urgency=low
+
+  * Modified control file
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: mobileprint_0.2.3.3-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 11 Nov 2011 21:23:23 +0900
+
+mobileprint (0.2.3.3-2) unstable; urgency=low
+
+  * Modified depends in control file
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: mobileprint_0.2.3.3-2
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 11 Nov 2011 21:02:30 +0900
+
+mobileprint (0.2.3.3-1) unstable; urgency=low
+
+  * Changed navigationbar to naviframe
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: mobileprint_0.2.3.3-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Sat, 05 Nov 2011 13:21:22 +0900
+
+mobileprint (0.2.3.2-3) unstable; urgency=low
+
+  * Added build-depends
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: mobileprint_0.2.3.2-3
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 04 Nov 2011 16:41:54 +0900
+
+mobileprint (0.2.3.2-2) unstable; urgency=low
+
+  * Added maintainer
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: mobileprint_0.2.3.2-2
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Fri, 04 Nov 2011 10:08:49 +0900
+
+mobileprint (0.2.3.2-1) unstable; urgency=low
+
+  * initial commit
+  * Git: 165.213.180.234:slp/apps/u/ug-cups-printer-efl
+  * Tag: mobileprint_0.2.3.2-1
+
+ -- GangHeok Kim <gangheok.kim@samsung.com>  Wed, 02 Nov 2011 20:25:14 +0900
+
+mobileprint (0.2.3.2) unstable; urgency=low
+
+  * hide the app icon and fix some bugs
+  * Git: slp-source.sec.samsung.net:slp/pkgs/m/mobileprint
+  * Tag: mobileprint_0.2.3.1
+
+ -- Shouchen Yin <shouchen.yin@samsung.com>  Thu, 27 Oct 2011 15:30:00 +0800
+
+mobileprint (0.2.3.1) unstable; urgency=low
+
+  * support pdf format
+  * Git: slp-source.sec.samsung.net:slp/pkgs/m/mobileprint
+  * Tag: mobileprint_0.2.3.1
+
+ -- Shouchen Yin <shouchen.yin@samsung.com>  Fri, 21 Oct 2011 15:30:00 +0800
+
+mobileprint (0.2.0.3) unstable; urgency=low
+
+  * change to new UI
+  * Git: slp-source.sec.samsung.net:slp/pkgs/m/mobileprint
+  * Tag: mobileprint_0.2.0.3
+
+ -- Shouchen Yin <shouchen.yin@samsung.com>  Mon, 17 Oct 2011 15:30:00 +0800
+mobileprint (0.2.0.2) unstable; urgency=low
+
+  * update for change ug to app
+  * Git: slp-source.sec.samsung.net:slp/pkgs/m/mobileprint
+  * Tag: mobileprint_0.2.0.2
+
+ -- Shouchen Yin <shouchen.yin@samsung.com>  Wed, 12 Oct 2011 14:00:51 +0800
+mobileprint (0.2.0.1) unstable; urgency=low
+
+  * update for change ug to app
+  * Git: slp-source.sec.samsung.net:slp/pkgs/m/mobileprint
+  * Tag: mobileprint_0.2.0.1
+
+ -- Shouchen Yin <shouchen.yin@samsung.com>  Wed, 28 Sep 2011 14:00:51 +0800
+
+mobileprint (0.1.3.1) unstable; urgency=low
+
+  * update for change ug to app
+  * Git: slp-source.sec.samsung.net:slp/pkgs/m/mobileprint
+  * Tag: mobileprint_0.1.3.1
+
+ -- Shouchen Yin <shouchen.yin@samsung.com>  Wed, 7 Sep 2011 14:00:51 +0800
+
+mobileprint (0.1.1.1) unstable; urgency=low
+
+  * update for change ug to app
+  * Git: slp-source.sec.samsung.net:slp/pkgs/m/mobileprint
+  * Tag: mobileprint_0.1.1.1
+
+ -- Shouchen Yin <shouchen.yin@samsung.com>  Wed, 24 Sep 2011 14:00:51 +0800
+mobileprint (0.1.0.1) unstable; urgency=low
+
+  * update for regarding media svc changes
+  * Git: slp-source.sec.samsung.net:slp/pkgs/m/mobileprint
+  * Tag: mobileprint_0.1.0.1
+
+ -- Hanwu Chen <hanwu.chen@samsung.com>  Fri, 12 Aug 2011 14:00:51 +0800
+
+
diff --git a/mobileprint/CMakeLists.txt b/mobileprint/CMakeLists.txt
new file mode 100644 (file)
index 0000000..894414f
--- /dev/null
@@ -0,0 +1,72 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(mobileprint C)
+
+####################################
+########## SET Directory ###########
+####################################
+SET(VENDOR "tizen")
+SET(PACKAGE ${PROJECT_NAME})
+SET(PKGNAME "org.${VENDOR}.${PACKAGE}")
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+SET(RESDIR "${PREFIX}/res")
+SET(PPDDIR "${RESDIR}/ppd/")
+SET(DATADIR "/opt/${PREFIX}/data")
+SET(CACHEDIR "${PREFIX}/cache")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(EDC_SRC_DIR "${CMAKE_CURRENT_SOURCE_DIR}/edc")
+SET(EDJDIR "${RESDIR}/edje/")
+SET(IMGDIR "${RESDIR}/images/")
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+   SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+####################################
+########### SET INCLUDE ############
+####################################
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/include)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/previewgen/include)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/preview_engine/include)
+INCLUDE_DIRECTORIES(${CMAKE_CURRENT_SOURCE_DIR}/smsc/include)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} -fvisibility=hidden")
+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=\"${PACKAGE}\"")
+ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"")
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+ADD_DEFINITIONS("-DBINDIR=\"${BINDIR}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DIMGDIR=\"${IMGDIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+ADD_DEFINITIONS("-DUGDATADIR=\"${UGDATADIR}\"")
+ADD_DEFINITIONS("-DCONFIG_PRINT_SETTING")
+
+#####################################################
+########### install xml file & icon #############
+#####################################################
+#for appfw new manifest
+CONFIGURE_FILE(${PROJECT_NAME}.xml ${PKGNAME}.xml)
+INSTALL(FILES ${CMAKE_BINARY_DIR}/${PACKAGE}/${PKGNAME}.xml DESTINATION "/usr/share/packages/")
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/images/ DESTINATION ${IMGDIR})
+INSTALL(DIRECTORY DESTINATION ${DATADIR})
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/previewgen/default.ppd DESTINATION ${PPDDIR})
+
+ADD_SUBDIRECTORY(previewgen)
+ADD_SUBDIRECTORY(preview_engine)
+ADD_SUBDIRECTORY(smsc)
+ADD_SUBDIRECTORY(app)
+ADD_SUBDIRECTORY(po)
diff --git a/mobileprint/app/CMakeLists.txt b/mobileprint/app/CMakeLists.txt
new file mode 100644 (file)
index 0000000..48a476e
--- /dev/null
@@ -0,0 +1,45 @@
+LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/mobileprint)
+LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/mobileprint/previewgen/lib)
+LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/mobileprint/preview_engine/lib)
+LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/mobileprint/smsc/lib)
+
+FILE(GLOB SRCS *.c)
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(app_pkgs REQUIRED utilX)
+
+FOREACH(flag ${app_pkgs_CFLAGS})
+   SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(app_pkgs_LDFLAGS "${pkgs_LDFLAGS} ${app_pkgs_LDFLAGS}")
+
+ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_BINARY_DIR}/mobileprint.edj
+   COMMAND edje_cc -id ${CMAKE_SOURCE_DIR}/images
+   ${EDC_SRC_DIR}/mobileprint.edc ${CMAKE_BINARY_DIR}/mobileprint.edj
+   DEPENDS ${EDC_SRC_DIR}/mobileprint.edc ${EDC_SRC_DIR}/mobileprint.edc
+   )
+
+ADD_CUSTOM_TARGET(mobileprint_edj_build   DEPENDS ${CMAKE_BINARY_DIR}/mobileprint.edj)
+
+INSTALL(FILES ${CMAKE_BINARY_DIR}/mobileprint.edj DESTINATION ${EDJDIR})
+
+ADD_CUSTOM_COMMAND(OUTPUT ${CMAKE_BINARY_DIR}/genlist_custom.edj
+   COMMAND edje_cc -id ${CMAKE_SOURCE_DIR}/images
+   ${EDC_SRC_DIR}/genlist_custom.edc ${CMAKE_BINARY_DIR}/genlist_custom.edj
+   DEPENDS ${EDC_SRC_DIR}/genlist_custom.edc ${EDC_SRC_DIR}/genlist_custom.edc
+   )
+
+ADD_CUSTOM_TARGET(genlist_custom_edj_build   DEPENDS ${CMAKE_BINARY_DIR}/genlist_custom.edj)
+
+INSTALL(FILES ${CMAKE_BINARY_DIR}/genlist_custom.edj DESTINATION ${EDJDIR})
+
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+SET_TARGET_PROPERTIES(${PROJECT_NAME} PROPERTIES COMPILE_FLAGS "${EXTRA_CFLAGS} -fpie")
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${app_pkgs_LDFLAGS} -lprint-service -lpreviewgen -lecore_evas -lpreview_engine -lsmsc -lptdb)
+
+ADD_DEPENDENCIES(${PROJECT_NAME} mobileprint_edj_build genlist_custom_edj_build)
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+INSTALL(FILES icon_${PROJECT_NAME}.png DESTINATION "/usr/share/icons/default/small" RENAME "${PKGNAME}.png")
diff --git a/mobileprint/app/icon_mobileprint.png b/mobileprint/app/icon_mobileprint.png
new file mode 100644 (file)
index 0000000..c438a11
Binary files /dev/null and b/mobileprint/app/icon_mobileprint.png differ
diff --git a/mobileprint/app/image_editor_conn.c b/mobileprint/app/image_editor_conn.c
new file mode 100644 (file)
index 0000000..d2a8c3a
--- /dev/null
@@ -0,0 +1,138 @@
+/*
+*  Mobileprint
+*
+* 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 <ui-gadget.h>
+#include "pts_common.h"
+#include "pts_main_view.h"
+#include "image_editor_conn.h"
+
+#define IMAGE_EDITOR_STR_MAX_LEN       64
+
+extern int size_index;
+
+void image_editor_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *base;
+       Evas_Object *win;
+
+       base = (Evas_Object *) ug_get_layout(ug);
+       win = ug_get_window();
+       evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(win, base);
+
+       /* Disable effect to avoid BS caused by ui-gadget to
+            unset ug layout after deleting it */
+       ug_disable_effect(ug);
+       evas_object_show(base);
+
+       PTS_TRACE_END;
+}
+
+void image_editor_result_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)priv;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       char *path = NULL;
+       int ret = -1;
+       ret = service_get_extra_data(result, "crop_image_path", &path);
+       PTS_RET_IF(ret != SERVICE_ERROR_NONE, "Failed to get crop_image_path(%d)", ret);
+       PTS_RET_IF(path == NULL, "path is NULL");
+
+       /* save path */
+       PTS_IF_FREE_MEM(ad->printing_data.request_files[0]);
+       ad->printing_data.request_files[0] = strdup(path);
+       PTS_DEBUG("crop_image_path: %s", path);
+       pts_main_view_rotate_image(ad, app_get_device_orientation());
+       size_index = ad->size_popup_info.image_size; // When crop is done, then save the index.
+
+       PTS_TRACE_END;
+}
+
+
+void image_editor_destroy_cb(ui_gadget_h ug, void *priv)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)priv;
+       PTS_RET_IF(ad == NULL || ug == NULL, "Invalid argument");
+       ug_destroy(ug);
+       PTS_TRACE_END;
+}
+
+
+int load_image_editor_ug(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL, -1, "ad is NULL");
+
+       struct ug_cbs image_editor_cbs;
+       ui_gadget_h ug = NULL;
+       service_h service = NULL;
+       char reso_str[IMAGE_EDITOR_STR_MAX_LEN + 1];
+       int w = 300;
+       int h = 300;
+
+       switch (ad->size_popup_info.image_size) {
+       case PTS_SIZE_FIT_TO_PAPER:
+               break;
+       case PTS_SIZE_5X7:
+               w = w * 1.2;
+               break;
+       case PTS_SIZE_4X6:
+               w = w * 1.5;
+               break;
+       case PTS_SIZE_3_5X5:
+               w = w * 1.43;
+               break;
+       case PTS_SIZE_WALLET:
+               w = w * 1.31;
+               break;
+       case PTS_SIZE_CUSTOM:
+               w = w * (ad->size_popup_info.custom_width / ad->size_popup_info.custom_height);
+               PTS_DEBUG("Passed custom ratio : %dx%d", w, h);
+               break;
+       default:
+               break;
+       }
+
+       memset(&image_editor_cbs,0x00,sizeof(struct ug_cbs));
+       image_editor_cbs.layout_cb = image_editor_layout_cb;
+       image_editor_cbs.result_cb = image_editor_result_cb;
+       image_editor_cbs.destroy_cb = image_editor_destroy_cb;
+       image_editor_cbs.priv = ad;
+
+       service_create(&service);
+       service_add_extra_data(service, "View Mode", "SETAS");
+       service_add_extra_data(service, "Path", ad->printing_data.input_file);
+       service_add_extra_data(service, "Setas type", "Crop");
+       service_add_extra_data(service, "Fixed ratio", "TRUE");
+
+       snprintf(reso_str, IMAGE_EDITOR_STR_MAX_LEN, "%dx%d", w, h);
+       service_add_extra_data(service, "Resolution", reso_str);
+       PTS_DEBUG("Passed resolution : %s", reso_str);
+
+       ug_create(ug, "image-viewer-efl", UG_MODE_FULLVIEW, service, &image_editor_cbs);
+       service_destroy(service);
+
+       PTS_TRACE_END;
+       return 0;
+}
+
diff --git a/mobileprint/app/mobileprint.c b/mobileprint/app/mobileprint.c
new file mode 100644 (file)
index 0000000..e34ec36
--- /dev/null
@@ -0,0 +1,578 @@
+/*
+*      Mobileprint
+*
+* 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 <ui-gadget.h>
+#include <Ecore_X.h>
+#include <utilX.h>
+#include <X11/Xatom.h>
+#include <X11/Xutil.h>
+#include <utilX.h>
+#include "mobileprint.h"
+#include "pts_main_view.h"
+
+#define _GNU_SOURCE
+#include <unistd.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <linux/unistd.h>
+#include <errno.h>
+
+/*Global variable */
+pts_appdata_t g_mobile_print_app_data;
+
+pts_appdata_t *pts_get_appdata()
+{
+       return &g_mobile_print_app_data;
+}
+
+/*
+* delete the main window
+*/
+static void _win_del(void *data, Evas_Object *obj, void *event)
+{
+       PTS_TRACE_BEGIN;
+       app_efl_exit();
+       PTS_TRACE_END;
+}
+
+/*
+* the response callback when quit the main function
+*/
+void main_quit_cb(void *data, Evas_Object *obj,
+                                 const char *emission, const char *source)
+{
+       PTS_TRACE_BEGIN;
+       app_efl_exit();
+       PTS_TRACE_END;
+}
+
+/*
+* create the main window
+*/
+static Evas_Object *_create_win(const char *name)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(name == NULL, NULL, "name is NULL");
+
+       Evas_Object *eo = NULL;
+       int w = 0;
+       int h = 0;
+
+       const int rots[4] = { APP_DEVICE_ORIENTATION_0,
+                       APP_DEVICE_ORIENTATION_90,
+                       APP_DEVICE_ORIENTATION_180,
+                       APP_DEVICE_ORIENTATION_270 };
+
+       eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+       PTS_RETV_IF(eo == NULL, NULL, "Failed to elm_win_add");
+
+       elm_win_autodel_set(eo, EINA_TRUE);
+       elm_win_title_set(eo, name);
+
+       elm_win_borderless_set(eo, EINA_TRUE);
+       elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW);
+
+       elm_win_alpha_set(eo, EINA_TRUE);
+       elm_win_conformant_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);
+
+       /* Register a list of rotation angles that mobileprint supports */
+       if (elm_win_wm_rotation_supported_get(eo))
+               elm_win_wm_rotation_available_rotations_set(
+                               eo, rots, 4);
+
+       PTS_TRACE_END;
+       return eo;
+}
+
+/*
+* callback function for device rotation
+*/
+static void _rot_changed_cb(void *data, Evas_Object *obj, void *event)
+{
+       pts_appdata_t *ad = (pts_appdata_t*)data;
+       int rot;
+
+       PTS_TRACE_BEGIN;
+
+       rot = elm_win_rotation_get(ad->win);
+
+
+       if (NULL != ad->list_info.active_printer) {
+               if (NULL != ad->size_popup_info.size_popup) {
+                       PTS_DEBUG("Found size popup. Let's resize it");
+                       if (rot == APP_DEVICE_ORIENTATION_0
+                                       || rot == APP_DEVICE_ORIENTATION_180)
+                               evas_object_size_hint_min_set(
+                                       ad->size_popup_info.size_popup_box,
+                                       400 * elm_config_scale_get(),
+                                       ad->size_popup_info
+                                               .size_popup_portrait_height);
+                       else
+                               evas_object_size_hint_min_set(
+                                       ad->size_popup_info.size_popup_box,
+                                       400 * elm_config_scale_get(),
+                                       ad->size_popup_info
+                                               .size_popup_landscape_height);
+               }
+               else if (NULL != ad->size_popup_info.custom_popup) {
+                       PTS_DEBUG("Found custom popup. Let's resize It");
+                       if (rot == APP_DEVICE_ORIENTATION_0
+                                       || rot == APP_DEVICE_ORIENTATION_180)
+                               evas_object_size_hint_min_set(
+                                       ad->size_popup_info.custom_popup_box,
+                                       400 * elm_config_scale_get(),
+                                       ad->size_popup_info
+                                               .custom_popup_portrait_height);
+                       else
+                               evas_object_size_hint_min_set(
+                                       ad->size_popup_info.custom_popup_box,
+                                       400 * elm_config_scale_get(),
+                                       ad->size_popup_info
+                                               .custom_popup_landscape_height);
+               }
+       }
+       else if (NULL != ad->list_info.printer_list_popup) {
+               PTS_DEBUG("Found printer list popup. Let's resize it");
+               if (rot == APP_DEVICE_ORIENTATION_0
+                               || rot == APP_DEVICE_ORIENTATION_180)
+                       evas_object_size_hint_min_set(
+                               ad->list_info.printer_list_popup_box,
+                               PRINTER_LIST_POPUP_W * elm_config_scale_get(),
+                               ad->list_info
+                                       .printer_list_popup_portrait_height);
+               else
+                       evas_object_size_hint_min_set(
+                               ad->list_info.printer_list_popup_box,
+                               PRINTER_LIST_POPUP_LN_W
+                                       * elm_config_scale_get(),
+                               ad->list_info
+                                       .printer_list_popup_landscape_height);
+       }
+
+       PTS_TRACE_END;
+}
+
+/*
+* this callback function is called
+* at the start of the application.
+*/
+static bool _app_create(void *user_data)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(user_data == NULL, false, "user_data is NULL");
+
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       char *name = NULL;
+
+       /* create window */
+       app_get_name(&name);
+       ad->win = _create_win(name);
+       PTS_RETV_IF(ad->win == NULL, false, "ad->win is NULL");
+
+       evas_object_smart_callback_add(ad->win, "wm,rotation,changed",
+                       _rot_changed_cb, ad);
+
+       UG_INIT_EFL(ad->win, UG_OPT_INDICATOR_ENABLE);
+
+       PTS_IF_FREE_MEM(name);
+
+       PTS_TRACE_END;
+       return true;
+}
+
+/*
+* this callback function is called once after
+* the main loop of application exits.
+*/
+static void _app_terminate(void *user_data)
+{
+       PTS_TRACE_BEGIN;
+#if 0
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+
+       PTS_RET_IF(ad == NULL, "data is NULL");
+
+       if (ad->ugd->main_layout) {
+               PTS_DEBUG("ad->lymain is not NULL");
+               //evas_object_del(ad->ugd->main_layout);
+       }
+
+       if (ad->win) {
+               PTS_DEBUG("ad->lymain is not NULL");
+               //evas_object_del(ad->ugd->root_win);
+       }
+#endif
+
+       pts_util_remove_tmp_files("/tmp/mobileprint/");
+
+       PTS_TRACE_END;
+}
+
+/*
+* this callback function is called each time the application
+* is completely obscured by another application and becomes
+* invisible to the user.
+*/
+static void _app_pause(void *user_data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_RET_IF(ad == NULL,"ad is NULL");
+       if (ad->noti_info.job_spooling_list == NULL && ad->noti_info.dummy_noti_id == 0) {
+               PTS_DEBUG("Without active job spooling, mobileprint will terminate when moved background.");
+               app_efl_exit();
+       } else {
+               PTS_DEBUG("Active job spooling list is existed. So don't terminate mobileprint.");
+       }
+       PTS_TRACE_END;
+}
+
+/*
+* this callback function is called each time the application
+* becomes visible to the user.
+*/
+static void _app_resume(void *user_data)
+{
+       PTS_TRACE_BEGIN;
+       PTS_TRACE_END;
+}
+
+static Eina_Bool _simple_exit(void *data)
+{
+       PTS_TRACE_BEGIN;
+       elm_exit();
+       PTS_TRACE_END;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+void load_main_view(void *userdata)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = pts_get_appdata();
+       //pts_core_data_t *ugd  = ad->ugd;
+
+       // XXX - show main view after set active/default printer
+       pts_create_main_view(ad);
+       // XXX - disable to fix blink problem
+       //elm_win_resize_object_add(ugd->root_win, ugd->main_layout);
+       edje_object_signal_callback_add(elm_layout_edje_get(ad->main_info.main_layout),
+                                                                       "EXIT", "*", main_quit_cb, NULL);
+
+       pts_main_view_update_printer_label(ad);
+       pts_main_view_rotate_image(ad, app_get_device_orientation());
+
+       evas_object_show(ad->main_info.main_layout);
+       evas_object_show(ad->main_info.root_win);
+       PTS_TRACE_END;
+}
+
+/*
+* load the app
+*/
+static void __app_load_data(pts_appdata_t *ad, pts_printing_data_t *pt_files)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+       PTS_RET_IF(ad->win == NULL, "ad->win is NULL");
+       PTS_RET_IF(pt_files == NULL, "pt_files is NULL");
+
+       int ret;
+       if (pts_util_supported_arch() != EINA_TRUE) {
+               pts_util_show_error_popup(ad->win, _("IDS_COM_POP_UNSUPPORTED"));
+               ecore_timer_add(1, (Ecore_Task_Cb)_simple_exit, (void *)ad);
+               return;
+       }
+
+       if (ad->main_info.root_win == NULL) {
+               ad->main_info.root_win = ad->win;
+       }
+
+       ret = pt_init(__pts_event_cb, ad);
+       PTS_RET_IF(ret != PT_ERR_NONE,"pt_init error");
+
+       //TODO: Remove this after ecore fix max thread  number problem.
+       ecore_thread_max_set(4);
+
+       /*
+        * prepare load print files
+        */
+       pts_main_view_load_printing_data(ad, pt_files);
+
+       ad->search_info.print_search_mode = PTS_SEARCH_INITIAL;
+       ad->search_info.selection_done_cb = load_main_view;
+       ad->search_info.print_search_popup_parent = ad->main_info.root_win;
+       ad->search_info.printer_search_user_data = NULL;
+       pts_search_printer(ad);
+
+       PTS_TRACE_END;
+}
+
+static Eina_Bool show_dummy_noti_popup(service_h *service, void *user_data, pts_printing_data_t *printing_data)
+{
+//noti_mode:
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_RETV_IF(ad == NULL, EINA_FALSE, "ad is NULL");
+       PTS_RETV_IF(ad->win == NULL, EINA_FALSE, "ad->win is NULL");
+
+       int ret = -1;
+       char *value = NULL;
+
+       ret = service_get_extra_data(*service, SERVICE_FILES, &value);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get extra data failed!, errno: %d", ret);
+
+       char *files = strdup(value);
+       PTS_RETV_IF(files == NULL, EINA_FALSE, "failed to strdup. files is NULL");
+       PTS_DEBUG("files[%s]", files);
+
+       ret = service_get_extra_data(*service, SERVICE_PAGE_COUNT, &value);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get extra data failed!, errno: %d", ret);
+
+       int page_count = atoi(value);
+       PTS_DEBUG("page_count[%d]", page_count);
+       __pts_print_dummy_popup(ad, files, page_count);
+
+       evas_object_raise(ad->win);
+
+       PTS_TRACE_END;
+       return EINA_TRUE;
+}
+
+static Eina_Bool show_progress_noti_popup(service_h *service, void *user_data)
+{
+//noti_mode:
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_RETV_IF(ad == NULL, EINA_FALSE, "ad is NULL");
+       PTS_RETV_IF(ad->win == NULL, EINA_FALSE, "ad->win is NULL");
+
+       int ret = -1;
+       char *value = NULL;
+
+       ret = service_get_extra_data(*service, SERVICE_JOB_ID, &value);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get extra data failed!, errno: %d", ret);
+
+       if (NULL != value) {
+               int job_id = atoi(value);
+               PTS_DEBUG("job_id[%d]", job_id);
+               ret = service_get_extra_data(*service, SERVICE_PAGE_COUNT, &value);
+               PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get extra data failed!, errno: %d", ret);
+               int page_count = atoi(value);
+               PTS_DEBUG("page_count[%d]", page_count);
+               __pts_print_progress_popup(ad, job_id, page_count);
+       }
+
+       evas_object_raise(ad->win);
+
+       PTS_TRACE_END;
+       return EINA_TRUE;
+}
+
+static Eina_Bool get_extra_data_by_single_content(service_h *service, void *user_data, pts_printing_data_t *printing_data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_RETV_IF(ad == NULL, EINA_FALSE,  "ad is NULL");
+       PTS_RETV_IF(ad->win == NULL, EINA_FALSE, "ad->win is NULL");
+
+       Eina_Bool bret = EINA_FALSE;
+       int ret = -1;
+       char *value = NULL;
+       char *uri_temp = NULL;
+
+       ret = service_get_extra_data(*service, SERVICE_PRINT_FILES_TYPE, &value);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get the type of print files failed!, errno: %d", ret);
+
+       bret = _pts_printing_data_set_type(value, printing_data);
+       PTS_IF_FREE_MEM(value);
+       PTS_RETV_IF(bret == EINA_FALSE, EINA_FALSE, "Failed to set type");
+
+       bret = _pts_printing_data_set_files_count("1", printing_data);
+       PTS_RETV_IF(bret == EINA_FALSE, EINA_FALSE, "Failed to set files count");
+
+       ret = service_get_uri(*service, &value);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get the uri failed!, errno: %d", ret);
+
+       uri_temp = (char *)pt_utils_filename_from_URI(value);
+       PTS_IF_FREE_MEM(value);
+       PTS_RETV_IF(uri_temp == NULL, EINA_FALSE, "uri_temp is NULL");
+       bret = _pts_printing_data_set_request_files((const char **)&uri_temp, 1, printing_data);
+       PTS_RETV_IF(bret == EINA_FALSE, EINA_FALSE, "Failed to set request_files");
+
+       __app_load_data(ad, printing_data);
+       evas_object_raise(ad->win);
+
+       PTS_TRACE_END;
+       return EINA_TRUE;
+}
+
+static Eina_Bool get_extra_data_by_multi_contents(service_h *service, void *user_data, pts_printing_data_t *printing_data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_RETV_IF(ad == NULL, EINA_FALSE,  "ad is NULL");
+       PTS_RETV_IF(ad->win == NULL, EINA_FALSE, "ad->win is NULL");
+       PTS_RETV_IF(printing_data == NULL, EINA_FALSE, "printing_data is NULL");
+
+       Eina_Bool bret = EINA_FALSE;
+       int ret = -1;
+       int length = 0;
+       char *value = NULL;
+       char **filesname = NULL;
+
+       ret = service_get_extra_data(*service, SERVICE_PRINT_FILES_COUNT, &value);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get the count of print files failed!, errno: %d", ret);
+
+       bret = _pts_printing_data_set_files_count(value, printing_data);
+       PTS_IF_FREE_MEM(value);
+       PTS_RETV_IF(bret == EINA_FALSE, EINA_FALSE, "Failed to set files count");
+
+       ret = service_get_extra_data(*service, SERVICE_PRINT_FILES_TYPE, &value);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get the type of print files failed!, errno: %d", ret);
+
+       bret = _pts_printing_data_set_type(value, printing_data);
+       PTS_IF_FREE_MEM(value);
+       PTS_RETV_IF(bret == EINA_FALSE, EINA_FALSE, "Failed to set type");
+
+       ret = service_get_extra_data(*service, SERVICE_PRINT_FILES_CURRENT_INDEX, &value);
+       if (ret == SERVICE_ERROR_NONE) {
+               bret = _pts_printing_data_set_index(value, printing_data);
+               PTS_IF_FREE_MEM(value);
+               PTS_RETV_IF(bret == EINA_FALSE, EINA_FALSE, "Failed to set current index");
+       } else {
+               PTS_DEBUG("get the current index of print files failed!, errno: %d", ret);
+       }
+
+       ret = service_get_extra_data(*service, SERVICE_PRINT_FILES_FOLDER_NAME, &value);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get extra data failed!, errno: %d", ret);
+
+       bret = _pts_printing_data_set_directory(value, printing_data);
+       PTS_IF_FREE_MEM(value);
+       PTS_RETV_IF(bret == EINA_FALSE, EINA_FALSE, "Failed to set directory");
+
+       ret = service_get_extra_data_array(*service, SERVICE_PRINT_FILES_FILES_NAME, &filesname, &length);
+       PTS_RETV_IF(ret != SERVICE_ERROR_NONE, EINA_FALSE, "get extra data failed!, errno: %d", ret);
+
+       bret = _pts_printing_data_set_request_files((const char **) filesname, length, printing_data);
+       PTS_IF_FREE_MEM(filesname);
+       PTS_RETV_IF(bret == EINA_FALSE, EINA_FALSE, "Failed to set request files");
+
+       __app_load_data(ad, printing_data);
+       evas_object_raise(ad->win);
+
+       return EINA_TRUE;
+}
+
+/*
+* this callback function is called when other application
+* send the launch request to the application.
+*/
+static void _app_service(service_h service, void *user_data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+       PTS_RET_IF(ad->win == NULL, "ad->win is NULL");
+
+       int ret = -1;
+       char    *value = NULL;
+       pts_printing_data_t printing_data;
+       service_h reply_service;
+       Eina_Bool is_success = EINA_FALSE;
+
+       memset(&printing_data, 0, sizeof(printing_data));
+       service_create(&reply_service);
+
+       ret = service_get_extra_data(service, SERVICE_LAUNCH_TYPE, &value);
+       if (ret == SERVICE_ERROR_KEY_NOT_FOUND) {
+               ret = service_get_extra_data(service, SERVICE_PRINT_FILES_COUNT, &value);
+               if (ret == SERVICE_ERROR_NONE) {
+                       PTS_DEBUG("***** APP_SERVICE MODE(MULTI) *****");
+                       is_success = get_extra_data_by_multi_contents(&service, user_data, &printing_data);
+               } else if (ret == SERVICE_ERROR_KEY_NOT_FOUND) {
+                       PTS_DEBUG("***** APP_SERVICE MODE(SINGLE) *****");
+                       is_success = get_extra_data_by_single_content(&service, user_data, &printing_data);
+               } else {
+                       PTS_DEBUG("SERVICE_PRINT_FILES_COUNT ERROR(%d) ", ret);
+               }
+       } else if (ret == SERVICE_ERROR_NONE) {
+               PTS_DEBUG("SERVICE_LAUNCH_TYPE : %s", value);
+               if (!strcmp(value, LAUNCH_FROM_DUMMY_NOTI)) {
+                       PTS_DEBUG("***** DUMMY NOTI MODE *****");
+                       is_success = show_dummy_noti_popup(&service, user_data, &printing_data);
+               } else if (!strcmp(value, LAUNCH_FROM_PROGRESS_NOTI)) {
+                       PTS_DEBUG("***** NOTI MODE *****");
+                       is_success = show_progress_noti_popup(&service, user_data);
+               } else {
+                       PTS_DEBUG("SERVICE_LAUNCH_TYPE ERROR(%s) ", value);
+               }
+       } else if (ret == SERVICE_ERROR_OUT_OF_MEMORY
+                          || ret == SERVICE_ERROR_INVALID_DATA_TYPE
+                          || ret == SERVICE_ERROR_INVALID_PARAMETER) {
+               PTS_DEBUG("APP_SERVICE ERROR(%d)", ret);
+       } else {
+               PTS_DEBUG("***** Undefined *****");
+       }
+       PTS_IF_FREE_MEM(value);
+
+       if (is_success == EINA_TRUE) {
+               service_reply_to_launch_request(reply_service, service, SERVICE_RESULT_SUCCEEDED);
+       } else {
+               service_reply_to_launch_request(reply_service, service, SERVICE_RESULT_FAILED);
+               pts_util_show_error_popup(ad->win, IDS_PRT_41);
+               ecore_timer_add(1, (Ecore_Task_Cb)_simple_exit, (void *)ad);
+       }
+       PTS_TRACE_END;
+       return;
+}
+
+/*
+* the main function
+*/
+int main(int argc, char *argv[])
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *pts_appdata = pts_get_appdata();
+
+       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                 = NULL;
+       event_callback.region_format_changed    = NULL;
+
+       memset(pts_appdata, 0x00, sizeof(pts_appdata_t));
+
+       PTS_TRACE_END;
+       return app_efl_main(&argc, &argv, &event_callback, pts_appdata);
+}
diff --git a/mobileprint/app/preview_content.c b/mobileprint/app/preview_content.c
new file mode 100644 (file)
index 0000000..6eb2a90
--- /dev/null
@@ -0,0 +1,207 @@
+/*
+*  Mobileprint
+*
+* 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 <app.h>
+#include <ui-gadget.h>
+
+#include <page_preview.h>
+#include <paper_size.h>
+#include <previewgen.h>
+#include <pt_api.h>
+
+#include "pts_common.h"
+#include "pts_main_view.h"
+
+#include "preview_content.h"
+
+#define  DEFAULT_PPD_FILE       RESDIR "/ppd/default.ppd"
+
+int is_printer_grayscale(const pt_printer_mgr_t *active_printer)
+{
+       switch (pt_get_selected(PT_OPTION_ID_GRAYSCALE)) {
+       case PT_GRAYSCALE_COLOUR:
+               return 0;
+       default:
+               return 1;
+       }
+}
+
+enum page_orientation printer_get_setting_orientation(
+       const pt_printer_mgr_t *active_printer)
+{
+       /* should be taken from settings */
+       switch (active_printer->landscape) {
+//     case PT_ORIENTATION_AUTO:
+               /* TODO: check for page size, n-up */
+//             return PAGE_ORIENTATION_AUTO;
+       case PT_ORIENTATION_PORTRAIT:
+               return PAGE_ORIENTATION_PORTRAIT;
+       case PT_ORIENTATION_LANDSCAPE:
+               return PAGE_ORIENTATION_LANDSCAPE;
+       }
+       return PAGE_ORIENTATION_PORTRAIT;
+}
+
+int printer_get_setting_n_up(const pt_printer_mgr_t *active_printer)
+{
+       /* should be taken from settings */
+       switch (active_printer->scaling) {
+       case PT_SCALING_2_PAGES:
+               return 2;
+       case PT_SCALING_4_PAGES:
+               return 4;
+#if 0
+       case PT_SCALING_8_PAGES:
+               return 8;
+#endif
+       default:
+               break;
+       }
+       return 1;
+}
+
+/**
+ * @brief      Get paper size and paper name for CUPS utilities cmd usage
+ * @param[out] paper_size      paper_size should be local variable
+ *                             to keep further store we should provide a copy
+ */
+int printer_get_paper_size(struct paper_size_pts *paper_size)
+{
+       PTS_TRACE_BEGIN;
+       /* get paper size of active printer from print-service */
+       pt_pagesize_t current_pagesize;
+       int result = pt_get_selected_paper_size_pts(&current_pagesize);
+       PTS_RETV_IF(result < 0, -1, "pt_get_selected_paper_size_pts returns error");
+
+       /* get really selected papersize name for command line commands */
+       paper_size->name = pt_get_print_option_papersize_cmd(
+                                                  pt_get_selected(PT_OPTION_ID_PAPERSIZE));
+       paper_size->s.x = current_pagesize.x;
+       paper_size->s.y = current_pagesize.y;
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+int pts_image_size_t2page_scale(pts_image_size_e pts_size,
+                                                               struct page_scale *scale)
+{
+       PTS_RETV_IF(scale == NULL, -1, "scale is NULL");
+
+       scale->w = 0;
+       scale->h = 0;
+
+       switch (pts_size) {
+       case PTS_SIZE_FIT_TO_PAPER:
+               scale->type = SCALE_FIT_TO_PAPER;
+               return 0;
+       case PTS_SIZE_5X7:
+               scale->w = 5;
+               scale->h = 7;
+               break;
+       case PTS_SIZE_4X6:
+               scale->w = 4;
+               scale->h = 6;
+               break;
+       case PTS_SIZE_3_5X5:
+               scale->w = 3.5;
+               scale->h = 5;
+               break;
+       case PTS_SIZE_WALLET:
+               /* 6.4x8.4 cm */
+               scale->w = 3.30709;
+               scale->h = 2.51969;
+               break;
+               //TODO : CUSTOM SIZE
+       default:
+               scale->type = SCALE_FIT_TO_PAPER;
+               return 1;
+       }
+
+       scale->type = SCALE_CUSTOM;
+       return 0;
+}
+
+
+/**
+ * @brief This function generates preview images
+ * @param[in] ugd the pointer to the main data structure
+ * @return
+ */
+int generate_preview_images(pts_appdata_t *ad,
+                                                       app_device_orientation_e dev_orientation)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL , -1 , "ad is NULL");
+
+       int result = 0;
+
+       struct paper_size_pts paper_size;
+       enum page_orientation orientation;
+       struct page_scale scale = {0, 0, 0};
+       int n_up;
+       int is_grayscale;
+       pt_printer_mgr_t *active_printer = ad->list_info.active_printer;
+       char *ppd;
+
+       /* currently supported: only one PDF or multiple images;
+          mixed images-pdf unsupported */
+
+       PTS_RETV_IF(ad->printing_data.num_of_files <= 0, -1 , "Invalid argument");
+
+       /* should be taken from settings */
+       if (active_printer != NULL) {
+               ppd = active_printer->ppd;
+               printer_get_paper_size(&paper_size);
+               orientation = printer_get_setting_orientation(active_printer);
+               n_up = printer_get_setting_n_up(active_printer);
+               pts_image_size_t2page_scale(ad->size_popup_info.image_size, &scale);
+               if (ad->size_popup_info.image_size == PTS_SIZE_CUSTOM) {
+                       scale.w = ad->size_popup_info.custom_width;
+                       scale.h = ad->size_popup_info.custom_height;
+                       scale.type = SCALE_CUSTOM;
+               }
+               is_grayscale = is_printer_grayscale(active_printer);
+       } else {
+               PTS_DEBUG("No active printer preview");
+
+               ppd = DEFAULT_PPD_FILE;
+               get_paper_size_pts("A4", &paper_size);
+               orientation = PAGE_ORIENTATION_PORTRAIT;
+               //is_original_zoom = 0;
+               scale.type = SCALE_FIT_TO_PAPER;
+               n_up = 1;
+               is_grayscale = 1;
+       }
+
+       PTS_DEBUG("USING PPD: %s", ppd);
+       PTS_DEBUG("PAPER NAME: %s", paper_size.name);
+       PTS_DEBUG("PAPER SIZE: %f, %f", paper_size.s.x, paper_size.s.y);
+       PTS_DEBUG("ALBUM, N_UP, ZOOM: %d, %d, %d", orientation, n_up, scale.type);
+
+       result = evas_smart_smsc_set_file(ad->main_info.smsc,
+                       ad->printing_data.request_files, ad->printing_data.num_of_files,
+                       ppd, &paper_size, orientation, n_up, &scale,
+                       is_grayscale);
+       PTS_DEBUG("evas_smart_smsc_set_file: %d", result);
+
+       PTS_TRACE_END;
+       return result;
+}
+
diff --git a/mobileprint/app/pts_common.c b/mobileprint/app/pts_common.c
new file mode 100644 (file)
index 0000000..e070043
--- /dev/null
@@ -0,0 +1,1429 @@
+/*
+*  Mobileprint
+*
+* 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 <app.h>
+#include <ui-gadget.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <sysman.h>
+#include <efl_assist.h>
+#include <syspopup_caller.h>
+#include "mobileprint.h"
+#include "image_editor_conn.h"
+#include "pts_main_view.h"
+#include "preview_util.h"
+
+Evas_Object *pts_create_custom_popup(Evas_Object *parent, pts_appdata_t *ad);
+void __pts_main_view_create_list_view(pts_appdata_t *ad);
+void main_quit_cb(void *data, Evas_Object *obj,
+                                 const char *emission, const char *source);
+
+static Evas_Object *scaling_radio_main = NULL;
+static Evas_Object *size_radio_main = NULL;
+static Elm_Genlist_Item_Class scaling_itc;
+static Elm_Genlist_Item_Class size_itc;
+static Elm_Genlist_Item_Class title_itc;
+static Elm_Genlist_Item_Class text_itc;
+static Elm_Genlist_Item_Class check_itc;
+static Elm_Genlist_Item_Class button_itc;
+static int scaling_index = 0;
+int size_index = 0;
+
+static Eina_Bool aspect_ratio = 0;
+
+static Evas_Object *width_layout;
+static Evas_Object *width_entry;
+static Evas_Object *height_layout;
+static Evas_Object *height_entry;
+
+int pts_unstandardization(char *name)
+{
+       char *ptr = NULL;/* Pointer into name */
+       PTS_RETV_IF(name == NULL, -1, "Invalid argument");
+
+       for (ptr = name; *ptr; ptr++) {
+               if (*ptr == '@') {
+                               return 0;
+               } else if ((*ptr >= 0 && *ptr < ' ') ||
+                               *ptr == 127 || *ptr == '/' ||*ptr == '#') {
+                               return -1;
+               } else if (*ptr == 0x5F) {
+                               *ptr = 0x20; /*convert _ to space*/
+               } else if (*ptr == '[' || *ptr == '(') {
+                       *ptr='\0';
+                       while (name <= ptr) {
+                               ptr--;
+                               if (*ptr==0x20) {
+                                       *ptr='\0';
+                               } else {
+                                       return 0;
+                               }
+                       }
+                       return 0;
+               }
+       }
+       return 0;
+}
+
+char* pts_parse_protocol(char *addr)
+{
+       PTS_TRACE_BEGIN;
+       char *printer_protocol = NULL;
+
+       PTS_RETV_IF(addr == NULL, NULL, "Invalid argument");
+
+       if (strstr(addr, "_pdl-datastream.") != NULL) {
+               printer_protocol = strdup("Network (RAW)");
+       } else if (strstr(addr, "_ipp.") != NULL) {
+               printer_protocol = strdup("Network (IPP)");
+       } else if (strstr(addr, "_printer.") != NULL) {
+               printer_protocol = strdup("Network (LPD)");
+       } else if (strstr(addr, "usb") != NULL) {
+               printer_protocol = strdup("USB");
+       } else {
+               printer_protocol = strdup("Unknown");
+       }
+
+       PTS_TRACE_END;
+       return printer_protocol;
+}
+
+
+/**
+ *     This function let the app create the label
+ *     @return  void
+ *     @param[in] parent the pointer to the parent of the label
+ *     @param[in] desc the pointer to label text
+ */
+Evas_Object *pts_create_label_btn(Evas_Object *parent, const char *label)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *btn = elm_button_add(parent);
+       elm_object_text_set(btn, label);
+       evas_object_show(btn);
+       PTS_TRACE_END;
+       return btn;
+}
+
+
+/**
+ *     This function let the app create the base layout
+ *     @return  void
+ *     @param[in] parent the pointer to the parent of the base layout
+ *     @param[in] desc the pointer to group of the base layout
+ */
+Evas_Object *pts_create_base_layout_with_conform(Evas_Object *parent, const char *group)
+{
+       PTS_TRACE_BEGIN;
+       char edj_file[128] = {0};
+       Evas_Object *base = NULL;
+       Evas_Object *conform = NULL;
+       int r = 0;
+
+       /* load edje */
+       app_get_resource("edje/mobileprint.edj", edj_file, 128);
+
+       conform = elm_conformant_add(parent);
+       evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       // Add
+       evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_win_resize_object_add(parent, conform);
+
+       base = elm_layout_add(conform);
+       if (base) {
+               r = elm_layout_file_set(base, edj_file, group);
+               if (!r) {
+                       evas_object_del(base);
+                       return NULL;
+               }
+               elm_object_content_set(conform, base);
+       }
+       evas_object_show(conform);
+       PTS_TRACE_END;
+
+       return base;
+}
+
+Evas_Object *pts_create_base_layout(Evas_Object *parent, const char *group)
+{
+       PTS_TRACE_BEGIN;
+       char edj_file[128] = {0};
+       Evas_Object *base = NULL;
+       int r = 0;
+
+       /* load edje */
+       app_get_resource("edje/mobileprint.edj", edj_file, 128);
+
+       base = elm_layout_add(parent);
+       if (base) {
+               r = elm_layout_file_set(base, edj_file, group);
+               if (!r) {
+                       evas_object_del(base);
+                       return NULL;
+               }
+               evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       }
+       PTS_TRACE_END;
+
+       return base;
+}
+
+
+/**
+ *     This function let the app create the popup element
+ *     @return  void
+ *     @param[in] parent the pointer to the parent of the popup element
+ *     @param[in] desc the pointer to description of the popup element
+ *     @param[in] timeout the timeout value
+ */
+Evas_Object *pts_create_popup(Evas_Object *parent, const char *desc, double timeout)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *notify = NULL;
+       notify = elm_popup_add(parent);
+       evas_object_size_hint_weight_set(notify, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       //elm_popup_mode_set(notify, ELM_POPUP_TYPE_ALERT);
+       elm_popup_timeout_set(notify, timeout);
+       elm_object_text_set(notify, desc);
+       evas_object_show(notify);
+       PTS_TRACE_END;
+       return notify;
+}
+
+static void _pts_scaling_set_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(scaling_radio_main);
+       PTS_IF_DEL_OBJ(ad->scaling_popup_info.scaling_popup);
+
+       pts_main_view_rotate_image(ad, app_get_device_orientation());
+       PTS_TRACE_END;
+}
+
+static char *__pts_scaling_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       int index = (int)data;
+       char *label = NULL;
+       char temp[1024] = {0};
+
+       if (strcmp(part, "elm.text") == 0) {
+               switch (index) {
+               case PT_SCALING_FIT_TO_PAGE:
+                       label = strdup(_("IDS_BT_OPT_FIT_TO_PAPER"));
+                       break;
+               case PT_SCALING_2_PAGES:
+                       snprintf(temp,1024,_("IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"),2);
+                       label = strdup(temp);
+                       break;
+               case PT_SCALING_4_PAGES:
+                       snprintf(temp,1024,_("IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"),4);
+                       label = strdup(temp);
+                       break;
+               default:
+                       label = strdup("Unknown option");
+                       break;
+               }
+       }
+
+       PTS_TRACE_END;
+       return label;
+}
+
+static Evas_Object *__pts_scaling_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+
+       int index = (int)data;
+       PTS_DEBUG("Passed index : %d", index);
+       Evas_Object *radio;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               radio = elm_radio_add(obj);
+               elm_radio_state_value_set(radio, index);
+               elm_radio_group_add(radio, scaling_radio_main);
+               PTS_DEBUG("scaling_index[%d]", scaling_index);
+               // It's filter to avoid all radio selection
+               if (scaling_index == index) {
+                       elm_radio_value_set(radio, scaling_index);
+                       PTS_DEBUG("OK...Set radio button using scaling_index[%d]", scaling_index);
+               }
+
+               evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               return radio;
+       }
+
+       PTS_TRACE_END;
+       return NULL;
+}
+
+static void __pts_scaling_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(NULL == ad, "ad is NULL");
+
+       int scaling = -1;
+       Elm_Object_Item *item = event_info;
+
+       if (item != NULL) {
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+
+               scaling = (int)elm_object_item_data_get(item);
+               if (scaling > -1) {
+                       PTS_DEBUG("Selected scaling : %d", scaling);
+
+                       scaling_index = ad->list_info.active_printer->scaling = scaling;
+
+                       // Now call real event trigger to update radio button when selected.
+                       elm_genlist_item_update(item);
+               }
+       }
+       PTS_TRACE_END;
+}
+
+static void _pts_scaling_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(NULL == ad, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(scaling_radio_main);
+       PTS_IF_DEL_OBJ(obj);
+       PTS_IF_DEL_OBJ(ad->scaling_popup_info.scaling_popup);
+       PTS_TRACE_END;
+}
+
+Evas_Object *pts_create_scaling_popup(Evas_Object *parent, pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *popup;
+       Evas_Object *genlist;
+       Evas_Object *btn1;
+       int index;
+
+       popup = elm_popup_add(parent);
+       elm_object_style_set(popup,"content_no_vhpad");
+       elm_object_part_text_set(popup, "title,text", _("IDS_PRT_BODY_SCALING_ABB"));
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "min_menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1,"popup_button/default");
+       elm_object_text_set(btn1, _("IDS_PRT_BODY_SCALING_ABB"));
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _pts_scaling_set_cb, ad);
+
+       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);
+
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _pts_scaling_cancel_cb, ad);
+
+
+       if (!scaling_radio_main) {
+               scaling_radio_main = elm_radio_add(genlist);
+               elm_radio_state_value_set(scaling_radio_main, scaling_index);
+               elm_radio_value_set(scaling_radio_main, scaling_index);
+       }
+
+       scaling_itc.item_style = "1text.1icon.2";
+       scaling_itc.func.text_get = __pts_scaling_label_get;
+       scaling_itc.func.content_get = __pts_scaling_icon_get;
+       scaling_itc.func.state_get = NULL;
+       scaling_itc.func.del = NULL;
+
+       Elm_Object_Item  *item = NULL;
+       for (index = 0; index < (PT_SCALING_4_PAGES+1); index++) {
+               item = elm_genlist_item_append(genlist, &scaling_itc, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __pts_scaling_sel, ad);
+               PTS_DEBUG("index[%d] - item added : %s", index, (NULL == item)? "FAILURE" : "SUCCESS");
+       }
+
+       Evas_Object *box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_box_pack_end(box, genlist);
+       evas_object_show(genlist);
+       evas_object_size_hint_min_set(box, 400 * elm_config_scale_get(), elm_genlist_items_count(genlist) * 114 * elm_config_scale_get());
+       evas_object_show(box);
+       elm_object_part_content_set(layout, "elm.swallow.content" , box);
+       elm_object_content_set(popup, box);
+       elm_object_focus_set(popup, EINA_TRUE);
+
+       evas_object_show(popup);
+
+       ad->scaling_popup_info.scaling_popup = popup;
+
+       PTS_TRACE_END;
+       return genlist;
+}
+
+static void _pts_size_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(NULL == ad, "ad is NULL");
+       PTS_IF_DEL_OBJ(size_radio_main);
+       PTS_IF_DEL_OBJ(obj);
+       PTS_IF_DEL_OBJ(ad->size_popup_info.size_popup);
+       PTS_TRACE_END;
+}
+
+static char *__pts_size_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       int index = (int)data;
+       char *label = NULL;
+       char custom[32] = {0,};
+       pts_appdata_t *ad = pts_get_appdata();
+
+       if (strcmp(part, "elm.text") == 0) {
+               switch (index) {
+               case PTS_SIZE_FIT_TO_PAPER:
+                       label = strdup(_("IDS_BT_OPT_FIT_TO_PAPER"));
+                       break;
+               case PTS_SIZE_5X7:
+                       label = strdup(IDS_BR_OPT_5X7);
+                       break;
+               case PTS_SIZE_4X6:
+                       label = strdup(IDS_BR_OPT_4X6);
+                       break;
+               case PTS_SIZE_3_5X5:
+                       label = strdup(IDS_BR_OPT_3_5X5);
+                       break;
+               case PTS_SIZE_WALLET:
+                       label = strdup(IDS_BR_OPT_WALLET);
+                       break;
+               case PTS_SIZE_CUSTOM:
+                       if (ad->size_popup_info.custom_unit == 1) { // cm unit
+                               snprintf(custom, 32, "%s (%.1lfx%.1lfcm)", _("IDS_COM_SK_CUSTOM"), ad->size_popup_info.custom_height, ad->size_popup_info.custom_width);
+                       } else if (ad->size_popup_info.custom_unit == 2) { // inch unit
+                               snprintf(custom, 32, "%s (%.1lf\"x%.1lf\")", _("IDS_COM_SK_CUSTOM"), ad->size_popup_info.custom_height, ad->size_popup_info.custom_width);
+                       } else {
+                               snprintf(custom, 32, "%s (%.1lfx%.1lf)", _("IDS_COM_SK_CUSTOM"), ad->size_popup_info.custom_height, ad->size_popup_info.custom_width);
+                       }
+
+                       label = strdup(custom);
+                       break;
+               default:
+                       label = strdup("Unknown option");
+                       break;
+               }
+       }
+
+       PTS_TRACE_END;
+       return label;
+}
+
+static Evas_Object *__pts_size_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+
+       int index = (int)data;
+       PTS_DEBUG("Passed index : %d", index);
+       Evas_Object *radio;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+               radio = elm_radio_add(obj);
+               elm_radio_state_value_set(radio, index);
+               elm_radio_group_add(radio, size_radio_main);
+               PTS_DEBUG("size_index[%d]", size_index);
+               // It's filter to avoid all radio selection
+               if (size_index == index) {
+                       elm_radio_value_set(radio, size_index);
+                       PTS_DEBUG("OK...Set radio button using size_index[%d]", size_index);
+               }
+
+               evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               return radio;
+       }
+
+       PTS_TRACE_END;
+       return NULL;
+}
+
+static void __pts_size_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       int size = -1;
+       Elm_Object_Item *item = event_info;
+
+       if (item != NULL) {
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+
+               size = (int)elm_object_item_data_get(item);
+               if (size > PTS_SIZE_FIT_TO_PAPER && size < PTS_SIZE_CUSTOM) {
+                       PTS_DEBUG("Selected size : %d", size);
+
+                       ad->size_popup_info.image_size = size;
+
+                       // Now call real event trigger to update radio button when selected.
+                       elm_genlist_item_update(item);
+
+                       load_image_editor_ug(ad);
+               } else if (size == PTS_SIZE_CUSTOM) {
+                       pts_create_custom_popup(ad->main_info.navi, ad);
+               } else if (size == PTS_SIZE_FIT_TO_PAPER) {
+                       size_index = ad->size_popup_info.image_size = size;
+                       // just back to fit-to-paper of original image
+                       PTS_IF_FREE_MEM(ad->printing_data.request_files[0]);
+                       ad->printing_data.request_files[0] = strdup(ad->printing_data.input_file);
+                       PTS_DEBUG("original_image_path: %s", ad->printing_data.request_files[0]);
+                       pts_main_view_rotate_image(ad, app_get_device_orientation());
+               } else {
+                       PTS_DEBUG("Unknown size");
+               }
+               PTS_IF_DEL_OBJ(obj);
+               PTS_IF_DEL_OBJ(ad->size_popup_info.size_popup);
+               PTS_IF_DEL_OBJ(size_radio_main);
+       }
+       PTS_TRACE_END;
+}
+
+Evas_Object *pts_create_size_popup(Evas_Object *parent, pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *popup;
+       Evas_Object *genlist;
+       Evas_Object *btn1;
+       int index;
+
+       popup = elm_popup_add(parent);
+       elm_object_style_set(popup,"content_no_vhpad");
+       elm_object_part_text_set(popup, "title,text", _("IDS_IMGE_BODY_SIZE"));
+
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "min_menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1, "popup_button/default");
+       elm_object_text_set(btn1, _("IDS_COM_SK_CANCEL"));
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", _pts_size_cancel_cb, ad);
+       // Add cancel event
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _pts_size_cancel_cb, ad);
+
+       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);
+
+       if (!size_radio_main) {
+               size_radio_main = elm_radio_add(genlist);
+               elm_radio_state_value_set(size_radio_main, size_index);
+               elm_radio_value_set(size_radio_main, size_index);
+       }
+
+       size_itc.item_style = "1text.1icon.2";
+       size_itc.func.text_get = __pts_size_label_get;
+       size_itc.func.content_get = __pts_size_icon_get;
+       size_itc.func.state_get = NULL;
+       size_itc.func.del = NULL;
+
+       Elm_Object_Item  *item = NULL;
+       for (index = 0; index < PTS_SIZE_MAX; index++) {
+               item = elm_genlist_item_append(genlist, &size_itc, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, __pts_size_sel, ad);
+               PTS_DEBUG("index[%d] - item added : %s", index, (NULL == item)? "FAILURE" : "SUCCESS");
+       }
+
+       Evas_Object *box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_box_pack_end(box, genlist);
+
+       ad->size_popup_info.size_popup_portrait_height = elm_genlist_items_count(genlist) * 114 * elm_config_scale_get();
+       ad->size_popup_info.size_popup_landscape_height = 300;
+
+       int orientation = 0;
+       if (ad->win)
+               orientation = elm_win_rotation_get(ad->win);
+
+       if (APP_DEVICE_ORIENTATION_0 == orientation ||
+                       APP_DEVICE_ORIENTATION_180 == orientation) {
+               evas_object_size_hint_min_set(box, 400 * elm_config_scale_get(), ad->size_popup_info.size_popup_portrait_height);
+       } else {
+               evas_object_size_hint_min_set(box, 400 * elm_config_scale_get(), ad->size_popup_info.size_popup_landscape_height);
+       }
+
+       evas_object_show(box);
+       elm_object_part_content_set(layout, "elm.swallow.content" , box);
+       elm_object_content_set(popup, box);
+       ad->size_popup_info.size_popup_box = box;
+       elm_object_focus_set(popup, EINA_TRUE);
+       evas_object_show(genlist);
+       evas_object_show(popup);
+
+       ad->size_popup_info.size_popup = popup;
+
+       PTS_TRACE_END;
+       return genlist;
+}
+
+static void _pts_custom_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       ad->size_popup_info.image_size = PTS_SIZE_CUSTOM;
+       load_image_editor_ug(ad);
+
+       PTS_IF_DEL_OBJ(obj);
+       PTS_IF_DEL_OBJ(ad->size_popup_info.custom_popup);
+       elm_theme_extension_del(NULL, RESDIR"/edje/genlist_custom.edj");
+
+       PTS_TRACE_END;
+}
+
+static void _pts_custom_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+       PTS_IF_DEL_OBJ(obj);
+       PTS_IF_DEL_OBJ(ad->size_popup_info.custom_popup);
+
+       // FIXME - just back to original size
+       int tmp_width = 0;
+       int tmp_height = 0;
+
+       get_image_resolution(ad->printing_data.input_file, &tmp_width, &tmp_height);
+       ad->size_popup_info.custom_width = (double)tmp_width;
+       ad->size_popup_info.custom_height = (double)tmp_height;
+       ad->size_popup_info.custom_w_ratio = ad->size_popup_info.custom_width / ad->size_popup_info.custom_height;
+       PTS_DEBUG("Original image size : %lfx%lf(%lfx1)", ad->size_popup_info.custom_width, ad->size_popup_info.custom_height, ad->size_popup_info.custom_w_ratio);
+       // original image size (unit cm) calculated by 300dpi
+       ad->size_popup_info.custom_width = (ad->size_popup_info.custom_width / 300) * 2.54;
+       ad->size_popup_info.custom_height = (ad->size_popup_info.custom_height / 300) * 2.54;
+       ad->size_popup_info.custom_unit = 1; // cm unit
+
+       elm_theme_extension_del(NULL, RESDIR"/edje/genlist_custom.edj");
+
+       PTS_TRACE_END;
+}
+
+static char *__pts_custom_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       int index = (int)data;
+       char *label = NULL;
+
+       if (strcmp(part, "elm.text") == 0) {
+               if (index == 0) {
+                       label = strdup(_("IDS_IMGE_BODY_WIDTH"));
+               } else if (index == 2) {
+                       label = strdup(_("IDS_IMGE_BODY_HEIGHT"));
+               } else if (index == 4) {
+                       label = strdup(_("IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"));
+               } else {
+                       label = strdup("Unknown label");
+               }
+       }
+
+       PTS_TRACE_END;
+       return label;
+}
+
+static void _changed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       char *input_str = NULL;
+       const char *entry_text = NULL;
+       int index = (int)data;
+
+       entry_text = elm_entry_entry_get(obj);
+       if ((input_str = elm_entry_markup_to_utf8(entry_text))) {
+               pts_appdata_t *ad = pts_get_appdata();
+
+               if (index == 1) {
+                       ad->size_popup_info.custom_width = atoi(input_str);
+               } else if (index == 3) {
+                       ad->size_popup_info.custom_height = atoi(input_str);
+               } else {
+                       PTS_DEBUG("Unknown index : %d", index);
+               }
+
+               PTS_DEBUG("Typed custom value : width[%lf] x height[%lf]", ad->size_popup_info.custom_width, ad->size_popup_info.custom_height);
+
+               PTS_IF_FREE_MEM(input_str);
+       }
+       PTS_TRACE_END;
+}
+
+static void _focused_cb(void *data, Evas_Object *obj, void *event_info) // Focused callback will show X marked button and hide guidetext.
+{
+       PTS_TRACE_BEGIN;
+       elm_object_signal_emit(data, "elm,state,guidetext,hide", "elm");
+       PTS_TRACE_END;
+}
+
+static void _unfocused_cb(void *data, Evas_Object *obj, void *event_info) // Unfocused callback will show guidetext and hide X marked button.
+{
+       PTS_TRACE_BEGIN;
+       char temp_size[32] = {0,};
+
+       if (elm_entry_is_empty(obj)) {
+               elm_object_signal_emit(data, "elm,state,guidetext,show", "elm");
+       }
+
+       if (aspect_ratio) {
+               pts_appdata_t *ad = pts_get_appdata();
+
+               if (obj == width_entry) {
+                       ad->size_popup_info.custom_height = ad->size_popup_info.custom_width / ad->size_popup_info.custom_w_ratio;
+                       snprintf(temp_size, 32, "%.1lf", ad->size_popup_info.custom_height);
+                       elm_object_signal_emit(height_layout, "elm,state,guidetext,hide", "elm");
+                       elm_entry_entry_set(height_entry, temp_size);
+               } else if (obj == height_entry) {
+                       ad->size_popup_info.custom_width = ad->size_popup_info.custom_height * ad->size_popup_info.custom_w_ratio;
+                       snprintf(temp_size, 32, "%.1lf", ad->size_popup_info.custom_width);
+                       elm_object_signal_emit(width_layout, "elm,state,guidetext,hide", "elm");
+                       elm_entry_entry_set(width_entry, temp_size);
+               } else {
+                       PTS_DEBUG("Unknown entry : %p", obj);
+               }
+       }
+       PTS_TRACE_END;
+}
+
+static void _eraser_clicked_cb(void *data, Evas_Object *obj, const char *emission, const char *source) // When X marked button clicked, make string as empty.
+{
+       PTS_TRACE_BEGIN;
+       elm_entry_entry_set(data, "");
+       PTS_TRACE_END;
+}
+
+static Evas_Object *__pts_singleline_editfield_add(Evas_Object *parent, int index) // For single lined editfield without top title.
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *layout, *entry;
+       static Elm_Entry_Filter_Accept_Set digits_filter_data;
+       char temp_size[32] = {0,};
+       pts_appdata_t *ad = pts_get_appdata();
+
+       layout = elm_layout_add(parent);
+       elm_layout_theme_set(layout, "layout", "editfield", "default"); // Default editfield layout style without top title.
+
+       entry = elm_entry_add(layout);
+       elm_entry_input_panel_layout_set(entry, ELM_INPUT_PANEL_LAYOUT_NUMBER);
+       elm_entry_scrollable_set(entry, EINA_TRUE); // Make entry as scrollable single line.
+       elm_entry_single_line_set(entry, EINA_TRUE);
+       elm_object_signal_emit(layout, "elm,state,eraser,show", "elm");
+       evas_object_smart_callback_add(entry, "changed", _changed_cb, (void *)index);
+       evas_object_smart_callback_add(entry, "focused", _focused_cb, layout);
+       evas_object_smart_callback_add(entry, "unfocused", _unfocused_cb, layout);
+
+       digits_filter_data.accepted = "0123456789.";
+       digits_filter_data.rejected = NULL;
+       elm_entry_markup_filter_append(entry, elm_entry_filter_accept_set, &digits_filter_data);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", entry);
+       if (index == 1) {
+               snprintf(temp_size, 32, "%.1lf", ad->size_popup_info.custom_width);
+               elm_object_part_text_set(layout, "elm.guidetext", temp_size);
+               width_layout = layout;
+               width_entry = entry;
+       } else if (index == 3) {
+               snprintf(temp_size, 32, "%.1lf", ad->size_popup_info.custom_height);
+               elm_object_part_text_set(layout, "elm.guidetext", temp_size);
+               height_layout = layout;
+               height_entry = entry;
+       } else {
+               elm_object_part_text_set(layout, "elm.guidetext", "Custom Size");
+       }
+
+       elm_object_signal_callback_add(layout, "elm,eraser,clicked", "elm", _eraser_clicked_cb, entry);
+
+       evas_object_show(entry);
+
+       PTS_TRACE_END;
+       return layout;
+}
+
+static void _pts_custom_unit_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       char temp[32] = {0,};
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_DEBUG("Current unit : %d", ad->size_popup_info.custom_unit);
+
+       if (ad->size_popup_info.custom_unit == 1) { // cm to inch
+               ad->size_popup_info.custom_unit = 2;
+               ad->size_popup_info.custom_width = ad->size_popup_info.custom_width / 2.54;
+               ad->size_popup_info.custom_height = ad->size_popup_info.custom_height / 2.54;
+               snprintf(temp, 32, "%s", _("IDS_COM_BODY_UNIT_CM"));
+       } else if (ad->size_popup_info.custom_unit == 2) { // inch to cm
+               ad->size_popup_info.custom_unit = 1;
+               ad->size_popup_info.custom_width = ad->size_popup_info.custom_width * 2.54;
+               ad->size_popup_info.custom_height = ad->size_popup_info.custom_height * 2.54;
+               snprintf(temp, 32, "%s", _("IDS_COM_BODY_UNIT_INCH"));
+       } else {
+               PTS_DEBUG("Unknown unit");
+               PTS_TRACE_END;
+               return;
+       }
+
+       elm_object_text_set(obj, temp);
+
+       snprintf(temp, 32, "%.1lf", ad->size_popup_info.custom_width);
+       elm_object_signal_emit(width_layout, "elm,state,guidetext,hide", "elm");
+       elm_entry_entry_set(width_entry, temp);
+       snprintf(temp, 32, "%.1lf", ad->size_popup_info.custom_height);
+       elm_object_signal_emit(height_layout, "elm,state,guidetext,hide", "elm");
+       elm_entry_entry_set(height_entry, temp);
+
+       PTS_DEBUG("Changed unit : %d", ad->size_popup_info.custom_unit);
+       PTS_TRACE_END;
+}
+
+static void _pts_custom_unit_inch_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       char temp[32] = {0,};
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_DEBUG("Current unit : %d", ad->size_popup_info.custom_unit);
+
+       if (ad->size_popup_info.custom_unit == 1) { // cm to inch
+               ad->size_popup_info.custom_unit = 2;
+               ad->size_popup_info.custom_width = ad->size_popup_info.custom_width / 2.54;
+               ad->size_popup_info.custom_height = ad->size_popup_info.custom_height / 2.54;
+       } else {
+               PTS_DEBUG("Unknown unit");
+               PTS_TRACE_END;
+               return;
+       }
+
+       snprintf(temp, 32, "%.1lf", ad->size_popup_info.custom_width);
+       elm_object_signal_emit(width_layout, "elm,state,guidetext,hide", "elm");
+       elm_entry_entry_set(width_entry, temp);
+       snprintf(temp, 32, "%.1lf", ad->size_popup_info.custom_height);
+       elm_object_signal_emit(height_layout, "elm,state,guidetext,hide", "elm");
+       elm_entry_entry_set(height_entry, temp);
+
+       PTS_DEBUG("Changed unit : %d", ad->size_popup_info.custom_unit);
+       PTS_TRACE_END;
+}
+
+static void _pts_custom_unit_cm_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       char temp[32] = {0,};
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_DEBUG("Current unit : %d", ad->size_popup_info.custom_unit);
+
+       if (ad->size_popup_info.custom_unit == 2) { // inch to cm
+               ad->size_popup_info.custom_unit = 1;
+               ad->size_popup_info.custom_width = ad->size_popup_info.custom_width * 2.54;
+               ad->size_popup_info.custom_height = ad->size_popup_info.custom_height * 2.54;
+       } else {
+               PTS_DEBUG("Unknown unit");
+               PTS_TRACE_END;
+               return;
+       }
+
+       snprintf(temp, 32, "%.1lf", ad->size_popup_info.custom_width);
+       elm_object_signal_emit(width_layout, "elm,state,guidetext,hide", "elm");
+       elm_entry_entry_set(width_entry, temp);
+       snprintf(temp, 32, "%.1lf", ad->size_popup_info.custom_height);
+       elm_object_signal_emit(height_layout, "elm,state,guidetext,hide", "elm");
+       elm_entry_entry_set(height_entry, temp);
+
+       PTS_DEBUG("Changed unit : %d", ad->size_popup_info.custom_unit);
+       PTS_TRACE_END;
+}
+
+static Evas_Object *__pts_custom_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *editfield = NULL;
+       Evas_Object *check = NULL;
+       Evas_Object *button = NULL;
+       int index = (int)data;
+       char unit[32] = {0,};
+
+       PTS_DEBUG("index: %d, passed part: %s", index, part);
+       if (!strcmp(part, "elm.icon")) {
+               switch (index) {
+               case 1: // width text field
+               case 3: // height text field
+                       editfield = __pts_singleline_editfield_add(obj, index);
+                       return editfield;
+               case 4: // check aspect ratio
+                       check = elm_check_add(obj);
+                       //set the State pointer to keep the current UI state of Checkbox.
+                       elm_check_state_pointer_set(check, &aspect_ratio);
+
+                       evas_object_size_hint_weight_set(check, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+                       evas_object_size_hint_align_set(check, EVAS_HINT_FILL, EVAS_HINT_FILL);
+                       return check;
+               case 5: // change unit button
+                       button = elm_button_add(obj);
+                       snprintf(unit, 32, "%s", _("IDS_COM_BODY_UNIT_INCH"));
+                       elm_object_text_set(button, unit);
+                       elm_object_part_content_set(obj, "button1", button);
+                       evas_object_smart_callback_add(button, "clicked", _pts_custom_unit_cb, obj);
+                       return button;
+               }
+       } else if (!strcmp(part, "elm.icon.1")) {
+               button = elm_button_add(obj);
+               snprintf(unit, 32, "%s", _("IDS_COM_BODY_UNIT_INCH"));
+               elm_object_text_set(button, unit);
+               elm_object_part_content_set(obj, "button1", button);
+               evas_object_smart_callback_add(button, "clicked", _pts_custom_unit_inch_cb, obj);
+               return button;
+       } else if (!strcmp(part, "elm.icon.2")) {
+               button = elm_button_add(obj);
+               snprintf(unit, 32, "%s", _("IDS_COM_BODY_UNIT_CM"));
+               elm_object_text_set(button, unit);
+               elm_object_part_content_set(obj, "button2", button);
+               evas_object_smart_callback_add(button, "clicked", _pts_custom_unit_cm_cb, obj);
+               return button;
+       } else {
+               PTS_DEBUG("Index: %d, Unknown part: %s", index, part);
+       }
+
+       PTS_TRACE_END;
+       return NULL;
+}
+
+static void __pts_custom_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       int index = -1;
+       Elm_Object_Item *item = event_info;
+
+       if (item != NULL) {
+               elm_genlist_item_selected_set(item, EINA_FALSE);
+
+               index = (int)elm_object_item_data_get(item);
+               if (index == 4) {
+                       aspect_ratio = !aspect_ratio;
+                       PTS_DEBUG("Preserve aspect ratio : %d", aspect_ratio);
+
+                       elm_genlist_item_update(item);
+               } else {
+                       PTS_DEBUG("Unknown index");
+               }
+       }
+       PTS_TRACE_END;
+}
+
+Evas_Object *pts_create_custom_popup(Evas_Object *parent, pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *popup;
+       Evas_Object *genlist;
+       Evas_Object *ok_button;
+       Evas_Object *cancel_button;
+       int index = -1;
+
+       popup = elm_popup_add(parent);
+       elm_object_style_set(popup,"content_no_vhpad");
+       elm_object_part_text_set(popup, "title,text", _("IDS_COM_SK_CUSTOM"));
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "min_menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       cancel_button = elm_button_add(popup);
+       elm_object_style_set(cancel_button,"popup_button/default");
+       elm_object_text_set(cancel_button, _("IDS_COM_SK_CANCEL"));
+       elm_object_part_content_set(popup, "button1", cancel_button);
+       evas_object_smart_callback_add(cancel_button, "clicked", _pts_custom_cancel_cb, ad);
+
+       ok_button = elm_button_add(popup);
+       elm_object_style_set(ok_button,"popup_button/default");
+       elm_object_text_set(ok_button, _("IDS_COM_SK_OK"));
+       elm_object_part_content_set(popup, "button2", ok_button);
+       evas_object_smart_callback_add(ok_button, "clicked", _pts_custom_ok_cb, ad);
+
+       elm_theme_extension_add(NULL, RESDIR"/edje/genlist_custom.edj");
+       PTS_DEBUG("Added extension theme");
+
+       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);
+
+       title_itc.item_style = "dialogue/title";
+       title_itc.func.text_get = __pts_custom_label_get;
+       title_itc.func.content_get = NULL;
+       title_itc.func.state_get = NULL;
+       title_itc.func.del = NULL;
+
+       text_itc.item_style = "1icon";
+       text_itc.func.text_get = NULL;
+       text_itc.func.content_get = __pts_custom_icon_get;
+       text_itc.func.state_get = NULL;
+       text_itc.func.del = NULL;
+
+       check_itc.item_style = "1text.1icon.2";
+       check_itc.func.text_get = __pts_custom_label_get;
+       check_itc.func.content_get = __pts_custom_icon_get;
+       check_itc.func.state_get = NULL;
+       check_itc.func.del = NULL;
+
+       //button_itc.item_style = "dialogue/bg/2icon";
+       button_itc.item_style = "custom/2icon";
+       button_itc.func.text_get = NULL;
+       button_itc.func.content_get = __pts_custom_icon_get;
+       button_itc.func.state_get = NULL;
+       button_itc.func.del = NULL;
+
+       Elm_Object_Item  *item = NULL;
+       Elm_Genlist_Item_Class *temp_itc = NULL;
+       Evas_Smart_Cb temp_cb = NULL;
+
+       for (index = 0; index < 6; index++) {
+               if (index == 0 || index == 2) { // width&height title
+                       temp_itc = &title_itc;
+               } else if (index == 1 || index == 3) { // width&height text field
+                       temp_itc = &text_itc;
+               } else if (index == 4) { // aspect ratio check
+                       temp_itc = &check_itc;
+                       temp_cb = __pts_custom_sel;
+               } else if (index == 5) { // change unit button
+                       temp_itc = &button_itc;
+               } else {
+               }
+
+               item = elm_genlist_item_append(genlist, temp_itc, (void *)index, NULL, ELM_GENLIST_ITEM_NONE, temp_cb, ad);
+               if (index != 4) {
+                       elm_genlist_item_select_mode_set(item, ELM_OBJECT_SELECT_MODE_NONE);
+               }
+               PTS_DEBUG("index[%d] - item added : %s", index, (NULL == item)? "FAILURE" : "SUCCESS");
+       }
+
+       Evas_Object *box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_box_pack_end(box, genlist);
+
+       ad->size_popup_info.custom_popup_portrait_height = (5 * 114 + 4) * elm_config_scale_get();
+       ad->size_popup_info.custom_popup_landscape_height = 300;
+       int orientation = 0;
+       if (ad->win)
+               orientation = elm_win_rotation_get(ad->win);
+
+       if (APP_DEVICE_ORIENTATION_0 == orientation ||
+                       APP_DEVICE_ORIENTATION_180 == orientation) {
+               evas_object_size_hint_min_set(box, 400 * elm_config_scale_get(), ad->size_popup_info.custom_popup_portrait_height);
+       } else {
+               evas_object_size_hint_min_set(box, 400 * elm_config_scale_get(), ad->size_popup_info.custom_popup_landscape_height);
+       }
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , box);
+       //evas_object_event_callback_add(popup, EVAS_CALLBACK_MOUSE_UP, _pts_mouse_cb, ad);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _pts_custom_cancel_cb, ad);
+       elm_object_focus_set(popup, EINA_TRUE);
+
+       elm_object_content_set(popup, box);
+       ad->size_popup_info.custom_popup_box = box;
+
+       evas_object_show(genlist);
+       evas_object_show(popup);
+
+       ad->size_popup_info.custom_popup = popup;
+
+       PTS_TRACE_END;
+       return genlist;
+}
+
+static Evas_Object *__pts_utils_create_conformant(Evas_Object *parent)
+{
+
+       Evas_Object *conform = NULL;
+       elm_win_conformant_set(parent, TRUE);
+       conform = elm_conformant_add(parent);
+
+       elm_object_style_set(conform, "internal_layout");
+
+       //evas_object_size_hint_weight_set(conform, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       //evas_object_size_hint_align_set(conform, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_show(conform);
+
+       return conform;
+}
+
+Evas_Object *pts_utils_create_layout(Evas_Object *navi_frame)
+{
+       Evas_Object *layout;
+       layout = elm_layout_add(navi_frame);
+       elm_layout_theme_set(layout, "layout", "application", "default");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       //Evas_Object *bg = elm_bg_add(layout);
+       //evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       //elm_object_style_set(bg, "group_list");
+       //elm_object_part_content_set(layout, "elm.swallow.bg", bg);
+
+       //Evas_Object *conform = __pts_utils_create_conformant(layout);
+       //assertm_if(NULL == conform, "NULL!!");
+       //elm_object_part_content_set(layout, "elm.swallow.content", conform);
+       //elm_object_part_content_set(layout, "elm.swallow.content", layout);
+       evas_object_show(layout);
+
+       return layout;
+}
+
+/*
+* this function is used to compose folder and filename.
+*/
+char **__compose_image_files_path(char *folder, const char **filesname, const int num_of_files)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(folder == NULL, NULL, "folder is NULL");
+       PTS_RETV_IF(filesname == NULL, NULL, "filesname is NULL");
+       PTS_RETV_IF(num_of_files <= 0, NULL, "num is invalid(%d)",num_of_files);
+
+       char **paths = NULL;
+       paths = (char **)malloc(sizeof(char *)*num_of_files);
+       PTS_RETV_IF(paths == NULL , NULL, "malloc failed!");
+
+       int count = 0;
+       int index = 0;
+       char filepath[512] = {0};
+
+       for (; count < num_of_files ; count++) {
+               snprintf(filepath, 512, "%s/%s", folder, filesname[count]);
+
+               paths[count] = strdup(filepath);
+               if (paths[count] == NULL) {
+                       PTS_DEBUG("Failed to strdup");
+                       for (index = 0 ; index < count ; index++) {
+                               PTS_IF_FREE_MEM(paths[index]);
+                       }
+                       PTS_IF_FREE_MEM(paths);
+                       return NULL;
+               }
+               PTS_DEBUG("files[%d]: %s", count, paths[count]);
+       }
+
+       PTS_TRACE_END;
+       return paths;
+}
+
+/*
+* validate the path of image files.
+*/
+bool __validate_file_type(char **files, int num)
+{
+       PTS_TRACE_BEGIN;
+
+       PTS_RETV_IF(files == NULL || num <= 0, false, "the input param is invalid!");
+
+       int i = 0;
+       char *path = NULL;
+       const int filters_num = 16;
+       /* the image type that cups supports */
+       const char *filters[] = {".gif", ".bmp", ".sgi", ".ras", ".pbm", ".pgm", ".ppm", ".pcd",
+                                                        ".pix", ".png", ".jpeg", ".jpg", ".jpe", ".tiff", ".tif", ".pdf"
+                                                       };
+
+       for (; i < num; i++) {
+               path = *(files + i);
+
+               /* check whether the file is exist */
+               int ret = -1;
+               struct stat buf;
+
+               ret = stat(path, &buf);
+               PTS_RETV_IF(ret != 0, false, "get file(%s) status failed!", path);
+
+               /* check whether the file can be supported */
+               char *p = NULL;
+               p = strrchr(path, '.');
+               PTS_RETV_IF(p == NULL, false, "get file(%s) filter failed!", path);
+
+               int j = 0;
+               int tag = 0;
+
+               for (; j < filters_num; j++) {
+                       if (0 == strcasecmp(p, filters[j])) {
+                               tag = 1;
+                               break;
+                       }
+               }
+               PTS_RETV_IF(tag == 0, false, "the file(%s) can't be supported!", path);
+       }
+
+       PTS_TRACE_END;
+       return true;
+}
+
+/*
+* validate the path of image files.
+*/
+bool _is_pdf_file_type(char **files, int num)
+{
+       PTS_TRACE_BEGIN;
+
+       PTS_RETV_IF(files == NULL || num <= 0, false, "the input param is invalid!");
+
+       int i = 0;
+       char *path = NULL;
+       const int filters_num = 1;
+       /* the image type that cups supports */
+       const char *filters[] = {".pdf"};
+
+       for (; i < num; i++) {
+               path = *(files + i);
+
+               /* check whether the file is exist */
+               int ret = -1;
+               struct stat buf;
+
+               ret = stat(path, &buf);
+               PTS_RETV_IF(ret != 0, false, "get file(%s) status failed!", path);
+
+               /* check whether the file can be supported */
+               char *p = NULL;
+               p = strrchr(path, '.');
+               PTS_RETV_IF(p == NULL, false, "get file(%s) filter failed!", path);
+
+               int j = 0;
+               int tag = 0;
+
+               for (; j < filters_num; j++) {
+                       if (0 == strcasecmp(p, filters[j])) {
+                               tag = 1;
+                               break;
+                       }
+               }
+               PTS_RETV_IF(tag == 0, false, "the file(%s) can't be supported!", path);
+       }
+
+       PTS_TRACE_END;
+       return true;
+}
+
+/*
+* validate the path of image files.
+*/
+bool _is_img_file_type(char **files, int num)
+{
+       PTS_TRACE_BEGIN;
+
+       PTS_RETV_IF(files == NULL || num <= 0, false, "the input param is invalid!");
+
+       int i = 0;
+       char *path = NULL;
+       const int filters_num = 15;
+       /* the image type that cups supports */
+       const char *filters[] = {".gif", ".bmp", ".sgi", ".ras", ".pbm", ".pgm", ".ppm", ".pcd",
+                                                        ".pix", ".png", ".jpeg", ".jpg", ".jpe", ".tiff", ".tif"};
+
+       for (; i < num; i++) {
+               path = *(files + i);
+
+               /* check whether the file is exist */
+               int ret = -1;
+               struct stat buf;
+
+               ret = stat(path, &buf);
+               PTS_RETV_IF(ret != 0, false, "get file(%s) status failed!", path);
+
+               /* check whether the file can be supported */
+               char *p = NULL;
+               p = strrchr(path, '.');
+               PTS_RETV_IF(p == NULL, false, "get file(%s) filter failed!", path);
+
+               int j = 0;
+               int tag = 0;
+
+               for (; j < filters_num; j++) {
+                       if (0 == strcasecmp(p, filters[j])) {
+                               tag = 1;
+                               break;
+                       }
+               }
+               PTS_RETV_IF(tag == 0, false, "the file(%s) can't be supported!", path);
+       }
+
+       PTS_TRACE_END;
+       return true;
+}
+
+inline char *_pts_printing_data_get_directory(pts_printing_data_t *data)
+{
+       return data->directory;
+}
+
+inline char **_pts_printing_data_get_request_files(pts_printing_data_t *data)
+{
+       return data->request_files;
+}
+inline int _pts_printing_data_get_files_count(pts_printing_data_t *data)
+{
+       return data->num_of_files;
+}
+
+inline int _pts_printing_data_get_index(pts_printing_data_t *data)
+{
+       return data->current_index;
+}
+
+inline char *_pts_printing_data_get_type(pts_printing_data_t *data)
+{
+       return data->type;
+}
+
+Eina_Bool _pts_printing_data_set_directory(const char *directory, pts_printing_data_t *data)
+{
+       PTS_RETV_IF(directory == NULL, EINA_FALSE, "directory is NULL");
+       PTS_RETV_IF(data == NULL, EINA_FALSE, "data is NULL");
+
+       data->directory = strdup(directory);
+
+       PTS_RETV_IF(data->directory == NULL, EINA_FALSE, "Failed to strdup");
+       return EINA_TRUE;
+}
+
+Eina_Bool _pts_printing_data_set_request_files(const char **request_files, const int files_count, pts_printing_data_t *data)
+{
+       PTS_RETV_IF(request_files == NULL, EINA_FALSE, "request_files is NULL");
+       PTS_RETV_IF(files_count <= 0, EINA_FALSE, "files_count is less than zero");
+
+       int count = 0;
+       count = _pts_printing_data_get_files_count(data);
+       PTS_RETV_IF(count != files_count, EINA_FALSE, "files count is not same with argument");
+
+       char *temp                              = NULL;
+       char **composite_files  = NULL;
+       bool ret                                        = false;
+
+       temp = _pts_printing_data_get_directory(data);
+       if (temp != NULL) {
+               composite_files = __compose_image_files_path(temp, request_files, count);
+               PTS_RETV_IF(composite_files == NULL, EINA_FALSE, "compose the path of print files failed!");
+               data->request_files = composite_files;
+       } else {
+               data->request_files = (char **)calloc(count, sizeof(char *));
+               PTS_RETV_IF(data->request_files == NULL, EINA_FALSE, "Failed to calloc");
+
+               int     index = 0;
+               for (index = 0 ; index < count ; index++) {
+                       temp = strdup(request_files[index]);
+                       PTS_RETV_IF(temp == NULL, EINA_FALSE, "Failed to strdup");
+                       data->request_files[index] = temp;
+                       temp = NULL;
+               }
+       }
+
+       ret = __validate_file_type(data->request_files, files_count);
+       PTS_RETV_IF(ret != true, EINA_FALSE, "files is invalid");
+
+
+       return EINA_TRUE;
+}
+
+Eina_Bool _pts_printing_data_set_files_count(const char *num_of_files, pts_printing_data_t *data)
+{
+       PTS_RETV_IF(num_of_files == NULL, EINA_FALSE,"num_of_files is NULL");
+       PTS_RETV_IF(data == NULL, EINA_FALSE, "data is NULL");
+
+       int count = 0;
+       count = atoi(num_of_files);
+       PTS_RETV_IF(count <=0, EINA_FALSE, "num_of_files is less or equal than zero");
+       data->num_of_files = count;
+       return EINA_TRUE;
+}
+
+Eina_Bool _pts_printing_data_set_index(const char *current_index, pts_printing_data_t *data)
+{
+       PTS_RETV_IF(current_index == NULL, EINA_FALSE,"current_index is NULL");
+       PTS_RETV_IF(data == NULL, EINA_FALSE, "data is NULL");
+
+       int index = -1;
+       index = atoi(current_index);
+
+       PTS_RETV_IF(index < 0, EINA_FALSE, "index is less than zero");
+       if (index >= _pts_printing_data_get_files_count(data)) {
+               PTS_DEBUG("the current index of print files(%s) is invalid!", index);
+               return EINA_FALSE;
+       } else {
+               data->current_index = index;
+               return EINA_TRUE;
+       }
+}
+
+Eina_Bool _is_document_ux_type(const char *type)
+{
+       PTS_RETV_IF(type == NULL, EINA_FALSE, "type is NULL");
+       if (strcasecmp(type, "DOC") == 0) {
+               return EINA_TRUE;
+       }
+       return EINA_FALSE;
+}
+
+Eina_Bool _is_image_ux_type(const char *type)
+{
+       PTS_RETV_IF(type == NULL, EINA_FALSE, "type is NULL");
+       if (strcasecmp(type, "IMG") == 0) {
+               return EINA_TRUE;
+       }
+       return EINA_FALSE;
+}
+
+Eina_Bool _is_valid_print_file_type(const char *type)
+{
+       if (strcasecmp(type, "IMG") && strcasecmp(type,"DOC") && strcasecmp(type,"WEB")) {
+               PTS_DEBUG("the type of print files(%s) is invalid!", type);
+               return EINA_FALSE;
+       }
+
+       return EINA_TRUE;
+}
+
+Eina_Bool _pts_printing_data_set_type(const char *type, pts_printing_data_t *data)
+{
+       PTS_RETV_IF(type == NULL, EINA_FALSE, "type is NULL");
+       PTS_RETV_IF(data == NULL, EINA_FALSE, "data is NULL");
+       PTS_RETV_IF(_is_valid_print_file_type(type) == EINA_FALSE, EINA_FALSE, "invalid type");
+
+       data->type = strdup(type);
+       PTS_RETV_IF(data->type == NULL, EINA_FALSE, "Failed to strdup");
+       return EINA_TRUE;
+}
diff --git a/mobileprint/app/pts_main_view.c b/mobileprint/app/pts_main_view.c
new file mode 100644 (file)
index 0000000..57b1dca
--- /dev/null
@@ -0,0 +1,2071 @@
+/*
+*  Mobileprint
+*
+* 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 _GNU_SOURCE
+#include <string.h>
+#include <math.h>
+#include <fcntl.h>
+#include <glib.h>
+#include <app.h>
+#include <appsvc.h>
+#include <ui-gadget.h>
+#include <notification.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <efl_assist.h>
+
+#include <page_preview.h>
+#include <paper_size.h>
+#include <previewgen.h>
+#include "pt_api.h"
+
+#include "pts_common.h"
+#include "pts_main_view.h"
+#include "pts_setting_view.h"
+#include "preview_content.h"
+#include "preview_util.h"
+
+
+#define MOBILEPRINT_PACKAGENAME "org.tizen.mobileprint"
+#define ICON_DIR "/usr/apps/org.tizen.mobileprint/res/images"
+#define ICON_SETTING "/usr/apps/org.tizen.mobileprint/res/images/pt_printer_setting.png"
+#define MOBILEPRINT_DEFAULTIMG "/usr/share/icons/default/small/org.tizen.mobileprint.png"
+#define MOBILEPRINT_TMP_STR "_mobileprint.pdf"
+
+char *g_current_preview_path = NULL;
+int g_pages_count = 0;
+
+void _wifi_qs_monitoring_cb(keynode_t *key, void *data);
+
+static void __pts_main_view_btn_setting_cb(void *data, Evas_Object *obj, void *event_info);
+static Eina_Bool __pts_main_view_start_print(void *data);
+
+static void __pts_main_view_check_usb_printer_online(void *userdata);
+static void __pts_main_view_check_usb_printer_offline(void *userdata);
+static void __pts_main_view_check_printer_online(void *userdata);
+static void __pts_main_view_check_printer_offline(void *userdata);
+static void __pts_main_view_remove_job(void *userdata, int job_id);
+static void __pts_main_view_job_error(void *userdata, int job_id);
+static void __pts_main_view_last_job_error(void *user_data);
+static Eina_Bool __pts_hide_main_view(void *data);
+static int __pts_create_notification_by_page(pts_appdata_t *ad, pts_job_spooling_t *job_spooling);
+
+static int __pts_get_real_total_pages(int original_total_pages, int n_up_number, int copies)
+{
+       return (int)ceil((double)original_total_pages / (double)n_up_number) * copies;
+}
+
+static pts_job_spooling_t *__pts_get_job_spooling(pts_appdata_t *ad, int job_id)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL, NULL, "Invalid parameter for __pts_get_last_job_spooling");
+       PTS_RETV_IF(job_id <= 0, NULL, "job_id is invalid(%d)", job_id);
+
+       Eina_List *job_spooling_list = NULL;
+       pts_job_spooling_t *job_spooling = NULL;
+
+       EINA_LIST_FOREACH(ad->noti_info.job_spooling_list, job_spooling_list, job_spooling) {
+               if (job_spooling->job_id == job_id) {
+                       PTS_DEBUG("Found job_spooling for job_id[%d]", job_id);
+                       break;
+               }
+       }
+
+       PTS_RETV_IF(job_spooling == NULL, NULL, "job_spooling is NULL");
+       PTS_RETV_IF(job_spooling->job_id <= 0, NULL, "job_spooling->job_id is invalid(%d)", job_spooling->job_id);
+       PTS_TRACE_END;
+       return job_spooling;
+}
+
+static pts_job_spooling_t *__pts_get_last_job_spooling(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL, NULL, "Invalid parameter for __pts_get_last_job_spooling");
+
+       Eina_List *job_spooling_list = NULL;
+       pts_job_spooling_t *job_spooling = NULL;
+
+       job_spooling_list = eina_list_last(ad->noti_info.job_spooling_list);
+       PTS_RETV_IF(job_spooling_list == NULL, NULL, "No found job_spooling_list for last job");
+
+       job_spooling = (pts_job_spooling_t *)eina_list_data_get(job_spooling_list);
+       PTS_RETV_IF(job_spooling == NULL || job_spooling->noti_id == NOTIFICATION_PRIV_ID_NONE
+                               , NULL, "No found job_spooling for last job");
+
+       PTS_TRACE_END;
+       return job_spooling;
+}
+
+int __pts_update_popup_progress(pts_appdata_t *ad, pt_progress_info_t *progress_info, pts_job_spooling_t *job_spooling)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL || ad->progress_info.progressbar == NULL || progress_info == NULL || job_spooling == NULL
+                               , 1, "Invalid parameter for __pts_update_popup_progress");
+
+       PTS_DEBUG("progress popup [%d]\n", progress_info->progress);
+       double rate = progress_info->progress * 0.01;
+       char progress_value[8] = {0,};
+       char page_value[8] = {0,};
+       char aligned_label[128] = {0,};
+       int real_total_pages = -1;
+
+       if (EINA_TRUE == elm_progressbar_pulse_get(ad->progress_info.progressbar)) {
+               PTS_DEBUG("Stop pulsing mode\n");
+               elm_progressbar_pulse_set(ad->progress_info.progressbar, EINA_FALSE);
+               elm_object_style_set(ad->progress_info.progressbar, "list_progress");
+               elm_progressbar_value_set(ad->progress_info.progressbar, 0.00);
+       }
+
+       elm_progressbar_value_set(ad->progress_info.progressbar, rate);
+
+       if (rate > 0) {
+               snprintf(aligned_label, 128, "<align=center>%s</align>",
+                                       _("IDS_PRT_HEADER_MEDIABOX_PRINTING"));
+               elm_object_text_set(ad->progress_info.progress_label, aligned_label);
+       }
+
+       snprintf(progress_value, 8, "%d%%", progress_info->progress);
+       elm_object_part_text_set(ad->progress_info.progress_layout, "elm.text.subtext1", progress_value);
+       if (ad->list_info.active_printer->range == PT_RANGE_CURRENT) {
+               real_total_pages = 1;
+       } else {
+               real_total_pages = __pts_get_real_total_pages(job_spooling->pt_files.range.total_pages,
+                               job_spooling->n_up, job_spooling->copies);
+       }
+       if (job_spooling->page_printed <= real_total_pages) {
+               PTS_DEBUG("real_total_pages:%d, page_printed:%d\n", real_total_pages, job_spooling->page_printed);
+               snprintf(page_value, 8, "%d/%d", job_spooling->page_printed, real_total_pages);
+               elm_object_part_text_set(ad->progress_info.progress_layout, "elm.text.subtext2", page_value);
+       }
+
+       if (rate >= 1.00 && job_spooling->page_printed == real_total_pages) {
+               PTS_IF_DEL_OBJ(ad->progress_info.progressbar);
+               PTS_IF_DEL_OBJ(ad->progress_info.popup);
+               PTS_IF_DEL_OBJ(ad->main_info.root_win);
+       }
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+int __pts_update_notification(pts_appdata_t *ad,
+                                                         pt_progress_info_t *progress_info,
+                                                         pts_job_spooling_t *job_spooling)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL || progress_info == NULL || job_spooling == NULL
+                               , -1 ,"Invalid parameters for update_notification");
+
+       double rate = progress_info->progress * 0.01;
+       PTS_RETV_IF(job_spooling->noti_id == NOTIFICATION_PRIV_ID_NONE || job_spooling->noti_handle == NULL
+                               , -1 , "Invalid noti parameters for update_notification");
+
+       // Remove notification after all page is printed
+       if (progress_info->page_printed > job_spooling->page_printed) {
+               if (job_spooling->noti_id != NOTIFICATION_PRIV_ID_NONE) {
+                       int ret;
+                       notification_delete_by_priv_id(MOBILEPRINT_PACKAGENAME, NOTIFICATION_TYPE_ONGOING, job_spooling->noti_id);
+                       PTS_DEBUG("Notification is deleted");
+                       job_spooling->noti_id = NOTIFICATION_PRIV_ID_NONE;
+                       ret = notification_free(job_spooling->noti_handle);
+                       if (ret != NOTIFICATION_ERROR_NONE) {
+                               PTS_DEBUG("Failed to free notification handle [%d]", ret);
+                       }
+                       job_spooling->noti_handle = NULL;
+                       job_spooling->page_printed = progress_info->page_printed; // XXX
+               }
+       }
+
+       if (job_spooling->noti_id == NOTIFICATION_PRIV_ID_NONE && job_spooling->noti_handle == NULL) {
+               int real_total_pages = -1;
+
+               if (ad->list_info.active_printer->range == PT_RANGE_CURRENT) {
+                       real_total_pages = 1;
+               } else {
+                       real_total_pages = __pts_get_real_total_pages(job_spooling->pt_files.range.total_pages,
+                                                                                       job_spooling->n_up, job_spooling->copies);
+               }
+               if (job_spooling->page_printed <= real_total_pages) {
+                       PTS_DEBUG("Create new notification for page %d", job_spooling->page_printed);
+                       __pts_create_notification_by_page(ad, job_spooling);
+               }
+               PTS_TRACE_END;
+               return 0;
+       }
+
+       notification_update_progress(NULL, job_spooling->noti_id, rate);
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+int __pts_remove_notification(int noti_id)
+{
+       PTS_TRACE_BEGIN;
+
+       if (noti_id != NOTIFICATION_PRIV_ID_NONE) {
+               notification_delete_by_priv_id(MOBILEPRINT_PACKAGENAME, NOTIFICATION_TYPE_ONGOING, noti_id);
+               PTS_DEBUG("Notification is deleted");
+       }
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+int __pts_create_dummy_notification(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL, -1, "Invalid paramter for __pts_create_dummy_notification");
+
+       int res = -1;
+       notification_h noti = NULL;
+
+       noti = notification_new(NOTIFICATION_TYPE_ONGOING,
+                                                       NOTIFICATION_GROUP_ID_NONE,
+                                                       NOTIFICATION_PRIV_ID_NONE);
+
+       PTS_RETV_IF(noti == NULL, -1, "Failed to create Notification");
+
+       res = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, _("IDS_PRT_POP_WAITING_TO_PRINT_ING"),
+                                                               NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set Notification title [%d]", res);
+               goto ERR_CASE;
+       }
+
+       char *printer_label = strdup(ad->list_info.active_printer->name);
+       pts_unstandardization(printer_label);
+       res = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT, printer_label, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set Notification title [%d]", res);
+               goto ERR_CASE;
+       }
+       if (printer_label != NULL) {
+               free(printer_label);
+               printer_label = NULL;
+       }
+
+       bundle *b = NULL;
+       b = bundle_create();
+       char value[4] = {0,};
+
+       if (!strcasecmp(ad->printing_data.type, "DOC") || !strcasecmp(ad->printing_data.type, "WEB")) {
+               PTS_DEBUG("It's pdf file. [%s]", ad->printing_data.type);
+               ad->printing_data.range.total_pages = get_pdf_pages_count(ad->printing_data.request_files[0]);
+       } else {
+               PTS_DEBUG("It's not pdf file. [%s]", ad->printing_data.type);
+               ad->printing_data.range.total_pages = ad->printing_data.num_of_files;
+       }
+       // XXX - In this time, there's no job_spooling. So common pt_files field of ugd is used.
+       int real_total_pages = -1;
+       if (ad->list_info.active_printer->range == PT_RANGE_CURRENT) {
+               real_total_pages = 1;
+       } else {
+               real_total_pages = __pts_get_real_total_pages(ad->printing_data.range.total_pages,
+                                                               printer_get_setting_n_up(ad->list_info.active_printer), ad->list_info.active_printer->copies);
+       }
+       snprintf(value, 4, "%d", real_total_pages);
+       appsvc_set_pkgname(b, MOBILEPRINT_PACKAGENAME);
+       appsvc_add_data(b, SERVICE_FILES, ad->printing_data.request_files[0]);
+       appsvc_add_data(b, SERVICE_PAGE_COUNT, value);
+       appsvc_add_data(b, SERVICE_LAUNCH_TYPE, LAUNCH_FROM_DUMMY_NOTI);
+
+       res = notification_set_execute_option(noti, NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH, NULL, NULL, b);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to notification_set_execute_option. [%d]", res);
+               goto ERR_CASE;
+       }
+       bundle_free(b);
+
+       res = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, RESDIR"/images/A01_print_popup_icon_print.png");
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set image icon");
+               goto ERR_CASE;
+       }
+
+       res = notification_insert(noti, &(ad->noti_info.dummy_noti_id));
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to insert Notification [%d]", res);
+               goto ERR_CASE;
+       }
+       PTS_DEBUG("Notification ID [%d]", ad->noti_info.dummy_noti_id);
+
+       PTS_TRACE_END;
+       return 0;
+
+ERR_CASE:
+       if (printer_label != NULL) {
+               free(printer_label);
+               printer_label = NULL;
+       }
+
+       if (noti != NULL) {
+               notification_free(noti);
+               noti = NULL;
+       }
+
+       if (b != NULL) {
+               bundle_free(b);
+               b = NULL;
+       }
+
+       PTS_TRACE_END;
+       return -1;
+}
+
+static int __pts_create_notification_by_page(pts_appdata_t *ad, pts_job_spooling_t *job_spooling)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL || job_spooling == NULL
+                               , -1, "Invalid parameter for __pts_create_notification_by_page");
+
+       int res = -1;
+       notification_h noti = NULL;
+       double rate = 0.00;
+       char title[32] = {0,};
+
+       noti = notification_new(NOTIFICATION_TYPE_ONGOING,
+                                                       NOTIFICATION_GROUP_ID_NONE,
+                                                       NOTIFICATION_PRIV_ID_NONE);
+
+       if (noti == NULL) {
+               PTS_DEBUG("Failed to create Notification");
+               goto ERR_CASE;
+       }
+
+       //re-allocate noti handle
+       job_spooling->noti_handle = noti;
+
+       int real_total_pages = -1;
+       if (ad->list_info.active_printer->range == PT_RANGE_CURRENT) {
+               real_total_pages = 1;
+       } else {
+               real_total_pages = __pts_get_real_total_pages(job_spooling->pt_files.range.total_pages,
+                                                                       job_spooling->n_up, job_spooling->copies);
+       }
+       snprintf(title, 32, "%s (%d/%d)",
+                        _("IDS_PRT_HEADER_MEDIABOX_PRINTING"), job_spooling->page_printed, real_total_pages);
+       PTS_DEBUG("notification update: handle[%d] title=[%s]", job_spooling->noti_handle, title);
+
+       res = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, title,
+                                                               NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set Notification title [%d]", res);
+               goto ERR_CASE;
+       }
+
+       char *printer_label = strdup(ad->list_info.active_printer->name);
+       pts_unstandardization(printer_label);
+       res = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT, printer_label, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set Notification title [%d]", res);
+               goto ERR_CASE;
+       }
+       if (printer_label != NULL) {
+               free(printer_label);
+               printer_label = NULL;
+       }
+
+       res = notification_set_progress(noti, rate);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set Notification title [%d]", res);
+               goto ERR_CASE;
+       }
+
+       bundle *b = NULL;
+       b = bundle_create();
+       char value1[4] = {0,};
+       char value2[4] = {0,};
+       snprintf(value1, 4, "%d", job_spooling->job_id);
+       snprintf(value2, 4, "%d", real_total_pages);
+       appsvc_set_pkgname(b, MOBILEPRINT_PACKAGENAME);
+       appsvc_add_data(b, SERVICE_JOB_ID, value1);
+       appsvc_add_data(b, SERVICE_PAGE_COUNT, value2);
+       appsvc_add_data(b, SERVICE_LAUNCH_TYPE, LAUNCH_FROM_PROGRESS_NOTI);
+
+       res = notification_set_execute_option(noti, NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH, NULL, NULL, b);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to notification_set_execute_option. [%d]", res);
+               goto ERR_CASE;
+       }
+       bundle_free(b);
+
+       res = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, RESDIR"/images/A01_print_popup_icon_print.png");
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set image icon");
+               goto ERR_CASE;
+       }
+
+       res = notification_insert(noti, &job_spooling->noti_id);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to insert Notification [%d]", res);
+               goto ERR_CASE;
+       }
+       PTS_DEBUG("Notification ID [%d]", job_spooling->noti_id);
+
+       PTS_TRACE_END;
+       return 0;
+
+ERR_CASE:
+       if (printer_label != NULL) {
+               free(printer_label);
+               printer_label = NULL;
+       }
+
+       if (job_spooling->noti_handle != NULL) {
+               notification_free(job_spooling->noti_handle);
+               job_spooling->noti_handle = NULL;
+       }
+
+       if (b != NULL) {
+               bundle_free(b);
+               b = NULL;
+       }
+
+       PTS_TRACE_END;
+       return -1;
+}
+
+int __pts_create_job_notification(pts_appdata_t *ad, int job_id)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL || job_id <=0
+                               , -1 , "Invalid parameter for __pts_create_job_notification");
+
+       int res = -1;
+       notification_h noti = NULL;
+       double rate = 0.00;
+       char title[32] = {0,};
+
+       pts_job_spooling_t *job_spooling = malloc(sizeof(pts_job_spooling_t));
+       PTS_RETV_IF(job_spooling == NULL, -1 , "Failed to malloc job_spooling");
+       memset(job_spooling, 0, sizeof(pts_job_spooling_t));
+
+       //FIXME - pt_files.files should be managed carefully during printing
+       job_spooling->pt_files.num_of_files = ad->printing_data.num_of_files;
+       job_spooling->pt_files.current_index = ad->printing_data.current_index;
+
+       job_spooling->pt_files.type = strdup(ad->printing_data.type); // need malloc
+       if (job_spooling->pt_files.type == NULL) {
+               PTS_DEBUG("Failed to malloc job_spooling->pt_files.type");
+               goto ERR_CASE;
+       }
+
+       job_spooling->pt_files.request_files = (char **)malloc(sizeof(char *) * job_spooling->pt_files.num_of_files);
+       if (job_spooling->pt_files.request_files == NULL) {
+               PTS_DEBUG("Failed to malloc job_spooling->pt_files.request_files");
+               goto ERR_CASE;
+       }
+       int i = 0;
+       for (i = 0; i < job_spooling->pt_files.num_of_files; i++) {
+               PTS_DEBUG("file path is %s", ad->printing_data.request_files[i]);
+               if (NULL != ad->printing_data.request_files[i]) {
+                       job_spooling->pt_files.request_files[i] = strdup(ad->printing_data.request_files[i]);
+               } else {
+                       job_spooling->pt_files.request_files[i] = strdup(MOBILEPRINT_DEFAULTIMG);
+               }
+               PTS_DEBUG("file path is %s", job_spooling->pt_files.request_files[i]);
+       }
+
+       job_spooling->input_file = strdup(job_spooling->pt_files.request_files[0]);
+       if (job_spooling->input_file == NULL) {
+               PTS_DEBUG("Failed to malloc job_spooling->input_file");
+               goto ERR_CASE;
+       }
+
+       job_spooling->pt_files.range.from = ad->printing_data.range.from;
+       job_spooling->pt_files.range.to = ad->printing_data.range.to;
+       job_spooling->pt_files.range.total_pages = ad->printing_data.range.total_pages;
+
+       job_spooling->pt_files.range.selected_files = (char **)malloc(sizeof(char *) * job_spooling->pt_files.range.total_pages);
+       if (job_spooling->pt_files.range.selected_files == NULL) {
+               PTS_DEBUG("Failed to malloc job_spooling->pt_files.range.selected_files");
+               goto ERR_CASE;
+       }
+
+       job_spooling->pt_files.range.selected_files[0] = strdup(ad->printing_data.range.selected_files[0]);
+       if (job_spooling->pt_files.range.selected_files[0] == NULL) {
+               PTS_DEBUG("Failed to malloc job_spooling->pt_files.range.selected_files[0]");
+               goto ERR_CASE;
+       }
+
+       job_spooling->job_id = job_id;
+#if 0 // Need to believe passed "Printing page X X" log have correct information.
+       if (NULL == strcasestr(ugd->active_printer->name, "samsung")) {
+               job_spooling->page_printed = 1;    // FIXME
+       }
+#endif
+
+       noti = notification_new(NOTIFICATION_TYPE_ONGOING,
+                                                       NOTIFICATION_GROUP_ID_NONE,
+                                                       NOTIFICATION_PRIV_ID_NONE);
+       if (noti == NULL) {
+               PTS_DEBUG("Failed to create Notification");
+               goto ERR_CASE;
+       }
+
+       job_spooling->noti_handle = noti;
+
+       job_spooling->n_up = printer_get_setting_n_up(ad->list_info.active_printer);
+
+       job_spooling->copies = ad->list_info.active_printer->copies;
+
+       int real_total_pages = -1;
+       if (ad->list_info.active_printer->range == PT_RANGE_CURRENT) {
+               real_total_pages = 1;
+       } else {
+               real_total_pages = __pts_get_real_total_pages(job_spooling->pt_files.range.total_pages,
+                                                                       job_spooling->n_up, job_spooling->copies);
+       }
+       snprintf(title, 32, "%s (1/%d)", _("IDS_PRT_HEADER_MEDIABOX_PRINTING"), real_total_pages);
+       PTS_DEBUG("notification update: handle[%d] title=[%s]", job_spooling->noti_handle, title);
+
+       res = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_TITLE, title,
+                                                               NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set Notification title [%d]", res);
+               goto ERR_CASE;
+       }
+
+       char *printer_label = strdup(ad->list_info.active_printer->name);
+       pts_unstandardization(printer_label);
+       res = notification_set_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT, printer_label, NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set Notification title [%d]", res);
+               goto ERR_CASE;
+       }
+       if (printer_label != NULL) {
+               free(printer_label);
+               printer_label = NULL;
+       }
+
+       res = notification_set_progress(noti, rate);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set Notification title [%d]", res);
+               goto ERR_CASE;
+       }
+
+       bundle *b = NULL;
+       b = bundle_create();
+       char value1[4] = {0,};
+       char value2[4] = {0,};
+       snprintf(value1, 4, "%d", job_id);
+       snprintf(value2, 4, "%d", real_total_pages);
+       appsvc_set_pkgname(b, MOBILEPRINT_PACKAGENAME);
+       appsvc_add_data(b, SERVICE_JOB_ID, value1);
+       appsvc_add_data(b, SERVICE_PAGE_COUNT, value2);
+       appsvc_add_data(b, SERVICE_LAUNCH_TYPE, LAUNCH_FROM_PROGRESS_NOTI);
+
+       res = notification_set_execute_option(noti, NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH, NULL, NULL, b);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to notification_set_execute_option. [%d]", res);
+               bundle_free(b);
+               goto ERR_CASE;
+       }
+       bundle_free(b);
+
+       res = notification_set_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, RESDIR"/images/A01_print_popup_icon_print.png");
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to set image icon");
+               goto ERR_CASE;
+       }
+
+       res = notification_insert(noti, &job_spooling->noti_id);
+       if (res != NOTIFICATION_ERROR_NONE) {
+               PTS_DEBUG("Failed to insert Notification [%d]", res);
+               goto ERR_CASE;
+       }
+       PTS_DEBUG("Notification ID [%d]", job_spooling->noti_id);
+
+       ad->noti_info.job_spooling_list = eina_list_append(ad->noti_info.job_spooling_list, job_spooling);
+       if (eina_error_get()) {
+               PTS_DEBUG("Failed to append job_spooling");
+               goto ERR_CASE;
+       }
+
+       PTS_TRACE_END;
+
+       return 0;
+
+ERR_CASE:
+       if (printer_label != NULL) {
+               free(printer_label);
+               printer_label = NULL;
+       }
+
+       if (job_spooling != NULL) {
+               if (job_spooling->pt_files.type != NULL) {
+                       PTS_IF_FREE_MEM(job_spooling->pt_files.type);
+                       job_spooling->pt_files.type = NULL;
+               }
+
+               if (job_spooling->pt_files.request_files != NULL) {
+                       int i = 0;
+                       for (i = 0; i < job_spooling->pt_files.num_of_files; i++) {
+                               if (job_spooling->pt_files.request_files[i] != NULL) {
+                                       PTS_IF_FREE_MEM(job_spooling->pt_files.request_files[i]);
+                                       job_spooling->pt_files.request_files[i] = NULL;
+                               }
+                       }
+                       PTS_IF_FREE_MEM(job_spooling->pt_files.request_files);
+                       job_spooling->pt_files.request_files = NULL;
+               }
+
+               if (job_spooling->input_file != NULL) {
+                       PTS_IF_FREE_MEM(job_spooling->input_file);
+                       job_spooling->input_file = NULL;
+               }
+
+               if (job_spooling->pt_files.range.selected_files != NULL) {
+                       if (job_spooling->pt_files.range.selected_files[0] != NULL) {
+                               PTS_IF_FREE_MEM(job_spooling->pt_files.range.selected_files[0]);
+                               job_spooling->pt_files.range.selected_files[0] = NULL;
+                       }
+
+                       PTS_IF_FREE_MEM(job_spooling->pt_files.range.selected_files);
+                       job_spooling->pt_files.range.selected_files = NULL;
+               }
+
+               if (job_spooling->noti_handle != NULL) {
+                       notification_free(job_spooling->noti_handle);
+                       job_spooling->noti_handle = NULL;
+               }
+
+               PTS_IF_FREE_MEM(job_spooling);
+               job_spooling = NULL;
+       }
+
+       PTS_TRACE_END;
+       return -1;
+}
+
+static gboolean __pts_main_view_job_monitor_timeout_cb(void *data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RETV_IF(ad == NULL, TRUE, "ad is NULL");
+
+       pt_job_state_e job_status = PT_JOB_ERROR;
+       gboolean ret = FALSE;
+
+       //char noti_name[512] = {0};
+
+       //FIXME - need to check one or all?
+       Eina_List *job_spooling_list = NULL;
+       pts_job_spooling_t *job_spooling = NULL;
+       EINA_LIST_FOREACH(ad->noti_info.job_spooling_list, job_spooling_list, job_spooling) {
+               job_status = pt_get_current_job_status(job_spooling->job_id);
+               if (job_status == PT_JOB_PROCESSING || job_status == PT_JOB_PENDING) {
+                       PTS_DEBUG("job_id[%d] status is %d", job_spooling->job_id, job_status);
+                       //XXX - If any one of job list is processing or pending, then motinor cb will be called again.
+                       ret = TRUE;
+               }
+       }
+
+       PTS_TRACE_END;
+
+       return ret;
+}
+
+void __pts_event_cb(pt_event_e event, void *user_data, pt_progress_info_t *progress_info)
+{
+       PTS_TRACE_BEGIN;
+
+       // XXX - progress_info can be passed by NULL
+       PTS_RET_IF(event < 0 || user_data == NULL, "Invalid parameters for event cb");
+
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       pts_job_spooling_t *job_spooling = NULL;
+
+       switch (event) {
+       case PT_EVENT_USB_PRINTER_ONLINE:
+               __pts_main_view_check_usb_printer_online(ad);
+               break;
+       case PT_EVENT_USB_PRINTER_OFFLINE:
+               __pts_main_view_check_usb_printer_offline(ad);
+               break;
+       case PT_EVENT_PRINTER_ONLINE:
+               __pts_main_view_check_printer_online(ad);
+               break;
+       case PT_EVENT_PRINTER_OFFLINE:
+               __pts_main_view_check_printer_offline(ad);
+               break;
+       case PT_EVENT_JOB_COMPLETED:
+               PTS_DEBUG("Job[%d] is completed.", progress_info->job_id);
+               __pts_main_view_remove_job(ad, progress_info->job_id);
+               break;
+       case PT_EVENT_JOB_STARTED:
+               PTS_DEBUG("Job id %d is allocated", progress_info->job_id);
+               __pts_remove_notification(ad->noti_info.dummy_noti_id);
+               ad->noti_info.dummy_noti_id = 0;
+               __pts_create_job_notification(ad, progress_info->job_id);
+               g_timeout_add(5000, (GSourceFunc)__pts_main_view_job_monitor_timeout_cb, ad);
+               break;
+       case PT_EVENT_JOB_PROCESSING:
+               PTS_DEBUG("Job[%d] is processing.", progress_info->job_id);
+               break;
+       case PT_EVENT_JOB_PROGRESS:
+               job_spooling = __pts_get_job_spooling(ad, progress_info->job_id);
+               if (job_spooling != NULL) {
+                       PTS_DEBUG("new - progress_info: job_id[%d] progress[%d] page_printed[%d]\n"
+                               "old - job_spooling: job_id[%d] progress[%d] page_printed[%d]",
+                               progress_info->job_id, progress_info->progress, progress_info->page_printed,
+                               job_spooling->job_id, job_spooling->progress, job_spooling->page_printed);
+
+#if 0
+                       //FIXME
+                       if (NULL == strcasestr(ugd->active_printer->name, "samsung")) {
+                               if (progress_info->progress < job_spooling->progress) {
+                                       //FIXME - assume next page printing is started
+                                       job_spooling->page_printed++;
+                               }
+                       }
+#endif
+
+                       job_spooling->progress = progress_info->progress;
+               }
+               __pts_update_notification(ad, progress_info, job_spooling);
+               __pts_update_popup_progress(ad, progress_info, job_spooling);
+               break;
+       case PT_EVENT_JOB_PENDING:
+               PTS_DEBUG("Job[%d] is waiting.", progress_info->job_id);
+               break;
+       case PT_EVENT_JOB_HELD:
+               PTS_DEBUG("Job[%d] is held.", progress_info->job_id);
+               break;
+       case PT_EVENT_JOB_STOPPED:
+               PTS_DEBUG("Job[%d] is stopped.", progress_info->job_id);
+               __pts_main_view_job_error(ad, progress_info->job_id);
+               __pts_main_view_remove_job(ad, progress_info->job_id);
+               break;
+       case PT_EVENT_JOB_CANCELED:
+               PTS_DEBUG("Job[%d] is canceled.", progress_info->job_id);
+               __pts_main_view_job_error(ad, progress_info->job_id);
+               __pts_main_view_remove_job(ad, progress_info->job_id);
+               break;
+       case PT_EVENT_JOB_ABORTED:
+               PTS_DEBUG("Job[%d] is aborted.", progress_info->job_id);
+               if (progress_info->job_id > 0) {
+                       __pts_main_view_job_error(ad, progress_info->job_id);
+                       __pts_main_view_remove_job(ad, progress_info->job_id);
+               } else { // XXX - for dummy job?
+                       __pts_main_view_last_job_error(ad);
+               }
+               break;
+       case PT_EVENT_JOB_ERROR:
+               PTS_DEBUG("Job[%d] error", progress_info->job_id);
+               __pts_main_view_job_error(ad, progress_info->job_id);
+               __pts_main_view_remove_job(ad, progress_info->job_id);
+               break;
+       case PT_EVENT_ALL_THREAD_COMPLETED:
+               PTS_DEBUG("All thread is completed.");
+               PTS_DEBUG("No more job, then terminate mobileprint");
+               vconf_ignore_key_changed(VCONFKEY_WIFI_QS_EXIT, _wifi_qs_monitoring_cb);
+               pt_deinit();
+               elm_exit();
+               break;
+       default:
+               break;
+       }
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_check_usb_printer_online(void *userdata)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)userdata;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       /* if in ether searching or printing, ignore it */
+       PTS_RET_IF(ad->search_info.is_process == 1, "searching or printing is processing");
+
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+
+       elm_naviframe_item_pop_to(ad->main_info.navi_it);
+
+       /* re-searching printers */
+       ad->search_info.print_search_mode = PTS_SEARCH_INITIAL;
+       ad->search_info.selection_done_cb = load_main_view;
+       ad->search_info.print_search_popup_parent = ad->main_info.root_win;
+       ad->search_info.printer_search_user_data = NULL;
+       pts_search_printer(ad);
+       //pts_main_view_search_printer(ugd);
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_check_usb_printer_offline(void *userdata)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)userdata;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       /* if in searching or printing, return */
+       PTS_RET_IF(ad->search_info.is_process == 1, "searching or printing is processing");
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+       PTS_IF_FREE_MEM(ad->list_info.active_printer);
+
+       elm_naviframe_item_pop_to(ad->main_info.navi_it);
+
+       pts_main_view_update_printer_label(ad);
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_remove_job(void *user_data, int job_id)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(user_data == NULL || job_id <= 0,"Invalid parameter for job error processing");
+
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       int ret;
+
+       if (NULL != ad->progress_info.popup) {
+               evas_object_del(ad->progress_info.popup);
+               ad->progress_info.popup = NULL;
+               evas_object_hide(ad->main_info.root_win);
+       }
+
+       Eina_List *job_spooling_list = NULL;
+       pts_job_spooling_t *job_spooling = NULL;
+
+       EINA_LIST_FOREACH(ad->noti_info.job_spooling_list, job_spooling_list, job_spooling) {
+               if (job_spooling->job_id == job_id) {
+                       PTS_DEBUG("Found job_spooling for job_id[%d]", job_id);
+                       break;
+               }
+       }
+
+       PTS_RET_IF(job_spooling == NULL || job_spooling->noti_id == NOTIFICATION_PRIV_ID_NONE
+                          ,"No found job_spooling for job_id[%d]\n", job_id);
+
+       notification_delete_by_priv_id(MOBILEPRINT_PACKAGENAME, NOTIFICATION_TYPE_ONGOING, job_spooling->noti_id);
+       ad->search_info.is_process = 0;/*process is complete*/
+
+       ad->noti_info.job_spooling_list = eina_list_remove_list(ad->noti_info.job_spooling_list, job_spooling_list);
+       if (0 == eina_list_count(ad->noti_info.job_spooling_list)) {
+               PTS_DEBUG("Job spooling list is empty");
+               ad->noti_info.job_spooling_list = NULL;
+       }
+
+       if (job_spooling->noti_handle != NULL) {
+               ret = notification_free(job_spooling->noti_handle);
+               if (ret != NOTIFICATION_ERROR_NONE) {
+                       PTS_DEBUG("Failed to free notification handle [%d]", ret);
+               }
+               job_spooling->noti_handle = NULL;
+       }
+
+       PTS_RET_IF(job_spooling->pt_files.range.selected_files == NULL, "job_spooling->pt_files.range.selected_files is NULL");
+
+       if (job_spooling->pt_files.range.selected_files[0]) {
+               PTS_IF_FREE_MEM(job_spooling->pt_files.range.selected_files[0]);
+               job_spooling->pt_files.range.selected_files[0] = NULL;
+       }
+
+       if (job_spooling->pt_files.range.selected_files) {
+               PTS_IF_FREE_MEM(job_spooling->pt_files.range.selected_files);
+               job_spooling->pt_files.range.selected_files = NULL;
+       }
+
+       if (job_spooling->input_file) {
+               PTS_IF_FREE_MEM(job_spooling->input_file);
+               job_spooling->input_file = NULL;
+       }
+
+       int i = 0;
+       for (i = 0; i < job_spooling->pt_files.num_of_files; i++) {
+               if (job_spooling->pt_files.request_files[i]) {
+                       PTS_IF_FREE_MEM(job_spooling->pt_files.request_files[i]); // FIXME
+                       job_spooling->pt_files.request_files[i] = NULL;
+               }
+       }
+
+       if (job_spooling->pt_files.request_files) {
+               PTS_IF_FREE_MEM(job_spooling->pt_files.request_files); // FIXME
+               job_spooling->pt_files.request_files = NULL;
+       }
+
+       if (job_spooling->pt_files.type) {
+               PTS_IF_FREE_MEM(job_spooling->pt_files.type);
+               job_spooling->pt_files.type = NULL;
+       }
+
+       if (job_spooling) {
+               PTS_IF_FREE_MEM(job_spooling);
+               job_spooling = NULL;
+       }
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_job_error(void *user_data, int job_id)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(user_data == NULL || job_id <= 0, "Invalid parameter for job error processing");
+
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+
+       pts_job_spooling_t *job_spooling = __pts_get_job_spooling(ad, job_id);
+
+       PTS_RET_IF(job_spooling == NULL || job_spooling->noti_id == NOTIFICATION_PRIV_ID_NONE
+                          , "No found job_spooling for job_id[%d]\n", job_id);
+
+       notification_delete_by_priv_id(MOBILEPRINT_PACKAGENAME, NOTIFICATION_TYPE_ONGOING, job_spooling->noti_id);
+       ad->search_info.is_process = 0;/*process is complete*/
+       pts_create_popup(ad->main_info.root_win, _("IDS_PRT_POP_PRINTINGERROR"), 2.0);
+       evas_object_show(ad->main_info.root_win);
+       ecore_timer_add(2.0, (Ecore_Task_Cb)__pts_hide_main_view, (void *)ad);
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_last_job_error(void *user_data)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(user_data == NULL, "Invalid parameter for last job error processing");
+
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+
+       pts_job_spooling_t *job_spooling = __pts_get_last_job_spooling(ad);
+       PTS_RET_IF(job_spooling == NULL || job_spooling->noti_id == NOTIFICATION_PRIV_ID_NONE
+                          , "No found job_spooling for last_job");
+
+       notification_delete_by_priv_id(MOBILEPRINT_PACKAGENAME, NOTIFICATION_TYPE_ONGOING, job_spooling->noti_id);
+       ad->search_info.is_process = 0;/*process is complete*/
+       pts_create_popup(ad->main_info.root_win, _("IDS_PRT_POP_PRINTINGERROR"), 2.0);
+       evas_object_show(ad->main_info.root_win);
+       ecore_timer_add(2.0, (Ecore_Task_Cb)__pts_hide_main_view, (void *)ad);
+       PTS_TRACE_END;
+}
+
+
+static void __pts_main_view_check_printer_online(void *user_data)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(user_data == NULL, "Invalid parameter for __pts_main_view_check_printer_online");
+
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       ecore_timer_add(1.0, (Ecore_Task_Cb)__pts_main_view_start_print, ad);
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_check_printer_offline(void *user_data)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(user_data == NULL, "Invalid parameter for __pts_main_view_check_printer_offline");
+
+       pts_appdata_t *ad = (pts_appdata_t *)user_data;
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+       PTS_IF_FREE_MEM(ad->list_info.active_printer);
+
+       pts_main_view_update_printer_label(ad);
+       pts_create_popup(ad->main_info.navi, _("IDS_PRT_POP_CHECKPRINTERSTATE"), 2.0);
+       ad->search_info.is_process = 0;/* process is complete */
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+#if 0
+       if (NULL != ugd->pt_files.request_files) {
+               int i = 0;
+               for (i = 0; i < ugd->pt_files.num_of_files; i++) {
+                       if (ugd->pt_files.request_files[i] != NULL) {
+                               free(ugd->pt_files.request_files[i]);
+                               ugd->pt_files.request_files[i] = NULL;
+                       }
+               }
+
+               if (ugd->pt_files.range.selected_files != NULL) {
+                       free(ugd->pt_files.range.selected_files);
+                       ugd->pt_files.range.selected_files = NULL;
+               }
+
+               free(ugd->pt_files.request_files);
+               ugd->pt_files.request_files = NULL;
+       }
+#endif
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_navi_delete_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_FREE_MEM(ad->list_info.active_printer);
+
+       PTS_TRACE_END;
+}
+
+/*
+* "back" button callback
+*/
+void __pts_main_view_btn_back_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *) data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+       //TODO - check current spooling job status before app termination
+       if (ad->noti_info.job_spooling_list == NULL) {
+               vconf_ignore_key_changed(VCONFKEY_WIFI_QS_EXIT, _wifi_qs_monitoring_cb);
+               pt_deinit();
+               elm_exit();
+       } else {
+               PTS_DEBUG("Active job spooling list is existed. So just hide preview.");
+               __pts_hide_main_view(ad);
+       }
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_dummy_cancel_print(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(ad->progress_info.progressbar);
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+
+       pts_create_popup(ad->main_info.root_win, PTS_19, 2.0);
+       evas_object_show(ad->main_info.root_win);
+       ecore_timer_add(2.0, (Ecore_Task_Cb)__pts_hide_main_view, (void *)ad);
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_response_cancel_print(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       int job_id = (int)data;
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_RET_IF(ad == NULL || job_id <= 0, "Invalid parameter for __pts_main_view_response_cancel_print");
+       PTS_IF_DEL_OBJ(ad->progress_info.progressbar);
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+
+       pt_cancel_print(job_id);
+
+       pts_job_spooling_t *job_spooling = __pts_get_job_spooling(ad, job_id);
+       PTS_RET_IF(job_spooling == NULL || job_spooling->noti_id == NOTIFICATION_PRIV_ID_NONE
+                          , "No found job_spooling for job[%d]\n", job_id);
+
+       // FIXME - Is it better to do this job after received canceled evt_cb?
+       __pts_remove_notification(job_spooling->noti_id);
+
+       pts_create_popup(ad->main_info.root_win, _("IDS_PRT_POP_PRINTING_CANCELED"), 2.0);
+       evas_object_show(ad->main_info.root_win);
+       ecore_timer_add(2.0, (Ecore_Task_Cb)__pts_hide_main_view, (void *)ad);
+
+       PTS_TRACE_END;
+}
+
+static void __pts_hide_progress_popup(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(ad->progress_info.progressbar);
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+
+       evas_object_hide(ad->main_info.root_win);
+
+       PTS_TRACE_END;
+}
+
+void __pts_print_dummy_popup(pts_appdata_t *ad, char *files, int page_count)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(ad == NULL || files == NULL || page_count <= 0, "Invalid parameters for progress_popup");
+
+       Evas_Object *label1 = NULL;
+       Evas_Object *label2 = NULL;
+       Evas_Object *label3 = NULL;
+       Evas_Object *popup = NULL;
+       Evas_Object *layout = NULL;
+       Evas_Object *progressbar = NULL;
+       char page_info[8] = {0,};
+       char aligned_label[128] = {0,};
+
+       popup = elm_popup_add(ad->main_info.main_layout);
+
+       label1 = elm_label_add(popup);
+       elm_object_style_set(label1, "popup/progressview");
+       elm_label_line_wrap_set(label1, ELM_WRAP_MIXED);
+       char *printer_label = strdup(ad->list_info.active_printer->name);
+       pts_unstandardization(printer_label);
+       snprintf(aligned_label, 128, "<align=center>%s</align>", printer_label);
+       elm_object_text_set(label1, aligned_label);
+       if (printer_label != NULL) {
+               /* accessability - screen reader support */
+               elm_access_info_set(label1, ELM_ACCESS_INFO, printer_label);
+               free(printer_label);
+               printer_label = NULL;
+       }
+       evas_object_size_hint_weight_set(label1, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label1, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label1);
+
+       label2 = elm_label_add(popup);
+       elm_object_style_set(label2, "popup/progressview");
+       elm_label_line_wrap_set(label2, ELM_WRAP_MIXED);
+       snprintf(aligned_label, 128, "<align=center>%s</align>",
+                               _("IDS_PRT_POP_WAITING_TO_PRINT_ING"));
+       elm_object_text_set(label2, aligned_label);
+       /* accessability - screen reader support */
+       elm_access_info_set(label2, ELM_ACCESS_INFO, _("IDS_PRT_POP_WAITING_TO_PRINT_ING"));
+       evas_object_size_hint_weight_set(label2, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label2);
+
+       label3 = elm_label_add(popup);
+       elm_object_style_set(label3, "popup/progressview");
+       elm_label_line_wrap_set(label3, ELM_WRAP_MIXED);
+       snprintf(aligned_label, 128, "<align=center>%s</align>", basename(files));
+       elm_object_text_set(label3, aligned_label);
+       /* accessability - screen reader support */
+       elm_access_info_set(label3, ELM_ACCESS_INFO, basename(files));
+       evas_object_size_hint_weight_set(label3, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label3, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label3);
+
+       layout = pts_create_base_layout(popup, "popup_progress");
+
+       progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "pending_list");
+       elm_progressbar_pulse_set(progressbar, EINA_TRUE); // initial pending style
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+
+       ad->progress_info.progress_label = label2;
+       ad->progress_info.progress_layout = layout;
+       ad->progress_info.progressbar = progressbar;
+
+       elm_object_part_content_set(layout, "elm.swallow.content.1", label1);
+       elm_object_part_content_set(layout, "elm.swallow.content.2", label2);
+       elm_object_part_content_set(layout, "elm.swallow.content.3", label3);
+       elm_object_part_content_set(layout, "elm.swallow.end", progressbar);
+       elm_object_part_text_set(layout, "elm.text.subtext1", "0%");
+       // XXX - In this time, there's no job_spooling. So common pt_files field of ugd is used.
+       int real_total_pages = -1;
+       if (ad->list_info.active_printer->range == PT_RANGE_CURRENT) {
+               real_total_pages = 1;
+       } else {
+               real_total_pages = __pts_get_real_total_pages(ad->printing_data.range.total_pages,
+                                                               printer_get_setting_n_up(ad->list_info.active_printer), ad->list_info.active_printer->copies);
+       }
+       snprintf(page_info, 8, "1/%d", real_total_pages);
+       elm_object_part_text_set(layout, "elm.text.subtext2", page_info);
+
+       Evas_Object *btn1 = NULL;
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1,"popup_button/default");
+       elm_object_text_set(btn1, _("IDS_COM_SK_HIDE"));
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", __pts_hide_progress_popup, ad);
+
+       if (page_count > 1) {
+               Evas_Object *btn2 = NULL;
+               btn2 = elm_button_add(popup);
+               elm_object_style_set(btn2,"popup_button/default");
+               elm_object_text_set(btn2, _("IDS_COM_SK_CANCEL"));
+               elm_object_part_content_set(popup, "button2", btn2);
+               evas_object_smart_callback_add(btn2, "clicked", __pts_main_view_dummy_cancel_print, NULL);
+       }
+
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+       evas_object_show(ad->main_info.root_win);
+
+       ad->progress_info.popup = popup;
+
+       PTS_TRACE_END;
+}
+
+
+void __pts_print_progress_popup(pts_appdata_t *ad, int job_id, int page_count)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(ad == NULL || job_id <= 0 || page_count <= 0, "Invalid parameters for progress_popup");
+
+       pts_job_spooling_t *job_spooling = NULL;
+       job_spooling = __pts_get_job_spooling(ad, job_id);
+       PTS_RET_IF(job_spooling == NULL, "No found job_spooling for job_id[%d]", job_id);
+
+       Evas_Object *label1 = NULL;
+       Evas_Object *label2 = NULL;
+       Evas_Object *label3 = NULL;
+       Evas_Object *popup = NULL;
+       Evas_Object *layout = NULL;
+       Evas_Object *progressbar = NULL;
+       char progress_info[8] = {0,};
+       char page_info[8] = {0,};
+       char aligned_label[128] = {0,};
+
+       popup = elm_popup_add(ad->main_info.main_layout);
+
+       label1 = elm_label_add(popup);
+       elm_object_style_set(label1, "popup/progressview");
+       elm_label_line_wrap_set(label1, ELM_WRAP_MIXED);
+       char *printer_label = strdup(ad->list_info.active_printer->name);
+       pts_unstandardization(printer_label);
+       snprintf(aligned_label, 128, "<align=center>%s</align>", printer_label);
+       elm_object_text_set(label1, aligned_label);
+       if (printer_label != NULL) {
+               /* accessability - screen reader support */
+               elm_access_info_set(label1, ELM_ACCESS_INFO, printer_label);
+
+               free(printer_label);
+               printer_label = NULL;
+       }
+       evas_object_size_hint_weight_set(label1, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label1, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label1);
+
+       label2 = elm_label_add(popup);
+       elm_object_style_set(label2, "popup/progressview");
+       elm_label_line_wrap_set(label2, ELM_WRAP_MIXED);
+       if (job_spooling->progress > 0) {
+               snprintf(aligned_label, 128, "<align=center>%s</align>",
+                                       _("IDS_PRT_HEADER_MEDIABOX_PRINTING"));
+               /* accessability - screen reader support */
+               elm_access_info_set(label2, ELM_ACCESS_INFO,
+                                       _("IDS_PRT_HEADER_MEDIABOX_PRINTING"));
+       } else {
+               snprintf(aligned_label, 128, "<align=center>%s</align>",
+                                       _("IDS_PRT_POP_WAITING_TO_PRINT_ING"));
+               /* accessability - screen reader support */
+               elm_access_info_set(label2, ELM_ACCESS_INFO,
+                                       _("IDS_PRT_POP_WAITING_TO_PRINT_ING"));
+       }
+       elm_object_text_set(label2, aligned_label);
+       evas_object_size_hint_weight_set(label2, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label2, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label2);
+
+       label3 = elm_label_add(popup);
+       elm_object_style_set(label3, "popup/progressview");
+       elm_label_line_wrap_set(label3, ELM_WRAP_MIXED);
+       char* label3_text = basename(job_spooling->pt_files.request_files[0]);
+       snprintf(aligned_label, 128, "<align=center>%s</align>",
+                               label3_text);
+       elm_object_text_set(label3, aligned_label);
+       /* accessability - screen reader support */
+       elm_access_info_set(label3, ELM_ACCESS_INFO, label3_text);
+
+       evas_object_size_hint_weight_set(label3, EVAS_HINT_EXPAND, 0.0);
+       evas_object_size_hint_align_set(label3, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(label3);
+
+       layout = pts_create_base_layout(popup, "popup_progress");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       progressbar = elm_progressbar_add(popup);
+       if (job_spooling->progress > 0) {
+               double rate = job_spooling->progress * 0.01;
+               elm_object_style_set(progressbar, "list_progress");
+               elm_progressbar_value_set(progressbar, rate);
+       } else {
+               elm_object_style_set(progressbar, "pending_list");
+               elm_progressbar_pulse_set(progressbar, EINA_TRUE); // initial pending style
+       }
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(progressbar);
+
+       ad->progress_info.progress_label = label2;
+       ad->progress_info.progress_layout = layout;
+       ad->progress_info.progressbar = progressbar;
+
+       elm_object_part_content_set(layout, "elm.swallow.content.1", label1);
+       elm_object_part_content_set(layout, "elm.swallow.content.2", label2);
+       elm_object_part_content_set(layout, "elm.swallow.content.3", label3);
+       elm_object_part_content_set(layout, "elm.swallow.end", progressbar);
+       if (job_spooling->progress > 0) {
+               snprintf(progress_info, 8, "%d%%", job_spooling->progress);
+               elm_object_part_text_set(layout, "elm.text.subtext1", progress_info);
+       } else {
+               elm_object_part_text_set(layout, "elm.text.subtext1", "0%");
+       }
+       snprintf(page_info, 8, "%d/%d", job_spooling->page_printed, page_count);
+       elm_object_part_text_set(layout, "elm.text.subtext2", page_info);
+
+       Evas_Object *btn1 = NULL;
+       btn1 = elm_button_add(popup);
+       elm_object_style_set(btn1,"popup_button/default");
+       elm_object_text_set(btn1, _("IDS_COM_SK_HIDE"));
+       elm_object_part_content_set(popup, "button1", btn1);
+       evas_object_smart_callback_add(btn1, "clicked", __pts_hide_progress_popup, ad);
+
+       // Show cancel button when total page is greater than 1 page.
+//     if (page_count > 1) {
+               Evas_Object *btn2 = NULL;
+               btn2 = elm_button_add(popup);
+               elm_object_style_set(btn2,"popup_button/default");
+               elm_object_text_set(btn2, _("IDS_COM_SK_CANCEL"));
+               elm_object_part_content_set(popup, "button2", btn2);
+               evas_object_smart_callback_add(btn2, "clicked", __pts_main_view_response_cancel_print, (void *)job_id);
+               elm_access_info_set(btn2, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_CANCEL_PRINTING);
+//     }
+
+       elm_object_content_set(popup, layout);
+       evas_object_show(popup);
+       evas_object_show(ad->main_info.root_win);
+
+       ad->progress_info.popup = popup;
+
+       PTS_TRACE_END;
+}
+
+static Eina_Bool __pts_is_valid_printing_data(pts_appdata_t *ad)
+{
+       PTS_RETV_IF(ad == NULL, EINA_FALSE, "ad is NULL");
+       PTS_RETV_IF(ad->list_info.active_printer == NULL, EINA_FALSE, "ad->list_info.active_printer is NULL");
+
+       if (ad->list_info.active_printer->copies <= 0) {
+               ad->list_info.active_printer->copies = 1;
+               PTS_DEBUG("copies is less than 0(%d)", ad->list_info.active_printer->copies);
+               return EINA_FALSE;
+       }
+
+       /* get the range of print files */
+       if (ad->printing_data.range.from <= 0 ||
+                       ad->printing_data.range.to > ad->printing_data.range.total_pages ||
+                       ad->printing_data.range.from > ad->printing_data.range.to) {
+               PTS_DEBUG("from(%d) to(%d) total(%d)"
+                                       ,ad->printing_data.range.from
+                                       ,ad->printing_data.range.to
+                                       ,ad->printing_data.range.total_pages);
+               PTS_DEBUG("range checking error");
+               return EINA_FALSE;
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __pts_set_print_option_page_range(pts_appdata_t *ad)
+{
+       PTS_RETV_IF(ad == NULL, EINA_FALSE, "ad is NULL");
+
+       char temp[1024] = {0,};
+       int index = 0;
+
+       if(_is_pdf_file_type(ad->printing_data.request_files, ad->printing_data.num_of_files) == true) {
+               for (index = 0 ; index <  ad->printing_data.num_of_files ; index++) {
+                       ad->printing_data.range.total_pages += get_pdf_pages_count(ad->printing_data.request_files[index]);
+               }
+       } else {
+               ad->printing_data.range.total_pages = ad->printing_data.num_of_files;
+       }
+
+       PTS_DEBUG("Updated ad->printing_data.range.total_pages: %d", ad->printing_data.range.total_pages);
+       ad->printing_data.range.to = ad->printing_data.range.total_pages;
+
+       if (ad->list_info.active_printer->range == PT_RANGE_CURRENT) {
+               ad->printing_data.range.from = ad->printing_data.range.to = evas_smart_smsc_calculate_page_number(ad->main_info.smsc) + 1;
+               snprintf(temp, sizeof(temp), "%d", ad->printing_data.range.from);
+               pt_set_print_option_page_range(temp);
+               PTS_DEBUG("Set current page[%d] printing", ad->printing_data.range.from);
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __pts_set_print_scale_size(pts_appdata_t *ad)
+{
+       PTS_RETV_IF(ad == NULL, EINA_FALSE, "ad is NULL");
+
+       int num = 0;
+       char *first_fname = NULL;
+
+       PTS_IF_FREE_MEM(ad->printing_data.range.selected_files);
+       //FIXME - multiple page pdf will be changed to several image files.
+       num = ad->printing_data.range.total_pages;
+       ad->printing_data.range.selected_files = (char **)malloc(sizeof(char *)*num);
+
+       if (NULL == ad->printing_data.range.selected_files) {
+               PTS_DEBUG("selected_files malloc error");
+               return EINA_FALSE;
+       }
+
+       first_fname = ad->printing_data.request_files[ad->printing_data.range.from - 1];
+       if (1 == num && FILE_TYPE_IMAGE == get_file_type(first_fname)) {
+               int res_x = 0;
+               int res_y = 0;
+               if (get_image_resolution(first_fname, &res_x, &res_y) < 0) {
+                       PTS_DEBUG("[ERROR] Failed to get image resolution(%s)",first_fname);
+                       return EINA_FALSE;
+               }
+               pt_imagesize_t  crop_image_info;
+               crop_image_info.imagesize                       = ad->size_popup_info.image_size;
+               crop_image_info.resolution_width        = ad->size_popup_info.custom_width;
+               crop_image_info.resolution_height       = ad->size_popup_info.custom_height;
+               crop_image_info.ratio                           = ad->size_popup_info.custom_w_ratio;
+               crop_image_info.unit                            = ad->size_popup_info.custom_unit;
+
+               pt_set_print_option_imagesize(&crop_image_info, first_fname, res_x, res_y);
+               ad->printing_data.range.selected_files[0] = ad->printing_data.request_files[0];
+       } else {
+               pt_set_print_option_scaleimage(ad->list_info.active_printer->scaling);
+               num = 1;
+               ad->printing_data.range.selected_files[0] = ad->printing_data.input_file;
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __pts_set_print_options(pts_appdata_t *ad)
+{
+       PTS_RETV_IF(ad == NULL, EINA_FALSE, "ad is NULL");
+       PTS_RETV_IF(ad->list_info.active_printer == NULL, EINA_FALSE, "ad->list_info.active_printer is NULL");
+
+       Eina_Bool eret = EINA_FALSE;
+
+       eret = __pts_set_print_option_page_range(ad);
+       PTS_RETV_IF(eret == EINA_FALSE, EINA_FALSE, "Failed to set page ragnge");
+
+       pt_set_print_option_papersize();  //(ugd->active_printer->size);
+       pt_set_print_option_copies(ad->list_info.active_printer->copies);
+//     pt_set_print_option_scaleimage(ugd->active_printer->scaling);
+       pt_set_print_option_orientation(ad->list_info.active_printer->landscape);
+       // FIXME : which field of ppd structure sholud be used for this?
+       pt_set_print_option_quality();
+       pt_set_print_option_paper_type();
+       pt_set_print_option_color();
+       pt_set_print_option_duplex(ad->list_info.active_printer->landscape);
+       eret = __pts_set_print_scale_size(ad);
+       PTS_RETV_IF(eret == EINA_FALSE, EINA_FALSE, "Failed to set print scale size");
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __pts_set_active_printer(pts_appdata_t *ad)
+{
+       PTS_RETV_IF(ad == NULL, EINA_FALSE, "ad is NULL");
+       PTS_RETV_IF(ad->list_info.active_printer == NULL, EINA_FALSE, "ad->list_info.active_printer is NULL");
+
+       int ret = 0;
+
+       if (1 != ad->list_info.active_printer->actived) {
+               /* use default printer, needs active */
+               ret = pt_set_active_printer(ad->list_info.active_printer);
+               if (PT_ERR_NONE != ret) {
+                       PTS_DEBUG("pt_set_active_printer error");
+                       return EINA_FALSE;
+               }
+       }
+
+       return EINA_TRUE;
+}
+
+static Eina_Bool __pts_main_view_start_print(void *data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RETV_IF(ad == NULL, ECORE_CALLBACK_CANCEL, "ad is NULL");
+
+       int ret = 0;
+       int num = 1;
+
+       Eina_Bool eret = EINA_FALSE;
+       eret = __pts_set_print_options(ad);
+       PTS_RETV_IF(eret == EINA_FALSE, EINA_FALSE, "Failed to set print option");
+
+       eret = __pts_is_valid_printing_data(ad);
+       PTS_RETV_IF(eret == EINA_FALSE, EINA_FALSE, "It's not valid printing data");
+
+       eret = __pts_set_active_printer(ad);
+       PTS_RETV_IF(eret == EINA_FALSE, EINA_FALSE, "Failed to set active printer");
+
+       __pts_create_dummy_notification(ad);
+
+       ret = pt_start_print((const char **)ad->printing_data.range.selected_files, num);
+       if (PT_ERR_NONE != ret) {
+               PTS_DEBUG("pt_start_print error");
+               goto ERR_CASE;
+       }
+
+       PTS_TRACE_END;
+       return ECORE_CALLBACK_CANCEL;
+
+ERR_CASE:
+       ad->search_info.is_process = 0;/*process is complete*/
+
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+
+       if ((PT_ERR_NOT_USB_ACCESS == ret) || (PT_ERR_NOT_NETWORK_ACCESS == ret)) {
+               pts_create_popup(ad->main_info.navi, _("IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"), 2.0);
+       } else {
+               pts_create_popup(ad->main_info.navi, _("IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"), 1.0);
+       }
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static Eina_Bool __pts_hide_main_view(void *data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *) data;
+       PTS_RETV_IF(ad == NULL, ECORE_CALLBACK_CANCEL, "data is NULL");
+
+       PTS_IF_DEL_OBJ(ad->progress_info.popup);
+       PTS_DEBUG("Hide main view of mobileprint");
+       evas_object_hide(ad->main_info.root_win);
+
+       PTS_TRACE_END;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+/*
+* "print" button callback
+*/
+static void __pts_main_view_btn_print_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data ;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       if ((NULL != ad->printing_data.request_files) && (NULL != ad->list_info.active_printer)) {
+               evas_object_hide(ad->main_info.main_layout);
+               pts_create_popup(ad->main_info.root_win, _("IDS_PRT_POP_PREPARING_TO_PRINT_ING"), 2.0);
+               ecore_timer_add(2.0, (Ecore_Task_Cb)__pts_hide_main_view, (void *)ad);
+
+               ad->search_info.is_process = 1;/* in process */
+               __pts_main_view_start_print(ad);
+       } else {
+               pts_create_popup(ad->main_info.navi, _("IDS_PRT_BODY_SELECT_PRINTER"), 2.0);
+       }
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_btn_size_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(ad->setting_info.ctxpopup);
+
+       if (ad->list_info.active_printer) {
+               pts_create_size_popup(ad->main_info.navi, ad);
+       } else {
+               pts_create_popup(ad->main_info.navi, _("IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"), 1.0);
+       }
+
+       PTS_TRACE_END;
+}
+
+static void __pts_main_view_btn_scaling_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(ad->setting_info.ctxpopup);
+
+       if (ad->list_info.active_printer) {
+               pts_create_scaling_popup(ad->main_info.navi, ad);
+       } else {
+               pts_create_popup(ad->main_info.navi, _("IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"), 1.0);
+       }
+
+       PTS_TRACE_END;
+}
+
+
+static void __pts_main_view_btn_landscape_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(ad->setting_info.ctxpopup);
+
+       if (ad->list_info.active_printer) {
+               PTS_DEBUG("initial ad->main_info.landscape_toggle : %d",
+                       ad->main_info.landscape_toggle);
+               if (PT_ORIENTATION_PORTRAIT == ad->main_info.landscape_toggle) {
+                       ad->main_info.landscape_toggle = PT_ORIENTATION_LANDSCAPE;
+               } else { /*FIXME if (PT_LANDSCAPE_LANDSCAPE == ugd->landscape_toggle)*/
+                       ad->main_info.landscape_toggle = PT_ORIENTATION_PORTRAIT;
+               }
+
+               PTS_DEBUG("ad->main_info.landscape_toggle : %d", ad->main_info.landscape_toggle);
+
+               ad->list_info.active_printer->landscape = ad->main_info.landscape_toggle;
+               pts_main_view_rotate_image(ad, app_get_device_orientation());
+       } else {
+               pts_create_popup(ad->main_info.navi, _("IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"), 1.0);
+       }
+
+       PTS_TRACE_END;
+}
+
+static void _dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_IF_DEL_OBJ(obj);
+}
+
+static void _move_ctxpopup_more(Evas_Object *ctxpopup, Evas_Object *btn)
+{
+               pts_appdata_t *ad = pts_get_appdata();
+               Evas_Coord w , h;
+               elm_win_screen_size_get(ad->win, NULL, NULL, &w, &h);
+
+               int rot = elm_win_rotation_get(ad->win);
+               if (rot == APP_DEVICE_ORIENTATION_0 || rot == APP_DEVICE_ORIENTATION_180) {
+                       evas_object_move(ctxpopup, 0, h);
+               } else if (rot == APP_DEVICE_ORIENTATION_90) {
+                       evas_object_move(ctxpopup, 0, w);
+               } else {
+                       evas_object_move(ctxpopup, h, w);
+               }
+}
+
+static void _more_btn_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       //struct appdata *ad = (struct appdata *) data;
+       Evas_Object *icon;
+       char buf[256];
+
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(ad->setting_info.ctxpopup);
+
+       ad->setting_info.ctxpopup = elm_ctxpopup_add(ad->main_info.navi);
+       elm_object_style_set(ad->setting_info.ctxpopup, "more/default");
+       evas_object_smart_callback_add(ad->setting_info.ctxpopup, "dismissed", _dismissed_cb, ad->setting_info.ctxpopup);
+
+       icon = elm_icon_add(ad->setting_info.ctxpopup);
+       if (ad->printing_data.type != NULL) {
+               if (0 == strcasecmp(ad->printing_data.type, "IMG")) {
+                       snprintf(buf, sizeof(buf), "%s/A01_print_popup_icon_size.png", ICON_DIR);
+                       elm_icon_file_set(icon, buf, NULL);
+                       elm_ctxpopup_item_append(ad->setting_info.ctxpopup, _("IDS_IMGE_BODY_SIZE"), icon, __pts_main_view_btn_size_cb, ad);
+               } else if (0 == strcasecmp(ad->printing_data.type, "DOC") || 0 == strcasecmp(ad->printing_data.type, "WEB")) {
+                       snprintf(buf, sizeof(buf), "%s/A01_print_popup_icon_scaling.png", ICON_DIR);
+                       elm_icon_file_set(icon, buf, NULL);
+                       elm_ctxpopup_item_append(ad->setting_info.ctxpopup, _("IDS_PRT_BODY_SCALING_ABB"), icon, __pts_main_view_btn_scaling_cb, ad);
+               }
+       } else { /* Default IMG */
+               snprintf(buf, sizeof(buf), "%s/A01_print_popup_icon_size.png", ICON_DIR);
+               elm_icon_file_set(icon, buf, NULL);
+               elm_ctxpopup_item_append(ad->setting_info.ctxpopup, _("IDS_IMGE_BODY_SIZE"), icon, __pts_main_view_btn_size_cb, ad);
+       }
+
+       icon = elm_icon_add(ad->setting_info.ctxpopup);
+       if (ad->main_info.landscape_toggle == PT_ORIENTATION_PORTRAIT) {
+               snprintf(buf, sizeof(buf), "%s/A01_print_popup_icon_Rotate.png", ICON_DIR);
+       } else {
+               snprintf(buf, sizeof(buf), "%s/A01_print_popup_icon_Rotate02.png", ICON_DIR);
+       }
+       elm_icon_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ad->setting_info.ctxpopup, _("IDS_IMGE_OPT_ROTATE"), icon, __pts_main_view_btn_landscape_cb, ad);
+
+       icon = elm_icon_add(ad->setting_info.ctxpopup);
+       snprintf(buf, sizeof(buf), "%s/A01_print_popup_icon_setting.png", ICON_DIR);
+       elm_icon_file_set(icon, buf, NULL);
+       elm_ctxpopup_item_append(ad->setting_info.ctxpopup, _("IDS_COM_BODY_SETTING"), icon, __pts_main_view_btn_setting_cb, ad);
+
+       _move_ctxpopup_more(ad->setting_info.ctxpopup, obj);
+
+       ea_object_event_callback_add(ad->setting_info.ctxpopup, EA_CALLBACK_BACK, ea_ctxpopup_back_cb, NULL);
+       ea_object_event_callback_add(ad->setting_info.ctxpopup, EA_CALLBACK_MORE, ea_ctxpopup_back_cb, NULL);
+       elm_object_focus_set(ad->setting_info.ctxpopup, EINA_TRUE);
+
+       evas_object_show(ad->setting_info.ctxpopup);
+
+       PTS_TRACE_END;
+}
+
+static Evas_Object *create_toolbar_btn(Evas_Object *parent, const char *text, Evas_Smart_Cb func, void *data)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *btn = elm_button_add(parent);
+       if (!btn) {
+               return NULL;
+       }
+       elm_object_style_set(btn, "naviframe/toolbar/default");
+       elm_object_text_set(btn, text);
+       evas_object_smart_callback_add(btn, "clicked", func, data);
+       PTS_TRACE_END;
+       return btn;
+}
+
+static Evas_Object *create_toolbar_more_btn(Evas_Object *parent, Evas_Smart_Cb func, void *data)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *btn = elm_button_add(parent);
+       if (!btn) {
+               return NULL;
+       }
+       elm_object_style_set(btn, "naviframe/more/default");
+       elm_access_info_set(btn, ELM_ACCESS_INFO, IDS_SCRREAD_MENU_INFO);
+       elm_access_info_set(btn, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_MENU_CONTEXT);
+       evas_object_smart_callback_add(btn, "clicked", func, data);
+       PTS_TRACE_END;
+       return btn;
+}
+
+/*
+ * Set accessability information - screen reader text
+ */
+void generate_main_view_accessability_info(pts_appdata_t *ad,
+                                                                                       char* main_view_accessability_text,
+                                                                                       size_t text_max_length)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(NULL == ad || NULL == ad->list_info.active_printer, "Invalid argument");
+
+       char papersize[256]={0,};
+       strncpy(papersize, pt_get_print_option_papersize(ad->list_info.active_printer->size), 256-1);
+       char *quality, *papertype, *grayscale_mode, *print_range;
+       int p_quality = pt_get_selected(PT_OPTION_ID_QUALITY);
+       if (PT_QUALITY_DRAFT == p_quality) {
+               quality = _("IDS_PRT_OPT_PRINTSETTINGS_DRAFT");
+       } else if (PT_QUALITY_STANDARD == p_quality) {
+               quality = _("IDS_PRT_OPT_PRINTSETTINGS_STANDARD");
+       } else if (PT_QUALITY_HIGH == p_quality) {
+               quality = _("IDS_COM_BODY_HIGH");
+       } else {
+               quality = NULL;
+       }
+       int p_type = pt_get_selected(PT_OPTION_ID_PAPER);
+       if (PT_PAPER_NORMAL == p_type) {
+               papertype = _("IDS_ST_BODY_NORMAL");
+       } else if (PT_PAPER_GLOSSY == p_type) {
+               papertype = _("IDS_ST_BODY_GLOSSY");
+       } else if (PT_PAPER_PHOTO == p_type) {
+               papertype = _("IDS_PRT_BODY_PHOTOGRAPHIC_ABB");
+       } else {
+               papertype = NULL;
+       }
+       int p_grayscale = pt_get_selected(PT_OPTION_ID_GRAYSCALE);
+       if (PT_GRAYSCALE_COLOUR == p_grayscale) {
+               grayscale_mode = _("IDS_PRT_BODY_COLOUR");
+       } else if (PT_GRAYSCALE_GRAYSCALE == p_grayscale) {
+               grayscale_mode = _("IDS_IMGE_HEADER_GREY");
+       } else {
+               grayscale_mode = NULL;
+       }
+       pt_range_e p_range = ad->list_info.active_printer->range;
+       if (PT_RANGE_ALL == p_range) {
+               print_range = _("IDS_DIC_BODY_ALL");
+       } else {
+               print_range = _("IDS_BR_BODY_CURRENT_PAGE");
+       }
+
+       snprintf(main_view_accessability_text, text_max_length, "%s, %d page of %d pages, %s size, %d %s,"
+                                                                                               " print %s, %s, "
+                                                                                               " %s orientation, %s quality, %s paper"
+                                                                                               " %s mode, send to %s",
+                       basename(ad->printing_data.input_file), //printing file
+                       evas_smart_smsc_calculate_page_number(ad->main_info.smsc) + 1, //current page
+                       g_pages_count, //total pages
+                       papersize,
+                       ad->list_info.active_printer->copies,
+                       (1 == ad->list_info.active_printer->copies) ? "copy" : "copies",
+                       print_range,
+                       (PT_SCALING_2_PAGES == ad->list_info.active_printer->scaling) ? "2 pages in 1 sheet" :
+                       (PT_SCALING_4_PAGES == ad->list_info.active_printer->scaling) ? "4 pages in 1 sheet" :
+                       "fit to paper",
+                       PT_ORIENTATION_PORTRAIT == ad->list_info.active_printer->landscape ? "portrait" :
+                       PT_ORIENTATION_LANDSCAPE == ad->list_info.active_printer->landscape ? "landscape" : "auto",
+                       quality,
+                       papertype,
+                       grayscale_mode,
+                       elm_access_info_get(ad->main_info.printer_label, ELM_ACCESS_INFO));
+
+       PTS_TRACE_END;
+}
+
+/*
+* create content of the main view screen
+*/
+static Evas_Object *__pts_main_view_create_content(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL, NULL, "ad is NULL");
+
+       /*
+        * load preview group
+        */
+       ad->main_info.printer_layout = pts_create_base_layout(ad->main_info.navi, "printer");
+
+       pts_main_view_update_printer_label(ad);
+
+       /*
+        * load preview image group
+        */
+       ad->main_info.img_layout = pts_create_base_layout(ad->main_info.printer_layout, "image_view");
+
+       if (NULL != ad->printing_data.request_files) {
+               char *file_path = NULL;
+               file_path = ad->printing_data.request_files[ad->printing_data.current_index];
+               PTS_DEBUG("filepath is %s", file_path);
+       }
+
+       ad->main_info.smsc = evas_smart_smsc_add(evas_object_evas_get(ad->main_info.img_layout));
+       evas_smart_smsc_set_layout(ad->main_info.smsc, ad->main_info.img_layout);
+       elm_object_part_content_set(ad->main_info.img_layout, "content", ad->main_info.smsc);
+
+       /*
+        * Set preview layout
+        */
+       elm_object_part_content_set(ad->main_info.printer_layout, "image", ad->main_info.img_layout);
+       evas_object_show(ad->main_info.img_layout);
+       evas_object_show(ad->main_info.printer_layout);
+
+       static char main_view_accessability_text[2048] = {0,};
+       generate_main_view_accessability_info(ad, main_view_accessability_text, 2048);
+       init_smsc_accessability_support(ad->main_info.smsc);
+       set_main_view_accessability_info(ad->main_info.smsc, ad->main_info.img_layout,
+                                                                       main_view_accessability_text,
+                                                                       IDS_SCRREAD_PREVIEW_IMAGE_TYPE,
+                                                                       IDS_SCRREAD_PREVIEW_IMAGE_CONTEXT);
+
+       PTS_TRACE_END;
+       return ad->main_info.printer_layout;
+}
+
+
+/*
+* setting button callback function
+*/
+static void __pts_main_view_btn_setting_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(ad->setting_info.ctxpopup);
+
+       if (ad->list_info.active_printer) {
+               pts_create_setting_view(ad);
+       } else {
+               pts_create_popup(ad->main_info.navi, _("IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"), 1.0);
+       }
+
+       PTS_TRACE_END;
+}
+
+int pts_main_view_load_printing_data(pts_appdata_t *ad, pts_printing_data_t *printing_data)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL || printing_data == NULL, -1, "Invalid argument");
+
+       PTS_IF_FREE_MEM(ad->printing_data.request_files);
+       PTS_IF_FREE_MEM(ad->printing_data.type);
+
+       memset(&ad->printing_data, 0, sizeof(pts_printing_data_t));
+
+       ad->printing_data.num_of_files = printing_data->num_of_files;
+       ad->printing_data.current_index = printing_data->current_index;
+       ad->printing_data.type = printing_data->type;
+       ad->printing_data.request_files = (char **)malloc(sizeof(char *) * ad->printing_data.num_of_files);
+
+       if (!ad->printing_data.request_files) {
+               PTS_IF_FREE_MEM(ad->printing_data.type);
+               //PTS_IF_FREE_MEM(ad->printing_data);
+               PTS_DEBUG("calloc print files failed");
+               PTS_TRACE_END;
+               return -1;
+       }
+
+       int i = 0;
+       for (i = 0; i < ad->printing_data.num_of_files; i++) {
+               PTS_DEBUG("file path is %s", printing_data->request_files[i]);
+               if (NULL != printing_data->request_files[i]) {
+                       ad->printing_data.request_files[i] = strdup(printing_data->request_files[i]);
+               } else {
+                       ad->printing_data.request_files[i] = strdup(MOBILEPRINT_DEFAULTIMG);
+               }
+               PTS_DEBUG("file path is %s", ad->printing_data.request_files[i]);
+       }
+       ad->printing_data.input_file = strdup(ad->printing_data.request_files[0]);
+       PTS_DEBUG("ad->input_file: %s", ad->printing_data.input_file);
+
+       PTS_DEBUG("count: %d", ad->printing_data.num_of_files);
+       PTS_DEBUG("current index: %d", ad->printing_data.current_index);
+       PTS_DEBUG("filetype: %s", ad->printing_data.type);
+
+       /* init the print range(include all pages) */
+       ad->printing_data.range.from = 1;
+       ad->printing_data.range.to = ad->printing_data.range.total_pages = ad->printing_data.num_of_files;
+       ad->printing_data.range.selected_files = NULL;
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+/**
+ *     This function let the app update printer label in the preview view
+ *     @return  void
+ *     @param[in] ugd the pointer to the main data structure
+ */
+void pts_main_view_update_printer_label(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       char label_text[128] = {0,};
+       char label_voice[128] = {0,};
+
+       if (ad->main_info.printer_label == NULL) {
+               ad->main_info.printer_label = elm_label_add(ad->main_info.printer_layout);
+       }
+       PTS_DEBUG("ad->list_info.active_printer is %p", ad->list_info.active_printer);
+
+       if (ad->list_info.active_printer != NULL) {
+               char *printer_name = strdup(ad->list_info.active_printer->name);
+               pts_unstandardization(printer_name);
+               snprintf(label_text, 128, "<align=center>%s</align>", printer_name);
+               snprintf(label_voice, 128, "%s", printer_name);
+               if (printer_name != NULL) {
+                       free(printer_name);
+                       printer_name = NULL;
+               }
+       } else {
+               snprintf(label_text, 128, "<align=center>%s</align>", _("IDS_COM_BODY_NO_DEVICES"));
+               snprintf(label_voice, 128, "%s", _("IDS_COM_BODY_NO_DEVICES"));
+       }
+
+       elm_object_text_set(ad->main_info.printer_label, label_text);
+       elm_access_info_set(ad->main_info.printer_label, ELM_ACCESS_INFO, label_voice);
+       evas_object_size_hint_weight_set(ad->main_info.printer_label, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(ad->main_info.printer_label, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       elm_object_part_content_set(ad->main_info.printer_layout, "printer_name", ad->main_info.printer_label);
+
+       PTS_TRACE_END;
+}
+
+/**
+ *     This function let the app rotate the image by the given landscape
+ *     @return   void
+ *     @param[in] ugd the pointer to the main data structure
+ *     @param[in] landscape the landscape value
+ */
+void pts_main_view_rotate_image(pts_appdata_t *ad,
+                                                               app_device_orientation_e orientation)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       generate_preview_images(ad, orientation);
+       g_pages_count = 0;
+
+       PTS_TRACE_END;
+}
+
+/**
+ *     This function let the app create the main screen view
+ *     @return  Evas_Object
+ *     @param[in] win the pointer to the main window
+ *     @param[in] pt_files the pointer to the path of print files
+ */
+API Evas_Object *pts_create_main_view(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF((ad == NULL) || (ad->main_info.root_win == NULL), NULL, "Invalid argument");
+
+       Evas_Object *main_layout = NULL;
+       Evas_Object *back_btn = NULL;
+       Evas_Object *toolbar;
+
+       ad->main_info.main_layout = pts_create_base_layout_with_conform(ad->main_info.root_win, "navi");
+       if (NULL == ad->main_info.main_layout) {
+               //PTS_IF_FREE_MEM(ad);
+               PTS_DEBUG("create base layout failed");
+               PTS_TRACE_END;
+               return NULL;
+       }
+
+       ad->main_info.navi = elm_naviframe_add(ad->main_info.main_layout);
+       elm_object_part_content_set(ad->main_info.main_layout, "navigation_bar", ad->main_info.navi);
+
+       /* add navigation frame toolbar */
+       toolbar = elm_toolbar_add(ad->main_info.navi);
+       PTS_RETV_IF(NULL == toolbar, NULL, "Toolbar adding error");
+       elm_object_style_set(toolbar, "default");
+       elm_toolbar_shrink_mode_set(toolbar, ELM_TOOLBAR_SHRINK_EXPAND);
+       elm_toolbar_transverse_expanded_set(toolbar, EINA_TRUE);
+       elm_toolbar_select_mode_set(toolbar, ELM_OBJECT_SELECT_MODE_NONE);
+
+       main_layout = __pts_main_view_create_content(ad);
+
+       back_btn = pts_create_label_btn(ad->main_info.navi, _("IDS_COM_SK_BACK"));
+       elm_access_info_set(back_btn, ELM_ACCESS_INFO, _("IDS_COM_SK_BACK"));
+       elm_access_info_set(back_btn, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_CANCEL_PRINTING);
+       elm_object_style_set(back_btn, "naviframe/back_btn/default");
+
+       evas_object_smart_callback_add(back_btn, "clicked", __pts_main_view_btn_back_cb, ad);
+       evas_object_event_callback_add(ad->main_info.navi, EVAS_CALLBACK_DEL, __pts_main_view_navi_delete_cb, ad);
+
+       ad->main_info.navi_it = elm_naviframe_item_push(ad->main_info.navi, _("IDS_PRT_SK_PRINT_PREVIEW"), back_btn, NULL, main_layout, NULL);
+       elm_naviframe_prev_btn_auto_pushed_set(ad->main_info.navi, EINA_FALSE);
+       elm_naviframe_item_pop_cb_set(ad->main_info.navi_it, __pts_main_view_btn_back_cb, ad);
+       ea_object_event_callback_add(ad->main_info.navi, EA_CALLBACK_BACK, ea_naviframe_back_cb, NULL);
+       ea_object_event_callback_add(ad->main_info.navi, EA_CALLBACK_MORE, ea_naviframe_more_cb, NULL);
+
+       /* insert printing button */
+       elm_toolbar_item_append(toolbar, NULL, _("IDS_SMPOS_SK3_PRINT"), __pts_main_view_btn_print_cb, ad);
+       elm_object_item_part_content_set(ad->main_info.navi_it, "toolbar", toolbar);
+
+       /* we have only one item in toolbar, so we could set
+          accessibility on all toolbar */
+       elm_access_info_set(toolbar, ELM_ACCESS_INFO, _("IDS_SMPOS_SK3_PRINT"));
+       elm_access_info_set(toolbar, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_PRINT_CONTEXT);
+
+       ad->main_info.more_btn = create_toolbar_more_btn(ad->main_info.navi, _more_btn_cb, ad->main_info.navi_it);
+       elm_object_item_part_content_set(ad->main_info.navi_it, "toolbar_more_btn", ad->main_info.more_btn);
+       evas_object_event_callback_add(main_layout, EVAS_CALLBACK_DEL, __pts_main_view_delete_cb, ad);
+
+       int tmp_width = 0;
+       int tmp_height = 0;
+
+       get_image_resolution(ad->printing_data.input_file, &tmp_width, &tmp_height);
+       ad->size_popup_info.custom_width = (double)tmp_width;
+       ad->size_popup_info.custom_height = (double)tmp_height;
+       ad->size_popup_info.custom_w_ratio = ad->size_popup_info.custom_width / ad->size_popup_info.custom_height;
+       PTS_DEBUG("Original image size : %lfx%lf(%lfx1)", ad->size_popup_info.custom_width, ad->size_popup_info.custom_height, ad->size_popup_info.custom_w_ratio);
+       // original image size (unit cm) calculated by 300dpi
+       ad->size_popup_info.custom_width = (ad->size_popup_info.custom_width / 300) * 2.54;
+       ad->size_popup_info.custom_height = (ad->size_popup_info.custom_height / 300) * 2.54;
+       ad->size_popup_info.custom_unit = 1; // cm unit
+
+       PTS_TRACE_END;
+       return ad->main_info.main_layout;
+}
diff --git a/mobileprint/app/pts_print_search.c b/mobileprint/app/pts_print_search.c
new file mode 100644 (file)
index 0000000..c1038ff
--- /dev/null
@@ -0,0 +1,961 @@
+/*
+*  Mobileprint
+*
+* 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 <fcntl.h>
+#include <glib.h>
+#include <app.h>
+#include <appsvc.h>
+#include <ui-gadget.h>
+#include <notification.h>
+#include <vconf.h>
+#include <vconf-keys.h>
+#include <efl_assist.h>
+
+#include <paper_size.h>
+#include <previewgen.h>
+#include "pt_api.h"
+
+#include "mobileprint.h"
+#include "pts_common.h"
+#include "pts_main_view.h"
+#include "pts_setting_view.h"
+#include "preview_content.h"
+#include "preview_util.h"
+
+static char *WiFi_Type_String[] = {
+       "Wi-Fi", "Wi-Fi Direct"
+};
+
+typedef struct {
+       pt_printer_mgr_t *pt;
+       int radio_index;
+       Evas_Object *radio_group;
+} radio_print_list_data_t;
+
+static Elm_Genlist_Item_Class list_itc;
+static Elm_Genlist_Item_Class wifi_list_itc;
+
+static Evas_Object *printer_list_radio_main = NULL;
+
+void  pt_post_print_search(pts_appdata_t *ad);
+Evas_Object *pts_create_no_found_popup(Evas_Object *parent, void *refresh_cb, void *cancel_cb);
+
+static char *_pts_wifi_text_get(void *data, Evas_Object *obj, const char *part)
+{
+       int index = (int)data;
+
+       if (!strcmp(part, "elm.text")) {
+               return strdup(WiFi_Type_String[index]);
+       } else {
+               return strdup("Unknown index");
+       }
+}
+
+static void _wifi_direct_ug_layout_cb(ui_gadget_h ug, enum ug_mode mode, void *priv)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(ug == NULL, "ug is NULL");
+
+       Evas_Object *base, *win;
+
+       base = ug_get_layout(ug);
+       if (!base) {
+               ug_destroy(ug);
+               return;
+       }
+
+       win = ug_get_window();
+
+       evas_object_size_hint_weight_set(base, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(win, base);
+
+       ug_disable_effect(ug);
+       evas_object_show(base);
+       PTS_TRACE_END;
+}
+
+static void _wifi_direct_ug_result_cb(ui_gadget_h ug, service_h result, void *priv)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)priv;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       char *ip_addr = NULL;
+       int ret = -1;
+
+       ret = service_get_extra_data(result, "ip_address", &ip_addr);
+       if (ret != SERVICE_ERROR_NONE) {
+               PTS_DEBUG("get extra data failed!, errno: %d", ret);
+       }
+       if (ip_addr) {
+               /* Check IP address of connected peer */
+               // TODO - Add active printer set routine to CUPS using this address
+               PTS_DEBUG("IP address of WiFi Direct Printer : %s", ip_addr);
+               PTS_IF_FREE_MEM(ad->search_info.ip_address);
+               ad->search_info.ip_address = strdup(ip_addr);
+               PTS_RET_IF(ad->search_info.ip_address == NULL, "ad->search_info.ip_address is NULL");
+       } else {
+               PTS_DEBUG("Not found ip_address");
+       }
+
+       PTS_TRACE_END;
+}
+
+static void _wifi_direct_ug_destroy_cb(ui_gadget_h ug, void *priv)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)priv;
+       PTS_RET_IF(ug == NULL || ad == NULL, "Invalid argument");
+
+       if (ug) {
+               ug_destroy(ug);
+       }
+       pts_search_printer(ad);
+
+       PTS_TRACE_END;
+}
+
+static int pts_launch_wifi_qs(void)
+{
+       PTS_TRACE_BEGIN;
+       int tpid = 0;
+       int ret = 0;
+
+       tpid = sysman_get_pid("wifi-qs");
+       if (tpid > 0) {
+               PTS_DEBUG("wifi-qs existed !\n");
+               ret = -1;
+       } else {
+               bundle *b = NULL;
+               b = bundle_create();
+               if (b == NULL) {
+                       ret = -1;
+               } else {
+                       ret = syspopup_launch("wifi-qs", b);
+                       if (ret < 0) {
+                               PTS_DEBUG("syspopup is failed. [%d]\n", ret);
+                       }
+
+                       bundle_free(b);
+               }
+       }
+
+       PTS_TRACE_END;
+       return ret;
+}
+
+void _wifi_qs_monitoring_cb(keynode_t *key, void *data)
+{
+       PTS_TRACE_BEGIN;
+       int wifi_qs_exit = -1;
+       int error_code = vconf_get_int(VCONFKEY_WIFI_QS_EXIT, &wifi_qs_exit);
+
+       PTS_RET_IF(error_code == -1, "Error when check wifi qs exit status");
+
+       vconf_ignore_key_changed(VCONFKEY_WIFI_QS_EXIT, _wifi_qs_monitoring_cb);
+
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+
+       pts_search_printer(ad);
+       PTS_TRACE_END;
+}
+
+static void pts_launch_wifi_direct_ug(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+
+       int ret = 0;
+       struct ug_cbs cbs = {0, };
+       service_h service = NULL;
+
+       memset(&cbs, 0x00, sizeof(struct ug_cbs));
+       cbs.layout_cb = _wifi_direct_ug_layout_cb;
+       cbs.result_cb = _wifi_direct_ug_result_cb;
+       cbs.destroy_cb = _wifi_direct_ug_destroy_cb;
+       cbs.priv = ad;
+
+       service_create(&service);
+       ret = service_add_extra_data(service, "device_filter", "printer");
+       if (ret != SERVICE_ERROR_NONE) { goto ERROR; }
+       ret= service_add_extra_data(service, "auto_exit", "on");
+       if (ret != SERVICE_ERROR_NONE) { goto ERROR; }
+       ret = service_add_extra_data(service, "multi_connect", "off");
+       if (ret != SERVICE_ERROR_NONE) { goto ERROR; }
+       ret= service_add_extra_data(service, "title_string", _("IDS_COM_OPT1_WI_FI_DIRECT"));
+       if (ret != SERVICE_ERROR_NONE) { goto ERROR; }
+
+       ug_create(NULL, "setting-wifidirect-efl", UG_MODE_FULLVIEW, service, &cbs);
+       service_destroy(service);
+
+       PTS_TRACE_END;
+       return ret;
+
+ERROR:
+       PTS_DEBUG("Failed to create wifi direct ug(%d)", ret);
+       service_destroy(service);
+       PTS_TRACE_END;
+       return ret;
+
+}
+
+static void _pts_wifi_list_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = pts_get_appdata();
+       int index = 0;
+       int ret = -1;
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+
+       if (item == NULL) {
+               PTS_IF_DEL_OBJ(ad->select_info.wifi_type_popup);
+               return;
+       }
+
+       index = (int)elm_object_item_data_get(item);
+       if (index == 0) { // Wi-Fi
+               ret = pts_launch_wifi_qs();
+               if (ret > 0) {
+                       // Currently ret value is procces id of wifi_qs.
+                       PTS_DEBUG("Now register vocnf cb for VCONFKEY_WIFI_QS_EXIT");
+                       vconf_notify_key_changed(VCONFKEY_WIFI_QS_EXIT, _wifi_qs_monitoring_cb, ad);
+               } else {
+                       PTS_DEBUG("Failed to launch wifi-qs(%d)",ret);
+               }
+       } else if (index == 1) { // Wi-Fi Direct
+               pts_launch_wifi_direct_ug(ad);
+       } else {
+               PTS_DEBUG("Unknown index");
+       }
+       PTS_IF_DEL_OBJ(ad->select_info.wifi_type_popup);
+
+       PTS_TRACE_END;
+}
+
+static void _pts_refresh_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(ad->list_info.no_found_popup);
+       PTS_IF_DEL_OBJ(ad->list_info.printer_list_popup);
+
+       pts_search_printer(ad);
+
+       PTS_TRACE_END;
+}
+
+
+static void _pts_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_IF_DEL_OBJ(obj);
+       PTS_IF_DEL_OBJ(ad->search_info.popup);
+       PTS_IF_DEL_OBJ(ad->list_info.no_found_popup);
+       PTS_IF_DEL_OBJ(ad->select_info.wifi_type_popup);
+       PTS_IF_DEL_OBJ(ad->list_info.printer_list_popup);
+
+       if (ad->search_info.print_search_mode ==  PTS_SEARCH_INITIAL) {
+               PTS_IF_DEL_OBJ(ad->list_info.printer_list_popup);
+               PTS_IF_DEL_OBJ(obj);
+               pt_deinit();
+               elm_exit();
+       } else {
+               if (ad->list_info.active_printer == NULL) {
+                       PTS_DEBUG("No active printer. So remove all option");
+                       elm_genlist_item_update(ad->setting_info.printer_item);
+                       elm_object_item_del(ad->setting_info.header_separator_item);
+                       elm_object_item_del(ad->setting_info.item_paper_size);
+                       elm_object_item_del(ad->setting_info.item_paper_copies);
+                       elm_object_item_del(ad->setting_info.item_page_range);
+                       elm_object_item_del(ad->setting_info.item_paper_quality);
+                       elm_object_item_del(ad->setting_info.item_paper_type);
+                       elm_object_item_del(ad->setting_info.item_grayscale);
+                       elm_object_item_del(ad->setting_info.footer_separator_item);
+               }
+       }
+       PTS_TRACE_END;
+}
+
+static int pts_save_selected_printer(pts_appdata_t *ad, pt_printer_mgr_t *pt)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(pt == NULL, PT_ERR_INVALID_PARAM, "printer_info is NULL.");
+
+       int ret = 0;
+       PTS_DEBUG("pt name is %s", pt->name);
+       PTS_DEBUG("pt address %x", pt);
+
+       /* Check whether the printer is already activated or not. */
+       if (NULL != ad->list_info.active_printer) {
+               if ((strcmp(ad->list_info.active_printer->name, pt->name) == 0) &&
+                               (strcmp(ad->list_info.active_printer->address, pt->address) == 0)) {
+                       // if same printer, then nothing to do...
+                       PTS_DEBUG("Same printer is selected. No update required. %x", pt);
+                       return PT_ERR_NONE;
+               }
+       }
+
+       ret = pt_set_active_printer(pt);
+       PTS_RETV_IF(ret != PT_ERR_NONE, PT_ERR_FAIL, "Can not set active printer.");
+
+       ret = pt_set_default_printer(pt);
+       PTS_RETV_IF(ret != PT_ERR_NONE, PT_ERR_FAIL, "Can not set default printer.");
+
+       if (NULL == ad->list_info.active_printer) {
+               ad->list_info.active_printer = (pt_printer_mgr_t *)malloc(sizeof(pt_printer_mgr_t));
+               PTS_RETV_IF(ad->list_info.active_printer == NULL, PT_ERR_NO_MEMORY, "Can allocate memory");
+       }
+       memset(ad->list_info.active_printer, 0, sizeof(pt_printer_mgr_t));
+       memcpy(ad->list_info.active_printer, pt, sizeof(pt_printer_mgr_t));
+
+       ad->setting_info.paper_size = (Elm_Object_Item **)realloc(ad->setting_info.paper_size, pt_get_print_option_papersize_num() * sizeof(Elm_Object_Item *));
+       memset(ad->setting_info.paper_size, 0, pt_get_print_option_papersize_num() * sizeof(Elm_Object_Item *));
+
+       return PT_ERR_NONE;
+}
+
+static void _pts_printer_list_cancel_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       struct appdata *ad = pts_get_appdata();
+
+       PTS_IF_DEL_OBJ(data);
+       PTS_IF_DEL_OBJ(ad->list_info.no_found_popup);
+       PTS_IF_DEL_OBJ(ad->list_info.printer_list_popup);
+
+       if (ad->search_info.print_search_mode == PTS_SEARCH_INITIAL) {
+               PTS_TRACE_END;
+               pt_deinit();
+               elm_exit();
+       } else {
+               //Don't terminate mobileprint. Previous screen is setting view.
+       }
+       PTS_TRACE_END;
+}
+
+static void _pts_printer_list_ok_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       PTS_RET_IF(ad->list_info.select_printer == NULL, "No supported printer");
+       PTS_IF_DEL_OBJ(printer_list_radio_main);
+       PTS_IF_DEL_OBJ(ad->list_info.printer_list_popup);
+
+       pts_save_selected_printer(ad, ad->list_info.select_printer);
+
+       if (ad->search_info.selection_done_cb != NULL) {
+               ad->search_info.selection_done_cb(ad->search_info.printer_search_user_data);
+       }
+
+       PTS_TRACE_END;
+       return;
+}
+
+/*
+* select the printer from the searched printers list
+*/
+static void __pts_search_print_list_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(data == NULL, "data is NULL");
+       PTS_RET_IF(event_info == NULL, "event_info is NULL");
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       Elm_Object_Item *item = event_info;
+
+       pt_printer_mgr_t *pt = NULL;
+       radio_print_list_data_t *core = NULL;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       core  = (radio_print_list_data_t *)elm_object_item_data_get(item);
+       PTS_RET_IF(core == NULL, "core is NULL");
+       pt = core->pt;
+       PTS_RET_IF(pt == NULL, "pt is NULL");
+
+       PTS_DEBUG("Selected printer information: index=[%d]", core->radio_index);
+       PTS_DEBUG("pt->name : %s", pt->name);
+       PTS_DEBUG("pt->address : %s", pt->address);
+
+       ad->list_info.select_printer = pt;
+       elm_radio_value_set(core->radio_group, core->radio_index);
+
+       // Now call real event trigger to update radio button when selected.
+       elm_genlist_item_update(item);
+
+       PTS_TRACE_END;
+}
+
+/*
+* get the value of the label
+*/
+static char *__pts_list_view_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       radio_print_list_data_t *core = (radio_print_list_data_t *) data;
+       pt_printer_mgr_t *item = core->pt;
+       PTS_RETV_IF(item == NULL, NULL, "item is NULL");
+
+       if (strcmp(part, "elm.text.1") == 0) {
+               if (item != NULL) {
+                       char *printer_label = strdup(item->name);
+                       pts_unstandardization(printer_label);
+                       return printer_label;
+               }
+       } else if (strcmp(part, "elm.text.2") == 0) {
+               if (item != NULL) {
+                       if (item->is_ppd_exist == FALSE) {
+                               return strdup(_("IDS_COM_POP_UNSUPPORTED"));
+                       } else {
+                               return pts_parse_protocol(item->address);
+                       }
+               }
+       }
+
+       PTS_TRACE_END;
+       return NULL;
+}
+
+/*
+* set the icon of the obj
+*/
+static Evas_Object *__pts_list_view_icon_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+
+       radio_print_list_data_t *core = (radio_print_list_data_t *) data;
+       pts_appdata_t *ad  = pts_get_appdata();
+       PTS_RETV_IF(core == NULL || ad == NULL, NULL, "Invalid argument");
+
+       pt_printer_mgr_t *pt = core->pt;
+       Evas_Object *radio = NULL;
+
+       if (!strcmp(part, "elm.icon") || !strcmp(part, "elm.swallow.icon")) {
+
+               radio = elm_radio_add(obj);
+               elm_radio_state_value_set(radio, core->radio_index);
+               elm_radio_group_add(radio, core->radio_group);
+               if (ad->list_info.active_printer != NULL) {
+                       if (strcmp(ad->list_info.active_printer->name, pt->name) ==0 &&
+                                       strcmp(ad->list_info.active_printer->address, pt->address) ==0) {
+                               elm_radio_value_set(radio, core->radio_index);
+                               ad->list_info.select_printer = pt;
+
+                               PTS_DEBUG("Printer[%d] name=[%s], address=[%s] -> Active", core->radio_index, pt->name, pt->address);
+                       } else {
+                               PTS_DEBUG("Printer[%d] name=[%s], address=[%s] -> x", core->radio_index, pt->name, pt->address);
+                       }
+               }
+
+               evas_object_size_hint_weight_set(radio, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(radio, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               return radio;
+       }
+
+       PTS_TRACE_END;
+       return NULL;
+}
+
+/*
+* popup when machine is unsupported
+*/
+static Eina_Bool __pts_exit_cb(void *data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *) data;
+       PTS_RETV_IF(ad == NULL, ECORE_CALLBACK_CANCEL, "ad is NULL");
+
+       PTS_IF_FREE_MEM(ad);
+       elm_exit();
+
+       PTS_TRACE_END;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+/*
+* popup error when searching printers failed
+*/
+static Eina_Bool __pts_list_view_popup_error(void *data)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = (pts_appdata_t *) data;
+       PTS_RETV_IF(ad == NULL, ECORE_CALLBACK_CANCEL, "ad is NULL");
+
+       ad->search_info.is_process = 0;/*process is complete*/
+
+       PTS_IF_DEL_OBJ(ad->search_info.popup);
+
+       PTS_DEBUG("search printer failed");
+       pts_create_popup(ad->search_info.print_search_popup_parent, _("IDS_ASEML_POP_SEARCH_FAILED"), 1.0);
+       ecore_timer_add(1, (Ecore_Task_Cb)__pts_exit_cb, (void *)ad);
+
+       PTS_IF_FREE_MEM(ad);
+
+       PTS_TRACE_END;
+       return ECORE_CALLBACK_CANCEL;
+}
+
+// pts_create_wifi_popup
+Evas_Object *pts_create_wifi_type_selector_popup(Evas_Object *parent)
+{
+       PTS_TRACE_BEGIN;
+       Evas_Object *popup = elm_popup_add(parent);
+       elm_object_style_set(popup,"content_no_vhpad");
+       elm_object_part_text_set(popup, "title,text", _("IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"));
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       Evas_Object *layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "min_menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       /* accessability - screen reader support */
+
+       Evas_Object *eo = elm_layout_edje_get(popup);
+       const Evas_Object *po = edje_object_part_object_get(eo, "access.title");;
+       Evas_Object *ao = elm_access_object_get(po);
+       elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, _("IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"));
+
+       Evas_Object *cancel_button = elm_button_add(popup);
+       elm_object_style_set(cancel_button,"popup_button/default");
+       elm_object_text_set(cancel_button, _("IDS_COM_SK_CANCEL"));
+       elm_access_info_set(cancel_button, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_CANCEL_CONNECT_WIFI);
+       elm_object_part_content_set(popup, "button1", cancel_button);
+       evas_object_smart_callback_add(cancel_button, "clicked", _pts_cancel_cb, NULL);
+
+       wifi_list_itc.item_style = "1text";
+       wifi_list_itc.func.text_get = _pts_wifi_text_get;
+       wifi_list_itc.func.content_get = NULL;
+       wifi_list_itc.func.state_get = NULL;
+       wifi_list_itc.func.del = NULL;
+
+       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);
+
+       int index = 0;
+       for (index = 0; index < 2; index++) {
+               elm_genlist_item_append(genlist, &wifi_list_itc, (void *) index, NULL,
+                                                               ELM_GENLIST_ITEM_NONE, _pts_wifi_list_sel, NULL);
+       }
+
+       Evas_Object *box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_box_pack_end(box, genlist);
+       elm_object_part_content_set(layout, "elm.swallow.content" , box);
+
+       elm_object_content_set(popup, box);
+       evas_object_size_hint_min_set(box, 400 * elm_config_scale_get(), elm_genlist_items_count(genlist) * 112 * elm_config_scale_get());
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _pts_cancel_cb, NULL);
+
+       elm_object_focus_set(popup, EINA_TRUE);
+
+       evas_object_show(box);
+       evas_object_show(genlist);
+       evas_object_show(popup);
+       evas_object_show(parent);
+
+       PTS_TRACE_END;
+       return popup;
+}
+
+Evas_Object *pts_create_no_found_popup(Evas_Object *parent, void *refresh_cb, void *cancel_cb)
+{
+       PTS_TRACE_BEGIN;
+
+       Evas_Object *popup = elm_popup_add(parent);
+       //elm_object_style_set(popup,"menustyle");
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(popup, _("IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"));
+
+       Evas_Object *cancel_button = elm_button_add(popup);
+       //elm_object_style_set(cancel_button,"popup_button/default");
+       elm_object_text_set(cancel_button, _("IDS_COM_SK_CANCEL"));
+       elm_object_part_content_set(popup, "button1", cancel_button);
+       evas_object_smart_callback_add(cancel_button, "clicked", cancel_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, cancel_cb, NULL);
+
+       Evas_Object *refresh_button = elm_button_add(popup);
+       //elm_object_style_set(refresh_button,"popup_button/default");
+       elm_object_text_set(refresh_button, _("IDS_COM_SK_REFRESH"));
+       elm_object_part_content_set(popup, "button2", refresh_button);
+       evas_object_smart_callback_add(refresh_button, "clicked", refresh_cb, NULL);
+       elm_object_focus_set(popup, EINA_TRUE);
+
+       evas_object_show(popup);
+       evas_object_show(parent);
+
+       PTS_TRACE_END;
+       return popup;
+}
+
+/*
+* create the content of the list view
+*/
+Evas_Object *pts_create_content_printer_list(Evas_Object *parent, pts_appdata_t *ad, int *print_counter)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL, NULL, "ad is NULL");
+
+       Evas_Object *genlist = NULL;
+       Elm_Object_Item *git;
+       genlist = elm_genlist_add(parent);
+
+       // ToDo: Make sure that printer_list_radio_main always is NULL at here..
+       //if (!printer_list_radio_main) {
+       printer_list_radio_main = elm_radio_add(genlist);
+       elm_radio_state_value_set(printer_list_radio_main, 0);
+       elm_radio_value_set(printer_list_radio_main, 1);
+       //}
+
+       list_itc.item_style = "2text.1icon.4"; // Left Icon, Right Main/Sub Text
+       list_itc.func.text_get = __pts_list_view_label_get;
+       list_itc.func.content_get = __pts_list_view_icon_get;
+       list_itc.func.state_get = NULL;
+       list_itc.func.del = NULL;
+
+       pt_printer_mgr_t *it = NULL;
+       Eina_List *cursor = NULL;
+
+       // printer_list_radio_main is index zero.
+       // Thus radio index starts from 1.
+       int radio_index = 1;
+       radio_print_list_data_t *core = NULL;
+
+       ad->list_info.select_printer = NULL;
+
+       EINA_LIST_FOREACH(ad->list_info.printer_list, cursor, it) {
+
+               if (ad->list_info.select_printer == NULL && it->is_ppd_exist == TRUE)   {
+                       // set the first printer as default one.
+                       ad->list_info.select_printer = it;
+               }
+               PTS_DEBUG("printer %d\n", radio_index);
+               core = (radio_print_list_data_t *)malloc(sizeof(radio_print_list_data_t));
+               core->radio_index = radio_index;
+               core->pt = it;
+               core->radio_group = printer_list_radio_main;
+
+               git = elm_genlist_item_append(
+                       genlist,
+                       &list_itc,
+                       (void *)core,
+                       NULL,
+                       ELM_GENLIST_ITEM_NONE,
+                       __pts_search_print_list_sel,
+                       ad);
+
+               if (it->is_ppd_exist == FALSE) {
+                       elm_object_item_disabled_set(git, EINA_TRUE);
+               }
+               radio_index ++;
+       }
+
+       *print_counter = radio_index-1;
+       PTS_DEBUG("printer num = %d\n", *print_counter);
+
+       evas_object_show(genlist);
+       PTS_TRACE_END;
+       return genlist;
+}
+
+Evas_Object *pts_create_printer_list_popup(Evas_Object *parent, pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+
+// XXX
+//  Currently min_menustyle does not support "2text.1icon.4" genlist.
+//  When min_menustyle supports it, change this.
+//  To avoid this limitation, applied box object.
+       Evas_Object *popup = elm_popup_add(parent);
+       elm_object_style_set(popup,"content_no_vhpad");
+       elm_object_part_text_set(popup, "title,text", _("IDS_PRT_BODY_SELECT_PRINTER"));
+       evas_object_size_hint_weight_set(popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_access_info_set(popup, ELM_ACCESS_CONTEXT_INFO, _("IDS_PRT_BODY_SELECT_PRINTER")); //FIXME: should be set to title, not popup itself
+
+       Evas_Object *layout = elm_layout_add(popup);
+       elm_layout_theme_set(layout, "layout", "content", "min_menustyle");
+       evas_object_size_hint_weight_set(layout, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       /* accessability - screen reader support */
+       Evas_Object *eo = elm_layout_edje_get(popup);
+       const Evas_Object *po = (Evas_Object *)edje_object_part_object_get(eo, "access.title");
+       Evas_Object *ao = elm_access_object_get(po);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, _("IDS_PRT_BODY_SELECT_PRINTER"));
+       elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_PRINTERS_LIST_IS_BELOW);
+
+       Evas_Object *cancel_button = elm_button_add(popup);
+       elm_object_style_set(cancel_button,"popup_button/default");
+       elm_object_text_set(cancel_button, _("IDS_COM_SK_CANCEL"));
+       elm_access_info_set(cancel_button, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_CANCEL_PRINTING);
+       elm_object_part_content_set(popup, "button1", cancel_button);
+       evas_object_smart_callback_add(cancel_button, "clicked", _pts_printer_list_cancel_cb, popup);
+
+       Evas_Object *refresh_button = elm_button_add(popup);
+       elm_object_style_set(refresh_button,"popup_button/default");
+       elm_object_text_set(refresh_button, _("IDS_COM_SK_REFRESH"));
+       elm_access_info_set(refresh_button, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_REFRESH_SEARCHING_PRINTERS);
+       elm_object_part_content_set(popup, "button2", refresh_button);
+       evas_object_smart_callback_add(refresh_button, "clicked", _pts_refresh_cb, ad);
+
+       Evas_Object *ok_button = elm_button_add(popup);
+       elm_object_style_set(ok_button,"popup_button/default");
+       elm_object_text_set(ok_button, _("IDS_COM_SK_OK"));
+       elm_access_info_set(ok_button, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_CONFIRM_SELECTED_PRINTER);
+       elm_object_part_content_set(popup, "button3", ok_button);
+       evas_object_smart_callback_add(ok_button, "clicked", _pts_printer_list_ok_cb, ad);
+
+       int printer_num = 0;
+       Evas_Object *genlist = pts_create_content_printer_list(parent, ad, &printer_num);
+       evas_object_size_hint_weight_set(genlist, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(genlist, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       Evas_Object *box = elm_box_add(popup);
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       elm_box_pack_end(box, genlist);
+
+       /*
+        * XXX - below 143 value is just for entry height of 2text.1icon.4 style in genlist
+        */
+
+       int rotate_angle = 0;
+       if (ad->win) {
+               rotate_angle = elm_win_rotation_get(ad->win);
+               PTS_DEBUG("rotate_angle: %d", rotate_angle);
+       } else {
+               PTS_DEBUG("No ld->ugd->root_win");
+       }
+
+       ad->list_info.printer_list_popup_portrait_height        = MIN(PRINTER_LIST_POPUP_H, elm_genlist_items_count(genlist) * 143) * elm_config_scale_get();
+       ad->list_info.printer_list_popup_landscape_height       = MIN(PRINTER_LIST_POPUP_LN_H, elm_genlist_items_count(genlist) * 143) * elm_config_scale_get();
+
+       if (0 == rotate_angle || 180 == rotate_angle)
+               evas_object_size_hint_min_set(box,
+               PRINTER_LIST_POPUP_W * elm_config_scale_get(),
+               ad->list_info.printer_list_popup_portrait_height);
+       else
+               evas_object_size_hint_min_set(box,
+               PRINTER_LIST_POPUP_LN_W * elm_config_scale_get(),
+               ad->list_info.printer_list_popup_landscape_height);
+
+       ad->list_info.printer_list_popup_box = box;
+       ad->list_info.printer_list_popup = popup;
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _pts_printer_list_cancel_cb, NULL);
+
+       elm_object_part_content_set(layout, "elm.swallow.content" , box);
+       elm_object_content_set(popup, box);
+       elm_object_focus_set(popup, EINA_TRUE);
+
+       evas_object_show(genlist);
+       evas_object_show(box);
+       evas_object_show(popup);
+       evas_object_show(parent);
+
+       PTS_TRACE_END;
+       return popup;
+}
+
+void pts_search_printer_select(pts_appdata_t *ad)
+{
+//     if (ugd->print_search_mode == PTS_SEARCH_INITIAL)
+       pts_create_printer_list_popup(ad->search_info.print_search_popup_parent, ad);
+//     else
+//             pts_create_printer_list_view(ugd->print_search_popup_parent, ld);
+
+       return;
+}
+
+/*
+* the response callback when search the printer
+*/
+static void __pts_get_printer_cb(pt_response_data_t *cb)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(cb == NULL, "response data is NULL");
+
+       pts_appdata_t *ad = cb->userdata;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       ad->list_info.printer_list = cb->printerlist;
+       ad->search_info.is_process = 0; /*process is complete*/
+
+       /* destroy popup progress bar */
+       PTS_IF_DEL_OBJ(ad->search_info.popup);
+
+       /*
+        * Not found any printer
+        */
+       if (NULL == ad->list_info.printer_list) {
+               /*
+                * destroy popup progress bar
+                */
+               PTS_DEBUG("search printer failed");
+               PTS_IF_FREE_MEM(ad->list_info.active_printer);
+               ad->list_info.no_found_popup = pts_create_no_found_popup(ad->search_info.print_search_popup_parent,
+                                                                                               _pts_refresh_cb,
+                                                                                               _pts_cancel_cb);
+               return;
+       }
+
+       int pt_count = 0;
+       /* get printer list count */
+       pt_count = eina_list_count(ad->list_info.printer_list);
+       PTS_DEBUG("Printer count is %d", pt_count);
+
+       if (pt_count > 0) {
+               pts_search_printer_select(ad);
+       } else {
+               // No Printer found.
+               // Control can't be reach here...
+       }
+       PTS_TRACE_END;
+}
+
+/**
+ *     This function let the app create the print searching popup
+ *     @return  void
+ *     @param[in] ld the pointer to the ug list structure
+ */
+Evas_Object *pts_create_print_search_popup(Evas_Object *parent)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *popup = elm_popup_add(parent);
+       Evas_Object *layout = pts_create_base_layout(popup, "popup_search");
+       Evas_Object *progressbar = elm_progressbar_add(popup);
+       elm_object_style_set(progressbar, "list_process");
+       elm_progressbar_horizontal_set(progressbar, EINA_TRUE);
+       evas_object_size_hint_align_set(progressbar, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_size_hint_weight_set(progressbar, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_progressbar_pulse(progressbar, EINA_TRUE);
+       elm_access_info_set(progressbar, ELM_ACCESS_INFO, _("IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING")); //FIXME Screen reader doesn't pronounce it
+       evas_object_show(progressbar);
+
+       elm_object_part_content_set(layout, "elm.swallow.content", progressbar);
+       elm_object_part_text_set(layout, "elm.text", _("IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"));
+
+       /* accessability - screen reader support */
+       const Evas_Object *po = edje_object_part_object_get(layout, "elm.swallow.content");
+       Evas_Object *ao = elm_access_object_get(po);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, _("IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"));
+
+       elm_object_content_set(popup, layout);
+       Evas_Object *btn = elm_button_add(popup);
+       elm_object_text_set(btn, _("IDS_COM_SK_CANCEL"));
+       elm_access_info_set(btn, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_CANCEL_SEARCHING_PRINTERS);
+       elm_object_part_content_set(popup, "button1", btn);
+       evas_object_smart_callback_add(btn, "clicked", _pts_cancel_cb, NULL);
+       ea_object_event_callback_add(popup, EA_CALLBACK_BACK, _pts_cancel_cb, NULL);
+       elm_object_focus_set(popup, EINA_TRUE);
+
+       evas_object_show(layout);
+       evas_object_show(popup);
+       evas_object_show(parent);
+
+       PTS_TRACE_END;
+       return popup;
+}
+
+static gboolean __is_wifi_direct_connected(int net_info)
+{
+       /** Connected with peer as GC */
+       if ((net_info&PT_CONNECTION_WIFI_DIRECT)>0) {
+               return TRUE;
+       }
+       return FALSE;
+}
+
+static gboolean __is_wifi_connected(int net_info)
+{
+       if ((net_info&PT_CONNECTION_WIFI)>0) {
+               return TRUE;
+       }
+       return FALSE;
+}
+
+static gboolean __is_usb_host_connected(int net_info)
+{
+       if ((net_info&PT_CONNECTION_USB)>0) {
+               return TRUE;
+       }
+       return FALSE;
+}
+
+static gboolean __is_connected(int net_info)
+{
+       if (net_info == 0) {
+               return FALSE;
+       }
+       return TRUE;
+}
+
+static gboolean __is_valid_ip_address(const char *ip_address)
+{
+       PTS_RETV_IF(ip_address == NULL, FALSE, "ip_address is NULL");
+       return FALSE;
+}
+
+/*
+* start to search printer
+*/
+void pts_search_printer(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+       int ret = 0;
+       int net_type = 0;
+       ret = pt_get_connection_status(&net_type);
+       PTS_RET_IF(ret != PT_ERR_NONE, "Failed to get connection status(%d)", ret);
+
+       if (__is_connected(net_type)) {
+               if (__is_wifi_direct_connected(net_type)) {
+                       ad->search_info.popup = pts_create_print_search_popup(ad->search_info.print_search_popup_parent);
+                       ad->search_info.is_process = 1; /* in process */
+                       PTS_IF_DEL_TIMER(ad->search_info.search_err_timer);
+
+                       ret = pt_get_printers(__pts_get_printer_cb, ad);
+                       if (PT_ERR_NONE != ret) {
+                               ad->search_info.search_err_timer = ecore_timer_add(1.0, (Ecore_Task_Cb)__pts_list_view_popup_error, (void *)ad);
+                       }
+               } else if (__is_wifi_connected(net_type) || __is_usb_host_connected(net_type)) {
+                       ad->search_info.popup = pts_create_print_search_popup(ad->search_info.print_search_popup_parent);
+                       ad->search_info.is_process = 1; /* in process */
+                       PTS_IF_DEL_TIMER(ad->search_info.search_err_timer);
+                       ret = pt_get_printers(__pts_get_printer_cb, ad);
+                       if (PT_ERR_NONE != ret) {
+                               ad->search_info.search_err_timer = ecore_timer_add(1.0, (Ecore_Task_Cb)__pts_list_view_popup_error, (void *)ad);
+                       }
+               } else {
+                       PTS_DEBUG("Undefined connection status");
+                       return;
+               }
+       } else {
+               ad->select_info.wifi_type_popup = pts_create_wifi_type_selector_popup(ad->search_info.print_search_popup_parent);
+               return;
+       }
+       PTS_TRACE_END;
+}
diff --git a/mobileprint/app/pts_setting_view.c b/mobileprint/app/pts_setting_view.c
new file mode 100644 (file)
index 0000000..b8a2ca5
--- /dev/null
@@ -0,0 +1,1209 @@
+/*
+*  Mobileprint
+*
+* 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 _GNU_SOURCE
+#include <stdio.h>
+#include <string.h>
+#include <efl_assist.h>
+#include "pt_api.h"
+#include "mobileprint.h"
+#include "pts_common.h"
+#include "pts_main_view.h"
+#include "pts_setting_view.h"
+
+static Elm_Genlist_Item_Class itc_normal_options;
+static Elm_Genlist_Item_Class itc_tree_options;
+static Elm_Genlist_Item_Class itc_printer;
+static Elm_Genlist_Item_Class itc_separator;
+
+static Elm_Genlist_Item_Class itc_paper_size;
+static Elm_Genlist_Item_Class itc_paper_quality;
+static Elm_Genlist_Item_Class itc_paper_type;
+static Elm_Genlist_Item_Class itc_grayscale;
+static Elm_Genlist_Item_Class itc_page_range;
+static Elm_Genlist_Item_Class itc_duplex;
+
+static Evas_Coord touch_x;
+static Evas_Coord touch_y;
+static Evas_Object *copies_popup = NULL;
+
+static void __pts_setting_view_leave_view(pts_appdata_t *ad)
+{
+       PTS_IF_DEL_OBJ(ad->setting_info.radio_group_paper_size);
+       PTS_IF_DEL_OBJ(ad->setting_info.radio_group_paper_quality);
+       PTS_IF_DEL_OBJ(ad->setting_info.radio_group_paper_type);
+       PTS_IF_DEL_OBJ(ad->setting_info.radio_group_page_range);
+       PTS_IF_DEL_OBJ(ad->setting_info.radio_group_grayscale);
+       PTS_IF_DEL_OBJ(ad->setting_info.radio_group_duplex);
+       elm_naviframe_item_pop_to(ad->main_info.navi_it);
+}
+
+/*
+*  the response callback when click back button
+*/
+static Eina_Bool __pts_setting_view_btn_back_cb(void *data, Elm_Object_Item *it)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+
+       PTS_RETV_IF(ad == NULL, EINA_TRUE, "ad is NULL");
+
+       __pts_setting_view_leave_view(ad);
+
+       if (ad->list_info.active_printer == NULL) {
+               PTS_DEBUG("No active printer. So just exit mobileprint");
+               pt_deinit();
+               elm_exit();
+               PTS_TRACE_END;
+               return EINA_TRUE;
+       }
+
+       pts_main_view_update_printer_label(ad);
+       pts_main_view_rotate_image(ad, app_get_device_orientation());
+       PTS_TRACE_END;
+       return EINA_TRUE;
+}
+
+static void _dismissed_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_IF_DEL_OBJ(copies_popup);
+}
+
+static void _copies_picker_cb(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       int copies = 1;
+       pts_appdata_t *ad  = (pts_appdata_t *)data;
+       Elm_Object_Item *item = event_info;
+
+       const char *label = elm_object_item_text_get(item);
+
+       PTS_RET_IF(label == NULL, "label is NULL");
+
+       copies = atoi(label);
+       if (copies == ad->list_info.active_printer->copies) {
+               PTS_DEBUG("Not changed\n");
+               PTS_TRACE_END;
+               return;
+       } else {
+               PTS_DEBUG("text(%s) is clicked!\n", label);
+               ad->list_info.active_printer->copies = copies;
+               elm_genlist_item_selected_set(ad->setting_info.item_paper_copies, EINA_FALSE);
+               elm_genlist_item_update(ad->setting_info.item_paper_copies);
+
+               PTS_IF_DEL_OBJ(copies_popup);
+       }
+       PTS_TRACE_END;
+}
+
+static void _move_copies_popup(Evas_Object *copies_popup, Evas_Object *win)
+{
+       Evas_Coord w, h;
+       Evas_Coord x, y;
+
+       evas_object_geometry_get(win, &x, &y, &w, &h);
+       evas_object_move(copies_popup, x+(w*0.06), touch_y);
+}
+
+static void __on_show(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       PTS_DEBUG("copies popup show\n");
+}
+
+static void __on_hide(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       PTS_DEBUG("copies popup hide\n");
+}
+
+/**
+ * Copies picker create
+ */
+static void _create_copies_popup_timepicker(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       int idx;
+       Evas_Object *diskselector;
+       Evas_Coord w;
+       char buffer[4];
+       char current_selection[4];
+
+       pts_appdata_t *ad  = (pts_appdata_t *)data;
+       elm_genlist_item_selected_set(ad->setting_info.item_paper_copies, EINA_TRUE);
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       if (event_info) {
+               elm_genlist_item_selected_set(event_info, EINA_FALSE);
+       }
+
+       PTS_IF_DEL_OBJ(copies_popup);
+
+       evas_object_geometry_get(ad->main_info.root_win, NULL, NULL, &w, NULL);
+       copies_popup = elm_ctxpopup_add(ad->main_info.navi);
+       //elm_object_style_set(copies_popup, "timepicker");
+       elm_object_style_set(copies_popup, "datetime/default");
+       evas_object_size_hint_min_set(copies_popup, w, -1);
+       evas_object_size_hint_weight_set(copies_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_smart_callback_add(copies_popup, "dismissed", _dismissed_cb, copies_popup);
+       evas_object_event_callback_add(copies_popup, EVAS_CALLBACK_SHOW, __on_show, ad);
+       evas_object_event_callback_add(copies_popup, EVAS_CALLBACK_HIDE, __on_hide, ad);
+
+       diskselector = elm_diskselector_add(ad->main_info.navi);
+       elm_diskselector_display_item_num_set(diskselector, 8);
+       //elm_object_style_set(diskselector, "timepicker");
+       elm_object_style_set(diskselector, "datetime/default");
+
+       snprintf(current_selection, 4, "%d", ad->list_info.active_printer->copies);
+
+       for (idx = 1; idx < COPIES_MAX+1; idx++) {
+               snprintf(buffer, 4, "%d", idx);
+
+               if (strcmp(current_selection, buffer) == 0) {
+                       item = elm_diskselector_item_append(diskselector, buffer, NULL, _copies_picker_cb, ad);
+               } else {
+                       elm_diskselector_item_append(diskselector, buffer, NULL, _copies_picker_cb, ad);
+               }
+       }
+
+       if (item != NULL) {
+               elm_diskselector_item_selected_set(item, EINA_TRUE);
+       }
+
+       elm_diskselector_round_enabled_set(diskselector, EINA_TRUE);
+       evas_object_size_hint_weight_set(diskselector, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(diskselector, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       evas_object_show(diskselector);
+       elm_object_content_set(copies_popup, diskselector);
+
+       elm_ctxpopup_direction_priority_set(copies_popup, ELM_CTXPOPUP_DIRECTION_DOWN,
+                                                                               ELM_CTXPOPUP_DIRECTION_UP,
+                                                                               ELM_CTXPOPUP_DIRECTION_LEFT,
+                                                                               ELM_CTXPOPUP_DIRECTION_RIGHT);
+
+       _move_copies_popup(copies_popup, ad->main_info.root_win);
+       evas_object_show(copies_popup);
+
+       PTS_TRACE_END;
+}
+
+/**
+*  Callback for expandable genlist selection
+*/
+static void __pts_setting_view_gl_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       Eina_Bool expand_state = EINA_FALSE;
+       if (event_info) {
+               elm_genlist_item_selected_set(event_info, EINA_FALSE);
+       }
+
+       expand_state = elm_genlist_item_expanded_get(item);
+       elm_genlist_item_expanded_set(item, !expand_state);
+       PTS_DEBUG("expanded : %d", expand_state);
+
+       PTS_TRACE_END;
+}
+
+void pts_setting_view_printer_select_done_cb(void *userdata)
+{
+       PTS_TRACE_BEGIN;
+       struct appdata *ad = pts_get_appdata();
+
+       Elm_Object_Item *item = (Elm_Object_Item *)userdata;
+       elm_genlist_item_update(item);
+
+       if (ad->list_info.active_printer) {
+               pts_create_setting_view(ad);
+       }
+
+       PTS_TRACE_END;
+       return;
+}
+
+/**
+*  Callback for expandable genlist selection
+*/
+static void __pts_setting_view_printer_sel(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       if (event_info) {
+               elm_genlist_item_selected_set(event_info, EINA_FALSE);
+       }
+
+       if (ad->search_info.popup != NULL
+               || ad->list_info.no_found_popup != NULL
+               || ad->list_info.printer_list_popup != NULL) {
+               PTS_WARN("event was called duplicated, it is ignored");
+               return;
+       }
+
+       // Launch Print searching module
+       ad->search_info.print_search_mode = PTS_SEARCH_IN_SETTING;
+       ad->search_info.selection_done_cb = pts_setting_view_printer_select_done_cb;
+       ad->search_info.print_search_popup_parent = ad->main_info.navi;
+       ad->search_info.printer_search_user_data = (void *)event_info;
+       pts_search_printer(ad);
+
+       PTS_TRACE_END;
+}
+
+/**
+*  Callback for expandable genlist contract
+*/
+static void __pts_setting_view_gl_con(void *data, Evas_Object *obj, void *event_info)
+{
+       Elm_Object_Item *item = event_info;
+       elm_genlist_item_subitems_clear(item);
+}
+
+/*
+*  get the label of the printer information
+*/
+static char *__pts_setting_view_printer_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       struct appdata *ad = pts_get_appdata();
+       if (strcmp(part, "elm.text.1") == 0) {
+               //if (printer != NULL) {
+               //return strdup(printer->name);
+               PTS_TRACE_END;
+               return strdup(_("IDS_PRT_BODY_PRINTER"));
+               //}
+       } else if (strcmp(part, "elm.text.2") == 0) {
+               //if (printer != NULL) {
+               if (ad->list_info.active_printer != NULL) {
+                       char *printer_label = strdup(ad->list_info.active_printer->name);
+                       pts_unstandardization(printer_label);
+                       //return strdup(printer->address);
+                       PTS_TRACE_END;
+                       return printer_label;
+               } else {
+                       PTS_TRACE_END;
+                       return strdup(PTS_18);
+               }
+       }
+       PTS_TRACE_END;
+       return NULL;
+}
+
+/*
+*  get the label of the option setting
+*/
+#define MAX_TMP_BUF 64
+static char *__pts_setting_view_option_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       struct appdata *ad = pts_get_appdata();
+       pt_printer_mgr_t *active_printer = ad->list_info.active_printer;
+       pt_print_option_e option_type = (pt_print_option_e)data;
+
+       char buf[MAX_TMP_BUF];
+
+       if (strcmp(part, "elm.text.1") == 0) {
+               switch (option_type) {
+               case PT_OPTION_ID_COPIES:
+                       return strdup(_("IDS_PRT_BODY_NUMBEROFCOPIES"));
+               case PT_OPTION_ID_PAPERSIZE:
+                       return strdup(_("IDS_PRT_BODY_PAPERSIZE"));
+               case PT_OPTION_ID_RANGE:
+                       return strdup(_("IDS_PRT_BODY_PRINT_RANGE_ABB"));
+               case PT_OPTION_ID_GRAYSCALE:
+                       return strdup(_("IDS_PRT_BODY_COLOUR"));
+               case PT_OPTION_ID_QUALITY:
+                       return strdup(_("IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"));
+               case PT_OPTION_ID_PAPER:
+                       return strdup(_("IDS_IMGE_BUTTON_PAPER_M_STICKER"));
+               case PT_OPTION_ID_DUPLEX:
+                       return strdup(IDS_PRINT_SETTINGS_DUPLEX);
+               default:
+                       return strdup(PTS_17);
+               }
+       } else if (strcmp(part, "elm.text.2") == 0) {
+
+               switch (option_type) {
+               case PT_OPTION_ID_COPIES: {
+                       snprintf(buf, MAX_TMP_BUF, "%d", active_printer->copies);
+                       PTS_DEBUG("Selected copies[%d, %s]",active_printer->copies, buf);
+               }
+               break;
+               case PT_OPTION_ID_PAPERSIZE: {
+                       active_printer->size = pt_get_selected(PT_OPTION_ID_PAPERSIZE);
+                       strncpy(buf, pt_get_print_option_papersize(active_printer->size), MAX_TMP_BUF-1);
+                       PTS_DEBUG("Selected paper size[%d, %s]", active_printer->size, buf);
+               }
+               break;
+               case PT_OPTION_ID_RANGE: {
+                       pt_range_e p_range = active_printer->range;
+                       if (PT_RANGE_ALL == p_range) {
+                               strcpy(buf, _("IDS_DIC_BODY_ALL"));
+                       } else {
+                               strcpy(buf, _("IDS_BR_BODY_CURRENT_PAGE"));
+                       }
+                       PTS_DEBUG("Selected range[%d, %s]", p_range, buf);
+               }
+               break;
+               case PT_OPTION_ID_GRAYSCALE: {
+                       int p_grayscale = pt_get_selected(PT_OPTION_ID_GRAYSCALE);
+
+                       if (PT_GRAYSCALE_COLOUR == p_grayscale) {
+                               strcpy(buf, _("IDS_PRT_BODY_COLOUR"));
+                       } else if (PT_GRAYSCALE_GRAYSCALE == p_grayscale) {
+                               strcpy(buf, _("IDS_IMGE_HEADER_GREY"));
+                       } /* else if (PT_GRAYSCALE_BLACKNWHITE == *p_value) {
+strcpy(buf, _("IDS_BR_OPT_BLACKNWHITE"));
+} */
+
+                       PTS_DEBUG("Selected color [%d, %s]", p_grayscale, buf);
+               }
+               break;
+               case PT_OPTION_ID_QUALITY: {
+                       int p_quality = pt_get_selected(PT_OPTION_ID_QUALITY);
+                       if (PT_QUALITY_DRAFT == p_quality) {
+                               strcpy(buf, _("IDS_PRT_OPT_PRINTSETTINGS_DRAFT"));
+                       } else if (PT_QUALITY_STANDARD == p_quality) {
+                               strcpy(buf, _("IDS_PRT_OPT_PRINTSETTINGS_STANDARD"));
+                       } else if (PT_QUALITY_HIGH == p_quality) {
+                               strcpy(buf, _("IDS_COM_BODY_HIGH"));
+                       }
+                       PTS_DEBUG("Selected quality [%d, %s]", p_quality, buf);
+               }
+               break;
+               case PT_OPTION_ID_PAPER: {
+                       int p_type = pt_get_selected(PT_OPTION_ID_PAPER);
+                       if (PT_PAPER_NORMAL == p_type) {
+                               strcpy(buf, _("IDS_ST_BODY_NORMAL"));
+                       } else if (PT_PAPER_GLOSSY == p_type) {
+                               strcpy(buf, _("IDS_ST_BODY_GLOSSY"));
+                       } else if (PT_PAPER_PHOTO == p_type) {
+                               strcpy(buf, _("IDS_PRT_BODY_PHOTOGRAPHIC_ABB"));
+                       }
+                       PTS_DEBUG("Selected paper type [%d, %s]", p_type, buf);
+               }
+               break;
+               case PT_OPTION_ID_DUPLEX: {
+                       int p_dup = pt_get_selected(PT_OPTION_ID_DUPLEX);
+                       if (PT_DUPLEX_OFF == p_dup) {
+                               strcpy(buf, IDS_PRINT_SETTINGS_DUPLEX_OFF);
+                       } else if (PT_DUPLEX_NO_TUMBLE == p_dup || PT_DUPLEX_TUMBLE == p_dup) {
+                               strcpy(buf, IDS_PRINT_SETTINGS_DUPLEX_ON);
+                       }
+                       PTS_DEBUG("Selected duplex mode [%d, %s]", p_dup, buf);
+               }
+               break;
+               default: {
+                       return strdup(PTS_17);
+               }
+               }
+
+               return strdup(buf);
+       }
+       PTS_TRACE_END;
+       return NULL;
+}
+
+
+
+static Evas_Object *
+__pts_setting_view_gl_content_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       pts_appdata_t *ad = pts_get_appdata();
+       Evas_Object *radio_button = NULL;
+       Item_data *core = (Item_data *)data;
+       int selected = 0;
+
+       if (!strcmp(part, "elm.icon")) {
+               switch (core->option) {
+               case PT_OPTION_ID_PAPERSIZE:
+                       selected = pt_get_selected(PT_OPTION_ID_PAPERSIZE);
+                       break;
+               case    PT_OPTION_ID_RANGE:
+                       selected = ad->list_info.active_printer->range;
+                       break;
+               case    PT_OPTION_ID_QUALITY:
+                       selected = pt_get_selected(PT_OPTION_ID_QUALITY);
+                       break;
+               case    PT_OPTION_ID_PAPER:
+                       selected = pt_get_selected(PT_OPTION_ID_PAPER);
+                       break;
+               case    PT_OPTION_ID_GRAYSCALE:
+                       selected = pt_get_selected(PT_OPTION_ID_GRAYSCALE);
+                       break;
+               case PT_OPTION_ID_DUPLEX:
+                       selected = pt_get_selected(PT_OPTION_ID_DUPLEX);
+                       break;
+                       /* case    PT_OPTION_ID_COPIES: */
+               default:
+                       break;
+               }
+
+               PTS_DEBUG("Create Radio button[%d] (%d,%d) , r_group= [0x%x] selected: %d",
+                       core->radio_index, core->option, core->sub_item, core->radio_group, selected);
+
+               radio_button  = elm_radio_add(obj);
+               core->radio_btn = radio_button;
+               evas_object_propagate_events_set(radio_button, EINA_TRUE);
+               elm_radio_state_value_set(radio_button, core->radio_index);
+               elm_radio_group_add(radio_button, core->radio_group);
+               elm_radio_value_set(core->radio_group, selected);
+               evas_object_show(radio_button);
+               evas_object_size_hint_weight_set(radio_button, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(radio_button, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+               PTS_TRACE_END;
+               return radio_button ;
+       }
+
+       PTS_TRACE_END;
+       return NULL;
+}
+
+
+static void
+__pts_setting_view_gl_state_item_delete(void *data, Evas_Object *obj)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(data == NULL, "data is NULL");
+       Item_data *core = (Item_data *)data;
+       pts_appdata_t *ad = pts_get_appdata();
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       switch (core->option) {
+       case    PT_OPTION_ID_QUALITY:
+               ad->setting_info.quality[core->sub_item] = NULL;
+               break;
+       case    PT_OPTION_ID_PAPER:
+               ad->setting_info.paper_type[core->sub_item] = NULL;
+               break;
+       case    PT_OPTION_ID_GRAYSCALE:
+               ad->setting_info.color[core->sub_item] = NULL;
+               break;
+       case PT_OPTION_ID_PAPERSIZE:
+               ad->setting_info.paper_size[core->sub_item] = NULL;
+               break;
+       case PT_OPTION_ID_DUPLEX:
+               ad->setting_info.duplex[core->sub_item] = NULL;
+               break;
+       default:
+               break;
+       }
+       PTS_DEBUG("Free core memory");
+       PTS_IF_FREE_MEM(core);
+
+       return;
+}
+
+/*
+* get the papersize value of the key
+*/
+static char *__pts_setting_view_papersize_key_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       Item_data *core = (Item_data *)data;
+       pt_paper_size_e p_size = (pt_paper_size_e)core->sub_item;
+
+       if (p_size < (pt_paper_size_e)0 || p_size >=  pt_get_print_option_papersize_num()) {
+               PTS_DEBUG("wrong paper size: %d", p_size);
+               return NULL;
+       }
+       PTS_TRACE_END;
+       return strdup(pt_get_print_option_papersize(p_size));
+}
+
+/*
+* get the grayscale value of the key
+*/
+static char *__pts_setting_view_grayscale_key_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       Item_data *core = (Item_data *)data;
+       pt_grayscale_e p_grayscale = (pt_grayscale_e)core->sub_item;
+       char *ret = NULL;
+
+       //PTS_RETV_IF(p_grayscale < 0 ||p_grayscale >= PT_GRAYSCALE_ANY, NULL, "wrong gray scale: %d", p_grayscale);
+
+       if (strcmp(part, "elm.text") == 0) {
+               switch (p_grayscale) {
+               case PT_GRAYSCALE_COLOUR:
+                       ret = strdup(_("IDS_PRT_BODY_COLOUR"));
+                       break;
+               case PT_GRAYSCALE_GRAYSCALE:
+                       ret = strdup(_("IDS_IMGE_HEADER_GREY"));
+                       break;
+               default:
+                       ret =  NULL;
+               }
+       }
+       PTS_TRACE_END;
+       return ret;
+}
+
+/*
+* get the quality value of the key
+*/
+static char *__pts_setting_view_quality_key_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       Item_data *core = (Item_data *)data;
+       pt_quality_e p_quality = (pt_quality_e)core->sub_item;
+       char *ret = NULL;
+
+       //PTS_RETV_IF(p_quality < 0 || p_quality >= PT_QUALITY_ANY, NULL, "wrong paper quality: %d", p_quality);
+
+       if (strcmp(part, "elm.text") == 0) {
+               switch (p_quality) {
+               case 0:
+                       ret = strdup(_("IDS_PRT_OPT_PRINTSETTINGS_DRAFT"));
+                       break;
+               case 1:
+                       ret = strdup(_("IDS_PRT_OPT_PRINTSETTINGS_STANDARD"));
+                       break;
+               case 2:
+                       ret = strdup(_("IDS_COM_BODY_HIGH"));
+                       break;
+               default:
+                       ret = NULL;
+               }
+       }
+       PTS_TRACE_END;
+       return ret;
+}
+
+/**
+* get the paper type value of the key
+*/
+static char *__pts_setting_view_paper_key_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       Item_data *core = (Item_data *)data;
+       pt_papertype_e p_type = (pt_papertype_e) core->sub_item;
+       char *ret = NULL;
+
+       //PTS_RETV_IF(p_type < 0 || p_type >= PT_PAPER_ANY, NULL, "wrong paper type: %d", p_type);
+
+       if (strcmp(part, "elm.text") == 0) {
+               switch (p_type) {
+               case 0:
+                       ret = strdup(_("IDS_ST_BODY_NORMAL"));
+                       break;
+               case 1:
+                       ret = strdup(_("IDS_ST_BODY_GLOSSY"));
+                       break;
+               case 2:
+                       ret = strdup(_("IDS_PRT_BODY_PHOTOGRAPHIC_ABB"));
+                       break;
+               default:
+                       ret = NULL;
+               }
+       }
+       PTS_TRACE_END;
+       return ret;
+}
+
+/*
+* get the range label of the key
+*/
+static char *__pts_setting_view_range_key_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       Item_data *core = (Item_data *)data;
+       pt_range_e p_range = (pt_range_e)core->sub_item;
+       char *ret = NULL;
+
+       //PTS_RETV_IF(p_range < PT_RANGE_ALL || p_range > PT_RANGE_CURRENT, NULL, "wrong paper range: %d", p_range);
+
+       switch (p_range) {
+       case PT_RANGE_ALL:
+               ret = strdup(_("IDS_DIC_BODY_ALL"));
+               break;
+       case PT_RANGE_CURRENT:
+               ret = strdup(_("IDS_BR_BODY_CURRENT_PAGE"));
+               break;
+       default:
+               ret = NULL;
+       }
+
+       PTS_TRACE_END;
+       return ret;
+}
+
+/*
+* get the duplex value of the key
+*/
+static char *__pts_setting_view_duplex_key_label_get(void *data, Evas_Object *obj, const char *part)
+{
+       PTS_TRACE_BEGIN;
+       Item_data *core = (Item_data *)data;
+       pt_duplex_e p_duplex = (pt_duplex_e)core->sub_item;
+       char *ret = NULL;
+
+       if (strcmp(part, "elm.text") == 0) {
+               switch (p_duplex) {
+               case PT_DUPLEX_OFF:
+                       ret = strdup(IDS_PRINT_SETTINGS_DUPLEX_OFF);
+                       break;
+               case PT_DUPLEX_NO_TUMBLE:
+               case PT_DUPLEX_TUMBLE:
+                       ret = strdup(IDS_PRINT_SETTINGS_DUPLEX_ON);
+                       break;
+               default:
+                       ret =  NULL;
+               }
+       }
+       PTS_TRACE_END;
+       return ret;
+}
+
+static void __pts_setting_view_enable_disable(pts_appdata_t *ad)
+{
+       int i;
+       for (i=0; i<PT_QUALITY_ANY; i++) {
+               if (ad->setting_info.quality[i]) {
+                       if (pt_is_enabled(PT_OPTION_ID_QUALITY, i)) {
+                               elm_object_item_disabled_set(ad->setting_info.quality[i], EINA_FALSE);
+                       } else {
+                               elm_object_item_disabled_set(ad->setting_info.quality[i], EINA_TRUE);
+                       }
+               }
+       }
+       for (i=0; i<PT_PAPER_ANY; i++) {
+               if (ad->setting_info.paper_type[i]) {
+                       if (pt_is_enabled(PT_OPTION_ID_PAPER, i)) {
+                               elm_object_item_disabled_set(ad->setting_info.paper_type[i], EINA_FALSE);
+                       } else {
+                               elm_object_item_disabled_set(ad->setting_info.paper_type[i], EINA_TRUE);
+                       }
+               }
+       }
+       for (i=0; i<PT_GRAYSCALE_ANY; i++) {
+               if (ad->setting_info.color[i]) {
+                       if (pt_is_enabled(PT_OPTION_ID_GRAYSCALE, i)) {
+                               elm_object_item_disabled_set(ad->setting_info.color[i], EINA_FALSE);
+                       } else {
+                               elm_object_item_disabled_set(ad->setting_info.color[i], EINA_TRUE);
+                       }
+               }
+       }
+       for (i=0; i<PT_DUPLEX_ANY-1; i++) {
+               if (ad->setting_info.duplex[i]) {
+                       if (pt_is_enabled(PT_OPTION_ID_DUPLEX, i)) {
+                               elm_object_item_disabled_set(ad->setting_info.duplex[i], EINA_FALSE);
+                       } else {
+                               elm_object_item_disabled_set(ad->setting_info.duplex[i], EINA_TRUE);
+                       }
+               }
+       }
+       for (i=0; i<pt_get_print_option_papersize_num(); i++) {
+               if (ad->setting_info.paper_size[i]) {
+                       if (pt_is_enabled(PT_OPTION_ID_PAPERSIZE, i)) {
+                               elm_object_item_disabled_set(ad->setting_info.paper_size[i], EINA_FALSE);
+                       } else {
+                               elm_object_item_disabled_set(ad->setting_info.paper_size[i], EINA_TRUE);
+                       }
+               }
+       }
+}
+
+/**
+* Select the option from list
+*/
+static void __pts_setting_view_key_value_sel(void *user_data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+
+       Item_data *core = (Item_data *) user_data;
+       struct appdata *ad = pts_get_appdata();
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       Elm_Object_Item *parent_item = NULL;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       if (NULL != core && NULL != core->item) {
+
+               switch (core->option) {
+               case PT_OPTION_ID_PAPERSIZE:
+                       ad->list_info.active_printer->size = core->sub_item;
+                       parent_item  = ad->setting_info.item_paper_size;
+                       pt_set_choice(PT_OPTION_ID_PAPERSIZE, core->sub_item);
+                       PTS_DEBUG("Paper size select: %d", ad->list_info.active_printer->size);
+                       break;
+               case PT_OPTION_ID_COPIES:
+                       ad->list_info.active_printer->copies = core->sub_item;
+                       parent_item  = ad->setting_info.item_paper_copies;
+                       PTS_DEBUG("Print copy select: %d", ad->list_info.active_printer->copies);
+                       break;
+               case PT_OPTION_ID_RANGE:
+                       ad->list_info.active_printer->range = core->sub_item;
+                       parent_item  = ad->setting_info.item_page_range;
+                       PTS_DEBUG("Print range select: %d", ad->list_info.active_printer->range);
+                       break;
+               case PT_OPTION_ID_QUALITY:
+                       pt_set_choice(PT_OPTION_ID_QUALITY, core->sub_item);
+                       parent_item  = ad->setting_info.item_paper_quality;
+                       PTS_DEBUG("Print quality select: %d", pt_get_selected(PT_OPTION_ID_QUALITY));
+                       break;
+               case PT_OPTION_ID_PAPER:
+                       pt_set_choice(PT_OPTION_ID_PAPER, core->sub_item);
+                       parent_item  = ad->setting_info.item_paper_type;
+                       PTS_DEBUG("Paper type select: %d", pt_get_selected(PT_OPTION_ID_PAPER));
+                       break;
+               case PT_OPTION_ID_GRAYSCALE:
+                       pt_set_choice(PT_OPTION_ID_GRAYSCALE, core->sub_item);
+                       parent_item  = ad->setting_info.item_grayscale;
+                       PTS_DEBUG("Print color select: %d", pt_get_selected(PT_OPTION_ID_GRAYSCALE));
+                       break;
+               case PT_OPTION_ID_DUPLEX:
+                       pt_set_choice(PT_OPTION_ID_DUPLEX, core->sub_item);
+                       parent_item = ad->setting_info.item_duplex;
+                       PTS_DEBUG("Duplex select: %d", pt_get_selected(PT_OPTION_ID_DUPLEX));
+                       break;
+               default:
+                       PTS_DEBUG("Unknown option: %d", core->option);
+                       parent_item = NULL;
+                       break;
+               }
+
+               elm_radio_value_set(core->radio_group, core->radio_index);
+               __pts_setting_view_enable_disable(ad);
+               if(parent_item) {
+                       elm_genlist_item_update(parent_item);
+               }
+               PTS_DEBUG("Update radio group: r_group=[0x%x  <-- %d]", core->radio_group, core->radio_index);
+
+       } else {
+               PTS_DEBUG("data or data->item are NULL");
+       }
+
+       PTS_TRACE_END;
+}
+
+static Item_data *__pts_setting_view_add_genlist_item(
+       Evas_Object *genlist,
+       Elm_Object_Item *parent,
+       pt_print_option_e option,
+       int sub_item,
+       int *radio_btn_index,
+       Evas_Object *radio_group,
+       pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(genlist == NULL, NULL, "genlist is NULL");
+
+       Elm_Genlist_Item_Class *itc = NULL;
+
+       if (PT_OPTION_ID_PAPERSIZE == option) {
+               itc_paper_size.item_style = "dialogue/1text.1icon/expandable2";
+               itc_paper_size.func.text_get = __pts_setting_view_papersize_key_label_get;
+               itc_paper_size.func.content_get = __pts_setting_view_gl_content_get;
+               itc_paper_size.func.state_get = NULL; //__pts_setting_view_gl_state_get;
+               itc_paper_size.func.del = __pts_setting_view_gl_state_item_delete;
+               itc = &itc_paper_size;
+       } else if (PT_OPTION_ID_GRAYSCALE == option) {
+               itc_grayscale.item_style = "dialogue/1text.1icon/expandable2";
+               itc_grayscale.func.text_get = __pts_setting_view_grayscale_key_label_get;
+               itc_grayscale.func.content_get = __pts_setting_view_gl_content_get;
+               itc_grayscale.func.state_get = NULL; //__pts_setting_view_gl_state_get;
+               itc_grayscale.func.del = __pts_setting_view_gl_state_item_delete;
+               itc = &itc_grayscale;
+       } else if (PT_OPTION_ID_QUALITY == option) {
+               itc_paper_quality.item_style = "dialogue/1text.1icon/expandable2";
+               itc_paper_quality.func.text_get = __pts_setting_view_quality_key_label_get;
+               itc_paper_quality.func.content_get = __pts_setting_view_gl_content_get;
+               itc_paper_quality.func.state_get = NULL; //__pts_setting_view_gl_state_get;
+               itc_paper_quality.func.del = __pts_setting_view_gl_state_item_delete;
+               itc = &itc_paper_quality;
+       } else if (PT_OPTION_ID_PAPER == option) {
+               itc_paper_type.item_style = "dialogue/1text.1icon/expandable2";
+               itc_paper_type.func.text_get = __pts_setting_view_paper_key_label_get;
+               itc_paper_type.func.content_get = __pts_setting_view_gl_content_get;
+               itc_paper_type.func.state_get = NULL; //__pts_setting_view_gl_state_get;
+               itc_paper_type.func.del = __pts_setting_view_gl_state_item_delete;
+               itc = &itc_paper_type;
+       } else if (PT_OPTION_ID_RANGE == option) {
+               itc_page_range.item_style = "dialogue/1text.1icon/expandable2";
+               itc_page_range.func.text_get = __pts_setting_view_range_key_label_get;
+               itc_page_range.func.content_get = __pts_setting_view_gl_content_get;
+               itc_page_range.func.state_get = NULL; //__pts_setting_view_gl_state_get;
+               itc_page_range.func.del = __pts_setting_view_gl_state_item_delete;
+               itc = &itc_page_range;
+       } else if (PT_OPTION_ID_DUPLEX == option) {
+               itc_duplex.item_style = "dialogue/1text.1icon/expandable2";
+               itc_duplex.func.text_get = __pts_setting_view_duplex_key_label_get;
+               itc_duplex.func.content_get = __pts_setting_view_gl_content_get;
+               itc_duplex.func.state_get = NULL;
+               itc_duplex.func.del = __pts_setting_view_gl_state_item_delete;
+               itc = &itc_duplex;
+       } else {
+               PTS_DEBUG("Unknown option: %d", option);
+               PTS_TRACE_END;
+               return 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);
+
+       Item_data *core = calloc(1, sizeof(Item_data));
+       core->option = option;
+       core->sub_item = sub_item;
+       core->radio_index = *radio_btn_index;
+       core->radio_group = radio_group;
+
+       core->item = elm_genlist_item_append(
+                                        genlist,
+                                        itc,
+                                        (void *)core,
+                                        parent,
+                                        ELM_GENLIST_ITEM_NONE,
+                                        __pts_setting_view_key_value_sel,
+                                        core);
+
+       if (!pt_is_enabled(option, sub_item)) {
+               elm_object_item_disabled_set(core->item, EINA_TRUE);
+       }
+
+       ++(*radio_btn_index);
+
+       PTS_TRACE_END;
+       return core;
+}
+
+
+static Evas_Object *__pts_create_radio_group(Evas_Object *genlist)
+{
+       Evas_Object *radio = elm_radio_add(genlist);
+       elm_radio_state_value_set(radio, 0);
+       elm_radio_value_set(radio, 0);
+
+       return radio;
+}
+
+/**
+*  Callback for expandable genlist expand
+*/
+static void __pts_setting_view_gl_exp(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(NULL == event_info, "item object is NULL");
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       Evas_Object *genlist = elm_object_item_widget_get(item);
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       int radio_index = 0;
+       int i = 0;
+
+       elm_genlist_item_selected_set(item, EINA_FALSE);
+
+       if (ad->setting_info.radio_group_paper_size == NULL) {
+               ad->setting_info.radio_group_paper_size = __pts_create_radio_group(genlist);
+       }
+       if (ad->setting_info.radio_group_paper_quality == NULL) {
+               ad->setting_info.radio_group_paper_quality = __pts_create_radio_group(genlist);
+       }
+       if (ad->setting_info.radio_group_paper_type == NULL) {
+               ad->setting_info.radio_group_paper_type = __pts_create_radio_group(genlist);
+       }
+       if (ad->setting_info.radio_group_page_range == NULL) {
+               ad->setting_info.radio_group_page_range = __pts_create_radio_group(genlist);
+       }
+       if (ad->setting_info.radio_group_grayscale == NULL) {
+               ad->setting_info.radio_group_grayscale = __pts_create_radio_group(genlist);
+       }
+       if (ad->setting_info.radio_group_duplex == NULL) {
+               ad->setting_info.radio_group_duplex = __pts_create_radio_group(genlist);
+       }
+
+       if (item == ad->setting_info.item_paper_size) {
+               radio_index = 0;
+               Item_data *i_d;
+               for (i = 0; i < pt_get_print_option_papersize_num(); i++) {
+                       i_d = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_PAPERSIZE, i, &radio_index, ad->setting_info.radio_group_paper_size, ad);
+                       if (i_d != NULL) {
+                               ad->setting_info.paper_size[i] = i_d->item;
+                       }
+               }
+       } else if (item == ad->setting_info.item_paper_quality) {
+               radio_index = 0;
+               ad->setting_info.quality[PT_QUALITY_DRAFT] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_QUALITY, PT_QUALITY_DRAFT, &radio_index, ad->setting_info.radio_group_paper_quality, ad)->item;
+               ad->setting_info.quality[PT_QUALITY_STANDARD] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_QUALITY, PT_QUALITY_STANDARD, &radio_index, ad->setting_info.radio_group_paper_quality, ad)->item;
+               ad->setting_info.quality[PT_QUALITY_HIGH] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_QUALITY, PT_QUALITY_HIGH, &radio_index, ad->setting_info.radio_group_paper_quality, ad)->item;
+       } else if (item == ad->setting_info.item_paper_type) {
+               radio_index = 0;
+               ad->setting_info.paper_type[PT_PAPER_NORMAL] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_PAPER, PT_PAPER_NORMAL, &radio_index, ad->setting_info.radio_group_paper_type, ad)->item;
+               ad->setting_info.paper_type[PT_PAPER_GLOSSY] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_PAPER, PT_PAPER_GLOSSY, &radio_index, ad->setting_info.radio_group_paper_type, ad)->item;
+               ad->setting_info.paper_type[PT_PAPER_PHOTO] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_PAPER, PT_PAPER_PHOTO, &radio_index, ad->setting_info.radio_group_paper_type, ad)->item;
+       } else if (item == ad->setting_info.item_page_range) {
+               radio_index = 0;
+               __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_RANGE, PT_RANGE_ALL, &radio_index, ad->setting_info.radio_group_page_range, ad);
+               __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_RANGE, PT_RANGE_CURRENT, &radio_index, ad->setting_info.radio_group_page_range, ad);
+       } else if (item == ad->setting_info.item_grayscale) {
+               radio_index = 0;
+               ad->setting_info.color[PT_GRAYSCALE_GRAYSCALE] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_GRAYSCALE, PT_GRAYSCALE_GRAYSCALE, &radio_index, ad->setting_info.radio_group_grayscale, ad)->item;
+               ad->setting_info.color[PT_GRAYSCALE_COLOUR] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_GRAYSCALE, PT_GRAYSCALE_COLOUR, &radio_index, ad->setting_info.radio_group_grayscale, ad)->item;
+       } else if (item == ad->setting_info.item_duplex) {
+               radio_index = 0;
+               ad->setting_info.duplex[PT_DUPLEX_OFF] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_DUPLEX, PT_DUPLEX_OFF, &radio_index, ad->setting_info.radio_group_duplex, ad)->item;
+               ad->setting_info.duplex[PT_DUPLEX_NO_TUMBLE] = __pts_setting_view_add_genlist_item(genlist, item, PT_OPTION_ID_DUPLEX, PT_DUPLEX_NO_TUMBLE, &radio_index, ad->setting_info.radio_group_duplex, ad)->item;
+       } else {
+               PTS_DEBUG("Unknown item");
+       }
+
+       PTS_TRACE_END;
+}
+
+/*
+ * Accessability info for items from list
+ */
+static void __pts_setting_view_gl_realized(void *data, Evas_Object *obj, void *event_info)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(NULL == event_info, "item object is NULL");
+       PTS_RET_IF(NULL == data, "ad is NULL");
+
+       Elm_Object_Item *item = (Elm_Object_Item *)event_info;
+       pts_appdata_t *ad = (pts_appdata_t *)data;
+       void *item_data = elm_object_item_data_get(item);
+       //PTS_RET_IF(NULL == item_data, "item data is NULL"); //FIXME: related to Jira issue #
+
+       pt_print_option_e option = (pt_print_option_e)item_data;
+       PTS_RET_IF(option >= PT_OPTION_ID_MAX, "UNKNOWN OPTION REALIZED - %d", option);
+
+       PTS_DEBUG("realized print option: [%d]\n", option);
+
+       if (PT_OPTION_ID_PAPERSIZE == option
+                       || PT_OPTION_ID_RANGE == option
+                       || PT_OPTION_ID_QUALITY == option
+                       || PT_OPTION_ID_PAPER == option
+                       || PT_OPTION_ID_GRAYSCALE == option
+                       || PT_OPTION_ID_DUPLEX == option) {
+
+               Evas_Object *ao = elm_object_item_access_object_get(item);
+               PTS_RET_IF(NULL == ao, "Access object is NULL");
+               elm_access_info_set(ao, ELM_ACCESS_TYPE, IDS_SCRREAD_EXPANDABLE_LIST_TYPE);
+               elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_EXPANDABLE_LIST_CONTEXT);
+               PTS_DEBUG("Item #%d access context info: [%s]", option, IDS_SCRREAD_EXPANDABLE_LIST_CONTEXT);
+       } else if (PT_OPTION_ID_COPIES == option) {
+               Evas_Object *ao = elm_object_item_access_object_get(item);
+               PTS_RET_IF(NULL == ao, "Access object is NULL");
+               elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_SETTINS_ITEM_CONTEXT);
+               PTS_DEBUG("Item #%d access context info: [%s]", option, IDS_SCRREAD_SETTINS_ITEM_CONTEXT);
+       } else if (PT_OPTION_ID_PRINTER == option) {
+               Evas_Object *ao = elm_object_item_access_object_get(item);
+               PTS_RET_IF(NULL == ao, "Access object is NULL");
+               elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, IDS_SCRREAD_PRINTER_ITEM_CONTEXT);
+               PTS_DEBUG("Item #printer access context info: [%s]", IDS_SCRREAD_PRINTER_ITEM_CONTEXT);
+       }
+
+       PTS_TRACE_END;
+}
+
+/*
+* create the content of setting view
+*/
+static Evas_Object *__pts_setting_view_create_content(Evas_Object *parent, pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(ad == NULL, NULL, "ad is NULL");
+       PTS_RETV_IF(parent == NULL, NULL, "parent is NULL");
+
+       Evas_Object *genlist = NULL;
+       Elm_Object_Item *separator_item;
+
+       //itc_separator.item_style =  "dialogue/separator/21/with_line";
+       itc_separator.item_style =  "dialogue/separator";
+       itc_separator.func.text_get = NULL;
+       itc_separator.func.content_get = NULL;
+       itc_separator.func.state_get = NULL;
+       itc_separator.func.del = NULL;
+
+       itc_printer.item_style = "dialogue/2text";
+       itc_printer.func.text_get = __pts_setting_view_printer_label_get;
+       itc_printer.func.content_get = NULL;
+       itc_printer.func.state_get = NULL;
+       itc_printer.func.del = NULL;
+
+       //itc_tree_options.item_style = "dialogue/2text/expandable";
+       itc_tree_options.item_style = "dialogue/2text.3/expandable";
+       itc_tree_options.func.text_get = __pts_setting_view_option_label_get;
+       itc_tree_options.func.content_get = NULL;
+       itc_tree_options.func.state_get = NULL;
+       itc_tree_options.func.del = NULL;
+
+       itc_normal_options.item_style = "dialogue/2text";
+       itc_normal_options.func.text_get = __pts_setting_view_option_label_get;
+       itc_normal_options.func.content_get = NULL;
+       itc_normal_options.func.state_get = NULL;
+       itc_normal_options.func.del = NULL;
+
+       genlist = elm_genlist_add(parent);
+
+       elm_object_style_set(genlist, "dialogue");
+       elm_genlist_mode_set(genlist, ELM_LIST_COMPRESS);
+
+       separator_item= elm_genlist_item_append(
+                                               genlist,
+                                               &itc_separator,
+                                               NULL,
+                                               NULL,
+                                               ELM_GENLIST_ITEM_NONE,
+                                               NULL, NULL);
+
+       elm_genlist_item_select_mode_set(separator_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       ad->setting_info.printer_item = elm_genlist_item_append(
+                                                       genlist,
+                                                       &itc_printer,
+                                                       (void *)PT_OPTION_ID_PRINTER,
+                                                       NULL,
+                                                       ELM_GENLIST_ITEM_NONE,
+                                                       __pts_setting_view_printer_sel, ad);
+
+       ad->setting_info.header_separator_item = elm_genlist_item_append(
+                                                                        genlist,
+                                                                        &itc_separator,
+                                                                        NULL,
+                                                                        NULL,
+                                                                        ELM_GENLIST_ITEM_NONE,
+                                                                        NULL, NULL);
+       elm_genlist_item_select_mode_set(ad->setting_info.header_separator_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       ad->setting_info.item_paper_size = elm_genlist_item_append(
+                                                          genlist,
+                                                          &itc_tree_options,
+                                                          (void *)PT_OPTION_ID_PAPERSIZE,
+                                                          NULL,
+                                                          ELM_GENLIST_ITEM_TREE,
+                                                          __pts_setting_view_gl_sel,
+                                                          ad);
+
+       ad->setting_info.item_paper_copies = elm_genlist_item_append(
+                                                                genlist,
+                                                                &itc_normal_options,
+                                                                (void *)PT_OPTION_ID_COPIES,
+                                                                NULL,
+                                                                ELM_GENLIST_ITEM_NONE,
+                                                                _create_copies_popup_timepicker,
+                                                                ad);
+
+       ad->setting_info.item_page_range = elm_genlist_item_append(
+                                                          genlist,
+                                                          &itc_tree_options,
+                                                          (void *)PT_OPTION_ID_RANGE,
+                                                          NULL,
+                                                          ELM_GENLIST_ITEM_TREE,
+                                                          __pts_setting_view_gl_sel,
+                                                          ad);
+
+       ad->setting_info.item_paper_quality = elm_genlist_item_append(
+                                                                 genlist,
+                                                                 &itc_tree_options,
+                                                                 (void *)PT_OPTION_ID_QUALITY,
+                                                                 NULL,
+                                                                 ELM_GENLIST_ITEM_TREE,
+                                                                 __pts_setting_view_gl_sel,
+                                                                 ad);
+
+       ad->setting_info.item_paper_type = elm_genlist_item_append(
+                                                          genlist,
+                                                          &itc_tree_options,
+                                                          (void *)PT_OPTION_ID_PAPER,
+                                                          NULL,
+                                                          ELM_GENLIST_ITEM_TREE,
+                                                          __pts_setting_view_gl_sel,
+                                                          ad);
+
+       ad->setting_info.item_grayscale = elm_genlist_item_append(
+                                                         genlist,
+                                                         &itc_tree_options,
+                                                         (void *)PT_OPTION_ID_GRAYSCALE,
+                                                         NULL,
+                                                         ELM_GENLIST_ITEM_TREE,
+                                                         __pts_setting_view_gl_sel,
+                                                         ad);
+
+       ad->setting_info.item_duplex = elm_genlist_item_append(
+                                                         genlist,
+                                                         &itc_tree_options,
+                                                         (void *)PT_OPTION_ID_DUPLEX,
+                                                         NULL,
+                                                         ELM_GENLIST_ITEM_TREE,
+                                                         __pts_setting_view_gl_sel,
+                                                         ad);
+
+       // Footer space
+       ad->setting_info.footer_separator_item = elm_genlist_item_append(
+                                                                        genlist,
+                                                                        &itc_separator,
+                                                                        NULL,
+                                                                        NULL,
+                                                                        ELM_GENLIST_ITEM_NONE,
+                                                                        NULL, NULL);
+       elm_genlist_item_select_mode_set(ad->setting_info.footer_separator_item, ELM_OBJECT_SELECT_MODE_DISPLAY_ONLY);
+
+       evas_object_smart_callback_add(genlist, "expanded", __pts_setting_view_gl_exp, ad);
+       evas_object_smart_callback_add(genlist, "contracted", __pts_setting_view_gl_con, ad);
+
+       /* Accessability information callback */
+       evas_object_smart_callback_add(genlist, "realized", __pts_setting_view_gl_realized, ad);
+
+       /* Add touch coordinates handler */
+       //Ecore_Event_Handler *event;
+       //event = ecore_event_handler_add(ECORE_EVENT_MOUSE_BUTTON_DOWN, _mousedown_cb, NULL);
+       //evas_object_smart_callback_add(genlist, "clicked", _back_cb, event);
+
+       PTS_TRACE_END;
+       return genlist;
+}
+
+/**
+ *     This function let the app create setting view
+ *     @return  void
+ *     @param[in] sd the pointer to the printer setting structure
+ */
+void pts_create_setting_view(pts_appdata_t *ad)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(ad == NULL, "ad is NULL");
+
+       Evas_Object *back_btn = NULL;
+       //Evas_Object *layout = NULL;
+       Evas_Object *genlist = NULL;
+       Elm_Object_Item *navi_item = NULL;
+
+       //layout = pts_utils_create_layout(ugd->navi);
+       //evas_object_show(layout);
+
+       genlist = __pts_setting_view_create_content(ad->main_info.navi, ad);
+       //elm_object_content_set(layout, genlist);
+       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);
+
+       back_btn = elm_button_add(ad->main_info.navi);
+       elm_object_style_set(back_btn, "naviframe/end_btn/default");
+
+       navi_item = elm_naviframe_item_push(ad->main_info.navi, _("IDS_SMPOS_HEADER_PRINTER_SETTINGS"), back_btn, NULL, genlist, NULL);
+       elm_naviframe_item_pop_cb_set(navi_item, __pts_setting_view_btn_back_cb, ad);
+
+       PTS_TRACE_END;
+}
diff --git a/mobileprint/app/pts_util.c b/mobileprint/app/pts_util.c
new file mode 100644 (file)
index 0000000..fcf1d59
--- /dev/null
@@ -0,0 +1,102 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <linux/unistd.h>
+#include <sys/utsname.h>
+#include <dirent.h>
+#include "pts_common.h"
+#include "pts_debug.h"
+
+void pts_util_show_error_popup(Evas_Object *parent, const char *msg)
+{
+       PTS_RET_IF(parent == NULL, "parent is NULL");
+       PTS_RET_IF(msg == NULL, "msg is NULL");
+
+       Evas_Object *error_popup = elm_popup_add(parent);
+       PTS_RET_IF(error_popup == NULL, "error_popup is NULL");
+       evas_object_size_hint_weight_set(error_popup, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_object_text_set(error_popup, msg);
+       evas_object_show(error_popup);
+       evas_object_show(parent);
+       return;
+}
+
+Eina_Bool pts_util_supported_arch(void)
+{
+       struct utsname buf;
+       int ret = uname(&buf);
+       if (ret == -1) {
+               PTS_DEBUG("Failed to get uname");
+       } else if (strstr(buf.machine,"arm") == NULL) {
+               PTS_DEBUG("No supported : %s", buf.machine);
+               return EINA_FALSE;
+       } else {
+               PTS_DEBUG("Supported : %s", buf.machine);
+       }
+       return EINA_TRUE;
+}
+
+void pts_util_remove_tmp_files(const char *path)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(path == NULL, "path is NULL");
+       char *cwd;
+       struct dirent *entry;
+       int ret = 1;
+       int iret = -1;
+       DIR *dir;
+
+       cwd = get_current_dir_name();
+       PTS_RET_IF(cwd == NULL, "cwd is NULL");
+
+       errno = 0;
+       ret = chdir(path);
+       if (ret == 0) {
+               dir = opendir(path);
+               if (dir == NULL) {
+                       PTS_IF_FREE_MEM(cwd);
+                       PTS_TRACE_END;
+                       return;
+               }
+               while ((entry = readdir(dir)) != NULL) {
+                       PTS_DEBUG("Remove %s", entry->d_name);
+                       iret = remove(entry->d_name);
+                       if (iret == -1) {
+                               PTS_DEBUG("unable to remove %s",entry->d_name);
+                       }
+               }
+               closedir(dir);
+
+               iret = chdir(cwd);
+               if (iret == -1) {
+                       PTS_DEBUG("unable to chdir");
+                       PTS_IF_FREE_MEM(cwd);
+                       PTS_TRACE_END;
+                       return;
+               }
+               rmdir(path);
+       } else {
+               if (errno == ENOENT) {
+                       PTS_DEBUG("Not existed %s, just skip", path);
+               }
+       }
+       PTS_IF_FREE_MEM(cwd);
+       PTS_TRACE_END;
+       return;
+}
diff --git a/mobileprint/edc/genlist_custom.edc b/mobileprint/edc/genlist_custom.edc
new file mode 100644 (file)
index 0000000..82d3025
--- /dev/null
@@ -0,0 +1,77 @@
+#define GENLIST_HEIGHT_73_INC 73
+//#define LAYOUT_GROUP_LIST_BG_COLOR_INC 248 246 239 255 // white theme
+#define LAYOUT_GROUP_LIST_BG_COLOR_INC 0 0 0 255 // black theme
+#define GENLIST_PART_DISCLIP_COLOR_INC 255 255 255 110 // alpha was 64
+
+#define GENLIST_PART_DIALOGUE_BASE( param_item_height ) \
+         part { name: "base"; \
+            type: RECT; \
+            clip_to: "disclip"; \
+            repeat_events: 1; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: 0 param_item_height; \
+               color: LAYOUT_GROUP_LIST_BG_COLOR_INC; \
+            } \
+         }
+
+// When rotating, sometimes item size is expaned.
+#define GENLIST_PART_DISCLIP \
+        part { name: "disclip"; \
+            type: RECT; \
+            description { state: "default" 0.0; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               color: GENLIST_PART_DISCLIP_COLOR_INC; \
+            } \
+         }
+
+collections {
+   group { name: "elm/genlist/item/custom/2icon/default";
+      alias: "elm/genlist/item_odd/custom/2icon/default";
+      data.item: "stacking" "above";
+      data.item: "selectraise" "on";
+      data.item: "contents" "elm.icon.1 elm.icon.2";
+
+      parts {
+         GENLIST_PART_DIALOGUE_BASE( GENLIST_HEIGHT_73_INC )
+         part { name: "elm.icon.1";
+            clip_to: "disclip";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               rel1.relative: 0.021 0.0;
+               rel2.relative: 0.492 1.0;
+            }
+         }
+         part { name: "elm.icon.2";
+            clip_to: "disclip";
+            type: SWALLOW;
+            description { state: "default" 0.0;
+               rel1.relative: 0.51 0.0;
+               rel2.relative: 0.979 1.0;
+            }
+         }
+         GENLIST_PART_DISCLIP
+      }
+      programs {
+         // signal: elm,state,%s,active
+         //   a "check" item named %s went active
+         // signal: elm,state,%s,passive
+         //   a "check" item named %s went passive
+         // default is passive
+         program { name: "go_disabled";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action: STATE_SET "disabled" 0.0;
+            target: "disclip";
+         }
+         program { name: "go_enabled";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action: STATE_SET "default" 0.0;
+            target: "disclip";
+         }
+      }
+   }
+}
diff --git a/mobileprint/edc/mobileprint.edc b/mobileprint/edc/mobileprint.edc
new file mode 100644 (file)
index 0000000..6afaaf7
--- /dev/null
@@ -0,0 +1,478 @@
+collections
+{
+       group {
+               name: "navi";
+               parts {
+                       part {
+                               name, "background";
+                               type, RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       color: 0 0 0 255;
+                                       #color: 255 255 255 255;
+                                       rel1 { relative: 0.0 0.0; offset: 0 0;}
+                                       rel2 { relative: 1.0 1.0; offset: 0 0;}
+                               }
+                       }
+
+                       part {
+                               name, "navigation_bar";
+                               type: SWALLOW;
+                               description {
+                                       state: "default" 0.0;
+                               }
+                       }
+               }
+       }
+
+       group
+       {
+               name: "printer";
+               parts
+               {
+                       part {
+                               name, "printer_name_bg";
+                               type: RECT;
+                               description {
+                                       #color: 242 238 233 255;
+                                       color: 34 44 71 255;
+                                       rel1.to: "printer_name";
+                                       rel2.to: "printer_name";
+                               }
+                       }
+                       part {
+                               name, "printer_name";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       min: 0 60;
+                                       align: 0.0 0.0;
+                                       fixed: 0 1;
+                                       state: "default" 0.0;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 0.0; }
+                               }
+                       }
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       ##color: 242 238 233 255;
+                                       #color: 255 255 255 255;
+                                       rel1 { relative: 0.0 1.0; to:"printer_name"; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+                       part {
+                               name: "image";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       rel1 { relative: 0.0 0.0;to:"bg";}
+                                       rel2 { relative: 1.0 1.0;to:"bg";}
+                               }
+                       }
+                       part{
+                               name:"bar";
+                               type: SWALLOW;
+                               scale:1;
+                                       description {
+                                               state: "default" 0.0;
+                                               align: 0.5 1.0;
+                                               min: 0 104;
+                                               fixed: 0 1;
+                                               rel1 { relative: 0.0 1.0;}
+                                               rel2 { relative: 1.0 1.0;}
+                                       }
+                               }
+                       }
+       }
+       group
+       {
+               name: "image_view";
+               parts
+               {
+                       part {
+                               name: "bg";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                                       ##color: 242 238 233 255;
+                                       #color: 255 255 255 255;
+                                       color: 0 0 0 255;
+                                       rel1 { relative: 0.0 0.0; }
+                                       rel2 { relative: 1.0 1.0; }
+                               }
+                       }
+                       part {
+                               name: "content";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       rel1 { relative: 0.0 0.0;  to: "bg";}
+                                       rel2 { relative: 1.0 0.95; to: "bg";}
+                               }
+                               description {
+                                       state: "multi" 0.1;
+                                       align: 0.5 0.5;
+                                       rel1 { relative: 0.0 0.0;  to: "bg";}
+                                       rel2 { relative: 1.0 1.0;  to: "bg";}
+                               }
+                       }
+                       part {
+                               name: "process_animation";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       rel1 { relative: 0.0 0.0; to: "bg";}
+                                       rel2 { relative: 1.0 1.0; to: "bg";}
+                               }
+                       }
+                       part {
+                           name: "pagenumber";
+                           type: TEXT;
+                           scale: 1;
+                           description {
+                                       state: "default" 0.0;
+                                       max: -1 0;
+                                       text {
+                                               size: 30;
+                                               align: 0.5 0.5;
+                                               text_class: "tizen";
+                                       }
+                                       color: 108 108 108 255;
+                                       align: 0.5 0.5;
+                                       rel1 { relative: 0.0 0.95; to: "bg";}
+                                       rel2 { relative: 1.0 1.0;  to: "bg";}
+                               }
+                   description {
+                                       state: "multi" 0.1;
+                                       visible: 0;
+                                       max: -1 0;
+                                       text {
+                                               size: 30;
+                                               align: 0.5 0.5;
+                                       }
+                                       color: 108 108 108 255;
+                                       align: 0.5 0.5;
+                                       rel1 { relative: 0.0 0.0;  to: "bg";}
+                                       rel2 { relative: 1.0 1.0;  to: "bg";}
+                               }
+                       }
+               }
+       }
+
+       group
+       {
+               name: "popup_search";
+               parts
+               {
+                       part
+                       {
+                               name:"elm.swallow.content";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       #min: 0 70;
+                                       align: 0.5 0.0;
+                                       fixed: 1 0;
+                                       rel1 { relative: 0.0 0.0;}
+                                       rel2 { relative: 1.0 0.6;}
+                               }
+                       }
+                       part
+                       {
+                               name: "elm.text";
+                               type: TEXT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       #min: 0 30;
+                                       text {
+                                               size: 30;
+                                               align: 0.5 0.5;
+                                               min: 0 0;
+                                               text_class: "tizen";
+                                       }
+                                       color: 108 108 108 255;
+                                       align: 0.5 0.5;
+                                       rel1 {relative: 0.0 0.7;}
+                                       rel2 {relative: 1.0 1.0;}
+                               }
+                       }
+               }
+       }
+
+       group
+       {
+          name: "popup_print";
+          parts{
+                  part{
+                          name: "elm.title";
+                          type: TEXT;
+                          scale : 1;
+                          description {
+                                  state: "default" 0.0;
+                                  max: 400 30;
+                                  text {
+                                          size: 20;
+                                          min: 0 0;
+                                          align: 0.0 0.0;
+                                  }
+                                  color: 108 108 108 255;
+                                  align: 0.0 0.0;
+                                  rel1 {
+                                         relative: 0.0 0.0;
+                                         to: "elm.swallow.content";
+                                  }
+                                  rel2 {
+                                         relative: 1.0 0.0;
+                                         to: "elm.swallow.content";
+                                  }
+                          }
+                 }
+                       
+                 part{ name:"elm.swallow.content";
+                        type: SWALLOW;
+                        scale : 1;
+                        description { state: "default" 0.0;
+                               min: 0 70;
+                               align: 0.5 0.5;
+                               fixed: 1 0;
+                               rel1 {
+                                  relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                  relative: 1.0 1.0;
+                               }
+                        }
+                 }
+          }
+       }
+
+       group
+       {
+               name: "popup_progress";
+               parts{
+                       part{
+                               name: "pad_t";
+                               type: RECT;
+                               scale : 1;
+                               mouse_events: 0;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.0;
+                                       min: 0 0;
+                                       fixed: 0 1;
+                                       rel1 {relative: 1.0 0.0; to_x: "pad_l";}
+                                       rel2 {relative: 0.0 0.0; to_x: "pad_r";}
+                               }
+                       }
+                       part {
+                               name: "pad_l";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min : 0 0;
+                                       fixed: 1 0;
+                                       rel1 {relative: 0.0 0.0;}
+                                       rel2 {relative: 0.0 1.0;}
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "pad_r";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min : 0 0;
+                                       fixed: 1 0;
+                                       rel1 {relative: 1.0 0.0;}
+                                       rel2 {relative: 1.0 1.0;}
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part{
+                               name:"elm.swallow.content";
+                               type: SWALLOW;
+                               scale : 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 604 0;
+                                       align: 0.5 0.5;
+                                       fixed: 1 0;
+                                       rel1 {relative: 0.5 1.0; to: "pad_t";}
+                                       rel2 {relative: 0.5 0.0; to: "pad_b";}
+                               }
+                       }
+                       part{ name:"elm.swallow.content.1";
+                                type: SWALLOW;
+                                scale : 1;
+                                description { state: "default" 0.0;
+                                       min: 604 0;
+                                       align: 0.5 0.5;
+                                       fixed: 1 0;
+                                       rel1 {relative: 0.0 0.0; to: "elm.swallow.content";}
+                                       rel2 {relative: 1.0 0.3; to: "elm.swallow.content";}
+                                }
+                       }
+                       part{
+                               name:"elm.swallow.content.2";
+                               type: SWALLOW;
+                               scale : 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 604 0;
+                                       align: 0.5 0.5;
+                                       fixed: 1 0;
+                                       rel1 {relative: 0.0 1.0; to: "elm.swallow.content.1";}
+                                       rel2 {relative: 1.0 2.0; to: "elm.swallow.content.1";}
+                               }
+                       }
+                       part{
+                               name:"elm.swallow.content.3";
+                               type: SWALLOW;
+                               scale : 1;
+                               description { state: "default" 0.0;
+                                       min: 604 0;
+                                       align: 0.5 0.5;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "elm.swallow.content.2";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 2.0;
+                                               to: "elm.swallow.content.2";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "pad_b";
+                               type: RECT;
+                               scale : 1;
+                               mouse_events: 0;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 1.0;
+                                       min: 0 54;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to_x: "pad_l";
+                                               to_y: "pad_bm";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "pad_r";
+                                               to_y: "pad_bm";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "elm.swallow.end";
+                               type: SWALLOW;
+                               scale : 1;
+                               mouse_events: 1;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       min: 604 54;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "pad_b";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "pad_b";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "pad_bm";
+                               type: RECT;
+                               scale : 1;
+                               mouse_events: 0;
+                               repeat_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 1.0;
+                                       min: 604 54;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                               to: "pad_l";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "pad_r";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "elm.text.subtext1";
+                               type: TEXT;
+                               scale : 1;
+                               description {
+                                       state: "default" 0.0;
+                                       text {
+                                               font: "Tizen:style=Medium";
+                                               size: 36;
+                                               min: 0 0;
+                                               align: 0.0 0.5;
+                                               text_class: "tizen";
+                                       }
+                                       color: 128 128 128 255;
+                                       align: 0.0 0.5;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "pad_bm";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "pad_bm";
+                                       }
+                               }
+                       }
+                       part { name: "elm.text.subtext2";
+                               type: TEXT;
+                               scale : 1;
+                               description {
+                                       state: "default" 0.0;
+                                       text {
+                                               font: "Tizen:style=Medium";
+                                               size: 36;
+                                               min: 0 0;
+                                               align: 1.0 0.5;
+                                               text_class: "tizen";
+                                       }
+                                       color: 128 128 128 255;
+                                       align: 1.0 0.5;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "pad_bm";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "pad_bm";
+                                       }
+                               }
+                       }
+               }
+       }
+}
diff --git a/mobileprint/images/A01_print_popup_icon_Rotate.png b/mobileprint/images/A01_print_popup_icon_Rotate.png
new file mode 100644 (file)
index 0000000..2c350ac
Binary files /dev/null and b/mobileprint/images/A01_print_popup_icon_Rotate.png differ
diff --git a/mobileprint/images/A01_print_popup_icon_Rotate02.png b/mobileprint/images/A01_print_popup_icon_Rotate02.png
new file mode 100644 (file)
index 0000000..6d6d3b8
Binary files /dev/null and b/mobileprint/images/A01_print_popup_icon_Rotate02.png differ
diff --git a/mobileprint/images/A01_print_popup_icon_print.png b/mobileprint/images/A01_print_popup_icon_print.png
new file mode 100644 (file)
index 0000000..f07f36e
Binary files /dev/null and b/mobileprint/images/A01_print_popup_icon_print.png differ
diff --git a/mobileprint/images/A01_print_popup_icon_scaling.png b/mobileprint/images/A01_print_popup_icon_scaling.png
new file mode 100644 (file)
index 0000000..8ce7e1e
Binary files /dev/null and b/mobileprint/images/A01_print_popup_icon_scaling.png differ
diff --git a/mobileprint/images/A01_print_popup_icon_setting.png b/mobileprint/images/A01_print_popup_icon_setting.png
new file mode 100644 (file)
index 0000000..463bc22
Binary files /dev/null and b/mobileprint/images/A01_print_popup_icon_setting.png differ
diff --git a/mobileprint/images/A01_print_popup_icon_size.png b/mobileprint/images/A01_print_popup_icon_size.png
new file mode 100644 (file)
index 0000000..30c4fd1
Binary files /dev/null and b/mobileprint/images/A01_print_popup_icon_size.png differ
diff --git a/mobileprint/include/image_editor_conn.h b/mobileprint/include/image_editor_conn.h
new file mode 100644 (file)
index 0000000..88ae664
--- /dev/null
@@ -0,0 +1,26 @@
+/*
+*  Mobileprint
+*
+* 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 _IMAGE_EDITOR_H_INCLUDED_
+#define _IMAGE_EDITOR_H_INCLUDED_
+
+int load_image_editor_ug(pts_appdata_t *ad);
+
+#endif /* _IMAGE_EDITOR_H_INCLUDED_ */
+
diff --git a/mobileprint/include/mobileprint.h b/mobileprint/include/mobileprint.h
new file mode 100755 (executable)
index 0000000..3ec418f
--- /dev/null
@@ -0,0 +1,27 @@
+/*
+*  Mobileprint
+*
+* 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 __APP_COMMON_H__
+#define __APP_COMMON_H__
+
+#include <Elementary.h>
+#include "pts_common.h"
+
+
+#endif /* __APP_COMMON_H__ */
diff --git a/mobileprint/include/preview_content.h b/mobileprint/include/preview_content.h
new file mode 100644 (file)
index 0000000..f81f6c1
--- /dev/null
@@ -0,0 +1,33 @@
+/*
+*  Mobileprint
+*
+* 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 _PREVIEW_CONTENT_H_INCLUDED_
+#define _PREVIEW_CONTENT_H_INCLUDED_
+
+#include <app.h>
+
+#include "pts_common.h"
+
+int generate_preview_images(pts_appdata_t *ad,
+                                                       app_device_orientation_e dev_orientation);
+
+int printer_get_setting_n_up(const pt_printer_mgr_t *active_printer);
+
+#endif /* _PREVIEW_CONTENT_H_INCLUDED_ */
+
diff --git a/mobileprint/include/pts_common.h b/mobileprint/include/pts_common.h
new file mode 100755 (executable)
index 0000000..cfd1caf
--- /dev/null
@@ -0,0 +1,431 @@
+/*
+*  Mobileprint
+*
+* 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 PTS_COMMON_H_
+#define PTS_COMMON_H_
+
+#include <appcore-common.h>
+#include <Ecore.h>
+#include <Ecore_X.h>
+#include <stdio.h>
+#include <string.h>
+#include <Elementary.h>
+#include <notification.h>
+#include <pt_api.h>
+#include "pts_debug.h"
+
+#include <smsc_smart.h>
+
+#define PTS_2  "Can not register the printer"
+#define PTS_17 "Error option"
+#define PTS_18 "Tap to add printer"
+#define PTS_19 "Unable to cancel. The current page is already being printed."
+
+#define IDS_PRT_1      "Failed to connect Wi-Fi Direct Printer"
+#define IDS_PRT_2      "USB Printer Connected"
+#define IDS_PRT_5      "Unable to cancel. The current page is already being printed."
+#define IDS_PRT_6      "The printer is not connected"
+#define IDS_PRT_7      "Disconnect USB cable, then reconnect it"
+#define IDS_PRT_8      "You are not connected to a Wi-Fi network"
+#define IDS_PRT_9      "The printer is not ready"
+#define IDS_PRT_10     "Print info error"
+#define IDS_PRT_11     "Printer is use"
+#define IDS_PRT_12     "Printing failed"
+#define IDS_PRT_13     "Unsupported file"
+#define IDS_PRT_14     "File related error"
+#define IDS_PRT_15     "The output tray is almost full"
+#define IDS_PRT_16     "The output tray is full"
+#define IDS_PRT_17     "Printer supply low"
+#define IDS_PRT_18     "Printer supply empty"
+#define IDS_PRT_19     "Device failure"
+#define IDS_PRT_20     "No ink"
+#define IDS_PRT_21     "No ink cartridge"
+#define IDS_PRT_22     "The printer catridge is running low"
+#define IDS_PRT_23     "Ink cover open"
+#define IDS_PRT_24     "Ink related error"
+#define IDS_PRT_25     "The paper tray is empty"
+#define IDS_PRT_26     "The paper tray is running low"
+#define IDS_PRT_27     "Paper jam"
+#define IDS_PRT_28     "The paper size or type is incorrect"
+#define IDS_PRT_29     "Paper loading error occurred"
+#define IDS_PRT_30     "Paper related error occurred"
+#define IDS_PRT_31     "Printer cover open"
+#define IDS_PRT_32     "Printer hardware error occurred"
+#define IDS_PRT_33     "Paper level error"
+#define IDS_PRT_34     "No print head"
+#define IDS_PRT_35     "Printer related error occurred"
+#define IDS_PRT_41     "Failed to launch mobileprint"
+
+#define IDS_BR_OPT_5X7 "5\"x7\"(13x18cm)"
+#define IDS_BR_OPT_4X6 "4\"x6\"(10x15cm)"
+#define IDS_BR_OPT_3_5X5       "3.5\"x5\"(9x13cm)"
+#define IDS_BR_OPT_WALLET      "Wallet(6.4x8.4cm)"
+
+
+#define IDS_PRT_GET_ATTRS_FOR_PRINTERS "Getting printer attributes..."
+#define IDS_ASEML_POP_GET_ATTRS_FAILED "Failed to get printer attributes"
+
+#define IDS_SCRREAD_CANCEL_SEARCHING_PRINTERS "Double tap to cancel searching for printers"
+#define IDS_SCRREAD_CONFIRM_SELECTED_PRINTER "Press to confirm selected printer"
+#define IDS_SCRREAD_REFRESH_SEARCHING_PRINTERS "Press to refresh searching for printers"
+#define IDS_SCRREAD_CANCEL_CONNECT_WIFI "Cancel connect to Wi-Fi network"
+#define IDS_SCRREAD_SMPOS_SK3_CANCEL "Press to cancel printing"
+#define IDS_SCRREAD_MORE_OPTIONS "More options"
+#define IDS_SCRREAD_CANCEL_PRINTING "Double tap to cancel printing"
+#define IDS_SCRREAD_MENU_INFO "More options"
+#define IDS_SCRREAD_MENU_CONTEXT "Double click to access options menu"
+#define IDS_SCRREAD_PRINTERS_LIST_IS_BELOW "Printers list is below"
+#define IDS_SCRREAD_PRINT_CONTEXT "Double tap to send document to the printer"
+#define IDS_SCRREAD_PREVIEW_IMAGE_TYPE "Preview of the document to be printed"
+#define IDS_SCRREAD_PREVIEW_IMAGE_CONTEXT "Print button is below"
+#define IDS_SCRREAD_EXPANDABLE_LIST_TYPE "Expandable list"
+#define IDS_SCRREAD_EXPANDABLE_LIST_CONTEXT "Double tap to open list"
+#define IDS_SCRREAD_SETTINS_ITEM_CONTEXT "Double tap to edit"
+#define IDS_SCRREAD_PRINTER_ITEM_CONTEXT "Double tap to change selected printer"
+
+#define SERVICE_LAUNCH_TYPE "LAUNCH_TYPE"
+#define SERVICE_JOB_ID "JOB_ID"
+#define SERVICE_FILES "FILES"
+#define SERVICE_PAGE_COUNT "PAGE_COUNT"
+#define LAUNCH_FROM_DUMMY_NOTI "launch_from_dummy_noti"
+#define LAUNCH_FROM_PROGRESS_NOTI "launch_from_progress_noti"
+#define SERVICE_PRINT_FILES_COUNT "service_print_files_count"
+#define SERVICE_PRINT_FILES_CURRENT_INDEX "service_print_files_current_index"
+#define SERVICE_PRINT_FILES_TYPE "service_print_files_type"
+#define SERVICE_PRINT_FILES_FOLDER_NAME "service_print_files_folder_name"
+#define SERVICE_PRINT_FILES_FILES_NAME "service_print_files_files_name"
+#define IDS_PRINT_SETTINGS_DUPLEX "Duplex"
+#define IDS_PRINT_SETTINGS_DUPLEX_OFF "One side"
+#define IDS_PRINT_SETTINGS_DUPLEX_ON "Double side"
+
+#define ICON_PRINTER "/usr/apps/org.tizen.mobileprint/res/images/pt_default_printer.png"
+
+#define UG_MAX_FILED_LEN       64
+#define COPIES_MAX     99
+
+#undef MIN
+#define MIN(a,b)  ((((a)-(b))&0x80000000) >> 31)? (a) : (b)
+#define PRINTER_LIST_POPUP_W           400
+#define PRINTER_LIST_POPUP_H           114
+#define PRINTER_LIST_POPUP_LN_W                400
+#define PRINTER_LIST_POPUP_LN_H                114
+
+#ifndef API
+#define API __attribute__ ((visibility("default")))
+#endif
+#define _EDJ(obj) (Evas_Object *)elm_layout_edje_get(obj)
+
+//#ifndef _
+//#  define _(str) gettext(str)
+//#endif
+
+#ifndef N_
+#  define gettext_noop(str) (str)
+#  define N_(str) gettext_noop(str)
+#endif
+
+#ifndef S_
+#  define S_(str) dgettext("sys_string", str)
+#endif
+
+#ifndef P_
+#  define P_(str) dgettext(PACKAGE, str)
+#endif
+
+#ifndef U_
+#  define U_(str) dgettext(UGNAME, str)
+#endif
+
+typedef enum {
+       PTS_SIZE_FIT_TO_PAPER,
+       PTS_SIZE_5X7,
+       PTS_SIZE_4X6,
+       PTS_SIZE_3_5X5,
+       PTS_SIZE_WALLET,
+       PTS_SIZE_CUSTOM,
+       PTS_SIZE_MAX,
+} pts_image_size_e;
+
+typedef enum {
+       PTS_SEARCH_INITIAL,             // Before launching preview, this printer search is triggered.
+       PTS_SEARCH_IN_PREVIEW,  // When USB Printer detected, this printer search is triggered
+       PTS_SEARCH_IN_SETTING,  // When ether USB Printer detected or printer search button is presed, this printer search is triggered
+} pts_printer_search_state_e;
+
+typedef struct {
+       char **selected_files;                                          /** selected print files*/
+       int from;                                                                       /** from print position, the first file equals 0 */
+       int to;                                                                         /** to print position*/
+       int total_pages;
+} pts_range_t;
+
+typedef struct {
+       char    *directory;
+       char    **request_files;
+       pts_range_t range;
+       int     num_of_files;
+       int     current_index;
+       char    *type;
+
+       char *input_file;
+} pts_printing_data_t;
+
+typedef struct {
+       int                             job_id;
+       int                             noti_id;
+       notification_h  noti_handle;
+       int                             progress;
+       int                             page_printed;
+       pts_printing_data_t     pt_files;
+       char                    *input_file;
+       int                             n_up;
+       int                             copies;
+} pts_job_spooling_t;
+
+typedef void (*pts_printer_selection_done_cb)(void *userdata);
+
+typedef struct {
+       pt_print_option_e option; /* pts_print_option_type */
+       int sub_item;                           /* Individual item. It stores any type of options:
+                                                                       pt_paper_size_t, pt_range_t,
+                                                                       pt_grayscale_t, pt_quality_t,
+                                                                       pt_paper_t*/
+       int radio_index;
+
+       Elm_Object_Item *item;
+       Evas_Object *radio_btn;
+       Evas_Object *radio_group;
+} Item_data;
+
+typedef struct
+{
+       Evas_Object             *root_win;
+       Evas_Object             *main_layout;
+       Evas_Object             *navi;
+       Evas_Object             *printer_layout;
+       Evas_Object             *printer_label;
+       Evas_Object             *more_btn;
+       Evas_Object             *print_btn;
+
+       /*
+        * image layout
+        */
+       Evas_Object             *img_layout;
+
+       /*
+        * sweep image
+        */
+       Evas_Object             *smsc;
+       int                     landscape_toggle;
+
+       /*
+        * main navi item
+        */
+       Elm_Object_Item *navi_it;
+} pts_main_info_t;
+
+typedef struct
+{
+       Evas_Object             *ctxpopup;
+
+       /* Setting option: Header-item */
+       Elm_Object_Item *printer_item;
+       Elm_Object_Item *header_separator_item;
+       Elm_Object_Item *item_paper_size;
+       Elm_Object_Item *item_paper_copies;
+       Elm_Object_Item *item_paper_quality;
+       Elm_Object_Item *item_paper_type;
+       Elm_Object_Item *item_page_range;
+       Elm_Object_Item *item_grayscale;
+       Elm_Object_Item *item_duplex;
+       Elm_Object_Item *footer_separator_item;
+
+       /* Settings: subitems */
+       Elm_Object_Item **paper_size;
+       Elm_Object_Item *quality[PT_QUALITY_ANY];
+       Elm_Object_Item *paper_type[PT_PAPER_ANY];
+       Elm_Object_Item *color[PT_GRAYSCALE_ANY];
+       Elm_Object_Item *duplex[PT_DUPLEX_ANY];
+
+       /* Setting option: Radio Group Leader */
+       Evas_Object *radio_group_paper_size;
+       Evas_Object *radio_group_paper_quality;
+       Evas_Object *radio_group_paper_type;
+       Evas_Object *radio_group_page_range;
+       Evas_Object *radio_group_grayscale;
+       Evas_Object *radio_group_duplex;
+} pts_setting_info_t;
+
+typedef struct
+{
+       Evas_Object             *printer_list_popup;
+       Evas_Object             *printer_list_popup_box;
+       Evas_Coord              printer_list_popup_portrait_height;
+       Evas_Coord              printer_list_popup_landscape_height;
+       Evas_Object             *no_found_popup;
+       pt_printer_mgr_t        *select_printer;
+       pt_printer_mgr_t        *active_printer;
+
+       /*from pts_ug_list_data*/
+
+       Eina_List                       *printer_list;
+
+} pts_list_info_t;
+
+typedef struct
+{
+       Evas_Object             *popup;
+       Evas_Object             *progressbar;
+       Evas_Object             *progress_layout;
+       Evas_Object             *progress_label;
+} pts_progress_info_t;
+
+typedef struct
+{
+       /* Print Search Type*/
+       pts_printer_search_state_e print_search_mode;
+       pts_printer_selection_done_cb selection_done_cb;
+       Evas_Object *print_search_popup_parent;
+       void *printer_search_user_data;
+       char *ip_address;
+       /* whether in process(searching, printing) */
+       int                     is_process;
+
+       /*from pts_ug_list_data*/
+       Ecore_Timer *search_err_timer;
+       Evas_Object             *popup;
+
+} pts_searching_info_t;
+
+typedef struct
+{
+       Evas_Object             *wifi_type_popup;
+} pts_selector_info_t;
+
+typedef struct
+{
+       Evas_Object             *size_popup;
+       Evas_Object             *size_popup_box;
+       Evas_Coord              size_popup_portrait_height;
+       Evas_Coord              size_popup_landscape_height;
+       Evas_Object             *custom_popup;
+       Evas_Object             *custom_popup_box;
+       Evas_Coord              custom_popup_portrait_height;
+       Evas_Coord              custom_popup_landscape_height;
+       pts_image_size_e        image_size;
+
+       double          custom_width;
+       double          custom_height;
+       double          custom_w_ratio;
+       int                     custom_unit; // 1:cm 2:inch
+} pts_size_popup_info_t;
+
+typedef struct
+{
+       Evas_Object             *scaling_popup;
+} pts_scaling_popup_info_t;
+
+typedef struct
+{
+       int                             dummy_noti_id;
+       Eina_List                       *job_spooling_list; /*TODO : provide pt_get_job_count, pt_get_job_id ... as API in print-service*/
+
+} pts_noti_info_t;
+
+typedef struct appdata {
+       Evas_Object *win;
+       Ecore_Event_Handler *screen_reader_message_handler;
+
+       /* add more variables here */
+       int prev_app_win_rotate;
+
+       pts_main_info_t main_info;                                      /*Global variables about preview view*/
+       pts_setting_info_t setting_info;                                        /*Global variables about setting view*/
+       pts_list_info_t list_info;                                              /*Global variables about printer list popup*/
+       pts_progress_info_t progress_info;                              /*Global variables about progress popup*/
+       pts_searching_info_t search_info;
+       pts_selector_info_t select_info;                                        /*Global variables about wifi/p2p selet popup*/
+       pts_size_popup_info_t size_popup_info;                  /*Global variables about size popup*/
+       pts_scaling_popup_info_t scaling_popup_info;    /*Global variables about scaling popup*/
+       pts_noti_info_t noti_info;                                              /*Global variables about noti*/
+       pts_printing_data_t printing_data;
+
+} pts_appdata_t;
+
+/**
+ *     This function let the app create the label
+ *     @return  void
+ *     @param[in] parent the pointer to the parent of the label
+ *     @param[in] desc the pointer to label text
+ */
+Evas_Object *pts_create_label_btn(Evas_Object *parent, const char *label);
+
+/**
+ *     This function let the app create the base layout
+ *     @return  void
+ *     @param[in] parent the pointer to the parent of the base layout
+ *     @param[in] desc the pointer to group of the base layout
+ */
+Evas_Object *pts_create_base_layout(Evas_Object *parent, const char *group);
+
+/**
+ *     This function let the app create the base layout
+ *     @return  void
+ *     @param[in] parent the pointer to the parent of the base layout
+ *     @param[in] desc the pointer to group of the base layout
+ */
+Evas_Object *pts_create_base_layout_with_conform(Evas_Object *parent, const char *group);
+
+/**
+ *     This function let the app create the popup element
+ *     @return  void
+ *     @param[in] parent the pointer to the parent of the popup element
+ *     @param[in] desc the pointer to description of the popup element
+ *     @param[in] timeout the timeout value
+ */
+Evas_Object *pts_create_popup(Evas_Object *parent, const char *desc, double timeout);
+Evas_Object *pts_create_size_popup(Evas_Object *parent, pts_appdata_t *ad);
+Evas_Object *pts_create_scaling_popup(Evas_Object *parent, pts_appdata_t *ad);
+Evas_Object *pts_create_wifi_popup(Evas_Object *parent, pts_appdata_t *ad);
+void clear_preview_image(pts_appdata_t *ad);
+//void pts_set_ugd(pts_core_data_t *ugd);
+//pts_core_data_t *pts_get_ugd(void);
+
+int _pts_get_rotate_angle(enum appcore_rm rotate_mode);
+void pts_search_printer(pts_appdata_t *ad);
+Evas_Object *pts_create_print_search_popup(Evas_Object *parent);
+Evas_Object *pts_utils_create_layout(Evas_Object *navi_frame);
+void load_main_view(void *userdata);
+
+inline char *_pts_printing_data_get_directory(pts_printing_data_t *data);
+inline char **_pts_printing_data_get_request_files(pts_printing_data_t *data);
+inline int _pts_printing_data_get_files_count(pts_printing_data_t *data);
+inline int _pts_printing_data_get_index(pts_printing_data_t *data);
+inline char *_pts_printing_data_get_type(pts_printing_data_t *data);
+Eina_Bool _pts_printing_data_set_directory(const char *directory, pts_printing_data_t *data);
+Eina_Bool _pts_printing_data_set_request_files(const char **request_files, const int files_count, pts_printing_data_t *data);
+Eina_Bool _pts_printing_data_set_files_count(const char *num_of_files, pts_printing_data_t *data);
+Eina_Bool _pts_printing_data_set_index(const char *current_index, pts_printing_data_t *data);
+Eina_Bool _pts_printing_data_set_type(const char *type, pts_printing_data_t *data);
+
+char *pts_parse_protocol(char *addr);
+int pts_unstandardization(char *name);
+
+#endif /* PTS_COMMON_H_ */
+
diff --git a/mobileprint/include/pts_debug.h b/mobileprint/include/pts_debug.h
new file mode 100755 (executable)
index 0000000..0ad3e92
--- /dev/null
@@ -0,0 +1,132 @@
+/*
+*  Mobileprint
+*
+* 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 __PTS_DEBUG_H__
+#define __PTS_DEBUG_H__
+
+__BEGIN_DECLS
+
+#define PTS_DLOG_OUT
+
+#ifdef PTS_DLOG_OUT
+#undef LOG_TAG
+#define LOG_TAG "MOBILEPRINT"
+#include <dlog.h>
+
+#define PTS_VERBOSE(fmt, args...) \
+        LOGV(fmt, ##args)
+#define PTS_INFO(fmt, args...) \
+        LOGI(fmt, ##args)
+#define PTS_DEBUG(fmt, args...) \
+        LOGD(fmt, ##args)
+#define PTS_WARN(fmt, args...) \
+        LOGW(fmt, ##args)
+#define PTS_ERROR(fmt, args...) \
+        LOGE(fmt, ##args)
+#define PTS_FATAL(fmt, args...) \
+        LOGF(fmt, ##args)
+
+#define PTS_RET_IF(expr, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PTS_DEBUG("[%s] Return, message "fmt, #expr, ##args );\
+                       return; \
+               } \
+       } while (0)
+
+#define PTS_RETV_IF(expr, val, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PTS_DEBUG("[%s] Return value, message "fmt, #expr, ##args );\
+                       return (val); \
+               } \
+       } while (0)
+
+#define PTS_TRACE_BEGIN PTS_INFO("ENTER FUNCTION: %s\n", __FUNCTION__);
+#define PTS_TRACE_END PTS_INFO("EXIT FUNCTION: %s\n", __FUNCTION__);
+
+#else
+#define PTS_PRT(prio, fmt, arg...) \
+       do { fprintf((prio ? stderr : stdout), "%s:%s(%d)>"fmt"\n", __FILE__, __func__, __LINE__, ##arg); } while (0)
+
+#define DBG(fmt, arg...) \
+       do { \
+               printf("%s:%s(%d)>"fmt"\n", __FILE__, __func__, __LINE__, ##arg); \
+       } while (0)
+
+#define PTS_RET_IF(expr, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PTS_PRT("[%s] Return, message "fmt, #expr, ##args );\
+                       return; \
+               } \
+       } while (0)
+
+#define PTS_RETV_IF(expr, val, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PTS_PRT("[%s] Return value, message "fmt, #expr, ##args );\
+                       return (val); \
+               } \
+       } while (0)
+
+#define PTS_TRACE_BEGIN PTS_PRT(0, "%s enter\n", __FUNCTION__)
+#define PTS_TRACE_END PTS_PRT(0, "%s leave\n", __FUNCTION__)
+
+#endif
+
+#define PTS_FILE_EXISTS(path) \
+       (path && (1 == ecore_file_exists(path)) && (ecore_file_size(path) > 0))
+
+#define PTS_IF_DEL_TIMER(timer) \
+       do { \
+               if(timer) { \
+                       ecore_timer_del(timer); \
+                       timer = NULL; \
+               } \
+       } while (0)
+
+#define PTS_IF_DEL_IDLER(idler) \
+       do { \
+               if(idler) { \
+                       ecore_idler_del(idler); \
+                       idler = NULL; \
+               } \
+       } while (0)
+
+
+#define PTS_IF_DEL_OBJ(obj) \
+       do { \
+               if(obj) { \
+                       evas_object_del(obj); \
+                       obj = NULL; \
+               } \
+       } while (0)
+
+#define PTS_IF_FREE_MEM(mem) \
+       do { \
+               if(mem) { \
+                       free(mem); \
+                       mem = NULL; \
+               } \
+       } while (0)
+
+__END_DECLS
+
+#endif /* __PTS_DEBUG_H__ */
diff --git a/mobileprint/include/pts_main_view.h b/mobileprint/include/pts_main_view.h
new file mode 100755 (executable)
index 0000000..bc3f4b1
--- /dev/null
@@ -0,0 +1,75 @@
+/*
+*  Mobileprint
+*
+* 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 PTS_MAIN_VIEW_H_
+#define PTS_MAIN_VIEW_H_
+
+#include <app.h>
+
+extern int g_pages_count;
+
+struct appdata *pts_get_appdata();
+
+void clear_preview_image(pts_appdata_t *ad);
+
+/**
+ *     This function let the app rotate the image by the given landscape
+ *     @return   void
+ *     @param[in] ugd the pointer to the main data structure
+ *     @param[in] landscape the landscape value
+ */
+void pts_main_view_rotate_image(pts_appdata_t *ad,
+                                                               app_device_orientation_e orientation);
+
+/**
+ *     This function let the app update printer label in the preview view
+ *     @return  void
+ *     @param[in] ugd the pointer to the main data structure
+ */
+void pts_main_view_update_printer_label(pts_appdata_t *ad);
+
+/**
+ *     This function let the app load the previewed image
+ *     @return  Evas_Object
+ *     @param[in] ugd the pointer to the main data structure
+ */
+Evas_Object *pts_main_view_load_preview_img(pts_appdata_t *ad);
+
+/**
+ *     This function let the app create the main screen view
+ *     @return  Evas_Object
+ *     @param[in] win the pointer to the main window
+ *     @param[in] filepath the pointer to the path of files
+ */
+Evas_Object *pts_create_main_view(pts_appdata_t *ad);
+
+
+void pts_main_view_search_printer(pts_appdata_t *ad);
+
+
+int pts_main_view_load_printing_data(pts_appdata_t *ad, pts_printing_data_t *pt_files);
+
+
+void __pts_event_cb(pt_event_e event, void *user_data, pt_progress_info_t *progress_info);
+
+void __pts_print_progress_popup(pts_appdata_t *ad, int job_id, int page_count);
+
+void __pts_print_dummy_popup(pts_appdata_t *ad, char *files, int page_count);
+
+#endif /* PTS_MAIN_VIEW_H_ */
diff --git a/mobileprint/include/pts_setting_view.h b/mobileprint/include/pts_setting_view.h
new file mode 100755 (executable)
index 0000000..d21b93a
--- /dev/null
@@ -0,0 +1,30 @@
+/*
+*  Mobileprint
+*
+* 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 PTS_SETTING_VIEW_H_
+#define PTS_SETTING_VIEW_H_
+#include "pts_common.h"
+
+/**
+ *     This function let the app create setting view
+ *     @return  void
+ *     @param[in] sd the pointer to the pts_ug_main_data structure
+ */
+void pts_create_setting_view(pts_appdata_t *ad);
+#endif /* PTS_SETTING_VIEW_H_ */
diff --git a/mobileprint/include/pts_util.h b/mobileprint/include/pts_util.h
new file mode 100644 (file)
index 0000000..b739bc7
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef PTS_UTIL_H_
+#define PTS_UTIL_H_
+
+void pts_util_show_error_popup(Evas_Object *parent, const char *msg);
+
+Eina_Bool pts_util_supported_arch(void);
+
+void pts_util_remove_tmp_files(const char *path);
+
+#endif
diff --git a/mobileprint/mobileprint.xml b/mobileprint/mobileprint.xml
new file mode 100644 (file)
index 0000000..44720e1
--- /dev/null
@@ -0,0 +1,19 @@
+<?xml version="1.0" encoding="utf-8"?> 
+<manifest xmlns="http://tizen.org/ns/packages" package="org.tizen.mobileprint" version="0.2.15-54" install-location="internal-only">
+       <label>MobilePrint</label>
+       <author email="gangheok.kim@samsung.com" href="www.samsung.com">GangHeok Kim</author>
+       <author email="taeksu.shin@samsung.com" href="www.samsung.com">Taeksu Shin</author>
+       <author email="dwmax.lee@samsung.com" href="www.samsung.com">Dongwook Lee</author>
+       <description>Mobile Print Application</description>
+       <ui-application appid="org.tizen.mobileprint" exec="/usr/apps/org.tizen.mobileprint/bin/mobileprint" nodisplay="true" multiple="false" type="capp" taskmanage="false">
+               <icon>org.tizen.mobileprint.png</icon>
+               <label>Mobileprint</label>
+               <label xml:lang="en-us">Mobileprint</label>
+               <label xml:lang="ko-kr">모바일프린트</label>
+               <application-service>
+                       <operation name="http://tizen.org/appcontrol/operation/PRINT"/>
+                       <mime name="image/*"/>
+                       <mime name="application/pdf"/>
+               </application-service>
+       </ui-application>
+</manifest>
diff --git a/mobileprint/po/CMakeLists.txt b/mobileprint/po/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..81c99a0
--- /dev/null
@@ -0,0 +1,35 @@
+# for i18n
+
+#SET(POFILES en_US.po nl.po de.po zh_HK.po zh_CN.po ru.po ko.po zh_TW.po ja.po es.po el.po it.po tr_TR.po pt.po fr.po)
+SET(POFILES 
+       ar.po da.po en_US.po fi.po hi.po it_IT.po 
+       lt.po pl.po sk.po uk.po zh_TW.po az.po 
+       de_DE.po es_ES.po fr_CA.po hr.po ja_JP.po 
+       lv.po pt_BR.po sl.po uz.po bg.po el_GR.po 
+       es_US.po fr_FR.po hu.po ka.po mk.po pt_PT.po 
+       sr.po zh_CN.po ca.po en.po et.po ga.po hy.po 
+       kk.po nb.po ro.po sv.po zh_HK.po cs.po en_PH.po 
+       eu.po gl.po is.po ko_KR.po nl_NL.po ru_RU.po 
+       tr_TR.po zh_SG.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/mobileprint/po/POTFILES.in b/mobileprint/po/POTFILES.in
new file mode 100755 (executable)
index 0000000..b6f4c3e
--- /dev/null
@@ -0,0 +1,6 @@
+# List of source files containing translatable strings.
+app/mobileprint.c
+app/pts_common.c
+app/pts_list_view.c
+app/pts_main_view.c
+app/pts_setting_view.c
diff --git a/mobileprint/po/ar.po b/mobileprint/po/ar.po
new file mode 100644 (file)
index 0000000..1594aec
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "إخفاء"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "إنعاش"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "إلغاء"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "تدوير"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "خطأ بالنظام"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "رجوع"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "موافق"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "نوع ملف غير مدعوم"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "غير مدعوم"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "الصفحة الحالية"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "تم توصيل الطابعة"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "اتصل بشبكة Wi-Fi للطباعة"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "تحديد طابعة"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "معاينة"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "طباعة"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "الحجم"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "تغيير الحجم"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "الضبط"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "ملاءمة للورقة"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "ضبط مخصص"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "العرض"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "الطول"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "الاحتفاظ بنسبة العرض إلى الارتفاع"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "بوصة"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "سم"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d صفحات في الورقة الواحدة"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "إعدادات الطابعة"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "طابعة"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "حجم الورقة"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "عدد النسخ"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "نطاق الطباعة"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "اللون"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "المسودة"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "عادي"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "عالي"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "عادي"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "جار انتظار الطباعة..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "جار التجهيز للطباعة..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "قيد الطباعة"
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "فوتوغرافي"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "راقي"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "الكل"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "جودة الطباعة"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "رمادي"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "لا توجد طابعات متوفرة"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "لا توجد أجهزة"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "تم إلغاء الطباعة"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "الذاكرة ممتلئة"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "جار البحث عن طابعات..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "فحص حالة الطابعة"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "فشل البحث"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "خطأ طباعة"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "تم قطع اتصال Wi-Fi"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "ورق"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "تم فصل الطابعة"
+
diff --git a/mobileprint/po/az.po b/mobileprint/po/az.po
new file mode 100644 (file)
index 0000000..7adc1ea
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Gizlə"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Yenilǝ"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Ləğv et"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Döndər"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Sistemdə yanlışlıq"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Geriyə"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Dəstəklənməyən fayl tipi"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Dəstəklənmədi"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Cari səhifə"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printer qoşuldu"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Çap üçün Wi-Fi şəbəkəsinə qoşul"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Printeri seç"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "İlkin baxış"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Çap et"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Ölçü"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Miqyaslama"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Parametr"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Kağıza uyğunlaşdırın"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Zövqə uyğun"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "En"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Yüksəklik"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Nisbəti saxla"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "düym"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "sm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 vərəqdə %d səhifə"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printer parametrləri"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Kağızın ölçüsü"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Surətlərin sayı"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Çap diapazonu"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Rəng"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Qaralama"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standart"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Yüksək"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Çapı gözləyir..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Çapa hazırlayır..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Çap edilir..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotoqrafik"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Hamısını"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Çap keyfiyyəti"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Boz"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Printerlərdən istifadə etmək mümkün deyil"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Cihaz yoxdur"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Çap etmə ləğv edilib"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Yaddaş dolmuşdur"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Printerləri axtarır..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Printerin vəziyyətini yoxla"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Axtarış uğursuz oldu"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Çapla əlaqədar xəta"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi bağlantısı kəsildi"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Kağız"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printer ilə əlaqə kəsildi"
+
diff --git a/mobileprint/po/bg.po b/mobileprint/po/bg.po
new file mode 100644 (file)
index 0000000..3281ae1
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Скриване"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Презар."
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Отмени"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Завъртане"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Системна грешка"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Назад"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Неподдържан тип файл"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Не се поддържа"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Текуща страница"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Принтерът е свързан"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Свързване с Wi-Fi мрежа, за да се отпечатва"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Избор на принтер"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Преглед"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Печат"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Размер"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Мащабиране"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Настройка"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Оразмери според формата на листа"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Персонлз."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Ширина"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Височина"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Запази съотношението"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "инч"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "см"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d страници на 1 лист"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Настройки на принтер"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Принтер"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Размер на страницата"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Брой копия"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Печат на диапазон"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Цвят"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Чернова"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Стандартна"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Висок"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Нормален"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Изчакване за печат..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Подготовка за печат..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Отпечатване..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Фотографска"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Бляскъв"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Всички"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Качество на печат"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Сив"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Няма достъпни принтери"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Няма устройства"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Отпечатването е отменено"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Паметта е заета"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Търсене на принтери..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Проверка състояние на принтер"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Търсенето неуспешно"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Грешка при печат"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Прекъсната Wi-Fi връзка"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Хартия"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Принтерът не е свързан"
+
diff --git a/mobileprint/po/ca.po b/mobileprint/po/ca.po
new file mode 100644 (file)
index 0000000..47b232a
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ocultar"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Actualitzar"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancel·lar"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Girar"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Error del sistema"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Enrere"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Acceptar"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "No s'admet el tipus de fitxer"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "No s'admet"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Pàgina actual"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Impressora connectada"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Connectar a una xarxa Wi-Fi per imprimir"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Seleccionar impressora"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Vista prèvia"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprimir"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Mida"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Canvi de mida"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Ajustament"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Ajustar al paper"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Personal."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Amplària"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Alçària"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Mantenir rel aspecte"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "polzada"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pàgines en 1 full"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Ajustaments d'impressora"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Impressora"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Mida de paper"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Nombre de còpies"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Interval d'impressió"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Color"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Esborrany"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Estàndard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Alta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Esperant per imprimir..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparant per imprimir..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Imprimint..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotogràfic"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Tot"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Qualitat d'impressió"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gris"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Cap impressora disponible"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Sense dispositius"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Impressió cancel·lada"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memòria plena"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Cercant impressores..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Comprovar l'estat de la impressora"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Error en la cerca"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Error d'impressió"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi desconnectat"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Paper"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Impressora desconnectada"
+
diff --git a/mobileprint/po/cs.po b/mobileprint/po/cs.po
new file mode 100644 (file)
index 0000000..f539f6b
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Skrýt"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Obnovit"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Zrušit"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Otočit"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Systémová chyba"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Zpět"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodporovaný typ souboru"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Není podporováno"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Aktuální stránka"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Tiskárna byla připojena"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Pro tisk připojit k síti Wi-Fi"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Vybrat tiskárnu"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Náhled"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Tisk"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Velikost"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Měřítko"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Nastavení"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Přizpůsobit papíru"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Vlastní"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Šířka"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Výška"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Zachovat poměr stran"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "palec"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d stránek na 1 list"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Nastavení tiskárny"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Tiskárna"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Velikost papíru"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Počet kopií"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Rozsah tisku"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Barva"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Koncept"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standardní"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Vysoká"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normální"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Čeká na tisk..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Probíhá příprava tisku..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Tisk..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografický"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Vše"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Kvalita tisku"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Šedá"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Žádné tiskárny nejsou k dispozici"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Žádná zařízení"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Tisk byl zrušen"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Paměť je plná"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Vyhledávání tiskáren..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Zkontrolovat stav tiskárny"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Hledání se nezdařilo"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Chyba tisku"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi bylo odpojeno"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papír"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Tiskárna byla odpojena"
+
diff --git a/mobileprint/po/da.po b/mobileprint/po/da.po
new file mode 100644 (file)
index 0000000..43bdcd5
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Skjul"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Opdatér"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Annuller"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Roter"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Systemfejl"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Tilbage"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Filtype understøttes ikke"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Understøttes ikke"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Aktuel side"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printer tilsluttet"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Slut til Wi-Fi-netværk for at printe"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Vælg printer"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Eksempel"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Udskriv"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Størrelse"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Skalerer"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Indstilling"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Tilpas til papir"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Brugerdefineret"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Bredde"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Højde"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Behold højde-bredde-f."
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "tommer"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d sider på 1 ark"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printerindstillinger"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Papirstørrelse"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Antal kopier"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Udskriv interval"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Farve"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Udkast"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Høj"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Venter på udskrivning ..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Gør klar til at udskrive ..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Udskriver..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografisk"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Blank"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Alle"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Udskriftskvalitet"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grå"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Ingen tilgængelige printere"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Ingen enheder"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Udskrivning annulleret"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Hukommelsen er fuld"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Søger efter printere ..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Kontrollér printerstatus"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Søgning mislykkedes"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Udskrivningsfejl"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi frakoblet"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papir"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printer frakoblet"
+
diff --git a/mobileprint/po/de_DE.po b/mobileprint/po/de_DE.po
new file mode 100644 (file)
index 0000000..17ab732
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ausblenden"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Aktualisieren"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Abbrechen"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Ausrichten"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Systemfehler"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Zurück"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "WLAN"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Nicht unterstützter Dateityp"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nicht unterstützt"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Aktuelle Seite"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Drucker verbunden"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Zum Drucken mit WLAN verbinden"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Drucker auswählen"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Vorsch."
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Drucken"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Größe"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Skalierung"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Einstellung"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "An Papiergröße anpassen"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Eig.Menü"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Breite"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Größe"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Bildseitenform. beibeh."
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "Zoll"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d Seiten auf 1 Blatt"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Druckereinstellungen"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Drucker"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Papiergröße"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Anzahl der Kopien"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Druckbereich"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Farbe"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Entwurf"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Hoch"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Auf Druck wird gewartet..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Drucken wird vorbereitet..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Druckvorgang läuft..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografisch"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Alle"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Druckqualität"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grau"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Keine Drucker verfügbar"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Keine Geräte"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Druck abgebrochen"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Speicher voll"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Drucker werden gesucht..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Druckerstatus überprüfen"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Suche fehlgeschlagen"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Druckfehler"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "WLAN getrennt"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papier"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Verbindung zum Drucker beendet"
+
diff --git a/mobileprint/po/el_GR.po b/mobileprint/po/el_GR.po
new file mode 100644 (file)
index 0000000..a106396
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Απόκρυψη"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Ανανέωση"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Άκυρο"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Περιστροφή"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Σφάλμα συστήματος"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Πίσω"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Μη υποστηριζόμενος τύπος αρχείου"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Δεν υποστηρίζεται"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Τρέχουσα σελίδα"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Συνδέθηκε εκτυπωτής"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Για να εκτυπώσετε, συνδεθείτε σε δίκτυο Wi-Fi"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Επιλογή εκτυπωτή"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Προεπ."
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Εκτύπωση"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Μέγεθος"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Διαβάθμιση"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Ρύθμιση"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Προσαρμογή στο χαρτί"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Αγαπημένα"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Πλάτος"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Ύψος"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Διατήρηση αναλ. εικόνας"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inch"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d σελίδες σε 1 φύλλο"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Ρυθμίσεις εκτυπωτή"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Εκτυπωτής"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Μέγεθος χαρτιού"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Αριθμός αντιγράφων"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Εύρος εκτύπωσης"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Χρώμα"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Πρόχειρο"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Τυπική"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Υψηλή"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Κανονικό"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Αναμονή εκτύπωσης..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Προετοιμασία για εκτύπωση..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Εκτύπωση..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Φωτογραφική"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Όλα"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Ποιότητα εκτύπωσης"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Γκρι"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Δεν υπάρχουν διαθέσιμοι εκτυπωτές"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Καμία συσκευή"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Ακύρωση εκτύπωσης"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Μνήμη ημερολογίου πλήρης"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Αναζήτηση για εκτυπωτές..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Ελέγξτε την κατάσταση του εκτυπωτή"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Αποτυχία αναζήτησης"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Σφάλμα εκτύπωσης"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Αποσύνδεση Wi-Fi"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "ΧΑρτί"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Αποσύνδεση εκτυπωτή"
+
diff --git a/mobileprint/po/en.po b/mobileprint/po/en.po
new file mode 100644 (file)
index 0000000..1507df1
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Hide"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Refresh"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotate"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "System error"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Back"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Unsupported file type"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Unsupported"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Current page"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printer connected"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Connect to Wi-Fi network to print"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Select printer"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Preview"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Print"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Size"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Scaling"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Setting"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Fit to paper"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Custom"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Width"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Height"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Keep aspect ratio"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inch"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pages on 1 sheet"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printer settings"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Paper size"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Number of copies"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Print range"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Colour"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Draft"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "High"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Waiting to print..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparing to print..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Printing..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Photographic"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "All"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Print quality"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grey"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "No printers available"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "No devices"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Printing cancelled"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memory full"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Searching for printers..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Check the printer status"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Search failed"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Printing error"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi disconnected"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Paper"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printer disconnected"
+
diff --git a/mobileprint/po/en_PH.po b/mobileprint/po/en_PH.po
new file mode 100644 (file)
index 0000000..fc4bab9
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Hide"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Refresh"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotate"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "System error"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Back"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Unsupported file type"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Unsupported"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Current page"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printer connected"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Connect to Wi-Fi network to print"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Select printer"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Preview"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Print"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Size"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Scaling"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Setting"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Fit to paper"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Custom"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Width"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Height"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Keep aspect ratio"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inches"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pages on 1 sheet"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printer settings"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Paper size"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Number of copies"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Print range"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Color"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Draft"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "High"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Waiting to print..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparing to print..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Printing..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Photographic"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "All"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Print quality"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gray"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "No printers available"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "No devices"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Printing canceled"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memory full"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Searching for printers..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Check the printer status"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Search failed"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Printing error"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi disconnected"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Paper"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printer disconnected"
+
diff --git a/mobileprint/po/en_US.po b/mobileprint/po/en_US.po
new file mode 100644 (file)
index 0000000..c5807ee
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Hide"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Refresh"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancel"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotate"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "System error"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Back"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Unsupported file type"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Unsupported"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Current page"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printer connected"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Connect to Wi-Fi network to print"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Select printer"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Preview"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Print"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Size"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Scaling"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Setting"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Fit to paper"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Custom"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Width"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Height"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Keep aspect ratio"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inch"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pages on 1 sheet"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printer settings"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Paper size"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Number of copies"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Print range"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Color"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Draft"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "High"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Waiting to print..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparing to print..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Printing..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Photographic"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "All"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Print quality"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grey"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "No printers available"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "No devices"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Printing cancelled"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memory full"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Searching for printers..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Check the printer status"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Search failed"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Printing error"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi disconnected"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Paper"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printer disconnected"
+
diff --git a/mobileprint/po/es_ES.po b/mobileprint/po/es_ES.po
new file mode 100644 (file)
index 0000000..6818597
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ocultar"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Actualizar"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotar"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Error del sistema"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Atrás"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Aceptar"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Tipo de archivo no admitido"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "No admitido"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Página actual"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Impresora conectada"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Conectar a red Wi-Fi para imprimir"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Seleccionar impresora"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Vista previa"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprimir"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Tamaño"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Cambiar tamaño"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Ajustes"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Ajustar a papel"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Personal."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Ancho"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Altura"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Mantener rel aspecto"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "pulgada"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d páginas en 1 hoja"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Ajustes de impresora"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Impresora"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Tamaño del papel"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Número de copias"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Intervalo de impresión"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Color"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Borrador"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Estándar"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Alta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Esperando impresión..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparando para imprimir..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Imprimiendo..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotográfico"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Brillante"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Todas"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Calidad de impresión"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gris"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Ninguna impresora disponible"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "No hay dispositivos"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Impresión cancelada"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memoria llena"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Buscando impresoras..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Comprobar estado de impresora"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Error de búsqueda"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Error de impresión"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi desconectado"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papel"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Impresora desconectada"
+
diff --git a/mobileprint/po/es_US.po b/mobileprint/po/es_US.po
new file mode 100644 (file)
index 0000000..4ebdf39
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ocultar"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Actualizar"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotar"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Error del sistema"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Atrás"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Aceptar"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Tipo de archivo no admitido"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Directo"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "No compatible"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Página actual"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Impresora conectada"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Conectar a red Wi-Fi para imprimir"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Seleccionar impresora"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Vista previa"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprimir"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Tamaño"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Redimensionar"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Configuración"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Ajustar a papel"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Person."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Ancho"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Alto"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Mant. relación de asp."
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "pulgada"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d páginas en 1 hoja"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Configuración de impresora"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Impresora"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Tamaño del papel"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Número de copias"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Rango de impresión"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Color"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Borrador"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Estándar"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Alta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Esperando para imprimir..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparando para imprimir..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Imprimiendo..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotográfico"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Xilófono"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Todo"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Calidad de impresión"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gris"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "No hay impresoras disponibles"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "No hay dispositivos"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Impresión cancelada"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memoria llena"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Buscando impresoras..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Comprobar estado de impresora"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Error de búsqueda"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Error de impresión"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi desconectado"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papel"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Impresora desconectada"
+
diff --git a/mobileprint/po/et.po b/mobileprint/po/et.po
new file mode 100644 (file)
index 0000000..d943f4c
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Peida"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Värskenda"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Tühista"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Pööra"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Süsteemi tõrge"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Tagasi"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Toetuseta failitüüp"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Toetuseta"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Hetkel kuvatav leht"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printer on ühendatud"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Printimiseks looge ühendus Wi-Fi võrguga"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Vali printer"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Eelvaade"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Prindi"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Suurus"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Skaleerimine"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Seadistus"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Mahuta paberile"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Kohandat."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Laius"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Kõrgus"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Hoia kuvasuhet"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "toll"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d lehte 1 lehel"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printeri seaded"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Paberi formaat"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Koopiate arv"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Printimise ulatus"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Värv"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Mustand"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Kõrge"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Tavaline"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Printimise ootamine..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Valmistumine printimiseks..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Printimine..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotograafiline"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Kõik"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Prindi kvaliteet"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Hall"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Printerid pole saadaval"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Seadmeid pole"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Printimine tühistatud"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Mälu on täis"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Printerite otsimine..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Kontrolli printeri olekut"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Otsing nurjus"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Tõrge printimisel"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi ühendus on katkestatud"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Paber"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printeri ühendus on katk."
+
diff --git a/mobileprint/po/eu.po b/mobileprint/po/eu.po
new file mode 100644 (file)
index 0000000..2d8fc63
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ezkutatu"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Eguneratu"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Ezeztatu"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Biratu"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Sistemaren errorea"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Atzera"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Ados"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Fitxategi mota ez bateragarria"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Ez bateragarria"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Uneko orria"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Inprimagailua konektatuta"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Konektatu Wi-Fi sarera inprimatzeko"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Aukeratu inprimagailua"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Aurrebista"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Inpri-matu"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Tamaina"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Eskala"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Konfiguraz."
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Doitu paperera"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Pertsona."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Zabalera"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Garaiera"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Eutsi aspek. ratioari"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "hazbetea"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "zm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d orrialde orri batean"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Inprimagailuaren ezarpenak"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Inprimagailua"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Paper tamaina"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Kopia kopurua"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Inprimaketa tartea"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Kolorea"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Zirriborroa"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Estandarra"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Handia"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Arrunta"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Inprimatzeko itxaroten..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Inprimatzeko prestatzen..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Inprimatzen..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografikoa"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Distiratsua"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Guztia(k)"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Inprimaketa kalitatea"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grisa"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Ez dago inprimagailurik erabilgarri"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Gailurik ez"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Inprimaketa eten da"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memoria beteta"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Inprimagailuak bilatzen..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Inprimagailuaren egoera egiaztatu"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Bilaketak huts egin du"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Inprimatze errorea"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fia deskonektatuta"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papera"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Inprimagailua konektatu gabe dago"
+
diff --git a/mobileprint/po/fi.po b/mobileprint/po/fi.po
new file mode 100644 (file)
index 0000000..5b42c07
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Piilota"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Päivitä"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Peruuta"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Kierrä"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Järjestelmävirhe"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Takaisin"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Tiedostotyyppiä ei tueta"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Ei tuettu"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Nykyinen sivu"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Tulostin kytketty"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Muodosta Wi-Fi-yhteys tulostamista varten"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Valitse tulostin"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Esikats."
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Tulosta"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Koko"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Skaalaus"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Asetus"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Sovita paperille"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Mukaut."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Leveys"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Korkeus"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Säilytä kuvasuhde"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "tuuma"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d sivua 1 arkilla"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Tulostimen asetukset"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Tulostin"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Paperikoko"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Kopioiden määrä"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Tulostusalue"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Väri"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Luonnos"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Normaali"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Korkea"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normaali"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Odotetaan tulostusta..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Valmistellaan tulostusta..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Tulostetaan..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Valokuvamainen"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Kaikki"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Tulostuslaatu"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Harmaa"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Tulostimia ei ole käytettävissä"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Ei laitteita"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Tulostus peruutettu"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Muisti on täynnä"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Haetaan tulostimia..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Tarkista tulostimen tila"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Haku epäonnistui"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Tulostusvirhe"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi katkaistu"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Paperi"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Yhteys tulostimeen katkaistu"
+
diff --git a/mobileprint/po/fr_CA.po b/mobileprint/po/fr_CA.po
new file mode 100644 (file)
index 0000000..a1a98f3
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Masquer"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Actualiser"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Pivoter"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Erreur système"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Retour"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wifi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Type de fichier non pris en charge"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wifi direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Non pris en charge"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Page en cours"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Imprimante connectée"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Connectez-vous au réseau Wifi pour imprimer"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Sélectionner une imprimante"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Aperçu"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprimer"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Taille"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Mise à l'échelle"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Paramètre"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Ajuster papier"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Mon menu"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Largeur"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Hauteur"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Cons. taille affichage"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "pouce"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pages sur 1 feuille"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Paramètres de l'imprimante"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Imprimante"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Taille du papier"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Nombre de copies"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Zone d'impression"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Couleur"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Brouillons"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Haute"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "En attente d'impression..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Préparation de l'impression..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Impression..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Photo"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Tous"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Qualité de l'impression"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gris"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Aucune imprimante disponible"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Aucun périphérique"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Impression annulée"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Mémoire saturée"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Recherche d'imprimante..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Vérifier l'état de l'imprimante"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Échec de la recherche"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Erreur d'impression"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "wifi déconnecté"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papier"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Imprimante déconnectée"
+
diff --git a/mobileprint/po/fr_FR.po b/mobileprint/po/fr_FR.po
new file mode 100644 (file)
index 0000000..afa5fa7
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Masquer"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Actualiser"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Annuler"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Pivoter"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Erreur système"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Retour"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Type de fichier non pris en charge"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Non pris en charge"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Page en cours"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Imprimante connectée"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Connectez-vous au réseau Wi-Fi pour imprimer"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Sélectionner une imprimante"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Aperçu"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprimer"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Taille"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Mise à l'échelle"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Paramètres"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Ajuster papier"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Personnaliser"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Largeur"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Hauteur"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Cons. taille affichage"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "pouce"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pages sur 1 feuille"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Paramètres de l'imprimante"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Imprimante"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Taille du papier"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Nombre de copies"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Zone d'impression"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Couleur"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Brouillons"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Haute"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "En attente d'impression..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Préparation de l'impression..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Impression..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Photo"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Tout"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Qualité de l'impression"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gris"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Aucune imprimante disponible"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Aucun périphérique"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Impression annulée"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Mémoire saturée"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Recherche d'imprimante..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Vérifier l'état de l'imprimante"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Echec de la recherche"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Erreur d'impression"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi déconnecté"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papier"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Imprimante déconnectée"
+
diff --git a/mobileprint/po/ga.po b/mobileprint/po/ga.po
new file mode 100644 (file)
index 0000000..3e7028f
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Folaigh"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Athnuaigh"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cuir ar ceal"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rothlaigh"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Earráid córais"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Siar"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Cineál comhaid gan tacú"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Gan tacú"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Leathanach reatha"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printéir ceangailte"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Nasc le líonra Wi-Fi le priontáil"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Roghnaigh printéir"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Ré-amharc"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Priontáil"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Méid"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Scálú"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Socrú"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Oir do pháipéar"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Saincheap"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Leithead"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Aird"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Seas cóimheas dreacha"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "orlach"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d lch ar 1 leathán"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Socruithe printéara"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printéir"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Méid an pháipéir"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Líon na gcóipeanna"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Raon priontála"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Dath"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Dréacht"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Caighdeánach"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Ard"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normálta"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Ag fanacht le priontáil..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Ag ullmhú le priontáil..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Ag priontáil..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fótagrafach"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Snasta"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Gach"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Cáilíocht phriontála"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Liath"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Níl aon phrintéirí ar fáil"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Níl gléasanna ann"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Priontáil curtha ar ceal"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Cuimhne lán"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Cuardach le haghaidh printéirí..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Seiceáil stádas an phrintéara"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Theip ar an gcuardach"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Earráid phriontála"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi dínasctha"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Páipéar"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printéir dícheangailte"
+
diff --git a/mobileprint/po/gl.po b/mobileprint/po/gl.po
new file mode 100644 (file)
index 0000000..d20cdb5
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ocultar"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Actualizar"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Xirar"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Erro do sistema"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Atrás"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Aceptar"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Tipo de arquivo non admitido"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Non admitido"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Páxina actual"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Impresora conectada"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Conectar á rede Wi-Fi para imprimir"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Seleccionar impresora"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Vista previa"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprimir"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Tamaño"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Escalado"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Axustes"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Axustar ao papel"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Persoal"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Ancho"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Altura"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Manter relación aspecto"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "polgada"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d páxinas en 1 folla"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Axustes de impresora"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Impresora"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Tamaño do papel"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Número de copias"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Rango de impresión"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Cor"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "BORRADOR"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Estándar"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Alta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Agardando para imprimir..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparando para imprimir..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Imprimindo..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotográfico"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Todo"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Calidade de impresión"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gris"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Non hai impresoras dispoñibles"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Non hai dispositivos"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Impresión cancelada"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memoria chea"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Buscando impresoras..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Comprobar o estado da impresora"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Erro na busca"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Erro de impresión"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi desconectada"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papel"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Impresora desconectada"
+
diff --git a/mobileprint/po/hi.po b/mobileprint/po/hi.po
new file mode 100644 (file)
index 0000000..74e9762
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "छिपाएँ"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "रिफ्रेश"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "रद्द"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "घुमाएँ"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "सिस्‍टम त्रुटि"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "पीछे"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "ओके"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "असमर्थित फाइल प्रकार"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi डायरेक्ट"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "असमर्थित"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "वर्तमान पेज"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "प्रिंटर कनेक्ट किया गया"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "प्रिंट करने के लिए Wi-Fi नेटवर्क से कनेक्‍ट करें"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "प्रिंटर चुनें"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "प्रिव्यू"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "प्रिंट करें"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "आकार"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "स्केलिंग"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "सेटिंग"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "पेपर में फिट करें"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "कस्टम"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "चौड़ाई"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "ऊँचाई"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "पक्ष अनुपात रखें"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inch"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 शीट पर %d पेज"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "प्रिंटर सेटिंग्स"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "प्रिंटर"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "पेपर आकार"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "प्रतियों की संख्या"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "प्रिंट सीमा"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "रंग"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "ड्राफ्ट"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "मानक"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "उच्च"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "सामान्य"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "प्रिंट करने के लिए प्रतीक्षा कर रहा है..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "प्रिंट करने के लिए तैयार हो रहा है…"
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "प्रिंट हो रहा है..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "फ़ोटोग्राफ़िक"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "चमकदार"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "सभी"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "प्रिन्ट गुणवत्ता"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "भूरा"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "कोई प्रिंटर उपलब्ध नहीं"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "डिवाइस नहीं"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "प्रिंट करना रद्द किया गया"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "मेमोरी पूर्ण"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "प्रिंटर्स के लिए खोज रहा है..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "प्रिन्टर की स्थिति जाँचें"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "खोज विफल"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "प्रिंटिंग त्रुटि"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi डिसकनेक्ट किया गया"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "काग़ज़"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "प्रिंटर डिसकनेक्ट किया गया"
+
diff --git a/mobileprint/po/hr.po b/mobileprint/po/hr.po
new file mode 100644 (file)
index 0000000..2e0a772
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Sakrij"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Aktualiziraj"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Prekid"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotiraj"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Pogreška sustava"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Nazad"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodržana datoteka"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nepodržano"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Trenutna stranica"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Pisač spojen"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Spojite se na Wi-Fi mrežu za ispis"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Odaberite pisač"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Pregled"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Ispis"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Veličina"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Skaliranje"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Postavka"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Prilagodi papiru"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Prilagodi"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Širina"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Visina"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Zadrži omjer slike"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inch"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d stranica na 1 listu"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Postavke pisača"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Pisač"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Veličina papira"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Broj kopija"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Ispiši sve"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Boja"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Priprema"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standardno"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Visoki"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normalno"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Čekanje ispisa..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Priprema za ispis..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Ispisuje se..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografski"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Sve"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Kvaliteta ispisa"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Sivo"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Nema dostupnih pisača"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nema uređaja"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Ispis je prekinut"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memorija puna"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Traženje pisača..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Provjera statusa pisača"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Greška pretraživanja"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Greška ispisa"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi isključen"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papir"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Pisač isključen"
+
diff --git a/mobileprint/po/hu.po b/mobileprint/po/hu.po
new file mode 100644 (file)
index 0000000..4b82804
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Elrejtés"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Frissít"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Mégse"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Elforgatás"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Rendszerhiba"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Vissza"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "A fájltípus\nnem támogatott"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nem támogatott"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Jelenlegi oldal"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Nyomtató csatlakoztatva"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "A nyomtatáshoz létesítsen Wi-Fi-hálózati kapcsolatot"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Nyomtató kiválasztása"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Előnézet"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Nyomtat"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Méret"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Méretezés"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Beállítás"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Laphoz illesztés"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Egyéni"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Szélesség"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Magasság"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Képoldalarány megőrzése"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "coll"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d oldal 1 lapon"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Nyomtató beállításai"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Nyomtató"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Papírméret"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Példányszám"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Nyomtatási tartomány"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Szín"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Piszkozat"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Normál"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Magas"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normál"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Várakozás nyomtatásra..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Nyomtatás előkészítése..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Nyomtatás..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fénykép"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Mind"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Nyomtatási minőség"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Szürke"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Nincs elérhető nyomtató"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nincs eszköz"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Nyomtatás megszakítva"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memória megtelt"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Nyomtatókeresés..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Ellenőrizze a nyomtató állapotát"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "A keresés sikertelen"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Nyomtatási hiba"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi-kapcsolat bontva"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papír"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Nyomtató leválasztva"
+
diff --git a/mobileprint/po/hy.po b/mobileprint/po/hy.po
new file mode 100644 (file)
index 0000000..2db80ec
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Թքցնել"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Թարմացնել"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Չեղարկել"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Պտտեցնել"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Համակարգի սխալ"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Հետ"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Ֆայլի չսատարվող տեսակ"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Չսատարվող"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Ընթացիկ էջ"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Տպիչը միացված է"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Տպելու համար միացեք Wi-Fi ցանցին"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Ընտրել տպիչը"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Դիտում"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Տպել"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Չափս"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Մասշտաբավորում"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Կայանք"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Տեղավորել թղթի վրա"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Հատուկ"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Լայնություն"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Բարձրություն"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Պահեք չափերի հրբրկցթյնը"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "դյույմ"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "սմ"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d էջեր 1 թերթի վրա"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Տպիչի դրվածքներ"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Տպիչ"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Թղթի չափ"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Պատճենների քանակը"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Տպման տիրույթ"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Գույն"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Նախագիծ"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Ստանդարտ"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Բարձր"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Նորմալ"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Սպասում է տպման..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Պատրաստվում է տպել..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Տպում է..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Լուսանկարչական"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Բոլոր"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Տպագրության որակ"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Մոխրագույն"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Մատչելի տպիչներ չկան"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Սարքեր չկան"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Տպումը դադարեցվեց"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Հիշողութունը լիքն է"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Որոնվում տպիչներ..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Ստուգեք տպիչի կարգավիճակը"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Որոնումը ձախողվեց"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Տպման սխալ"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi-ն անջատված է"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Թուղթ"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Տպիչն անջատված է"
+
diff --git a/mobileprint/po/is.po b/mobileprint/po/is.po
new file mode 100644 (file)
index 0000000..12faa84
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Hylja"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Endurnýja"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Hætta við"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Snúa"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Kerfisvilla"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Bakka"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Í lagi"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Óstutt skrársnið"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Óstutt"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Opin síða"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Prentari tengdur"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Tengjast við Wi-Fi net til að prenta"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Velja prentara"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Skoða"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Prenta"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Stærð"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Kvörðun"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Stilling"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Passa á pappír"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Sérstilla"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Breidd"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Hæð"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Halda myndhlutfalli"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "tomma"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d síður á 1 blaði"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Prentarastillingar"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Prentari"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Pappírsstærð"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Fjöldi eintaka"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Prentsvið"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Litur"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Drög"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Venjuleg"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Mikið"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Venjulegt"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Bíð þess að prenta..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Prentun undirbúin..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Verið er að prenta..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fyrir ljósmyndir"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Allt"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Prentgæði"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grár"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Engir prentarar tiltækir"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Engin tæki"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Hætt við prentun"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Minni er fullt"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Leita að prenturum..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Kanna stöðu prentara"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Leit mistókst"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Prentvilla"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi aftengt"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Pappír"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Prentari ótengdur"
+
diff --git a/mobileprint/po/it_IT.po b/mobileprint/po/it_IT.po
new file mode 100644 (file)
index 0000000..a9e384c
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Nascondi"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Aggiorna"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Annulla"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Ruota"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Errore di sistema"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Indietro"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Tipo file non supportato"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Non supportato"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Pagina corrente"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Stampante connessa"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Per stampare, collegarsi alla rete Wi-Fi"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Seleziona stampante"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Anteprima"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Stampa"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Dimensioni"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Proporzioni"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Impostazione"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Adatta a carta"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Personale"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Larghezza"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Altezza"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Mantieni proporzioni"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "pollici"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pagine su 1 foglio"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Impostazioni stampante"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Stampante"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Formato carta"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Numero di copie"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Intervallo di stampa"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Colore"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Bozza"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Alta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normale"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "In attesa di stampa..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparazione della stampa in corso..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Stampa..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografica"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Lucente"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Tutti"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Qualità di stampa"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grigio"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Nessuna stampante disponibile"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nessun dispositivo"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Stampa annullata"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memoria piena"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Ricerca stampanti in corso..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Verificare lo stato della stampante"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Ricerca non riuscita"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Errore di stampa"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi disconnesso"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Carta"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Stampante disconnessa"
+
diff --git a/mobileprint/po/ja_JP.po b/mobileprint/po/ja_JP.po
new file mode 100644 (file)
index 0000000..d9bea85
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "非表示"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "更新"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "キャンセル"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "回転"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "システムエラー"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "戻る"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "未​対応​の​ファイル​です。"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "未対応です"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "現在のページ"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "プリンターが接続されました。"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "印刷するためには、Wi-Fiネットワークに接続してください。"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "プリンターの選択"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "プレビュー"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "印刷"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "サイズ"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "拡大​縮小"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "設定"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "用紙​に​合わせる"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "カスタム"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "幅"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "高さ"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "縦横比​を​保持"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "インチ"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1枚​に​%dページ"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "プリンター​設定"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "プリンター"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "プリント​サイズ"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "枚数"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "印刷​範囲"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "色"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "下書き"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "標準"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "高"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "標準"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "印刷を待機しています..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "印刷​準備中..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "印刷中..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "写真​用"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "全て"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "印刷​品質"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "グレイ"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "利用​できる​プリンター​が​あり​ません。"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "デバイス​が​あり​ません。"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "印刷をキャンセルしました。"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "メモリがいっぱいです。"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "プリンター​を​検索​中..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "プリンター​状況​を​確認​して​ください"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "検索​に​失敗​しました"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "印刷​エラー"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi​が切断​されました。"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "ペーパー"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "プリンターが取り外されました。"
+
diff --git a/mobileprint/po/ka.po b/mobileprint/po/ka.po
new file mode 100644 (file)
index 0000000..578c42f
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "დამალვა"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "განახლება"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "გაუქმება"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "ბრუნვა"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "სისტემის შეცდომა"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "უკან"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "ფაილის ტიპი გაუთვალისწინებელია"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "გაუთვალისწინებელი"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "მიმდინარე გვერდი"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "პრინტერი დაკავშირებულია"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "დაუკავშირდით Wi-Fi ქსელს და ამობეჭდეთ"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "აირჩიეთ პრინტერი"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "გადახედვა"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "ამობეჭდვა"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "ზომა"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "ზომის შეცვლა"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "პარამეტრები"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "ფურცელზე მორგება"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "მორგებული"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "სიგანე"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "სიმაღლე"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "შეფარდების შენარჩუნება"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "დიუმი"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "სმ."
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d გვერდი 1 ფურცელზე"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "პრინტერის პარამეტრები"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "პრინტერი"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "ფურცლის ზომა"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "ასლების რაოდენობა"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "ბეჭდვის დიაპაზონი"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "ფერი"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "მონახაზი"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "სტანდარტული"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "მაღალი"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "ნორმალური"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "ელოდება ბეჭდვას..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "ემზადება ამოსაბეჭდად..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "იბეჭდება..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "ფოტოგრაფია"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "ყველა"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "ბეჭდვის ხარისხი"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "ნაცრისფერი"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "პრინტერები ვერ იძებნება"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "მოწყობილობები არ არის"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "დაბეჭდვა შეწყდა"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "მეხსიერება შევსებულია"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "იძებნება პრინტერები..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "შეამოწმეთ პრინტერის სტატუსი"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "ძებნა ვერ შესრულდა"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "ბეჭდვის შეცდომა"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi გამოირთო"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "ქაღალდი"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "პრინტერი გათიშულია"
+
diff --git a/mobileprint/po/kk.po b/mobileprint/po/kk.po
new file mode 100644 (file)
index 0000000..31445d9
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Жасыру"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Жаңарту"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Тоқтату"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Бұру"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Жүйе қателігі"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Aртқа"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Қолдаусыз файл түрі"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Қолдаусыз"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Ағымдағы бет"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Принтер қосылды"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Басып шығару үшін Wi-Fi желісіне қосылу"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Принтер таңдау"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Көру"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Басып шығару"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Өлшемі"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Ауқымды өзгерту"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Қондырғылар"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Қағазға сәйкестендіру"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Таңдаулы"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Ені"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Биіктігі"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Арақатынасты сақтау"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "дюйм"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cм"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 парақта %d бет"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Принтер параметрлері"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Басып шығарғыш"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Қағаз көлемі"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Көшірмелер саны"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Принтер ауқымы"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Түс"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Кесте"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Стандартты"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Жоғары"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Қалыпты"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Басып шығаруды күтуде..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Басып шығаруға дайындауда..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Басып шығаруда..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Фотографиялық"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Барлығы"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Басып шығару сапасы"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Сұр"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Қол жетімді принтерлер жоқ"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Құрылғылар жоқ"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Басып шығару болдырылмады"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Жад толып кеткен"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Принтерлерді іздеуде..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Принтер күйін тексеру"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Ізделмеді"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Басып шығару қатесі"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi ажыратылған"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Қағаз"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Принтер ажыратылды"
+
diff --git a/mobileprint/po/ko_KR.po b/mobileprint/po/ko_KR.po
new file mode 100644 (file)
index 0000000..8c6c499
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "숨기기"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "새로고침"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "취소"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "회전"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "시스템 오류가 발생하였습니다"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "이전"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "확인"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "지원되지 않는 파일 형식입니다"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "지원되지 않습니다"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "현재 페이지"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "프린터가 연결되었습니다"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "인쇄하려면 Wi-Fi 네트워크에 연결하세요"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "프린터 선택"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "미리보기"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "출력"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "크기"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "크기 조정"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "설정"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "용지 크기에 맞추기"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "사용자 설정"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "넓이"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "높이"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "비율 유지"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inch"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1장에 %d 페이지"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "프린터 설정"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "프린터"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "용지 크기"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "인쇄 매수"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "인쇄 범위"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "색상"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "초안"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "표준"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "높음"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "보통"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "인쇄 대기 중..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "인쇄 준비 중..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "인쇄 중..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "사진"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "글로시"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "전체"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "인쇄 품질"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "회색조"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "사용할 수 있는 프린터가 없습니다"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "기기 목록이 없습니다"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "인쇄가 취소되었습니다"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "저장 공간이 부족합니다"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "프린터 검색 중..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "프린터 상태를 확인하세요"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "검색하지 못하였습니다"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "인쇄 오류가 발생하였습니다"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi 연결이 끊어졌습니다"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "종이"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "프린터와 연결이 끊어졌습니다"
+
diff --git a/mobileprint/po/lt.po b/mobileprint/po/lt.po
new file mode 100644 (file)
index 0000000..aeafe8c
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Nerodyti"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Naujinti"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Atšaukti"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Sukti"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Sistemos klaida"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Atgal"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "„Wi-Fi“"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Gerai"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepalaikomas failo tipas"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "„Wi-Fi Direct“"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nepalaikoma"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Dabartinis puslpais"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Prijungtas spausdintuvas"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Prisijunkite prie „Wi-Fi“ tinklo, jei norite spausdinti"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Pasirinkti spausdintuvą"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Peržiūra"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Spausdinti"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Dydis"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Mastelio parinkimas"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Nustatymas"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Pritaikyti pagal lapo formatą"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Pasirink."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Plotis"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Aukštis"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Išsaug. vaizdo formatą"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "colis"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d psl. 1 lape"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Spausdintuvo nustatymai"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Spausdintuvas"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Popieriaus formatas"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Kopijų skaičius"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Spausdinimo diapazonas"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Spalva"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Juodraštis"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standartinis"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Aukšta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Įprastas"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Laukiama, kol bus spausdinama..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Ruošiamasi spausdinti..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Spausdinama..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografinis"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Blizgus"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Visos"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Spausdinimo kokybė"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Pilka"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Spausdintuvų nėra"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nėra įrenginių"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Spausdinimas atšauktas"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Atmintis pilna"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Ieškoma spausdintuvų..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Patikrinti spausdintuvo būseną"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Paieška nepavyko"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Spausdinimo klaida"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "„Wi-Fi“ atjungtas"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Popierius"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Spausdintuvas atjungtas"
+
diff --git a/mobileprint/po/lv.po b/mobileprint/po/lv.po
new file mode 100644 (file)
index 0000000..a64cd1e
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Slēpt"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Atsvaidz."
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Atcelt"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Pagriezt"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Sistēmas kļūda"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Atpakaļ"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Labi"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Neatbalstīts faila veids"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Neatbalstīts"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Pašreizējā lapa"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printeris pievienots"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Lai drukātu, izveidojiet savienojumu ar Wi-Fi tīklu"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Izvēlēties printeri"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Priekšsk."
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Drukāt"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Lielums"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Mērogošana"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Iestatījums"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Pielāgot papīram"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Sava izv."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Platums"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Augstums"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Saglabāt proporcijas"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "colla"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d lappuses 1 lapā"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printera iestatījumi"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printeris"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Papīra formāts"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Kopiju skaits"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Drukas diapazons"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Krāsa"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Melnraksts"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standarta"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Augsta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Parasts"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Gaida, lai drukātu..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Sagatavo drukāšanai..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Drukā..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotogrāfisks"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Spīdīgs"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Visi"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Drukas kvalitāte"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Pelēks"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Nav pieejams neviens printeris"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nav ierīču"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Drukāšana atcelta"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Atmiņa pilna"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Meklē printerus..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Pārbaudīt printera statusu"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Meklēšana neizdevās"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Drukāšanas kļūda"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi ir atvienots"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papīrs"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printeris atvienots"
+
diff --git a/mobileprint/po/mk.po b/mobileprint/po/mk.po
new file mode 100644 (file)
index 0000000..501c2cd
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Прикриј"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Обнови"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Откажи"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Заврти"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Системска грешка"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Назад"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Неподдржан тип на фајл"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Неподдржано"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Тековна страница"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Поврзан е печатач"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Поврзете се со мрежа Wi-Fi за печатење"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Изберете печатач"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Назад"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Печати"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Големина"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Размер"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Нагодување"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "На цела хартија"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Прилагод."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Ширина"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Висина"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Запази размер на слика"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "инч"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d страници на 1 лист"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Опции за печатачот"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Печатач"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Големина на хартија"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Број на копии"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Опсег на печатење"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Боја"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "За скица"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Стандардна"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Висок"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Нормално"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Се чека печатење..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Се подготвува печатење..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Се печати..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Фотографски"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Сите"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Квалитет на печатење"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Сива палета"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Не се достапни печатачи"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Нема уреди"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Печатењето е откажано"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Меморијата е полна"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Се бараат печатачи..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Проверете го печатачот"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Неуспешно пребарување"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Грешка во печатењето"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi е прекинато"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Хартија"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Печатачот не е поврзан"
+
diff --git a/mobileprint/po/mobileprint.pot b/mobileprint/po/mobileprint.pot
new file mode 100644 (file)
index 0000000..de35177
--- /dev/null
@@ -0,0 +1,254 @@
+# 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: 2012-04-28 11:39+0400\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"
+"Language: \n"
+"MIME-Version: 1.0\n"
+"Content-Type: text/plain; charset=CHARSET\n"
+"Content-Transfer-Encoding: 8bit\n"
+
+#: app/pts_list_view.c:230
+msgid "No device found"
+msgstr ""
+
+#: app/pts_list_view.c:263
+msgid "Can not register the printer"
+msgstr ""
+
+#: app/pts_list_view.c:282
+msgid "No Memory"
+msgstr ""
+
+#: app/pts_list_view.c:304
+msgid "Printer List"
+msgstr ""
+
+#: app/pts_list_view.c:416
+msgid "Search printer failed"
+msgstr ""
+
+#: app/pts_list_view.c:458
+msgid "IDS_COM_POP_SEARCHING"
+msgstr ""
+
+#: app/pts_list_view.c:462
+msgid "Cancel"
+msgstr ""
+
+#: app/pts_main_view.c:158
+msgid "Please check the WiFi status"
+msgstr ""
+
+#: app/pts_main_view.c:207 app/pts_main_view.c:876
+msgid "Can not get USB/WIFI status"
+msgstr ""
+
+#: app/pts_main_view.c:289
+msgid "Print Error"
+msgstr ""
+
+#: app/pts_main_view.c:321
+msgid "Please check the printer status"
+msgstr ""
+
+#: app/pts_main_view.c:475
+msgid "IDS_BT_BODY_PRINTING_ING"
+msgstr ""
+
+#: app/pts_main_view.c:574
+msgid "Please check the WIFI/USB connection status"
+msgstr ""
+
+#: app/pts_main_view.c:576
+msgid "Can not print this file"
+msgstr ""
+
+#: app/pts_main_view.c:597
+msgid "Please select one printer to print"
+msgstr ""
+
+#: app/pts_main_view.c:626
+msgid "IDS_PRT_SK_PRINT"
+msgstr ""
+
+#: app/pts_main_view.c:899
+msgid "No activated printer!"
+msgstr ""
+
+#: app/pts_main_view.c:969
+msgid "No devices"
+msgstr ""
+
+#: app/pts_main_view.c:1277
+msgid "Back"
+msgstr ""
+
+#: app/pts_main_view.c:1280
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr ""
+
+#: app/pts_setting_view.c:340
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr ""
+
+#: app/pts_setting_view.c:348
+msgid "IDS_SETTINGS_CAPTION"
+msgstr ""
+
+#: app/pts_setting_view.c:403
+msgid "IDS_BT_BODY_COPIES"
+msgstr ""
+
+#: app/pts_setting_view.c:405
+msgid "IDS_BT_BODY_PAPERSIZE"
+msgstr ""
+
+#: app/pts_setting_view.c:407
+msgid "IDS_BT_BODY_ORIENTATION"
+msgstr ""
+
+#: app/pts_setting_view.c:409
+msgid "IDS_BT_PRINT_RANGE"
+msgstr ""
+
+#: app/pts_setting_view.c:411
+msgid "IDS_BT_BODY_SCALING"
+msgstr ""
+
+#: app/pts_setting_view.c:413
+msgid "IDS_BT_BODY_GRAYSCALE"
+msgstr ""
+
+#: app/pts_setting_view.c:415
+msgid "IDS_BT_QUALITY"
+msgstr ""
+
+#: app/pts_setting_view.c:417
+msgid "IDS_BT_PAPER"
+msgstr ""
+
+#: app/pts_setting_view.c:419 app/pts_setting_view.c:546
+msgid "Error option"
+msgstr ""
+
+#: app/pts_setting_view.c:453 app/pts_setting_view.c:787
+msgid "L"
+msgstr ""
+
+#: app/pts_setting_view.c:455 app/pts_setting_view.c:789
+msgid "2L"
+msgstr ""
+
+#: app/pts_setting_view.c:457 app/pts_setting_view.c:791
+msgid "Hagaki Postcard"
+msgstr ""
+
+#: app/pts_setting_view.c:459 app/pts_setting_view.c:793
+msgid "Business card"
+msgstr ""
+
+#: app/pts_setting_view.c:461 app/pts_setting_view.c:795
+msgid "4x6"
+msgstr ""
+
+#: app/pts_setting_view.c:463 app/pts_setting_view.c:797
+msgid "8x10"
+msgstr ""
+
+#: app/pts_setting_view.c:465 app/pts_setting_view.c:799
+msgid "Letter"
+msgstr ""
+
+#: app/pts_setting_view.c:467 app/pts_setting_view.c:801
+msgid "11x17"
+msgstr ""
+
+#: app/pts_setting_view.c:469 app/pts_setting_view.c:803
+msgid "A4"
+msgstr ""
+
+#: app/pts_setting_view.c:476 app/pts_setting_view.c:728
+msgid "IDS_BR_OPT_AUTO"
+msgstr ""
+
+#: app/pts_setting_view.c:478 app/pts_setting_view.c:730
+msgid "IDS_BR_OPT_PORTRAIT"
+msgstr ""
+
+#: app/pts_setting_view.c:480 app/pts_setting_view.c:732
+msgid "IDS_BR_OPT_LANDSCAPE"
+msgstr ""
+
+#: app/pts_setting_view.c:487 app/pts_setting_view.c:910
+msgid "IDS_BR_OPT_RANGE_ALL"
+msgstr ""
+
+#: app/pts_setting_view.c:489 app/pts_setting_view.c:912
+msgid "IDS_BR_OPT_RANGE_CURRENT"
+msgstr ""
+
+#: app/pts_setting_view.c:496 app/pts_setting_view.c:755
+msgid "IDS_BR_OPT_FIT_TO_PAGE"
+msgstr ""
+
+#: app/pts_setting_view.c:498 app/pts_setting_view.c:757
+msgid "IDS_BR_OPT_ORIGINAL_SIZE"
+msgstr ""
+
+#: app/pts_setting_view.c:500 app/pts_setting_view.c:759
+msgid "IDS_BR_OPT_TWO_PAGES"
+msgstr ""
+
+#: app/pts_setting_view.c:502 app/pts_setting_view.c:761
+msgid "IDS_BR_OPT_FOUR_PAGES"
+msgstr ""
+
+#: app/pts_setting_view.c:513 app/pts_setting_view.c:826
+msgid "IDS_BR_OPT_COLOUR"
+msgstr ""
+
+#: app/pts_setting_view.c:515 app/pts_setting_view.c:828
+msgid "IDS_BR_OPT_GRAYSCALE"
+msgstr ""
+
+#: app/pts_setting_view.c:517 app/pts_setting_view.c:830
+msgid "IDS_BR_OPT_BLACKNWHITE"
+msgstr ""
+
+#: app/pts_setting_view.c:524 app/pts_setting_view.c:853
+msgid "IDS_BR_OPT_DRAFT"
+msgstr ""
+
+#: app/pts_setting_view.c:526 app/pts_setting_view.c:855
+msgid "IDS_BR_OPT_NORMAL"
+msgstr ""
+
+#: app/pts_setting_view.c:528 app/pts_setting_view.c:857
+msgid "IDS_BR_OPT_HIGH"
+msgstr ""
+
+#: app/pts_setting_view.c:535 app/pts_setting_view.c:881
+msgid "IDS_BR_OPT_PT_DEFAULT"
+msgstr ""
+
+#: app/pts_setting_view.c:537 app/pts_setting_view.c:883
+msgid "IDS_BR_OPT_PT_GLOSSY"
+msgstr ""
+
+#: app/pts_setting_view.c:539 app/pts_setting_view.c:885
+msgid "IDS_BR_OPT_PT_PHOTO"
+msgstr ""
+
+#: app/pts_setting_view.c:1197
+msgid "IDS_COM_BODY_SETTINGS"
+msgstr ""
diff --git a/mobileprint/po/nb.po b/mobileprint/po/nb.po
new file mode 100644 (file)
index 0000000..047d160
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Skjul"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Oppdater"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Roter"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Systemfeil"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Tilbake"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Filtypen støttes ikke"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Støttes ikke"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Aktuell side"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Skriver tilkoblet"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Koble til Wi-Fi-nettverk for å skrive ut"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Velg skriver"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Forhåndsvisning"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Skriv ut"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Størrelse"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Skalerer"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Innstilling"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Tilpass til papir"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Egendef."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Bredde"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Høyde"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Behold sideforhold"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "tommer"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d sider på 1 ark"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Skriverinnstillinger"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Papirstørrelse"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Antall kopier"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Utskriftsområde"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Farge"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Utkast"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Høy"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Venter på utskrift..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Forbereder utskrift..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Skriver ut..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografisk"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Alle"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Utskriftskvalitet"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grå"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Ingen tilgjengelige skrivere"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Ingen enheter"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Utskrift avbrutt"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Minnet er fullt"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Søker etter skrivere..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Sjekk skriverstatus"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Søk mislyktes"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Utskriftsfeil"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi frakoblet"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papir"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Skriver frakoblet"
+
diff --git a/mobileprint/po/nl_NL.po b/mobileprint/po/nl_NL.po
new file mode 100644 (file)
index 0000000..637685f
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Verberg."
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Vernieuw"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Annuleren"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Draaien"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Systeemfout"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Terug"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Niet-ondersteund bestandstype"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Niet ondersteund"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Huidige pagina"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printer aangesloten"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Met Wi-Fi-netwerk verbinden om af te drukken"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Printer selecteren"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Voorbeeld"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Af- drukken"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Grootte"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Schaal"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Instelling"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Passend maken"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Aangepast"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Breedte"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Hoogte"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Verhouding behouden"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inch"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pagina´s op 1 vel"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printerinstellingen"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Papierformaat"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Aantal exemplaren"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Afdrukbereik"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Kleur"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Concept"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standaard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Hoog"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normaal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Wachten op afdrukken..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Voorbereiden voor afdrukken..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Afdrukken..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografisch"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Alles"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Afdrukkwaliteit"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Grijs"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Geen printers beschikbaar"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Geen apparaten"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Afdrukken geannuleerd"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Geheugen vol"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Zoeken naar printers..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Printerstatus controleren"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Zoeken mislukt"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Afdrukfout"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi-verbinding verbroken"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papier"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printer losgekoppeld"
+
diff --git a/mobileprint/po/pl.po b/mobileprint/po/pl.po
new file mode 100644 (file)
index 0000000..6655e4a
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ukryj"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Odśwież"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Anuluj"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Obróć"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Błąd systemu"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Wstecz"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Nieobsługiwany typ pliku"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nieobsługiwane"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Bieżąca strona"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Drukarka podłączona"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Połącz z siecią Wi-Fi, aby wydrukować"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Wybierz drukarkę"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Podgląd"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Drukuj"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Rozmiar"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Skalowanie"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Ustawienie"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Dopasuj do papieru"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Skróty"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Szerokość"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Wysokość"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Zachowaj proporcje"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "cal"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "Stron na arkusz: %d"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Ustawienia drukarki"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Drukarka"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Rozmiar papieru"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Liczba kopii"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Zakres drukowania"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Kolor"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Wersja robocza"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard."
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Wysoki"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normalny"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Oczekiwanie na drukowanie..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Przygotowywanie do drukowania..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Drukowanie..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotograficzny"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Wszystkie"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Jakość wydruku"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Szary"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Brak dostępnych drukarek"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Brak urządzeń"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Anulowano drukowanie"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Pamięć pełna"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Wyszukiwanie drukarek..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Sprawdź stan drukarki"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Wyszukiwanie nie powiodło się"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Błąd drukowania"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi wyłączone"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papier"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Drukarka odłączona"
+
diff --git a/mobileprint/po/pt_BR.po b/mobileprint/po/pt_BR.po
new file mode 100644 (file)
index 0000000..e67f684
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ocultar"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Atualizar"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Girar"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Erro de sistema"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Voltar"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Tipo de arquivo não suportado"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Não suportado"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Página atual"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Impressora conectada"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Conectar à rede Wi-Fi para imprimir"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Selecionar impressora"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Prever"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprimir"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Tamanho"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Escala"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Configurações"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Ajustar ao papel"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Pessoal"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Largura"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Altura"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Manter proporção"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "pol"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d páginas em 1 folha"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Configurações da impressora"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Impressora"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Tamanho do papel"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Número de cópias"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Intervalo de impressão"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Cor"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Rascunho"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Padrão"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Alta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Aguardando para imprimir..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Preparando para imprimir..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Imprimindo…"
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotográfico"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Todos"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Qualidade de impressão"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Cinza"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Nenhuma impressora disponível"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nenhum dispositivo"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Impressão cancelada"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memória cheia"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Procurando por impressoras..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Verificar o estado da impressora"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Procura falhou"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Erro de impressão"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi desativado"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papel"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Impressora desconectada"
+
diff --git a/mobileprint/po/pt_PT.po b/mobileprint/po/pt_PT.po
new file mode 100644 (file)
index 0000000..9885d4f
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ocultar"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Actualizar"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Cancelar"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rodar"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Erro de sistema"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Voltar"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Tipo de ficheiro não suportado"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Não suportado"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Página actual"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Impressora ligada"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Ligar à rede Wi-Fi para imprimir"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Seleccionar impressora"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Pré-vis."
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprimir"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Tamanho"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Alterar escala"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Definição"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Ajustar ao papel"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Meu Menu"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Largura"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Altura"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Manter relaç. de visual"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "pol"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d páginas por folha"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Definições de impressora"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Impressora"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Tamanho do papel"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Número de cópias"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Intervalo de impressão"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Cor"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Rascunho"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Padrão"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Alta"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "A aguardar para imprimir..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "A preparar para imprimir..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "A imprimir..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografia"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Tudo"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Qualidade de impressão"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Cinzento"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Nenhuma impressora disponível"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nenhuns dispositivos"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Impressão cancelada"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memória cheia"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "A procurar impressoras..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Verificar o estado da impressora"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Procura falhou"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Erro de impressão"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi desligado"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papel"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Impressora desligada"
+
diff --git a/mobileprint/po/ro.po b/mobileprint/po/ro.po
new file mode 100644 (file)
index 0000000..bcc6377
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Ascundere"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Reîncărc."
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Anulare"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotire"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Eroare de sistem"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Înapoi"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Tip fişier neacceptat"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Neacceptat"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Pagină actuală"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Imprimantă conectată"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Conectaţi-vă la reţeaua Wi-Fi pentru imprimare"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Selectare imprimantă"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Previz."
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Imprim."
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Dimensiune"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Scalare"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Setare"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Potrivire la dimensiunea hârtiei"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Particul."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "lăţime"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "înălţime"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Păstr. rap. de asp."
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inch"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d pagini pe 1 foaie"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Setări imprimantă"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Imprimantă"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Dimensiune hârtie"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Număr de exemplare"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Interval imprimare"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Culoare"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Ciornă"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Ridicată"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Se aşteaptă imprimarea..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Se pregăteşte pentru imprimare..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Se imprimă.."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografic"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Toate"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Calitate imprimare"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gri"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Nu sunt disponibile imprimante"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nu există dispozitive"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Imprimare revocată"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memorie plină"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Se caută imprimante..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Verificare stare imprimantă"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Căutare nereuşită"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Eroare imprimare"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi deconectat"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Hârtie"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Imprimantă deconectată"
+
diff --git a/mobileprint/po/ru_RU.po b/mobileprint/po/ru_RU.po
new file mode 100644 (file)
index 0000000..135a2f9
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Скрыть"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Обновить"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Отмена"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Повернуть"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Системная ошибка"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Назад"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Да"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Неподдерживаемый тип файла"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Не поддерживается"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Текущая страница"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Принтер подключен"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Чтобы печатать, подключитесь к сети Wi-Fi"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Выберите принтер"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Просмотр"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Печать"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Размер"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Масштабирование"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Настройки"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "По ширине бумаги"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Перейти"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Ширина"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Высота"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Сохранять пропорции"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "дюйм"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "см"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d стр. на 1 листе"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Параметры принтера"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Принтер"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Размер бумаги"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Число копий"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Печать диапазона"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Цвет"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Черновик"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Стандартное"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Высокий"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Обычный"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Ожидание печати..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Подготовка к печати..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Печать..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Фотопечать"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Все"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Качество печати"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Серый"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Нет доступных принтеров"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Нет устройств"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Печать отменена"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Память заполнена"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Поиск принтеров..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Проверить состояние принтера"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Сбой поиска"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Ошибка печати"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi откл."
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Бумага"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Принтер отключен"
+
diff --git a/mobileprint/po/sk.po b/mobileprint/po/sk.po
new file mode 100644 (file)
index 0000000..be663bd
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Skryť"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Aktualizovať"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Zrušiť"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Otočiť"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Systémová chyba"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Späť"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodporovaný typ súboru"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nie je podporované"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Aktuálna stránka"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Tlačiareň je pripojená"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Pred tlačou sa pripojte na sieť Wi-Fi"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Výber tlačiarne"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Ukážka"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Tlačiť"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Veľkosť"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Zmena mierky"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Nastavenie"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Prispôsobiť papieru"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Vlastné"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Šírka"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Výška"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Zachovať pomer strán"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "palec"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "Strany na 1 hárok: %d"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Nastavenia tlačiarne"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Tlačiareň"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Veľkosť papiera"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Počet kópií"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Rozsah tlače"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Farba"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Koncept"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Štandard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Vysoká"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normál."
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Čaká sa na vytlačenie..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Pripravuje sa tlač..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Tlačí sa..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografický"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Všetko"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Kvalita tlače"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Sivá"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Žiadne dostupné tlačiarne"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Žiadne zariadenia"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Tlač bola zrušená"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Pamäť plná"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Hľadajú sa tlačiarne..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Skontrolovať stav tlačiarne"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Hľadanie zlyhalo"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Chyba tlače"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi odpojené"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papier"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Tlačiareň je odpojená"
+
diff --git a/mobileprint/po/sl.po b/mobileprint/po/sl.po
new file mode 100644 (file)
index 0000000..ffab290
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Skrij"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Osveži"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Prekliči"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Obrni"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Sistemska napaka"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Nazaj"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "V redu"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodprta vrsta datoteke"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Ni podprto"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Trenutna stran"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Tiskalnik je povezan"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Povežite se z omrežjem Wi-Fi, če želite tiskati"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Izberi tiskalnik"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Pre."
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Natisni"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Velikost"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Prilagajanje velikosti"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Nastavitev"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Prilagodi papirju"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Po meri"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Širina"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Višina"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Ohr. raz. višina/širina"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "palec"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d strani na 1 list"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Nastavitve tiskalnika"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Tiskalnik"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Velikost papirja"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Število kopij"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Obseg tiskanja"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Barva"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Osnutek"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standardno"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Visoka"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normalno"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Čakanje na tiskanje ..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Priprava na tiskanje ..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Tiskanje ..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografski"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Vse"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Kakovost tiskanja"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Siva"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Noben tiskalnik ni na voljo"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Ni naprav"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Tiskanje je preklicano"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Pomnilnik je poln"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Iskanje tiskalnikov ..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Preverite stanje tiskalnika"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Iskanje ni uspelo"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Napaka pri tiskanju"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi prekinjen"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papir"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Tiskalnik je odstranjen"
+
diff --git a/mobileprint/po/sr.po b/mobileprint/po/sr.po
new file mode 100644 (file)
index 0000000..37c8046
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Sakrij"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Osveži"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Poništi"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotiraj"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Greška sistema"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Nazad"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Nepodržani tip fajla"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nepodržano"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Trenutna strana"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Štampač je priključen"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Poveži se na Wi-Fi mrežu radi štampanja"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Izaberi štampač"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Pregled"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "štampaj"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Veličina"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Podešavanje razmere"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Podešavanja"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Podesi prema papiru"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Prilagođ."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Širina"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Visina"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Održi razmeru"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inča"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d strana na 1 listu"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Podešavanje štampača"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Štampač"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Veličina papira"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Broj kopija"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Opseg štampanja"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Boja"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Skice"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standardni"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Visok"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normalan"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Čeka se štampanje"
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Priprema štampanja..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Štampanje..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografski"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Sve"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Kvalitet štampe"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Siva skala"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Štampači nisu dostupni"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Nema uređaja"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Štampanje otkazano"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Memorija puna"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Traženje štampača..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Proveri stanje štampača"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Pretraga neuspešna"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Greška štampanja"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi otkačen"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papir"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Štampač otkačen"
+
diff --git a/mobileprint/po/sv.po b/mobileprint/po/sv.po
new file mode 100644 (file)
index 0000000..bd84779
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Dölj"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Uppdatera"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Avbryt"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Rotera"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Systemfel"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Åter"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Filtypen stöds inte"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Stöds inte"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Denna sida"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Skrivare ansluten"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Kunde inte ansluta till Wi-Fi för att skriva ut"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Välj skrivare"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Förhandsg"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Skriv ut"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Storlek"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Skalar"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Inställning"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Anpassa efter papper"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Anpassat"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Bredd"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Höjd"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Behåll bildförhållande"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "tum"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "%d sidor per ark"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Skrivarinställningar"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Skrivare"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Pappersstorlek"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Antal kopior"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Utskriftsintervall"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Färg"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Utkast"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standard"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Hög"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Väntar på utskrift..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Förbereder utskrift..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Skriver ut..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografi"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Allt"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Utskriftskvalitet"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gråskala"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Inga tillgängliga skrivare"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Inga enheter"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Utskriften avbruten"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Minnet fullt"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Söker efter skrivare..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Kontrollera skrivarstatus"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Sökningen misslyckades"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Utskriftsfel"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi har kopplats från"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Papper"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Skrivare frånkopplad"
+
diff --git a/mobileprint/po/tr_TR.po b/mobileprint/po/tr_TR.po
new file mode 100644 (file)
index 0000000..73a74ff
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Gizle"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Yenile"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "İptal"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Döndür"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Sistem hatası"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Geri"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "Tamam"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Desteklenmeyen dosya türü"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Desteklenmiyor"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Geçerli sayfa"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Yazıcı bağlı"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Yazdırmak için Wi-Fi ağına bağlan"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Yazıcı seç"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Önizleme"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Yazdır"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Boyut"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Ölçekleme"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Ayarlama"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Kağıda sığdır"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Özel"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Genişlik"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Yükseklik"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "En-boy oranını koru"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "inç"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "cm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 kağıtta %d sayfa"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Yazıcı ayarları"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Yazıcı"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Kağıt boyutu"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Kopya sayısı"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Yazdırma aralığı"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Renkli"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Taslak"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standart"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Yüksek"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Yazdırma bekleniyor..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Yazdırmaya hazırlanıyor..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Yazdırılıyor..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotoğrafik"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Parlak"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Hepsi"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Baskı kalitesi"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Gri"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Kullanılabilir yazıcı yok"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Cihaz yok"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Yazdırma iptal edildi"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Bellek dolu"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Yazıcılar aranıyor..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Yazıcı durumunu denetle"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Arama başarısız"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Yazdırma hatası"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi bağlantısı koparıldı"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Kağıt"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Yazıcı bağlantısı kesildi"
+
diff --git a/mobileprint/po/uk.po b/mobileprint/po/uk.po
new file mode 100644 (file)
index 0000000..59b0088
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Приховати"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Оновити"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Скасувати"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Обернути"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Помилка системи"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Назад"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "ОК"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Формат не підтримується"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Не підтримується"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Поточна сторінка"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Принтер підключено"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Підключення до мережі Wi-Fi для друку"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Вибір принтера"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Перегл."
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Друкувати"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "Розмір"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Масштабування"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Установка"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "За розміром паперу"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Признач."
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "По ширині"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "По висоті"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Зберег. співвідн. сторін"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "дюйм"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "см"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "Стор. на 1 аркуші: %d"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Установки принтера"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Принтер"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Розмір паперу"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Кількість копій"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Діапазон друку"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Колір"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Чернетка"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Стандартний"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Високий"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Звичайний"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Очікування друку..."
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Підготовка до друку..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Друк..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Фотографічний"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Всі"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Якість друку"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Сірий"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Немає доступних принтерів"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Немає пристроїв"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Друк скасовано"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Пам'ять заповнено"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Пошук принтерів..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Перевірте стан принтера"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Збій пошуку"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Помилка друку"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi відключено"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Папір"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Принтер відключено"
+
diff --git a/mobileprint/po/update-po.sh b/mobileprint/po/update-po.sh
new file mode 100755 (executable)
index 0000000..b79157d
--- /dev/null
@@ -0,0 +1,59 @@
+#!/bin/sh
+
+PACKAGE=mobileprint
+SRCROOT=..
+POTFILES=POTFILES.in
+
+ALL_LINGUAS="ar da en_US fi hi it_IT lt pl sk uk zh_TW az de_DE es_ES fr_CA hr ja_JP lv pt_BR sl uz bg el_GR es_US fr_FR hu ka mk pt_PT sr zh_CN ca en et ga hy kk nb ro sv zh_HK cs en_PH eu gl is ko_KR nl_NL ru_RU tr_TR zh_SG"
+
+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} \
+      --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/mobileprint/po/uz.po b/mobileprint/po/uz.po
new file mode 100644 (file)
index 0000000..6682f5a
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "Yashirish"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "Yangilash"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "Bekor q."
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "Aylantirish"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "Tizim xatosi"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "Orqaga"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "OK"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "Qo‘llab-quvvatlanmaydigan fayl turi"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Qo‘llab-quvvatlanmaydigan"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "Joriy sahifa"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "Printer ulandi"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "Chop etish uchun Wi-Fi tarmoqqa ulanish"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "Printerni tanlash"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "Dast. k/c"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "Chop etish"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "O‘lcham"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "Masshtab tanlash"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "Parametr"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "Qog‘ozga moslash"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "Maxsus"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "Kenglik"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "Balandlik"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "Proporsiyani saqlash"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "dyum"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "sm"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 betda %dta sahifa"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "Printer parametrlari"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "Printer"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "Qog‘oz o‘lchami"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "Nusxalar soni"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "Chop etish diapazoni"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "Rang"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "Qoralama"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "Standart"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "Yuqori"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "Normal"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "Chop etilyapti…"
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "Chop etishga tayyorlanmoqda..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "Chop etmoqda..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "Fotografik"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Yaltiroq"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "Barchasi"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "Chop etish sifati"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "Kul rang"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "Birorta ham printer mavjud emas"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "Qurilmalar yo‘q"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "Chop etish bekor qilindi"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "Xotira to‘la"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "Printerlar qidirilmoqda..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "Printer holatini tekshirish"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "Qidirish bajarilmadi"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "Chop etishdagi xato"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi uzilgan"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "Qog‘oz"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "Printer chiqarib olindi"
+
diff --git a/mobileprint/po/zh_CN.po b/mobileprint/po/zh_CN.po
new file mode 100644 (file)
index 0000000..6ebce12
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "隐藏"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "刷新"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "取消"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "旋转"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "系统出错"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "返回"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "确定"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "不支持的文件类型"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi直连"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "不支持"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "当前页面"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "打印机已连接"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "连接Wi-Fi网络以打印"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "选择打印机"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "预览"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "打印"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "大小"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "缩放比例"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "设定"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "符合纸张大小"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "自定义"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "宽"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "高"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "保持宽高比"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "英寸"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "厘米"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 张上 %d 页"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "打印机设置"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "打印机"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "纸张尺寸"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "拷贝份数"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "打印范围"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "颜色"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "草稿"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "标准"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "高"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "正常"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "正在等待打印…"
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "准备打印…"
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "打印中..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "摄影"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "平滑"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "全部"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "打印质量"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "灰色"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "无可用打印机"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "没有设备"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "打印已取消"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "内存已满"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "正在搜索打印机…"
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "检查打印机状态"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "搜索失败"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "打印故障"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi已断开"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "纸"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "打印机已断开"
+
diff --git a/mobileprint/po/zh_HK.po b/mobileprint/po/zh_HK.po
new file mode 100644 (file)
index 0000000..55e3a77
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "隱藏"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "重新整理"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "取消"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "旋轉"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "系統錯誤"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "返回"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "確定"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "不支援的檔案類型"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "不支援"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "目前頁面"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "打印機已連接"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "連接到 Wi-Fi 網絡以打印"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "選擇打印機"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "預覽"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "列印"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "大小"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "縮放比例"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "設定"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "符合紙張大小"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "自訂"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "闊度"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "高度"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "保持長寬比"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "英寸"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "厘米"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 張上有 %d 頁"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "打印機設定"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "打印機"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "紙張大小"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "列印份數"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "列印範圍"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "顏色"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "草稿"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "標準"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "高"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "正常"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "正在等待列印…"
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "正在準備列印..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "正在列印..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "攝影"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "全部"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "列印質素"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "灰色"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "無可用的打印機"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "無裝置"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "已取消列印"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "記憶體已滿"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "正在搜尋打印機..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "檢查打印機狀態"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "搜尋失敗"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "列印錯誤"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi已中斷連接"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "紙張"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "打印機已中斷連接"
+
diff --git a/mobileprint/po/zh_SG.po b/mobileprint/po/zh_SG.po
new file mode 100644 (file)
index 0000000..e642542
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "隐藏"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "重新显示"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "取消"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "旋转"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "系统出错"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "返回"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "确认"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "不支持的文件类型"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "直接Wi-Fi"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "不支持"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "当前页面"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "打印机已连接"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "连接Wi-Fi网络以打印"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "选择打印机"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "预览"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "打印"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "大小"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "缩放比例"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "设定"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "符合纸张大小"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "自定义"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "宽"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "高"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "保持宽高比"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "英寸"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "厘米"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 张上 %d 页"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "打印机设置"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "打印机"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "纸张大小"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "份数"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "打印范围"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "颜色"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "草稿"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "标准"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "高"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "普通"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "正在等待打印…"
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "正在准备打印..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "打印中..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "摄影"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "光面"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "全部"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "打印素质"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "灰色"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "无可用打印机"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "没有设备"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "打印已取消"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "内存已满"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "正在搜索打印机…"
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "检查打印机状态"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "搜索失败"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "打印故障"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi-Fi已断开"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "纸"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "打印机已断开"
+
diff --git a/mobileprint/po/zh_TW.po b/mobileprint/po/zh_TW.po
new file mode 100644 (file)
index 0000000..11bef9c
--- /dev/null
@@ -0,0 +1,171 @@
+msgid "IDS_COM_SK_HIDE"
+msgstr "隱藏"
+
+msgid "IDS_COM_SK_REFRESH"
+msgstr "重新整理"
+
+msgid "IDS_COM_SK_CANCEL"
+msgstr "取消"
+
+msgid "IDS_IMGE_OPT_ROTATE"
+msgstr "旋轉"
+
+msgid "IDS_CALL_POP_AEESYS_SYSTEMFAILUREERROR"
+msgstr "系統錯誤"
+
+msgid "IDS_COM_SK_BACK"
+msgstr "返回"
+
+msgid "IDS_COM_BODY_WI_FI"
+msgstr "Wi-Fi"
+
+msgid "IDS_COM_SK_OK"
+msgstr "確定"
+
+msgid "IDS_COM_BODY_UNSUPPORTED_FILE_TYPE"
+msgstr "不支援的檔案類型"
+
+msgid "IDS_COM_OPT1_WI_FI_DIRECT"
+msgstr "Wi-Fi Direct"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "不支援"
+
+msgid "IDS_BR_BODY_CURRENT_PAGE"
+msgstr "目前頁面"
+
+msgid "IDS_COM_POP_PRINTER_CONNECTED_ABB2"
+msgstr "印表機已連接"
+
+msgid "IDS_PRT_BODY_CONNECT_TO_WI_FI_NETWORK_TO_PRINT"
+msgstr "連接Wi-Fi網路印表機"
+
+msgid "IDS_PRT_BODY_SELECT_PRINTER"
+msgstr "選擇印表機"
+
+msgid "IDS_PRT_SK_PRINT_PREVIEW"
+msgstr "預覽"
+
+msgid "IDS_SMPOS_SK3_PRINT"
+msgstr "列印"
+
+msgid "IDS_IMGE_BODY_SIZE"
+msgstr "大小"
+
+msgid "IDS_PRT_BODY_SCALING_ABB"
+msgstr "縮放比例"
+
+msgid "IDS_COM_BODY_SETTING"
+msgstr "設定"
+
+msgid "IDS_BT_OPT_FIT_TO_PAPER"
+msgstr "符合紙張大小"
+
+msgid "IDS_COM_SK_CUSTOM"
+msgstr "自訂"
+
+msgid "IDS_IMGE_BODY_WIDTH"
+msgstr "寬度"
+
+msgid "IDS_IMGE_BODY_HEIGHT"
+msgstr "高度"
+
+msgid "IDS_PRT_BODY_KEEP_ASPECT_RATIO_ABB"
+msgstr "保持長寬比"
+
+msgid "IDS_COM_BODY_UNIT_INCH"
+msgstr "英吋"
+
+msgid "IDS_COM_BODY_UNIT_CM"
+msgstr "公分"
+
+msgid "IDS_PRT_BODY_PD_PAGES_ON_1_SHEET_ABB"
+msgstr "1 張上有 %d 頁"
+
+msgid "IDS_SMPOS_HEADER_PRINTER_SETTINGS"
+msgstr "印表機設定"
+
+msgid "IDS_PRT_BODY_PRINTER"
+msgstr "印表機"
+
+msgid "IDS_PRT_BODY_PAPERSIZE"
+msgstr "紙張大小"
+
+msgid "IDS_PRT_BODY_NUMBEROFCOPIES"
+msgstr "份數"
+
+msgid "IDS_PRT_BODY_PRINT_RANGE_ABB"
+msgstr "列印範圍"
+
+msgid "IDS_PRT_BODY_COLOUR"
+msgstr "顏色"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_DRAFT"
+msgstr "草稿"
+
+msgid "IDS_PRT_OPT_PRINTSETTINGS_STANDARD"
+msgstr "標準"
+
+msgid "IDS_COM_BODY_HIGH"
+msgstr "高"
+
+msgid "IDS_ST_BODY_NORMAL"
+msgstr "正常"
+
+msgid "IDS_PRT_POP_WAITING_TO_PRINT_ING"
+msgstr "正在等待列印…"
+
+msgid "IDS_PRT_POP_PREPARING_TO_PRINT_ING"
+msgstr "正在準備列印..."
+
+msgid "IDS_PRT_HEADER_MEDIABOX_PRINTING"
+msgstr "正在列印..."
+
+msgid "IDS_PRT_BODY_PHOTOGRAPHIC_ABB"
+msgstr "攝影"
+
+msgid "IDS_ST_BODY_GLOSSY"
+msgstr "Glossy"
+
+msgid "IDS_DIC_BODY_ALL"
+msgstr "全部"
+
+msgid "IDS_PRT_BODY_PRINTSETTINGS_PRINT_QUALITY"
+msgstr "列印品質"
+
+msgid "IDS_IMGE_HEADER_GREY"
+msgstr "灰色"
+
+msgid "IDS_PRT_BODY_NO_PRINTERS_AVAILABLE"
+msgstr "無可用的印表機"
+
+msgid "IDS_COM_BODY_NO_DEVICES"
+msgstr "沒有找到裝置"
+
+msgid "IDS_PRT_POP_PRINTING_CANCELED"
+msgstr "已取消列印"
+
+msgid "IDS_COM_POP_MEMORY_FULL"
+msgstr "記憶體已滿"
+
+msgid "IDS_PRT_BODY_SEARCHING_FOR_PRINTERS_ING"
+msgstr "正在搜尋印表機..."
+
+msgid "IDS_PRT_POP_CHECKPRINTERSTATE"
+msgstr "檢查印表機狀態"
+
+msgid "IDS_ASEML_POP_SEARCH_FAILED"
+msgstr "搜尋失敗"
+
+msgid "IDS_PRT_POP_PRINTINGERROR"
+msgstr "列印錯誤"
+
+msgid "IDS_WIFI_POP_WI_FI_DISCONNECTED"
+msgstr "Wi - Fi斷開"
+
+msgid "IDS_IMGE_BUTTON_PAPER_M_STICKER"
+msgstr "紙張"
+
+msgid "IDS_COM_POP_PRINTER_DISCONNECTED_ABB2"
+msgstr "印表機已中斷連接"
+
diff --git a/mobileprint/preview_engine/CMakeLists.txt b/mobileprint/preview_engine/CMakeLists.txt
new file mode 100644 (file)
index 0000000..0f1ceec
--- /dev/null
@@ -0,0 +1,8 @@
+INCLUDE(FindPkgConfig)
+pkg_check_modules(preview_engine_pkgs REQUIRED dlog evas elementary edje
+               ecore ecore-input ecore-x)
+FOREACH(flag ${preview_engine_pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS_SMSC "${EXTRA_CFLAGS_SMSC} ${flag}")
+ENDFOREACH(flag)
+
+ADD_SUBDIRECTORY(lib)
diff --git a/mobileprint/preview_engine/include/preview_engine.h b/mobileprint/preview_engine/include/preview_engine.h
new file mode 100644 (file)
index 0000000..07ec56a
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef _PREVIEW_ENGINE_H_INCLUDED_
+#define _PREVIEW_ENGINE_H_INCLUDED_
+
+struct preview_engine;
+struct initial_preview_data;
+enum preview_engine_event_status;
+
+#include <Ecore.h>
+
+#include <paper_size.h>
+#include <pdfgen.h>
+
+#include "preview_model.h"
+#include "preview_task_model.h"
+
+
+enum preview_engine_state {
+       PREVIEW_ENGINE_STATE_INITIAL = 0,
+       PREVIEW_ENGINE_STATE_PROCESSING,
+       PREVIEW_ENGINE_STATE_ERROR,
+       PREVIEW_ENGINE_STATE_READY,
+       PREVIEW_ENGINE_STATE_STOPPING,
+       PREVIEW_ENGINE_STATE_DELETED
+};
+
+enum preview_engine_event_status {
+       PREVIEW_ENGINE_EVENT_INITIAL_ERROR = -2,
+       PREVIEW_ENGINE_EVENT_PAGE_ERROR = -1,
+       PREVIEW_ENGINE_EVENT_PAGE_PROCESSING,
+       PREVIEW_ENGINE_EVENT_PAGE_READY,
+       PREVIEW_ENGINE_EVENT_INITIAL_READY,
+       PREVIEW_ENGINE_EVENT_EMPTY_PAGE_PROCESSING,
+       PREVIEW_ENGINE_EVENT_EMPTY_PAGE_READY
+       /* add cancelled state? */
+};
+
+struct preview_engine_event {
+       int page;
+       enum preview_engine_event_status status;
+};
+
+struct initial_preview_data {
+       struct preview_conf conf;
+
+       struct preview_engine *engine; /* not for use in thread */
+};
+
+struct preview_engine {
+       enum preview_engine_state state;
+       struct preview_task_model task_model;
+       struct preview_model p_model;
+
+       struct initial_preview_data *next_preview_data;
+
+       int page_ready_event_type;
+};
+
+
+int init_preview_engine(struct preview_engine *engine);
+int process_preview_engine_file(struct preview_engine *engine,
+                               char **const fnames, int files_count,
+                               const char *ppd,
+                               const struct paper_size_pts *paper_size,
+                               const struct size_px *max_available_size_px,
+                               enum page_orientation orientation, int n_up,
+                               const struct page_scale *scale, int is_grayscale);
+void preview_engine_send_page_message(struct preview_engine *engine,
+                                                                         enum preview_engine_event_status status, int page);
+int preview_engine_init_done(struct preview_engine *engine,
+                                                        const struct preview_conf *conf);
+
+
+#endif /* _PREVIEW_ENGINE_H_INCLUDED_ */
+
diff --git a/mobileprint/preview_engine/include/preview_model.h b/mobileprint/preview_engine/include/preview_model.h
new file mode 100644 (file)
index 0000000..8a3ccb9
--- /dev/null
@@ -0,0 +1,92 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef _PREVIEW_MODEL_H_INCLUDED_
+#define _PREVIEW_MODEL_H_INCLUDED_
+
+struct preview_model;
+
+#include <paper_size.h>
+#include <pdfgen.h>
+#include <preview_coords.h>
+
+#include "preview_task_model.h"
+
+
+enum preview_page_state {
+       PREVIEW_PAGE_STATE_NA = 0,
+       PREVIEW_PAGE_STATE_PROCESSING,
+       /*PREVIEW_PAGE_STATE_SIZE_READY,*/ /* TODO */
+       PREVIEW_PAGE_STATE_READY,
+       PREVIEW_PAGE_STATE_ERROR
+};
+
+#if 0
+struct preview_page_info {
+       enum preview_page_state page_state;
+       /* TODO: page data */
+};
+#endif
+
+struct preview_engine;
+
+struct preview_conf {
+       int pages_count;
+       char **initial_fnames;
+       int files_count;
+       char *fname;
+       char *ppd; /*PPD file name*/
+       //int is_original_size;
+       struct page_scale scale;
+       int n_up;
+       struct preview_page_req settings_req;
+       enum page_orientation orientation;
+       struct paper_size_pts paper_size;
+       /*struct size_px max_available_size_px;
+       int is_grayscale;*/
+};
+
+struct preview_model {
+       //int pages_count;
+       enum preview_page_state *pages_state;
+       struct preview_conf conf;
+       enum preview_page_state empty_page_state;
+       //struct preview_task_model *task_model;
+       struct preview_engine *engine;
+};
+
+#include "preview_engine.h"
+
+
+void destroy_preview_conf(struct preview_conf *conf);
+int copy_preview_conf(struct preview_conf *dest,
+               const struct preview_conf *src);
+
+int init_preview_model(struct preview_model *model,
+                                          const struct preview_conf *conf,
+                                          struct preview_engine *engine);
+void destroy_preview_model(struct preview_model *model);
+int preview_model_request_empty_page(struct preview_model *model);
+int preview_model_request_page(struct preview_model *model, int page);
+int preview_model_page_available(struct preview_model *model,
+                                                                enum preview_engine_event_status status, int page);
+
+
+#endif /* _PREVIEW_MODEL_H_INCLUDED_ */
+
diff --git a/mobileprint/preview_engine/include/preview_task_model.h b/mobileprint/preview_engine/include/preview_task_model.h
new file mode 100644 (file)
index 0000000..4fbb5df
--- /dev/null
@@ -0,0 +1,60 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef _PREVIEW_TASK_MODEL_H_INCLUDED_
+#define _PREVIEW_TASK_MODEL_H_INCLUDED_
+
+//#define MAX_PREVIEW_TASK_COUNT       3 /* TODO: autodetection */
+#define PREVIEW_EMPTY_PAGE_FNAME       PREVIEW_TEMP_DIR "/empty_page.ppm"
+
+struct preview_task_model;
+struct preview_conf;
+
+#include <Ecore.h>
+#include <previewgen.h> /* PREVIEW_TEMP_DIR definition */
+
+struct preview_task_model {
+       Eina_List *task_list;
+       Ecore_Exe *previewgen_handle;
+       Ecore_Event_Handler *event_handler;
+
+       int is_stop_processing;
+
+       struct preview_engine *engine;
+};
+
+#include "preview_model.h"
+
+
+#define PREVIEW_EMPTY_PAGE_FNAME       PREVIEW_TEMP_DIR "/empty_page.ppm"
+
+
+int init_preview_task_model(struct preview_task_model *model,
+                                                       struct preview_engine *engine);
+int preview_task_stop_processing(struct preview_task_model *task_model);
+int add_preview_task_initial(struct preview_task_model *model,
+                                                        const struct preview_conf *conf);
+int add_preview_task_empty_page(struct preview_task_model *model,
+                                        struct preview_model *pmodel);
+int add_preview_task(struct preview_task_model *model, int page,
+                                        struct preview_model *pmodel);
+
+
+#endif /* _PREVIEW_TASK_MODEL_H_INCLUDED_ */
+
diff --git a/mobileprint/preview_engine/lib/CMakeLists.txt b/mobileprint/preview_engine/lib/CMakeLists.txt
new file mode 100644 (file)
index 0000000..f1167aa
--- /dev/null
@@ -0,0 +1,5 @@
+FILE(GLOB SRCS *.c)
+
+ADD_LIBRARY(preview_engine ${SRCS})
+SET_TARGET_PROPERTIES(preview_engine PROPERTIES COMPILE_FLAGS "${EXTRA_CFLAGS_SMSC} -fpie")
+
diff --git a/mobileprint/preview_engine/lib/preview_engine.c b/mobileprint/preview_engine/lib/preview_engine.c
new file mode 100644 (file)
index 0000000..0b34b07
--- /dev/null
@@ -0,0 +1,194 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <Ecore.h>
+
+#include <page_preview.h>
+#include <previewgen.h>
+
+#include "pts_debug.h"
+#include "preview_engine.h"
+
+int init_preview_engine(struct preview_engine *engine)
+{
+       int ret;
+       int errsv;
+
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(engine == NULL, -1, "engine is NULL");
+
+       /*engine->fname = NULL;
+       DBG("preview_engine: fname = %s", fname);*/
+
+       memset(engine, 0, sizeof(struct preview_engine));
+
+       engine->state = PREVIEW_ENGINE_STATE_INITIAL;
+       engine->next_preview_data = NULL;
+
+       memset(&(engine->p_model), 0, sizeof(struct preview_model));
+
+       ret = mkdir(PREVIEW_TEMP_DIR, 0777);
+       errsv = errno;
+       PTS_RETV_IF(ret < 0 && errsv != EEXIST, -1,
+                       "Failed to mkdir " PREVIEW_TEMP_DIR
+                       ", errno = %d", errsv);
+
+       if (init_preview_task_model(&(engine->task_model), engine) < 0) {
+               PTS_TRACE_BEGIN;
+               return -1;
+       }
+       /*if (init_preview_model(&(engine->p_model)) < 0)
+               return -1;*/
+
+       /*engine->preview_data.pages_count = -1;
+       engine->preview_data.fname = strdup(fname);*/
+
+       engine->page_ready_event_type = ecore_event_type_new();
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+/* TODO: engine destruction */
+
+int preview_engine_init_done(struct preview_engine *engine,
+                                                        const struct preview_conf *conf)
+{
+       PTS_TRACE_BEGIN;
+       if (conf->pages_count > 0) {
+               engine->state = PREVIEW_ENGINE_STATE_READY;
+               if (init_preview_model(&(engine->p_model),
+                                                          conf, engine) < 0) {
+                       PTS_DEBUG("ERROR in preview model initialization");
+                       engine->state = PREVIEW_ENGINE_STATE_ERROR;
+                       preview_engine_send_page_message(engine,
+                                                                                        PREVIEW_ENGINE_EVENT_INITIAL_ERROR, -1);
+                       PTS_TRACE_END;
+                       return -1;
+               }
+               preview_engine_send_page_message(engine,
+                                                                                PREVIEW_ENGINE_EVENT_INITIAL_READY, 0);
+               PTS_TRACE_END;
+               return 0;
+       }
+
+       PTS_DEBUG("ERROR: no pages");
+       engine->state = PREVIEW_ENGINE_STATE_ERROR;
+       preview_engine_send_page_message(engine,
+                                                                        PREVIEW_ENGINE_EVENT_INITIAL_ERROR, -1);
+       PTS_TRACE_END;
+       return 0;
+}
+
+int process_preview_engine_file(struct preview_engine *engine,
+                                                               char **const fnames, int files_count,
+                                                               const char *ppd,
+                                                               const struct paper_size_pts *paper_size,
+                                                               const struct size_px *max_available_size_px,
+                                                               enum page_orientation orientation, int n_up,
+                                                               const struct page_scale *scale, int is_grayscale)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(NULL == engine ||
+                               NULL == fnames ||
+                               files_count <= 0 ||
+                               NULL == fnames[0] ||
+                               NULL == ppd ||
+                               NULL == paper_size ||
+                               NULL == scale ||
+                               NULL == max_available_size_px
+                               , -1 , "Invalid argument");
+
+       struct initial_preview_data *data;
+       struct size_px shadow_size_px = {10, 10};
+       int i;
+
+       data = malloc(sizeof(struct initial_preview_data));
+       PTS_RETV_IF(data == NULL, -1, "Insufficient memory");
+
+
+       data->conf.initial_fnames = calloc(files_count + 1, sizeof(char*));
+       if (NULL == data->conf.initial_fnames) {
+               PTS_IF_FREE_MEM(data);
+               PTS_RETV_IF(1, -1, "Insufficient memory");
+       }
+       for (i = 0; i < files_count; ++i) {
+               data->conf.initial_fnames[i] = strdup(fnames[i]);
+               PTS_DEBUG("Fname %d: %s", i, fnames[i]);
+               if (NULL == data->conf.initial_fnames[i]) {
+                       /* memory error */
+                       destroy_preview_conf(&(data->conf));
+                       PTS_IF_FREE_MEM(data);
+                       PTS_RETV_IF(1, -1, "Insufficient memory");
+               }
+       }
+       data->conf.files_count = files_count;
+
+       data->conf.ppd = strdup(ppd);
+       data->conf.fname = strdup(TEMP_PDFTOPDF_FNAME);
+       data->conf.paper_size = *paper_size;
+       data->conf.paper_size.name = strdup(paper_size->name);
+       //data->conf.max_available_size_px = *max_available_size_px;
+       data->conf.orientation = orientation;
+       data->conf.n_up = n_up;
+       data->conf.scale = *scale;
+       //data->conf.is_grayscale = is_grayscale;
+
+       data->conf.settings_req.paper_size = paper_size->s;
+       data->conf.settings_req.available_size_px = *max_available_size_px;
+       data->conf.settings_req.shadow_offset = shadow_size_px;
+       data->conf.settings_req.is_rotate90 =
+                       (PAGE_ORIENTATION_LANDSCAPE == orientation);
+       data->conf.settings_req.is_grayscale = is_grayscale;
+
+       data->engine = engine;
+
+
+       //careful memory release:
+       if (data->conf.ppd == NULL || data->conf.fname == NULL
+                       || data->conf.paper_size.name == NULL) {
+               destroy_preview_conf(&(data->conf));
+               PTS_IF_FREE_MEM(data);
+               PTS_RETV_IF(1, -1, "Insufficient memory");
+       }
+
+       engine->state = PREVIEW_ENGINE_STATE_PROCESSING;
+       add_preview_task_initial(&(engine->task_model), &(data->conf));
+       PTS_IF_FREE_MEM(data);
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+void preview_engine_send_page_message(struct preview_engine *engine,
+                                                                         enum preview_engine_event_status status, int page)
+{
+       PTS_RET_IF(engine == NULL, "engine is NULL");
+
+       struct preview_engine_event *event_data = malloc(sizeof(*event_data));
+       PTS_TRACE_BEGIN;
+
+       PTS_DEBUG("Send event: [%d, %d]", page, status);
+
+       /* TODO: check for active preview model */
+       event_data->page = page;
+       event_data->status = status;
+       ecore_event_add(engine->page_ready_event_type, event_data, NULL, NULL);
+       PTS_TRACE_END;
+}
diff --git a/mobileprint/preview_engine/lib/preview_model.c b/mobileprint/preview_engine/lib/preview_model.c
new file mode 100644 (file)
index 0000000..5bc94f1
--- /dev/null
@@ -0,0 +1,224 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <Ecore.h>
+
+#include <previewgen.h>
+#include <pts_debug.h>
+
+#include "preview_model.h"
+
+
+void destroy_preview_conf(struct preview_conf *conf)
+{
+       int i;
+       PTS_RET_IF(NULL == conf, "Argument error");
+
+       if (conf->initial_fnames != NULL)
+               for (i = 0; i < conf->files_count; ++i)
+                       PTS_IF_FREE_MEM(conf->initial_fnames[i]);
+       PTS_IF_FREE_MEM(conf->initial_fnames);
+       conf->files_count = 0;
+
+       PTS_IF_FREE_MEM(conf->fname);
+       PTS_IF_FREE_MEM(conf->ppd);
+       PTS_IF_FREE_MEM(conf->paper_size.name);
+       conf->pages_count = 0;
+}
+
+
+int copy_preview_conf(struct preview_conf *dest, const struct preview_conf *src)
+{
+       int i;
+       PTS_RETV_IF(NULL == dest || NULL == src, -1, "Argument error");
+       memset(dest, 0, sizeof(struct preview_conf));
+       *dest = *src;
+
+       dest->initial_fnames = calloc(src->files_count + 1, sizeof(char*));
+       if (NULL == dest->initial_fnames)
+               goto ERR_CASE;
+       for (i = 0; i < src->files_count; ++i) {
+               dest->initial_fnames[i] = strdup(src->initial_fnames[i]);
+               if (NULL == dest->initial_fnames[i])
+                       goto ERR_CASE;
+       }
+
+       dest->fname = strdup(src->fname);
+       dest->ppd = strdup(src->ppd);
+       dest->paper_size.name = strdup(src->paper_size.name);
+       if (NULL == dest->fname || NULL == dest->ppd
+                       || NULL == dest->paper_size.name)
+               goto ERR_CASE;
+
+       return 0;
+
+ERR_CASE:
+       destroy_preview_conf(dest);
+       PTS_RETV_IF(1, -1, "Insufficient memory");
+}
+
+
+int init_preview_model(struct preview_model *model,
+                                          const struct preview_conf *conf,
+                                          struct preview_engine *engine)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL || conf == NULL || engine == NULL,
+                       -1, "Invalid argument");
+
+       //model->conf = *conf;
+       model->pages_state = malloc(sizeof(enum preview_page_state)
+                                                               * (conf->pages_count + 1));
+       PTS_RETV_IF(model->pages_state == NULL, -1, "Insufficient memory");
+
+       if (copy_preview_conf(&(model->conf), conf) < 0) {
+               PTS_IF_FREE_MEM(model->pages_state);
+               PTS_RETV_IF(1, -1, "Error in configuration copy");
+       }
+
+       int i;
+       for (i = 1; i <= conf->pages_count; ++i) {
+               model->pages_state[i] = PREVIEW_PAGE_STATE_NA;
+       }
+
+       model->engine = engine;
+       model->empty_page_state = PREVIEW_PAGE_STATE_NA;
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+void destroy_preview_model(struct preview_model *model)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RET_IF(model == NULL, "Invalid argument");
+
+       PTS_IF_FREE_MEM(model->pages_state);
+       destroy_preview_conf(&(model->conf));
+
+       PTS_TRACE_END;
+}
+
+int preview_model_request_empty_page(struct preview_model *model)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL, -1, "model is NULL");
+       PTS_RETV_IF(model->pages_state == NULL, -1, "model is not initialized");
+
+       if (model->empty_page_state != PREVIEW_PAGE_STATE_READY)
+               preview_engine_send_page_message(model->engine,
+                               PREVIEW_ENGINE_EVENT_EMPTY_PAGE_PROCESSING, 0);
+
+       if (PREVIEW_PAGE_STATE_NA == model->empty_page_state) {
+               add_preview_task_empty_page(
+                               &(model->engine->task_model), model);
+               model->empty_page_state = PREVIEW_PAGE_STATE_READY;
+       } else {
+               preview_engine_send_page_message(model->engine,
+                               PREVIEW_ENGINE_EVENT_EMPTY_PAGE_READY, 0);
+       }
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+int preview_model_request_page(struct preview_model *model, int page)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL, -1, "model is NULL");
+       PTS_RETV_IF(model->pages_state == NULL, -1, "model is not initialized");
+       PTS_RETV_IF(model->conf.pages_count - 1 < page - 1, -1 , "page is incorrect");
+
+       /* send message for empty page */
+       if (model->pages_state[page] != PREVIEW_PAGE_STATE_READY) {
+               preview_engine_send_page_message(model->engine,
+                                                                                PREVIEW_ENGINE_EVENT_PAGE_PROCESSING, page);
+       }
+
+       if (PREVIEW_PAGE_STATE_NA == model->pages_state[page]) {
+               add_preview_task(&(model->engine->task_model), page, model);
+               model->pages_state[page] = PREVIEW_PAGE_STATE_PROCESSING;
+       } else if (PREVIEW_PAGE_STATE_READY == model->pages_state[page]) {
+               preview_engine_send_page_message(model->engine,
+                                                                                PREVIEW_ENGINE_EVENT_PAGE_READY, page);
+       }
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+int preview_model_page_available(struct preview_model *model,
+                                                                enum preview_engine_event_status status, int page)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL || model->pages_state == NULL, -1, "model is not initialized");
+
+       if (PREVIEW_ENGINE_EVENT_PAGE_READY == status)
+               model->pages_state[page] = PREVIEW_PAGE_STATE_READY;
+       else if (PREVIEW_ENGINE_EVENT_EMPTY_PAGE_READY == status)
+               model->empty_page_state = PREVIEW_PAGE_STATE_READY;
+
+       preview_engine_send_page_message(model->engine,
+                       status, page);
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+
+int preview_model_debug_print_pages_state(struct preview_model *model)
+{
+       int i;
+       int pages_count;
+       char *outstr;
+       char s;
+
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(NULL == model, -1, "Argument error");
+       pages_count = model->conf.pages_count;
+       if (pages_count <= 0 || pages_count > PDF_PAGE_MAX_VAL)
+               return -1;
+
+       outstr = malloc(sizeof(char) * (pages_count + 1));
+       for (i = 1; i <= pages_count; ++i) {
+               s = '?';
+               switch(model->pages_state[i]) {
+               case PREVIEW_PAGE_STATE_NA:
+                       s = 'N';
+                       break;
+               case PREVIEW_PAGE_STATE_PROCESSING:
+                       s = 'P';
+                       break;
+               case PREVIEW_PAGE_STATE_READY:
+                       s = 'R';
+                       break;
+               case PREVIEW_PAGE_STATE_ERROR:
+                       s = 'E';
+                       break;
+               }
+               outstr[i - 1] = s;
+       }
+       outstr[pages_count - 1] = '\0';
+       PTS_DEBUG("pages: %d, state: %s", pages_count, outstr);
+       free(outstr);
+
+       PTS_TRACE_END;
+       return 0;
+}
+
diff --git a/mobileprint/preview_engine/lib/preview_task_model.c b/mobileprint/preview_engine/lib/preview_task_model.c
new file mode 100644 (file)
index 0000000..99bbae7
--- /dev/null
@@ -0,0 +1,552 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <Ecore.h>
+
+#include <page_preview.h>
+#include <pdfgen.h>
+#include <preview_coords.h>
+#include <previewgen.h>
+
+#include "pts_debug.h"
+
+#include "preview_task_model.h"
+
+
+#define PREVIEWGEN_EXECUTABLE  BINDIR "/previewgen-tool"
+#define SHADOW_SIZE_PX_X 10
+#define SHADOW_SIZE_PX_Y 10
+
+#define CMD_STR_MAX_LEN                1024
+
+#define SINGLE_PAGE_PREVIEWGEN
+
+
+/* TODO: task model destruction */
+enum preview_task_type {
+       PREVIEW_TASK_EMPTY_PAGE,
+       PREVIEW_TASK_GENERIC,
+       PREVIEW_TASK_INITIAL
+};
+
+
+struct preview_task_data {
+       int page;
+       enum preview_task_type task_type;
+       struct preview_conf conf;
+       char out_pic_fname[sizeof(PREVIEW_TEMP_DIR "/mobileprint_xxxx.ppm ")];
+       enum file_type ftype;
+       int is_task_ok;
+
+       struct preview_model *pmodel;
+       struct preview_task_model *task_model;
+       char *previewgen_exe_cmd;
+};
+
+
+int init_preview_task_model(struct preview_task_model *model,
+                                                       struct preview_engine *engine)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL || engine == NULL, -1 , "Invalid argument");
+
+       /*model->task_count = MAX_PREVIEW_TASK_COUNT;
+       model->tasks = malloc(sizeof(struct preview_task) * model->task_count);
+       if (NULL == model->tasks) {
+               model->task_count = 0;
+               return -1;
+       }*/
+       model->task_list = NULL;
+       model->previewgen_handle = NULL;
+       model->event_handler = NULL;
+       model->is_stop_processing = 0;
+       model->engine = engine;
+
+       //model->pdata = pdata;
+       PTS_TRACE_END;
+       return 0;
+}
+
+
+int clear_preview_task_queue(struct preview_task_model *task_model)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(task_model == NULL , -1 , "Invalid argument");
+
+       struct preview_task_data *ptd;
+       Eina_List *cur;
+
+       if (task_model->task_list != NULL) {
+               /* clean task list */
+               EINA_LIST_FOREACH(task_model->task_list, cur, ptd) {
+                       PTS_IF_FREE_MEM(ptd);
+               }
+               eina_list_free(task_model->task_list);
+       }
+       task_model->task_list = NULL;
+       PTS_TRACE_END;
+       return 0;
+}
+
+
+int parse_previewgen_output(Ecore_Exe_Event_Data *data_from_process,
+               enum file_type ftype, int *pages_count)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(NULL == pages_count || NULL == data_from_process
+                       || data_from_process->size <= 0,
+                       -1, "Invalid argument");
+       PTS_DEBUG("data_from_process->size : %d\n", data_from_process->size);
+       char *msg = calloc(1, data_from_process->size + 1);
+       PTS_RETV_IF(NULL == msg, -1, "Memory allocation error");
+
+       strncpy(msg, data_from_process->data, data_from_process->size);
+       msg[data_from_process->size] = '\0';
+       *pages_count = 0;
+
+       PTS_DEBUG("msg: %s", msg);
+
+       switch (ftype) {
+       case FILE_TYPE_IMAGE:
+               sscanf(msg, "init img: pages count: %d", pages_count);
+               break;
+       case FILE_TYPE_PDF:
+               sscanf(msg, "init pdf: pages count: %d", pages_count);
+               break;
+       case FILE_TYPE_INCORRECT:
+               *pages_count = 0;
+               break;
+       }
+       PTS_IF_FREE_MEM(msg);
+       PTS_TRACE_END;
+       PTS_RETV_IF (*pages_count <= 0, -1, "Error");
+       return 0;
+}
+
+
+static Eina_Bool preview_handler_end_cb(void *d, int type, void *event)
+{
+       PTS_TRACE_BEGIN;
+
+       PTS_RETV_IF(d == NULL, ECORE_CALLBACK_DONE, "Invalid argument");
+
+       struct preview_task_data *ptd = (struct preview_task_data *)d;
+       struct preview_task_data *next_ptd;
+       struct preview_task_model *task_model = ptd->task_model;
+       int is_init_engine = 1;
+       int res;
+
+       /* TODO: check for next initialization in queue */
+
+       switch (ptd->task_type) {
+       case PREVIEW_TASK_EMPTY_PAGE:
+               preview_model_page_available(ptd->pmodel,
+                               PREVIEW_ENGINE_EVENT_EMPTY_PAGE_READY,
+                               0);
+               break;
+       case PREVIEW_TASK_GENERIC:
+               /* TODO: check does task OK (parse output) */
+               //if (ptd->is_task_ok) {
+                       preview_model_page_available(ptd->pmodel,
+                                       PREVIEW_ENGINE_EVENT_PAGE_READY,
+                                       ptd->page);
+               /*} else {
+                       preview_model_page_available(ptd->pmodel,
+                                       PREVIEW_ENGINE_EVENT_PAGE_ERROR,
+                                       ptd->page);
+               }*/
+               break;
+       case PREVIEW_TASK_INITIAL:
+               if (task_model->task_list != NULL) {
+                       next_ptd = (struct preview_task_data *)
+                               eina_list_data_get(task_model->task_list);
+                       if (PREVIEW_TASK_INITIAL == next_ptd->task_type) {
+                               is_init_engine = 0;
+                       }
+               }
+               if (is_init_engine) {
+                       res = parse_previewgen_output(
+                                       (Ecore_Exe_Event_Data *)event,
+                                       ptd->ftype,
+                                       &(ptd->conf.pages_count));
+                       if (res >= 0)
+                               preview_engine_init_done(task_model->engine,
+                                                       &(ptd->conf));
+                       /* TODO: ERROR condition in case of res < 0 */
+               }
+               PTS_DEBUG("releasing memory");
+               destroy_preview_conf(&(ptd->conf));
+               PTS_DEBUG("memory released");
+               break;
+       }
+
+       task_model->previewgen_handle = NULL;
+       ecore_event_handler_del(task_model->event_handler);
+       task_model->event_handler = NULL;
+       PTS_DEBUG("Freeing memory");
+       PTS_IF_FREE_MEM(ptd->previewgen_exe_cmd);
+       PTS_IF_FREE_MEM(ptd);
+
+       /* manage tasks queue */
+       if (task_model->task_list != NULL) {
+               ptd = (struct preview_task_data *)
+                         eina_list_data_get(task_model->task_list);
+               task_model->task_list = eina_list_remove_list(
+                               task_model->task_list, task_model->task_list);
+               task_model->previewgen_handle =
+                       ecore_exe_pipe_run(ptd->previewgen_exe_cmd,
+                                       ECORE_EXE_PIPE_READ_LINE_BUFFERED
+                                       | ECORE_EXE_PIPE_READ, NULL);
+               if (NULL == task_model->previewgen_handle) {
+                       PTS_DEBUG("ecore_exe_pipe_run error (%s)",
+                                       ptd->previewgen_exe_cmd);
+                       PTS_IF_FREE_MEM(ptd->previewgen_exe_cmd);
+                       PTS_IF_FREE_MEM(ptd);
+                       PTS_TRACE_END;
+                       return ECORE_CALLBACK_DONE;
+               }
+               task_model->event_handler = ecore_event_handler_add(
+                               ECORE_EXE_EVENT_DATA,
+                               preview_handler_end_cb, ptd);
+       }
+
+       PTS_TRACE_END;
+       return ECORE_CALLBACK_DONE;
+}
+
+
+int add_preview_task_initial(struct preview_task_model *model,
+                                const struct preview_conf *conf)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL || conf == NULL, -1, "Invalid argument");
+
+       char *fnames_str;
+       struct preview_task_data *ptd;
+       int i;
+       int fnames_strlen;
+
+       /* fill the preview_task_data structure */
+       ptd = malloc(sizeof(struct preview_task_data));
+       PTS_RETV_IF(ptd == NULL, -1, "malloc failed");
+
+       memset(ptd, 0, sizeof(struct preview_task_data));
+       ptd->task_type = PREVIEW_TASK_INITIAL;
+       ptd->conf = *conf;
+       ptd->task_model = model;
+       /* fill cmd with arguments from ptd depending on file type*/
+       /* TODO: check for each file */
+       ptd->ftype = get_file_type(ptd->conf.initial_fnames[0]);
+
+       ptd->previewgen_exe_cmd = NULL;
+
+       enum page_scale_type scale_type = ptd->conf.scale.type;
+       switch (ptd->ftype) {
+       case FILE_TYPE_IMAGE:
+               /* calculate correct string length to support
+                  many images*/
+               fnames_strlen = 0;
+               for (i = 0; i < conf->files_count; ++i)
+                       fnames_strlen += strlen(ptd->conf.initial_fnames[i])
+                                       + 1;
+               fnames_str = (char*)malloc(sizeof(char) * (fnames_strlen + 1));
+               if (NULL == fnames_str) {
+                       PTS_IF_FREE_MEM(ptd);
+                       PTS_RETV_IF(ptd == NULL, -1, "malloc failed");
+               }
+               /* generate fnames list string */
+               fnames_str[0] = '\0';
+               for (i = 0; i < conf->files_count; ++i) {
+                       strncat(fnames_str, ptd->conf.initial_fnames[i],
+                                       fnames_strlen);
+                       strncat(fnames_str, " ", fnames_strlen);
+               }
+               fnames_str[fnames_strlen] = '\0';
+               /* generate command string */
+               ptd->previewgen_exe_cmd = (char*)malloc(sizeof(char)
+                               * (CMD_STR_MAX_LEN + fnames_strlen + 1));
+               if (NULL == ptd->previewgen_exe_cmd) {
+                       PTS_IF_FREE_MEM(ptd);
+                       PTS_IF_FREE_MEM(fnames_str);
+                       PTS_RETV_IF(ptd == NULL, -1, "malloc failed");
+               }
+               PTS_DEBUG("processing image");
+               snprintf(ptd->previewgen_exe_cmd, CMD_STR_MAX_LEN,
+                               PREVIEWGEN_EXECUTABLE " init img "
+                               "%s%s %s %s %lf %lf %d %d %s %d %s %d %lf %lf %d",
+                               fnames_str, ptd->conf.fname,
+                               ptd->conf.ppd, ptd->conf.paper_size.name,
+                               ptd->conf.paper_size.s.x, ptd->conf.paper_size.s.y,
+                               ptd->conf.settings_req.available_size_px.x,
+                               ptd->conf.settings_req.available_size_px.y,
+                               (PAGE_ORIENTATION_LANDSCAPE == ptd->conf.orientation)
+                                       ? "landscape" :
+                               (PAGE_ORIENTATION_PORTRAIT == ptd->conf.orientation)
+                                       ? "portrait" : "",
+                               ptd->conf.n_up,
+                               (SCALE_FIT_TO_PAPER == scale_type) ? "fit_to_paper" :
+                               (SCALE_CUSTOM == scale_type) ? "custom" :
+                               (SCALE_RELATIVE == scale_type) ? "relative" :
+                               (SCALE_ORIGINAL == scale_type) ? "original" : "",
+                               ptd->conf.scale.zoom, ptd->conf.scale.w, ptd->conf.scale.h,
+                               ptd->conf.settings_req.is_grayscale);
+               PTS_IF_FREE_MEM(fnames_str);
+               PTS_DEBUG("cmd: %s", ptd->previewgen_exe_cmd);
+               break;
+       case FILE_TYPE_PDF:
+               PTS_DEBUG("processing PDF");
+               ptd->previewgen_exe_cmd = malloc(sizeof(char)
+                               * (CMD_STR_MAX_LEN + 1));
+               snprintf(ptd->previewgen_exe_cmd, CMD_STR_MAX_LEN,
+                        PREVIEWGEN_EXECUTABLE " init pdf "
+                        "%s %s %s %s %lf %lf %s %d %s %d %lf %lf %d",
+                        ptd->conf.initial_fnames[0], ptd->conf.fname,
+                        ptd->conf.ppd, ptd->conf.paper_size.name,
+                        ptd->conf.paper_size.s.x, ptd->conf.paper_size.s.y,
+                        (PAGE_ORIENTATION_LANDSCAPE == ptd->conf.orientation) ? "landscape" :
+                        (PAGE_ORIENTATION_PORTRAIT == ptd->conf.orientation) ? "portrait" : "",
+                        ptd->conf.n_up,
+                        (SCALE_FIT_TO_PAPER == scale_type) ? "fit_to_paper" :
+                        (SCALE_CUSTOM == scale_type) ? "custom" :
+                        (SCALE_RELATIVE == scale_type) ? "relative" :
+                        (SCALE_ORIGINAL == scale_type) ? "original" : "",
+                        ptd->conf.scale.zoom, ptd->conf.scale.w, ptd->conf.scale.h,
+                        ptd->conf.settings_req.is_grayscale);
+               PTS_DEBUG("cmd: %s", ptd->previewgen_exe_cmd);
+               break;
+       case FILE_TYPE_INCORRECT:
+               PTS_DEBUG("Incorrect file type");
+               PTS_IF_FREE_MEM(ptd->previewgen_exe_cmd);
+               PTS_IF_FREE_MEM(ptd);
+               PTS_TRACE_END;
+               return -1;
+       }
+
+       /* TODO: clear task queue, disable generic tasks */
+       clear_preview_task_queue(model);
+
+       /* manage task queue */
+       if (NULL != model->previewgen_handle) {
+               /* plan task for calculation in future */
+               /* TODO: check, does we have current tasks in task model */
+               model->task_list = eina_list_append(model->task_list, ptd);
+               /* TODO: leave only 4 last page requests in queue */
+       } else {
+               /* this task is a top task - just process */
+               model->previewgen_handle = ecore_exe_pipe_run(
+                               ptd->previewgen_exe_cmd,
+                               ECORE_EXE_PIPE_READ, NULL);
+               if (NULL == model->previewgen_handle) {
+                       PTS_DEBUG("ecore_exe_pipe_run error (%s)",
+                                       ptd->previewgen_exe_cmd);
+                       PTS_IF_FREE_MEM(ptd->previewgen_exe_cmd);
+                       destroy_preview_conf(&(ptd->conf));
+                       PTS_IF_FREE_MEM(ptd);
+                       PTS_TRACE_END;
+                       return 0;
+               }
+               model->event_handler = ecore_event_handler_add(
+                               ECORE_EXE_EVENT_DATA,
+                               preview_handler_end_cb, ptd);
+       }
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+
+int process_preview_task_ptd(struct preview_task_model *model,
+               struct preview_task_data *ptd)
+{
+       struct preview_task_data *next_ptd;
+
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL || NULL == ptd,
+                       -1, "Argument error");
+
+       if (NULL != model->previewgen_handle) {
+               if (NULL != model->task_list) {
+                       next_ptd = (struct preview_task_data *)
+                                          eina_list_data_get(model->task_list);
+                       if (next_ptd == NULL || PREVIEW_TASK_INITIAL
+                                       == next_ptd->task_type) {
+                               /* incorret list content or initialization
+                                  is planned */
+                               PTS_IF_FREE_MEM(ptd->previewgen_exe_cmd);
+                               PTS_IF_FREE_MEM(ptd);
+                               PTS_TRACE_END;
+                               return 0;
+                       }
+                       /* plan task for calculation in future */
+                       model->task_list = eina_list_append(
+                                       model->task_list, ptd);
+               } else { /* NULL == model->task_list */
+                       model->task_list = eina_list_append(
+                               model->task_list, ptd);
+               }
+               /* TODO: leave only 4 last page requests in queue */
+       } else {
+               /* this task is a top task - just process */
+               model->previewgen_handle = ecore_exe_pipe_run(
+                               ptd->previewgen_exe_cmd,
+                               ECORE_EXE_PIPE_READ_LINE_BUFFERED
+                               | ECORE_EXE_PIPE_READ, NULL);
+               if (NULL == model->previewgen_handle) {
+                       PTS_DEBUG("ecore_exe_pipe_run error (%s)",
+                                       ptd->previewgen_exe_cmd);
+                       PTS_IF_FREE_MEM(ptd->previewgen_exe_cmd);
+                       PTS_IF_FREE_MEM(ptd);
+                       PTS_TRACE_END;
+                       return 0;
+               }
+               model->event_handler = ecore_event_handler_add(
+                               ECORE_EXE_EVENT_DATA,
+                               preview_handler_end_cb, ptd);
+       }
+
+       PTS_TRACE_END;
+       return 0;
+}
+
+
+int add_preview_task_empty_page(struct preview_task_model *model,
+                                        struct preview_model *pmodel)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL || pmodel == NULL, -1, "Invalid argument");
+       PTS_RETV_IF(model->is_stop_processing, -1, "is_stop_processing is %d",
+                       model->is_stop_processing);
+
+       int res;
+       struct preview_task_data *ptd;
+       struct preview_task_data *next_ptd;
+
+       /* fill the preview_task_data structure */
+       ptd = malloc(sizeof(struct preview_task_data));
+       PTS_RETV_IF(ptd == NULL, -1, "malloc failed");
+
+       ptd->page = 0;
+       ptd->task_type = PREVIEW_TASK_EMPTY_PAGE;
+       strncpy(ptd->out_pic_fname, PREVIEW_TEMP_DIR "/empty_page.ppm", sizeof(ptd->out_pic_fname) - 1);
+       ptd->is_task_ok = 0;
+       ptd->conf = pmodel->conf;
+       ptd->pmodel = pmodel;
+       ptd->task_model = model;
+
+       ptd->previewgen_exe_cmd = malloc(sizeof(char) * (CMD_STR_MAX_LEN + 1));
+       if (NULL == ptd->previewgen_exe_cmd) {
+               PTS_IF_FREE_MEM(ptd);
+               PTS_RETV_IF(ptd == NULL, -1, "malloc failed");
+       }
+
+       int to_be_previewed_as_landscape =
+                       (PAGE_ORIENTATION_LANDSCAPE == ptd->conf.orientation);
+       /* for number_up 2 page should be rotated to be viewed correctly */
+       if (2 == ptd->conf.n_up) {
+               switch_size_pts_coords(&(ptd->conf.paper_size.s));
+               //switch_size_px_coords(&(ptd->conf.settings_req.available_size_px));
+       }
+
+       /* fill cmd with arguments from ptd */
+       snprintf(ptd->previewgen_exe_cmd, CMD_STR_MAX_LEN,
+                       PREVIEWGEN_EXECUTABLE " empty_gen "
+                       "%s %lf %lf %d %d %d %d %d",
+                       ptd->out_pic_fname,
+                       ptd->conf.paper_size.s.x, ptd->conf.paper_size.s.y,
+                       ptd->conf.settings_req.available_size_px.x,
+                       ptd->conf.settings_req.available_size_px.y,
+                       ptd->conf.settings_req.shadow_offset.x,
+                       ptd->conf.settings_req.shadow_offset.y,
+                       to_be_previewed_as_landscape);
+       PTS_DEBUG("cmd: %s", ptd->previewgen_exe_cmd);
+
+       res = process_preview_task_ptd(model, ptd);
+
+       PTS_TRACE_END;
+       return res;
+}
+
+
+int add_preview_task(struct preview_task_model *model, int page,
+                                        struct preview_model *pmodel)
+{
+       PTS_TRACE_BEGIN;
+       PTS_RETV_IF(model == NULL || pmodel == NULL , -1, "Invalid argument");
+       PTS_RETV_IF(model->is_stop_processing, -1, "is_stop_processing is %d", model->is_stop_processing);
+
+       int res;
+       struct preview_task_data *ptd;
+       struct preview_task_data *next_ptd;
+
+       /* fill the preview_task_data structure */
+       ptd = malloc(sizeof(struct preview_task_data));
+       PTS_RETV_IF(ptd == NULL, -1, "malloc failed");
+
+       ptd->page = page;
+       ptd->task_type = PREVIEW_TASK_GENERIC;
+       snprintf(ptd->out_pic_fname, sizeof(ptd->out_pic_fname),
+                       "/tmp/mobileprint/mobileprint_%04d.ppm", page);
+       ptd->is_task_ok = 0;
+       ptd->conf = pmodel->conf;
+       ptd->pmodel = pmodel;
+       ptd->task_model = model;
+
+       ptd->previewgen_exe_cmd = malloc(sizeof(char) * (CMD_STR_MAX_LEN + 1));
+       if (NULL == ptd->previewgen_exe_cmd) {
+               PTS_IF_FREE_MEM(ptd);
+               PTS_RETV_IF(ptd == NULL, -1, "malloc failed");
+       }
+
+       int to_be_previewed_as_landscape = (PAGE_ORIENTATION_LANDSCAPE == ptd->conf.orientation);
+       /* for number_up 2 page should be rotated to be viewed correctly */
+       if (2 == ptd->conf.n_up) {
+               switch_size_pts_coords(&(ptd->conf.paper_size.s));
+               //switch_size_px_coords(&(ptd->conf.settings_req.available_size_px));
+       }
+
+       /* fill cmd with arguments from ptd */
+       snprintf(ptd->previewgen_exe_cmd, CMD_STR_MAX_LEN,
+                       PREVIEWGEN_EXECUTABLE " pagegen "
+                       "%s %d %s %lf %lf %d %d %d %d %d %d",
+                       ptd->conf.fname, page, ptd->out_pic_fname,
+                       ptd->conf.paper_size.s.x, ptd->conf.paper_size.s.y,
+                       ptd->conf.settings_req.available_size_px.x,
+                       ptd->conf.settings_req.available_size_px.y,
+                       ptd->conf.settings_req.shadow_offset.x,
+                       ptd->conf.settings_req.shadow_offset.y,
+                       to_be_previewed_as_landscape,
+                       ptd->conf.settings_req.is_grayscale);
+       PTS_DEBUG("cmd: %s", ptd->previewgen_exe_cmd);
+
+       res = process_preview_task_ptd(model, ptd);
+
+       PTS_TRACE_END;
+       return res;
+}
+
+
+int debug_print_preview_task_list(struct preview_task_model *model)
+{
+       /*struct preview_task_data *ptd;
+       Eina_List *cur;
+       char *outstr;*/
+       PTS_DEBUG("task_list size: %d", eina_list_count(model->task_list));
+       return 0;
+}
+
diff --git a/mobileprint/previewgen/CMakeLists.txt b/mobileprint/previewgen/CMakeLists.txt
new file mode 100644 (file)
index 0000000..a7b53b4
--- /dev/null
@@ -0,0 +1,11 @@
+#ADD_DEFINITIONS("-Wall -pedantic") #enable all warnings
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(previewgen_pkgs REQUIRED dlog
+                                       evas ecore)
+FOREACH(flag ${previewgen_pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS_PREVIEWGEN "${EXTRA_CFLAGS_PREVIEWGEN} ${flag}")
+ENDFOREACH(flag)
+
+ADD_SUBDIRECTORY(lib)
+ADD_SUBDIRECTORY(util)
diff --git a/mobileprint/previewgen/default.ppd b/mobileprint/previewgen/default.ppd
new file mode 100644 (file)
index 0000000..86e758e
--- /dev/null
@@ -0,0 +1,91 @@
+*PPD-Adobe: "4.3"
+*FormatVersion:        "4.3"
+*FileVersion:  "1.1"
+*LanguageVersion: English
+*LanguageEncoding: ISOLatin1
+*PCFileName:   "default.ppd"
+*Manufacturer: "Default Printer"
+*Product:      "Default Printer"
+*cupsVersion:  1.2
+*cupsManualCopies: True
+*cupsFilter:   "application/vnd.cups-raster 0 -"
+*ModelName:     "Default Printer"
+*ShortNickName: "Default Printer"
+*NickName:      "Default Printer"
+*PSVersion:    "(3010.000) 81501"
+*LanguageLevel:        "3"
+*ColorDevice:  True
+*DefaultColorSpace: RGB
+*FileSystem:   False
+*Throughput:   "1"
+*LandscapeOrientation: Plus90
+*VariablePaperSize: False
+*TTRasterizer: Type42
+
+*OpenUI *PageSize/Media Size: PickOne
+*OrderDependency: 10 AnySetup *PageSize
+*DefaultPageSize: A4
+*PageSize A4/A4:               "<</PageSize[595 842]/ImagingBBox null>>setpagedevice"
+*CloseUI: *PageSize
+
+*OpenUI *PageRegion: PickOne
+*OrderDependency: 10 AnySetup *PageRegion
+*DefaultPageRegion: A4
+*PageRegion A4/A4:             "<</PageSize[595 842]/ImagingBBox null>>setpagedevice"
+*CloseUI: *PageRegion
+
+*DefaultImageableArea: A4
+*ImageableArea A4/A4:                  "18 36 577 806"
+
+*DefaultPaperDimension: A4
+*PaperDimension A4/A4:                 "595 842"
+
+*OpenUI *MediaType/Media Type: PickOne
+*OrderDependency: 10 AnySetup *MediaType
+*DefaultMediaType: Plain
+*MediaType Plain/Plain Paper:  "<</MediaType(Plain)/cupsMediaType 0>>setpagedevice"
+*CloseUI: *MediaType
+
+*OpenUI *InputSlot/Media Source: PickOne
+*OrderDependency: 10 AnySetup *InputSlot
+*DefaultInputSlot: Tray
+*InputSlot Tray/Tray: "<</cupsMediaPosition 1>>setpagedevice"
+*CloseUI: *InputSlot
+
+*OpenUI *Duplex/Double-Sided Printing: PickOne
+*OrderDependency: 20 AnySetup *Duplex
+*DefaultDuplex: None
+*Duplex None/Off:      "<</Duplex false>>setpagedevice"
+*CloseUI:      *Duplex
+
+*OpenUI *Resolution/Output Resolution: PickOne
+*OrderDependency: 20 AnySetup *Resolution
+*DefaultResolution: 300dpi
+*Resolution 300dpi/300 DPI: "<</HWResolution[300 300]>>setpagedevice"
+*CloseUI: *Resolution
+
+*OpenUI *ColorModel/Output Mode: PickOne
+*OrderDependency: 10 AnySetup *ColorModel
+*DefaultColorModel: CMYK
+*ColorModel W: "<</cupsColorSpace 0>>setpagedevice"
+*ColorModel K: "<</cupsColorSpace 3>>setpagedevice"
+*ColorModel CMYK: "<</cupsColorSpace 6>>setpagedevice"
+*CloseUI: *ColorModel
+
+*OpenUI *cupsBitsPerColor/Bits Per Color: PickOne
+*OrderDependency: 10 AnySetup *cupsBitsPerColor
+*DefaultcupsBitsPerColor: 8
+*cupsBitsPerColor 8: "<</cupsBitsPerColor 8>>setpagedevice"
+*CloseUI: *cupsBitsPerColor
+
+*OpenUI *cupsColorOrder/Color Order: PickOne
+*OrderDependency: 10 AnySetup *cupsColorOrder
+*DefaultcupsColorOrder: Chunked
+*cupsColorOrder Chunked: "<</cupsColorOrder 0>>setpagedevice"
+*CloseUI: *cupsColorOrder
+
+*DefaultFont: Times-Roman
+*Font Times-Roman: Standard "(001.007S)" Standard ROM
+*%
+*% End of "$Id$".
+*%
diff --git a/mobileprint/previewgen/include/evas_render.h b/mobileprint/previewgen/include/evas_render.h
new file mode 100644 (file)
index 0000000..61f730b
--- /dev/null
@@ -0,0 +1,37 @@
+/*
+*  Mobileprint
+*
+* 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 _EVAS_RENDER_H_INCLUDED_
+#define _EVAS_RENDER_H_INCLUDED_
+
+#include <Evas.h>
+
+#include "paper_size.h"
+
+
+int init_buffer_canvas(Evas *canvas, const struct size_px *page_size);
+int init_temp_buffer_canvas(Evas *canvas);
+int reinit_buffer_canvas(Evas *canvas, const struct size_px *page_size);
+Evas *create_canvas(const struct size_px *page_size);
+void destroy_canvas(Evas *canvas);
+void draw_scene(Evas *canvas);
+void save_scene(Evas *canvas, const char *dest);
+
+#endif /* _EVAS_RENDER_H_INCLUDED_ */
+
diff --git a/mobileprint/previewgen/include/image_scaler.h b/mobileprint/previewgen/include/image_scaler.h
new file mode 100644 (file)
index 0000000..1f5b60e
--- /dev/null
@@ -0,0 +1,29 @@
+/*
+*  Mobileprint
+*
+* 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 _IMAGE_SCALER_H_INCLUDED_
+#define _IMAGE_SCALER_H_INCLUDED_
+
+#include "paper_size.h"
+
+int downscale_image(const char *fname, const char *outfname_ppm,
+                                       const struct size_px *available_size);
+
+#endif /* _IMAGE_SCALER_H_INCLUDED_ */
+
diff --git a/mobileprint/previewgen/include/page_preview.h b/mobileprint/previewgen/include/page_preview.h
new file mode 100644 (file)
index 0000000..cd0fab5
--- /dev/null
@@ -0,0 +1,96 @@
+/*
+*  Mobileprint
+*
+* 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 _PAGE_PREVIEW_H_INCLUDED_
+#define _PAGE_PREVIEW_H_INCLUDED_
+
+#include <Evas.h>
+
+#include <previewgen.h>
+#include <preview_coords.h>
+
+#include "pdfgen.h"
+
+
+#define IMAGE_CONVERT_TEMP_FILE                PREVIEW_TEMP_DIR "/convert_tmp.ppm"
+
+
+Evas *get_pdf_preview_page_image(const char *fname, int first_page,
+                                                                const struct preview_page_px *settings_px);
+
+int save_pdf_preview_page_image(const char *pdf_fname, int first_page,
+                                                               const struct preview_page_req *settings_pts,
+                                                               const char *out_pic_fname);
+int save_empty_preview_page_image(const struct preview_page_req *settings_pts,
+                               const char *out_pic_fname);
+
+#if 0
+int get_pdf_preview_pages(const char *fname,
+                                                 const struct paper_size_pts *paper_size,
+                                                 const struct size_px *available_size_px,
+                                                 enum page_orientation orientation,
+                                                 int n_up, int is_original_size, int is_grayscale);
+
+int get_img_preview_pages(char **const fnames, int files_count,
+                                                 const struct paper_size_pts *paper_size,
+                                                 const struct size_px *available_size_px,
+                                                 enum page_orientation orientation,
+                                                 int n_up, int is_original_size, int is_grayscale);
+#endif
+
+int save_pdf_preview_page_image_w_np(void *img_buf, int img_size,
+                                                                        int page_num, int pages_count,
+                                                                        //const struct preview_page_req *settings_pts,
+                                                                        const struct preview_settings_px *settings_px,
+                                                                        const char *out_pic_fname);
+int save_pdf_preview_page_image_w_np_fname(const char *pdf_fname,
+               int page_num, int pages_count,
+               const struct preview_settings_px *settings_px,
+               const char *out_pic_fname);
+
+int pdf2pdf_preview_pages(const char *fname, const char *out_pdf_fname,
+                                                 const char *printer_ppd_fname,
+                                                 const struct paper_size_pts *paper_size,
+                                                 enum page_orientation orientation, int n_up,
+                                                 const struct page_scale *scale, int is_grayscale);
+
+int img2pdf_preview_pages(const char *fname, const char *out_pdf_fname,
+                                                 const char *printer_ppd_fname,
+                                                 const struct paper_size_pts *paper_size,
+                                                 const struct size_px *available_size_px,
+                                                 enum page_orientation orientation, int n_up,
+                                                 const struct page_scale *scale, int is_grayscale);
+int img_files2pdf_preview_pages(char **const fnames,
+               int files_count,
+               const char *out_pdf_fname,
+               const char *printer_ppd_fname,
+               const struct paper_size_pts *paper_size,
+               const struct size_px *available_size_px,
+               enum page_orientation orientation, int n_up,
+               const struct page_scale *scale, int is_grayscale);
+
+int process_image_downscale(const char *fname, const char *out_fname,
+                                                       const struct size_px *available_size_px);
+
+int load_pdf_page_img(const char *fname, int page,
+                                         const struct preview_page_px *settings_px,
+                                         void **out_img, int *size);
+
+#endif /* _PAGE_PREVIEW_H_INCLUDED_ */
+
diff --git a/mobileprint/previewgen/include/paper_size.h b/mobileprint/previewgen/include/paper_size.h
new file mode 100644 (file)
index 0000000..e7e9ae2
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+*  Mobileprint
+*
+* 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 _PAPER_SIZE_H_INCLUDED_
+#define _PAPER_SIZE_H_INCLUDED_
+
+//#include <previewgen.h>
+
+struct size_px {
+       int x;
+       int y;
+};
+
+struct size_pts {
+       double x;
+       double y;
+};
+
+struct paper_size_pts {
+       char *name;
+       struct size_pts s;
+};
+
+void switch_size_pts_coords(struct size_pts *s);
+void switch_size_px_coords(struct size_px *s);
+void add_size_pts(const struct size_pts *from, struct size_pts *to);
+void neg_size_pts(struct size_pts *s);
+
+int get_paper_size_pts(const char *name, struct paper_size_pts *s);
+int pts_size2px(const struct size_pts *s_pts,
+                               const struct size_px *border_s_px,
+                               struct size_px *px);
+
+#endif /* _PAPER_SIZE_H_INCLUDED_ */
+
diff --git a/mobileprint/previewgen/include/pdfgen.h b/mobileprint/previewgen/include/pdfgen.h
new file mode 100644 (file)
index 0000000..a50b3b6
--- /dev/null
@@ -0,0 +1,66 @@
+/*
+*  Mobileprint
+*
+* 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 _PDFGEN_H_INCLUDED_
+#define _PDFGEN_H_INCLUDED_
+
+
+#define TEMP_PDFTOPDF_FNAME    "/tmp/mobileprint/pdftopdf_tmp.pdf"
+
+#define SCALE_WALLET_W 3.30709
+#define SCALE_WALLET_H
+
+enum page_orientation {
+       //PAGE_ORIENTATION_AUTO,
+       PAGE_ORIENTATION_PORTRAIT=3,
+       PAGE_ORIENTATION_LANDSCAPE
+};
+
+enum page_scale_type {
+       SCALE_FIT_TO_PAPER,
+       SCALE_CUSTOM,
+       SCALE_RELATIVE,
+       SCALE_ORIGINAL
+};
+
+struct page_scale {
+       enum page_scale_type type;
+       int zoom;
+       double w;
+       double h;
+};
+
+struct pdfgen_settings {
+       int n_up;
+       char *paper_name;
+       char *ppd_filename;
+       struct page_scale scale;
+       enum page_orientation orientation;
+};
+
+
+int call_pdftopdf(const char *path, const char *outfile,
+                                 const struct pdfgen_settings *settings);
+int call_imagetopdf(const char *path, const char *outfile,
+                                       const struct pdfgen_settings *settings);
+int call_pdfunite(char **const infiles_z, const char *outfile);
+
+
+#endif /* _PDFGEN_H_INCLUDED_ */
+
diff --git a/mobileprint/previewgen/include/pgen_debug.h b/mobileprint/previewgen/include/pgen_debug.h
new file mode 100644 (file)
index 0000000..7d1425b
--- /dev/null
@@ -0,0 +1,120 @@
+/*
+*  Mobileprint
+*
+* 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 _PGEN_DEBUG_H_INCLUDED_
+#define _PGEN_DEBUG_H_INCLUDED_
+
+
+/* debugging macros definitions */
+
+/*#define PREVIEWGEN_STANDALONE_DEBUG*/
+#define PREVIEWGEN_DLOG_DEBUG
+#if defined PREVIEWGEN_STANDALONE_DEBUG
+/* standalone preview generation (e.g. for testing) */
+
+#include <stdio.h>
+
+#define PGEN_DEBUG(fmt, arg...) \
+       do { \
+               fprintf(stderr, "DEBUG:%s:%s(%d): " fmt "\n", \
+                               __FILE__, __func__, __LINE__, ##arg); \
+       } while (0)
+#define PGEN_TRACE_BEGIN       fprintf(stderr, "TRACE:%s ENTER\n", __func__);
+#define PGEN_TRACE_END         fprintf(stderr, "TRACE:%s LEAVE\n", __func__);
+
+#define PGEN_RET_IF(expr, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PGEN_DEBUG("[%s] Return, message "fmt, #expr, ##args );\
+                       return; \
+               } \
+       } while (0)
+
+#define PGEN_RETV_IF(expr, val, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PGEN_DEBUG("[%s] Return value, message "fmt, #expr, ##args );\
+                       return (val); \
+               } \
+       } while (0)
+
+#define PGEN_IF_FREE_MEM(mem) \
+       do { \
+               if(mem) { \
+                       free(mem); \
+                       mem = NULL; \
+               } \
+       } while (0)
+
+
+#elif defined PREVIEWGEN_DLOG_DEBUG
+/* standalone debugging with dlog */
+#undef LOG_TAG
+#define LOG_TAG "MOBILEPRINT_PREVIEWGEN"
+#include <dlog.h>
+
+#define PGEN_DEBUG     LOGD
+#define PGEN_INFO      LOGI
+#define PGEN_RET_IF(expr, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PGEN_DEBUG("[%s] Return, message "fmt, \
+                                       #expr, ##args ); \
+                       return; \
+               } \
+       } while (0)
+
+#define PGEN_RETV_IF(expr, val, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PGEN_DEBUG("[%s] Return value, message "fmt, \
+                                       #expr, ##args ); \
+                       return (val); \
+               } \
+       } while (0)
+
+#define PGEN_TRACE_BEGIN       PGEN_INFO("ENTER FUNCTION: %s\n", __FUNCTION__);
+#define PGEN_TRACE_END         PGEN_INFO("EXIT FUNCTION: %s\n", __FUNCTION__);
+
+#define PGEN_IF_FREE_MEM(mem) \
+       do { \
+               if(mem) { \
+                       free(mem); \
+                       mem = NULL; \
+               } \
+       } while (0)
+
+
+#else
+/* connection to mobileprint debugging */
+
+#include <pts_debug.h>
+
+#define PGEN_DEBUG(fmt, arg...)                PTS_DEBUG(fmt, ##arg)
+#define PGEN_TRACE_BEGIN               PTS_TRACE_BEGIN
+#define PGEN_TRACE_END                 PTS_TRACE_END
+#define PGEN_RET_IF                    PTS_RET_IF
+#define PGEN_RETV_IF                   PTS_RETV_IF
+#define PGEN_IF_FREE_MEM               PTS_IF_FREE_MEM
+
+#endif /* PREVIEWGEN_DEBUG */
+
+
+#endif /* _PGEN_DEBUG_H_INCLUDED_ */
+
diff --git a/mobileprint/previewgen/include/preview_coords.h b/mobileprint/previewgen/include/preview_coords.h
new file mode 100644 (file)
index 0000000..588f1f0
--- /dev/null
@@ -0,0 +1,77 @@
+/*
+*  Mobileprint
+*
+* 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 _PREVIEW_COORDS_H_INCLUDED_
+#define _PREVIEW_COORDS_H_INCLUDED_
+
+#include <previewgen.h>
+#include <paper_size.h>
+
+
+#define PAGE_SIDE_SHOW_COEFF   0.1
+#define MIN_PAGE_SPACE_COEFF   0.06
+
+
+struct preview_page_req {
+       //struct paper_size_pts paper_size;
+       struct size_pts paper_size;
+       struct size_px available_size_px;
+       //struct size_pts border_size;
+       struct size_px shadow_offset;
+       //int is_landscape;
+       int is_rotate90;
+       int is_grayscale;
+       //struct size_pts *parts;
+       //int parts_count;
+       //int n_up2; /* power of 2 for n-up */
+       //int is_borders; /* TODO: borders size */
+       //int is_original_zoom;
+       //int page; /* number of real page */
+};
+
+struct preview_page_px {
+       struct size_px full_size;
+       struct size_px paper_size;
+       struct size_px area_size;
+       struct size_px area_offset;
+       int is_grayscale;
+       int is_rotate90;
+       //int parts_count;
+};
+
+/* request for page with it's near parts */
+/*struct preview_settings_req {
+       struct preview_page_req page_req;
+};*/
+
+struct preview_settings_px {
+       struct preview_page_px page_px;
+       int center_off;
+       int left_off;
+       int right_off;
+       struct size_px full_size;
+};
+
+int get_preview_page_settings(const struct preview_page_req *req,
+                                                         struct preview_page_px *res);
+int get_preview_settings(const struct preview_page_req *req,
+                                                struct preview_settings_px *res);
+
+#endif /* _PREVIEW_COORDS_H_INCLUDED_ */
+
diff --git a/mobileprint/previewgen/include/preview_util.h b/mobileprint/previewgen/include/preview_util.h
new file mode 100644 (file)
index 0000000..ffe41eb
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+*  Mobileprint
+*
+* 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 _PREVIEW_UTIL_H_INCLUDED_
+#define _PREVIEW_UTIL_H_INCLUDED_
+
+#include <Evas.h>
+
+int get_image_resolution(const char *path, int *resx, int *resy);
+int rotate90_image(Evas_Object *img);
+
+#endif /* _PREVIEW_UTIL_H_INCLUDED_ */
diff --git a/mobileprint/previewgen/include/previewgen.h b/mobileprint/previewgen/include/previewgen.h
new file mode 100644 (file)
index 0000000..10e2351
--- /dev/null
@@ -0,0 +1,64 @@
+/*
+*  Mobileprint
+*
+* 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 _PREVIEWGEN_H_INCLUDED_
+#define _PREVIEWGEN_H_INCLUDED_
+
+
+#include <stdio.h>
+
+#include "paper_size.h"
+
+
+#define PDF_PAGE_MAX_VAL       999999
+#define PDF_PAGE_MAX_STR_LEN   (sizeof("999999") - 1)
+
+
+struct pdf_preview_settings {
+       int w;
+       int h;
+       int page; /* page from 1 */
+};
+
+enum file_type {
+       FILE_TYPE_IMAGE,
+       FILE_TYPE_PDF,
+       FILE_TYPE_INCORRECT
+};
+
+/* TODO: check for additional types */
+#define IMG_FILE_EXTS  {"png", "ppm", "jpg", "jpeg", "tif", "tiff", "gif", \
+               "bmp", "pcx", NULL}
+#define PDF_FILE_EXT   "pdf"
+
+#define PREVIEW_TEMP_DIR       "/tmp/mobileprint"
+#define IMG_TEMP_FILE_NAME     PREVIEW_TEMP_DIR "/out.ppm"
+#define PREVIEW_IMG_TEMP_FILE_NAME IMG_TEMP_FILE_NAME
+
+
+int is_page_landscape(struct size_pts *s);
+int get_pdf_page_size(const char *path, struct size_pts *s);
+int get_pdf_pages_count(const char *path);
+int get_pdf_preview(const char *path,
+                                       const struct pdf_preview_settings *settings,
+                                       void **out_img, int *size);
+enum file_type get_file_type(const char *fname);
+
+#endif /* _PREVIEWGEN_H_INCLUDED_ */
+
diff --git a/mobileprint/previewgen/lib/CMakeLists.txt b/mobileprint/previewgen/lib/CMakeLists.txt
new file mode 100644 (file)
index 0000000..77a877d
--- /dev/null
@@ -0,0 +1,16 @@
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/previewgen/include)
+
+FILE(GLOB SRCS *.c)
+
+#INCLUDE(FindPkgConfig)
+#pkg_check_modules(previewgen_pkgs REQUIRED dlog
+#                                              evas
+#                                              )
+#FOREACH(flag ${previewgen_pkgs_CFLAGS})
+#      SET(EXTRA_CFLAGS_PREVIEWGEN "${EXTRA_CFLAGS_PREVIEWGEN} ${flag}")
+#ENDFOREACH(flag)
+
+ADD_LIBRARY(previewgen ${SRCS})
+SET_TARGET_PROPERTIES(previewgen PROPERTIES COMPILE_FLAGS "${EXTRA_CFLAGS_PREVIEWGEN} -fpie")
+#TARGET_LINK_LIBRARIES(previewgen ${previewgen_pkgs_LDFLAGS})
+
diff --git a/mobileprint/previewgen/lib/evas_render.c b/mobileprint/previewgen/lib/evas_render.c
new file mode 100644 (file)
index 0000000..18667ab
--- /dev/null
@@ -0,0 +1,201 @@
+/*
+*  Mobileprint
+*
+* 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 <Evas.h>
+#include <Evas_Engine_Buffer.h>
+
+#include "paper_size.h"
+#include "pgen_debug.h"
+
+#include "evas_render.h"
+
+int init_buffer_canvas(Evas *canvas, const struct size_px *page_size)
+{
+       PGEN_TRACE_BEGIN;
+       Evas_Engine_Info_Buffer *einfo;
+       Eina_Bool ret;
+       int method;
+       void *pixels;
+       int width = page_size->x;
+       int height = page_size->y;
+
+       PGEN_RETV_IF(page_size == NULL || canvas == NULL, -1 , "Invalid argument");
+
+       method = evas_render_method_lookup("buffer");
+       PGEN_RETV_IF(method <= 0 , -1, "method is less than zero");
+
+       evas_output_method_set(canvas, method);
+       evas_output_size_set(canvas, width, height);
+       evas_output_viewport_set(canvas, 0, 0, width, height);
+       einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(canvas);
+       PGEN_RETV_IF(einfo == NULL, -1, "einfo is NULL");
+
+       PGEN_DEBUG("pixels malloc(%d) width %d height %d ",width*height*sizeof(int), width, height);
+       pixels = malloc(width * height * sizeof(int));
+       PGEN_RETV_IF(pixels == NULL, -1, "pixels is NULL");
+       memset(pixels, 0, width * height * sizeof(int));
+
+       einfo->info.depth_type = EVAS_ENGINE_BUFFER_DEPTH_ARGB32;
+       einfo->info.dest_buffer = pixels;
+       einfo->info.dest_buffer_row_bytes = width * sizeof(int);
+       einfo->info.use_color_key = 0;
+       einfo->info.alpha_threshold = 0;
+       einfo->info.func.new_update_region = NULL;
+       einfo->info.func.free_update_region = NULL;
+       ret = evas_engine_info_set(canvas, (Evas_Engine_Info *)einfo);
+       PGEN_RETV_IF(ret == EINA_FALSE, -1, "Failed to evas_engine_info_set");
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
+int init_temp_buffer_canvas(Evas *canvas)
+{
+       PGEN_RETV_IF(canvas == NULL, -1 , "Invalid argument");
+       struct size_px page_size = {100, 100};
+       return init_buffer_canvas(canvas, &page_size);
+}
+
+int reinit_buffer_canvas(Evas *canvas, const struct size_px *page_size)
+{
+       Evas_Engine_Info_Buffer *einfo;
+       void *oldbuf;
+
+       PGEN_RETV_IF(canvas == NULL || page_size == NULL, -1, "Invalid argument");
+
+       einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(canvas);
+       PGEN_RETV_IF(einfo == NULL, -1 , "einfo is NULL");
+
+       oldbuf = einfo->info.dest_buffer;
+       if (init_buffer_canvas(canvas, page_size) < 0) {
+               return -1;
+       }
+       //memcpy(einfo->info.dest_buffer, oldbuf, 100 * 100 * sizeof(int));
+       PGEN_IF_FREE_MEM(oldbuf);
+
+       return 0;
+}
+
+/**
+ * @brief      Provides Evas canvas based on memory buffer
+ *             (based on Evas usage example)
+ * @param[in]  page size in px
+ * @return     canvas based on memory buffer
+ */
+Evas *create_canvas(const struct size_px *page_size)
+{
+       PGEN_TRACE_BEGIN;
+       Evas *canvas;
+       PGEN_RETV_IF(page_size == NULL, NULL, "Invalid argument");
+
+       canvas = evas_new();
+       PGEN_RETV_IF(canvas == NULL, NULL, "canvas is NULL");
+
+       if (init_buffer_canvas(canvas, page_size) < 0) {
+               evas_free(canvas);
+               return NULL;
+       }
+
+       PGEN_TRACE_END;
+       return canvas;
+}
+
+void destroy_canvas(Evas *canvas)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RET_IF(canvas == NULL, "Invalid argument");
+
+       Evas_Engine_Info_Buffer *einfo;
+       einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(canvas);
+       if (!einfo) {
+               PGEN_DEBUG("ERROR: could not get evas engine info!\n");
+               evas_free(canvas);
+               return;
+       }
+       PGEN_IF_FREE_MEM(einfo->info.dest_buffer);
+       evas_free(canvas);
+
+       PGEN_TRACE_END;
+}
+
+/**
+ * @brief      Renders canvas (based on Evas usage example)
+ * @param[in]  canvas  canvas to render
+ */
+void draw_scene(Evas *canvas)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RET_IF(canvas == NULL, "Invalid argument");
+
+       Eina_List *updates;/*, *n;*/
+       /*Eina_Rectangle *update; */
+
+       /* render and get the updated rectangles: */
+       updates = evas_render_updates(canvas);
+
+       /* free list of updates */
+       evas_render_updates_free(updates);
+
+       PGEN_TRACE_END;
+}
+
+/**
+ * @brief      Saves canvas to specified image file in PPM format
+ *             (based on Evas usage example)
+ * @param[in]  canvas  canvas to save
+ * @param[in]  dest    output PPM file name
+ */
+void save_scene(Evas *canvas, const char *dest)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RET_IF(canvas == NULL || dest == NULL, "Invalid argument");
+
+       Evas_Engine_Info_Buffer *einfo;
+       const unsigned int *pixels, *pixels_end;
+       int width, height;
+       FILE *f;
+
+       einfo = (Evas_Engine_Info_Buffer *)evas_engine_info_get(canvas);
+       PGEN_RET_IF(einfo == NULL, "einfo is NULL");
+
+       evas_output_size_get(canvas, &width, &height);
+       f = fopen(dest, "wb+");
+       PGEN_RET_IF(f == NULL, "ERROR: could not open for writing '%s': %s",dest, strerror(errno));
+
+       pixels = einfo->info.dest_buffer;
+       pixels_end = pixels + (width * height);
+
+       /* PPM P6 format is dead simple to write: */
+       fprintf(f, "P6\n%d %d\n255\n",  width, height);
+       for (; pixels < pixels_end; pixels++) {
+               int r, g, b;
+
+               r = ((*pixels) & 0xff0000) >> 16;
+               g = ((*pixels) & 0x00ff00) >> 8;
+               b = (*pixels) & 0x0000ff;
+
+               fprintf(f, "%c%c%c", r, g, b);
+       }
+
+       fclose(f);
+       PGEN_DEBUG("saved scene as '%s'\n", dest);
+
+       PGEN_TRACE_END;
+}
+
diff --git a/mobileprint/previewgen/lib/image_scaler.c b/mobileprint/previewgen/lib/image_scaler.c
new file mode 100644 (file)
index 0000000..91ff2c4
--- /dev/null
@@ -0,0 +1,101 @@
+/*
+*  Mobileprint
+*
+* 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.h>
+#include <Evas.h>
+
+#include "evas_render.h"
+#include "paper_size.h"
+#include "pgen_debug.h"
+#include "preview_util.h"
+
+#include "image_scaler.h"
+
+#define DOWNSCALE_LEVEL        2
+
+int downscale_image(const char *fname, const char *outfname_ppm,
+                                       const struct size_px *available_size)
+{
+       Evas *canvas;
+       Evas_Object *img;
+       int rw, rh;
+       struct size_pts rsize;
+       struct size_px pic_size = {400, 400};
+       struct size_px size_limits;
+
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(fname == NULL || outfname_ppm == NULL || available_size == NULL, -1, "Invalid argument");
+
+       PGEN_DEBUG("available_size(%d,%d)",available_size->x, available_size->y);
+
+       size_limits.x = available_size->x / DOWNSCALE_LEVEL;
+       size_limits.y = available_size->y / DOWNSCALE_LEVEL;
+
+       if (get_image_resolution(fname, &rw, &rh) < 0) {
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       PGEN_RETV_IF(rw <= 0 || rh <= 0, -1, "Failed to get resolution");
+
+       rsize.x = rw;
+       rsize.y = rh;
+       PGEN_DEBUG("size_limits before: (%d, %d)",
+                          size_limits.x, size_limits.y);
+       if (rsize.x > rsize.y) {
+               if (size_limits.x < size_limits.y) {
+                       switch_size_px_coords(&size_limits);
+               }
+       } else if (size_limits.x > size_limits.y) {
+               switch_size_px_coords(&size_limits);
+       }
+       PGEN_DEBUG("size_limits after: (%d, %d)",
+                          size_limits.x, size_limits.y);
+       pts_size2px(&rsize, &size_limits, &pic_size);
+
+       PGEN_DEBUG("new canvas");
+       PGEN_DEBUG("canvas init, (%d; %d)", pic_size.x, pic_size.y);
+
+       canvas = create_canvas(&pic_size);
+       PGEN_RETV_IF(canvas == NULL, -1, "canvas is NULL");
+
+       /*PGEN_DEBUG("new image");*/
+       img = evas_object_image_filled_add(canvas);
+       if (NULL == img) {
+               destroy_canvas(canvas);
+               PGEN_TRACE_END;
+               return -1;
+       }
+       /*PGEN_DEBUG("setting image file %s", fname);*/
+       evas_object_image_file_set(img, fname, NULL);
+
+       evas_object_resize(img, pic_size.x, pic_size.y);
+       evas_object_move(img, 0, 0);
+       evas_object_show(img);
+
+       /*PGEN_DEBUG("canvas draw");*/
+       draw_scene(canvas);
+       /*PGEN_DEBUG("saving canvas in %s", outfname_ppm);*/
+       save_scene(canvas, outfname_ppm);
+       destroy_canvas(canvas);
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
diff --git a/mobileprint/previewgen/lib/page_preview.c b/mobileprint/previewgen/lib/page_preview.c
new file mode 100644 (file)
index 0000000..d05d168
--- /dev/null
@@ -0,0 +1,661 @@
+/*
+*  Mobileprint
+*
+* 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 <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <Ecore.h>
+#include <Evas.h>
+/*#include <Evas_Engine_Buffer.h>*/
+
+#include <evas_render.h>
+#include <image_scaler.h>
+#include <paper_size.h>
+#include <pgen_debug.h>
+#include <preview_util.h>
+
+#include <page_preview.h>
+
+const int gl_is_image_downscale = 1;
+const int gl_is_half_pdf_raster = 1;
+
+/**
+ * @brief      Get PDF page content image
+ * @param[in]  canvas          canvas of new image object
+ * @param[in]  img_buf
+ * @param[in]  img_size
+ * @return     image object with page content image
+ */
+Evas_Object *get_pdf_img(Evas *canvas,
+                                                void *img_buf, int img_size)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(canvas == NULL || img_buf == NULL || img_size <= 0, NULL, "Invalid argument");
+
+       Evas_Object *img = NULL;
+       img = evas_object_image_filled_add(canvas);
+       evas_object_image_memfile_set(img, img_buf, img_size,"ppm", NULL);
+       PGEN_IF_FREE_MEM(img_buf); /* copy saved in image */
+
+       PGEN_TRACE_END;
+       return img;
+}
+
+/**
+ * @brief      Grayscales provided RGBA pixel
+ * @param[in]  rgba_val        pixel to grayscale
+ * @result     grayscaled pixel
+ */
+inline int grayscale_rgba(int rgba_val)
+{
+       /* just sumple formula for sRGB conversion, maybe gamma-correction
+          or color profile using is required */
+       unsigned char *bytes = (unsigned char *)&rgba_val;
+       double res = 0.21 * bytes[0] + 0.72 * bytes[1] + 0.07 * bytes[2];
+       int i;
+
+       for (i = 0; i < 3; ++i) {
+               bytes[i] = (unsigned char)res;
+       }
+
+       return rgba_val;
+}
+
+/**
+ * @brief      Grayscales image
+ * @param[in]  img     image to grayscale
+ */
+void grayscale_img(Evas_Object *img)
+{
+       int h;
+       int w;
+       int i;
+       int *data;
+
+       PGEN_TRACE_BEGIN;
+       PGEN_RET_IF(img == NULL, "Invalid argument");
+
+       evas_object_image_size_get(img, &w, &h);
+       PGEN_RET_IF(w == 0 || h == 0 , "can't get (w, h)");
+       PGEN_DEBUG("grayscale_img(): size: (%d, %d)", w, h);
+
+       data = evas_object_image_data_get(img, EINA_TRUE);
+       PGEN_RET_IF(data == NULL, "can't get data");
+
+       for (i = 0; i < w * h; ++i) {
+               data[i] = grayscale_rgba(data[i]);
+       }
+       evas_object_image_data_set(img, data);
+
+       PGEN_TRACE_END;
+}
+
+int set_canvas_background(Evas *canvas, const struct size_px *full_size)
+{
+       Evas_Object *bg;
+
+       PGEN_RETV_IF(canvas == NULL || full_size == NULL, -1, "Invalid argument");
+
+       /* background */
+       bg = evas_object_rectangle_add(canvas);
+       //evas_object_color_set(bg, 242, 238, 233, 255);
+       //evas_object_color_set(bg, 255, 255, 255, 255);
+       evas_object_color_set(bg, 0, 0, 0, 255);
+       evas_object_move(bg, 0, 0);
+       evas_object_resize(bg, full_size->x, full_size->y);
+       evas_object_show(bg);
+
+       return 0;
+}
+
+/**
+ * @brief              Set blank preview page image on provided canvas
+ * @param[in-out]      canvas          Canvas to draw page image
+ * @param[in]          b_s             Full page image size (with shadow,
+ *                                      border)
+ * @param[in]          p_s             Page size (to put page image)
+ * @param[in]          border_size     Page border size
+ * @param[in]          off             Page image offset on canvas
+ * @result             Error code, 0 is OK, <0 - error
+ */
+int set_preview_page(Evas *canvas,
+                                        const struct size_px *b_s, const struct size_px *p_s,
+                                        const struct size_px *border_size,
+                                        const struct size_px *off)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(canvas == NULL || b_s == NULL || p_s == NULL || off == NULL, -1 , "Invalid argument");
+
+       Evas_Object *bg;
+       int shadow_offset_x;
+       int shadow_offset_y;
+
+       shadow_offset_x = (b_s->x - p_s->x);
+       shadow_offset_y = (b_s->y - p_s->y);
+
+       bg = evas_object_rectangle_add(canvas);
+       evas_object_color_set(bg, 50, 50, 50, 255); /* shadow color */
+       evas_object_move(bg, shadow_offset_x + off->x - border_size->x * 2,
+                                        shadow_offset_y + off->y - border_size->y * 2);
+       evas_object_resize(bg, p_s->x + border_size->x,
+                                          p_s->y + border_size->y);
+       evas_object_show(bg);
+
+       bg = evas_object_rectangle_add(canvas);
+       evas_object_color_set(bg, 0, 0, 0, 255); /* border color */
+       evas_object_move(bg, off->x, off->y);
+       evas_object_resize(bg, p_s->x + border_size->x * 2,
+                                          p_s->y + border_size->y * 2);
+       evas_object_show(bg);
+
+       bg = evas_object_rectangle_add(canvas);
+       evas_object_color_set(bg, 255, 255, 255, 255); /* page color */
+       evas_object_move(bg, border_size->x + off->x, border_size->y + off->y);
+       evas_object_resize(bg, p_s->x, p_s->y);
+       evas_object_show(bg);
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
+int load_pdf_page_img(const char *fname, int page,
+                                         const struct preview_page_px *settings_px,
+                                         void **out_img, int *size)
+{
+       struct pdf_preview_settings pdf_settings;
+       PGEN_RETV_IF(fname == NULL || page <= 0  || settings_px == NULL || out_img == NULL || size == NULL
+                               , -1 , "Invalid argument");
+
+       /* put page image */
+       pdf_settings.w = settings_px->area_size.x;
+       pdf_settings.h = settings_px->area_size.y;
+       if (gl_is_half_pdf_raster) {
+               /* half-rasterization hack is used to increase speed */
+               pdf_settings.w = pdf_settings.w / 2;
+               pdf_settings.h = pdf_settings.h / 2;
+       }
+       pdf_settings.page = page;
+
+       return get_pdf_preview(fname, &pdf_settings, out_img, size);
+}
+
+/**
+ *
+ *
+ *
+ */
+int set_pdf_preview_page_image(Evas *canvas,
+                                                          void *img_buf, int img_size,
+                                                          const struct size_px *off,
+                                                          const struct preview_page_px *settings_px)
+{
+       PGEN_RETV_IF(canvas == NULL || img_buf == NULL || img_size <=0 || off == NULL || settings_px == NULL
+                               , -1 , "Invalid argument");
+
+       Evas_Object *img;
+       struct size_px border_size = {1, 1};
+
+       if (set_preview_page(canvas, &(settings_px->full_size),
+                                                &(settings_px->paper_size), &border_size, off) < 0) {
+               PGEN_DEBUG("ERROR in set_preview_page()");
+               return -1;
+       }
+
+       img = get_pdf_img(canvas, img_buf, img_size);
+       PGEN_RETV_IF(img == NULL, -1 , "img is NULL");
+
+       if (settings_px->is_rotate90
+                       && rotate90_image(img) < 0) {
+               PGEN_DEBUG("ERROR in rotate90_image()");
+               return -1;
+       }
+       evas_object_resize(img, settings_px->area_size.x,
+                                          settings_px->area_size.y);
+       if (settings_px->is_grayscale) {
+               PGEN_DEBUG("Grayscaling image");
+               grayscale_img(img);
+       }
+
+       evas_object_move(img, settings_px->area_offset.x + off->x,
+                                        settings_px->area_offset.y + off->y);
+       evas_object_show(img);
+
+       return 0;
+}
+
+
+/**
+ * @brief      Writes preview page images to file
+ * @param[in]  pdf_fname       input PDF file name
+ * @param[in]  page_num        page number
+ * @param[in]  settings_pts    preview generation settings
+ * @param[in]  out_pic_fname   output image file name (PPM)
+ * @return     -1              error
+ *             0               OK
+ */
+int save_pdf_preview_page_image(const char *pdf_fname, int page_num,
+                                                               const struct preview_page_req *settings_pts,
+                                                               const char *out_pic_fname)
+{
+       Evas *canvas;
+       struct preview_page_px settings_px;
+       struct size_px off = {0, 0};
+       void *img_buf;
+       int img_size;
+
+       PGEN_TRACE_BEGIN;
+
+       if (get_preview_page_settings(settings_pts, &settings_px) < 0) {
+               PGEN_DEBUG("ERROR: get_pdf_preview_page_image():"
+                                  " get_preview_page_settings()");
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       canvas = create_canvas(&(settings_px.full_size));
+       PGEN_RETV_IF(canvas == NULL, -1, "canvas is NULL");
+
+       /* till we save page images in PPM this is required */
+       if (set_canvas_background(canvas, &(settings_px.full_size)) < 0) {
+               PGEN_DEBUG("ERROR in set_canvas_background()");
+               destroy_canvas(canvas);
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       if (load_pdf_page_img(pdf_fname, page_num, &settings_px,
+                                                 &img_buf, &img_size) < 0) {
+               destroy_canvas(canvas);
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       PGEN_RETV_IF(img_buf == NULL, -1, "img_buf is NULL");
+       if (set_pdf_preview_page_image(canvas, img_buf, img_size,
+                                                                  &off, &settings_px) < 0) {
+               PGEN_DEBUG("ERROR in set_pdf_preview_page_image()");
+               destroy_canvas(canvas);
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       draw_scene(canvas);
+       save_scene(canvas, out_pic_fname);
+       destroy_canvas(canvas);
+
+       PGEN_TRACE_END;
+
+       return 0;
+}
+
+
+int save_empty_preview_page_image(const struct preview_page_req *settings_pts,
+                               const char *out_pic_fname)
+{
+       Evas *canvas;
+       struct preview_page_px settings_px;
+       struct size_px off = {0, 0};
+       struct size_px border_size = {1, 1};
+
+       PGEN_TRACE_BEGIN;
+
+       if (get_preview_page_settings(settings_pts, &settings_px) < 0) {
+               PGEN_DEBUG("ERROR: get_pdf_preview_page_image():"
+                                  " get_preview_page_settings()");
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       canvas = create_canvas(&(settings_px.full_size));
+       PGEN_RETV_IF(canvas == NULL, -1, "canvas is NULL");
+
+       /* till we save page images in PPM this is required */
+       if (set_canvas_background(canvas, &(settings_px.full_size)) < 0) {
+               PGEN_DEBUG("ERROR in set_canvas_background()");
+               destroy_canvas(canvas);
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       if (set_preview_page(canvas, &(settings_px.full_size),
+                        &(settings_px.paper_size), &border_size, &off) < 0) {
+               PGEN_DEBUG("ERROR in set_preview_page()");
+               destroy_canvas(canvas);
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       draw_scene(canvas);
+       save_scene(canvas, out_pic_fname);
+       destroy_canvas(canvas);
+
+       PGEN_TRACE_END;
+
+       return 0;
+}
+
+
+/* fix pdftopdf page rotation problem by manual scaling option */
+int fix_pdf_page_scale(const char *fname,
+                                          const struct size_pts *req_size,
+                                          struct pdfgen_settings *settings)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(NULL == fname || NULL == req_size || NULL == settings, -1, "Invalid argument");
+
+       struct size_pts input_pdf_pts = {0.0, };
+
+       int result = get_pdf_page_size(fname, &input_pdf_pts);
+       PGEN_RETV_IF(result < 0, -1, "can't get pdf page size");
+
+       /* check rotation */
+       if ((PAGE_ORIENTATION_LANDSCAPE == settings->orientation
+                       && input_pdf_pts.x < input_pdf_pts.y)
+                       || (PAGE_ORIENTATION_PORTRAIT == settings->orientation
+                               && input_pdf_pts.x > input_pdf_pts.y)) {
+               double tmp = input_pdf_pts.x;
+               input_pdf_pts.x = input_pdf_pts.y;
+               input_pdf_pts.y = tmp;
+
+               /*when page is rotated we need to fix its size
+                 if source page is small and desired is big, then enlarge
+                 if source is big and desired is small, diminish*/
+               int zoomHorizontal =
+                       (int)(100 * req_size->x / input_pdf_pts.x);
+               int zoomVertical =
+                       (int)(100 * req_size->y / input_pdf_pts.y);
+
+               /* minimal zoom is needed from vertical/horizontal
+                  - for the whole picture fitness */
+               settings->scale.zoom = (zoomHorizontal < zoomVertical)
+                                                          ? zoomHorizontal : zoomVertical;
+               settings->scale.type = SCALE_RELATIVE;
+       }
+       settings->scale.w = 0;
+       settings->scale.h = 0;
+
+       PGEN_DEBUG("page zoom fix calculated");
+       PGEN_DEBUG("input_pdf_size (x,y) = (%lf, %lf)",
+                          input_pdf_pts.x, input_pdf_pts.y);
+       PGEN_DEBUG("req_size (x,y) = (%lf, %lf)",
+                          req_size->x, req_size->y);
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
+
+/**
+ * @brief      Generates preview images for all PDF pages in temporary files
+ *             (/tmp/mobileprint_xxxx.ppm)
+ * @param[in]  fname                   PDF file name
+ * @param[in]  paper_size              paper size in pts
+ * @param[in]  available_size_px       available size for images in px
+ * @param[in]  is_grayscale            is image must be grascaled
+ * @return     -1                      error
+ *             > 0                     generated pages count
+ */
+int generate_pdf_preview_pages(const char *fname,
+               const struct size_pts *paper_size,
+               const struct size_px *available_size_px,
+               int is_grayscale)
+{
+       int pages_count;
+       int cur_page;
+       struct size_pts page_size = {0.0, 0.0};
+
+       struct size_px shadow_size_px = {10, 10};
+       struct preview_page_req settings_req;
+       /*struct preview_settings_px settings_px;*/
+       char out_fname[sizeof("/tmp/mobileprint_xxxx.ppm ")];
+
+       PGEN_TRACE_BEGIN;
+
+       /*PGEN_DEBUG("available_size: (%d, %d)",
+                       available_size_px->x, available_size_px->y);*/
+
+
+       if (get_pdf_page_size(fname, &page_size) < 0) {
+               PGEN_DEBUG("ERROR in get_pdf_page_size()\n");
+               return -1;
+       }
+       pages_count = get_pdf_pages_count(fname);
+       if (pages_count <= 0) {
+               PGEN_DEBUG("ERROR: pages_count = %d (<=0)\n", pages_count);
+               return -1;
+       }
+
+       settings_req.paper_size = *paper_size;
+       settings_req.available_size_px = *available_size_px;
+       settings_req.shadow_offset = shadow_size_px;
+       settings_req.is_rotate90 = 0;
+       settings_req.is_grayscale = is_grayscale;
+
+       /*if (get_preview_settings(&settings_req, &settings_px) < 0) {
+               PGEN_DEBUG("ERROR in get_preview_settings()");
+               PGEN_TRACE_END;
+               return -1;
+       }*/
+
+       for (cur_page = 0; cur_page < pages_count; ++cur_page) {
+               snprintf(out_fname, sizeof(out_fname), "/tmp/mobileprint_%04d.ppm", cur_page + 1);
+               save_pdf_preview_page_image(fname,
+                               cur_page + 1, &settings_req,
+                               out_fname);
+       }
+
+       PGEN_TRACE_END;
+       return pages_count;
+}
+
+
+/**
+ * @brief      Process PDF preview generation with CUPS filters to PDF with
+ *             specific options
+ * @param[in]  fname                   input PDF file name
+ * @param[in]  printer_ppd_fname       PPD file name for current active printer
+ * @param[in]  paper_size              paper size with CUPS name
+ * @param[in]  orientation             requested printing orientation
+ * @param[in]  n_up                    number-up
+ * @param[in]  scale                   scaling of image
+ * @param[in]  is_grayscale            image must be grascaled
+ * @return     -1                      error
+ *             0                       success
+ */
+int pdf2pdf_preview_pages(const char *fname, const char *out_pdf_fname,
+                                                 const char *printer_ppd_fname,
+                                                 const struct paper_size_pts *paper_size,
+                                                 enum page_orientation orientation, int n_up,
+                                                 const struct page_scale *scale, int is_grayscale)
+{
+       struct pdfgen_settings pg_settings;
+
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(!fname || !scale, -1, "Invalid argument");
+       PGEN_DEBUG("processing file name: %s", fname);
+
+       /* generate result pdf */
+       pg_settings.n_up = n_up;
+       pg_settings.paper_name = paper_size->name;
+       pg_settings.scale = *scale;
+       pg_settings.orientation = orientation;
+       pg_settings.ppd_filename = (char *)printer_ppd_fname;
+
+       int result = fix_pdf_page_scale(fname, &(paper_size->s), &pg_settings);
+       PGEN_RETV_IF(result < 0, -1, "ERROR in fix_pdf_page_scale()");
+
+       PGEN_DEBUG("pg_settings.paper_name = %s", pg_settings.paper_name);
+       PGEN_DEBUG("pg_settings.orientation = %d",
+                          (int)pg_settings.orientation);
+       PGEN_DEBUG("pg_settings.scale.zoom = %d", pg_settings.scale.zoom);
+       PGEN_DEBUG("pg_settings.scale.type = %d",
+                          (int)pg_settings.scale.type);
+
+       result = call_pdftopdf(fname, out_pdf_fname, &pg_settings);
+       PGEN_RETV_IF(result < 0, -1, "ERROR in call_pdftopdf()");
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
+
+/**
+ * @brief      Process PDF preview generation with CUPS filters into temporary
+ *             pages image files (/tmp/mobileprint_xxxx.ppm)
+ * @param[in]  fname                   input PDF file name
+ * @param[in]  paper_size              paper size with CUPS name
+ * @param[in]  available_size_px       available size for image in px
+ * @param[in]  orientation             requested printing orientation
+ * @param[in]  n_up                    number-up
+ * @param[in]  scale
+ * @param[in]  is_grayscale            image must be grascaled
+ * @return     -1                      error
+ *             > 0                     generated pages count
+ */
+int get_pdf_preview_pages(const char *fname, const char *out_pdf_fname,
+               const char *printer_ppd_fname,
+               const struct paper_size_pts *paper_size,
+               const struct size_px *available_size_px,
+               enum page_orientation orientation,
+               int n_up, const struct page_scale *scale, int is_grayscale)
+{
+       int res;
+       PGEN_TRACE_BEGIN;
+       pdf2pdf_preview_pages(fname, out_pdf_fname, printer_ppd_fname,
+                       paper_size, orientation,
+                       n_up, scale, is_grayscale);
+
+       res = generate_pdf_preview_pages(TEMP_PDFTOPDF_FNAME,
+                       &(paper_size->s), available_size_px,
+                       is_grayscale);
+       PGEN_TRACE_END;
+       return res;
+}
+
+
+int process_image_downscale(const char *fname, const char *out_fname,
+                                                       const struct size_px *available_size_px)
+{
+       struct size_px new_size;
+       PGEN_RETV_IF(fname == NULL || out_fname == NULL || available_size_px == NULL, -1, "Invalid argument");
+       new_size.x = available_size_px->x / 2;
+       new_size.y = available_size_px->y / 2;
+       downscale_image(fname, out_fname, &new_size);
+       return 0;
+}
+
+int img2pdf_preview_pages(const char *fname, const char *out_pdf_fname,
+                                                 const char *printer_ppd_fname,
+                                                 const struct paper_size_pts *paper_size,
+                                                 const struct size_px *available_size_px,
+                                                 enum page_orientation orientation, int n_up,
+                                                 const struct page_scale *scale, int is_grayscale)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(!fname || !out_pdf_fname || !printer_ppd_fname ||
+                               !paper_size || !available_size_px || !scale,
+                               -1, "Invalid argument");
+
+       struct pdfgen_settings pg_settings;
+
+       /* generate result pdf */
+
+       /* TODO: use pdfunite for multiple files, currently only first file */
+       pg_settings.n_up = n_up;
+       pg_settings.paper_name = paper_size->name;
+       pg_settings.scale = *scale;
+       pg_settings.orientation = orientation;
+       pg_settings.ppd_filename = (char *)printer_ppd_fname;
+
+       int result = call_imagetopdf(fname, out_pdf_fname, &pg_settings);
+       PGEN_RETV_IF(result < 0, -1, "ERROR in call_imagetopdf()");
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
+
+int img_files2pdf_preview_pages(char **const fnames,
+               int files_count,
+               const char *out_pdf_fname,
+               const char *printer_ppd_fname,
+               const struct paper_size_pts *paper_size,
+               const struct size_px *available_size_px,
+               enum page_orientation orientation, int n_up,
+               const struct page_scale *scale, int is_grayscale)
+{
+       int i;
+       struct pdfgen_settings pg_settings;
+       int out_fname_size = sizeof(PREVIEW_TEMP_DIR "/mobileprint_xxxx.pdf ");
+       int res;
+       char **out_fnames;
+       char *cur_fname;
+       int is_err = 0;
+       PGEN_TRACE_BEGIN;
+
+       PGEN_RETV_IF(files_count <= 0 || files_count > 9999,
+                       -1, "Incorrect files_count");
+
+       pg_settings.n_up = 1; /* TODO: n_up */
+       pg_settings.paper_name = paper_size->name;
+       pg_settings.scale = *scale;
+       pg_settings.orientation = orientation;
+       pg_settings.ppd_filename = (char *)printer_ppd_fname;
+
+       /* generate images pdf files and their files list */
+       out_fnames = (char **)malloc(sizeof(char*) * (files_count + 1));
+       PGEN_RETV_IF(NULL == out_fnames, -1, "Out of memory");
+       memset(out_fnames, 0, sizeof(char*) * (files_count + 1));
+       for (i = 0; i < files_count; ++i) {
+               cur_fname = (char*)malloc(
+                               sizeof(char) * (out_fname_size + 1));
+               if (NULL == cur_fname) {
+                       is_err = 1;
+                       break;
+               }
+               out_fnames[i] = cur_fname;
+               cur_fname[out_fname_size] = '\0';
+               snprintf(cur_fname, out_fname_size,
+                               PREVIEW_TEMP_DIR "/mobileprint_%04d.pdf",
+                               i + 1);
+               res = call_imagetopdf(fnames[i], cur_fname, &pg_settings);
+               PGEN_DEBUG("res = %d, i = %d", res, i);
+       }
+
+       /* connect images pdf files into one file */
+       if (!is_err)
+               res = call_pdfunite(out_fnames, out_pdf_fname);
+
+       /* free allocated memory */
+       for (i = 0; i < files_count; ++i)
+               PGEN_IF_FREE_MEM(out_fnames[i]);
+       PGEN_IF_FREE_MEM(out_fnames);
+       if (is_err)
+               PGEN_RETV_IF(1, -1, "Out of memory");
+
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
diff --git a/mobileprint/previewgen/lib/paper_size.c b/mobileprint/previewgen/lib/paper_size.c
new file mode 100644 (file)
index 0000000..b951871
--- /dev/null
@@ -0,0 +1,142 @@
+/*
+*  Mobileprint
+*
+* 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 <string.h>
+
+#include "pgen_debug.h"
+
+#include "paper_size.h"
+
+
+/* could be used as stub for paper size */
+struct paper_size_pts paper_sizes[] = {
+       {"L", {890,1270}},
+       {"2L", {1270,1780}},
+       {"Hagaki_Postcard", {1000,1480}},
+       {"Business_card", {540,856}},
+       {"4x6", {1016,1524}},
+       {"8x10", {2032,2540}},
+       {"Letter", { 612, 792 }},
+       {"11x17", {2794,4318}},
+       {"A4", { 595, 842 }},
+       {"A5", { 420, 595 }},
+       {"B5", { 516, 729 }},
+       {NULL, { 0, 0 }}
+};
+
+
+void switch_size_pts_coords(struct size_pts *s)
+{
+       PGEN_RET_IF(s == NULL, "Invalid argument");
+       double val;
+       val = s->x;
+       s->x = s->y;
+       s->y = val;
+}
+
+void switch_size_px_coords(struct size_px *s)
+{
+       PGEN_RET_IF(s == NULL, "Invalid argument");
+       int val;
+       val = s->x;
+       s->x = s->y;
+       s->y = val;
+}
+
+void add_size_pts(const struct size_pts *from, struct size_pts *to)
+{
+       PGEN_RET_IF(from == NULL || to == NULL, "Invalid argument");
+       to->x += from->x;
+       to->y += from->y;
+}
+
+
+void neg_size_pts(struct size_pts *s)
+{
+       PGEN_RET_IF(s == NULL, "Invalid argument");
+       s->x = -s->x;
+       s->y = -s->y;
+}
+
+
+/**
+ * @brief      Works with fixed list of sizes!
+ *              In mobileprint only for usage as stub.
+ * @param[in]  name    paper name
+ * @param[out] s       paper size
+ */
+int get_paper_size_pts(const char *name, struct paper_size_pts *s)
+{
+       int i;
+       struct paper_size_pts *cur_s;
+
+       PGEN_RETV_IF(name == NULL || s == NULL, -1, "Invalid argument");
+
+       for (i = 0; paper_sizes[i].name != NULL; ++i) {
+               cur_s = &(paper_sizes[i]);
+               /* call without of limit is safe till we have static page
+                  sizes */
+               if (strcmp(cur_s->name, name) == 0) {
+                       //memcpy(s, cur_s, sizeof(*cur_s));
+                       *s = *cur_s;
+                       return 0;
+               }
+       }
+
+       return 1;
+}
+
+
+/**
+ * @brief                      get raster size for specifyed borders
+ * @param[in]  s_pts           size in points
+ * @param[in]  border_s_px     specified borders of available size
+ * @param[out] px              raster size
+ */
+int pts_size2px(const struct size_pts *s_pts,
+                               const struct size_px *border_s_px,
+                               struct size_px *px)
+{
+       PGEN_TRACE_BEGIN;
+
+       double ratio_x;
+       double ratio_y;
+
+       PGEN_RETV_IF(s_pts == NULL || border_s_px == NULL || px == NULL, -1 , "Invalid argument");
+
+       ratio_x = border_s_px->x / s_pts->x;
+       ratio_y = border_s_px->y / s_pts->y;
+
+       /* get smallest one */
+       if (ratio_x > ratio_y) {
+               ratio_x = ratio_y;
+       } else {
+               ratio_y = ratio_x;
+       }
+
+       /* result */
+       px->x = ratio_x * s_pts->x;
+       px->y = ratio_y * s_pts->y;
+
+       PGEN_DEBUG("px->x px->y :(%d, %d)",px->x, px->y);
+       PGEN_TRACE_END;
+       return 0;
+}
+
diff --git a/mobileprint/previewgen/lib/pdfgen.c b/mobileprint/previewgen/lib/pdfgen.c
new file mode 100644 (file)
index 0000000..c073164
--- /dev/null
@@ -0,0 +1,237 @@
+/*
+*  Mobileprint
+*
+* 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 <string.h>
+
+#include "pgen_debug.h"
+#include "previewgen.h"
+#include "preview_util.h"
+
+#include "pdfgen.h"
+
+
+#define CUPS_OPTION_PORTRAIT   "orientation-requested=3"
+#define CUPS_OPTION_LANDSCAPE  "orientation-requested=4"
+
+#define CUPS_FILTER_DIR                "/usr/lib/cups/filter"
+
+#define PPI_MAX_VAL            10000
+#define PPI_STR_MAX_LEN                sizeof("10000")
+
+#define PDFGEN_CMDSTR_MAXLEN   1024
+
+#define PDFUNITE_PATH          "/usr/bin/pdfunite"
+
+/**
+ * @brief      This function securely executes cmd line request with popen
+ * @param[in]  cmd_str        command line to execute
+ * @return     0       success
+ *             -1      error
+ */
+int call_cmd(const char *cmd_str)
+{
+       PGEN_TRACE_BEGIN;
+
+       //NOTICE : Use popen or fork/execv function instead of system() which has security hole.
+
+       FILE *cmd_output = popen(cmd_str, "r");
+       if (cmd_output == NULL) {
+               PGEN_DEBUG("popen error (%s)", cmd_str);
+               PGEN_TRACE_END;
+               return -1;
+       }
+
+       char *str_buf = NULL;
+       size_t len = 0;
+       ssize_t read_len = 0;
+
+       do {
+               read_len = getline(&str_buf, &len, cmd_output);
+       } while (read_len != -1);
+
+       PGEN_IF_FREE_MEM(str_buf);
+       pclose(cmd_output);
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
+/**
+ * @brief      This function forms and executes cmd line request to CUPS
+ *             pdftopdf filter to convert PDF file
+ * @param[in]  path            path to destination PDF file
+ * @param[in]  outfile         destination file name
+ * @param[in]  settings        several settings of generating PDF
+ * @return     0       success
+ *             -1      error
+ */
+int call_pdftopdf(const char *infile, const char *outfile,
+                                 const struct pdfgen_settings *settings)
+{
+       PGEN_TRACE_BEGIN;
+
+       PGEN_RETV_IF(infile == NULL || outfile == NULL || settings == NULL || settings->ppd_filename == NULL,
+                               -1, "Invalid argument");
+
+       int err_code = 0;
+       char cmd_str[1024];
+
+       /* placing n_up number of pages on the specified media */
+       snprintf(cmd_str, 1024, "PPD=%s " CUPS_FILTER_DIR "/pdftopdf job user title 1 \"%s number-up=%d PageSize=%s fit-to-page=True pdftopdfAutoRotate=false\" \"%s\""
+                        " >%s 2> " PREVIEW_TEMP_DIR "/errlog",
+                        settings->ppd_filename,
+                        PAGE_ORIENTATION_PORTRAIT == settings->orientation ? CUPS_OPTION_PORTRAIT :
+                        PAGE_ORIENTATION_LANDSCAPE == settings->orientation ? CUPS_OPTION_LANDSCAPE : "",
+                        settings->n_up,
+                        settings->paper_name, infile, outfile);
+
+       PGEN_DEBUG("call_pdftopdf(): %s", cmd_str);
+       err_code = call_cmd(cmd_str);
+       PGEN_RETV_IF(err_code, -1, "call_pdftopdf returned non-zero error code");
+
+       PGEN_TRACE_END;
+       return err_code;
+}
+
+
+int strcat_img_scale_option(char *res, const char *img_path,
+               const struct page_scale *scale)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(res == NULL , -1 , "res is NULL");
+       PGEN_RETV_IF(img_path == NULL , -1 , "img_path is NULL");
+       PGEN_RETV_IF(scale == NULL , -1 , "scale is NULL");
+       //PGEN_RETV_IF(scale->w == 0 , -1 , "scale->w is 0");
+
+       int imgw;
+       int imgh;
+       int ppi;
+       char ppi_str[PPI_STR_MAX_LEN + 1];
+       int result;
+
+       switch (scale->type) {
+       case SCALE_FIT_TO_PAPER:
+               strcat(res, "fit-to-page=true");
+               return 0;
+       case SCALE_ORIGINAL:
+               strcat(res, "scaling=100");
+               return 0;
+       case SCALE_CUSTOM:
+               break;
+       }
+
+       result = get_image_resolution(img_path, &imgw, &imgh);
+       PGEN_RETV_IF(result < 0, -1 , "Can't get resolution");
+
+       ppi = (double)imgw / scale->w;
+       PGEN_RETV_IF(ppi >= PPI_MAX_VAL, -1 , "Resolution is too big");
+
+       snprintf(ppi_str, PPI_STR_MAX_LEN, "%d", ppi);
+       ppi_str[PPI_STR_MAX_LEN] = '\0';
+       strcat(res, "PPI=");
+       strcat(res, ppi_str);
+
+       return 0;
+}
+
+
+/**
+ * @brief      This function forms and executes cmd line request to CUPS
+ *             imagetopdf filter to convert image to PDF file
+ * @param[in]  path            path to destination PDF file
+ * @param[in]  outfile         destination file name
+ * @param[in]  settings        several settings of generating PDF
+ * @return     0       success
+ *             -1      error
+ */
+int call_imagetopdf(const char *infile, const char *outfile,
+                                       const struct pdfgen_settings *settings)
+{
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(infile== NULL || outfile == NULL || settings == NULL || settings->ppd_filename == NULL,
+                               -1 , "Invalid argument");
+
+       int err_code = 0;
+       char cmd_str[1024];
+       char scale_str[256];
+
+       scale_str[0] = '\0';
+       strcat_img_scale_option(scale_str, infile,  &(settings->scale));
+
+       /* placing n_up number of pages on the specified media */
+       snprintf(cmd_str, 1024, "PPD=%s " CUPS_FILTER_DIR
+                       "/imagetopdf job user title 1 \"%s"
+                       " number-up=%d PageSize=%s"
+                       /*fit-to-page=%s*/
+                       " %s"
+                       " \" \"%s\""
+                       " >%s 2> /tmp/mobileprint/errlog",
+                       settings->ppd_filename,
+                       PAGE_ORIENTATION_PORTRAIT == settings->orientation
+                               ? CUPS_OPTION_PORTRAIT " "
+                       : PAGE_ORIENTATION_LANDSCAPE == settings->orientation
+                               ? CUPS_OPTION_LANDSCAPE " "
+                       : "",
+                       settings->n_up,
+                       settings->paper_name,
+                       /*SCALE_FIT_TO_PAPER == settings->scale.type
+                               ? "True" : "False",*/
+                       scale_str,
+                       infile, outfile);
+
+       PGEN_DEBUG("call_imagetopdf(): %s", cmd_str);
+       err_code = call_cmd(cmd_str);
+       PGEN_RETV_IF(err_code, -1, "call_pdftopdf returned non-zero error code");
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
+
+int call_pdfunite(char **const infiles_z, const char *outfile)
+{
+       int err_code = 0;
+       char cmd_str[PDFGEN_CMDSTR_MAXLEN + 1];
+       int i;
+
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(NULL == infiles_z || NULL == infiles_z[0]
+                       || NULL == outfile, -1, "Argument error");
+
+       cmd_str[0] = '\0';
+       strncat(cmd_str, PDFUNITE_PATH, PDFGEN_CMDSTR_MAXLEN);
+
+       i = 0;
+       while (infiles_z[i] != NULL) {
+               strncat(cmd_str, " ", PDFGEN_CMDSTR_MAXLEN);
+               strncat(cmd_str, infiles_z[i], PDFGEN_CMDSTR_MAXLEN);
+               ++i;
+       }
+
+       strncat(cmd_str, " ", PDFGEN_CMDSTR_MAXLEN);
+       strncat(cmd_str, outfile, PDFGEN_CMDSTR_MAXLEN);
+       cmd_str[PDFGEN_CMDSTR_MAXLEN] = '\0';
+
+       err_code = call_cmd(cmd_str);
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
diff --git a/mobileprint/previewgen/lib/preview_coords.c b/mobileprint/previewgen/lib/preview_coords.c
new file mode 100644 (file)
index 0000000..9d0348c
--- /dev/null
@@ -0,0 +1,173 @@
+/*
+*  Mobileprint
+*
+* 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 "paper_size.h"
+#include "pgen_debug.h"
+
+#include "preview_coords.h"
+
+
+void debug_print_preview_page_req(const struct preview_page_req *r)
+{
+       PGEN_DEBUG("+-----------------------------+");
+       PGEN_DEBUG("| struct preview_page_req     |");
+       PGEN_DEBUG("+---------------------+-------+");
+       PGEN_DEBUG("| paper_size.x        | %5f |", r->paper_size.x);
+       PGEN_DEBUG("| paper_size.y        | %5f |", r->paper_size.y);
+       PGEN_DEBUG("| available_size_px.x | %5d |", r->available_size_px.x);
+       PGEN_DEBUG("| available_size_px.y | %5d |", r->available_size_px.y);
+       PGEN_DEBUG("| shadow_offset.x     | %5d |", r->shadow_offset.x);
+       PGEN_DEBUG("| shadow_offset.y     | %5d |", r->shadow_offset.y);
+       PGEN_DEBUG("| is_rotate90         | %5d |", r->is_rotate90);
+       PGEN_DEBUG("+---------------------+-------+");
+}
+
+
+void debug_print_preview_page_px(const struct preview_page_px *s)
+{
+       PGEN_DEBUG("+------------------------+");
+       PGEN_DEBUG("| struct preview_page_px |");
+       PGEN_DEBUG("+---------------+--------+");
+       PGEN_DEBUG("| full_size.x   | %6d |", s->full_size.x);
+       PGEN_DEBUG("| full_size.y   | %6d |", s->full_size.y);
+       PGEN_DEBUG("| paper_size.x  | %6d |", s->paper_size.x);
+       PGEN_DEBUG("| paper_size.y  | %6d |", s->paper_size.y);
+       PGEN_DEBUG("| area_size.x   | %6d |", s->area_size.x);
+       PGEN_DEBUG("| area_size.y   | %6d |", s->area_size.y);
+       PGEN_DEBUG("| area_offset.x | %6d |", s->area_offset.x);
+       PGEN_DEBUG("| area_offset.y | %6d |", s->area_offset.y);
+       PGEN_DEBUG("| is_grayscale  | %6d |", s->is_grayscale);
+       PGEN_DEBUG("| is_rotate90   | %6d |", s->is_rotate90);
+       PGEN_DEBUG("+---------------+--------+");
+}
+
+
+void debug_print_preview_settings_px(const struct preview_settings_px *s)
+{
+       PGEN_DEBUG("+----------------------------+");
+       PGEN_DEBUG("| struct preview_settings_px |");
+       PGEN_DEBUG("+-------------+--------------+");
+       PGEN_DEBUG("| center_off  | %9d    |", s->center_off);
+       PGEN_DEBUG("| left_off    | %9d    |", s->left_off);
+       PGEN_DEBUG("| right_off   | %9d    |", s->right_off);
+       PGEN_DEBUG("| full_size.x | %9d    |", s->full_size.x);
+       PGEN_DEBUG("| full_size.y | %9d    |", s->full_size.y);
+       PGEN_DEBUG("+-------------+--------------+");
+}
+
+
+int process_preview_page_settings(const struct preview_page_req *req,
+                                                                 struct preview_page_px *res)
+{
+       PGEN_RETV_IF(req == NULL || res == NULL, -1, "Invalid argument");
+
+       /*debug_print_preview_page_req(req);*/
+
+       if (pts_size2px(&(req->paper_size), &(req->available_size_px),
+                                       &(res->full_size)) < 0) {
+               PGEN_DEBUG("ERROR: pts_size2px()\n");
+               return -1;
+       }
+
+       res->paper_size.x = res->full_size.x - req->shadow_offset.x;
+       res->paper_size.y = res->full_size.y - req->shadow_offset.y;
+
+       res->area_offset.x = 2;
+       res->area_offset.y = 2;
+
+       res->area_size.x = res->paper_size.x - res->area_offset.x * 2;
+       res->area_size.y = res->paper_size.y - res->area_offset.y * 2;
+
+       res->is_grayscale = req->is_grayscale;
+       res->is_rotate90 = req->is_rotate90;
+
+       /*debug_print_preview_page_px(res);*/
+
+       return 0;
+}
+
+/* for backward compatibility */
+int get_preview_page_settings(const struct preview_page_req *req,
+                                                         struct preview_page_px *res)
+{
+       struct preview_page_req newreq;
+
+       PGEN_RETV_IF(req == NULL || res == NULL, -1, "Invalid argument");
+
+       newreq = *req;
+
+       if (req->is_rotate90) {
+               switch_size_pts_coords(&(newreq.paper_size));
+       }
+
+       return process_preview_page_settings(&newreq, res);
+}
+
+
+int get_preview_settings(const struct preview_page_req *req,
+                                                struct preview_settings_px *res)
+{
+       struct size_pts canvas_size;
+       double side_w_pts;
+       double space_w_pts;
+       struct preview_page_req newreq;
+
+       PGEN_RETV_IF(req == NULL || res == NULL, -1, "Invalid argument");
+
+       /*debug_print_preview_page_req(req);*/
+
+       newreq = *req;
+
+       if (req->is_rotate90) {
+               switch_size_pts_coords(&(newreq.paper_size));
+       }
+
+       /* calculate space for page images */
+       /* we will use smaller side of page */
+       side_w_pts = req->paper_size.x * PAGE_SIDE_SHOW_COEFF;
+       space_w_pts = req->paper_size.x * MIN_PAGE_SPACE_COEFF;
+       canvas_size.y = newreq.paper_size.y;
+       canvas_size.x = newreq.paper_size.x + side_w_pts * 2 + space_w_pts * 2;
+
+       if (pts_size2px(&canvas_size, &(req->available_size_px),
+                                       &(newreq.available_size_px)) < 0) {
+               PGEN_DEBUG("ERROR: full_size: pts_size2px()\n");
+               return -1;
+       }
+
+       /* calculate single-page size */
+       //newreq.available_size_px = res->full_size;
+       process_preview_page_settings(&newreq, &(res->page_px));
+
+       res->full_size.x = req->available_size_px.x;
+       res->full_size.y = newreq.available_size_px.y;
+
+       /* calculate offsets */
+       res->center_off = res->full_size.x / 2 - res->page_px.full_size.x / 2;
+       res->left_off = res->page_px.full_size.x * (PAGE_SIDE_SHOW_COEFF - 1);
+       res->right_off = res->full_size.x
+                                        - res->page_px.full_size.x * PAGE_SIDE_SHOW_COEFF;
+
+       /*debug_print_preview_settings_px(res);*/
+
+       return 0;
+}
+
diff --git a/mobileprint/previewgen/lib/preview_util.c b/mobileprint/previewgen/lib/preview_util.c
new file mode 100644 (file)
index 0000000..9a6c27a
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+*  Mobileprint
+*
+* 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 <string.h>
+
+#include <Evas.h>
+#include <Ecore_Evas.h>
+//#include <Evas_Engine_Buffer.h>
+
+#include "pgen_debug.h"
+
+#include "preview_util.h"
+
+
+int get_image_resolution(const char *path, int *resx, int *resy)
+{
+       PGEN_TRACE_BEGIN;
+       int width = 0;
+       int height = 0;
+
+       Evas *canvas;
+       Ecore_Evas *ee;
+
+       Evas_Object *img;
+
+       PGEN_RETV_IF(path == NULL || resx == NULL || resy == NULL, -1 , "Invalid argument");
+
+       ee = ecore_evas_buffer_new(1, 1);
+       PGEN_RETV_IF(ee == NULL, -1 , "ee is NULL");
+
+       canvas = ecore_evas_get(ee);
+       img = evas_object_image_add(canvas);
+
+       evas_object_image_file_set(img, NULL, NULL);
+       evas_object_image_load_orientation_set(img, EINA_TRUE);
+       evas_object_image_load_scale_down_set(img, 0);
+
+       evas_object_image_file_set(img, path, NULL);
+       Evas_Load_Error error = evas_object_image_load_error_get(img);
+       if (error != EVAS_LOAD_ERROR_NONE) {
+               PGEN_DEBUG("Decoding Error(%d) : %s", error, path);
+               evas_object_del(img);
+               ecore_evas_free(ee);
+               return -1;
+       }
+
+       evas_object_image_size_get(img, &width, &height);
+
+       evas_object_image_file_set(img, NULL, NULL);
+       evas_object_del(img);
+
+       ecore_evas_free(ee);
+
+       *resx = width;
+       *resy = height;
+
+       PGEN_DEBUG("width & height is [%d, %d]",  width, height);
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
+
+/**
+ * @brief      Rotate image on 90 degrees
+ * @param[in]  img     image to rotate
+ */
+int rotate90_image(Evas_Object *img)
+{
+       int *old_data;
+       int *new_data;
+       int *outp; /* current writing pointer */
+       int w;
+       int h;
+       int data_size;
+       int off; /* offset from output beginning */
+
+       int ix;
+       int iy;
+
+       PGEN_TRACE_BEGIN;
+       PGEN_RETV_IF(img == NULL, -1, "Invalid argument");
+
+       /* allocate temporary memory */
+       evas_object_image_size_get(img, &w, &h);
+       PGEN_RETV_IF(w == 0 || h == 0 , -1, "Failed to allocate memory");
+       PGEN_DEBUG("w = %d h = %d", w, h);
+
+       data_size = w * h;
+       old_data = evas_object_image_data_get(img, EINA_FALSE);
+       PGEN_RETV_IF(old_data == NULL, -1 , "Failed to get image data");
+
+       new_data = malloc(sizeof(int) * (data_size + 1));
+       PGEN_RETV_IF(new_data == NULL, -1 , "Failed to malloc");
+
+       /* write rotated image data */
+       for (iy = 0; iy < h; ++iy)
+               for (ix = 0; ix < w; ++ix) {
+                       off = h * (ix + 1) - 1 - iy;
+                       if (off < 0 || off >= data_size) {
+                               PGEN_DEBUG("ERROR: off = %d, lim: %d", off, data_size);
+                       }
+                       outp = new_data + off;
+                       *outp = old_data[ix + w * iy];
+               }
+
+       /* store rotated image */
+       evas_object_image_size_set(img, h, w);
+       evas_object_image_data_copy_set(img, new_data);
+       PGEN_IF_FREE_MEM(new_data);
+
+       PGEN_TRACE_END;
+       return 0;
+}
+
diff --git a/mobileprint/previewgen/lib/previewgen.c b/mobileprint/previewgen/lib/previewgen.c
new file mode 100644 (file)
index 0000000..8db4a5c
--- /dev/null
@@ -0,0 +1,447 @@
+/*
+*  Mobileprint
+*
+* 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 <libgen.h> //basename and dirname
+#include <fcntl.h>
+#include <stdio.h>
+#include <stdlib.h>
+#include <string.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include "pgen_debug.h"
+#include "previewgen.h"
+
+#define PDF_CONV_UTIL "/usr/bin/pdftoppm"
+#define PDF_INFO_UTIL "/usr/bin/pdfinfo"
+#define MAX_PATH_LEN           4096
+#define IMG_MAX_SIZE           (1024 * 1024 * 2) /* 2MB */
+#define PDF_INFO_STR_MAX_SIZE  511
+
+#define PDF_INFO_TEMP_FNAME    "/tmp/mobileprint/pdfinfo.txt"
+
+#define PDF_PX_MAX_VAL         999999
+#define PDF_PX_VAL_MAX_STR_LEN (sizeof("999999") - 1)
+
+
+/* Just simple stub for further development
+   TODO: use pipe output, current implementation have high security risk
+*/
+int call_pdftoppm(const char *path, const struct pdf_preview_settings *settings)
+{
+       char conv_cmd[] = PDF_CONV_UTIL " "; //" -f 1 -l 1 ";
+       char output_cmd[] = " > " IMG_TEMP_FILE_NAME;
+       char *cmd_str;
+       char x_val_str[PDF_PX_VAL_MAX_STR_LEN + 1];
+       char y_val_str[PDF_PX_VAL_MAX_STR_LEN + 1];
+       char page_str[PDF_PAGE_MAX_VAL + 1];
+       int path_len;
+       int cmd_len;
+
+       PGEN_RETV_IF(path == NULL || settings == NULL, -1, "Invalid argument");
+       path_len = strnlen(path, MAX_PATH_LEN);
+       PGEN_RETV_IF(path_len <= 0 || path_len >= MAX_PATH_LEN, -1, "path_len is out of scope");
+
+       /* check for correct picture size */
+       if (settings->w >= PDF_PX_MAX_VAL
+                       || settings->w <= 0
+                       || settings->h >= PDF_PX_MAX_VAL
+                       || settings->h <= 0
+                       || settings->page < 0
+                       || settings->page >= PDF_PAGE_MAX_VAL) {
+               PGEN_DEBUG("call_pdftoppm(): ERROR in settings;"
+                                  " w = %d, h = %d, page = %d",
+                                  settings->w, settings->h, settings->page);
+               return -1;
+       }
+
+       x_val_str[0] = '\0';
+       snprintf(x_val_str, sizeof(x_val_str), "%d", settings->w);
+       y_val_str[0] = '\0';
+       snprintf(y_val_str, sizeof(y_val_str), "%d", settings->h);
+       page_str[0] = '\0';
+       snprintf(page_str, sizeof(page_str), "%d", settings->page);
+
+
+       cmd_len = (sizeof(conv_cmd) - 1)
+                         + strlen("-f ") + strlen(page_str) + 1
+                         + strlen("-l ") + strlen(page_str) + 1
+                         + strlen("-scale-to-x ") + strlen(x_val_str) + 1
+                         + strlen("-scale-to-y ") + strlen(y_val_str) + 1
+                         + path_len + sizeof(output_cmd);
+       cmd_str = malloc(sizeof(char) * (cmd_len + 1));
+
+       PGEN_RETV_IF(cmd_str == NULL, -1, "cmd_str malloc failed");
+       memset(cmd_str, 0, sizeof(char) * (cmd_len + 1));
+       cmd_str[0] = '\0';
+
+       strcat(cmd_str, conv_cmd);
+       strcat(cmd_str, "-f ");
+       strcat(cmd_str, page_str);
+       strcat(cmd_str, " ");
+       strcat(cmd_str, "-l ");
+       strcat(cmd_str, page_str);
+       strcat(cmd_str, " ");
+       strcat(cmd_str, "-scale-to-x ");
+       strcat(cmd_str, x_val_str);
+       strcat(cmd_str, " ");
+       strcat(cmd_str, "-scale-to-y ");
+       strcat(cmd_str, y_val_str);
+       strcat(cmd_str, " ");
+       strcat(cmd_str, path);
+       strcat(cmd_str, output_cmd);
+
+       cmd_str[cmd_len] = '\0';
+
+       PGEN_DEBUG("call_pdftoppm(): cmd_str = %s", cmd_str);
+
+       if (system(cmd_str) < 0) {
+               PGEN_DEBUG("Failed to call system");
+       }
+
+       PGEN_IF_FREE_MEM(cmd_str);
+
+       return 0;
+}
+
+
+int call_pdfinfo(const char *path, const char *field)
+{
+       char *cmd_str;
+       int path_len;
+       int cmd_len;
+
+       PGEN_RETV_IF(path == NULL || field == NULL, -1, "Invalid argument");
+       path_len = strnlen(path, MAX_PATH_LEN);
+       PGEN_RETV_IF(path_len <= 0 || path_len >= MAX_PATH_LEN, -1, "path_len is out of scope");
+
+       cmd_len = sizeof(PDF_INFO_UTIL) + sizeof(" '") + path_len
+                         + sizeof("' | grep '") + strlen(field)
+                         + strlen("' > " PDF_INFO_TEMP_FNAME); // strlen(output_cmd);
+       cmd_str = malloc(sizeof(char) * (cmd_len + 1));
+
+       PGEN_RETV_IF(cmd_str == NULL, -1, "cmd_str malloc failed");
+       memset(cmd_str, 0, sizeof(char) * (cmd_len + 1));
+
+       cmd_str[0] = '\0';
+       strcat(cmd_str, PDF_INFO_UTIL);
+       strcat(cmd_str, " '");
+       strcat(cmd_str, path);
+       strcat(cmd_str, "' | grep '");
+       strcat(cmd_str, field);
+       strcat(cmd_str, "' > " PDF_INFO_TEMP_FNAME);
+       //strcat(cmd_str, output_cmd);
+       cmd_str[cmd_len] = '\0';
+
+       PGEN_DEBUG("call_pdfinfo(): cmd_str = %s", cmd_str);
+
+       if (system(cmd_str) < 0) {
+               PGEN_DEBUG("Failed to call system");
+       }
+
+       PGEN_IF_FREE_MEM(cmd_str);
+
+       return 0;
+}
+
+
+/**
+ * @brief
+ * @param[in]  path    path to PDF file
+ */
+int call_pdfinfo_pagesize(const char *path)
+{
+       /* TODO: page number */
+       return call_pdfinfo(path, "Page size:");
+}
+
+
+int call_pdfinfo_pages(const char *path)
+{
+       return call_pdfinfo(path, "Pages:");
+}
+
+
+int is_page_landscape(struct size_pts *s)
+{
+       PGEN_RETV_IF(s == NULL, -1, "Invalid argument");
+
+       if (s->x > s->y) {
+               return 1;
+       }
+
+       return 0;
+}
+
+
+/**
+ * @brief              get PDF file page size in pts
+ * @param[in]  path    PDF file path
+ * @param[out] ow      width in pts
+ * @param[out] oh      height in pts
+ */
+int get_pdf_page_size(const char *path, struct size_pts *s)
+{
+       int res;
+       char cmd_str[MAX_PATH_LEN] = {0,};
+
+       PGEN_RETV_IF(path == NULL || s == NULL, -1, "Invalid argument");
+
+       //NOTICE : Usage : pdfinfo [options] <PDF-file>, we use "pdfinfo <PDF-file>" to get page size
+       snprintf(cmd_str, MAX_PATH_LEN, "%s %s", PDF_INFO_UTIL, path);
+       PGEN_DEBUG("call_pdfinfo(): cmd_str = %s", cmd_str);
+
+       FILE *fp = NULL;
+       if ((fp=popen(cmd_str, "r"))==NULL) {
+               PGEN_DEBUG("popen error(%s)",cmd_str);
+               return -1;
+       }
+
+       char *str_buf           = NULL;
+       size_t len              = 0;
+       ssize_t read_len        = 0;
+       char temp[MAX_PATH_LEN] = {0,};
+
+       do {
+               read_len = getline(&str_buf, &len, fp);
+               if (strstr(str_buf, "Page size:") != NULL) {
+                       res = sscanf(str_buf, "Page size:\t%lf x %lf%s", &(s->x), &(s->y), temp);
+                       if (res != 3) {
+                               PGEN_DEBUG("ERROR: get_pdf_page_size(): incorrect output\n");
+                               return -1;
+                       }
+                       break;
+               } else {
+                       continue;
+               }
+       } while (read_len != -1);
+       PGEN_IF_FREE_MEM(str_buf);
+
+       PGEN_DEBUG("Page size : [%f %f]",s->x, s->y);
+
+       int ret = pclose(fp);
+       if (!WIFEXITED(ret) || (WEXITSTATUS(ret) != 0)) {
+               PGEN_DEBUG("pclose error!");
+       }
+
+       return 0;
+}
+
+/**
+ *
+ *
+ *
+ */
+int get_pdf_pages_count(const char *path)
+{
+       PGEN_RETV_IF(path == NULL, -1, "Invalid argument");
+
+       int res                 = -1;
+       int val                 = -1;
+       int path_len    = 0;
+       char cmd_str[MAX_PATH_LEN] = {0,};
+
+       path_len = strnlen(path, MAX_PATH_LEN);
+       PGEN_RETV_IF(path_len <= 0 || path_len >= MAX_PATH_LEN, -1, "path_len is out of scope");
+
+       //NOTICE : Usage : pdfinfo [options] <PDF-file>, we use "pdfinfo <PDF-file>" to get pages
+       snprintf(cmd_str, MAX_PATH_LEN, "%s %s", PDF_INFO_UTIL, path);
+       PGEN_DEBUG("call_pdfinfo(): cmd_str = %s", cmd_str);
+
+       FILE *fp = NULL;
+       if ((fp=popen(cmd_str, "r"))==NULL) {
+               PGEN_DEBUG("popen error(%s)",cmd_str);
+               return -1;
+       }
+
+       char *str_buf           = NULL;
+       size_t len              = 0;
+       ssize_t read_len        = 0;
+
+       do {
+               read_len = getline(&str_buf, &len, fp);
+               if (strstr(str_buf, "Pages:") != NULL) {
+                       res = sscanf(str_buf, "Pages:\t%d", &val);
+                       if (res != 1) {
+                               PGEN_DEBUG("ERROR: get_pdf_pages_count(): incorrect output\n");
+                               return -1;
+                       }
+                       break;
+               } else {
+                       continue;
+               }
+       } while (read_len != -1);
+       PGEN_IF_FREE_MEM(str_buf);
+
+       PGEN_DEBUG("Pages : %d", val);
+
+       int ret = pclose(fp);
+       if (!WIFEXITED(ret) || (WEXITSTATUS(ret) != 0)) {
+               PGEN_DEBUG("pclose error!");
+       }
+       return val;
+}
+
+/**
+ * @brief                      get PDF preview
+ * @param[in]  path            path to PDF to generate preview
+ * @param[in]  settings        currently just ignored
+ * @param[out] out_img         pointer to return allocated buffer, user is
+ *                             responsible for it's memory deallocation
+ *                             (format: PPM)
+ * @param[out] size            image data size
+ * @retval     0       Success
+ * @retval     <0      Error
+ */
+int get_pdf_preview(const char *path,
+                                       const struct pdf_preview_settings *settings,
+                                       void **out_img, int *size)
+{
+       int img_fd;
+       unsigned char *imgbuf;
+       PGEN_RETV_IF(size == NULL || settings == NULL || out_img == NULL , -1, "Invalid argument");
+
+       if (call_pdftoppm(path, settings) < 0) {
+               PGEN_DEBUG("ERROR: get_pdf_preview(): call_pdftoppm() error");
+               return -1;
+       }
+
+       /* just stub, insecure in case of multiple printing requests */
+       img_fd = open(IMG_TEMP_FILE_NAME, O_RDONLY);
+       PGEN_RETV_IF(img_fd == -1, -1, "Failed to open temporary file");
+
+       /* STUB: currently just with enough big memory area, no check for
+          higher memory requirements */
+       imgbuf = malloc(sizeof(char) * IMG_MAX_SIZE);
+       if (imgbuf == NULL) {
+               close(img_fd);
+               PGEN_DEBUG("malloc failed");
+               return -1;
+       }
+       memset(imgbuf, 0, sizeof(char) * IMG_MAX_SIZE);
+       *size = read(img_fd, imgbuf, IMG_MAX_SIZE);
+       close(img_fd);
+
+       if (*size <= 0) {
+               PGEN_IF_FREE_MEM(imgbuf);
+               PGEN_DEBUG("ERROR: get_pdf_preview(): read error");
+               return -1;
+       }
+
+       *out_img = imgbuf;
+
+       return 0;
+}
+
+#if 0
+/* Check for file extension
+ * 0/1
+ */
+int is_file_ext(const char *fname, int fname_len, const char *ext)
+{
+       const char *ptr, *ext_ptr;
+       int ext_len;
+
+       PGEN_RETV_IF(fname == NULL || ext == NULL, 0, "Invalid argument");
+
+       ext_len = strlen(ext);
+       if (fname_len < ext_len + 1) {
+               return 0;
+       }
+
+       ptr = fname + fname_len - ext_len - 1;
+       ext_ptr = ptr + 1;
+
+       if (*ptr == '.' && strcasecmp(ext_ptr, ext) == 0) {
+               return 1;
+       }
+
+       return 0;
+}
+
+/**
+ * @brief              get file type from its name (extension-based)
+ * @param[in]  fname   file name (may be with path)
+ * @retval             file type
+ */
+enum file_type get_file_type(const char *fname)
+{
+       int fname_len;
+       const char *img_file_types[] = IMG_FILE_EXTS;
+       const char *pdf_ftype = PDF_FILE_EXT;
+       int i;
+
+       /* check for corectness */
+       PGEN_RETV_IF(fname == NULL, FILE_TYPE_INCORRECT, "Incorrect file type");
+
+       fname_len = strnlen(fname, MAX_PATH_LEN);
+       PGEN_RETV_IF(fname_len >= MAX_PATH_LEN, FILE_TYPE_INCORRECT, "Too long file name");
+
+       /* check for pdf extension */
+       if (is_file_ext(fname, fname_len, pdf_ftype)) {
+               return FILE_TYPE_PDF;
+       }
+
+       /* check for image extensions */
+       for (i = 0; img_file_types[i] != NULL; i++) {
+               if (is_file_ext(fname, fname_len, img_file_types[i])) {
+                       return FILE_TYPE_IMAGE;
+               }
+       }
+
+       return FILE_TYPE_INCORRECT;
+}
+
+#else
+/**
+ * @brief              get file type from its name (extension-based)
+ * @param[in]  fname   file name (may be with path)
+ * @retval             file type
+ */
+enum file_type get_file_type(const char *fname)
+{
+       PGEN_RETV_IF(fname == NULL, FILE_TYPE_INCORRECT, "fname is NULL");
+       char *fname_copy = strdup(fname);
+       PGEN_RETV_IF(fname_copy == NULL, FILE_TYPE_INCORRECT, "fname_copy is NULL");
+
+       char *bname = basename(fname_copy);
+       char *ext = strrchr(bname, '.');
+       PGEN_RETV_IF(ext == NULL, FILE_TYPE_INCORRECT, "ext is NULL");
+
+       const char *img_file_types[] = IMG_FILE_EXTS;
+       const char *pdf_ftype = PDF_FILE_EXT;
+       int ret = FILE_TYPE_INCORRECT;
+       int i = 0;
+
+       if (strcasestr(ext, pdf_ftype) != NULL) {
+               ret = FILE_TYPE_PDF;
+       } else {
+               for (i = 0; img_file_types[i] != NULL; i++) {
+                       if (strcasestr(ext, img_file_types[i]) != NULL) {
+                               ret = FILE_TYPE_IMAGE;
+                               break;
+                       }
+               }
+       }
+
+       PGEN_IF_FREE_MEM(fname_copy);
+       return ret;
+}
+#endif
diff --git a/mobileprint/previewgen/util/CMakeLists.txt b/mobileprint/previewgen/util/CMakeLists.txt
new file mode 100644 (file)
index 0000000..00309f6
--- /dev/null
@@ -0,0 +1,11 @@
+FILE(GLOB SRCS *.c)
+
+INCLUDE_DIRECTORIES(${CMAKE_SOURCE_DIR}/mobileprint/previewgen/include)
+LINK_DIRECTORIES(${CMAKE_BINARY_DIR}/mobileprint/previewgen/lib)
+ADD_EXECUTABLE(previewgen-tool ${SRCS})
+
+SET_TARGET_PROPERTIES(previewgen-tool PROPERTIES COMPILE_FLAGS "${EXTRA_CFLAGS_PREVIEWGEN} -fpie")
+TARGET_LINK_LIBRARIES(previewgen-tool previewgen ${previewgen_pkgs_LDFLAGS} -lecore_evas)
+
+INSTALL(TARGETS previewgen-tool DESTINATION ${BINDIR})
+
diff --git a/mobileprint/previewgen/util/main.c b/mobileprint/previewgen/util/main.c
new file mode 100644 (file)
index 0000000..6c1ff28
--- /dev/null
@@ -0,0 +1,492 @@
+/*
+*  Mobileprint
+*
+* 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 <stdlib.h>
+#include <sys/stat.h>
+#include <sys/types.h>
+#include <unistd.h>
+
+#include <page_preview.h>
+#include <paper_size.h>
+#include <pgen_debug.h>
+#include <preview_coords.h>
+
+
+void show_help()
+{
+       printf("Usage: previewgen-tool cmd ...\n"
+               "Commands:"
+               "\n"
+               "help - show help\n"
+               "\n"
+               "init img - generate PDF for image\n"
+               "Arguments:\n"
+               "\tfname1 ... fnameN outfname_pdf ppdfname\n"
+               "\tpaper_name paper_s_x paper_s_y\n"
+               "\tav_s_x av_s_y orientation n_up\n"
+               "\tscale_type scale_zoom scale_w scale_h\n"
+               "\tis_grayscale\n"
+               "\n"
+               "init pdf - generate PDF for PDF\n"
+               "Arguments:\n"
+               "\tfname toutfname_pdf ppdfname\n"
+               "\tpaper_name paper_s_x paper_s_y\n"
+               "\torientation n_up\n"
+               "\tscale_type scale_zoom scale_w scale_h\n"
+               "\tis_grayscale\n"
+               "\n"
+               "empty_gen - generate empty page image\n"
+               "Arguments:\n"
+               "\toutfname_ppm paper_s_x paper_s_y av_s_x av_s_y\n"
+               "\tshadow_x shadow_y is_rotate90\n"
+               "\n"
+               "pagegen - generate single page image for PDF\n"
+               "\tfname page outfname_ppm\n"
+               "\tpaper_s_x paper_s_y av_s_x av_s_y\n"
+               "\tshadow_x shadow_y is_rotate90 is_grayscale\n"
+               );
+}
+
+
+int parse_page_orientation(char *str, enum page_orientation *res)
+{
+       if (NULL == str || NULL == res) {
+               printf("ERROR in orientation string\n");
+               return -1;
+       }
+
+       if (strcasecmp(str, "portrait") == 0) {
+               *res = PAGE_ORIENTATION_PORTRAIT;
+               return 0;
+       }
+       if (strcasecmp(str, "landscape") == 0) {
+               *res = PAGE_ORIENTATION_LANDSCAPE;
+               return 0;
+       }
+
+       return -1;
+}
+
+
+int parse_scale_type(char *str, enum page_scale_type *res)
+{
+       if (NULL == str || NULL == res) {
+               printf("ERROR in scale type string\n");
+               return -1;
+       }
+
+       if (strcasecmp(str, "fit_to_paper") == 0) {
+               *res = SCALE_FIT_TO_PAPER;
+               return 0;
+       }
+       if (strcasecmp(str, "custom") == 0) {
+               *res = SCALE_CUSTOM;
+               return 0;
+       }
+       if (strcasecmp(str, "relative") == 0) {
+               *res = SCALE_RELATIVE;
+               return 0;
+       }
+       if (strcasecmp(str, "original") == 0) {
+               *res = SCALE_ORIGINAL;
+               return 0;
+       }
+
+       printf("ERROR in scale type string\n");
+       return -1;
+}
+
+
+void destroy_str_list(char **str_list, int list_len)
+{
+       int i;
+       PGEN_RET_IF(NULL == str_list || list_len <= 0 || NULL == str_list[0],
+                       "Argument error");
+       for (i = 0; i < list_len; ++i) {
+               PGEN_IF_FREE_MEM(str_list[i]);
+       }
+}
+
+
+void remove_tmp_files(char **const files, int files_count)
+{
+       int i;
+       PGEN_RET_IF(NULL == files || files_count <= 0 || NULL == files[0],
+                       "Arguments error");
+       for (i = 0; i <= files_count; ++i)
+               unlink(files[i]);
+}
+
+
+int process_init_img_files(int argc, char *argv[])
+{
+       char **fnames;
+       int files_count;
+       char *outfname;
+       char *ppd_fname;
+       struct paper_size_pts paper_size;
+       struct size_px av_size;
+       enum page_orientation orientation;
+       int n_up;
+       struct page_scale scale;
+       int is_grayscale;
+
+       char **tmp_fnames;
+       int len;
+       char *tmp_str;
+
+       int res;
+       int is_err = 0;
+       int pages_count;
+       int i;
+
+       if (argc < 15) {
+               printf("ERROR in init img arguments count\n");
+               return -1;
+       }
+       PGEN_DEBUG("argc: %d", argc);
+
+       fnames = argv;
+       files_count = argc - 15;
+       i = argc - 15 - 1;
+       outfname = argv[i + 1];
+       ppd_fname = argv[i + 2];
+
+       PGEN_DEBUG("files_count: %d", files_count);
+       PGEN_DEBUG("outfname: %s", outfname);
+       PGEN_DEBUG("i: %d", i);
+
+       paper_size.name = argv[i + 3];
+       paper_size.s.x = atof(argv[i + 4]);
+       paper_size.s.y = atof(argv[i + 5]);
+
+       av_size.x = atoi(argv[i + 6]);
+       av_size.y = atoi(argv[i + 7]);
+
+       PGEN_DEBUG("orientation: %s", argv[i + 8]);
+       if (parse_page_orientation(argv[i + 8], &orientation) < 0)
+               return -1;
+
+       n_up = atoi(argv[i + 9]);
+
+       PGEN_DEBUG("scale_type");
+       if (parse_scale_type(argv[i + 10], &(scale.type)) < 0)
+               return -1;
+       scale.zoom = atoi(argv[i + 11]);
+       scale.w = atof(argv[i + 12]);
+       scale.h = atof(argv[i + 13]);
+
+       is_grayscale = atoi(argv[i + 14]);
+
+       if (files_count < 1 || files_count > 9999) {
+               printf("Files count ERROR\n");
+               return -1;
+       }
+
+       /* TODO: downscale each image file */
+       /* generate temporary names based on pid */
+       tmp_fnames = (char**)calloc(files_count + 1, sizeof(char*));
+       for (i = 0; i < files_count; ++i) {
+               len = sizeof(PREVIEW_TEMP_DIR
+                               "/convert_tmp_XXXXXXXX_XXXX.ppm");
+               tmp_str = (char*)malloc(sizeof(char) * (len + 1));
+               if (NULL == tmp_str) {
+                       is_err = 1;
+                       break;
+               }
+               tmp_str[len] = '\0';
+               snprintf(tmp_str, len, PREVIEW_TEMP_DIR
+                               "/convert_tmp_%08X_%04d.ppm", getpid(), i + 1);
+               tmp_fnames[i] = tmp_str;
+       }
+       if (is_err) {
+               destroy_str_list(tmp_fnames, files_count);
+               PGEN_IF_FREE_MEM(tmp_fnames);
+               printf("ERROR: out of memory\n");
+               return -1;
+       }
+
+       for (i = 0; i < files_count; ++i) {
+               res = process_image_downscale(
+                               fnames[i], tmp_fnames[i], &av_size);
+               if (res < 0) {
+                       printf("ERROR in image downscale\n");
+                       is_err = 1;
+                       break;
+               }
+       }
+       if (is_err) {
+               remove_tmp_files(tmp_fnames, files_count);
+               destroy_str_list(tmp_fnames, files_count);
+               PGEN_IF_FREE_MEM(tmp_fnames);
+               return -1;
+       }
+
+       /* convert to pdf */
+       if (files_count > 1)
+               res = img_files2pdf_preview_pages(tmp_fnames, files_count,
+                               outfname, ppd_fname, &paper_size, &av_size,
+                               orientation, n_up, &scale, is_grayscale);
+       else
+               res = img2pdf_preview_pages(tmp_fnames[0], outfname, ppd_fname,
+                               &paper_size, &av_size, orientation, n_up,
+                               &scale, is_grayscale);
+
+       /* remove temporary files */
+       remove_tmp_files(tmp_fnames, files_count);
+       destroy_str_list(tmp_fnames, files_count);
+       PGEN_IF_FREE_MEM(tmp_fnames);
+
+       if (res < 0) {
+               printf("ERROR in init img\n");
+               return -1;
+       } else {
+               PGEN_DEBUG("PDF generation OK");
+       }
+       pages_count = get_pdf_pages_count(outfname);
+       printf("init img: pages count: %d\n", pages_count);
+
+       return res;
+}
+
+
+int process_init_pdf(int argc, char *argv[])
+{
+       char *fname;
+       char *outfname;
+       char *ppd_fname;
+       struct paper_size_pts paper_size;
+       enum page_orientation orientation;
+       int n_up;
+       struct page_scale scale;
+       int is_grayscale;
+
+       int res;
+       int pages_count;
+
+       if (argc < 13) {
+               printf("ERROR in init pdf arguments count\n");
+               return -1;
+       }
+
+       fname = argv[0];
+       outfname = argv[1];
+       ppd_fname = argv[2];
+
+       paper_size.name = argv[3];
+       paper_size.s.x = atof(argv[4]);
+       paper_size.s.y = atof(argv[5]);
+
+       if (parse_page_orientation(argv[6], &orientation) < 0)
+               return -1;
+
+       n_up = atoi(argv[7]);
+
+       if (parse_scale_type(argv[8], &(scale.type)) < 0)
+               return -1;
+       scale.zoom = atoi(argv[9]);
+       scale.w = atof(argv[10]);
+       scale.h = atof(argv[11]);
+
+       is_grayscale = atoi(argv[12]);
+
+
+       res = pdf2pdf_preview_pages(fname, outfname, ppd_fname,
+                       &paper_size, orientation, n_up,
+                       &scale, is_grayscale);
+       if (res < 0) {
+               printf("ERROR in init pdf\n");
+               return -1;
+       }
+       pages_count = get_pdf_pages_count(outfname);
+       printf("init pdf: pages count: %d\n", pages_count);
+       return 0;
+}
+
+
+int process_pagegen(int argc, char *argv[])
+{
+       char *pdf_fname;
+       char *outfname_ppm;
+       int page;
+       struct size_pts paper_size;
+       struct size_px av_size;
+       struct size_px shadow_size;
+       int is_rotate90;
+       int is_grayscale;
+
+       struct preview_page_req settings_req;
+
+       int res;
+
+
+       if (argc < 11) {
+               printf("ERROR in gen arguments count\n");
+               return -1;
+       }
+
+       pdf_fname = argv[0];
+       page = atoi(argv[1]);
+       outfname_ppm = argv[2];
+
+       paper_size.x = atof(argv[3]);
+       paper_size.y = atof(argv[4]);
+
+       av_size.x = atoi(argv[5]);
+       av_size.y = atoi(argv[6]);
+
+       shadow_size.x = atoi(argv[7]);
+       shadow_size.y = atoi(argv[8]);
+
+       is_rotate90 = atoi(argv[9]);
+       is_grayscale = atoi(argv[10]);
+
+
+       settings_req.paper_size = paper_size;
+       settings_req.available_size_px = av_size;
+       settings_req.shadow_offset = shadow_size;
+       settings_req.is_rotate90 = is_rotate90;
+       settings_req.is_grayscale = is_grayscale;
+
+       /*if (get_preview_settings(&settings_req, &settings_px) < 0) {
+               printf("ERROR in settings\n");
+               return -1;
+       }*/
+
+       res = save_pdf_preview_page_image(pdf_fname, page,
+                       &settings_req, outfname_ppm);
+       if (res <= 0) {
+               printf("ERROR in preview page image generation\n");
+               return -1;
+       }
+       printf("OK\n");
+       return 0;
+}
+
+
+int process_empty_gen(int argc, char *argv[])
+{
+       char *outfname_ppm;
+       struct size_pts paper_size;
+       struct size_px av_size;
+       struct size_px shadow_size;
+       int is_rotate90;
+
+       struct preview_page_req settings_req;
+
+       int res;
+
+
+       if (argc < 8) {
+               printf("ERROR in empty_gen arguments count\n");
+               return -1;
+       }
+
+       outfname_ppm = argv[0];
+
+       paper_size.x = atof(argv[1]);
+       paper_size.y = atof(argv[2]);
+
+       av_size.x = atoi(argv[3]);
+       av_size.y = atoi(argv[4]);
+
+       shadow_size.x = atoi(argv[5]);
+       shadow_size.y = atoi(argv[6]);
+
+       is_rotate90 = atoi(argv[7]);
+
+       settings_req.paper_size = paper_size;
+       settings_req.available_size_px = av_size;
+       settings_req.shadow_offset = shadow_size;
+       settings_req.is_rotate90 = is_rotate90;
+       settings_req.is_grayscale = 0;
+
+
+       res = save_empty_preview_page_image(&settings_req, outfname_ppm);
+       if (res <= 0) {
+               printf("ERROR in preview page image generation\n");
+               return -1;
+       }
+       printf("OK\n");
+
+       return 0;
+}
+
+
+int process_cmd(int argc, char *argv[])
+{
+       if (strcasecmp("init", argv[1]) == 0) {
+               if (argc <= 2) {
+                       printf("ERROR in init cmd usage\n");
+                       return -1;
+               }
+               if (strcasecmp("img", argv[2]) == 0)
+                       return process_init_img_files(argc - 2, &(argv[3]));
+               if (strcasecmp("pdf", argv[2]) == 0)
+                       return process_init_pdf(argc - 2, &(argv[3]));
+               printf("ERROR in init cmd usage\n");
+               return -1;
+       }
+
+       if (strcasecmp("pagegen", argv[1]) == 0)
+               return process_pagegen(argc - 1, &(argv[2]));
+
+       if (strcasecmp("empty_gen", argv[1]) == 0)
+               return process_empty_gen(argc - 1, &(argv[2]));
+
+       return 0;
+}
+
+
+int main(int argc, char *argv[])
+{
+       int res;
+       int ret;
+       int errsv;
+
+       if (argc <= 1) {
+               printf("ERROR: no arguments, type help for usage\n");
+               return 1;
+       }
+
+       if (strcasecmp("help", argv[1]) == 0) {
+               show_help();
+               return 0;
+       }
+
+       ret = mkdir(PREVIEW_TEMP_DIR, 0777);
+       errsv = errno;
+       if (ret < 0 && errsv != EEXIST) {
+               printf("Failed to mkdir temporary directory " PREVIEW_TEMP_DIR
+                               ", errno = %d\n", errsv);
+               return 1;
+       }
+
+       evas_init();
+       res = process_cmd(argc, argv);
+       evas_shutdown();
+       if (res < 0) {
+               printf("Arguments ERROR\n");
+               return 1;
+       }
+
+       return 0;
+}
+
diff --git a/mobileprint/smsc/CMakeLists.txt b/mobileprint/smsc/CMakeLists.txt
new file mode 100644 (file)
index 0000000..bd126b8
--- /dev/null
@@ -0,0 +1,8 @@
+INCLUDE(FindPkgConfig)
+pkg_check_modules(smsc_pkgs REQUIRED dlog evas elementary edje
+               ecore ecore-input ecore-x)
+FOREACH(flag ${smsc_pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS_SMSC "${EXTRA_CFLAGS_SMSC} ${flag}")
+ENDFOREACH(flag)
+
+ADD_SUBDIRECTORY(lib)
diff --git a/mobileprint/smsc/include/smsc_control.h b/mobileprint/smsc/include/smsc_control.h
new file mode 100644 (file)
index 0000000..fcc3ada
--- /dev/null
@@ -0,0 +1,51 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef _SMSC_CONTROL_H_INCLUDED_
+#define _SMSC_CONTROL_H_INCLUDED_
+
+#include <Ecore.h>
+
+#include "smsc_position.h"
+
+
+struct smsc_control {
+       int is_pressed;
+       int last_x;
+       //int last_y;
+       //int cur_x;
+       //int cur_y;
+       Ecore_Animator *move_anim;
+       int anim_xdiff;
+       int anim_initial_offset;
+
+       struct smsc_position *position;
+};
+
+
+int init_smsc_control(struct smsc_control *control,
+               struct smsc_position *position);
+
+int reset_smsc_control(struct smsc_control *control);
+int smsc_control_begin_move(struct smsc_control *control, int xpos);
+int smsc_control_process_move(struct smsc_control *control, int xpos);
+int smsc_control_finish_move(struct smsc_control *control, int xpos);
+
+#endif /* _SMSC_CONTROL_H_INCLUDED_ */
+
diff --git a/mobileprint/smsc/include/smsc_debug.h b/mobileprint/smsc/include/smsc_debug.h
new file mode 100644 (file)
index 0000000..7e11445
--- /dev/null
@@ -0,0 +1,78 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef _SMSC_DEBUG_H_INCLUDED_
+#define _SMSC_DEBUG_H_INCLUDED_
+
+//#define SMSC_DEBUG_SILENT
+#ifdef SMSC_DEBUG_SILENT
+#define SMSC_DEBUG
+#define SMSC_TRACE_BEGIN
+#define SMSC_TRACE_END
+#else /* !SMSC_DEBUG_SILENT */
+
+/*#define SMSC_DEBUG_STANDALONE*/
+#ifdef SMSC_DEBUG_STANDALONE
+
+/* standalone debugging */
+#include <stdio.h>
+#define SMSC_DEBUG(fmt, arg...)                do { \
+               printf("DEBUG: %s: " fmt "\n", __FUNCTION__, ##arg); } while (0)
+#define SMSC_TRACE_BEGIN       SMSC_DEBUG("TRACE: %s enter", __FUNCTION__)
+#define SMSC_TRACE_END         SMSC_DEBUG("TRACE: %s leave", __FUNCTION__)
+
+#define SMSC_IF_FREE_MEM(mem) \
+       do { \
+               if(mem) { \
+                       free(mem); \
+                       mem = NULL; \
+               } \
+       } while (0)
+#define SMSC_RET_IF(expr, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PTS_PRT("[%s] Return, message "fmt, #expr, ##args );\
+                       return; \
+               } \
+       } while (0)
+#define SMSC_RETV_IF(expr, val, fmt, args...) \
+       do { \
+               if(expr) { \
+                       PTS_PRT("[%s] Return value, message "fmt, #expr, ##args );\
+                       return (val); \
+               } \
+       } while (0)
+
+#else /* !SMSC_DEBUG_STANDALONE */
+
+#include <pts_debug.h>
+#define SMSC_DEBUG(fmt, arg...)                PTS_DEBUG(fmt, ##arg)
+#define SMSC_TRACE_BEGIN               PTS_TRACE_BEGIN
+#define SMSC_TRACE_END                 PTS_TRACE_END
+
+#define SMSC_IF_FREE_MEM               PTS_IF_FREE_MEM
+#define SMSC_RET_IF                    PTS_RET_IF
+#define SMSC_RETV_IF                   PTS_RETV_IF
+
+#endif /* SMSC_DEBUG_STANDALONE */
+#endif /* SMSC_DEBUG_SILENT */
+
+
+#endif /* _SMSC_DEBUG_H_INCLUDED_ */
+
diff --git a/mobileprint/smsc/include/smsc_position.h b/mobileprint/smsc/include/smsc_position.h
new file mode 100644 (file)
index 0000000..f941ca0
--- /dev/null
@@ -0,0 +1,58 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef _SMSC_POSITION_H_INCLUDED_
+#define _SMSC_POSITION_H_INCLUDED_
+
+#include <paper_size.h>
+
+struct smsc_position {
+       int is_configured;
+       struct size_px available_size;
+       struct size_px page_size_px;
+       int page_space;
+       int pages_count;
+       int offset;
+
+       int position_update_event_type;
+};
+
+
+struct smsc_position_event {
+       int is_ok; /* STUB */
+};
+
+
+int init_smsc_position(struct smsc_position *position);
+int set_smsc_position_settings(struct smsc_position *position, int pages_count,
+               const struct size_px *available_size_px,
+               const struct size_pts *page_size);
+int get_smsc_position_all_width(const struct smsc_position *position);
+int get_smsc_position_cur_page(const struct smsc_position *position);
+int *get_smsc_position_visible_pages(const struct smsc_position *position);
+int get_smsc_position_page(const struct smsc_position *position,
+               int page, int *is_ok);
+int get_smsc_position_cur_page_center_xdiff(
+               const struct smsc_position *position, int *is_ok);
+int move_smsc_position(struct smsc_position *position, int xdiff);
+int set_smsc_position(struct smsc_position *position, int offset);
+
+
+#endif /* _SMSC_POSITION_H_INCLUDED_ */
+
diff --git a/mobileprint/smsc/include/smsc_smart.h b/mobileprint/smsc/include/smsc_smart.h
new file mode 100644 (file)
index 0000000..8f67100
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef _SMSC_SMART_H_INCLUDED_
+#define _SMSC_SMART_H_INCLUDED_
+
+#include <Evas.h>
+
+#include <paper_size.h>
+#include <pdfgen.h>
+
+
+Evas_Object *evas_smart_smsc_add(Evas *evas);
+int evas_smart_smsc_set_file(Evas_Object *o, char **const fname,
+               int files_count, const char *ppd,
+               const struct paper_size_pts *paper_size,
+               enum page_orientation orientation, int n_up,
+               const struct page_scale *scale, int is_grayscale);
+int evas_smart_smsc_set_layout(Evas_Object *o, Evas_Object *layout);
+int init_smsc_accessability_support(Evas_Object *o);
+int set_main_view_accessability_info(Evas_Object *o,
+                                                                       Evas_Object *layout,
+                                                                       const char *access_info,
+                                                                       const char *access_type,
+                                                                       const char *access_context_info);
+int evas_smart_smsc_calculate_page_number(Evas_Object *o);
+int evas_smart_smsc_get_pages_count(Evas_Object *o);
+
+#endif /* _SMSC_SMART_H_INCLUDED_ */
+
diff --git a/mobileprint/smsc/include/smsc_widget.h b/mobileprint/smsc/include/smsc_widget.h
new file mode 100644 (file)
index 0000000..5f8e1d7
--- /dev/null
@@ -0,0 +1,72 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#ifndef _SMSC_WIDGET_H_INCLUDED_
+#define _SMSC_WIDGET_H_INCLUDED_
+
+
+#include <Elementary.h>
+#include <Eina.h>
+
+#include <preview_engine.h>
+
+#include "smsc_control.h"
+#include "smsc_position.h"
+
+
+struct smsc_page_data {
+       int num;
+       Evas_Object *page_obj;
+};
+
+struct smsc_widget {
+       int is_ready;
+       Eina_List *pages_list;
+
+       struct smsc_position position;
+       struct smsc_control control;
+
+       Evas_Object *loading_animation;
+       Evas_Object *parent;
+       Evas_Object *layout;
+
+       Evas *canvas;
+
+       int posy;
+
+       int off_x;
+       int off_y;
+
+       struct preview_engine engine;
+};
+
+
+int init_smsc_widget(struct smsc_widget *widget, Evas_Object *parent);
+int clear_smsc_position_settings(struct smsc_position *position);
+
+int clear_smsc_widget(struct smsc_widget *widget);
+int hide_smsc_widget(struct smsc_widget *widget);
+int show_smsc_widget(struct smsc_widget *widget);
+int smsc_widget_set_layout(struct smsc_widget *widget, Evas_Object *layout);
+
+int move_smsc_widget_pages(struct smsc_widget *widget);
+
+
+#endif /* _SMSC_WIDGET_H_INCLUDED_ */
+
diff --git a/mobileprint/smsc/lib/CMakeLists.txt b/mobileprint/smsc/lib/CMakeLists.txt
new file mode 100644 (file)
index 0000000..fb88ed7
--- /dev/null
@@ -0,0 +1,5 @@
+FILE(GLOB SRCS *.c)
+
+ADD_LIBRARY(smsc ${SRCS})
+SET_TARGET_PROPERTIES(smsc PROPERTIES COMPILE_FLAGS "${EXTRA_CFLAGS_SMSC} -fpie")
+
diff --git a/mobileprint/smsc/lib/smsc_control.c b/mobileprint/smsc/lib/smsc_control.c
new file mode 100644 (file)
index 0000000..73eba0d
--- /dev/null
@@ -0,0 +1,131 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <string.h>
+
+#include "smsc_debug.h"
+
+#include "smsc_control.h"
+
+
+int init_smsc_control(struct smsc_control *control,
+               struct smsc_position *position)
+{
+       memset(control, 0, sizeof(struct smsc_control));
+
+       control->position = position;
+
+       control->is_pressed = 0;
+       control->last_x = 0;
+       control->move_anim = NULL;
+       //control->last_y = 0;
+       //control->cur_x = 0;
+       //control->cur_y = 0;
+
+       return 0;
+}
+
+
+int smsc_control_remove_animator(struct smsc_control *control)
+{
+       SMSC_RETV_IF(NULL == control, -1, "Argument error");
+       if (NULL == control->move_anim)
+               return 0;
+
+       ecore_animator_del(control->move_anim);
+       control->move_anim = NULL;
+
+       return 0;
+}
+
+
+int reset_smsc_control(struct smsc_control *control)
+{
+       control->is_pressed = 0;
+       smsc_control_remove_animator(control);
+       return 0;
+}
+
+
+int smsc_control_begin_move(struct smsc_control *control, int xpos)
+{
+       SMSC_RETV_IF(NULL == control, -1, "Argument error");
+
+       control->is_pressed = 1;
+       control->last_x = xpos;
+
+       SMSC_DEBUG("smsc_control_begin_move()");
+       smsc_control_remove_animator(control);
+
+       return 0;
+}
+
+
+int smsc_control_process_move(struct smsc_control *control, int xpos)
+{
+       int xpos_diff;
+
+       SMSC_RETV_IF(NULL == control, -1, "Argument error");
+
+       if (control->is_pressed) {
+               xpos_diff = control->last_x - xpos;
+               //int all_width = get_smsc_position_all_width(control->position);
+               /* simple stubbed logic */
+               /* TODO: inertia, fixation */
+               //SMSC_DEBUG("smsc_control_process_move(): moving");
+               move_smsc_position(control->position, xpos_diff);
+               control->last_x = xpos;
+       }
+
+       return 0;
+}
+
+
+static Eina_Bool smsc_control_pagefix_anim(void *data, double pos)
+{
+       struct smsc_control *control = (struct smsc_control*)data;
+       SMSC_RETV_IF(NULL == control, ECORE_CALLBACK_CANCEL, "Argument error");
+       /* TODO */
+       set_smsc_position(control->position, pos * control->anim_xdiff
+                       + control->anim_initial_offset);
+       return ECORE_CALLBACK_RENEW;
+}
+
+
+int smsc_control_finish_move(struct smsc_control *control, int xpos)
+{
+       int is_ok;
+       SMSC_RETV_IF(NULL == control, -1, "Argument error");
+       SMSC_DEBUG("smsc_control_finish_move()");
+       /* provide page center fixation */
+       /* provide animated fixation */
+       control->anim_xdiff = get_smsc_position_cur_page_center_xdiff(
+                       control->position, &is_ok);
+       SMSC_RETV_IF(0 == is_ok, -1, "Current xdiff calculation ERROR");
+       control->anim_initial_offset = control->position->offset;
+       smsc_control_remove_animator(control);
+       control->move_anim = ecore_animator_timeline_add(
+                       0.2, smsc_control_pagefix_anim, control);
+
+       control->last_x = xpos;
+       control->is_pressed = 0;
+
+       return 0;
+}
+
diff --git a/mobileprint/smsc/lib/smsc_position.c b/mobileprint/smsc/lib/smsc_position.c
new file mode 100644 (file)
index 0000000..26d69e7
--- /dev/null
@@ -0,0 +1,297 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <math.h>
+#include <stdlib.h>
+#include <string.h>
+
+#include <Ecore.h>
+
+#include <preview_coords.h>
+
+#include "smsc_debug.h"
+
+#include "smsc_position.h"
+
+
+int init_smsc_position(struct smsc_position *position)
+{
+       SMSC_DEBUG("init_smsc_position() started");
+
+       memset(position, 0, sizeof(struct smsc_position));
+
+       /* event of position update */
+       position->position_update_event_type = ecore_event_type_new();
+
+       SMSC_DEBUG("init_smsc_position() finished");
+
+       return 0;
+}
+
+
+int set_smsc_position_settings(struct smsc_position *position, int pages_count,
+               const struct size_px *available_size_px,
+               const struct size_pts *page_size)
+{
+       /* calculate page size in pixels */
+       struct size_pts min_area_size;
+       struct size_px min_area_size_px;
+       //int vis_pages = 3;
+
+       position->is_configured = 1;
+       position->pages_count = pages_count;
+       position->available_size = *available_size_px;
+       position->offset = 0;
+
+       min_area_size.x = page_size->x
+               * (1 + PAGE_SIDE_SHOW_COEFF * 2 + MIN_PAGE_SPACE_COEFF * 2);
+       min_area_size.y = page_size->y;
+
+       if (pts_size2px(&min_area_size, available_size_px,
+                       &min_area_size_px) < 0) {
+               //PGEN_DEBUG("ERROR: full_size: pts_size2px()\n");
+               return -1;
+       }
+
+       position->page_size_px.x = min_area_size_px.x
+               / (1 + PAGE_SIDE_SHOW_COEFF * 2 + MIN_PAGE_SPACE_COEFF * 2);
+       position->page_size_px.y = min_area_size_px.y;
+       SMSC_DEBUG("init_smsc_position(): page_size_px: (%d, %d)",
+                       position->page_size_px.x, position->page_size_px.y);
+
+       return 0;
+}
+
+
+int clear_smsc_position_settings(struct smsc_position *position)
+{
+       position->is_configured = 0;
+       position->pages_count = -1;
+       return 0;
+}
+
+
+int get_smsc_position_all_width(const struct smsc_position *position)
+{
+       if (position->is_configured == 0)
+               return -1;
+       if (1 == position->pages_count)
+               return 0;
+       return position->page_size_px.x * (position->pages_count - 1)
+               * (1 + MIN_PAGE_SPACE_COEFF);
+}
+
+
+int get_smsc_position_cur_page(const struct smsc_position *position)
+{
+       float res;
+
+       SMSC_RETV_IF(NULL == position, -1, "Argument error");
+       SMSC_RETV_IF(!position->is_configured, -1, "Position not configured");
+
+       /*SMSC_DEBUG("position->offset = %d", position->offset);
+       SMSC_DEBUG("position->page_size_px.x = %d", position->page_size_px.x);
+       SMSC_DEBUG("MIN_PAGE_SPACE_COEFF = %f", MIN_PAGE_SPACE_COEFF);
+       SMSC_DEBUG("position->pages_count = %d", position->pages_count);*/
+       res = (position->offset + (position->page_size_px.x / 2)
+                       * (1 + MIN_PAGE_SPACE_COEFF))
+               / (position->page_size_px.x * (1 + MIN_PAGE_SPACE_COEFF));
+       //SMSC_DEBUG("res = %f", res);
+       if (res >= position->pages_count)
+               return position->pages_count - 1;
+       else if (res < 0)
+               return 0;
+
+       return res;
+}
+
+int get_smsc_position_max_vispages_count(const struct smsc_position *position)
+{
+       int all_sizex;
+       int page_sizex;
+       int page_count;
+
+       if (NULL == position)
+               return -1;
+
+       page_sizex = position->page_size_px.x;
+       all_sizex = position->available_size.x;
+       page_count = ceil(all_sizex * (1 + MIN_PAGE_SPACE_COEFF)
+                       / (page_sizex * (1 + MIN_PAGE_SPACE_COEFF)));
+       //SMSC_DEBUG("page_count = %d", page_count);
+       if (page_count > 0) {
+               /* provide odd page_count to have central page */
+               page_count = page_count + 1 - page_count % 2;
+               //SMSC_DEBUG("corrected page_count = %d", page_count);
+               return page_count;
+       }
+       return 1;
+}
+
+int *get_smsc_position_visible_pages(const struct smsc_position *position)
+{
+       int *res;
+       int cur_page_i;
+       int cur_page;
+       int max_vispage_count;
+       int vispages_right;
+       int vispages_left;
+       int vispages;
+       int middle_page;
+       int i;
+
+       if (position->is_configured == 0)
+               return NULL;
+
+       if (1 == position->pages_count) {
+               res = malloc(sizeof(int) * (1 + 1));
+               res[0] = 0;
+               res[1] = -1;
+               return res;
+       }
+
+       cur_page_i = get_smsc_position_cur_page(position);
+       if (cur_page_i < 0)
+               return NULL;
+       cur_page = cur_page_i + 1;
+       max_vispage_count = get_smsc_position_max_vispages_count(position);
+       if (max_vispage_count < 1)
+               return NULL;
+
+       middle_page = 1 + max_vispage_count / 2;
+       vispages_left = cur_page - 1;
+       if (vispages_left > middle_page - 1)
+               vispages_left = middle_page - 1;
+       vispages_right = position->pages_count - cur_page;
+       if (vispages_right > middle_page - 1)
+               vispages_right = middle_page - 1;
+       vispages = vispages_right + vispages_left + 1;
+
+       res = malloc(sizeof(int) * (vispages + 1));
+       if (NULL == res)
+               return NULL;
+       /*SMSC_DEBUG("vispages = %d, vispages_left = %d, vispages_right = %d, "
+                       "middle_page = %d",
+                       vispages, vispages_left, vispages_right, middle_page);*/
+
+       for (i = 0; i < vispages; ++i)
+               res[i] = cur_page + (i + 1 - (vispages_left + 1)) - 1;
+       res[vispages] = -1;
+
+       return res;
+}
+
+
+int get_smsc_position_page(const struct smsc_position *position,
+               int page, int *is_ok)
+{
+       int res;
+
+       SMSC_RETV_IF(NULL == position || NULL == is_ok, -1, "Argument error");
+
+       *is_ok = 1;
+       if (position->is_configured == 0) {
+               *is_ok = 0;
+               return 0;
+       }
+       if (NULL == position || page < 0 || page >= position->pages_count) {
+               /*SMSC_DEBUG("ERROR in get_smsc_position_page(), page = %d,"
+                               " pages_count = %d",
+                               page, position->pages_count);*/
+               *is_ok = 0;
+               return 0;
+       }
+       res = position->available_size.x / 2 - position->offset
+               + page * position->page_size_px.x
+               * (1 + MIN_PAGE_SPACE_COEFF)
+               - position->page_size_px.x / 2;
+       //SMSC_DEBUG("get_smsc_position_page(): page %d: res = %d", page, res);
+       return res;
+}
+
+
+int get_smsc_position_cur_page_center_xdiff(
+               const struct smsc_position *position, int *is_ok)
+{
+       int page;
+       int res;
+       SMSC_RETV_IF(NULL == is_ok, -1, "Argument error");
+       *is_ok = 0;
+       SMSC_RETV_IF(NULL == position, -1, "Argument error");
+       *is_ok = 1;
+       page = get_smsc_position_cur_page(position);
+       SMSC_RETV_IF(page < 0, -1, "Error in current page calculation");
+       res = page * (position->page_size_px.x * (1 + MIN_PAGE_SPACE_COEFF))
+                       - position->offset;
+       return res;
+}
+
+
+int move_smsc_position(struct smsc_position *position, int xdiff)
+{
+       struct smsc_position_event *event_data;
+       int all_width;
+
+       SMSC_RETV_IF(NULL == position, -1, "Argument error");
+       SMSC_RETV_IF(position->is_configured == 0, -1, "Not configured");
+
+       all_width = get_smsc_position_all_width(position);
+       SMSC_RETV_IF(all_width < 0, -1, "Width calculation error");
+       //SMSC_DEBUG("move_smsc_position() started");
+       if (xdiff + position->offset >= all_width)
+               position->offset = all_width;
+       else if (xdiff + position->offset <= 0)
+               position->offset = 0;
+       else
+               position->offset = position->offset + xdiff;
+
+       /* emit ecore event */
+       event_data = malloc(sizeof(struct smsc_position_event));
+       memset(event_data, 0, sizeof(struct smsc_position_event));
+       ecore_event_add(position->position_update_event_type,
+                       event_data, NULL, NULL);
+
+       return 0;
+}
+
+
+int set_smsc_position(struct smsc_position *position, int offset)
+{
+       struct smsc_position_event *event_data;
+       int all_width;
+
+       SMSC_RETV_IF(NULL == position || offset < 0, -1, "Argument error");
+
+       all_width = get_smsc_position_all_width(position);
+       SMSC_RETV_IF(all_width < 0, -1, "Width calculation error");
+
+       if (offset >= all_width)
+               position->offset = all_width;
+       else
+               position->offset = offset;
+
+       /* emit ecore event */
+       event_data = malloc(sizeof(struct smsc_position_event));
+       memset(event_data, 0, sizeof(struct smsc_position_event));
+       ecore_event_add(position->position_update_event_type,
+                       event_data, NULL, NULL);
+
+       return 0;
+}
+
diff --git a/mobileprint/smsc/lib/smsc_smart.c b/mobileprint/smsc/lib/smsc_smart.c
new file mode 100644 (file)
index 0000000..6622288
--- /dev/null
@@ -0,0 +1,412 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <Evas.h>
+
+#include "smsc_debug.h"
+#include "smsc_widget.h"
+
+#include "smsc_smart.h"
+
+
+#define _evas_smart_smsc_type "Evas_Smart_Smsc"
+
+
+#define _evas_smart_smsc_type          "Evas_Smart_Smsc"
+#define EVT_CHILDREN_NUMBER_CHANGED    "children,changed"
+
+
+static const Evas_Smart_Cb_Description _smart_callbacks[] =
+{
+   {EVT_CHILDREN_NUMBER_CHANGED, "i"},
+   {NULL, NULL}
+};
+
+
+struct _Evas_Smart_Smsc_Data {
+       Evas_Object_Smart_Clipped_Data base;
+       struct smsc_widget widget;
+       Evas_Object *screen_reader_rectangle;
+
+       int is_ready;
+       struct size_px widget_size;
+
+       int is_process_file;
+       char **fnames;
+       int files_count;
+       char *ppd;
+       struct paper_size_pts paper_size;
+       enum page_orientation orientation;
+       int n_up;
+       struct page_scale scale;
+       int is_grayscale;
+};
+
+
+typedef struct _Evas_Smart_Smsc_Data Evas_Smart_Smsc_Data;
+
+
+#define EVAS_SMART_SMSC_DATA_GET(o, ptr) \
+       Evas_Smart_Smsc_Data *ptr = evas_object_smart_data_get(o)
+
+#define EVAS_SMART_SMSC_DATA_GET_OR_RETURN(o, ptr)             \
+       EVAS_SMART_SMSC_DATA_GET(o, ptr);                       \
+       if (!ptr) {                                             \
+               SMSC_DEBUG("No widget data for object %p (%s)!", \
+                               o, evas_object_type_get(o));    \
+               abort();                                        \
+               return;                                         \
+       }
+
+#define EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, ptr, val)    \
+       EVAS_SMART_SMSC_DATA_GET(o, ptr);                       \
+       if (!ptr) {                                             \
+               SMSC_DEBUG("No widget data for object %p (%s)!", \
+                               o, evas_object_type_get(o));    \
+               abort();                                        \
+               return val;                                     \
+       }
+
+EVAS_SMART_SUBCLASS_NEW(_evas_smart_smsc_type, _evas_smart_smsc,
+               Evas_Smart_Class, Evas_Smart_Class,
+               evas_object_smart_clipped_class_get, _smart_callbacks);
+
+
+static void _evas_smart_smsc_smart_add(Evas_Object *o)
+{
+       SMSC_TRACE_BEGIN;
+       EVAS_SMART_DATA_ALLOC(o, Evas_Smart_Smsc_Data);
+
+       init_smsc_widget(&(priv->widget), o);
+       priv->is_ready = 0;
+       memset(&(priv->widget_size), 0, sizeof(priv->widget_size));
+
+       priv->is_process_file = 0;
+       priv->fnames = NULL;
+       priv->files_count = 0;
+       priv->ppd = NULL;
+       memset(&(priv->paper_size), 0, sizeof(priv->paper_size));
+       priv->orientation = PAGE_ORIENTATION_PORTRAIT;
+       priv->n_up = 1;
+       memset(&(priv->scale), 0, sizeof(priv->scale));
+       priv->is_grayscale = 0;
+       priv->screen_reader_rectangle = NULL;
+
+       _evas_smart_smsc_parent_sc->add(o);
+       SMSC_TRACE_END;
+}
+
+
+static void _evas_smart_smsc_smart_del(Evas_Object *o)
+{
+       //EVAS_SMART_SMSC_DATA_GET(o, priv);
+
+       /* remove childrens */
+       /* TODO: destroy smsc_widget */
+
+       _evas_smart_smsc_parent_sc->del(o);
+}
+
+
+static void _evas_smart_smsc_smart_show(Evas_Object *o)
+{
+       EVAS_SMART_SMSC_DATA_GET(o, priv);
+       /* show smsc_widget */
+       show_smsc_widget(&(priv->widget));
+       _evas_smart_smsc_parent_sc->show(o);
+}
+
+
+static void _evas_smart_smsc_smart_hide(Evas_Object *o)
+{
+       EVAS_SMART_SMSC_DATA_GET(o, priv);
+       /* hide childrens */
+       /* TODO: save hide state for smsc_widget */
+       hide_smsc_widget(&(priv->widget));
+       _evas_smart_smsc_parent_sc->hide(o);
+}
+
+
+static void _evas_smart_smsc_smart_move(Evas_Object *o,
+               Evas_Coord x, Evas_Coord y)
+{
+       /* TODO: correct move event usage (provide picture moving animation) */
+       SMSC_TRACE_BEGIN;
+       EVAS_SMART_SMSC_DATA_GET_OR_RETURN(o, priv);
+       priv->widget.off_x = x;
+       priv->widget.off_y = y;
+       move_smsc_widget_pages(&(priv->widget));
+       evas_object_move(priv->widget.loading_animation, x, y);
+       SMSC_TRACE_END;
+}
+
+
+static void _evas_smart_smsc_smart_resize(Evas_Object *o,
+               Evas_Coord w, Evas_Coord h)
+{
+       SMSC_TRACE_BEGIN;
+       Evas_Coord ow, oh;
+       evas_object_geometry_get(o, NULL, NULL, &ow, &oh);
+       if ((ow == w) && (oh == h)) {
+               SMSC_TRACE_END;
+               return;
+       }
+
+       evas_object_smart_changed(o);
+       SMSC_TRACE_END;
+}
+
+
+void evas_smart_smsc_free_process_file_args(Evas_Smart_Smsc_Data *priv)
+{
+       int i;
+       SMSC_RET_IF(NULL == priv, "priv is NULL");
+       if (priv->fnames != NULL)
+               for (i = 0; i < priv->files_count; ++i)
+                       SMSC_IF_FREE_MEM(priv->fnames[i]);
+       SMSC_IF_FREE_MEM(priv->fnames);
+       priv->files_count = 0;
+       SMSC_IF_FREE_MEM(priv->ppd);
+       SMSC_IF_FREE_MEM(priv->paper_size.name);
+
+       priv->is_process_file = 0;
+}
+
+
+static void _evas_smart_smsc_smart_calculate(Evas_Object *o)
+{
+       SMSC_TRACE_BEGIN;
+       Evas_Coord x, y, w, h;
+
+       EVAS_SMART_SMSC_DATA_GET_OR_RETURN(o, priv);
+       evas_object_geometry_get(o, &x, &y, &w, &h);
+       SMSC_DEBUG("Geometry: (%d, %d) : (%d, %d)",
+                       x, y, w, h);
+
+       /* change children sizes */
+
+       priv->widget_size.x = w;
+       priv->widget_size.y = h;
+       priv->is_ready = 1;
+
+       /* set widget offset */
+       priv->widget.off_x = x;
+       priv->widget.off_y = y;
+
+       /* resize rectangle for accessibility support */
+       evas_object_move(priv->screen_reader_rectangle, x, y);
+       evas_object_resize(priv->screen_reader_rectangle, w, h);
+
+       clear_smsc_widget(&(priv->widget));
+
+       /* request to preview_engine for recalculation */
+       if (priv->is_process_file)
+               process_preview_engine_file(&(priv->widget.engine),
+                               priv->fnames, priv->files_count,
+                               priv->ppd, &(priv->paper_size),
+                               &(priv->widget_size), priv->orientation,
+                               priv->n_up, &(priv->scale), priv->is_grayscale);
+
+       SMSC_TRACE_END;
+}
+
+
+/* set smart interface */
+static void _evas_smart_smsc_smart_set_user(Evas_Smart_Class *sc)
+{
+       SMSC_TRACE_BEGIN;
+       sc->add = _evas_smart_smsc_smart_add;
+       sc->del = _evas_smart_smsc_smart_del;
+       sc->show = _evas_smart_smsc_smart_show;
+       sc->hide = _evas_smart_smsc_smart_hide;
+       sc->move = _evas_smart_smsc_smart_move;
+
+       sc->resize = _evas_smart_smsc_smart_resize;
+       sc->calculate = _evas_smart_smsc_smart_calculate;
+       SMSC_TRACE_END;
+}
+
+
+Evas_Object *evas_smart_smsc_add(Evas *evas)
+{
+       Evas_Object *res;
+       SMSC_TRACE_BEGIN;
+       res = evas_object_smart_add(evas, _evas_smart_smsc_smart_class_new());
+       SMSC_TRACE_END;
+       return res;
+}
+
+
+int evas_smart_smsc_set_file(Evas_Object *o, char **const fnames,
+               int files_count, const char *ppd,
+               const struct paper_size_pts *paper_size,
+               enum page_orientation orientation, int n_up,
+               const struct page_scale *scale, int is_grayscale)
+{
+       int res = 0;
+       int i;
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == o || NULL == fnames || files_count <= 0
+                       || NULL == fnames[0] || NULL == ppd
+                       || NULL == paper_size || NULL == scale,
+                       -1, "Argument error");
+       EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, priv, -1);
+
+       /* save configuration for future usage */
+       evas_smart_smsc_free_process_file_args(priv);
+
+       priv->fnames = malloc(sizeof(char*) * (files_count + 1));
+       SMSC_RETV_IF(NULL == priv->fnames, -1, "Out of memory");
+       memset(priv->fnames, 0, sizeof(char*) * (files_count + 1));
+       for (i = 0; i < files_count; ++i) {
+               priv->fnames[i] = strdup(fnames[i]);
+               if (NULL == priv->fnames[i]) {
+                       evas_smart_smsc_free_process_file_args(priv);
+                       SMSC_RETV_IF(1, -1, "Out of memory");
+               }
+       }
+       priv->files_count = files_count;
+       priv->ppd = strdup(ppd);
+       priv->paper_size = *paper_size;
+       priv->paper_size.name = strdup(paper_size->name);
+       priv->orientation = orientation;
+       priv->n_up = n_up;
+       priv->scale = *scale;
+       priv->is_grayscale = is_grayscale;
+
+       priv->is_process_file = 1;
+
+       if (NULL == priv->ppd || NULL == priv->paper_size.name) {
+               evas_smart_smsc_free_process_file_args(priv);
+               SMSC_RETV_IF(1, -1, "Out of memory");
+       }
+
+       /* request preview_engine for recalculation */
+       if (priv->is_ready) {
+               clear_smsc_widget(&(priv->widget));
+               res = process_preview_engine_file(&(priv->widget.engine),
+                               priv->fnames, priv->files_count, priv->ppd,
+                               &(priv->paper_size), &(priv->widget_size),
+                               priv->orientation, priv->n_up, &(priv->scale),
+                               priv->is_grayscale);
+       }
+
+       SMSC_TRACE_END;
+       return res;
+}
+
+//needed to get events MOUSE_IN for correct Screen Reader work
+void smsc_mouse_in_cb(void *data, Evas *evas,
+               Evas_Object *obj, void *event_info)
+{
+       SMSC_TRACE_BEGIN;
+       SMSC_TRACE_END;
+}
+
+int evas_smart_smsc_set_layout(Evas_Object *o, Evas_Object *layout)
+{
+       EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, priv, -1);
+       smsc_widget_set_layout(&(priv->widget), layout);
+       evas_object_event_callback_add(priv->screen_reader_rectangle, EVAS_CALLBACK_MOUSE_IN,
+                       smsc_mouse_in_cb, &(priv->widget));
+       return 0;
+}
+
+/* transparent rectangle to support Screen Reader */
+int init_smsc_accessability_support(Evas_Object *o)
+{
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == o, -1, "Invalid arguments");
+       EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, priv, -1);
+       struct smsc_widget *widget = &(priv->widget);
+
+       SMSC_RETV_IF(NULL == widget || NULL == widget->parent || NULL == widget->canvas, -1,
+                       "Can't get widget of object.");
+       if (NULL == priv->screen_reader_rectangle)
+       {
+               priv->screen_reader_rectangle = evas_object_rectangle_add(widget->canvas);
+               SMSC_RETV_IF(NULL == priv->screen_reader_rectangle, -1,
+                       "Failed to add rectangle to smart object widget canvas");
+       }
+
+       evas_object_color_set(priv->screen_reader_rectangle, 0, 0, 0, 0);
+       evas_object_smart_member_add(priv->screen_reader_rectangle, widget->parent);
+       evas_object_move(priv->screen_reader_rectangle,
+                                               priv->widget.off_x, priv->widget.off_y);
+       evas_object_resize(priv->screen_reader_rectangle,
+                                               priv->widget_size.x,
+                                               priv->widget_size.y);
+       evas_object_raise(priv->screen_reader_rectangle);
+       evas_object_show(priv->screen_reader_rectangle);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+/* rectangle for screen reader creating and registering in access */
+int set_main_view_accessability_info(Evas_Object *o,
+                                                                       Evas_Object *layout,
+                                                                       const char *access_info,
+                                                                       const char *access_type,
+                                                                       const char *access_context_info)
+{
+       SMSC_TRACE_BEGIN;
+       EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, priv, -1);
+
+       Evas_Object *ao;
+       ao = elm_access_object_get(priv->screen_reader_rectangle);
+       if (NULL == ao) {
+               ao = elm_access_object_register(priv->screen_reader_rectangle, layout);
+               SMSC_RETV_IF(NULL == ao, -1, "ERROR: Failed to register smsc in access!");
+       }
+       SMSC_DEBUG("Setting main view accessibility info for screen reader: %s", access_info);
+       elm_access_info_set(ao, ELM_ACCESS_INFO, access_info);
+       elm_access_info_set(ao, ELM_ACCESS_TYPE, access_type);
+       elm_access_info_set(ao, ELM_ACCESS_CONTEXT_INFO, access_context_info);
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+/**
+ * @brief      Calculate current page number based on current page offset
+ * @param[in]  o       Smooth scrolling widget
+ * @return     <0      Error (argument error or not initialized)
+ *             >=0     Current page number starting from 0
+ */
+int evas_smart_smsc_calculate_page_number(Evas_Object *o)
+{
+       EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, priv, -1);
+       return get_smsc_position_cur_page(&(priv->widget.position));
+}
+
+
+/**
+ * @brief      Get pages count
+ * @param[in]  o       Smooth scrolling widget
+ * return      <=0     Error (argument error or not initialized)
+ *             >0      Pages count
+ */
+int evas_smart_smsc_get_pages_count(Evas_Object *o)
+{
+       EVAS_SMART_SMSC_DATA_GET_OR_RETURN_VAL(o, priv, -1);
+       SMSC_RETV_IF(!priv->widget.position.is_configured,
+                       -1, "Not initialized");
+       return priv->widget.position.pages_count;
+}
diff --git a/mobileprint/smsc/lib/smsc_widget.c b/mobileprint/smsc/lib/smsc_widget.c
new file mode 100644 (file)
index 0000000..1e0fbc0
--- /dev/null
@@ -0,0 +1,674 @@
+/*
+*  Mobileprint
+*
+* Copyright 2013  Samsung Electronics Co., Ltd
+
+* Licensed under the Flora License, Version 1.1 (the "License");
+* you may not use this file except in compliance with the License.
+* You may obtain a copy of the License at
+
+* http://floralicense.org/license/
+
+* Unless required by applicable law or agreed to in writing, software
+* distributed under the License is distributed on an "AS IS" BASIS,
+* WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+* See the License for the specific language governing permissions and
+* limitations under the License.
+*
+*/
+
+#include <page_preview.h>
+#include <previewgen.h>
+
+//#include <pts_debug.h>
+
+#include "smsc_debug.h"
+
+#include "smsc_widget.h"
+
+
+int add_smsc_widget_page(struct smsc_widget *widget, int page_num)
+{
+       struct smsc_page_data *page_data;
+       int posx;
+       int is_ok;
+       char img_fname[sizeof(PREVIEW_TEMP_DIR "/mobileprint_xxxx.ppm ")];
+
+       /*int w;
+       int h;
+       int x;
+       int y;*/
+
+       SMSC_TRACE_BEGIN;
+
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+       SMSC_RETV_IF(page_num < 0
+                       || widget->engine.p_model.conf.pages_count <= 0
+                       || widget->engine.p_model.conf.pages_count <= page_num,
+                       -1, "Incorrect page number");
+
+       posx = get_smsc_position_page(&(widget->position), page_num, &is_ok);
+       SMSC_RETV_IF(!is_ok, -1, "Error in page position");
+
+       snprintf(img_fname, sizeof(img_fname), PREVIEW_TEMP_DIR "/mobileprint_%04d.ppm",
+                       page_num + 1);
+       page_data = (struct smsc_page_data*)
+                               malloc(sizeof(struct smsc_page_data));
+       SMSC_RETV_IF(NULL == page_data, -1, "Memory allocation error");
+       page_data->num = page_num;
+
+       page_data->page_obj = evas_object_image_filled_add(widget->canvas);
+       if (widget->engine.p_model.pages_state[page_num + 1]
+                       == PREVIEW_PAGE_STATE_READY) {
+               SMSC_DEBUG("loading image %s", img_fname);
+               evas_object_image_file_set(
+                               page_data->page_obj, img_fname, NULL);
+       } else {
+               SMSC_DEBUG("page %d state: %d", page_num + 1,
+                               widget->engine.p_model
+                                       .pages_state[page_num + 1]);
+               evas_object_image_file_set(page_data->page_obj,
+                               PREVIEW_EMPTY_PAGE_FNAME, NULL);
+       }
+       //evas_object_image_preload(page_data->page_obj, EINA_FALSE);
+       //evas_object_color_set(page_data->page_obj, 0, 0, 0, 255);
+
+       SMSC_DEBUG("posx = %d,"
+                       " widget->off_x = %d",
+                       posx, widget->off_x);
+       evas_object_move(page_data->page_obj,
+                       posx + widget->off_x, widget->posy);
+       evas_object_resize(page_data->page_obj,
+                       widget->position.page_size_px.x,
+                       widget->position.page_size_px.y);
+       evas_object_pass_events_set(page_data->page_obj, EINA_TRUE);
+       /* add object to smart object */
+       evas_object_smart_member_add(page_data->page_obj, widget->parent);
+       evas_object_show(page_data->page_obj);
+
+       widget->pages_list = eina_list_append(
+                       widget->pages_list, (void*)page_data);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+int destroy_smsc_widget_page(struct smsc_page_data *page_data)
+{
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == page_data, -1, "Invalid page data pointer");
+
+       evas_object_hide(page_data->page_obj);
+       evas_object_del(page_data->page_obj);
+       free(page_data);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+int destroy_smsc_widget_pages(struct smsc_widget *widget)
+{
+       struct smsc_page_data* page_data;
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+       EINA_LIST_FREE(widget->pages_list, page_data)
+               destroy_smsc_widget_page(page_data);
+       widget->pages_list = NULL;
+       SMSC_TRACE_END;
+
+       return 0;
+}
+
+
+int update_smsc_widget_page(struct smsc_widget *widget, int page_num)
+{
+       Eina_List *cur_page = NULL;
+       char img_fname[sizeof(PREVIEW_TEMP_DIR "/mobileprint_xxxx.ppm ")];
+       struct smsc_page_data* page_data;
+
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+       SMSC_RETV_IF(page_num < 0
+                       || widget->engine.p_model.conf.pages_count <= 0
+                       || widget->engine.p_model.conf.pages_count <= page_num,
+                       -1, "Incorrect page number");
+
+       if (widget->engine.p_model.pages_state[page_num + 1]
+                       != PREVIEW_PAGE_STATE_READY)
+               return -1;
+
+       snprintf(img_fname, sizeof(img_fname), PREVIEW_TEMP_DIR
+                       "/mobileprint_%04d.ppm", page_num + 1);
+       SMSC_DEBUG("page_num = %d", page_num);
+
+       EINA_LIST_FOREACH(widget->pages_list, cur_page, page_data)
+               if (page_data->num == page_num)
+                       evas_object_image_file_set(
+                                       page_data->page_obj, img_fname, NULL);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+int move_smsc_widget_pages(struct smsc_widget *widget)
+{
+       int is_ok;
+       int posx;
+       Eina_List *cur_page = NULL;
+       struct smsc_page_data* page_data;
+
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+       EINA_LIST_FOREACH(widget->pages_list, cur_page, page_data)
+               if (page_data != NULL) {
+                       posx = get_smsc_position_page(&(widget->position),
+                                       page_data->num, &is_ok);
+                       if (is_ok)
+                               evas_object_move(page_data->page_obj,
+                                               posx + widget->off_x,
+                                               widget->posy);
+               }
+
+       return 0;
+}
+
+
+int update_smsc_widget_positions(struct smsc_widget *widget)
+{
+       int *vis_pages;
+       int i;
+       Eina_List *old_pages_list = NULL;
+       Eina_List *cur_page = NULL;
+       int is_found;
+       int posx;
+       int is_ok;
+       struct smsc_page_data* page_data;
+
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+       //SMSC_DEBUG("update_smsc_widget_positions() started");
+
+       vis_pages = get_smsc_position_visible_pages(&(widget->position));
+       SMSC_RETV_IF(NULL == vis_pages, -1, "Invalid visible pages list");
+
+       /* construct new visible pages list */
+       old_pages_list = widget->pages_list;
+       widget->pages_list = NULL;
+       EINA_LIST_FREE(old_pages_list, page_data) {
+               is_found = 0;
+               if (page_data != NULL) {
+                       for (i = 0; vis_pages[i] >= 0; ++i) {
+                               /*SMSC_DEBUG("update_smsc_widget_positions():"
+                                               " i = %d, vis_pages[i] = %d", i,
+                                               vis_pages[i]);*/
+                               if (page_data->num == vis_pages[i]) {
+                                       is_found = 1;
+                                       /* move page to new list */
+                                       widget->pages_list = eina_list_append(
+                                                       widget->pages_list,
+                                                       page_data);
+                                       posx = get_smsc_position_page(
+                                                       &(widget->position),
+                                                       vis_pages[i], &is_ok);
+                                       /*SMSC_DEBUG("posx = %d,"
+                                                       " widget->off_x = %d",
+                                                       posx, widget->off_x);*/
+                                       if (is_ok)
+                                               evas_object_move(
+                                                       page_data->page_obj,
+                                                       posx + widget->off_x,
+                                                       widget->posy);
+                               }
+                       }
+                       if (!is_found)
+                               destroy_smsc_widget_page(page_data);
+               }
+       }
+
+       /* add new pages */
+       for (i = 0; vis_pages[i] >= 0; ++i) {
+               is_found = 0;
+               EINA_LIST_FOREACH(widget->pages_list, cur_page, page_data)
+                       if (page_data != NULL && page_data->num == vis_pages[i])
+                               is_found = 1;
+               if (!is_found) {
+                       /*SMSC_DEBUG("update_smsc_widget_positions(): adding,"
+                                       " i = %d, vis_pages[i] = %d",
+                                       i, vis_pages[i]);*/
+                       add_smsc_widget_page(widget, vis_pages[i]);
+               }
+       }
+
+       free(vis_pages);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+int hide_smsc_widget(struct smsc_widget *widget)
+{
+       Eina_List *cur_page = NULL;
+       struct smsc_page_data* page_data;
+
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+
+       EINA_LIST_FOREACH(widget->pages_list, cur_page, page_data)
+               if (page_data != NULL)
+                       evas_object_hide(page_data->page_obj);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+int show_smsc_widget(struct smsc_widget *widget)
+{
+       Eina_List *cur_page = NULL;
+       struct smsc_page_data* page_data;
+
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+
+       EINA_LIST_FOREACH(widget->pages_list, cur_page, page_data)
+               if (page_data != NULL)
+                       evas_object_show(page_data->page_obj);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+Evas_Object *loading_animation_add(Evas_Object *parent)
+{
+       Evas_Object *res;
+       res = elm_progressbar_add(parent);
+       SMSC_RETV_IF(res == NULL, NULL, "res is NULL");
+
+       elm_object_style_set(res, "list_process");
+       evas_object_size_hint_align_set(res, EVAS_HINT_FILL, 0.5);
+       evas_object_size_hint_weight_set(res, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       elm_progressbar_pulse(res, EINA_TRUE);
+       return res;
+}
+
+
+void show_smsc_widget_loading_animation(struct smsc_widget *widget)
+{
+       SMSC_TRACE_BEGIN;
+       SMSC_RET_IF(NULL == widget || NULL == widget->loading_animation,
+                       "Invalid widget pointer");
+
+       evas_object_move(widget->loading_animation,
+                       widget->off_x, widget->off_y);
+       evas_object_resize(widget->loading_animation,
+                       widget->position.available_size.x,
+                       widget->position.available_size.y);
+       evas_object_raise(widget->loading_animation);
+       evas_object_show(widget->loading_animation);
+       SMSC_TRACE_END;
+}
+
+
+void hide_smsc_widget_loading_animation(struct smsc_widget *widget)
+{
+       SMSC_TRACE_BEGIN;
+       SMSC_RET_IF(NULL == widget, "Invalid widget pointer");
+       if (NULL == widget->loading_animation)
+               return;
+       evas_object_hide(widget->loading_animation);
+       SMSC_TRACE_END;
+}
+
+
+int update_smsc_widget_loading_animation(struct smsc_widget *widget)
+{
+       int page_num;
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+       page_num = get_smsc_position_cur_page(&widget->position);
+       if (widget->engine.p_model.conf.pages_count <= 0) {
+               show_smsc_widget_loading_animation(widget);
+               SMSC_TRACE_END;
+               return 0;
+       }
+       if (widget->engine.p_model.pages_state[page_num + 1]
+                       != PREVIEW_PAGE_STATE_READY)
+               show_smsc_widget_loading_animation(widget);
+       else
+               hide_smsc_widget_loading_animation(widget);
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+int smsc_widget_update_page_number(struct smsc_widget *widget)
+{
+       int page_num;
+       char pages[16];
+
+       Evas *e;
+       int x;
+       int y;
+       int w;
+       int h;
+
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget, -1, "Invalid widget pointer");
+
+       page_num = get_smsc_position_cur_page(&widget->position);
+       /* update page number */
+       if (widget->position.pages_count > 1) {
+               snprintf(pages, 15, "%d / %d",
+                               page_num + 1, widget->position.pages_count);
+               pages[15] = '\0';
+       } else {
+               strcpy(pages, " ");
+       }
+       edje_object_part_text_set(elm_layout_edje_get(widget->layout),
+                       "pagenumber", pages);
+
+       /* !!! hack to enforce text updating to avoid text image caching */
+       e = evas_object_evas_get(widget->layout);
+       evas_output_viewport_get(e, &x, &y, &w, &h);
+       /* enforce bottom updating */
+       evas_damage_rectangle_add(e, 0, h * 6 / 7, w, h / 7);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+Eina_Bool smsc_widget_update_position(void *data, int type, void *event)
+{
+       int *vis_pages;
+       int i;
+       struct smsc_widget *widget;
+       //int page_num;
+       //char pages[15];
+
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == data || NULL == event,
+                       ECORE_CALLBACK_DONE, "Invalid pointer");
+
+       widget = (struct smsc_widget*)data;
+       /* update paper images positions */
+       update_smsc_widget_positions(widget);
+       smsc_widget_update_page_number(widget);
+       update_smsc_widget_loading_animation(widget);
+
+       //preview_model_debug_print_pages_state(&(widget->engine.p_model));
+
+       if (widget->engine.p_model.conf.pages_count <= 0)
+               return ECORE_CALLBACK_DONE;
+
+       /* request engine for new pages */
+       vis_pages = get_smsc_position_visible_pages(&(widget->position));
+
+       if (NULL == vis_pages)
+               return ECORE_CALLBACK_DONE;
+       for (i = 0; vis_pages[i] >= 0; ++i)
+               if (widget->engine.p_model.pages_state[vis_pages[i] + 1]
+                               == PREVIEW_PAGE_STATE_NA)
+                       preview_model_request_page(
+                                       &(widget->engine.p_model),
+                                       vis_pages[i] + 1);
+       free(vis_pages);
+       SMSC_TRACE_END;
+       return ECORE_CALLBACK_DONE;
+}
+
+void smsc_widget_mouse_up_cb(void *data, Evas *evas,
+               Evas_Object *obj, void *event_info)
+{
+       struct smsc_widget *widget = (struct smsc_widget*)data;
+       SMSC_TRACE_BEGIN;
+       SMSC_RET_IF(NULL == data || NULL == event_info, "Argument error");
+       Evas_Event_Mouse_Down *ev = event_info;
+       smsc_control_finish_move(&(widget->control), ev->canvas.x);
+       SMSC_TRACE_END;
+}
+
+
+void smsc_widget_mouse_down_cb(void *data, Evas *evas,
+               Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Down *ev = event_info;
+       struct smsc_widget *widget = (struct smsc_widget*)data;
+       SMSC_TRACE_BEGIN;
+
+       if (NULL == widget) {
+               SMSC_TRACE_END;
+               return;
+       }
+       /* send to smsc_control new coordinates and moving beginning */
+       smsc_control_begin_move(&(widget->control), ev->canvas.x);
+       SMSC_TRACE_END;
+}
+
+
+void smsc_widget_mouse_move_cb(void *data, Evas *evas,
+               Evas_Object *obj, void *event_info)
+{
+       Evas_Event_Mouse_Down *ev = event_info;
+       struct smsc_widget *widget = (struct smsc_widget*)data;
+       /* send to smsc_control new coordinates */
+       smsc_control_process_move(&(widget->control), ev->canvas.x);
+}
+
+
+int clear_smsc_widget(struct smsc_widget *widget)
+{
+       SMSC_TRACE_BEGIN;
+       hide_smsc_widget_loading_animation(widget);
+       if (widget->pages_list != NULL)
+               destroy_smsc_widget_pages(widget);
+       reset_smsc_control(&(widget->control));
+       clear_smsc_position_settings(&(widget->position));
+       smsc_widget_update_page_number(widget); /* clear page number */
+       //show_smsc_widget_loading_animation(widget);
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+int smsc_widget_load_near_pages(struct smsc_widget *widget, int page_num)
+{
+       Eina_List *cur_page = NULL;
+       struct smsc_page_data* page_data;
+
+       if (widget->engine.p_model.conf.pages_count <= 0)
+               return 0;
+
+       EINA_LIST_FOREACH(widget->pages_list, cur_page, page_data) {
+               SMSC_DEBUG("page_data->num = %d", page_data->num);
+               if (page_num == page_data->num) {
+                       if (page_num + 1 < widget->engine
+                                       .p_model.conf.pages_count
+                                       && PREVIEW_PAGE_STATE_NA
+                                       == widget->engine
+                                       .p_model.pages_state[page_num + 2])
+                               preview_model_request_page(
+                                               &(widget->engine.p_model),
+                                               page_num + 1 + 1);
+                       if (page_num + 1 > 1
+                                       && PREVIEW_PAGE_STATE_NA
+                                       == widget->engine
+                                       .p_model.pages_state[page_num])
+                               preview_model_request_page(
+                                               &(widget->engine.p_model),
+                                               page_num + 1 - 1);
+               }
+       }
+
+       return 0;
+}
+
+
+int smsc_widget_calculate_posy(struct smsc_widget *widget, int page_h)
+{
+       int h;
+       //int y;
+       int cy;
+
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget || page_h <= 0, -1, "Incorrect arguments");
+
+       //evas_object_geometry_get(widget->parent, NULL, &y, NULL, &h);
+       h = widget->position.available_size.y;
+       if (h <= 0)
+               return -1;
+
+       cy = widget->off_y + (h - page_h) / 2;
+
+       SMSC_DEBUG("cy = %d, off_y = %d, h = %d, page_h = %d",
+                       cy, widget->off_y, h, page_h);
+
+       return cy;
+}
+
+
+Eina_Bool smsc_widget_page_ready_cb(void *data, int type, void *event)
+{
+       int pages_count;
+       struct smsc_widget *widget = (struct smsc_widget*)data;
+       struct preview_engine_event *event_data =
+                       (struct preview_engine_event*)event;
+
+       struct size_px *available_size_px;
+       struct size_pts page_size;
+       /*struct size_px shadow_size_px = {10, 10};
+       struct preview_page_req settings_req;*/
+       //struct preview_page_px settings_px;
+
+       SMSC_TRACE_BEGIN;
+
+       switch (event_data->status) {
+       case PREVIEW_ENGINE_EVENT_INITIAL_READY:
+               /* initialization done: request for page */
+               pages_count = widget->engine.p_model.conf.pages_count;
+               if (pages_count <= 0)
+                       break;
+               SMSC_DEBUG("PREVIEW_ENGINE_EVENT_INITIAL_READY,"
+                               " pages_count = %d", pages_count);
+               available_size_px = &(widget->engine.p_model.conf
+                               .settings_req.available_size_px);
+
+               page_size = widget->engine.p_model.conf.paper_size.s;
+               if (widget->engine.p_model.conf.settings_req.is_rotate90)
+                       switch_size_pts_coords(&page_size);
+
+               clear_smsc_widget(widget);
+               set_smsc_position_settings(&(widget->position), pages_count,
+                               available_size_px, &page_size);
+
+               /* request empty page image */
+               preview_model_request_empty_page(
+                               &(widget->engine.p_model));
+               //update_smsc_widget_loading_animation(widget);
+               break;
+
+       case PREVIEW_ENGINE_EVENT_EMPTY_PAGE_READY:
+               preview_model_request_page(&(widget->engine.p_model), 1);
+
+               /* show empty pages */
+               widget->posy = smsc_widget_calculate_posy(widget,
+                               widget->position.page_size_px.y);
+
+               smsc_widget_update_page_number(widget);
+               update_smsc_widget_positions(widget);
+               show_smsc_widget_loading_animation(widget);
+               break;
+
+       case PREVIEW_ENGINE_EVENT_PAGE_READY:
+               /* load page */
+               SMSC_DEBUG("PREVIEW_ENGINE_EVENT_PAGE_READY,"
+                               " event_data->page = %d", event_data->page);
+               update_smsc_widget_page(widget, event_data->page - 1);
+               update_smsc_widget_loading_animation(widget);
+               smsc_widget_load_near_pages(widget, event_data->page - 1);
+               break;
+
+       case PREVIEW_ENGINE_EVENT_PAGE_PROCESSING:
+               /* TODO: show empty page */
+               /*if (event_data->page == ugd->pt_files.current_index + 1) {
+                       show_loading_animation(ugd);
+               }*/
+               break;
+
+       case PREVIEW_ENGINE_EVENT_INITIAL_ERROR:
+       case PREVIEW_ENGINE_EVENT_PAGE_ERROR:
+               /* TODO: something in error case */
+               break;
+       }
+
+       SMSC_TRACE_END;
+       return ECORE_CALLBACK_DONE;
+}
+
+
+int smsc_widget_set_layout(struct smsc_widget *widget, Evas_Object *layout)
+{
+       SMSC_TRACE_BEGIN;
+       SMSC_RETV_IF(NULL == widget || NULL == layout, -1,
+                       "Invalid arguments");
+
+       /* mouse events */
+       widget->layout = layout;
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_DOWN,
+                       smsc_widget_mouse_down_cb, widget);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_UP,
+                       smsc_widget_mouse_up_cb, widget);
+       evas_object_event_callback_add(layout, EVAS_CALLBACK_MOUSE_MOVE,
+                       smsc_widget_mouse_move_cb, widget);
+
+       SMSC_TRACE_END;
+       return 0;
+}
+
+
+int init_smsc_widget(struct smsc_widget *widget,
+               Evas_Object *parent)
+{
+       SMSC_TRACE_BEGIN;
+
+       SMSC_RETV_IF(NULL == widget || NULL == parent, -1,
+                       "Invalid arguments");
+
+       memset(widget, 0, sizeof(struct smsc_widget));
+       widget->parent = parent;
+       widget->layout = NULL;
+       widget->canvas = evas_object_evas_get(parent);
+       widget->loading_animation = loading_animation_add(widget->parent);
+       evas_object_smart_member_add(widget->loading_animation, widget->parent);
+
+       show_smsc_widget_loading_animation(widget);
+       init_smsc_position(&(widget->position));
+       init_smsc_control(&(widget->control), &(widget->position));
+       init_preview_engine(&(widget->engine));
+
+       /* connect events */
+       /* position event */
+       ecore_event_handler_add(widget->position.position_update_event_type,
+                       smsc_widget_update_position, widget);
+
+       /* preview engine events */
+       ecore_event_handler_add(widget->engine.page_ready_event_type,
+                       smsc_widget_page_ready_cb, widget);
+
+       widget->is_ready = 1;
+
+       SMSC_TRACE_END;
+
+       return 0;
+}
+
+
+/* TODO: widget destruction */
+
+
+
diff --git a/org.tizen.mobileprint.manifest b/org.tizen.mobileprint.manifest
new file mode 100644 (file)
index 0000000..433abb2
--- /dev/null
@@ -0,0 +1,9 @@
+<manifest>
+       <assign>
+               <filesystem path="/usr/share/icons/default/small/org.tizen.mobileprint.png" label="_"/>
+               <filesystem path="/usr/share/packages/org.tizen.mobileprint.xml" label="_"/>
+       </assign>
+       <request>
+               <domain name="org.tizen.mobileprint"/>
+       </request>
+</manifest>
diff --git a/org.tizen.mobileprint.rule b/org.tizen.mobileprint.rule
new file mode 100644 (file)
index 0000000..ed8b620
--- /dev/null
@@ -0,0 +1,196 @@
+_ org.tizen.mobileprint rwx
+org.tizen.mobileprint _ rw
+org.tizen.mobileprint system::vconf rwxat
+org.tizen.mobileprint system::media rwxat
+org.tizen.mobileprint system::homedir rwxat
+org.tizen.mobileprint system::share rwxat
+org.tizen.mobileprint pulseaudio rwxat
+org.tizen.mobileprint sys-assert::core rwxat
+e17 org.tizen.mobileprint rwx--
+org.tizen.app-tray org.tizen.mobileprint r-xat
+org.tizen.mobileprint system::use_internet rwxat
+system::use_internet org.tizen.mobileprint rw---
+org.tizen.mobileprint dbus rwxat
+org.tizen.mobileprint device::printer rw---
+device::printer org.tizen.mobileprint rw---
+org.tizen.mobileprint device::app_logging -w---
+org.tizen.mobileprint wifi_direct_manager rw---
+org.tizen.mobileprint isf rwx--
+org.tizen.mobileprint ug-image-viewer-efl rwxat
+org.tizen.mobileprint system::home rwxat
+org.tizen.mobileprint org.tizen.indicator rwx--
+org.tizen.mobileprint contacts-service rwx--
+org.tizen.mobileprint org.tizen.gallery rwxa-
+org.tizen.mobileprint org.tizen.gallery-service rwx--
+org.tizen.mobileprint cbhm rwx--
+org.tizen.mobileprint data-provider-master rw---
+org.tizen.mobileprint data-provider-master::shortcut rw---
+org.tizen.mobileprint data-provider-master::utility rw---
+org.tizen.mobileprint data-provider-master::notification rwx--
+org.tizen.mobileprint data-provider-master::notification.client -wx--
+org.tizen.mobileprint allshare::svc rwx--
+org.tizen.mobileprint sound_server rwx--
+org.tizen.mobileprint ail::db rw---
+org.tizen.mobileprint net-config r-x--
+org.tizen.mobileprint xorg rwx--
+org.tizen.mobileprint media-server rwx--
+org.tizen.mobileprint media-data::db rw---
+org.tizen.mobileprint pkgmgr r----
+org.tizen.mobileprint efreet r-x--
+org.tizen.mobileprint system-server rwxa-
+org.tizen.mobileprint deviced rwxa-
+org.tizen.mobileprint org.tizen.setting rwx--
+org.tizen.mobileprint org.tizen.myfile rw---
+org.tizen.mobileprint dali rwxat
+org.tizen.mobileprint csc-manager rwx--
+org.tizen.mobileprint crash-worker --x--
+org.tizen.mobileprint download-provider rw---
+org.tizen.mobileprint msg-service rwx--
+org.tizen.mobileprint cloud-content-sync::db rw---
+org.tizen.mobileprint cloud-content-sync rwx--
+org.tizen.mobileprint drmfw rw---
+org.tizen.mobileprint device::video rw---
+org.tizen.mobileprint device::hwcodec rw---
+org.tizen.mobileprint org.tizen.gallery::web-media.db rwx--
+org.tizen.mobileprint org.tizen.gallery::gallery-media.db rwx--
+org.tizen.mobileprint org.tizen.gallery::face-svc.db rwx--
+org.tizen.mobileprint ug-email-viewer-efl rwx--
+org.tizen.mobileprint email-service rwx--
+org.tizen.mobileprint ug-email-docsearch-efl --x--
+org.tizen.mobileprint camera-external-engine rw---
+org.tizen.mobileprint system::vconf_setting rwxat
+org.tizen.mobileprint system::vconf_inouse r----
+org.tizen.mobileprint system::vconf_privacy r----
+org.tizen.mobileprint system::vconf_system rw---
+org.tizen.mobileprint system::vconf_multimedia rw---
+org.tizen.mobileprint system::vconf_network rw---
+org.tizen.mobileprint system::vconf_misc r----
+aul org.tizen.mobileprint rwx--
+isf org.tizen.mobileprint r----
+org.tizen.gallery-service org.tizen.mobileprint rwx--
+org.tizen.cluster-home ug-image-viewer-efl r-x--
+org.tizen.lockscreen ug-image-viewer-efl r-x--
+org.tizen.mobileprint xorg::screencapture r----
+org.tizen.mobileprint contacts-service::db rwx--
+org.tizen.mobileprint org.tizen.smemo rwx--
+org.tizen.mobileprint ims-service::db rw---
+org.tizen.mobileprint app-svc::db rw---
+org.tizen.mobileprint org.tizen.message rwx--
+org.tizen.mobileprint mdm-server rwx--
+org.tizen.mobileprint system::vconf_inhouse rwxat
+org.tizen.mobileprint ug-msg-composer-efl rwxat
+media-server org.tizen.mobileprint -w---
+org.tizen.mobileprint contacts-service::svc rw---
+org.tizen.mobileprint contacts-service::phonelog rw---
+org.tizen.mobileprint msg-service::read rw---
+org.tizen.mobileprint msg-service::write rw---
+org.tizen.mobileprint msg-service::wappush rw---
+org.tizen.mobileprint telephony_framework::api_manager r----
+org.tizen.mobileprint telephony_framework::api_modem -w---
+org.tizen.mobileprint org.tizen.contacts rwx--
+org.tizen.mobileprint org.tizen.cluster-home rwx--
+org.tizen.cluster-home org.tizen.mobileprint r-x--
+context-service org.tizen.mobileprint r-x--
+org.tizen.mobileprint smemo::db rw---
+org.tizen.mobileprint org.tizen.browser rwx--
+org.tizen.mobileprint org.tizen.image-editor r----
+org.tizen.mobileprint org.tizen.email rwx--
+org.tizen.mobileprint org.tizen.calendar rwx--
+org.tizen.mobileprint calendar-service rwx--
+org.tizen.mobileprint device::sys_logging -w---
+org.tizen.mobileprint email-service::db rw---
+org.tizen.mobileprint webkit2-efl r-x--
+org.tizen.mobileprint data-provider-master::badge rw---
+org.tizen.mobileprint resman::db rw---
+org.tizen.mobileprint map-efl rwxat
+org.tizen.mobileprint ug-email-composer-efl rwxat
+org.tizen.mobileprint ui-gadget::client --x--
+org.tizen.mobileprint secure-storage::pkcs12 r----
+org.tizen.mobileprint email-service::write rw---
+org.tizen.mobileprint calendar-service::svc rw---
+org.tizen.mobileprint ug_bluetooth r-x--
+org.tizen.mobileprint syspopup::db rwx--
+org.tizen.mobileprint bt-service::admin -w---
+org.tizen.mobileprint bt-service::gap -w---
+org.tizen.mobileprint bt-service::manager -w---
+org.tizen.mobileprint system::app_logging -w---
+org.tizen.mobileprint svi-data rwxat
+org.tizen.mobileprint immvibed rwx--
+org.tizen.mobileprint libaccounts-svc::db rw---
+org.tizen.mobileprint org.tizen.volume rwx--
+org.tizen.mobileprint org.tizen.setting::default-resources r-x--
+org.tizen.mobileprint device::camera rw---
+org.tizen.mobileprint device::mdnie rw---
+org.tizen.mobileprint pkgmer::db r----
+org.tizen.mobileprint power_manager rwx--
+org.tizen.mobileprint stt-server rwx--
+org.tizen.mobileprint tts-server rwx--
+org.tizen.mobileprint ug-camera-efl rwxat
+org.tizen.mobileprint vcs-server rwx--
+org.tizen.mobileprint image-filter-d::db rw---
+org.tizen.mobileprint location_fw::db rw---
+org.tizen.mobileprint pkgmgr::db rw---
+org.tizen.mobileprint org.tizen.svoice rwxat
+org.tizen.mobileprint org.tizen.dropbox r-x--
+org.tizen.mobileprint org.tizen.facebook r-x--
+org.tizen.mobileprint oma-ds-agent rwx--
+oma-ds-agent org.tizen.mobileprint rwx--
+org.tizen.mobileprint oma-ds-agent::cfg rwxat
+org.tizen.setting org.tizen.mobileprint r-x--
+org.tizen.setting oma-ds-agent::cfg rwx--
+system::use_internet oma-ds-agent rwx--
+oma-ds-agent system::use_internet rwx--
+org.tizen.mobileprint syslogd rwx--
+org.tizen.mobileprint e17 r----
+org.tizen.mobileprint dlogutil r-x--
+org.tizen.mobileprint telephony_framework r-x--
+org.tizen.mobileprint aul r-x--
+org.tizen.mobileprint ode r-x--
+org.tizen.mobileprint sensor-framework r-x--
+org.tizen.mobileprint secure-storage r-x--
+org.tizen.mobileprint starter r-x--
+org.tizen.mobileprint osp-app-service r-x--
+org.tizen.mobileprint osp-security-service r-x--
+org.tizen.mobileprint osp-channel-service r-x--
+org.tizen.mobileprint org.tizen.app-tray r-x--
+org.tizen.mobileprint org.tizen.quickpanel r-x--
+org.tizen.mobileprint connman rwx--
+org.tizen.mobileprint mobicore-daemon r-x--
+org.tizen.mobileprint alarm-server rwx--
+org.tizen.mobileprint brcm_daemon r-x--
+org.tizen.mobileprint resman r-x--
+org.tizen.mobileprint osp-connectivity-service rwx--
+org.tizen.mobileprint push-service rwx--
+org.tizen.mobileprint eas-engine rwx--
+org.tizen.mobileprint org.tizen.data-provider-slave rwx--
+org.tizen.mobileprint org.tizen.data-provider-slave rwx--
+org.tizen.mobileprint usb-server rwx--
+org.tizen.mobileprint mtp-responder rwx--
+org.tizen.mobileprint sdbd rwx--
+ui-gadget::client oma-ds-agent::svc rw---
+org.tizen.mobileprint samsung-account-front r-x--
+org.tizen.mobileprint worldclock::db rw---
+org.tizen.mobileprint thumb-server r----
+org.tizen.mobileprint data-provider-master::shortcut.shortcut -w---
+org.tizen.mobileprint data-provider-master::notification.client -w---
+org.tizen.mobileprint location_fw::client rwx--
+org.tizen.mobileprint org.tizen.smartsearch --x--
+org.tizen.mobileprint ug-map-efl rwxat
+org.tizen.mobileprint obexd r-x--
+org.tizen.mobileprint phone-misc::db rw---
+org.tizen.mobileprint msg-service::db rw---
+org.tizen.mobileprint ug-msg-viewer-efl rwxat
+org.tizen.mobileprint org.tizen.fileshare-service rwxat
+org.tizen.fileshare-service org.tizen.mobileprint r-x--
+org.tizen.mobileprint nfc-manager rwx--
+org.tizen.mobileprint nfc-manager::p2p rwx--
+org.tizen.mobileprint nfc-manager::admin rwx--
+org.tizen.mobileprint ug-setting-gallery-efl rwxat
+org.tizen.mobileprint org.tizen.music-player --x--
+org.tizen.mobileprint notification::db rw---
+org.tizen.indicator org.tizen.mobileprint rwx--
+org.tizen.lockscreen org.tizen.mobileprint r-x--
+org.tizen.quickpanel org.tizen.mobileprint r-x--
+net.wifi-qs org.tizen.mobileprint rw---
+stest-service org.tizen.mobileprint r-x--
+org.tizen.mobileprint stest-service -w---
diff --git a/packaging/mobileprint.spec b/packaging/mobileprint.spec
new file mode 100644 (file)
index 0000000..b0751c3
--- /dev/null
@@ -0,0 +1,73 @@
+Name:       mobileprint
+Summary:    Library for writing UNIX daemons
+Version:    0.2.24
+Release:    1
+Group:      System/Libraries
+License:    Flora-1.1
+Source0:    %{name}-%{version}.tar.gz
+BuildRequires: cmake
+BuildRequires: gettext-tools   
+BuildRequires: edje-tools
+BuildRequires: sysman-devel
+BuildRequires: pkgconfig(appcore-efl)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(appsvc)
+BuildRequires: pkgconfig(print-service)
+BuildRequires: pkgconfig(utilX)
+BuildRequires: pkgconfig(ui-gadget-1)
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(syspopup-caller)
+BuildRequires: pkgconfig(notification)
+BuildRequires: pkgconfig(pmapi)
+BuildRequires: efl-assist-devel
+BuildRoot:  %{_tmppath}/%{name}-%{version}-build
+
+%description
+Mobile Print application
+
+%package -n org.tizen.mobileprint
+Summary:    Mobile Print application
+Group:      Development/Libraries
+Requires:      sys-assert
+Requires:      print-service
+Requires:      efl-assist
+
+%description -n org.tizen.mobileprint
+Mobile Print application
+
+%prep
+%setup -q
+
+%build
+%define PREFIX /usr/apps/org.tizen.mobileprint
+cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX}
+
+%install
+rm -rf %{buildroot}
+%make_install
+
+mkdir -p %{buildroot}/usr/share/license
+cp %{_builddir}/%{buildsubdir}/LICENSE.Flora %{buildroot}/usr/share/license/org.tizen.mobileprint
+
+mkdir -p %{buildroot}/opt/etc/smack/accesses.d/
+cp -v %{_builddir}/%{buildsubdir}/org.tizen.mobileprint.rule %{buildroot}/opt/etc/smack/accesses.d/
+
+%clean
+rm -rf %{buildroot}
+
+%post -n org.tizen.mobileprint
+   chown -R 5000:5000 /opt/%{PREFIX}/data
+
+%files -n org.tizen.mobileprint
+%manifest org.tizen.mobileprint.manifest
+/opt/etc/smack/accesses.d/org.tizen.mobileprint.rule
+%defattr(-,root,root,-)
+/usr/share/license/org.tizen.mobileprint
+%{PREFIX}/*
+/opt/%{PREFIX}/*
+/usr/share/icons/default/small/org.tizen.mobileprint.png
+#for appfw new manifest
+/usr/share/packages/org.tizen.mobileprint.xml
+
+%changelog