Tizen 2.1 base
authorJinkun Jang <jinkun.jang@samsung.com>
Tue, 12 Mar 2013 16:38:12 +0000 (01:38 +0900)
committerJinkun Jang <jinkun.jang@samsung.com>
Tue, 12 Mar 2013 16:38:12 +0000 (01:38 +0900)
141 files changed:
AUTHORS [new file with mode: 0755]
CMakeLists.txt [new file with mode: 0755]
LICENSE.Flora [new file with mode: 0755]
NOTICE [new file with mode: 0755]
daemon/common.h [new file with mode: 0755]
daemon/idletxt/idletxt.c [new file with mode: 0755]
daemon/list_util.c [new file with mode: 0755]
daemon/list_util.h [new file with mode: 0755]
daemon/minictrl/minictrl.c [new file with mode: 0755]
daemon/modules.c [new file with mode: 0755]
daemon/modules.h [new file with mode: 0755]
daemon/notifications/brightness.c [new file with mode: 0755]
daemon/notifications/noti.c [new file with mode: 0755]
daemon/notifications/noti.h [new file with mode: 0755]
daemon/notifications/noti_box.c [new file with mode: 0755]
daemon/notifications/noti_box.h [new file with mode: 0755]
daemon/notifications/noti_display_app.c [new file with mode: 0755]
daemon/notifications/noti_display_app.h [new file with mode: 0755]
daemon/notifications/noti_gridbox.c [new file with mode: 0755]
daemon/notifications/noti_gridbox.h [new file with mode: 0755]
daemon/notifications/noti_node.c [new file with mode: 0755]
daemon/notifications/noti_node.h [new file with mode: 0755]
daemon/notifications/noti_win.c [new file with mode: 0755]
daemon/notifications/noti_win.h [new file with mode: 0755]
daemon/notifications/status_msg.c [new file with mode: 0755]
daemon/notifications/ticker.c [new file with mode: 0755]
daemon/quickpanel-ui.c [new file with mode: 0755]
daemon/quickpanel-ui.h [new file with mode: 0755]
data/CMakeLists.txt [new file with mode: 0755]
data/icons/Q02_Notification_brightness.png [new file with mode: 0755]
data/icons/quick_standard_btn_nor.png [new file with mode: 0755]
data/icons/quick_standard_btn_press.png [new file with mode: 0755]
data/images/00_check_bg.png [new file with mode: 0755]
data/images/00_check_bg_dim.png [new file with mode: 0755]
data/images/00_check_bg_press.png [new file with mode: 0755]
data/images/00_check_checking.png [new file with mode: 0755]
data/images/00_check_checking_dim.png [new file with mode: 0755]
data/images/00_divider_line.png [new file with mode: 0755]
data/images/00_progress_bar.png [new file with mode: 0755]
data/images/00_progress_bg.png [new file with mode: 0755]
data/images/00_slider_handle.png [new file with mode: 0755]
data/images/00_slider_handle_dim.png [new file with mode: 0755]
data/images/00_slider_handle_press.png [new file with mode: 0755]
data/images/Q02_quickpanel_button_nomal_01_center.png [new file with mode: 0755]
data/images/Q02_quickpanel_button_nomal_01_left.png [new file with mode: 0755]
data/images/Q02_quickpanel_button_nomal_01_right.png [new file with mode: 0755]
data/images/Q02_quickpanel_button_press_01_center.png [new file with mode: 0755]
data/images/Q02_quickpanel_button_press_01_left.png [new file with mode: 0755]
data/images/Q02_quickpanel_button_press_01_right.png [new file with mode: 0755]
data/images/bg_pattern.png [new file with mode: 0755]
data/images/notification_bg.png [new file with mode: 0755]
data/images/quick_btn_close_dim.png [new file with mode: 0755]
data/images/quick_btn_close_nor.png [new file with mode: 0755]
data/images/quick_btn_close_press.png [new file with mode: 0755]
data/images/quick_handle.png [new file with mode: 0755]
data/images/quick_icon_bg_01.png [new file with mode: 0755]
data/images/quick_icon_bg_02.png [new file with mode: 0755]
data/images/quick_icon_bg_small.png [new file with mode: 0755]
data/images/quick_image_dimmed_land.png [new file with mode: 0755]
data/images/quick_image_dimmed_port.png [new file with mode: 0755]
data/images/quick_progress.9.png [new file with mode: 0755]
data/images/quick_progress_bg.9.png [new file with mode: 0755]
data/images/quick_progress_unknown_port_01.png [new file with mode: 0755]
data/images/quick_progress_unknown_port_02.png [new file with mode: 0755]
data/quickpanel.desktop.in [new file with mode: 0644]
data/quickpanel.edc [new file with mode: 0755]
data/quickpanel.png [new file with mode: 0644]
data/quickpanel.sh.in [new file with mode: 0644]
data/quickpanel.xml.in [new file with mode: 0755]
data/quickpanel_def.h [new file with mode: 0755]
data/quickpanel_noti.edc [new file with mode: 0755]
data/quickpanel_notibox.edc [new file with mode: 0755]
data/quickpanel_spn.edc [new file with mode: 0755]
data/quickpanel_theme.edc [new file with mode: 0755]
data/quickpanel_theme_def.h [new file with mode: 0755]
data/quickpanel_theme_element.edc [new file with mode: 0755]
data/sip.wav [new file with mode: 0644]
debian/changelog [new file with mode: 0755]
debian/compat [new file with mode: 0755]
debian/control [new file with mode: 0755]
debian/org.tizen.quickpanel.install.in [new file with mode: 0755]
debian/org.tizen.quickpanel.postinst.in [new file with mode: 0755]
debian/rules [new file with mode: 0755]
icons/quickpanel_icon_default.png [new file with mode: 0644]
org.tizen.quickpanel.manifest [new file with mode: 0755]
packaging/org.tizen.quickpanel.spec [new file with mode: 0755]
packaging/quickpanel.service [new file with mode: 0644]
po/CMakeLists.txt [new file with mode: 0755]
po/ar.po [new file with mode: 0755]
po/az.po [new file with mode: 0755]
po/bg.po [new file with mode: 0755]
po/ca.po [new file with mode: 0755]
po/cs.po [new file with mode: 0755]
po/da.po [new file with mode: 0755]
po/de_DE.po [new file with mode: 0755]
po/el_GR.po [new file with mode: 0755]
po/en.po [new file with mode: 0755]
po/en_PH.po [new file with mode: 0755]
po/en_US.po [new file with mode: 0755]
po/es_ES.po [new file with mode: 0755]
po/es_MX.po [new file with mode: 0755]
po/et.po [new file with mode: 0755]
po/eu.po [new file with mode: 0755]
po/fi.po [new file with mode: 0755]
po/fr_CA.po [new file with mode: 0755]
po/fr_FR.po [new file with mode: 0755]
po/ga.po [new file with mode: 0755]
po/gl.po [new file with mode: 0755]
po/hi.po [new file with mode: 0755]
po/hr.po [new file with mode: 0755]
po/hu.po [new file with mode: 0755]
po/hy.po [new file with mode: 0755]
po/is.po [new file with mode: 0755]
po/it_IT.po [new file with mode: 0755]
po/ja_JP.po [new file with mode: 0755]
po/ka.po [new file with mode: 0755]
po/kk.po [new file with mode: 0755]
po/ko_KR.po [new file with mode: 0755]
po/lt.po [new file with mode: 0755]
po/lv.po [new file with mode: 0755]
po/mk.po [new file with mode: 0755]
po/nb.po [new file with mode: 0755]
po/nl_NL.po [new file with mode: 0755]
po/pl.po [new file with mode: 0755]
po/pt_BR.po [new file with mode: 0755]
po/pt_PT.po [new file with mode: 0755]
po/ro.po [new file with mode: 0755]
po/ru_RU.po [new file with mode: 0755]
po/sk.po [new file with mode: 0755]
po/sl.po [new file with mode: 0755]
po/sr.po [new file with mode: 0755]
po/sv.po [new file with mode: 0755]
po/tr_TR.po [new file with mode: 0755]
po/uk.po [new file with mode: 0755]
po/uz.po [new file with mode: 0755]
po/zh_CN.po [new file with mode: 0755]
po/zh_HK.po [new file with mode: 0755]
po/zh_SG.po [new file with mode: 0755]
po/zh_TW.po [new file with mode: 0755]
test/quickpanel_debug_util.c [new file with mode: 0755]
test/quickpanel_debug_util.h [new file with mode: 0755]

diff --git a/AUTHORS b/AUTHORS
new file mode 100755 (executable)
index 0000000..24aebc0
--- /dev/null
+++ b/AUTHORS
@@ -0,0 +1,2 @@
+youngsub ko <ys4610.ko at samsung dot com>
+seung taek jung <seungtaek.chung at samsung dot com>
diff --git a/CMakeLists.txt b/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..f69671b
--- /dev/null
@@ -0,0 +1,114 @@
+CMAKE_MINIMUM_REQUIRED(VERSION 2.6)
+PROJECT(quickpanel C)
+
+FILE(GLOB_RECURSE DAEMON_SRCS daemon/*.c)
+AUX_SOURCE_DIRECTORY(${CMAKE_CURRENT_SOURCE_DIR}/test TEST_SRCS)
+SET(SRCS ${DAEMON_SRCS} ${TEST_SRCS})
+
+SET(VENDOR "org.tizen")
+SET(PACKAGE ${PROJECT_NAME})
+SET(PKGNAME "${VENDOR}.${PACKAGE}")
+SET(PREFIX ${CMAKE_INSTALL_PREFIX})
+SET(BINDIR "${PREFIX}/bin")
+SET(RESDIR "${PREFIX}/res")
+SET(LOCALEDIR "${RESDIR}/locale")
+SET(ICONDIR "${RESDIR}/icons")
+SET(EDJDIR "${RESDIR}/edje")
+SET(DATADIR "${PREFIX}/data")
+SET(DESKTOPDIR "/usr/share/applications")
+SET(MANIFESTXMLDIR "/usr/share/packages")
+
+IF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+       SET(CMAKE_BUILD_TYPE "Release")
+ENDIF("${CMAKE_BUILD_TYPE}" STREQUAL "")
+MESSAGE("Build type: ${CMAKE_BUILD_TYPE}")
+
+INCLUDE_DIRECTORIES(
+               ${CMAKE_CURRENT_SOURCE_DIR}/daemon
+               ${CMAKE_CURRENT_SOURCE_DIR}/data
+               ${CMAKE_CURRENT_SOURCE_DIR}/test
+               )
+
+INCLUDE(FindPkgConfig)
+pkg_check_modules(pkgs REQUIRED 
+       capi-appfw-application
+       capi-appfw-app-manager
+       capi-system-runtime-info
+       capi-system-info
+       capi-system-device
+       capi-network-tethering
+       capi-media-player
+       feedback
+       appcore-common
+       heynoti
+       notification
+       vconf
+       appsvc
+       devman_haptic
+       libprivilege-control
+       ecore-x
+       edbus
+       evas
+       ecore
+       edje
+       ecore-input
+       icu-i18n
+       enotify
+       elementary
+       dlog
+       syspopup-caller
+       minicontrol-viewer
+       minicontrol-monitor
+       utilX
+)
+
+FOREACH(flag ${pkgs_CFLAGS})
+       SET(EXTRA_CFLAGS "${EXTRA_CFLAGS} ${flag}")
+ENDFOREACH(flag)
+
+SET(CMAKE_C_FLAGS "${CMAKE_C_FLAGS} ${EXTRA_CFLAGS} -Wall -g -O2 -fpie")
+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("-fpie")
+ADD_DEFINITIONS("-DQP_INDICATOR_WIDGET_ENABLE")
+ADD_DEFINITIONS("-DQP_BRIGHTNESS_ENABLE")
+ADD_DEFINITIONS("-DQP_MINICTRL_ENABLE")
+ADD_DEFINITIONS("-DQP_DETAILED_NOTI_CHANGE_CB_ENABLE")
+
+ADD_DEFINITIONS("-DVENDOR=\"${VENDOR}\"")
+ADD_DEFINITIONS("-DPACKAGE=\"${PACKAGE}\"")
+ADD_DEFINITIONS("-DPACKAGE_NAME=\"${PKGNAME}\"")
+ADD_DEFINITIONS("-DPREFIX=\"${PREFIX}\"")
+ADD_DEFINITIONS("-DRESDIR=\"${RESDIR}\"")
+ADD_DEFINITIONS("-DLOCALEDIR=\"${LOCALEDIR}\"")
+ADD_DEFINITIONS("-DICONDIR=\"${ICONDIR}\"")
+ADD_DEFINITIONS("-DEDJDIR=\"${EDJDIR}\"")
+ADD_DEFINITIONS("-DDATADIR=\"${DATADIR}\"")
+
+#ADD_DEFINITIONS("-DFILE_DEBUG")
+ADD_DEFINITIONS("-D_DLOG_USED")
+ADD_DEFINITIONS("-DHAVE_X")
+
+
+SET(CMAKE_EXE_LINKER_FLAGS "-Wl,--as-needed")
+
+ADD_EXECUTABLE(${PROJECT_NAME} ${SRCS})
+TARGET_LINK_LIBRARIES(${PROJECT_NAME} ${pkgs_LDFLAGS} "-pie")
+#-lefence 
+
+INSTALL(TARGETS ${PROJECT_NAME} DESTINATION ${BINDIR})
+INSTALL(DIRECTORY ${CMAKE_SOURCE_DIR}/icons DESTINATION ${RESDIR})
+INSTALL(DIRECTORY DESTINATION ${DATADIR})
+
+# i18n
+ADD_SUBDIRECTORY(data)
+ADD_SUBDIRECTORY(po)
+
diff --git a/LICENSE.Flora b/LICENSE.Flora
new file mode 100755 (executable)
index 0000000..cc8727b
--- /dev/null
@@ -0,0 +1,75 @@
+Flora License
+
+Version 1.0, May, 2012
+
+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 Compatibility Definition Document and passes the Compatibility Test Suite as defined from time to time by the Tizen Technical Steering Group and certified by the Tizen Association or its designated agent.
+
+2. Grant of Copyright License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable copyright license to reproduce, prepare Derivative Works of, publicly display, publicly perform, sublicense, and distribute the Work and such Derivative Works in Source or Object form.
+
+3. Grant of Patent License. Subject to the terms and conditions of this License, each Contributor hereby grants to You a perpetual, worldwide, non-exclusive, no-charge, royalty-free, irrevocable (except as stated in this section) patent license to make, have made, use, offer to sell, sell, import, and otherwise transfer the Work solely as incorporated into a Tizen Certified Platform, where such license applies only to those patent claims licensable by such Contributor that are necessarily infringed by their Contribution(s) alone or by combination of their Contribution(s) with the Work solely as incorporated into a Tizen Certified Platform to which such Contribution(s) was submitted. If You institute patent litigation against any entity (including a cross-claim or counterclaim in a lawsuit) alleging that the Work or a Contribution incorporated within the Work constitutes direct or contributory patent infringement, then any patent licenses granted to You under this License for that Work shall terminate as of the date such litigation is filed.
+
+4. Redistribution. You may reproduce and distribute copies of the Work or Derivative Works thereof pursuant to the copyright license above, in any medium, with or without modifications, and in Source or Object form, provided that You meet the following conditions:
+
+  1. You must give any other recipients of the Work or Derivative Works a copy of this License; and
+
+  2. You must cause any modified files to carry prominent notices stating that You changed the files; and
+
+  3. You must retain, in the Source form of any Derivative Works that You distribute, all copyright, patent, trademark, and attribution notices from the Source form of the Work, excluding those notices that do not pertain to any part of the Derivative Works; and
+
+  4. If the Work includes a "NOTICE" text file as part of its distribution, then any Derivative Works that You distribute must include a readable copy of the attribution notices contained within such NOTICE file, excluding those notices that do not pertain to any part of the Derivative Works, in at least one of the following places: within a NOTICE text file distributed as part of the Derivative Works; within the Source form or documentation, if provided along with the Derivative Works; or, within a display generated by the Derivative Works, if and wherever such third-party notices normally appear. The contents of the NOTICE file are for informational purposes only and do not modify the License. You may add Your own attribution notices within Derivative Works that You distribute, alongside or as an addendum to the NOTICE text from the Work, provided that such additional attribution notices cannot be construed as modifying the License. You may add Your own copyright statement to Your modifications and may provide additional or different license terms and conditions for use, reproduction, or distribution of Your modifications, or for any such Derivative Works as a whole, provided Your use, reproduction, and distribution of the Work otherwise complies with the conditions stated in this License.
+
+5. Submission of Contributions. Unless You explicitly state otherwise, any Contribution intentionally submitted for inclusion in the Work by You to the Licensor shall be under the terms and conditions of this License, without any additional terms or conditions. Notwithstanding the above, nothing herein shall supersede or modify the terms of any separate license agreement you may have executed with Licensor regarding such Contributions.
+
+6. Trademarks. This License does not grant permission to use the trade names, trademarks, service marks, or product names of the Licensor, except as required for reasonable and customary use in describing the origin of the Work and reproducing the content of the NOTICE file.
+
+7. Disclaimer of Warranty. Unless required by applicable law or agreed to in writing, Licensor provides the Work (and each Contributor provides its Contributions) on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied, including, without limitation, any warranties or conditions of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A PARTICULAR PURPOSE. You are solely responsible for determining the appropriateness of using or redistributing the Work and assume any risks associated with Your exercise of permissions under this License.
+
+8. Limitation of Liability. In no event and under no legal theory, whether in tort (including negligence), contract, or otherwise, unless required by applicable law (such as deliberate and grossly negligent acts) or agreed to in writing, shall any Contributor be liable to You for damages, including any direct, indirect, special, incidental, or consequential damages of any character arising as a result of this License or out of the use or inability to use the Work (including but not limited to damages for loss of goodwill, work stoppage, computer failure or malfunction, or any and all other commercial damages or losses), even if such Contributor has been advised of the possibility of such damages.
+
+9. Accepting Warranty or Additional Liability. While redistributing the Work or Derivative Works thereof, You may choose to offer, and charge a fee for, acceptance of support, warranty, indemnity, or other liability obligations and/or rights consistent with this License. However, in accepting such obligations, You may act only on Your own behalf and on Your sole responsibility, not on behalf of any other Contributor, and only if You agree to indemnify, defend, and hold each Contributor harmless for any liability incurred by, or claims asserted against, such Contributor by reason of your accepting any such warranty or additional liability.
+
+END OF TERMS AND CONDITIONS
+
+APPENDIX: How to apply the Flora License to your work
+
+To apply the Flora License to your work, attach the following boilerplate notice, with the fields enclosed by brackets "[]" replaced with your own identifying information. (Don't include the brackets!) The text should be enclosed in the appropriate comment syntax for the file format. We also recommend that a file or class name and description of purpose be included on the same "printed page" as the copyright notice for easier identification within third-party archives.
+
+   Copyright [yyyy] [name of copyright owner]
+
+   Licensed under the Flora License, Version 1.0 (the "License");
+   you may not use this file except in compliance with the License.
+   You may obtain a copy of the License at
+
+       http://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 100755 (executable)
index 0000000..2295293
--- /dev/null
+++ b/NOTICE
@@ -0,0 +1,3 @@
+Copyright (c) Samsung Electronics Co., Ltd. All rights reserved.
+Except as noted, this software is licensed under Flora License, Version 1.
+Please, see the LICENSE.flora file for Flora License terms and conditions
diff --git a/daemon/common.h b/daemon/common.h
new file mode 100755 (executable)
index 0000000..79ffbb1
--- /dev/null
@@ -0,0 +1,113 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QP_COMMON_H_
+#define __QP_COMMON_H_
+
+#include <stdio.h>
+#include <stdlib.h>
+#include <errno.h>
+#include "quickpanel_debug_util.h"
+
+#define QP_OK  (0)
+#define QP_FAIL        (-1)
+
+#ifdef _DLOG_USED
+#define LOG_TAG "quickpanel"
+#include <dlog.h>
+
+#define DBG(fmt , args...) \
+       do { \
+               LOGD("[%s : %d] "fmt"\n", __func__, __LINE__, ##args); \
+       } while (0)
+
+#define INFO(fmt , args...) \
+       do { \
+               LOGI("[%s : %d] "fmt"\n", __func__, __LINE__, ##args); \
+       } while (0)
+
+#define WARN(fmt , args...) \
+       do { \
+               LOGI("[%s : %d] "fmt"\n", __func__, __LINE__, ##args); \
+       } while (0)
+
+#define ERR(fmt , args...) \
+       do { \
+               LOGI("[%s : %d] "fmt"\n", __func__, __LINE__, ##args); \
+       } while (0)
+
+#elif FILE_DEBUG /*_DLOG_USED*/
+#define DBG(fmt , args...) \
+       do { \
+               debug_printf("[D]%s : %d] "fmt"\n", \
+                       __func__, __LINE__, ##args); \
+       } while (0)
+
+#define INFO(fmt , args...) \
+       do { \
+               debug_printf("[I][%s : %d] "fmt"\n",\
+                       __func__, __LINE__, ##args); \
+       } while (0)
+
+#define WARN(fmt , args...) \
+       do { \
+               debug_printf("[W][%s : %d] "fmt"\n", \
+                       __func__, __LINE__, ##args); \
+       } while (0)
+
+#define ERR(fmt , args...) \
+       do { \
+               debug_printf("[E][%s : %d] "fmt"\n", \
+                       __func__, __LINE__, ##args); \
+       } while (0)
+
+#else /*_DLOG_USED*/
+#define DBG(fmt , args...) \
+       do { \
+               fprintf("[D][%s : %d] "fmt"\n", __func__, __LINE__, ##args); \
+       } while (0)
+
+#define INFO(fmt , args...) \
+       do { \
+               fprintf("[I][%s : %d] "fmt"\n", __func__, __LINE__, ##args); \
+       } while (0)
+
+#define WARN(fmt , args...) \
+       do { \
+               fprintf("[W][%s : %d] "fmt"\n", __func__, __LINE__, ##args); \
+       } while (0)
+
+#define ERR(fmt , args...) \
+       do { \
+               fprintf("[E][%s : %d] "fmt"\n", __func__, __LINE__, ##args); \
+       } while (0)
+#endif /*_DLOG_USED*/
+
+#define retif(cond, ret, str, args...) do { \
+       if (cond) { \
+               WARN(str, ##args);\
+               return ret;\
+       } \
+} while (0);
+
+#define gotoif(cond, target, str, args...) do { \
+       if (cond) { \
+               WARN(str, ##args); \
+               goto target; \
+       } \
+} while (0);
+
+#endif                         /* __QP_COMMON_H_ */
diff --git a/daemon/idletxt/idletxt.c b/daemon/idletxt/idletxt.c
new file mode 100755 (executable)
index 0000000..0b4c72e
--- /dev/null
@@ -0,0 +1,537 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Ecore_X.h>
+#include <vconf.h>
+#include "common.h"
+#include "quickpanel-ui.h"
+
+#define QP_IDLETXT_PART                "qp.noti.swallow.spn"
+
+#define QP_SPN_BASE_PART       "qp.base.spn.swallow"
+#define QP_SPN_BOX_PART                "qp.spn.swallow"
+#define QP_BUTTON_PART         "qp.button.swallow"
+
+#define QP_IDLETXT_MAX_KEY     4
+#define QP_IDLETXT_MAX_LEN     1024
+#define QP_IDLETXT_SLIDE_LEN   130
+
+#define QP_IDLETXT_LABEL_STRING        \
+       "<font_size=36 font=Tizen:style=Medium><color=#959494FF><align=left>%s</align>" \
+       "</color></font_size>"
+
+static int quickpanel_idletxt_init(void *data);
+static int quickpanel_idletxt_fini(void *data);
+static int quickpanel_idletxt_suspend(void *data);
+static int quickpanel_idletxt_resume(void *data);
+static void quickpanel_idletxt_lang_changed(void *data);
+
+QP_Module idletxt = {
+       .name = "idletxt",
+       .init = quickpanel_idletxt_init,
+       .fini = quickpanel_idletxt_fini,
+       .suspend = quickpanel_idletxt_suspend,
+       .resume = quickpanel_idletxt_resume,
+       .lang_changed = quickpanel_idletxt_lang_changed
+};
+
+static int _quickpanel_idletxt_map_exceptional_nwname(char *txt, char *map_txt, int map_txt_len)
+{
+       int is_mapped = 0;
+
+       if (txt == NULL || map_txt == NULL) {
+               return is_mapped;
+       }
+
+       if (strncasecmp(txt, "No Service", strlen("No Service")) == 0) {
+               strncpy(map_txt, _S("IDS_COM_BODY_NO_SERVICE"), map_txt_len);
+               is_mapped = 1;
+       } else if (strncasecmp(txt, "EMERGENCY", strlen("EMERGENCY")) == 0) {
+               strncpy(map_txt, _("IDS_CALL_POP_CALLING_EMERG_ONLY"), map_txt_len);
+               is_mapped = 1;
+       } else if (strncasecmp(txt, "Searching", strlen("Searching")) == 0) {
+               strncpy(map_txt, _S("IDS_COM_BODY_SEARCHING"), map_txt_len);
+               is_mapped = 1;
+       } else if (strncasecmp(txt, "SIM Error", strlen("SIM Error")) == 0) {
+               strncpy(map_txt, _S("IDS_COM_BODY_INVALID_SIM_CARD"), map_txt_len);
+               is_mapped = 1;
+       } else if (strncasecmp(txt, "NO SIM", strlen("NO SIM")) == 0) {
+               strncpy(map_txt, _S("IDS_COM_BODY_NO_SIM"), map_txt_len);
+               is_mapped = 1;
+       }
+
+       return is_mapped;
+}
+
+static Evas_Object *_quickpanel_idletxt_create_label(Evas_Object * parent,
+                                                    char *txt)
+{
+       Evas_Object *obj = NULL;
+       char buf[QP_IDLETXT_MAX_LEN] = { 0, };
+       char localized_txt[QP_IDLETXT_MAX_LEN] = { 0, };
+       int len = 0;
+
+       retif(parent == NULL || txt == NULL, NULL, "Invalid parameter!");
+
+       memset(buf, 0x00, sizeof(buf));
+
+       if (_quickpanel_idletxt_map_exceptional_nwname(txt, localized_txt, QP_IDLETXT_MAX_LEN) == 1) {
+               len = snprintf(buf, sizeof(buf), QP_IDLETXT_LABEL_STRING, localized_txt);
+       } else {
+               len = snprintf(buf, sizeof(buf), QP_IDLETXT_LABEL_STRING, txt);
+       }
+
+       retif(len < 0, NULL, "len < 0");
+
+       obj = elm_label_add(parent);
+       if (obj != NULL) {
+               elm_object_text_set(obj, buf);
+
+               evas_object_size_hint_weight_set(obj, EVAS_HINT_EXPAND,
+                                                EVAS_HINT_EXPAND);
+               evas_object_size_hint_align_set(obj, EVAS_HINT_FILL, 0.5);
+
+               evas_object_show(obj);
+       }
+
+       return obj;
+}
+
+static Evas_Object *_quickpanel_idletxt_create_box(Evas_Object * parent)
+{
+       Evas_Object *box = NULL;
+
+       retif(parent == NULL, NULL, "Invalid parameter!");
+
+       box = elm_box_add(parent);
+       if (box != NULL) {
+               elm_box_horizontal_set(box, EINA_FALSE);
+
+               evas_object_show(box);
+       }
+
+       return box;
+}
+
+static int _quickpanel_idletxt_get_txt(const char *key, char *txt, int size)
+{
+       int len = 0;
+       char *str = NULL;
+       int i = 0;
+
+       str = vconf_get_str(key);
+       if (str == NULL || str[0] == '\0')
+               return 0;
+
+       /* check ASCII code */
+       for (i = strlen(str) - 1; i >= 0; i--) {
+               if (str[i] <= 31 || str[i] >= 127)
+                       goto failed;
+       }
+
+       len = snprintf(txt, size, "%s", str);
+
+ failed:
+       if (str)
+               free(str);
+
+       return len;
+}
+
+static Evas_Object *_quickpanel_idletxt_add_label(Evas_Object * box,
+                                                 char *key[])
+{
+       char txt[QP_IDLETXT_MAX_LEN] = { 0, };
+       char buf[QP_IDLETXT_MAX_LEN] = { 0, };
+       int len = 0;
+       int i = 0;
+       Evas_Object *obj = NULL;
+
+       retif(key == NULL || key[0] == '\0', NULL, "Invalid parameter!");
+
+       memset(txt, 0x00, sizeof(txt));
+
+       for (i = 0; key[i]; i++) {
+               memset(buf, 0x00, sizeof(buf));
+
+               /* get next key string */
+               if (_quickpanel_idletxt_get_txt(key[i], buf, sizeof(buf))) {
+                       INFO("VCONFKEY(%s) = %s", key[i], buf);
+
+                       len = strlen(txt);
+
+                       snprintf(&txt[len], sizeof(txt) - len, "%s%s",
+                                len ? " - " : "", buf);
+               }
+       }
+
+       len = strlen(txt);
+
+       if (len) {
+               obj = _quickpanel_idletxt_create_label(box, txt);
+
+               if (obj != NULL) {
+                       if (len > QP_IDLETXT_SLIDE_LEN)
+                               elm_label_slide_set(obj, EINA_TRUE);
+
+                       return obj;
+               }
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_quickpanel_idletxt_exception_add_label(Evas_Object * box)
+{
+       int service_type = VCONFKEY_TELEPHONY_SVCTYPE_SEARCH;
+       char *text = NULL;
+       Evas_Object *obj = NULL;
+
+       if (vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &service_type) != 0) {
+               DBG("fail to get VCONFKEY_TELEPHONY_SVCTYPE");
+       }
+
+       switch(service_type) {
+               case VCONFKEY_TELEPHONY_SVCTYPE_NOSVC:
+                       text = _S("IDS_COM_BODY_NO_SERVICE");
+                       break;
+               case VCONFKEY_TELEPHONY_SVCTYPE_EMERGENCY:
+                       text = _("IDS_CALL_POP_CALLING_EMERG_ONLY");
+                       break;
+               default:
+                       if (service_type > VCONFKEY_TELEPHONY_SVCTYPE_SEARCH) {
+                               text = vconf_get_str(VCONFKEY_TELEPHONY_NWNAME);
+                       } else {
+                               text = _S("IDS_COM_BODY_SEARCHING");
+                       }
+                       break;
+       }
+
+       if (text != NULL) {
+               obj = _quickpanel_idletxt_create_label(box, text);
+
+               if (obj != NULL) {
+                       if (strlen(text) > QP_IDLETXT_SLIDE_LEN)
+                               elm_label_slide_set(obj, EINA_TRUE);
+
+                       return obj;
+               }
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_quickpanel_idletxt_get_spn(Evas_Object * box)
+{
+       Evas_Object *label = NULL;
+       char *keylist[QP_IDLETXT_MAX_KEY] = { 0, };
+       int ret = 0;
+       int state = 0;
+       int i = 0;
+       int service_type = VCONFKEY_TELEPHONY_SVCTYPE_NONE;
+
+       /* make keylist */
+       if (vconf_get_int(VCONFKEY_TELEPHONY_SVCTYPE, &service_type) != 0) {
+               DBG("fail to get VCONFKEY_TELEPHONY_SVCTYPE");
+       }
+
+       ret = vconf_get_int(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, &state);
+       if (ret == 0) {
+               INFO("VCONFKEY(%s) = %d",
+                    VCONFKEY_TELEPHONY_SPN_DISP_CONDITION, state);
+
+               if (state != VCONFKEY_TELEPHONY_DISP_INVALID
+                               && service_type > VCONFKEY_TELEPHONY_SVCTYPE_SEARCH) {
+                       if (i < QP_IDLETXT_MAX_KEY) {
+                               if (state & VCONFKEY_TELEPHONY_DISP_SPN) {
+                                       keylist[i++] =
+                                           strdup(VCONFKEY_TELEPHONY_SPN_NAME);
+                               }
+
+                               if (state & VCONFKEY_TELEPHONY_DISP_PLMN) {
+                                       keylist[i++] =
+                                           strdup(VCONFKEY_TELEPHONY_NWNAME);
+                               }
+                       }
+
+                       if (i > 0) {
+                               /* get string with keylist */
+                               label = _quickpanel_idletxt_add_label(box, keylist);
+
+                               /* free keylist */
+                               while (i > 0) {
+                                       if (keylist[i])
+                                               free(keylist[i]);
+
+                                       i--;
+                               }
+                       }
+               } else {
+                       label = _quickpanel_idletxt_exception_add_label(box);
+               }
+       }
+
+       return label;
+}
+
+static Evas_Object *_quickpanel_idletxt_get_sat_text(Evas_Object * box)
+{
+       Evas_Object *label = NULL;
+       char *keylist[] = { VCONFKEY_SAT_IDLE_TEXT, 0 };
+
+       /* get string with keylist */
+       label = _quickpanel_idletxt_add_label(box, keylist);
+
+       return label;
+}
+
+static void _quickpanel_idletxt_button_clicked(void *data, Evas_Object * obj, void *event_info)
+{
+       struct appdata *ad = data;
+       retif(obj == NULL, , "Invalid parameter!");
+       retif(ad == NULL, , "Invalid parameter!");
+       retif(ad->win == NULL, , "ad->win is NULL");
+
+       Ecore_X_Window zone;
+
+       if (ad->is_emul == 1)
+               quickpanel_launch_app(QP_SETTING_PKG_SETTING_EMUL, NULL);
+       else
+               quickpanel_launch_app(QP_SETTING_PKG_SETTING, NULL);
+
+       zone = ecore_x_e_illume_zone_get(elm_win_xwindow_get(ad->win));
+       ecore_x_e_illume_quickpanel_state_send(zone,
+                       ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
+
+       elm_object_signal_emit(obj, "elm,action,button,reset", "elm");
+}
+
+static void quickpanel_idletxt_update(void *data)
+{
+       struct appdata *ad = NULL;
+       Evas_Object *label = NULL;
+       Evas_Object *idletxtbox = NULL;
+       Evas_Object *button_settings = NULL;
+       Evas_Object *spn = NULL;
+
+       retif(!data, , "Invalid parameter!");
+       ad = data;
+
+       retif(!ad->ly, , "layout is NULL!");
+
+       spn = elm_object_part_content_get(ad->ly, QP_SPN_BASE_PART);
+       retif(!spn, , "spn layout is NULL!");
+
+       idletxtbox = elm_object_part_content_get(spn, QP_SPN_BOX_PART);
+       button_settings = elm_object_part_content_get(spn, QP_BUTTON_PART);
+
+       if (idletxtbox == NULL) {
+               idletxtbox = _quickpanel_idletxt_create_box(spn);
+               retif(idletxtbox == NULL, , "Failed to create box!");
+               elm_object_part_content_set(spn,
+                               QP_SPN_BOX_PART, idletxtbox);
+       }
+
+       elm_box_clear(idletxtbox);
+
+       /* get spn */
+       label = _quickpanel_idletxt_get_spn(idletxtbox);
+       if (label != NULL)
+               elm_box_pack_end(idletxtbox, label);
+
+       /* get sat idle text */
+       label = _quickpanel_idletxt_get_sat_text(idletxtbox);
+       if (label != NULL)
+               elm_box_pack_end(idletxtbox, label);
+
+       if (button_settings == NULL) {
+               button_settings = elm_button_add(spn);
+               retif(button_settings == NULL, , "Failed to create clear button!");
+               elm_object_style_set(button_settings, "quickpanel_standard");
+               elm_object_part_content_set(spn,
+                               QP_BUTTON_PART, button_settings);
+               evas_object_smart_callback_add(button_settings, "clicked",
+                               _quickpanel_idletxt_button_clicked, ad);
+       }
+
+       elm_object_text_set(button_settings, _S("IDS_COM_BODY_SETTINGS"));
+}
+
+static void quickpanel_idletxt_changed_cb(keynode_t *node, void *data)
+{
+       quickpanel_idletxt_update(data);
+}
+
+static int _quickpanel_idletxt_register_event_handler(void *data)
+{
+       int ret = 0;
+
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SVCTYPE,
+                               quickpanel_idletxt_changed_cb, data);
+       if (ret != 0)
+               ERR("Failed to register [%s]",
+                               VCONFKEY_TELEPHONY_SVCTYPE);
+
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION,
+                               quickpanel_idletxt_changed_cb, data);
+       if (ret != 0)
+               ERR("Failed to register [%s]",
+                       VCONFKEY_TELEPHONY_SPN_DISP_CONDITION);
+
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SPN_NAME,
+                               quickpanel_idletxt_changed_cb, data);
+       if (ret != 0)
+               ERR("Failed to register [%s]",
+                       VCONFKEY_TELEPHONY_SPN_NAME);
+
+
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_NWNAME,
+                               quickpanel_idletxt_changed_cb, data);
+       if (ret != 0)
+               ERR("Failed to register [%s]",
+                       VCONFKEY_TELEPHONY_NWNAME);
+
+       ret = vconf_notify_key_changed(VCONFKEY_SAT_IDLE_TEXT,
+                               quickpanel_idletxt_changed_cb, data);
+       if (ret != 0)
+               ERR("Failed to register [%s]",
+                       VCONFKEY_SAT_IDLE_TEXT);
+
+
+       return QP_OK;
+}
+
+static int _quickpanel_idletxt_unregister_event_handler(void)
+{
+       int ret = 0;
+
+       ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SVCTYPE,
+                                    quickpanel_idletxt_changed_cb);
+       if (ret != 0)
+               ERR("Failed to unregister [%s]",
+                               VCONFKEY_TELEPHONY_SVCTYPE);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_DISP_CONDITION,
+                                    quickpanel_idletxt_changed_cb);
+       if (ret != 0)
+               ERR("Failed to unregister [%s]",
+                       VCONFKEY_TELEPHONY_SPN_DISP_CONDITION);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SPN_NAME,
+                                    quickpanel_idletxt_changed_cb);
+       if (ret != 0)
+               ERR("Failed to unregister [%s]",
+                       VCONFKEY_TELEPHONY_SPN_NAME);
+
+
+       ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_NWNAME,
+                                    quickpanel_idletxt_changed_cb);
+       if (ret != 0)
+               ERR("Failed to unregister [%s]",
+                       VCONFKEY_TELEPHONY_NWNAME);
+
+       ret = vconf_ignore_key_changed(VCONFKEY_SAT_IDLE_TEXT,
+                                    quickpanel_idletxt_changed_cb);
+       if (ret != 0)
+               ERR("Failed to unregister [%s]",
+                       VCONFKEY_SAT_IDLE_TEXT);
+
+       return QP_OK;
+}
+
+static Evas_Object *_idletxt_load_edj(Evas_Object * parent, const char *file,
+                               const char *group)
+{
+       Eina_Bool r;
+       Evas_Object *eo = NULL;
+
+       retif(parent == NULL, NULL, "Invalid parameter!");
+
+       eo = elm_layout_add(parent);
+       retif(eo == NULL, NULL, "Failed to add layout object!");
+
+       r = elm_layout_file_set(eo, file, group);
+       retif(r != EINA_TRUE, NULL, "Failed to set edje object file!");
+
+       evas_object_size_hint_weight_set(eo,
+               EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_show(eo);
+
+       return eo;
+}
+
+static int quickpanel_idletxt_init(void *data)
+{
+       struct appdata *ad = NULL;
+       Evas_Object *spn = NULL;
+
+       retif(!data, QP_FAIL, "Invalid parameter!");
+       ad = data;
+
+       spn = _idletxt_load_edj(ad->ly, DEFAULT_EDJ, "quickpanel/spn");
+       retif(!spn, QP_FAIL, "fail to load spn layout");
+
+       elm_object_part_content_set(ad->ly, QP_SPN_BASE_PART, spn);
+
+       quickpanel_idletxt_update(data);
+
+       _quickpanel_idletxt_register_event_handler(data);
+
+       return QP_OK;
+}
+
+static int quickpanel_idletxt_fini(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Evas_Object *spn = NULL;
+       Evas_Object *idletxtbox = NULL;
+
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       _quickpanel_idletxt_unregister_event_handler();
+
+       retif(!ad->ly, QP_FAIL, "Invalid parameter!");
+
+       spn = elm_object_part_content_unset(ad->ly, QP_SPN_BASE_PART);
+       retif(!spn, QP_OK, "spn is NULL");
+
+       idletxtbox = elm_object_part_content_get(spn, QP_SPN_BOX_PART);
+       if (idletxtbox) {
+               elm_object_part_content_unset(spn, QP_SPN_BOX_PART);
+               evas_object_del(idletxtbox);
+       }
+
+       evas_object_del(spn);
+
+       return QP_OK;
+}
+
+static int quickpanel_idletxt_suspend(void *data)
+{
+       return QP_OK;
+}
+
+static int quickpanel_idletxt_resume(void *data)
+{
+       return QP_OK;
+}
+
+static void quickpanel_idletxt_lang_changed(void *data)
+{
+       retif(data == NULL, , "Invalid parameter!");
+
+       quickpanel_idletxt_update(data);
+}
diff --git a/daemon/list_util.c b/daemon/list_util.c
new file mode 100755 (executable)
index 0000000..a4e5a5e
--- /dev/null
@@ -0,0 +1,391 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Elementary.h>
+#include <stdlib.h>
+
+#include "common.h"
+#include "list_util.h"
+
+struct _qp_item_data {
+       qp_item_type_e type;
+       void *data;
+};
+
+static qp_item_count g_qp_item_count = {
+       .group = 0,
+       .ongoing = 0,
+       .noti = 0,
+       .minicontrol = 0,
+};
+
+qp_item_data *quickpanel_list_util_item_new(qp_item_type_e type, void *data)
+{
+       qp_item_data *qid = NULL;
+
+       qid = malloc(sizeof(struct _qp_item_data));
+       if (!qid) {
+               ERR("fail to alloc qid");
+               return NULL;
+       }
+
+       qid->type = type;
+       qid->data = data;
+
+       return qid;
+}
+
+qp_item_type_e quickpanel_list_util_item_get_item_type(qp_item_data *qid)
+{
+       qp_item_type_e item_type = QP_ITEM_TYPE_NONE;
+
+       if (!qid)
+               return QP_ITEM_TYPE_NONE;
+
+       item_type = qid->type;
+
+       return item_type;
+}
+
+void *quickpanel_list_util_item_get_data(qp_item_data *qid)
+{
+       void *user_data = NULL;
+
+       if (!qid)
+               return NULL;
+
+       user_data = qid->data;
+
+       return user_data;
+}
+
+void quickpanel_list_util_item_set_data(qp_item_data *qid, void *data)
+{
+       if (!qid)
+               return ;
+
+       qid->data = data;
+}
+
+int quickpanel_list_util_item_compare(const void *data1, const void *data2)
+{
+       int diff = 0;
+       qp_item_data *qid1 = NULL;
+       qp_item_data *qid2 = NULL;
+       const Elm_Object_Item *it1 = data1;
+       const Elm_Object_Item *it2 = data2;
+
+       if (!it1) {
+               INFO("it1 is NULL");
+               return -1;
+       }
+
+       if (!it2) {
+               INFO("it2 is NULL");
+               return 1;
+       }
+
+       qid1 = elm_object_item_data_get(it1);
+       qid2 = elm_object_item_data_get(it2);
+
+       if (!qid1) {
+               INFO("qid1 is NULL");
+               return -1;
+       }
+
+       if (!qid2) {
+               INFO("qid2 is NULL");
+               return 1;
+       }
+
+       /* elm_genlist sort is not working as i expected */
+       if (qid1->type == qid2->type)
+               return 1;
+
+       diff = qid1->type - qid2->type;
+       return diff;
+}
+
+void quickpanel_list_util_item_del_by_type(Evas_Object *list,
+                               const Elm_Object_Item *refer_item,
+                               qp_item_type_e type)
+{
+       const Elm_Object_Item *start_item = NULL;
+
+       if (!list)
+               return;
+
+       if (refer_item)
+               start_item = refer_item;
+       else
+               start_item = elm_genlist_first_item_get(list);
+
+       while (start_item) {
+               qp_item_data *qid = NULL;
+               const Elm_Object_Item *next = NULL;
+
+               next = elm_genlist_item_next_get(start_item);
+               qid = elm_object_item_data_get(start_item);
+               if (!qid) {
+                       ERR("fail to get qid, continue loop");
+                       start_item = next;
+                       continue;
+               }
+
+               if (qid->type > type)
+                       break;
+               else if (qid->type == type)
+                       elm_object_item_del((Elm_Object_Item *)start_item);
+
+               start_item = next;
+       }
+
+       return;
+}
+
+void quickpanel_list_util_item_update_by_type(Evas_Object *list,
+                               Elm_Object_Item *refer_item,
+                               qp_item_type_e type)
+{
+       Elm_Object_Item *start_item = NULL;
+
+       if (!list)
+               return;
+
+       if (refer_item)
+               start_item = refer_item;
+       else
+               start_item = elm_genlist_first_item_get(list);
+
+       while (start_item) {
+               qp_item_data *qid = NULL;
+               Elm_Object_Item *next = NULL;
+
+               next = elm_genlist_item_next_get(start_item);
+               qid = elm_object_item_data_get(start_item);
+               if (!qid) {
+                       ERR("fail to get qid, continue loop");
+                       start_item = next;
+                       continue;
+               }
+
+               if (qid->type > type)
+                       break;
+               else if (qid->type == type) {
+                       elm_genlist_item_fields_update(start_item, "*", ELM_GENLIST_ITEM_FIELD_ALL);
+               }
+
+               start_item = next;
+       }
+
+       return;
+}
+
+Elm_Object_Item *quickpanel_list_util_find_item_by_type(Evas_Object *list,
+                               void *data,
+                               Elm_Object_Item *refer_item,
+                               qp_item_type_e type)
+{
+       Elm_Object_Item *start_item = NULL;
+       Elm_Object_Item *found = NULL;
+
+       if (!list)
+               return NULL;
+
+       if (refer_item)
+               start_item = refer_item;
+       else
+               start_item = elm_genlist_first_item_get(list);
+
+       while (start_item) {
+               qp_item_data *qid = NULL;
+               Elm_Object_Item *next = NULL;
+               void *user_data = NULL;
+
+               next = elm_genlist_item_next_get(start_item);
+               qid = elm_object_item_data_get(start_item);
+               if (!qid) {
+                       ERR("fail to get qid, continue loop");
+                       start_item = next;
+                       continue;
+               }
+
+               if (qid->type > type)
+                       break;
+               else if (qid->type == type) {
+                       user_data = quickpanel_list_util_item_get_data(qid);
+                       if (user_data == data) {
+                               found = start_item;
+                               break;
+                       }
+               }
+
+               start_item = next;
+       }
+
+       return found;
+}
+
+static int __item_compare(const void *data1, const void *data2)
+{
+       int diff = 0;
+       const Elm_Object_Item *it1 = data1;
+       const qp_item_data *qid1 = NULL;
+       const qp_item_data *qid2 = data2;
+
+       if (!data1) {
+               INFO("data1 is NULL");
+               return -1;
+       }
+
+       if (!data2) {
+               INFO("data2 is NULL");
+               return 1;
+       }
+
+       qid1 = elm_object_item_data_get(it1);
+
+       if (!qid1) {
+               INFO("qid1 is NULL");
+               return -1;
+       }
+
+       diff = qid1->type - qid2->type;
+
+       return diff;
+}
+
+
+Elm_Object_Item *quickpanel_list_util_sort_insert(Evas_Object *list,
+                                       const Elm_Genlist_Item_Class *itc,
+                                       const void *item_data,
+                                       Elm_Object_Item *parent,
+                                       Elm_Genlist_Item_Type type,
+                                       Evas_Smart_Cb func,
+                                       const void *func_data)
+{
+       Elm_Object_Item *it = NULL;
+       Elm_Object_Item *first = NULL;
+
+       retif(!list, NULL, "list is NULL");
+       retif(!itc, NULL, "itc is NULL");
+       retif(!item_data, NULL, "item_data is NULL");
+
+       first = elm_genlist_first_item_get(list);
+       while (first) {
+               if (__item_compare(first, item_data) >= 0)
+                       break;
+
+               first = elm_genlist_item_next_get(first);
+       }
+
+       if (!first)
+               it = elm_genlist_item_append(list, itc, item_data, parent,
+                               type, func, func_data);
+       else
+               it = elm_genlist_item_insert_before(list, itc, item_data,
+                               parent, first, type, func, func_data);
+
+       if (it != NULL) {
+               quickpanel_list_util_add_count((qp_item_data *)item_data);
+       }
+
+       return it;
+}
+
+qp_item_count *quickpanel_list_util_get_item_count(void)
+{
+       return &g_qp_item_count;
+}
+
+void quickpanel_list_util_add_count(qp_item_data *qid)
+{
+       retif(qid == NULL, , "qid is NULL");
+
+       switch(qid->type)
+       {
+               case  QP_ITEM_TYPE_ONGOING_NOTI:
+                       g_qp_item_count.ongoing++;
+                       break;
+               case  QP_ITEM_TYPE_NOTI_GROUP:
+                       g_qp_item_count.group++;
+                       break;
+               case  QP_ITEM_TYPE_NOTI:
+                       g_qp_item_count.noti++;
+                       break;
+               case  QP_ITEM_TYPE_MINICTRL_ONGOING:
+               case  QP_ITEM_TYPE_MINICTRL_TOP:
+               case  QP_ITEM_TYPE_MINICTRL_MIDDLE:
+               case  QP_ITEM_TYPE_MINICTRL_LOW:
+                       g_qp_item_count.minicontrol++;
+                       break;
+               case QP_ITEM_TYPE_NONE:
+               case QP_ITEM_TYPE_SETTING:
+               case QP_ITEM_TYPE_TOGGLE:
+               case QP_ITEM_TYPE_BRIGHTNESS:
+               case QP_ITEM_TYPE_MAX:
+                       break;
+       }
+
+       DBG("(type:%d)\nnum_ongoing:%d, num_group:%d, num_noti:%d, num_minicontrol:%d"
+                       , qid->type
+                       , g_qp_item_count.ongoing
+                       , g_qp_item_count.group
+                       , g_qp_item_count.noti
+                       , g_qp_item_count.minicontrol);
+}
+
+void quickpanel_list_util_del_count(qp_item_data *qid)
+{
+       retif(qid == NULL, , "qid is NULL");
+
+       quickpanel_list_util_del_count_by_itemtype(qid->type);
+}
+
+void quickpanel_list_util_del_count_by_itemtype(qp_item_type_e type)
+{
+       switch(type)
+       {
+               case  QP_ITEM_TYPE_ONGOING_NOTI:
+                       g_qp_item_count.ongoing = (g_qp_item_count.ongoing <= 0) ? 0 : g_qp_item_count.ongoing - 1;
+                       break;
+               case  QP_ITEM_TYPE_NOTI_GROUP:
+                       g_qp_item_count.group = (g_qp_item_count.group <= 0) ? 0 : g_qp_item_count.group - 1;
+                       break;
+               case  QP_ITEM_TYPE_NOTI:
+                       g_qp_item_count.noti = (g_qp_item_count.noti <= 0) ? 0 : g_qp_item_count.noti - 1;
+                       break;
+               case  QP_ITEM_TYPE_MINICTRL_ONGOING:
+               case  QP_ITEM_TYPE_MINICTRL_TOP:
+               case  QP_ITEM_TYPE_MINICTRL_MIDDLE:
+               case  QP_ITEM_TYPE_MINICTRL_LOW:
+                       g_qp_item_count.minicontrol = (g_qp_item_count.minicontrol <= 0) ? 0 : g_qp_item_count.minicontrol - 1;
+                       break;
+               case QP_ITEM_TYPE_NONE:
+               case QP_ITEM_TYPE_SETTING:
+               case QP_ITEM_TYPE_TOGGLE:
+               case QP_ITEM_TYPE_BRIGHTNESS:
+               case QP_ITEM_TYPE_MAX:
+                       break;
+       }
+
+       DBG("(type:%d)\nnum_ongoing:%d, num_group:%d, num_noti:%d, num_minicontrol:%d"
+                       , type
+                       , g_qp_item_count.ongoing
+                       , g_qp_item_count.group
+                       , g_qp_item_count.noti
+                       , g_qp_item_count.minicontrol);
+}
diff --git a/daemon/list_util.h b/daemon/list_util.h
new file mode 100755 (executable)
index 0000000..902ec2d
--- /dev/null
@@ -0,0 +1,81 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 _QP_LIST_UTIL_DEF_
+#define _QP_LIST_UTIL_DEF_
+
+#include <Elementary.h>
+
+typedef enum {
+       QP_ITEM_TYPE_NONE = -1,
+       QP_ITEM_TYPE_SETTING = 0,
+       QP_ITEM_TYPE_TOGGLE,
+       QP_ITEM_TYPE_BRIGHTNESS,
+       QP_ITEM_TYPE_ONGOING_NOTI,
+       QP_ITEM_TYPE_MINICTRL_ONGOING,
+       QP_ITEM_TYPE_MINICTRL_TOP,
+       QP_ITEM_TYPE_MINICTRL_MIDDLE,
+       QP_ITEM_TYPE_MINICTRL_LOW,
+       QP_ITEM_TYPE_NOTI_GROUP,
+       QP_ITEM_TYPE_NOTI,
+       QP_ITEM_TYPE_MAX,
+} qp_item_type_e;
+
+typedef struct _qp_item_data qp_item_data;
+typedef struct _qp_item_count {
+       int group;
+       int ongoing;
+       int noti;
+       int minicontrol;
+} qp_item_count;
+
+
+qp_item_data *quickpanel_list_util_item_new(qp_item_type_e type, void *data);
+
+qp_item_type_e quickpanel_list_util_item_get_item_type(qp_item_data *qid);
+void *quickpanel_list_util_item_get_data(qp_item_data *qid);
+void quickpanel_list_util_item_set_data(qp_item_data *qid, void *data);
+
+int quickpanel_list_util_item_compare(const void *data1, const void *data2);
+
+void quickpanel_list_util_item_del_by_type(Evas_Object *list,
+                               const Elm_Object_Item *refer_item,
+                               qp_item_type_e type);
+
+void quickpanel_list_util_item_update_by_type(Evas_Object *list,
+                               Elm_Object_Item *refer_item,
+                               qp_item_type_e type);
+
+Elm_Object_Item *quickpanel_list_util_find_item_by_type(Evas_Object *list,
+                                       void *data,
+                                       Elm_Object_Item *refer_item,
+                                       qp_item_type_e type);
+
+Elm_Object_Item *quickpanel_list_util_sort_insert(Evas_Object *list,
+                                       const Elm_Genlist_Item_Class *itc,
+                                       const void *item_data,
+                                       Elm_Object_Item *parent,
+                                       Elm_Genlist_Item_Type type,
+                                       Evas_Smart_Cb func,
+                                       const void *func_data);
+
+qp_item_count *quickpanel_list_util_get_item_count(void);
+void quickpanel_list_util_add_count(qp_item_data *qid);
+void quickpanel_list_util_del_count(qp_item_data *qid);
+void quickpanel_list_util_del_count_by_itemtype(qp_item_type_e type);
+
+#endif /* _QP_LIST_UTIL_DEF_ */
+
diff --git a/daemon/minictrl/minictrl.c b/daemon/minictrl/minictrl.c
new file mode 100755 (executable)
index 0000000..e7c7e74
--- /dev/null
@@ -0,0 +1,457 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <Ecore_X.h>
+#include <minicontrol-viewer.h>
+#include <minicontrol-monitor.h>
+#include <string.h>
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "list_util.h"
+#include "quickpanel_debug_util.h"
+
+#define QP_R_MARGIN 12
+#define MINICONTROL_WIDTH_P_MAX 692
+#define MINICONTROL_WIDTH_L_MAX 1252
+
+#define MINICONTROL_TYPE_STR_ONGOING "_ongoing]"
+
+static int quickpanel_minictrl_init(void *data);
+static int quickpanel_minictrl_fini(void *data);
+static unsigned int quickpanel_minictrl_get_height(void *data);
+
+QP_Module minictrl = {
+       .name = "minictrl",
+       .init = quickpanel_minictrl_init,
+       .fini = quickpanel_minictrl_fini,
+       .suspend = NULL,
+       .resume = NULL,
+       .hib_enter = NULL,
+       .hib_leave = NULL,
+       .lang_changed = NULL,
+       .refresh = NULL,
+       .get_height = quickpanel_minictrl_get_height,
+};
+
+struct _viewer_item {
+       char *name;
+       unsigned int width;
+       unsigned int height;
+       minicontrol_priority_e priority;
+       Evas_Object *viewer;
+       Elm_Object_Item *it;
+       void *data;
+};
+
+GHashTable *g_prov_table;
+
+static void _viewer_set_size(Evas_Object *viewer, void *data, int width, int height)
+{
+       retif(viewer == NULL, , "Invalid parameter!");
+       retif(data == NULL, , "Invalid parameter!");
+       retif(width < 0, , "Invalid parameter!");
+       retif(height < 0, , "Invalid parameter!");
+       struct appdata *ad = data;
+       int max_width = 0;
+       int resized_width = 0;
+
+       DBG("mini w:%d h:%d", width, height);
+
+       if (ad->angle == 90 || ad->angle == 270) {
+               max_width = (ad->scale * MINICONTROL_WIDTH_L_MAX) - 1;
+       } else {
+               max_width = (ad->scale * MINICONTROL_WIDTH_P_MAX) - 1;
+       }
+       resized_width = (width > max_width) ? max_width : width;
+       evas_object_size_hint_min_set(viewer, resized_width, height);
+}
+
+static void _viewer_item_free(struct _viewer_item *item)
+{
+       if (!item)
+               return;
+
+       if (item->name)
+               free(item->name);
+
+       if (item->it)
+               elm_object_item_del(item->it);
+
+       if (item->viewer) {
+               evas_object_unref(item->viewer);
+               evas_object_del(item->viewer);
+       }
+
+       free(item);
+}
+
+#if 0
+static Evas_Object *_minictrl_load_viewer(Evas_Object *parent,
+                                       struct _viewer_item *item)
+{
+       Evas_Object *viewer = NULL;
+
+       if (!parent) {
+               ERR("parent is NULL");
+               return NULL;
+       }
+
+       if (!item) {
+               ERR("item is NULL");
+               return NULL;
+       }
+
+       if (!item->name) {
+               ERR("item name is NULL");
+               return NULL;
+       }
+
+       viewer = minicontrol_viewer_add(parent, item->name);
+       if (!viewer) {
+               ERR("fail to create viewer for [%s]", item->name);
+               return NULL;
+       }
+
+       evas_object_size_hint_min_set(viewer, item->width - QP_R_MARGIN , item->height);
+
+       return viewer;
+}
+#endif
+
+static Evas_Object *_minictrl_gl_get_content(void *data, Evas_Object * obj,
+                                       const char *part)
+{
+       Evas_Object *content = NULL;
+       qp_item_data *qid = NULL;
+       struct _viewer_item *item = NULL;
+
+       retif(data == NULL, NULL, "Invalid parameter!");
+       qid = data;
+
+       item = quickpanel_list_util_item_get_data(qid);
+       retif(!item, NULL, "item is NULL");
+
+       if (strcmp(part, "elm.icon") == 0)
+               content = item->viewer;
+
+       return content;
+}
+
+
+static Eina_Bool _minictrl_gl_get_state(void *data, Evas_Object *obj,
+                                       const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _minictrl_gl_del(void *data, Evas_Object *obj)
+{
+       if (data) {
+               quickpanel_list_util_del_count(data);
+               free(data);
+       }
+
+       return;
+}
+
+static Elm_Genlist_Item_Class *_minictrl_gl_style_get(void)
+{
+       Elm_Genlist_Item_Class *itc = NULL;
+
+       itc = elm_genlist_item_class_new();
+       if (!itc) {
+               ERR("fail to elm_genlist_item_class_new()");
+               return NULL;
+       }
+
+       itc->item_style = "minicontrol/default";
+       itc->func.text_get = NULL;
+       itc->func.content_get = _minictrl_gl_get_content;
+       itc->func.state_get = _minictrl_gl_get_state;
+       itc->func.del = _minictrl_gl_del;
+
+       return itc;
+}
+
+static int _minictrl_is_ongoing(const char *str)
+{
+       if (str == NULL) return 0;
+
+       if (strstr(str, MINICONTROL_TYPE_STR_ONGOING) != NULL) {
+               return 1;
+       } else {
+               return 0;
+       }
+}
+
+qp_item_type_e _minictrl_priority_to_type(minicontrol_priority_e priority)
+{
+       qp_item_type_e type;
+
+       switch (priority) {
+       case MINICONTROL_PRIORITY_TOP:
+               type = QP_ITEM_TYPE_MINICTRL_TOP;
+               break;
+       case MINICONTROL_PRIORITY_MIDDLE:
+               type = QP_ITEM_TYPE_MINICTRL_MIDDLE;
+               break;
+       case MINICONTROL_PRIORITY_LOW:
+       default:
+               type = QP_ITEM_TYPE_MINICTRL_LOW;
+               break;
+       }
+
+       return type;
+}
+
+static void _minictrl_add(const char *name, unsigned int width,
+                               unsigned int height,
+                               minicontrol_priority_e priority,
+                               void *data)
+{
+       qp_item_data *qid = NULL;
+       Elm_Genlist_Item_Class *itc = NULL;
+       struct _viewer_item *vit = NULL;
+       qp_item_type_e type;
+       struct appdata *ad;
+       Evas_Object *viewer = NULL;
+
+       retif(!name, , "name is NULL");
+       retif(!data, , "data is NULL");
+
+       ad = data;
+       retif(!ad->list, , "list is NULL");
+
+       if (g_prov_table) {
+               struct _viewer_item *found = NULL;
+               found = g_hash_table_lookup(g_prov_table, name);
+
+               if (found) {
+                       ERR("already have it : %s", name);
+                       return;
+               }
+       } else {
+               ERR("g_prov_table is NULL");
+               return;
+       }
+
+       /* elm_plug receives 'server_del' event,
+        * if it repeats connect and disconnect frequently.
+        *
+        */
+       viewer = minicontrol_viewer_add(ad->list, name);
+       if (!viewer) {
+               ERR("fail to add viewer - %s", name);
+               return;
+       }
+       evas_object_ref(viewer);
+       _viewer_set_size(viewer, ad, width, height);
+
+       itc = _minictrl_gl_style_get();
+       if (!itc) {
+               ERR("fail to _minictrl_gl_style_get()");
+               evas_object_del(viewer);
+               return;
+       }
+
+       vit = malloc(sizeof(struct _viewer_item));
+       if (!vit) {
+               ERR("fail to alloc vit");
+               evas_object_del(viewer);
+               elm_genlist_item_class_free(itc);
+               return;
+       }
+
+
+       if (_minictrl_is_ongoing(name) == 1) {
+               DBG("QP_ITEM_TYPE_MINICTRL_ONGOING is added");
+               type = QP_ITEM_TYPE_MINICTRL_ONGOING;
+       } else {
+               type = _minictrl_priority_to_type(priority);
+       }
+       qid = quickpanel_list_util_item_new(type, vit);
+       if (!qid) {
+               ERR("fail to alloc vit");
+               evas_object_del(viewer);
+               elm_genlist_item_class_free(itc);
+               free(vit);
+               return;
+       }
+       vit->name = strdup(name);
+       vit->width = width;
+       vit->height = height;
+       vit->priority = priority;
+       vit->viewer = viewer;
+       vit->data = data;
+       vit->it = quickpanel_list_util_sort_insert(ad->list, itc, qid, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+       g_hash_table_insert(g_prov_table, g_strdup(name), vit);
+
+       INFO("success to add %s", name);
+
+       elm_genlist_item_class_free(itc);
+
+       quickpanel_ui_update_height(ad);
+}
+
+static void _minictrl_remove(const char *name, void *data)
+{
+       if (g_prov_table) {
+               if (g_hash_table_remove(g_prov_table, name))
+               {
+                       INFO("success to remove %s", name);
+
+                       retif(data == NULL, , "data is NULL");
+                       quickpanel_ui_update_height(data);
+               }
+               else
+                       WARN("unknown provider name : %s", name);
+       }
+}
+
+static void _minictrl_update(const char *name, unsigned int width,
+                               unsigned int height, void *data)
+{
+       struct _viewer_item *found = NULL;
+       struct appdata *ad = NULL;
+
+       if (!g_prov_table)
+               return;
+
+       retif(!data, , "data is NULL");
+       ad = data;
+
+       found = g_hash_table_lookup(g_prov_table, name);
+
+       if (!found) {
+               WARN("unknown provider name : %s", name);
+               return;
+       }
+
+       found->width = width;
+       found->height = height;
+
+       if (found->viewer) {
+               _viewer_set_size(found->viewer, ad, width, height);
+       }
+
+       if (found->it) {
+               elm_genlist_item_update(found->it);
+               quickpanel_ui_update_height(ad);
+       }
+}
+
+static void _minictrl_request(const char *name, int action, void *data)
+{
+       Ecore_X_Window xwin;
+       struct appdata *ad = NULL;
+       retif(!name, , "name is NULL");
+       retif(!data, , "data is NULL");
+       ad = data;
+
+       if (action == MINICONTROL_REQ_HIDE_VIEWER) {
+               xwin = elm_win_xwindow_get(ad->win);
+               if (xwin != 0) {
+                       DBG("close by minictrl:%s", name);
+                       debug_printf("close by minictrl:%s", name);
+                       ecore_x_e_illume_quickpanel_state_send(ecore_x_e_illume_zone_get(xwin),ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
+               }
+       }
+}
+
+static void _mctrl_monitor_cb(minicontrol_action_e action,
+                               const char *name, unsigned int width,
+                               unsigned int height,
+                               minicontrol_priority_e priority,
+                               void *data)
+{
+       retif(!data, , "data is NULL");
+       retif(!name, , "name is NULL");
+
+       switch (action) {
+       case MINICONTROL_ACTION_START:
+               _minictrl_add(name, width, height, priority, data);
+               break;
+       case MINICONTROL_ACTION_RESIZE:
+               _minictrl_update(name, width, height, data);
+               break;
+       case MINICONTROL_ACTION_STOP:
+               _minictrl_remove(name, data);
+               break;
+       case MINICONTROL_ACTION_REQUEST:
+               _minictrl_request(name, width, data);
+               break;
+       default:
+               break;
+       }
+}
+
+static int quickpanel_minictrl_init(void *data)
+{
+       minicontrol_error_e ret;
+
+       retif(!data, QP_FAIL, "Invalid parameter!");
+
+       g_prov_table = g_hash_table_new_full(g_str_hash, g_str_equal,
+                                       (GDestroyNotify)g_free,
+                                       (GDestroyNotify)_viewer_item_free);
+
+       ret = minicontrol_monitor_start(_mctrl_monitor_cb, data);
+       if (ret != MINICONTROL_ERROR_NONE) {
+               ERR("fail to minicontrol_monitor_start()- %d", ret);
+               return QP_FAIL;
+       }
+
+       return QP_OK;
+}
+
+static int quickpanel_minictrl_fini(void *data)
+{
+       minicontrol_error_e ret;
+       ret = minicontrol_monitor_stop();
+       if (ret != MINICONTROL_ERROR_NONE)
+               ERR("fail to minicontrol_monitor_stop()- %d", ret);
+
+       if (g_prov_table) {
+               g_hash_table_remove_all(g_prov_table);
+               g_prov_table = NULL;
+       }
+
+       return QP_OK;
+}
+
+
+static void _quickpanel_minictrl_hf_sum_height(gpointer key, gpointer value, gpointer data)
+{
+       struct _viewer_item *item = value;
+
+       if (item != NULL && data != NULL) {
+               *((unsigned int *)data) += item->height;
+       }
+}
+
+static unsigned int quickpanel_minictrl_get_height(void *data)
+{
+       unsigned int height_minictrl = 0;
+
+       if (g_prov_table != NULL) {
+               g_hash_table_foreach(g_prov_table, _quickpanel_minictrl_hf_sum_height, &height_minictrl);
+       }
+
+       return height_minictrl;
+}
diff --git a/daemon/modules.c b/daemon/modules.c
new file mode 100755 (executable)
index 0000000..a1ddd81
--- /dev/null
@@ -0,0 +1,197 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 "common.h"
+#include "modules.h"
+
+/*******************************************************************
+  *
+  * MODULES
+  *
+  *****************************************************************/
+/* searchbar */
+/* extern QP_Module searchbar; */
+#ifdef QP_MINICTRL_ENABLE
+extern QP_Module minictrl;
+#endif /* QP_MINICTRL_ENABLE */
+#ifdef QP_BRIGHTNESS_ENABLE
+/* brightness */
+extern QP_Module brightness_ctrl;
+#endif /* QP_BRIGHTNESS_ENABLE */
+/* notification */
+extern QP_Module noti;
+extern QP_Module ticker;
+extern QP_Module ticker_status;
+/* idle test */
+extern QP_Module idletxt;
+
+static QP_Module *modules[] = {
+#ifdef QP_MINICTRL_ENABLE
+       &minictrl,
+#endif /* QP_MINICTRL_ENABLE */
+#ifdef QP_BRIGHTNESS_ENABLE
+       &brightness_ctrl,
+#endif /* QP_BRIGHTNESS_ENABLE */
+       &noti,
+       &ticker,
+       &ticker_status,
+       &idletxt
+};
+
+int init_modules(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->init)
+                       modules[i]->init(data);
+       }
+
+       return QP_OK;
+}
+
+int fini_modules(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->fini)
+                       modules[i]->fini(data);
+       }
+
+       return QP_OK;
+}
+
+int suspend_modules(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->suspend)
+                       modules[i]->suspend(data);
+       }
+
+       return QP_OK;
+}
+
+int resume_modules(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->resume)
+                       modules[i]->resume(data);
+       }
+
+       return QP_OK;
+}
+
+int hib_enter_modules(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->hib_enter)
+                       modules[i]->hib_enter(data);
+       }
+
+       return QP_OK;
+}
+
+int hib_leave_modules(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->hib_leave)
+                       modules[i]->hib_leave(data);
+       }
+
+       return QP_OK;
+}
+
+/******************************************************************
+  *
+  * LANGUAGE
+  *
+  ****************************************************************/
+
+void lang_change_modules(void *data)
+{
+       int i;
+       retif(data == NULL, , "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->lang_changed)
+                       modules[i]->lang_changed(data);
+       }
+}
+
+void refresh_modules(void *data)
+{
+       int i;
+       retif(data == NULL, , "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->refresh)
+                       modules[i]->refresh(data);
+       }
+}
+
+/******************************************************************
+  *
+  * Quickpanel open/close Events
+  *
+  ****************************************************************/
+int qp_opened_modules(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->qp_opened)
+                       modules[i]->qp_opened(data);
+       }
+
+       return QP_OK;
+}
+
+int qp_closed_modules(void *data)
+{
+       int i;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       for (i = 0; i < sizeof(modules) / sizeof(modules[0]); i++) {
+               if (modules[i]->qp_closed)
+                       modules[i]->qp_closed(data);
+       }
+
+       return QP_OK;
+}
diff --git a/daemon/modules.h b/daemon/modules.h
new file mode 100755 (executable)
index 0000000..99ec615
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QP_MODULES_H__
+#define __QP_MODULES_H__
+
+#include <stdlib.h>
+#include "quickpanel-ui.h"
+
+extern int init_modules(void *data);
+extern int fini_modules(void *data);
+extern int suspend_modules(void *data);
+extern int resume_modules(void *data);
+extern int hib_enter_modules(void *data);
+extern int hib_leave_modules(void *data);
+extern void lang_change_modules(void *data);
+extern void refresh_modules(void *data);
+extern int qp_opened_modules(void *data);
+extern int qp_closed_modules(void *data);
+
+#endif /* __QP_MODULES_H__ */
diff --git a/daemon/notifications/brightness.c b/daemon/notifications/brightness.c
new file mode 100755 (executable)
index 0000000..1a98da7
--- /dev/null
@@ -0,0 +1,464 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <glib.h>
+#include <string.h>
+#include <vconf.h>
+#include <device.h>
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "list_util.h"
+#include "quickpanel_theme_def.h"
+
+#define BRIGHTNESS_MIN 1
+#define BRIGHTNESS_MAX 100
+
+#define QP_BRIGHTNESS_CONTROL_ICON_IMG ICONDIR"/Q02_Notification_brightness.png"
+
+static int quickpanel_brightness_init(void *data);
+static int quickpanel_brightness_fini(void *data);
+static void quickpanel_brightness_lang_changed(void *data);
+static unsigned int quickpanel_brightness_get_height(void *data);
+static void quickpanel_brightness_qp_opened(void *data);
+static void quickpanel_brightness_qp_closed(void *data);
+
+QP_Module brightness_ctrl = {
+       .name = "brightness_ctrl",
+       .init = quickpanel_brightness_init,
+       .fini = quickpanel_brightness_fini,
+       .suspend = NULL,
+       .resume = NULL,
+       .hib_enter = NULL,
+       .hib_leave = NULL,
+       .lang_changed = quickpanel_brightness_lang_changed,
+       .refresh = NULL,
+       .get_height = quickpanel_brightness_get_height,
+       .qp_opened = quickpanel_brightness_qp_opened,
+       .qp_closed = quickpanel_brightness_qp_closed,
+};
+
+typedef struct _brightness_ctrl_obj {
+       int min_level;
+       int max_level;
+       Evas_Object *checker;
+       Evas_Object *slider;
+       Elm_Object_Item *it;
+       void *data;
+} brightness_ctrl_obj;
+
+brightness_ctrl_obj *g_ctrl_obj;
+
+static void _brightness_vconf_cb(keynode_t *key, void* data) {
+       brightness_ctrl_obj *ctrl_obj = NULL;
+
+       retif(data == NULL, , "Data parameter is NULL");
+       ctrl_obj = data;
+
+       if (ctrl_obj->it != NULL) {
+               elm_genlist_item_fields_update(ctrl_obj->it, "elm.check.swallow", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               elm_genlist_item_fields_update(g_ctrl_obj->it, "elm.swallow.slider", ELM_GENLIST_ITEM_FIELD_CONTENT);
+       }
+}
+
+static void quickpanel_brightness_qp_opened(void *data)
+{
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, , "Invalid parameter!");
+       ad = data;
+
+       retif(g_ctrl_obj == NULL, , "Invalid parameter!");
+
+       if (g_ctrl_obj->it != NULL) {
+               elm_genlist_item_fields_update(g_ctrl_obj->it, "elm.swallow.slider", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               elm_genlist_item_fields_update(g_ctrl_obj->it, "elm.check.swallow", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               vconf_ignore_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, _brightness_vconf_cb);
+       }
+}
+
+static void quickpanel_brightness_qp_closed(void *data)
+{
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, , "Invalid parameter!");
+       ad = data;
+
+       retif(g_ctrl_obj == NULL, , "Invalid parameter!");
+
+       if (g_ctrl_obj->it != NULL) {
+               vconf_notify_key_changed(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, _brightness_vconf_cb, g_ctrl_obj);
+       }
+}
+
+int _brightness_is_low_battery(void) {
+       int battery_value;
+
+       vconf_get_int(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, &battery_value);
+
+       if (battery_value < VCONFKEY_SYSMAN_BAT_WARNING_LOW)
+               return 1;
+       else
+               return 0;
+}
+
+int _brightness_set_level(int level) {
+       int ret = DEVICE_ERROR_NONE;
+
+       ret = device_set_brightness_to_settings(0, level);
+       if (ret != DEVICE_ERROR_NONE) {
+               ERR("failed to set brightness");
+       }
+
+       return level;
+}
+
+int _brightness_get_level(void) {
+       int level = 0;
+
+       if (vconf_get_int(VCONFKEY_SETAPPL_LCD_BRIGHTNESS, &level) == 0)
+               return level;
+       else
+               return SETTING_BRIGHTNESS_LEVEL5;
+}
+
+int _brightness_set_automate_level(int is_on) {
+       return vconf_set_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, is_on);
+}
+
+int _brightness_get_automate_level(void) {
+       int is_on = 0;
+
+       if (vconf_get_int(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, &is_on) == 0)
+               return is_on;
+       else
+               return SETTING_BRIGHTNESS_AUTOMATIC_OFF;
+}
+
+static void
+_brightness_ctrl_slider_changed_cb(void *data,
+                                                        Evas_Object *obj,
+                                                        void *event_info)
+{
+       int ret = DEVICE_ERROR_NONE;
+       int value = 0;
+       static int old_val = -1;
+       brightness_ctrl_obj *ctrl_obj = NULL;
+
+       DBG("");
+
+       retif(data == NULL, , "Data parameter is NULL");
+       ctrl_obj = data;
+
+       if (ctrl_obj->checker != NULL) {
+               value = elm_check_state_get(ctrl_obj->checker);
+               if (value == 1) {       /* it is automatic setting mode, */
+                       /* do nothing */
+                       return;
+               }
+       }
+
+       double val = elm_slider_value_get(obj);
+       value = (int)(val + 0.5);
+
+       DBG("value:%d old_val:%d", value, old_val);
+
+       if (value != old_val)
+       {
+               DBG("min_level:%d max_level:%d", ctrl_obj->min_level, ctrl_obj->max_level);
+               if (value >= ctrl_obj->min_level && value <= ctrl_obj->max_level) {
+                       DBG("new brgt:%d", value);
+                       ret = device_set_brightness_to_settings(0, value);
+                       old_val = value;
+                       if (ret != DEVICE_ERROR_NONE) {
+                               ERR("failed to set brightness");
+                       }
+               }
+       }
+}
+
+static void
+_brightness_ctrl_slider_delayed_changed_cb(void *data,
+                                                        Evas_Object *obj,
+                                                        void *event_info)
+{
+       int ret = DEVICE_ERROR_NONE;
+       int value = 0;
+
+       ret = device_get_brightness(0, &value);
+
+       DBG("ret:%d value:%d", ret, value);
+       if (ret == DEVICE_ERROR_NONE) {
+               DBG("delayed new brgt:%d", value);
+               _brightness_set_level(value);
+       }
+}
+
+static void _brightness_ctrl_checker_toggle_cb(void *data,
+                                                               Evas_Object * obj,
+                                                               void *event_info)
+{
+       retif(obj == NULL, , "obj parameter is NULL");
+
+       int status = elm_check_state_get(obj);
+       brightness_ctrl_obj *ctrl_obj = NULL;
+
+       retif(data == NULL, , "Data parameter is NULL");
+       ctrl_obj = data;
+
+       _brightness_set_automate_level(status);
+
+       if (ctrl_obj->it != NULL) {
+               elm_genlist_item_fields_update(ctrl_obj->it, "elm.swallow.slider", ELM_GENLIST_ITEM_FIELD_CONTENT);
+               elm_genlist_item_fields_update(ctrl_obj->it, "elm.check.swallow", ELM_GENLIST_ITEM_FIELD_CONTENT);
+       }
+}
+
+static char *_quickpanel_noti_gl_get_text(void *data, Evas_Object * obj,
+                                          const char *part)
+{
+       if (strcmp(part, "elm.check.text") == 0) {
+               return strdup(_("IDS_QP_BODY_AUTO"));
+       }
+       if (strcmp(part, "elm.text.label") == 0) {
+               return strdup(_S("IDS_COM_OPT_BRIGHTNESS"));
+       }
+       return NULL;
+}
+
+static Evas_Object *_brightness_gl_get_content(void *data, Evas_Object * obj,
+                                       const char *part)
+{
+       qp_item_data *qid = NULL;
+       brightness_ctrl_obj *ctrl_obj = NULL;
+
+       retif(data == NULL, NULL, "Invalid parameter!");
+       qid = data;
+
+       ctrl_obj = quickpanel_list_util_item_get_data(qid);
+       retif(!ctrl_obj, NULL, "item is NULL");
+
+       if (strcmp(part, "elm.swallow.thumbnail") == 0) {
+               Evas_Object *image = elm_image_add(obj);
+
+               if (image != NULL) {
+                       elm_image_file_set(image, QP_BRIGHTNESS_CONTROL_ICON_IMG, NULL);
+                       elm_image_resizable_set(image, EINA_FALSE, EINA_TRUE);
+               }
+
+               return image;
+       } else if (strcmp(part, "elm.swallow.slider") == 0) {
+               int value = _brightness_get_level();
+               Evas_Object *slider = elm_slider_add(obj);
+
+               if (slider != NULL) {
+                       ctrl_obj->slider = NULL;
+                       elm_object_style_set(slider, "quickpanel");
+                       elm_slider_indicator_format_set(slider, "%1.0f");
+
+                       evas_object_size_hint_weight_set(slider, EVAS_HINT_EXPAND, 0.0);
+                       evas_object_size_hint_align_set(slider, EVAS_HINT_FILL, 0.5);
+                       elm_slider_min_max_set(slider, ctrl_obj->min_level, ctrl_obj->max_level);
+                       elm_slider_value_set(slider, value);
+                       evas_object_smart_callback_add(slider, "changed", _brightness_ctrl_slider_changed_cb, ctrl_obj);
+                       evas_object_smart_callback_add(slider, "delay,changed", _brightness_ctrl_slider_delayed_changed_cb, ctrl_obj);
+
+                       if (_brightness_get_automate_level() || _brightness_is_low_battery() == 1) {
+                               elm_object_disabled_set(slider, EINA_TRUE);
+                       } else {
+                               elm_object_disabled_set(slider, EINA_FALSE);
+                       }
+
+                       ctrl_obj->slider = slider;
+                       return slider;
+               }
+       } else if (strcmp(part, "elm.check.swallow") == 0) {
+               Evas_Object *checker = elm_check_add(obj);
+
+               if (checker != NULL) {
+                       ctrl_obj->checker = NULL;
+
+                       elm_object_style_set(checker, "quickpanel");
+                       elm_check_state_set(checker, _brightness_get_automate_level());
+                       evas_object_smart_callback_add(checker,"changed",_brightness_ctrl_checker_toggle_cb , ctrl_obj);
+
+                       if (_brightness_is_low_battery() == 1) {
+                               elm_object_disabled_set(checker, EINA_TRUE);
+                       } else {
+                               elm_object_disabled_set(checker, EINA_FALSE);
+                       }
+                       ctrl_obj->checker = checker;
+
+                       return checker;
+               }
+       }
+
+       return NULL;
+}
+
+static Eina_Bool _brightness_gl_get_state(void *data, Evas_Object *obj,
+                                       const char *part)
+{
+       return EINA_FALSE;
+}
+
+static void _brightness_gl_del(void *data, Evas_Object *obj)
+{
+       if (data) {
+               quickpanel_list_util_del_count(data);
+               free(data);
+       }
+
+       return;
+}
+
+static Elm_Genlist_Item_Class *_brightness_gl_style_get(void)
+{
+       Elm_Genlist_Item_Class *itc = NULL;
+
+       itc = elm_genlist_item_class_new();
+       if (!itc) {
+               ERR("fail to elm_genlist_item_class_new()");
+               return NULL;
+       }
+
+       itc->item_style = "brightness_controller/default";
+       itc->func.text_get = _quickpanel_noti_gl_get_text;
+       itc->func.content_get = _brightness_gl_get_content;
+       itc->func.state_get = _brightness_gl_get_state;
+       itc->func.del = _brightness_gl_del;
+
+       return itc;
+}
+
+static void _brightness_add(brightness_ctrl_obj *ctrl_obj, void *data)
+{
+       qp_item_data *qid = NULL;
+       Elm_Genlist_Item_Class *itc = NULL;
+       qp_item_type_e type = QP_ITEM_TYPE_BRIGHTNESS;
+       struct appdata *ad;
+
+       ad = data;
+       retif(!ad->list, , "list is NULL");
+
+       itc = _brightness_gl_style_get();
+       if (!itc) {
+               ERR("fail to _brightness_gl_style_get()");
+               return;
+       }
+
+       qid = quickpanel_list_util_item_new(type, ctrl_obj);
+       if (!qid) {
+               ERR("fail to alloc vit");
+               elm_genlist_item_class_free(itc);
+               free(g_ctrl_obj);
+               return;
+       }
+       ctrl_obj->data = data;
+       ctrl_obj->it = quickpanel_list_util_sort_insert(ad->list, itc, qid, NULL,
+                       ELM_GENLIST_ITEM_NONE, NULL, NULL);
+
+       elm_genlist_item_class_free(itc);
+
+       quickpanel_ui_update_height(ad);
+}
+
+static void _brightness_remove(brightness_ctrl_obj *ctrl_obj, void *data)
+{
+       if (g_ctrl_obj != NULL) {
+               INFO("success to remove brightness controller");
+               free(g_ctrl_obj);
+               g_ctrl_obj = NULL;
+               retif(data == NULL, , "data is NULL");
+               quickpanel_ui_update_height(data);
+       }
+}
+
+static void _brightness_register_event_cb(brightness_ctrl_obj *ctrl_obj)
+{
+       retif(ctrl_obj == NULL, , "Invalid parameter!");
+
+       vconf_notify_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, _brightness_vconf_cb, ctrl_obj);
+       vconf_notify_key_changed(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, _brightness_vconf_cb, ctrl_obj);
+}
+
+static void _brightness_deregister_event_cb(brightness_ctrl_obj *ctrl_obj)
+{
+       retif(ctrl_obj == NULL, , "Invalid parameter!");
+
+       vconf_ignore_key_changed(VCONFKEY_SYSMAN_BATTERY_STATUS_LOW, _brightness_vconf_cb);
+       vconf_ignore_key_changed(VCONFKEY_SETAPPL_BRIGHTNESS_AUTOMATIC_INT, _brightness_vconf_cb);
+}
+
+static int quickpanel_brightness_init(void *data)
+{
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       if (g_ctrl_obj == NULL) {
+               DBG("brightness controller alloced");
+               g_ctrl_obj = (brightness_ctrl_obj *)malloc(sizeof(brightness_ctrl_obj));
+       }
+
+       DBG("");
+
+       if (g_ctrl_obj != NULL) {
+               g_ctrl_obj->min_level = BRIGHTNESS_MIN;
+               g_ctrl_obj->max_level = BRIGHTNESS_MAX;
+
+               DBG("brightness range %d~%d\n", g_ctrl_obj->min_level, g_ctrl_obj->max_level);
+
+               _brightness_add(g_ctrl_obj, data);
+               _brightness_register_event_cb(g_ctrl_obj);
+       }
+
+       return QP_OK;
+}
+
+static int quickpanel_brightness_fini(void *data)
+{
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+
+       if (g_ctrl_obj != NULL) {
+               _brightness_deregister_event_cb(g_ctrl_obj);
+               _brightness_remove(g_ctrl_obj, data);
+       }
+
+       _brightness_remove(g_ctrl_obj, data);
+
+       g_ctrl_obj = NULL;
+       return QP_OK;
+}
+
+static void quickpanel_brightness_lang_changed(void *data)
+{
+       retif(data == NULL, , "Invalid parameter!");
+
+       if (g_ctrl_obj != NULL && g_ctrl_obj->it != NULL) {
+               elm_genlist_item_fields_update(g_ctrl_obj->it, "elm.check.text", ELM_GENLIST_ITEM_FIELD_TEXT);
+               elm_genlist_item_fields_update(g_ctrl_obj->it, "elm.text.label", ELM_GENLIST_ITEM_FIELD_TEXT);
+       }
+}
+
+static unsigned int quickpanel_brightness_get_height(void *data)
+{
+       struct appdata *ad = data;
+
+       retif(ad == NULL, 0, "Invalid parameter!");
+
+       if (g_ctrl_obj != NULL)
+               return QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT * ad->scale;
+       else
+               return 0;
+}
diff --git a/daemon/notifications/noti.c b/daemon/notifications/noti.c
new file mode 100755 (executable)
index 0000000..ecec5c3
--- /dev/null
@@ -0,0 +1,1999 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 <appsvc.h>
+
+#include <time.h>
+#include <vconf.h>
+#include <appcore-common.h>
+#include <app_service.h>
+#include <runtime_info.h>
+#include <Ecore_X.h>
+
+#include <unicode/uloc.h>
+#include <unicode/udat.h>
+#include <unicode/udatpg.h>
+#include <unicode/ustring.h>
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+#include "noti_node.h"
+#endif
+#include <notification.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "quickpanel_theme_def.h"
+#include "noti_gridbox.h"
+#include "noti_box.h"
+#include "noti.h"
+
+#ifndef VCONFKEY_QUICKPANEL_STARTED
+#define VCONFKEY_QUICKPANEL_STARTED "memory/private/"PACKAGE_NAME"/started"
+#endif /* VCONFKEY_QUICKPANEL_STARTED */
+
+#define QP_DEFAULT_ICON        ICONDIR"/quickpanel_icon_default.png"
+#define QP_NOTI_DAY_DEC        (24 * 60 * 60)
+
+#define QP_NOTI_ONGOING_DBUS_PATH      "/dbus/signal"
+#define QP_NOTI_ONGOING_DBUS_INTERFACE "notification.ongoing"
+
+static int suspended;
+
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+noti_node *g_noti_node;
+#else
+static notification_list_h g_notification_list;
+static notification_list_h g_notification_ongoing_list;
+#endif
+static Eina_List *g_animated_image_list;
+
+static Evas_Object *g_noti_gridbox;
+static Elm_Genlist_Item_Class *itc_noti;
+static Elm_Genlist_Item_Class *itc_ongoing;
+static Elm_Genlist_Item_Class *g_itc;
+
+static Evas_Object *g_window;
+
+static Elm_Object_Item *noti_group;
+static Elm_Object_Item *ongoing_first;
+static Elm_Object_Item *noti_first;
+
+static int quickpanel_noti_init(void *data);
+static int quickpanel_noti_fini(void *data);
+static int quickpanel_noti_suspend(void *data);
+static int quickpanel_noti_resume(void *data);
+static void quickpanel_noti_lang_changed(void *data);
+static void quickpanel_noti_refresh(void *data);
+static unsigned int quickpanel_noti_get_height(void *data);
+
+QP_Module noti = {
+       .name = "noti",
+       .init = quickpanel_noti_init,
+       .fini = quickpanel_noti_fini,
+       .suspend = quickpanel_noti_suspend,
+       .resume = quickpanel_noti_resume,
+       .lang_changed = quickpanel_noti_lang_changed,
+       .hib_enter = NULL,
+       .hib_leave = NULL,
+       .refresh = quickpanel_noti_refresh,
+       .get_height = quickpanel_noti_get_height,
+};
+
+Eina_Bool _quickpanel_noti_update_notibox_idler(void *data)
+{
+       retif(data == NULL, ECORE_CALLBACK_CANCEL, "data is null");
+
+       Elm_Object_Item *item = data;
+       elm_genlist_item_update(item);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _quickpanel_noti_update_notibox(void) {
+       if (noti_group != NULL) {
+               ecore_idler_add(_quickpanel_noti_update_notibox_idler, noti_group);
+       }
+
+       if (noti_first != NULL) {
+               ecore_idler_add(_quickpanel_noti_update_notibox_idler, noti_first);
+       }
+}
+
+static void _quickpanel_noti_clear_clicked_cb(void *data, Evas_Object * obj,
+                                       void *event_info)
+{
+       notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
+
+       noti_err = notifiation_clear(NOTIFICATION_TYPE_NOTI);
+
+       DBG("Clear Clicked : noti_err(%d)", noti_err);
+}
+
+static char *_quickpanel_noti_get_progress(notification_h noti, char *buf,
+                                          int buf_len)
+{
+       double size = 0.0;
+       double percentage = 0.0;
+
+       retif(noti == NULL, NULL, "Invalid parameter!");
+
+       notification_get_size(noti, &size);
+       notification_get_progress(noti, &percentage);
+
+       if (percentage < 1 && percentage > 0) {
+               if (snprintf(buf, buf_len, "%d%%", (int)(percentage * 100))
+                       <= 0)
+                       return NULL;
+
+               return buf;
+       } else if (size > 0) {
+               if (size > (1 << 30)) {
+                       if (snprintf(buf, buf_len, "%.1lfGB",
+                               size / 1000000000.0) <= 0)
+                               return NULL;
+
+                       return buf;
+               } else if (size > (1 << 20)) {
+                       if (snprintf(buf, buf_len, "%.1lfMB",
+                               size / 1000000.0) <= 0)
+                               return NULL;
+
+                       return buf;
+               } else if (size > (1 << 10)) {
+                       if (snprintf(buf, buf_len, "%.1lfKB",
+                               size / 1000.0) <= 0)
+                               return NULL;
+
+                       return buf;
+               } else {
+                       if (snprintf(buf, buf_len, "%lfB", size) <= 0)
+                               return NULL;
+
+                       return buf;
+               }
+       }
+
+       return NULL;
+}
+
+static notification_h _quickpanel_noti_update_item_progress(const char *pkgname,
+                                                           int priv_id,
+                                                           double progress)
+{
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+
+       noti_node_item *node = noti_node_get(g_noti_node, priv_id);
+
+       if (node != NULL && node->noti != NULL) {
+               notification_get_pkgname(node->noti, &noti_pkgname);
+               notification_get_id(node->noti, NULL, &noti_priv_id);
+               if (!strcmp(noti_pkgname, pkgname)
+                   && priv_id == noti_priv_id) {
+                       notification_set_progress(node->noti, progress);
+                       return node->noti;
+               }
+       }
+#else
+       notification_h noti = NULL;
+       notification_list_h head = NULL;
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+
+       if (g_notification_ongoing_list) {
+               head = notification_list_get_head(g_notification_ongoing_list);
+
+               while (head != NULL) {
+                       noti = notification_list_get_data(head);
+                       notification_get_pkgname(noti, &noti_pkgname);
+                       notification_get_id(noti, NULL, &noti_priv_id);
+                       if (!strcmp(noti_pkgname, pkgname)
+                           && priv_id == noti_priv_id) {
+                               notification_set_progress(noti, progress);
+                               return noti;
+                       }
+                       head = notification_list_get_next(head);
+               }
+       }
+
+       if (g_notification_list) {
+               head = notification_list_get_head(g_notification_list);
+
+               while (head != NULL) {
+                       noti = notification_list_get_data(head);
+                       notification_get_pkgname(noti, &noti_pkgname);
+                       notification_get_id(noti, NULL, &noti_priv_id);
+                       if (!strcmp(noti_pkgname, pkgname)
+                           && priv_id == noti_priv_id) {
+                               notification_set_progress(noti, progress);
+                               return noti;
+                       }
+                       head = notification_list_get_next(head);
+               }
+       }
+#endif
+
+       return NULL;
+}
+
+static notification_h _quickpanel_noti_update_item_size(const char *pkgname,
+                                                       int priv_id,
+                                                       double size)
+{
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+
+       noti_node_item *node = noti_node_get(g_noti_node, priv_id);
+
+       if (node != NULL && node->noti != NULL) {
+               notification_get_pkgname(node->noti, &noti_pkgname);
+               notification_get_id(node->noti, NULL, &noti_priv_id);
+               if (!strcmp(noti_pkgname, pkgname)
+                   && priv_id == noti_priv_id) {
+                       notification_set_size(node->noti, size);
+                       return node->noti;
+               }
+       }
+#else
+       notification_h noti = NULL;
+       notification_list_h head = NULL;
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+
+       if (g_notification_ongoing_list) {
+               head = notification_list_get_head(g_notification_ongoing_list);
+
+               while (head != NULL) {
+                       noti = notification_list_get_data(head);
+                       notification_get_pkgname(noti, &noti_pkgname);
+                       notification_get_id(noti, NULL, &noti_priv_id);
+                       if (!strcmp(noti_pkgname, pkgname)
+                           && priv_id == noti_priv_id) {
+                               notification_set_size(noti, size);
+                               return noti;
+                       }
+                       head = notification_list_get_next(head);
+               }
+       }
+
+       if (g_notification_list) {
+               head = notification_list_get_head(g_notification_list);
+
+               while (head != NULL) {
+                       noti = notification_list_get_data(head);
+                       notification_get_pkgname(noti, &noti_pkgname);
+                       notification_get_id(noti, NULL, &noti_priv_id);
+                       if (!strcmp(noti_pkgname, pkgname)
+                           && priv_id == noti_priv_id) {
+                               notification_set_size(noti, size);
+                               return noti;
+                       }
+                       head = notification_list_get_next(head);
+               }
+       }
+#endif
+
+       return NULL;
+}
+
+static notification_h _quickpanel_noti_update_item_content(const char *pkgname,
+                                                       int priv_id,
+                                                       char *content)
+{
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+
+       noti_node_item *node = noti_node_get(g_noti_node, priv_id);
+
+       if (node != NULL && node->noti != NULL) {
+               notification_get_pkgname(node->noti, &noti_pkgname);
+               notification_get_id(node->noti, NULL, &noti_priv_id);
+               if (!strcmp(noti_pkgname, pkgname)
+                   && priv_id == noti_priv_id) {
+                       notification_set_text(node->noti,
+                               NOTIFICATION_TEXT_TYPE_CONTENT,
+                               content, NULL,
+                               NOTIFICATION_VARIABLE_TYPE_NONE);
+                       return node->noti;
+               }
+       }
+#else
+       notification_h noti = NULL;
+       notification_list_h head = NULL;
+       char *noti_pkgname = NULL;
+       int noti_priv_id = 0;
+
+       if (g_notification_ongoing_list) {
+               head = notification_list_get_head(g_notification_ongoing_list);
+
+               while (head != NULL) {
+                       noti = notification_list_get_data(head);
+                       notification_get_pkgname(noti, &noti_pkgname);
+                       notification_get_id(noti, NULL, &noti_priv_id);
+                       if (!strcmp(noti_pkgname, pkgname)
+                           && priv_id == noti_priv_id) {
+                               notification_set_text(noti,
+                                       NOTIFICATION_TEXT_TYPE_CONTENT,
+                                       content, NULL,
+                                       NOTIFICATION_VARIABLE_TYPE_NONE);
+                               return noti;
+                       }
+                       head = notification_list_get_next(head);
+               }
+       }
+
+       if (g_notification_list) {
+               head = notification_list_get_head(g_notification_list);
+
+               while (head != NULL) {
+                       noti = notification_list_get_data(head);
+                       notification_get_pkgname(noti, &noti_pkgname);
+                       notification_get_id(noti, NULL, &noti_priv_id);
+                       if (!strcmp(noti_pkgname, pkgname)
+                           && priv_id == noti_priv_id) {
+                               notification_set_text(noti,
+                                       NOTIFICATION_TEXT_TYPE_CONTENT,
+                                       content, NULL,
+                                       NOTIFICATION_VARIABLE_TYPE_NONE);
+                               return noti;
+                       }
+                       head = notification_list_get_next(head);
+               }
+       }
+#endif
+
+       return NULL;
+}
+
+static void _quickpanel_noti_update_progressbar(void *data,
+                                               notification_h update_noti)
+{
+       struct appdata *ad = NULL;
+       Elm_Object_Item *found = NULL;
+
+       retif(!data, , "data is NULL");
+       ad = data;
+
+       retif(!ad->list, , "ad->list is NULL");
+
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       int priv_id = 0;
+
+       if (notification_get_id(update_noti, NULL, &priv_id) == NOTIFICATION_ERROR_NONE) {
+               noti_node_item *node = noti_node_get(g_noti_node, priv_id);
+
+               if (node != NULL) {
+                       found = node->view;
+               }
+       }
+#else
+       if (ad->show_setting)
+               found = quickpanel_list_util_find_item_by_type(ad->list,
+                               update_noti, ongoing_first,
+                               QP_ITEM_TYPE_ONGOING_NOTI);
+       else
+               found = quickpanel_list_util_find_item_by_type(ad->list,
+                               update_noti, noti_first,
+                               QP_ITEM_TYPE_NOTI);
+#endif
+
+       retif(!found, , "fail to find %p related gl item", update_noti);
+
+       elm_genlist_item_fields_update(found, "*", ELM_GENLIST_ITEM_FIELD_ALL);
+}
+
+static void _quickpanel_noti_item_progress_update_cb(void *data,
+                                               DBusMessage *msg)
+{
+       DBusError err;
+       char *pkgname = 0;
+       int priv_id = 0;
+       double progress = 0;
+       notification_h noti = NULL;
+
+       retif(data == NULL || msg == NULL, , "Invalid parameter!");
+
+       dbus_error_init(&err);
+       dbus_message_get_args(msg, &err,
+                       DBUS_TYPE_STRING, &pkgname,
+                       DBUS_TYPE_INT32, &priv_id,
+                       DBUS_TYPE_DOUBLE, &progress,
+                       DBUS_TYPE_INVALID);
+
+       if (dbus_error_is_set(&err)) {
+               ERR("dbus err: %s", err.message);
+               dbus_error_free(&err);
+               return;
+       }
+
+       if (pkgname == NULL) {
+               ERR("pkgname is null");
+               return;
+       }
+
+       /* check item on the list */
+       noti = _quickpanel_noti_update_item_progress(pkgname,
+                                               priv_id, progress);
+       retif(noti == NULL, , "Can not found noti data.");
+
+       DBG("pkgname[%s], priv_id[%d], progress[%lf]",
+                               pkgname, priv_id, progress);
+       if (!suspended)
+               _quickpanel_noti_update_progressbar(data, noti);
+}
+
+static void _quickpanel_noti_item_size_update_cb(void *data, DBusMessage * msg)
+{
+       DBusError err;
+       char *pkgname = 0;
+       int priv_id = 0;
+       double size = 0;
+       notification_h noti = NULL;
+
+       retif(data == NULL || msg == NULL, , "Invalid parameter!");
+
+       dbus_error_init(&err);
+       dbus_message_get_args(msg, &err,
+                       DBUS_TYPE_STRING, &pkgname,
+                       DBUS_TYPE_INT32, &priv_id,
+                       DBUS_TYPE_DOUBLE, &size, DBUS_TYPE_INVALID);
+       if (dbus_error_is_set(&err)) {
+               ERR("dbus err: %s", err.message);
+               dbus_error_free(&err);
+               return;
+       }
+
+       if (pkgname == NULL) {
+               ERR("pkgname is null");
+               return;
+       }
+
+       /* check item on the list */
+       noti = _quickpanel_noti_update_item_size(pkgname, priv_id, size);
+       retif(noti == NULL, , "Can not found noti data.");
+
+       DBG("pkgname[%s], priv_id[%d], progress[%lf]",
+                               pkgname, priv_id, size);
+
+       if (!suspended)
+               _quickpanel_noti_update_progressbar(data, noti);
+}
+
+static void _quickpanel_noti_item_content_update_cb(void *data,
+                                               DBusMessage *msg)
+{
+       DBusError err;
+       char *pkgname = NULL;
+       int priv_id = 0;
+       char *content = NULL;
+       notification_h noti = NULL;
+
+       retif(data == NULL || msg == NULL, , "Invalid parameter!");
+
+       dbus_error_init(&err);
+       dbus_message_get_args(msg, &err,
+                       DBUS_TYPE_STRING, &pkgname,
+                       DBUS_TYPE_INT32, &priv_id,
+                       DBUS_TYPE_STRING, &content, DBUS_TYPE_INVALID);
+
+       if (pkgname == NULL) {
+               ERR("pkgname  is null");
+               return;
+       }
+       if (content == NULL) {
+               ERR("content is null");
+               return;
+       }
+
+       if (dbus_error_is_set(&err)) {
+               ERR("dbus err: %s", err.message);
+               dbus_error_free(&err);
+               return;
+       }
+
+       DBG("pkgname[%s], priv_id[%d], content[%s]",
+                               pkgname, priv_id, content);
+
+       /* check item on the list */
+       noti = _quickpanel_noti_update_item_content(pkgname, priv_id, content);
+       retif(noti == NULL, , "Can not found noti data.");
+
+       if (!suspended)
+               _quickpanel_noti_update_progressbar(data, noti);
+}
+
+char *quickpanel_noti_get_time(time_t t, char *buf, int buf_len)
+{
+       UErrorCode status = U_ZERO_ERROR;
+       UDateTimePatternGenerator *generator;
+       UDateFormat *formatter;
+       UChar skeleton[40] = { 0 };
+       UChar pattern[40] = { 0 };
+       UChar formatted[40] = { 0 };
+       int32_t patternCapacity, formattedCapacity;
+       int32_t skeletonLength, patternLength, formattedLength;
+       UDate date;
+       const char *locale;
+       const char customSkeleton[] = UDAT_YEAR_NUM_MONTH_DAY;
+       char bf1[32] = { 0, };
+       bool is_24hour_enabled = FALSE;
+
+       struct tm loc_time;
+       time_t today, yesterday;
+       int ret = 0;
+
+       today = time(NULL);
+       localtime_r(&today, &loc_time);
+
+       loc_time.tm_sec = 0;
+       loc_time.tm_min = 0;
+       loc_time.tm_hour = 0;
+       today = mktime(&loc_time);
+
+       yesterday = today - QP_NOTI_DAY_DEC;
+
+       localtime_r(&t, &loc_time);
+
+       if (t >= yesterday && t < today) {
+               ret = snprintf(buf, buf_len, _S("IDS_COM_BODY_YESTERDAY"));
+       } else if (t < yesterday) {
+               /* set UDate  from time_t */
+               date = (UDate) t * 1000;
+
+               /* get default locale  */
+               /* for thread saftey  */
+               uloc_setDefault(__secure_getenv("LC_TIME"), &status);
+               locale = uloc_getDefault();
+
+               /* open datetime pattern generator */
+               generator = udatpg_open(locale, &status);
+               if (generator == NULL)
+                       return NULL;
+
+               /* calculate pattern string capacity */
+               patternCapacity =
+                   (int32_t) (sizeof(pattern) / sizeof((pattern)[0]));
+
+               /* ascii to unicode for input skeleton */
+               u_uastrcpy(skeleton, customSkeleton);
+
+               /* get skeleton length */
+               skeletonLength = strlen(customSkeleton);
+
+               /* get best pattern using skeleton */
+               patternLength =
+                   udatpg_getBestPattern(generator, skeleton, skeletonLength,
+                                         pattern, patternCapacity, &status);
+
+               /* open datetime formatter using best pattern */
+               formatter =
+                   udat_open(UDAT_IGNORE, UDAT_DEFAULT, locale, NULL, -1,
+                             pattern, patternLength, &status);
+               if (formatter == NULL) {
+                       udatpg_close(generator);
+                       return NULL;
+               }
+
+               /* calculate formatted string capacity */
+               formattedCapacity =
+                   (int32_t) (sizeof(formatted) / sizeof((formatted)[0]));
+
+               /* formatting date using formatter by best pattern */
+               formattedLength =
+                   udat_format(formatter, date, formatted, formattedCapacity,
+                               NULL, &status);
+
+               /* unicode to ascii to display */
+               u_austrcpy(bf1, formatted);
+
+               /* close datetime pattern generator */
+               udatpg_close(generator);
+
+               /* close datetime formatter */
+               udat_close(formatter);
+
+               ret = snprintf(buf, buf_len, "%s", bf1);
+       } else {
+               ret = runtime_info_get_value_bool(
+                                       RUNTIME_INFO_KEY_24HOUR_CLOCK_FORMAT_ENABLED, &is_24hour_enabled);
+               if (ret == RUNTIME_INFO_ERROR_NONE && is_24hour_enabled == TRUE) {
+                       ret = strftime(buf, buf_len, "%H:%M", &loc_time);
+               } else {
+                       strftime(bf1, sizeof(bf1), "%l:%M", &loc_time);
+
+                       if (loc_time.tm_hour >= 0 && loc_time.tm_hour < 12)
+                               ret = snprintf(buf, buf_len, "%s%s", bf1, "AM");
+                       else
+                               ret = snprintf(buf, buf_len, "%s%s", bf1, "PM");
+               }
+
+       }
+
+       return ret <= 0 ? NULL : buf;
+}
+
+static void _quickpanel_noti_ani_image_control(Eina_Bool on)
+{
+       const Eina_List *l = NULL;
+       const Eina_List *ln = NULL;
+       Evas_Object *entry_obj = NULL;
+
+       retif(g_animated_image_list == NULL, ,"");
+
+       EINA_LIST_FOREACH_SAFE(g_animated_image_list, l, ln, entry_obj) {
+               if (entry_obj == NULL) continue;
+
+               if (on == EINA_TRUE) {
+                       if (elm_image_animated_play_get(entry_obj) == EINA_FALSE) {
+                               elm_image_animated_play_set(entry_obj, EINA_TRUE);
+                       }
+               } else {
+                       if (elm_image_animated_play_get(entry_obj) == EINA_TRUE) {
+                               elm_image_animated_play_set(entry_obj, EINA_FALSE);
+                       }
+               }
+       }
+}
+
+static void _quickpanel_noti_ani_image_deleted_cb(void *data, Evas *e, Evas_Object *obj, void *event_info)
+{
+       retif(obj == NULL, , "obj is NULL");
+       retif(g_animated_image_list == NULL, , "list is empty");
+
+       g_animated_image_list = eina_list_remove(g_animated_image_list, obj);
+}
+
+static Evas_Object *_quickpanel_noti_box_gl_get_content(void *data,
+               Evas_Object *obj, const char *part) {
+       retif(part == NULL, NULL, "invalid parameter");
+
+       if (strcmp(part, "elm.icon") == 0) {
+               DBG("returned:%p", g_noti_gridbox);
+               return g_noti_gridbox;
+       }
+
+       return NULL;
+}
+
+static Evas_Object *_quickpanel_noti_gl_get_content(void *data,
+                                       Evas_Object *obj, const char *part)
+{
+       qp_item_data *qid = NULL;
+       notification_h noti = NULL;
+       Evas_Object *ic = NULL;
+       char *icon_path = NULL;
+       char *thumbnail_path = NULL;
+       char *ret_path = NULL;
+       double size = 0.0;
+       double percentage = 0.0;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       char group_name[64] = {0,};
+       notification_ly_type_e layout = NOTIFICATION_LY_NONE ;
+
+       retif(!data, NULL, "data is NULL");
+       qid = data;
+
+       noti = quickpanel_list_util_item_get_data(qid);
+       retif(noti == NULL, NULL, "noti is NULL");
+
+       if (!strncmp
+           (part, "elm.swallow.progress", strlen("elm.swallow.progress"))) {
+               notification_get_type(noti, &type);
+               if (type == NOTIFICATION_TYPE_ONGOING) {
+                       notification_get_size(noti, &size);
+                       notification_get_progress(noti, &percentage);
+                       notification_get_layout(noti, &layout);
+
+                       if (layout != NOTIFICATION_LY_ONGOING_EVENT) {
+                               if (percentage > 0 && percentage <= 1) {
+                                       ic = elm_progressbar_add(obj);
+                                       if (ic == NULL)
+                                               return NULL;
+
+                                       elm_object_style_set(ic, "quickpanel/list_progress");
+                                       elm_progressbar_value_set(ic, percentage);
+                                       elm_progressbar_horizontal_set(ic, EINA_TRUE);
+                                       elm_progressbar_pulse(ic, EINA_FALSE);
+                               } else if (size > 0) {
+                                       ic = elm_progressbar_add(obj);
+                                       if (ic == NULL)
+                                               return NULL;
+
+                                       elm_object_style_set(ic, "quickpanel/pending_list");
+                                       elm_progressbar_horizontal_set(ic, EINA_TRUE);
+                                       elm_progressbar_pulse(ic, EINA_TRUE);
+                               }
+                       }
+               }
+               return ic;
+       }
+
+       ic = elm_image_add(obj);
+       retif(ic == NULL, NULL, "Failed to create elm icon.");
+
+       notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL,
+                              &thumbnail_path);
+       notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, &icon_path);
+
+       snprintf(group_name, sizeof(group_name) - 1, "notification_item_%d", eina_list_count(g_animated_image_list));
+
+       if (!strncmp
+           (part, "elm.swallow.thumbnail", strlen("elm.swallow.thumbnail"))) {
+               if (thumbnail_path == NULL)
+                       ret_path = icon_path;
+               else
+                       ret_path = thumbnail_path;
+
+               elm_image_resizable_set(ic, EINA_FALSE, EINA_TRUE);
+
+               if (ret_path == NULL
+                   || (elm_image_file_set(ic, ret_path, group_name) == EINA_FALSE))
+                       elm_image_file_set(ic, QP_DEFAULT_ICON, group_name);
+       } else if (!strncmp(part, "elm.swallow.icon",
+                       strlen("elm.swallow.icon"))) {
+               if (thumbnail_path == NULL)
+                       ret_path = NULL;
+               else
+                       ret_path = icon_path;
+
+               if (ret_path != NULL)
+                       elm_image_file_set(ic, ret_path, group_name);
+       }
+
+       if (ic != NULL && elm_image_animated_available_get(ic) == EINA_TRUE) {
+               elm_image_animated_set(ic, EINA_TRUE);
+               g_animated_image_list = eina_list_append(g_animated_image_list, ic);
+               evas_object_event_callback_add(ic, EVAS_CALLBACK_DEL, _quickpanel_noti_ani_image_deleted_cb, ic);
+
+               if (suspended == 0)
+                       elm_image_animated_play_set(ic, EINA_TRUE);
+       }
+       return ic;
+}
+
+static char *_quickpanel_ongoing_noti_gl_get_text(void *data, Evas_Object * obj,
+                                          const char *part)
+{
+       qp_item_data *qid = NULL;
+       notification_h noti = NULL;
+       notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
+       char *text = NULL;
+       char *domain = NULL;
+       char *dir = NULL;
+       char *pkgname = NULL;
+       char *caller_pkgname = NULL;
+       int group_id = 0, priv_id = 0;
+       char buf[128] = { 0, };
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+       double size = 0.0;
+       double percentage = 0.0;
+       int isProgressBarEnabled = 1;
+       notification_ly_type_e layout = NOTIFICATION_LY_NONE ;
+
+       retif(!data, NULL, "data is NULL");
+       qid = data;
+
+       noti = quickpanel_list_util_item_get_data(qid);
+       retif(noti == NULL, NULL, "noti is NULL");
+
+       /* Set text domain */
+       notification_get_text_domain(noti, &domain, &dir);
+       if (domain != NULL && dir != NULL)
+               bindtextdomain(domain, dir);
+
+       /* Get pkgname & id */
+       notification_get_pkgname(noti, &pkgname);
+       notification_get_application(noti, &caller_pkgname);
+       notification_get_id(noti, &group_id, &priv_id);
+       notification_get_type(noti, &type);
+       notification_get_size(noti, &size);
+       notification_get_progress(noti, &percentage);
+       notification_get_layout(noti, &layout);
+
+       DBG("percentage:%f size:%f", percentage, size);
+
+       if (percentage <= 0.0 && size <= 0.0) {
+               isProgressBarEnabled = 0;
+       }
+
+       if (!strcmp(part, "elm.text.title")) {
+               noti_err = notification_get_text(noti,
+                                                               NOTIFICATION_TEXT_TYPE_TITLE,
+                                                               &text);
+               if (noti_err != NOTIFICATION_ERROR_NONE)
+                       text = NULL;
+       } else if (!strcmp(part, "elm.text.content")) {
+               noti_err = notification_get_text(noti,
+                                       NOTIFICATION_TEXT_TYPE_CONTENT,
+                                       &text);
+               if (noti_err != NOTIFICATION_ERROR_NONE)
+                       text = NULL;
+       } else if (!strcmp(part, "elm.text.time")) {
+               if (isProgressBarEnabled == 0)
+                       return NULL;
+
+               if (layout == NOTIFICATION_LY_ONGOING_EVENT) {
+                       return NULL;
+               }
+
+               text = _quickpanel_noti_get_progress(noti, buf,
+                                                                         sizeof(buf));
+       }
+
+       if (text != NULL)
+               return strdup(text);
+
+       return NULL;
+}
+
+static Eina_Bool _quickpanel_noti_gl_get_state(void *data, Evas_Object * obj,
+                                              const char *part)
+{
+       qp_item_data *qid = NULL;
+       notification_h noti = NULL;
+       char *pkgname = NULL;
+       int group_id = 0, priv_id = 0;
+       char *content = NULL;
+       time_t time;
+
+       retif(!data, EINA_FALSE, "data is NULL");
+       qid = data;
+
+       noti = quickpanel_list_util_item_get_data(qid);
+       retif(noti == NULL, EINA_FALSE, "noti is NULL");
+
+       notification_get_pkgname(noti, &pkgname);
+       notification_get_id(noti, &group_id, &priv_id);
+
+       if (!strcmp(part, "elm.text.content")) {
+               notification_get_text(noti,
+                       NOTIFICATION_TEXT_TYPE_CONTENT, &content);
+               if (content != NULL)
+                       return EINA_TRUE;
+       } else if (!strcmp(part, "elm.text.time")) {
+               notification_get_time(noti, &time);
+
+               if ((int) time > 0)
+                       return EINA_TRUE;
+       }
+
+       return EINA_FALSE;
+}
+
+static void _quickpanel_do_noti_delete(notification_h noti) {
+       char *pkgname = NULL;
+       char *caller_pkgname = NULL;
+       int flags = 0, priv_id = 0, flag_delete = 0;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+
+       retif(noti == NULL, , "Invalid parameter!");
+
+       notification_get_pkgname(noti, &caller_pkgname);
+       notification_get_application(noti, &pkgname);
+       if (pkgname == NULL)
+               pkgname = caller_pkgname;
+
+       notification_get_id(noti, NULL, &priv_id);
+       notification_get_property(noti, &flags);
+       notification_get_type(noti, &type);
+
+       if (flags & NOTIFICATION_PROP_PERMANENT_DISPLAY)
+               flag_delete = 0;
+       else
+               flag_delete = 1;
+
+       if (flag_delete == 1 && type == NOTIFICATION_TYPE_NOTI) {
+               notification_delete_by_priv_id(caller_pkgname, NOTIFICATION_TYPE_NOTI,
+                               priv_id);
+       }
+}
+
+static void _quickpanel_do_noti_press(notification_h noti) {
+       char *pkgname = NULL;
+       char *caller_pkgname = NULL;
+       bundle *args = NULL;
+       bundle *group_args = NULL;
+       bundle *single_service_handle = NULL;
+       bundle *multi_service_handle = NULL;
+       int flags = 0, group_id = 0, priv_id = 0, count = 0, flag_launch = 0,
+                       flag_delete = 0;
+       notification_type_e type = NOTIFICATION_TYPE_NONE;
+
+       retif(noti == NULL, , "Invalid parameter!");
+
+       notification_get_pkgname(noti, &caller_pkgname);
+       notification_get_application(noti, &pkgname);
+       if (pkgname == NULL)
+               pkgname = caller_pkgname;
+
+       notification_get_id(noti, &group_id, &priv_id);
+       notification_get_property(noti, &flags);
+       notification_get_type(noti, &type);
+
+       if (flags & NOTIFICATION_PROP_DISABLE_APP_LAUNCH)
+               flag_launch = 0;
+       else
+               flag_launch = 1;
+
+       if (flags & NOTIFICATION_PROP_DISABLE_AUTO_DELETE)
+               flag_delete = 0;
+       else
+               flag_delete = 1;
+
+       notification_get_execute_option(noti,
+                               NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH,
+                               NULL, &single_service_handle);
+       notification_get_execute_option(noti,
+                               NOTIFICATION_EXECUTE_TYPE_MULTI_LAUNCH,
+                               NULL, &multi_service_handle);
+
+       if (flag_launch == 1) {
+               /* Hide quickpanel */
+               Ecore_X_Window zone;
+               zone = ecore_x_e_illume_zone_get(elm_win_xwindow_get(g_window));
+               ecore_x_e_illume_quickpanel_state_send(zone,
+                               ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
+
+               if (group_id != NOTIFICATION_GROUP_ID_NONE)
+                       notification_get_count(type,
+                                       caller_pkgname, group_id,
+                                       priv_id, &count);
+               else
+                       count = 1;
+
+               if (count > 1 && multi_service_handle != NULL)
+                       appsvc_run_service(multi_service_handle, 0, NULL, NULL);
+               else if (single_service_handle != NULL)
+                       appsvc_run_service(single_service_handle, 0, NULL,
+                                       NULL);
+               else {
+                       notification_get_args(noti, &args, &group_args);
+
+                       if (count > 1 && group_args != NULL) {
+                               quickpanel_launch_app(pkgname, group_args);
+                       } else {
+                               quickpanel_launch_app(pkgname, args);
+                       }
+               }
+       }
+
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       if (flag_delete == 1 && type == NOTIFICATION_TYPE_NOTI) {
+               notification_delete_by_priv_id(caller_pkgname,
+                               NOTIFICATION_TYPE_NOTI,
+                               priv_id);
+       }
+#else
+       if (flag_delete == 1 && type == NOTIFICATION_TYPE_NOTI)
+               notification_delete_group_by_priv_id(caller_pkgname,
+                               NOTIFICATION_TYPE_NOTI, priv_id);
+#endif
+}
+
+static void quickpanel_notibox_delete_cb(void *data, Evas_Object * obj) {
+       DBG("");
+       noti_node_item *item = data;
+       retif(item == NULL, , "Invalid parameter!");
+
+       notification_h noti = item->noti;
+       retif(noti == NULL, , "Invalid parameter!");
+
+       _quickpanel_do_noti_delete(noti);
+
+}
+
+static void quickpanel_notibox_select_cb(void *data, Evas_Object * obj) {
+       DBG("");
+       noti_node_item *item = data;
+       retif(item == NULL, , "Invalid parameter!");
+
+       notification_h noti = item->noti;
+       retif(noti == NULL, , "Invalid parameter!");
+
+       _quickpanel_do_noti_press(noti);
+}
+
+static void quickpanel_noti_select_cb(void *data, Evas_Object * obj,
+               void *event_info) {
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       notification_h noti = (notification_h) quickpanel_list_util_item_get_data(data);
+#else
+       notification_h noti = (notification_h) data;
+#endif
+
+       retif(noti == NULL, , "Invalid parameter!");
+
+       elm_genlist_item_selected_set((Elm_Object_Item *) event_info, EINA_FALSE);
+
+       _quickpanel_do_noti_press(noti);
+}
+
+static Evas_Object *_quickpanel_noti_gl_get_group_content(void *data,
+                                               Evas_Object *obj,
+                                               const char *part)
+{
+       Evas_Object *eo = NULL;
+
+       eo = elm_button_add(obj);
+       retif(eo == NULL, NULL, "Failed to create clear button!");
+
+       elm_object_style_set(eo, "quickpanel_standard");
+
+       elm_object_text_set(eo, _S("IDS_COM_BODY_CLEAR_ALL"));
+       evas_object_smart_callback_add(eo, "clicked",
+                                      _quickpanel_noti_clear_clicked_cb, NULL);
+
+       return eo;
+}
+
+static char *_quickpanel_noti_gl_get_group_text(void *data, Evas_Object * obj,
+                                                const char *part)
+{
+       char buf[128] = { 0, };
+       int noti_count = 0;
+
+       if (!strncmp(part, "elm.text", 8)) {
+               char format[256] = { 0, };
+               memset(buf, 0x00, sizeof(buf));
+
+               if (g_noti_node != NULL) {
+                       noti_count =
+                                       noti_node_get_item_count(g_noti_node, NOTIFICATION_TYPE_NOTI);
+               } else {
+                       noti_count = 0;
+               }
+
+               snprintf(format, sizeof(format), "%s %%d", _("IDS_QP_BODY_NOTIFICATIONS_ABB2"));
+               snprintf(buf, sizeof(buf), format, noti_count);
+
+               return strdup(buf);
+       }
+
+       return NULL;
+}
+
+static void _quickpanel_list_noti_gl_del(void *data, Evas_Object *obj)
+{
+       int noti_priv_id = 0;
+       qp_item_type_e item_type = QP_ITEM_TYPE_NONE;
+       notification_h noti = NULL;
+
+       if (data) {
+               noti = quickpanel_list_util_item_get_data(data);
+               item_type = quickpanel_list_util_item_get_item_type(data);
+
+               DBG("item type:%d", item_type);
+               if (noti != NULL) {
+                       if (item_type == QP_ITEM_TYPE_ONGOING_NOTI) {
+                               notification_get_id(noti, NULL, &noti_priv_id);
+                               noti_node_remove(g_noti_node, noti_priv_id);
+                               DBG("noti:%d removed", noti_priv_id);
+                       }
+               }
+               free(data);
+       }
+
+       return;
+}
+
+static void _quickpanel_list_noti_group_gl_del(void *data, Evas_Object *obj) {
+       if (data != NULL) {
+               free(data);
+       }
+       return;
+}
+
+static void _quickpanel_notibox_gl_del(void *data, Evas_Object *obj) {
+       if (data != NULL) {
+               free(data);
+       }
+       return;
+}
+
+static void _quickpanel_noti_gl_style_init(void)
+{
+       Elm_Genlist_Item_Class *noti = NULL;
+       Elm_Genlist_Item_Class *noti_ongoing = NULL;
+       Elm_Genlist_Item_Class *group = NULL;
+
+       /* item style for noti items*/
+       noti = elm_genlist_item_class_new();
+       if (noti) {
+               noti->item_style = "qp_notibox/default";
+               noti->func.text_get = NULL;
+               noti->func.content_get = _quickpanel_noti_box_gl_get_content;
+               noti->func.state_get = NULL;
+               noti->func.del = _quickpanel_notibox_gl_del;
+               itc_noti = noti;
+       }
+
+       noti_ongoing = elm_genlist_item_class_new();
+       if (noti_ongoing) {
+               noti_ongoing->item_style = "notification_ongoing_item";
+               noti_ongoing->func.text_get = _quickpanel_ongoing_noti_gl_get_text;
+               noti_ongoing->func.content_get = _quickpanel_noti_gl_get_content;
+               noti_ongoing->func.state_get = _quickpanel_noti_gl_get_state;
+               noti_ongoing->func.del = _quickpanel_list_noti_gl_del;
+               itc_ongoing = noti_ongoing;
+       }
+
+       /* item style for noti group title */
+       group = elm_genlist_item_class_new();
+       if (group) {
+               group->item_style = "qp_group_title";
+               group->func.text_get = _quickpanel_noti_gl_get_group_text;
+               group->func.content_get = _quickpanel_noti_gl_get_group_content;
+               group->func.del = _quickpanel_list_noti_group_gl_del;
+               g_itc = group;
+       }
+}
+
+static void _quickpanel_noti_gl_style_fini(void)
+{
+       if (itc_noti) {
+               elm_genlist_item_class_free(itc_noti);
+               itc_noti = NULL;
+       }
+
+       if (itc_ongoing) {
+               elm_genlist_item_class_free(itc_ongoing);
+               itc_ongoing = NULL;
+       }
+
+       if (g_itc) {
+               elm_genlist_item_class_free(g_itc);
+               g_itc = NULL;
+       }
+
+       if (g_animated_image_list) {
+               g_animated_image_list = eina_list_free(g_animated_image_list);
+       }
+}
+
+static inline void __ongoing_comp_n_copy(notification_h old, notification_h new)
+{
+       int priv_id = 0;
+       int new_priv_id = 0;
+       char *pkgname = NULL;
+       char *new_pkgname = NULL;
+
+       if (!old)
+               return;
+
+       if (!new)
+               return;
+
+       notification_get_id(old, NULL, &priv_id);
+       notification_get_id(new, NULL, &new_priv_id);
+
+       notification_get_pkgname(old, &pkgname);
+       notification_get_pkgname(new, &new_pkgname);
+
+       if (!pkgname || !new_pkgname)
+               return;
+
+       if (!strcmp(pkgname, new_pkgname) && priv_id == new_priv_id) {
+               double percentage = 0.0;
+               double size = 0.0;
+               time_t insert_time = 0;
+               time_t new_insert_time = 0;
+
+               notification_get_progress(old, &percentage);
+               notification_get_size(old, &size);
+               notification_set_progress(new, percentage);
+               notification_set_size(new, size);
+               notification_get_insert_time(old, &insert_time);
+               notification_get_insert_time(new, &new_insert_time);
+
+               if (insert_time == new_insert_time) {
+                       char *content = NULL;
+                       notification_get_text(old,
+                               NOTIFICATION_TEXT_TYPE_CONTENT, &content);
+                       notification_set_text(new,
+                               NOTIFICATION_TEXT_TYPE_CONTENT, content,
+                               NULL, NOTIFICATION_VARIABLE_TYPE_NONE);
+               }
+       }
+}
+
+#ifndef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+static void _quickpanel_noti_get_new_divided_list(void)
+{
+       notification_list_h new_noti_list = NULL;
+       notification_list_h head = NULL;
+       notification_list_h new_head = NULL;
+       notification_h noti = NULL;
+       notification_h new_noti = NULL;
+
+       /* Get ongoing list */
+       notification_get_grouping_list(NOTIFICATION_TYPE_ONGOING, -1,
+                               &new_noti_list);
+       if (g_notification_ongoing_list != NULL) {
+               head = notification_list_get_head(g_notification_ongoing_list);
+               while (head != NULL) {
+                       new_head = notification_list_get_head(new_noti_list);
+                       while (new_head != NULL) {
+                               noti = notification_list_get_data(head);
+                               new_noti = notification_list_get_data(new_head);
+
+                               __ongoing_comp_n_copy(noti, new_noti);
+
+                               new_head = notification_list_get_next(new_head);
+                       }
+                       head = notification_list_get_next(head);
+               }
+
+               notification_free_list(g_notification_ongoing_list);
+               g_notification_ongoing_list = new_noti_list;
+       } else {
+               g_notification_ongoing_list = new_noti_list;
+       }
+
+       /* Get noti list */
+       notification_get_grouping_list(NOTIFICATION_TYPE_NOTI, -1,
+                                      &new_noti_list);
+       if (g_notification_list != NULL) {
+               notification_free_list(g_notification_list);
+               g_notification_list = new_noti_list;
+       }
+
+       g_notification_list = new_noti_list;
+}
+
+static void _quickpanel_noti_get_new_list(void)
+{
+       notification_list_h new_noti_list = NULL;
+       notification_list_h head = NULL;
+       notification_list_h new_head = NULL;
+       notification_h noti = NULL;
+       notification_h new_noti = NULL;
+       notification_type_e new_type = NOTIFICATION_TYPE_NONE;
+
+       if (g_notification_ongoing_list != NULL) {
+               notification_free_list(g_notification_ongoing_list);
+               g_notification_ongoing_list = new_noti_list;
+       }
+
+       /* Get all list */
+       notification_get_grouping_list(NOTIFICATION_TYPE_NONE, -1,
+                                      &new_noti_list);
+       if (g_notification_list != NULL) {
+               head = notification_list_get_head(g_notification_list);
+               while (head != NULL) {
+                       new_head = notification_list_get_head(new_noti_list);
+                       while (new_head != NULL) {
+                               noti = notification_list_get_data(head);
+                               new_noti = notification_list_get_data(new_head);
+
+                               notification_get_type(new_noti, &new_type);
+
+                               if (new_type == NOTIFICATION_TYPE_ONGOING)
+                                       __ongoing_comp_n_copy(noti, new_noti);
+
+                               new_head = notification_list_get_next(new_head);
+                       }
+                       head = notification_list_get_next(head);
+               }
+
+               notification_free_list(g_notification_list);
+               g_notification_list = new_noti_list;
+       } else {
+               g_notification_list = new_noti_list;
+       }
+}
+#endif
+
+static void _quickpanel_noti_clear_ongoinglist(Evas_Object *list)
+{
+       if (!list)
+               return;
+
+       if (!ongoing_first)
+               return;
+
+       quickpanel_list_util_item_del_by_type(list, ongoing_first,
+                       QP_ITEM_TYPE_ONGOING_NOTI);
+}
+
+static void _quickpanel_noti_clear_notilist(Evas_Object *list)
+{
+       if (!list)
+               return;
+
+       if (!g_noti_gridbox)
+               return;
+
+       if (g_noti_gridbox != NULL) {
+               gridbox_remove(g_noti_gridbox);
+               g_noti_gridbox = NULL;
+       }
+       if (noti_first != NULL) {
+               elm_object_item_del(noti_first);
+               noti_first= NULL;
+       }
+       if (noti_group != NULL) {
+               elm_object_item_del(noti_group);
+               noti_group= NULL;
+       }
+}
+
+static void _quickpanel_noti_clear_list_all(Evas_Object *list)
+{
+       _quickpanel_noti_clear_ongoinglist(list);
+       ongoing_first = NULL;
+
+       _quickpanel_noti_clear_notilist(list);
+}
+
+static void _quickpanel_noti_ongoing_add(Evas_Object *list, void *data)
+{
+       qp_item_data *qid = NULL;
+       Elm_Object_Item *it = NULL;
+
+       if (!list)
+               return;
+
+       qid = quickpanel_list_util_item_new(QP_ITEM_TYPE_ONGOING_NOTI, data);
+       if (!qid)
+               return;
+
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       it = quickpanel_list_util_sort_insert(list, itc_ongoing, qid, NULL,
+                       ELM_GENLIST_ITEM_NONE, quickpanel_noti_select_cb, qid);
+#else
+       it = quickpanel_list_util_sort_insert(list, itc_ongoing, qid, NULL,
+                       ELM_GENLIST_ITEM_NONE, quickpanel_noti_select_cb, data);
+#endif
+
+       if (it) {
+               ongoing_first = it;
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+               noti_node_add(g_noti_node, (void *)data, (void *)it);
+#endif
+       }
+       else
+               ERR("fail to insert item to list : %p", data);
+
+       DBG("noti ongoing[%p] data[%p] added, it[%p]", qid, data, it);
+}
+
+static void _quickpanel_noti_group_add(Evas_Object *list, void *data)
+{
+       qp_item_data *qid = NULL;
+       Elm_Object_Item *it = NULL;
+
+       if (!list)
+               return;
+
+       qid = quickpanel_list_util_item_new(QP_ITEM_TYPE_NOTI_GROUP, data);
+       if (!qid)
+               return;
+
+       it = quickpanel_list_util_sort_insert(list, g_itc, qid, NULL,
+               ELM_GENLIST_ITEM_GROUP, NULL, NULL);
+
+       if (it)
+               noti_group = it;
+       else
+               ERR("fail to insert item to list : %p", data);
+
+       DBG("noti group[%p] data[%p] added, it[%p]", qid, data, it);
+}
+
+void _quickpanel_noti_box_deleted_cb(void *data, Evas_Object *obj) {
+       DBG("deleting:%p", obj);
+
+       int priv_id = -1;
+
+       retif(data == NULL, , "Invalid parameter!");
+       retif(obj == NULL, , "Invalid parameter!");
+
+       noti_node_item *item = data;
+       notification_h noti = item->noti;
+
+       if (noti != NULL) {
+               notification_get_id(noti, NULL, &priv_id);
+               noti_node_remove(g_noti_node, priv_id);
+       }
+}
+
+static void _quickpanel_noti_noti_add(Evas_Object *list, void *data, int is_prepend)
+{
+       retif(list == NULL, , "Invalid parameter!");
+       qp_item_data *qid = NULL;
+       Elm_Object_Item *it = NULL;
+       notification_h noti = data;
+       notification_ly_type_e layout = NOTIFICATION_LY_NOTI_EVENT_SINGLE;
+
+       qid = quickpanel_list_util_item_new(QP_ITEM_TYPE_NOTI, NULL);
+       retif(qid == NULL, , "Invalid parameter!");
+
+       if (!noti_group)
+               _quickpanel_noti_group_add(list, NULL);
+
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       if (noti_first == NULL) {
+               if (g_noti_gridbox == NULL) {
+                       g_noti_gridbox = gridbox_create(list, quickpanel_get_app_data());
+                       gridbox_set_item_deleted_cb(g_noti_gridbox, _quickpanel_noti_box_deleted_cb);
+               }
+
+               it = quickpanel_list_util_sort_insert(list, itc_noti, qid, noti_group,
+                               ELM_GENLIST_ITEM_NONE, NULL, qid);
+               noti_first = it;
+       }
+#else
+       it = quickpanel_list_util_sort_insert(list, itc_noti, qid, noti_group,
+                       ELM_GENLIST_ITEM_NONE, quickpanel_noti_select_cb, data);
+#endif
+
+       if (noti != NULL) {
+               notification_get_layout(noti, &layout);
+       }
+       Evas_Object *noti_box = noti_box_create(list, layout);
+
+       if (noti_box != NULL) {
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+               noti_node_item *item = noti_node_add(g_noti_node, (void*)data, (void*)noti_box);
+               if (item != NULL) {
+                       noti_box_node_set(noti_box, item);
+                       noti_box_set_item_selected_cb(noti_box, quickpanel_notibox_select_cb);
+                       noti_box_set_item_deleted_cb(noti_box, quickpanel_notibox_delete_cb);
+                       gridbox_add_item(g_noti_gridbox, noti_box, is_prepend);
+               }
+#endif
+       } else
+               ERR("fail to insert item to list : %p", data);
+
+       DBG("noti[%p] data[%p] added, it[%p] of gridbox[%p]",
+                       qid, data, noti_box, g_noti_gridbox);
+}
+
+
+void _quickpanel_noti_update_notilist(struct appdata *ad)
+{
+       Evas_Object *list = NULL;
+       notification_h noti = NULL;
+       notification_h noti_save = NULL;
+       notification_list_h get_list = NULL;
+       int applist = NOTIFICATION_DISPLAY_APP_ALL;
+
+       DBG("");
+
+       retif(ad == NULL, , "Invalid parameter!");
+
+       list = ad->list;
+       retif(list == NULL, , "Failed to get noti genlist.");
+
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       _quickpanel_noti_clear_list_all(list);
+
+       notification_get_list(NOTIFICATION_TYPE_ONGOING, -1, &get_list);
+       while (get_list != NULL) {
+               noti = notification_list_get_data(get_list);
+               notification_get_display_applist(noti, &applist);
+
+               if (applist &
+                   NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+                       notification_clone(noti, &noti_save);
+                       _quickpanel_noti_ongoing_add(list, noti_save);
+               }
+               get_list = notification_list_get_next(get_list);
+       }
+       notification_free_list(get_list);
+
+       notification_get_list(NOTIFICATION_TYPE_NOTI , -1, &get_list);
+       while (get_list != NULL) {
+               noti = notification_list_get_data(get_list);
+               notification_get_display_applist(noti, &applist);
+
+               if (applist &
+                   NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+                       notification_clone(noti, &noti_save);
+                       _quickpanel_noti_noti_add(list, noti_save, GRIDBOX_APPEND);
+               }
+               get_list = notification_list_get_next(get_list);
+       }
+       notification_free_list(get_list);
+
+       if (g_noti_gridbox != NULL) {
+               elm_box_recalculate(g_noti_gridbox);
+       }
+#else
+       /* Clear genlist */
+       _quickpanel_noti_clear_list_all(list);
+
+       /* Update notification list */
+       if (ad->show_setting)
+               _quickpanel_noti_get_new_divided_list();
+       else
+               _quickpanel_noti_get_new_list();
+
+       /* append ongoing data to genlist */
+       if (g_notification_ongoing_list) {
+               get_list =
+                   notification_list_get_tail(g_notification_ongoing_list);
+               noti = notification_list_get_data(get_list);
+
+               while (get_list != NULL) {
+                       notification_get_display_applist(noti, &applist);
+
+                       if (applist &
+                           NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+                               _quickpanel_noti_ongoing_add(list, noti);
+                       }
+
+                       get_list = notification_list_get_prev(get_list);
+                       noti = notification_list_get_data(get_list);
+               }
+       }
+
+       /* append noti data to genlist */
+       if (g_notification_list) {
+               get_list = notification_list_get_tail(g_notification_list);
+               noti = notification_list_get_data(get_list);
+
+               while (get_list != NULL) {
+                       notification_get_display_applist(noti, &applist);
+
+                       if (applist & NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY)
+                               _quickpanel_noti_noti_add(list, noti, GRIDBOX_PREPEND);
+
+                       get_list = notification_list_get_prev(get_list);
+                       noti = notification_list_get_data(get_list);
+               }
+       }
+#endif
+}
+
+static void _quickpanel_noti_delete_volatil_data(void)
+{
+       notification_list_h noti_list = NULL;
+       notification_list_h noti_list_head = NULL;
+       notification_h noti = NULL;
+       int property = 0;
+
+       notification_get_grouping_list(NOTIFICATION_TYPE_NONE, -1, &noti_list);
+
+       noti_list_head = noti_list;
+
+       while (noti_list != NULL) {
+               noti = notification_list_get_data(noti_list);
+               notification_get_property(noti, &property);
+
+               if (property & NOTIFICATION_PROP_VOLATILE_DISPLAY) {
+                       notification_set_property(noti,
+                               property |
+                               NOTIFICATION_PROP_DISABLE_UPDATE_ON_DELETE);
+                       notification_delete(noti);
+               }
+
+               noti_list = notification_list_get_next(noti_list);
+       }
+
+       notification_free_list(noti_list_head);
+
+       notification_update(NULL);
+}
+
+static void _quickpanel_noti_detailed_changed_cb(void *data, notification_type_e type, notification_op *op_list, int num_op)
+{
+       int i = 0;
+       int op_type = 0;
+       int priv_id = 0;
+       struct appdata *ad = NULL;
+       notification_h new_noti = NULL;
+       notification_type_e noti_type = NOTIFICATION_TYPE_NONE;
+       int noti_applist = NOTIFICATION_DISPLAY_APP_ALL;
+       notification_ly_type_e noti_layout = NOTIFICATION_LY_NONE;
+
+       retif(data == NULL, , "Invalid parameter!");
+       ad = data;
+
+       DBG("test detailed quickpanel:%d", num_op);
+
+       for (i = 0; i < num_op; i++) {
+               notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_TYPE, &op_type);
+               DBG("op_type:%d", op_type);
+               notification_op_get_data(op_list + i, NOTIFICATION_OP_DATA_PRIV_ID, &priv_id);
+               DBG("op_priv_id:%d", priv_id);
+
+               if (op_type == NOTIFICATION_OP_INSERT) {
+                       new_noti = notification_load(NULL, priv_id);
+                       if (new_noti == NULL) continue;
+
+                       notification_get_type(new_noti, &noti_type);
+                       notification_get_display_applist(new_noti, &noti_applist);
+                       notification_get_layout(new_noti, &noti_layout);
+
+                       DBG("layout:%d", noti_layout);
+
+                       if (noti_applist & NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+                               noti_node_item *node = noti_node_get(g_noti_node, priv_id);
+                               if (node != NULL) {
+                                       if (noti_type == NOTIFICATION_TYPE_NOTI) {
+                                               DBG("cb after inserted:%d", priv_id);
+                                       }
+                               } else {
+                                       if (noti_type == NOTIFICATION_TYPE_NOTI) {
+                                               _quickpanel_noti_noti_add(ad->list, new_noti, GRIDBOX_PREPEND);
+                                       } else if (noti_type == NOTIFICATION_TYPE_ONGOING) {
+                                               _quickpanel_noti_ongoing_add(ad->list, new_noti);
+                                       }
+                               }
+                               DBG("%d noti added", priv_id);
+                       } else {
+                               notification_free(new_noti);
+                       }
+               }
+               if (op_type == NOTIFICATION_OP_DELETE) {
+                       noti_node_item *node = noti_node_get(g_noti_node, priv_id);
+
+                       if (node != NULL && node->noti != NULL) {
+                               notification_h noti = node->noti;
+                               notification_get_type(noti, &noti_type);
+
+                               if (noti_type == NOTIFICATION_TYPE_NOTI) {
+                                       gridbox_remove_item(g_noti_gridbox, node->view, 0);
+                               } else if (noti_type == NOTIFICATION_TYPE_ONGOING) {
+                                       elm_object_item_del(node->view);
+                               }
+                       }
+                       DBG("%d noti deleted", priv_id);
+               }
+               if (op_type == NOTIFICATION_OP_UPDATE) {
+                       noti_node_item *node = noti_node_get(g_noti_node, priv_id);
+                       qp_item_data *qid = NULL;
+                       notification_h old_noti = NULL;
+
+                       new_noti = notification_load(NULL, priv_id);
+                       retif(new_noti == NULL, , "fail to load updated noti");
+
+                       if (node != NULL && node->view != NULL && node->noti != NULL) {
+                               notification_get_type(new_noti, &noti_type);
+
+                               if (noti_type == NOTIFICATION_TYPE_NOTI) {
+                                       gridbox_remove_item(g_noti_gridbox, node->view, 0);
+                                       _quickpanel_noti_noti_add(ad->list, new_noti, GRIDBOX_PREPEND);
+/*
+                                       gridbox_remove_and_add_item(g_noti_gridbox, node->view,
+                                                       _quickpanel_noti_noti_add
+                                                       ,ad->list, new_noti, GRIDBOX_PREPEND);
+*/
+                               } else if (noti_type == NOTIFICATION_TYPE_ONGOING) {
+                                       old_noti = node->noti;
+                                       node->noti = new_noti;
+
+                                       qid = elm_object_item_data_get(node->view);
+                                       retif(qid == NULL, , "noti is already deleted");
+                                       quickpanel_list_util_item_set_data(qid, new_noti);
+                                       elm_genlist_item_fields_update(node->view, "*",
+                                                       ELM_GENLIST_ITEM_FIELD_ALL);
+                               }
+
+                               if (old_noti != NULL) {
+                                       notification_free(old_noti);
+                               }
+                       } else {
+                               notification_get_display_applist(new_noti, &noti_applist);
+
+                               if (noti_applist & NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY) {
+
+                                       if (noti_type == NOTIFICATION_TYPE_NOTI) {
+                                               _quickpanel_noti_noti_add(ad->list, new_noti, GRIDBOX_PREPEND);
+                                       } else if (noti_type == NOTIFICATION_TYPE_ONGOING) {
+                                               _quickpanel_noti_ongoing_add(ad->list, new_noti);
+                                       }
+                               }
+                       }
+
+                       DBG("%d noti updated", priv_id);
+               }
+       }
+
+       if (noti_node_get_item_count(g_noti_node, NOTIFICATION_TYPE_NOTI)
+                       <= 0) {
+               struct appdata *ad = quickpanel_get_app_data();
+               _quickpanel_noti_clear_notilist(ad->list);
+       } else {
+               if (noti_group != NULL) {
+                       elm_genlist_item_fields_update(noti_group, "*",
+                                       ELM_GENLIST_ITEM_FIELD_ALL);
+               }
+               _quickpanel_noti_update_notibox();
+       }
+}
+
+static void _quickpanel_noti_update_sim_status_cb(keynode_t *node, void *data)
+{
+       struct appdata *ad = data;
+
+       if (ad != NULL && ad->list != NULL) {
+               _quickpanel_noti_update_notilist(ad);
+
+               _quickpanel_noti_update_notibox();
+       }
+}
+
+static int _quickpanel_noti_register_event_handler(struct appdata *ad)
+{
+       int ret = 0;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       /* Add dbus signal */
+       e_dbus_init();
+       ad->dbus_connection = e_dbus_bus_get(DBUS_BUS_SYSTEM);
+       if (ad->dbus_connection == NULL) {
+               ERR("noti register : failed to get dbus bus");
+               return -1;
+       }
+
+       ad->dbus_handler_size =
+               e_dbus_signal_handler_add(ad->dbus_connection, NULL,
+                       QP_NOTI_ONGOING_DBUS_PATH,
+                       QP_NOTI_ONGOING_DBUS_INTERFACE, "update_progress",
+                       _quickpanel_noti_item_progress_update_cb,
+                       ad);
+       if (ad->dbus_handler_size == NULL)
+               ERR("fail to add size signal");
+
+       ad->dbus_handler_progress =
+               e_dbus_signal_handler_add(ad->dbus_connection, NULL,
+                       QP_NOTI_ONGOING_DBUS_PATH,
+                       QP_NOTI_ONGOING_DBUS_INTERFACE, "update_size",
+                       _quickpanel_noti_item_size_update_cb,
+                       ad);
+       if (ad->dbus_handler_progress == NULL)
+               ERR("fail to add progress signal");
+
+       ad->dbus_handler_content =
+               e_dbus_signal_handler_add(ad->dbus_connection, NULL,
+                       QP_NOTI_ONGOING_DBUS_PATH,
+                       QP_NOTI_ONGOING_DBUS_INTERFACE, "update_content",
+                       _quickpanel_noti_item_content_update_cb,
+                       ad);
+       if (ad->dbus_handler_content == NULL)
+               ERR("fail to add content signal");
+
+       /* Notify vconf key */
+       ret = vconf_notify_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT,
+                                      _quickpanel_noti_update_sim_status_cb,
+                                      (void *)ad);
+       if (ret != 0)
+               ERR("Failed to register SIM_SLOT change callback!");
+
+       /* Register notification changed cb */
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       notification_register_detailed_changed_cb(_quickpanel_noti_detailed_changed_cb, ad);
+#else
+       notification_resister_changed_cb(_quickpanel_noti_changed_cb, ad);
+#endif
+
+       return ret;
+}
+
+static int _quickpanel_noti_unregister_event_handler(struct appdata *ad)
+{
+       int ret = 0;
+
+       /* Unregister notification changed cb */
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       notification_unregister_detailed_changed_cb(_quickpanel_noti_detailed_changed_cb, (void *)ad);
+#else
+       notification_unresister_changed_cb(_quickpanel_noti_changed_cb);
+#endif
+
+       /* Ignore vconf key */
+       ret = vconf_ignore_key_changed(VCONFKEY_TELEPHONY_SIM_SLOT,
+                               _quickpanel_noti_update_sim_status_cb);
+       if (ret != 0)
+               ERR("Failed to ignore SIM_SLOT change callback!");
+
+       /* Delete dbus signal */
+       if (ad->dbus_handler_size != NULL) {
+               e_dbus_signal_handler_del(ad->dbus_connection,
+                               ad->dbus_handler_size);
+               ad->dbus_handler_size = NULL;
+       }
+       if (ad->dbus_handler_progress != NULL) {
+               e_dbus_signal_handler_del(ad->dbus_connection,
+                               ad->dbus_handler_progress);
+               ad->dbus_handler_progress = NULL;
+       }
+       if (ad->dbus_handler_content != NULL) {
+               e_dbus_signal_handler_del(ad->dbus_connection,
+                               ad->dbus_handler_content);
+               ad->dbus_handler_content = NULL;
+       }
+
+       if (ad->dbus_connection != NULL) {
+               e_dbus_connection_close(ad->dbus_connection);
+               ad->dbus_connection = NULL;
+       }
+
+       return QP_OK;
+}
+
+static int _quickpanel_noti_check_first_start(void)
+{
+       int status = 0;
+       int ret = 0;
+
+       ret = vconf_get_bool(VCONFKEY_QUICKPANEL_STARTED, &status);
+       if (ret) {
+               INFO("fail to get %s", VCONFKEY_QUICKPANEL_STARTED);
+               /* reboot */
+               ret = vconf_set_bool(VCONFKEY_QUICKPANEL_STARTED, 1);
+               INFO("set : %s, result : %d", VCONFKEY_QUICKPANEL_STARTED, ret);
+       }
+
+       if (status)
+               return 0;
+
+       return 1;
+}
+
+static Eina_Bool quickpanel_noti_refresh_gridbox(void *data)
+{
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, EINA_FALSE, "Invalid parameter!");
+       ad = data;
+
+       DBG("wr");
+
+       /* Update notification list */
+       _quickpanel_noti_update_notilist(ad);
+
+       _quickpanel_noti_register_event_handler(ad);
+
+       _quickpanel_noti_update_notibox();
+
+       return EINA_FALSE;
+}
+
+static int quickpanel_noti_init(void *data)
+{
+       struct appdata *ad = data;
+       int is_first = 0;
+
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       g_window = ad->win;
+
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       noti_node_create(&g_noti_node);
+#endif
+
+       is_first = _quickpanel_noti_check_first_start();
+       if (is_first) {
+               /* Remove ongoing and volatile noti data */
+               notifiation_clear(NOTIFICATION_TYPE_ONGOING);
+               _quickpanel_noti_delete_volatil_data();
+       }
+
+       _quickpanel_noti_gl_style_init();
+
+       ecore_timer_add(0.200, quickpanel_noti_refresh_gridbox, ad);
+
+       return QP_OK;
+}
+
+static int quickpanel_noti_fini(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+#ifdef QP_DETAILED_NOTI_CHANGE_CB_ENABLE
+       if (g_noti_node != NULL) {
+               noti_node_destroy(&g_noti_node);
+       }
+#else
+       /* Remove notification list */
+       if (g_notification_ongoing_list != NULL) {
+               notification_free_list(g_notification_ongoing_list);
+
+               g_notification_ongoing_list = NULL;
+       }
+
+       if (g_notification_list != NULL) {
+               notification_free_list(g_notification_list);
+
+               g_notification_list = NULL;
+       }
+#endif
+       /* Unregister event handler */
+       _quickpanel_noti_unregister_event_handler(data);
+       _quickpanel_noti_clear_list_all(ad->list);
+       _quickpanel_noti_gl_style_fini();
+       return QP_OK;
+}
+
+static int quickpanel_noti_suspend(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       suspended = 1;
+
+       if (ad->list) {
+               _quickpanel_noti_ani_image_control(EINA_FALSE);
+       }
+
+       return QP_OK;
+}
+
+static int quickpanel_noti_resume(void *data)
+{
+       struct appdata *ad = data;
+       retif(ad == NULL, QP_FAIL, "Invalid parameter!");
+
+       suspended = 0;
+
+       if (ad->list) {
+               quickpanel_list_util_item_update_by_type(ad->list,
+                               ongoing_first, QP_ITEM_TYPE_ONGOING_NOTI);
+
+               _quickpanel_noti_ani_image_control(EINA_TRUE);
+
+               _quickpanel_noti_update_notibox();
+       }
+
+       return QP_OK;
+}
+
+static void quickpanel_noti_refresh(void *data) {
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, , "Invalid parameter!");
+       ad = data;
+
+       if (g_noti_gridbox != NULL) {
+               gridbox_rotation(g_noti_gridbox, ad->angle);
+       }
+       _quickpanel_noti_update_notibox();
+}
+
+void quickpanel_noti_lang_changed(void *data)
+{
+       struct appdata *ad = data;
+
+       retif(ad == NULL, , "Invalid parameter!");
+
+       _quickpanel_noti_update_notilist(ad);
+
+       _quickpanel_noti_update_notibox();
+}
+
+static unsigned int quickpanel_noti_get_height(void *data)
+{
+       int height = 0;
+       struct appdata *ad = data;
+
+       retif(ad == NULL, 0, "Invalid parameter!");
+
+       if (noti_group) {
+               height = QP_THEME_LIST_ITEM_GROUP_HEIGHT;
+       }
+       height +=
+                       noti_node_get_item_count(
+                                       g_noti_node,
+                                       NOTIFICATION_TYPE_NOTI) * QP_THEME_LIST_ITEM_NOTI_HEIGHT
+                                       + noti_node_get_item_count(g_noti_node, NOTIFICATION_TYPE_ONGOING) * (QP_THEME_LIST_ITEM_ONGOING_HEIGHT + QP_THEME_LIST_ITEM_ONGOING_SEPERATOR_HEIGHT);return
+       height  * ad->scale;
+}
diff --git a/daemon/notifications/noti.h b/daemon/notifications/noti.h
new file mode 100755 (executable)
index 0000000..9a31a1f
--- /dev/null
@@ -0,0 +1,20 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __NOTI_H__
+#define __NOTI_H__
+char *quickpanel_noti_get_time(time_t t, char *buf, int buf_len);
+#endif
diff --git a/daemon/notifications/noti_box.c b/daemon/notifications/noti_box.c
new file mode 100755 (executable)
index 0000000..fae1be9
--- /dev/null
@@ -0,0 +1,480 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 <Ecore_X.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "quickpanel_theme_def.h"
+#include "noti_box.h"
+#include "noti_node.h"
+#include "noti.h"
+
+static void _noti_box_call_item_cb(Evas_Object *noti_box, const char *emission) {
+       retif(noti_box == NULL, , "invalid parameter");
+       retif(emission == NULL, , "invalid parameter");
+
+       DBG("%s", emission);
+
+       void (*cb)(void *data, Evas_Object *obj) = NULL;
+       noti_box_h *data = NULL;
+
+       data = evas_object_data_get(noti_box, E_DATA_NOTI_BOX_H);
+
+       if (strncmp(emission,"selected", strlen("selected")) == 0) {
+               cb = evas_object_data_get(noti_box, E_DATA_CB_SELECTED_ITEM);
+
+               if (cb != NULL && data != NULL) {
+                       cb(data->data, noti_box);
+               }
+       }
+       if (strncmp(emission,"deleted", strlen("deleted")) == 0) {
+               cb = evas_object_data_get(noti_box, E_DATA_CB_DELETED_ITEM);
+
+               if (cb != NULL && data != NULL) {
+                       cb(data->data, noti_box);
+               }
+       }
+}
+
+void _signal_cb(void *data, Evas_Object *o, const char *emission, const char *source)
+{
+       retif(data == NULL, , "invalid parameter");
+       retif(o == NULL, , "invalid parameter");
+       retif(emission == NULL, , "invalid parameter");
+
+       _noti_box_call_item_cb(o, emission);
+}
+
+Evas_Object *noti_box_create(Evas_Object *parent, notification_ly_type_e layout) {
+       Evas_Object *box = NULL;
+
+       box = elm_layout_add(parent);
+
+       DBG("");
+       if (layout == NOTIFICATION_LY_NOTI_EVENT_SINGLE
+                       || layout == NOTIFICATION_LY_NOTI_EVENT_MULTIPLE) {
+               elm_layout_file_set(box, DEFAULT_EDJ,
+                               "quickpanel/notibox/single_multi");
+       } else if (layout == NOTIFICATION_LY_NOTI_THUMBNAIL) {
+               elm_layout_file_set(box, DEFAULT_EDJ, "quickpanel/notibox/thumbnail");
+       } else {
+               elm_layout_file_set(box, DEFAULT_EDJ,
+                               "quickpanel/notibox/single_multi");
+       }
+
+       evas_object_size_hint_weight_set(box, EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(box, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       evas_object_show(box);
+
+       noti_box_h *box_h = (noti_box_h *) malloc(sizeof(noti_box_h));
+       box_h->layout = layout;
+       box_h->status = STATE_NORMAL;
+       box_h->data = NULL;
+       evas_object_data_set(box, E_DATA_NOTI_BOX_H, box_h);
+       DBG("created box:%p", box);
+
+       //add event
+       elm_object_signal_callback_add(box,
+                       "selected",
+                       "object.layer.touch",
+                       _signal_cb,
+                       parent
+       );
+       //add event
+       elm_object_signal_callback_add(box,
+                       "deleted",
+                       "object.layer.touch",
+                       _signal_cb,
+                       parent
+       );
+
+       return box;
+}
+
+static void _set_image(Evas_Object *noti_box, notification_h noti,
+               notification_image_type_e image_type, const char *part, int is_stretch) {
+
+       DBG("");
+
+       char *image = NULL;
+
+       notification_get_image(noti, image_type, &image);
+
+       if (image != NULL) {
+               Evas_Object *content = NULL;
+               content = elm_image_add(noti_box);
+               elm_image_file_set(content, image, NULL);
+               if (is_stretch == 1) {
+                       elm_image_aspect_fixed_set(content, EINA_FALSE);
+                       elm_image_resizable_set(content, EINA_TRUE, EINA_TRUE);
+               }
+
+               elm_object_part_content_set(noti_box, part, content);
+       }
+}
+
+static int _set_text(Evas_Object *noti_box, notification_h noti,
+               notification_text_type_e text_type, const char *part) {
+       char buf[128] = { 0, };
+
+       char *text = NULL;
+       time_t time = 0;
+
+       if (notification_get_time_from_text(noti, text_type, &time) == NOTIFICATION_ERROR_NONE) {
+               if ((int)time > 0) {
+                       quickpanel_noti_get_time(time, buf, sizeof(buf));
+                       text = buf;
+               }
+       } else {
+               notification_get_text(noti, text_type, &text);
+       }
+
+       if (text != NULL) {
+               elm_object_part_text_set(noti_box, part, text);
+
+               return strlen(text);
+       }
+
+       return 0;
+}
+
+static int _check_text_null(notification_h noti,
+               notification_text_type_e text_type) {
+       DBG("");
+
+       char *text = NULL;
+
+       notification_get_text(noti, text_type, &text);
+
+       if (text == NULL) {
+               return 1;
+       }
+
+       return 0;
+}
+
+static int _check_image_null(notification_h noti,
+               notification_image_type_e image_type) {
+       DBG("");
+
+       char *image = NULL;
+
+       notification_get_image(noti, image_type, &image);
+
+       if (image == NULL) {
+               return 1;
+       }
+
+       return 0;
+}
+
+static void _noti_box_set_layout_single(Evas_Object *noti_box,
+               notification_h noti) {
+       DBG("");
+
+       char *dir = NULL;
+       char *domain = NULL;
+
+       notification_get_text_domain(noti, &domain, &dir);
+       if (domain != NULL && dir != NULL)
+               bindtextdomain(domain, dir);
+
+       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_TITLE,
+                       "object.text.title");
+       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_CONTENT,
+                       "object.text.contents");
+
+       if (_check_text_null(noti, NOTIFICATION_TEXT_TYPE_INFO_1) == 0) {
+               if (_check_text_null(noti, NOTIFICATION_TEXT_TYPE_INFO_SUB_1) == 1) {
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_1,
+                                       "object.text.info.1");
+               } else {
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_1,
+                                       "object.text.info.1.short");
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_SUB_1,
+                                       "object.text.info.sub.1");
+               }
+       }
+       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_2,
+                       "object.text.info.2");
+
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 0) {
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON,
+                               "object.icon.sub", 1);
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL,
+                               "object.icon", 1);
+       } else {
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON,
+                               "object.icon", 1);
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON_SUB,
+                               "object.icon.sub", 1);
+       }
+       _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_BACKGROUND,
+                       "object.icon.background", 1);
+
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_BACKGROUND) == 0) {
+               elm_object_signal_emit(noti_box, "box.show.dim", "box.prog");
+       }
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_ICON) == 1
+                       && _check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 1) {
+               elm_object_signal_emit(noti_box, "box.hide.icon.bg", "box.prog");
+       }
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_ICON_SUB) == 0
+                       || _check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 0) {
+               elm_object_signal_emit(noti_box, "box.show.sub.bg", "box.prog");
+       }
+}
+
+static void _noti_box_set_layout_multi(Evas_Object *noti_box,
+               notification_h noti) {
+       DBG("");
+
+       int length = 0;
+       char *dir = NULL;
+       char *domain = NULL;
+       char buf[128] = {0,};
+
+       notification_get_text_domain(noti, &domain, &dir);
+       if (domain != NULL && dir != NULL)
+               bindtextdomain(domain, dir);
+
+       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_TITLE,
+                       "object.text.title");
+       if (_check_text_null(noti, NOTIFICATION_TEXT_TYPE_EVENT_COUNT) == 0) {
+               _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_CONTENT,
+                               "object.text.contents.short");
+               length = _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_EVENT_COUNT,
+                               "object.text.count");
+               length = (length >= 5) ? 5 : length;
+               snprintf(buf, sizeof(buf), "box.count.%d", length);
+               elm_object_signal_emit(noti_box, buf, "box.prog");
+               DBG("buf:%s", buf);
+       } else {
+               _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_CONTENT,
+                               "object.text.contents");
+       }
+
+       if (_check_text_null(noti, NOTIFICATION_TEXT_TYPE_INFO_1) == 0) {
+               if (_check_text_null(noti, NOTIFICATION_TEXT_TYPE_INFO_SUB_1) == 1) {
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_1,
+                                       "object.text.info.1");
+               } else {
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_1,
+                                       "object.text.info.1.short");
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_SUB_1,
+                                       "object.text.info.sub.1");
+               }
+       }
+       if (_check_text_null(noti, NOTIFICATION_TEXT_TYPE_INFO_2) == 0) {
+               if (_check_text_null(noti, NOTIFICATION_TEXT_TYPE_INFO_SUB_2) == 1) {
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_2,
+                                       "object.text.info.2");
+               } else {
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_2,
+                                       "object.text.info.2.short");
+                       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_INFO_SUB_2,
+                                       "object.text.info.sub.2");
+               }
+       }
+
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 0) {
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON,
+                               "object.icon.sub", 1);
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL,
+                               "object.icon", 1);
+       } else {
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON,
+                               "object.icon", 1);
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON_SUB,
+                               "object.icon.sub", 1);
+       }
+       _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_BACKGROUND,
+                       "object.icon.background", 1);
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_BACKGROUND) == 0) {
+               elm_object_signal_emit(noti_box, "box.show.dim", "box.prog");
+       }
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_ICON) == 1
+                       && _check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 1) {
+               elm_object_signal_emit(noti_box, "box.hide.icon.bg", "box.prog");
+       }
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_ICON_SUB) == 0
+                       || _check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 0) {
+               elm_object_signal_emit(noti_box, "box.show.sub.bg", "box.prog");
+       }
+}
+
+static void _noti_box_set_layout_thumbnail(Evas_Object *noti_box,
+               notification_h noti) {
+       DBG("");
+
+       char *dir = NULL;
+       char *domain = NULL;
+
+       notification_get_text_domain(noti, &domain, &dir);
+       if (domain != NULL && dir != NULL)
+               bindtextdomain(domain, dir);
+
+       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_TITLE,
+                       "object.text.title");
+       _set_text(noti_box, noti, NOTIFICATION_TEXT_TYPE_CONTENT,
+                       "object.text.contents");
+
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 0) {
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON,
+                               "object.icon.sub", 0);
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL,
+                               "object.icon", 0);
+       } else {
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON,
+                               "object.icon", 0);
+               _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_ICON_SUB,
+                               "object.icon.sub", 0);
+       }
+       _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_BACKGROUND,
+                       "object.icon.background", 1);
+
+       _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_LIST_1,
+                       "object.thumbnail.list.1", 1);
+       _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_LIST_2,
+                       "object.thumbnail.list.2", 1);
+       _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_LIST_3,
+                       "object.thumbnail.list.3", 1);
+       _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_LIST_4,
+                       "object.thumbnail.list.4", 1);
+       _set_image(noti_box, noti, NOTIFICATION_IMAGE_TYPE_LIST_5,
+                       "object.thumbnail.list.5", 1);
+
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_BACKGROUND) == 0) {
+               elm_object_signal_emit(noti_box, "box.show.dim", "box.prog");
+       }
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_ICON) == 1
+                       && _check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 1) {
+               elm_object_signal_emit(noti_box, "box.hide.icon.bg", "box.prog");
+       }
+       if (_check_image_null(noti, NOTIFICATION_IMAGE_TYPE_ICON_SUB) == 0
+                       || _check_image_null(noti, NOTIFICATION_IMAGE_TYPE_THUMBNAIL) == 0) {
+               elm_object_signal_emit(noti_box, "box.show.sub.bg", "box.prog");
+       }
+}
+
+static void _noti_box_set_layout(Evas_Object *noti_box, notification_h noti,
+               notification_ly_type_e layout) {
+
+       DBG("layout:%d", layout);
+
+       switch (layout) {
+               case NOTIFICATION_LY_NOTI_EVENT_SINGLE:
+                       _noti_box_set_layout_single(noti_box, noti);
+                       break;
+               case NOTIFICATION_LY_NOTI_EVENT_MULTIPLE:
+                       _noti_box_set_layout_multi(noti_box, noti);
+                       break;
+               case NOTIFICATION_LY_NOTI_THUMBNAIL:
+                       _noti_box_set_layout_thumbnail(noti_box, noti);
+                       break;
+               case NOTIFICATION_LY_NONE:
+               case NOTIFICATION_LY_ONGOING_EVENT:
+               case NOTIFICATION_LY_ONGOING_PROGRESS:
+               case NOTIFICATION_LY_MAX:
+                       DBG("not supported layout type:%d", layout);
+                       break;
+       }
+}
+
+void noti_box_remove(Evas_Object *noti_box) {
+
+       retif(noti_box == NULL, , "invalid parameter");
+
+       noti_box_h *noti_box_h = evas_object_data_get(noti_box, E_DATA_NOTI_BOX_H);
+
+       if (noti_box_h != NULL)
+               free(noti_box_h);
+
+       evas_object_data_del(noti_box, E_DATA_NOTI_BOX_H);
+       evas_object_data_del(noti_box, E_DATA_CB_SELECTED_ITEM);
+       evas_object_data_del(noti_box, E_DATA_CB_DELETED_ITEM);
+
+       evas_object_del(noti_box);
+}
+
+void noti_box_set_status(Evas_Object *noti_box, int status) {
+       retif(noti_box == NULL, , "invalid parameter");
+
+       noti_box_h *noti_box_h = evas_object_data_get(noti_box, E_DATA_NOTI_BOX_H);
+
+       if (noti_box_h != NULL) {
+               noti_box_h->status = status;
+       }
+}
+
+int noti_box_get_status(Evas_Object *noti_box) {
+       retif(noti_box == NULL, STATE_NORMAL, "invalid parameter");
+
+       noti_box_h *noti_box_h = evas_object_data_get(noti_box, E_DATA_NOTI_BOX_H);
+
+       if (noti_box_h != NULL) {
+               return noti_box_h->status;
+       }
+
+       return STATE_DELETING;
+}
+
+void noti_box_node_set(Evas_Object *noti_box, void *data) {
+       retif(noti_box == NULL, , "invalid parameter");
+       retif(data == NULL, , "invalid parameter");
+
+       noti_box_h *noti_box_data = evas_object_data_get(noti_box, E_DATA_NOTI_BOX_H);
+
+       if (noti_box_data != NULL) {
+               noti_box_data->data = data;
+
+               if (data != NULL) {
+                       noti_node_item *item = data;
+                       _noti_box_set_layout(noti_box, item->noti, noti_box_data->layout);
+               }
+       }
+}
+
+void *noti_box_node_get(Evas_Object *noti_box) {
+       retif(noti_box == NULL, NULL, "invalid parameter");
+
+       noti_box_h *noti_box_data = evas_object_data_get(noti_box, E_DATA_NOTI_BOX_H);
+
+       if (noti_box_data != NULL) {
+               return noti_box_data->data;
+       }
+
+       return NULL;
+}
+
+void noti_box_set_item_selected_cb(Evas_Object *noti_box,
+               void(*selected_cb)(void *data, Evas_Object *obj)) {
+       retif(noti_box == NULL, , "invalid parameter");
+       retif(selected_cb == NULL, , "invalid parameter");
+
+       evas_object_data_set(noti_box, E_DATA_CB_SELECTED_ITEM, selected_cb);
+}
+
+void noti_box_set_item_deleted_cb(Evas_Object *noti_box,
+               void(*deleted_cb)(void *data, Evas_Object *obj)) {
+       retif(noti_box == NULL, , "invalid parameter");
+       retif(deleted_cb == NULL, , "invalid parameter");
+
+       evas_object_data_set(noti_box, E_DATA_CB_DELETED_ITEM, deleted_cb);
+}
diff --git a/daemon/notifications/noti_box.h b/daemon/notifications/noti_box.h
new file mode 100755 (executable)
index 0000000..d5d8fd2
--- /dev/null
@@ -0,0 +1,46 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QUICKPANEL_NOTI_BOX_H__
+#define __QUICKPANEL_NOTI_BOX_H__
+
+#include <notification.h>
+
+#define STATE_NORMAL 1
+#define STATE_DELETING 0
+
+#define E_DATA_NOTI_BOX_H "noti_box"
+#define E_DATA_CB_SELECTED_ITEM "noti_box_cb_selected"
+#define E_DATA_CB_DELETED_ITEM "noti_box_cb_deleted"
+
+typedef struct _noti_box_h {
+       int status;
+       void *data;
+       notification_ly_type_e  layout;
+} noti_box_h;
+
+Evas_Object *noti_box_create(Evas_Object *parent, notification_ly_type_e layout);
+void noti_box_node_set(Evas_Object *noti_box, void *data);
+void *noti_box_node_get(Evas_Object *noti_box);
+void noti_box_remove(Evas_Object *noti_box);
+void noti_box_set_item_selected_cb(Evas_Object *noti_box,
+               void(*selected_cb)(void *data, Evas_Object *obj));
+void noti_box_set_item_deleted_cb(Evas_Object *noti_box,
+               void(*deleted_cb)(void *data, Evas_Object *obj));
+int noti_box_get_status(Evas_Object *noti_box);
+void noti_box_set_status(Evas_Object *noti_box, int status);
+
+#endif
diff --git a/daemon/notifications/noti_display_app.c b/daemon/notifications/noti_display_app.c
new file mode 100755 (executable)
index 0000000..3c3d5bd
--- /dev/null
@@ -0,0 +1,422 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 <E_Notify.h>
+#include <E_Notification_Daemon.h>
+#include <Elementary.h>
+#include "noti_win.h"
+#include "quickpanel-ui.h"
+#include "noti_display_app.h"
+
+#define INFO(str, args...) fprintf(stdout, str"\n", ##args)
+#define ERR(str, args...) fprintf(stderr, str"\n", ##args)
+
+static E_Notification_Daemon *g_notification_daemon;
+static const char *data_key = "_noti_data";
+static Evas_Object *app_win;
+
+struct Daemon_Data {
+       E_Notification_Daemon *daemon;
+       Eina_List *notes;
+       double default_timeout;
+       int next_id;
+};
+
+struct Timer_Data {
+       struct Daemon_Data *daemon_data;
+       E_Notification *n;
+       Ecore_Timer *timer;
+       enum Noti_Orient orient;
+};
+
+struct Noti_Data {
+       E_Notification *n;
+       const char *time;
+};
+
+/* Windows to display different orientations of notification */
+static Evas_Object *noti_win[NOTI_ORIENT_LAST];
+
+Eina_List *notification_daemon_note_list_get()
+{
+       struct Daemon_Data *daemon_data;
+
+       if (!g_notification_daemon)
+               return NULL;
+       daemon_data = e_notification_daemon_data_get(g_notification_daemon);
+       if (!daemon_data)
+               return NULL;
+       return daemon_data->notes;
+}
+
+void notification_daemon_note_list_clear()
+{
+       struct Daemon_Data *daemon_data;
+       Eina_List *l;
+       E_Notification *n;
+       struct Noti_Data *noti_data;
+
+       if (!g_notification_daemon)
+               return;
+       daemon_data = e_notification_daemon_data_get(g_notification_daemon);
+       if (!daemon_data)
+               return;
+       EINA_LIST_FOREACH(daemon_data->notes, l, noti_data) {
+               daemon_data->notes = eina_list_remove(daemon_data->notes,
+                       noti_data);
+               n = noti_data->n;
+               eina_stringshare_replace(&noti_data->time, NULL);
+               e_notification_unref(n);
+               free(noti_data);
+       }
+}
+
+static struct Noti_Data *_notification_daemon_noti_data_find(
+       struct Daemon_Data *daemon_data, E_Notification *n)
+{
+       Eina_List *l;
+       struct Noti_Data *noti_data;
+
+       EINA_LIST_FOREACH(daemon_data->notes, l, noti_data)
+       if (noti_data->n == n)
+               return noti_data;
+
+       return NULL;
+}
+
+static void _notification_daemon_note_close(struct Daemon_Data *daemon_data,
+       E_Notification *n, int reason)
+{
+       struct Noti_Data *noti_data;
+
+       noti_data = _notification_daemon_noti_data_find(daemon_data, n);
+       if (!noti_data)
+               return;
+       daemon_data->notes = eina_list_remove(daemon_data->notes, noti_data);
+       n = noti_data->n;
+       eina_stringshare_replace(&noti_data->time, NULL);
+       e_notification_unref(n);
+       free(noti_data);
+       e_notification_closed_set(n, 1);
+       e_notification_daemon_signal_notification_closed(daemon_data->daemon,
+               e_notification_id_get(n), reason);
+}
+
+static void _note_destroy(struct Timer_Data *timer_data,
+       enum E_Notification_Closed_Reason reason)
+{
+       enum Noti_Orient orient;
+
+       if (!timer_data)
+               return;
+       orient = timer_data->orient;
+       if (!e_notification_closed_get(timer_data->n))
+               _notification_daemon_note_close(timer_data->daemon_data,
+                       timer_data->n,
+                       reason);
+       e_notification_unref(timer_data->n);
+       ecore_timer_del(timer_data->timer);
+       free(timer_data);
+       if (noti_win[orient]) {
+               evas_object_data_set(noti_win[orient], data_key, NULL);
+               evas_object_del(noti_win[orient]);
+               noti_win[orient] = NULL;
+       }
+}
+
+Eina_Bool _note_close_timer_cb(void *data)
+{
+       _note_destroy(data, E_NOTIFICATION_CLOSED_EXPIRED);
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static E_Notification *_notification_daemon_note_open_find(
+               struct Daemon_Data *daemon_data, unsigned int id)
+{
+       Eina_List *l;
+       struct Noti_Data *noti_data;
+
+       EINA_LIST_FOREACH(daemon_data->notes, l, noti_data)
+       if (e_notification_id_get(noti_data->n) == id)
+               return noti_data->n;
+
+       return NULL;
+}
+
+static void _notification_daemon_note_close_cb(E_Notification_Daemon *daemon,
+       unsigned int notification_id)
+{
+       struct Daemon_Data *daemon_data;
+       E_Notification *n;
+
+       daemon_data = e_notification_daemon_data_get(daemon);
+       n = _notification_daemon_note_open_find(daemon_data, notification_id);
+       if (n)
+               _notification_daemon_note_close(daemon_data, n,
+                       E_NOTIFICATION_CLOSED_REQUESTED);
+       /* else send error */
+}
+
+
+static void _noti_hide_cb(void *data, Evas_Object *obj,
+       const char *emission, const char *source)
+{
+       _note_destroy(data, E_NOTIFICATION_CLOSED_DISMISSED);
+}
+
+static void _noti_button_clicked_cb(void *data, Evas_Object *obj,
+       void *event_info)
+{
+       _note_destroy(data, E_NOTIFICATION_CLOSED_REQUESTED);
+}
+
+static void _noti_show(E_Notification *n, enum Noti_Orient orient,
+       struct Timer_Data *timer_data)
+{
+       const char *summary;
+       Evas_Object *layout;
+       const char *path_icon;
+       Evas_Object *icon;
+       const char *data_win_height = NULL;
+       int noti_height = 50;
+       struct Timer_Data *old_timer_data = NULL;
+       Evas_Object *button = NULL;
+
+       if (noti_win[orient]) {
+               old_timer_data = evas_object_data_get(noti_win[orient],
+                       data_key);
+               _note_destroy(old_timer_data, E_NOTIFICATION_CLOSED_REQUESTED);
+       }
+       noti_win[orient] = noti_win_add(NULL);
+       evas_object_data_set(noti_win[orient], data_key, timer_data);
+       layout = elm_layout_add(noti_win[orient]);
+       /* Only for sample code the theme implementation for layout has been
+       used. Apps should implement this layout/edje object which can have
+       at least one TEXT/TEXT BLOCK for showing body of notification and one
+       swallow part for showing icon of the notification.
+       Optionally the summary can be shown as well.
+       Applications need to set the minimum height of the layout or edje object
+       using evas_object_size_hint_min_set which can be used by the
+       notification window to resize itself.
+       */
+       if (orient == NOTI_ORIENT_BOTTOM)
+               elm_layout_theme_set(layout, "tickernoti", "base", "info");
+       else {
+                       elm_layout_theme_set(layout, "tickernoti", "base",
+                               "default");
+                       button = elm_button_add(layout);
+                       elm_object_style_set(button, "tickernoti");
+                       elm_object_text_set(button, _S("IDS_COM_BODY_CLOSE"));
+                       elm_object_part_content_set(layout, "button", button);
+                       evas_object_smart_callback_add(button, "clicked",
+                               _noti_button_clicked_cb, timer_data);
+       }
+       elm_object_signal_callback_add(layout, "request,hide", "",
+               _noti_hide_cb, timer_data);
+       /* Getting the height of the layout from theme just for sample code.
+       App is free to use any other method.
+       */
+       data_win_height = (char *)elm_layout_data_get(layout, "height");
+       if (data_win_height != NULL && elm_config_scale_get() > 0.0)
+               noti_height = (int)(elm_config_scale_get()
+                       * atoi(data_win_height));
+       evas_object_size_hint_min_set(layout, 1, noti_height);
+       noti_win_content_set(noti_win[orient], layout);
+       summary = e_notification_summary_get(n);
+       if (summary)
+               elm_object_part_text_set(layout, "elm.text", summary);
+       else
+               elm_object_part_text_set(layout, "elm.text",
+                       "new notification");
+       path_icon = e_notification_app_icon_get(n);
+       if (path_icon) {
+               INFO("%s", path_icon);
+               icon = elm_image_add(layout);
+               if (elm_image_file_set(icon, path_icon, NULL)) {
+                       elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+                       elm_object_part_content_set(layout, "icon", icon);
+               }
+       }
+       noti_win_orient_set(noti_win[orient], orient);
+       if (app_win)
+               elm_win_rotation_with_resize_set(noti_win[orient],
+                       elm_win_rotation_get(app_win));
+       evas_object_show(noti_win[orient]);
+}
+
+void _notification_daemon_note_show(struct Daemon_Data *daemon_data,
+       E_Notification *n)
+{
+       int timeout;
+       const char *category;
+       enum Noti_Orient orient = NOTI_ORIENT_TOP;
+       struct Noti_Data *noti_data;
+       time_t current;
+       char buf[256];
+       struct tm time_st;
+       struct Timer_Data *timer_data;
+
+       category = e_notification_hint_category_get(n);
+       if (category) {
+               if (!strcmp("device", category))
+                       orient = NOTI_ORIENT_BOTTOM;
+       }
+
+       noti_data = calloc(1, sizeof(struct Noti_Data));
+       if (!noti_data)
+               return;
+       e_notification_ref(n);
+       noti_data->n = n;
+       current = time(NULL);
+       localtime_r(&current, &time_st);
+       strftime(buf, sizeof(buf), "%I:%M %p", &time_st);
+       eina_stringshare_replace(&noti_data->time, buf);
+       daemon_data->notes = eina_list_append(daemon_data->notes, noti_data);
+       timeout = e_notification_timeout_get(n);
+       timer_data = calloc(1, sizeof(struct Timer_Data));
+       _noti_show(n, orient, timer_data);
+       timer_data->daemon_data = daemon_data;
+       timer_data->orient = orient;
+       e_notification_ref(n);
+       e_notification_closed_set(n, 0);
+       timer_data->n = n;
+       timer_data->timer = ecore_timer_add(timeout == -1 ?
+               daemon_data->default_timeout : (float)timeout / 1000,
+               _note_close_timer_cb, timer_data);
+
+       INFO("Received notification from %s:%s %s",
+       e_notification_app_name_get(n),
+       e_notification_summary_get(n), e_notification_body_get(n));
+}
+
+static int _notification_cb(E_Notification_Daemon *daemon, E_Notification *n)
+{
+       struct Daemon_Data *daemon_data;
+       unsigned int replaces_id;
+       unsigned int new_id;
+
+       daemon_data = e_notification_daemon_data_get(daemon);
+       replaces_id = e_notification_replaces_id_get(n);
+       if (replaces_id)
+               new_id = replaces_id;
+       else
+               new_id = daemon_data->next_id++;
+       e_notification_id_set(n, new_id);
+       _notification_daemon_note_show(daemon_data, n);
+       return new_id;
+}
+
+static Eina_Bool _init()
+{
+       Eina_Bool ret = EINA_FALSE;
+       struct Daemon_Data *daemon_data;
+
+       if (!g_notification_daemon) {
+               e_notification_daemon_init();
+               g_notification_daemon = e_notification_daemon_add("notification"
+                       , "Enlightenment");
+               if (!g_notification_daemon) {
+                       ERR("Unable to add a notification daemon");
+                       return EINA_FALSE;
+               }
+               daemon_data = calloc(1, sizeof(struct Daemon_Data));
+               if (!daemon_data) {
+                       notification_daemon_shutdown();
+                       return EINA_FALSE;
+               }
+               daemon_data->default_timeout = 1.0;
+               daemon_data->daemon = g_notification_daemon;
+               e_notification_daemon_data_set(g_notification_daemon,
+                       daemon_data);
+               e_notification_daemon_callback_notify_set(g_notification_daemon,
+                       _notification_cb);
+               e_notification_daemon_callback_close_notification_set(
+                       g_notification_daemon,
+                       _notification_daemon_note_close_cb);
+               INFO("Initializing Notification Daemon");
+       }
+       ret = !!g_notification_daemon;
+       return ret;
+}
+
+static Eina_Bool _shutdown()
+{
+       struct Daemon_Data *daemon_data;
+       Eina_List *l;
+       E_Notification *n;
+       int i;
+       struct Noti_Data *noti_data;
+       Eina_Bool ret = EINA_FALSE;
+
+       for (i = 0; i < NOTI_ORIENT_LAST; i++)
+               if (noti_win[i]) {
+                       evas_object_del(noti_win[i]);
+                       noti_win[i] = NULL;
+               }
+       if (!g_notification_daemon)
+               return ret;
+       daemon_data = e_notification_daemon_data_get(
+                       g_notification_daemon);
+       if (!daemon_data)
+               return ret;
+       EINA_LIST_FOREACH(daemon_data->notes, l, noti_data) {
+               daemon_data->notes = eina_list_remove(daemon_data->notes,
+                       noti_data);
+               n = noti_data->n;
+               eina_stringshare_replace(&noti_data->time, NULL);
+               e_notification_unref(n);
+               free(noti_data);
+       }
+       free(daemon_data);
+       e_notification_daemon_free(g_notification_daemon);
+       e_notification_daemon_shutdown();
+       g_notification_daemon = NULL;
+       ret = EINA_TRUE;
+       return ret;
+}
+
+void notification_daemon_init()
+{
+       int i;
+
+       if (!_init()) {
+               ERR("Error in intializing the notification daemon");
+               return;
+       }
+       for (i = 0; i < NOTI_ORIENT_LAST; i++)
+               if (noti_win[i]) {
+                       evas_object_del(noti_win[i]);
+                       noti_win[i] = NULL;
+               }
+}
+
+void notification_daemon_win_set(Evas_Object *win)
+{
+       /* This window is used to detect the orientation of the receiver app
+       window to support rotation of the notification window.
+       */
+       app_win = win;
+}
+
+void notification_daemon_shutdown()
+{
+       if (!_shutdown()) {
+               ERR("Error in shutting down the notification daemon");
+               return;
+       }
+       app_win = NULL;
+       INFO("Terminating Notification Daemon");
+}
diff --git a/daemon/notifications/noti_display_app.h b/daemon/notifications/noti_display_app.h
new file mode 100755 (executable)
index 0000000..652ee43
--- /dev/null
@@ -0,0 +1,28 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __NOTI_DISPLAY_APP_H__
+#define __NOTI_DISPLAY_APP_H__
+#include <Elementary.h>
+
+/* Initializes the notification daemon */
+void notification_daemon_init();
+/* Sets the window which rotation will be used to rotate the notification popup
+while displaying */
+void notification_daemon_win_set(Evas_Object *win);
+/* Terminates the notification daemon */
+void notification_daemon_shutdown();
+#endif
diff --git a/daemon/notifications/noti_gridbox.c b/daemon/notifications/noti_gridbox.c
new file mode 100755 (executable)
index 0000000..49e906c
--- /dev/null
@@ -0,0 +1,454 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Ecore_X.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "quickpanel_theme_def.h"
+#include "noti_gridbox.h"
+#include "noti_box.h"
+
+#define E_DATA_LAYOUT_PORTRAIT "layout_portrait"
+#define E_DATA_LAYOUT_LANDSCAPE "layout_landscape"
+#define E_DATA_CB_DELETE_ITEM "cb_delete_item"
+#define E_DATA_CB_REMOVED "cb_removed"
+#define E_DATA_APP_DATA "app_data"
+
+typedef struct _gridbox_info_layout {
+       int n_per_rows;
+       int padding_top;
+       int padding_left;
+       int padding_right;
+       int padding_bottom;
+       int padding_between;
+       int child_w;
+       int child_h;
+       double scale;
+} gridbox_info_layout;
+
+typedef struct _gridbox_info_animation {
+       Evas_Object *gridbox;
+       Evas_Object *item;
+
+       void (*update_cb)(Evas_Object *list, void *data, int is_prepend);
+       Evas_Object *container;
+       void *noti;
+       int pos;
+} gridbox_info_animation;
+
+static void _gridbox_layout_get_pos(int order, int *x, int *y, void *data) {
+       gridbox_info_layout *info_layout = data;
+
+       retif(data == NULL, , "invalid parameter");
+       retif(x == NULL, , "invalid parameter");
+       retif(y == NULL, , "invalid parameter");
+
+       int n_per_row = info_layout->n_per_rows;
+
+       int row = (order - 1) / n_per_row;
+       int column = (order - 1) - (row * n_per_row);
+
+       //DBG("order:%d r:%d c:%d", order, row, column);
+
+       int row_x = info_layout->padding_left
+                       + ((info_layout->child_w + info_layout->padding_between) * column);
+
+       int row_y = info_layout->padding_top
+                       + ((info_layout->child_h + info_layout->padding_between) * row);
+
+       *x = row_x;
+       *y = row_y;
+}
+
+static void _gridbox_layout(Evas_Object *o, Evas_Object_Box_Data *priv,
+               void *data) {
+       int n_children;
+       int x, y, w, h;
+       int off_x = 0, off_y = 0;
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object_Box_Option *opt;
+       int child_w, child_h;
+
+       retif(o == NULL, , "invalid parameter");
+       retif(priv == NULL, , "invalid parameter");
+       retif(data == NULL, , "invalid parameter");
+
+       gridbox_info_layout *info_layout = (gridbox_info_layout *) data;
+
+       n_children = eina_list_count(priv->children);
+       DBG("layout function:%d", n_children);
+       DBG("ref count:%p(%d)",o, evas_object_ref_get(o));
+       if (!n_children) {
+               return;
+       }
+
+       //box geometry
+       evas_object_geometry_get(o, &x, &y, &w, &h);
+
+       //set info about children
+       opt = eina_list_data_get(priv->children);
+       evas_object_size_hint_min_get(opt->obj, &child_w, &child_h);
+
+       info_layout->child_w = child_w;
+       info_layout->child_h = child_h;
+
+       DBG("grid layout children:%d %d", child_w, child_h);
+
+       int order_children = 1;
+       EINA_LIST_FOREACH_SAFE(priv->children, l, l_next, opt)
+       {
+               _gridbox_layout_get_pos(order_children, &off_x, &off_y, info_layout);
+               evas_object_move(opt->obj, x + off_x, y + off_y);
+               evas_object_resize(opt->obj, info_layout->child_w,
+                               info_layout->child_h);
+               order_children++;
+       }
+
+       evas_object_size_hint_min_set(o, -1,
+                       off_y + info_layout->child_h + info_layout->padding_bottom);
+}
+
+Evas_Object *gridbox_create(Evas_Object *parent, void *data) {
+
+       retif(parent == NULL, NULL, "invalid parameter");
+       retif(data == NULL, NULL, "invalid parameter");
+       struct appdata *ad = data;
+       Evas_Object *gridbox = NULL;
+
+       gridbox_info_layout *info_layout_portrait = NULL;
+       gridbox_info_layout *info_layout_landscape = NULL;
+
+       info_layout_portrait = (gridbox_info_layout *) malloc(
+                       sizeof(gridbox_info_layout));
+       retif(info_layout_portrait == NULL, NULL, "memory allocation failed");
+       info_layout_portrait->padding_between = 12 * ad->scale;
+       info_layout_portrait->padding_top = 0;
+       info_layout_portrait->padding_left = 14 * ad->scale;
+       info_layout_portrait->padding_bottom = 12 * ad->scale;
+       info_layout_portrait->n_per_rows = 2;
+       info_layout_portrait->child_w = 0; //340;
+       info_layout_portrait->child_h = 0; //400;
+       info_layout_portrait->scale = ad->scale;
+
+       info_layout_landscape = (gridbox_info_layout *) malloc(
+                       sizeof(gridbox_info_layout));
+       retif(info_layout_landscape == NULL, NULL, "memory allocation failed");
+       info_layout_landscape->padding_between = 12 * ad->scale;
+       info_layout_landscape->padding_top = 0;
+       info_layout_landscape->padding_left = 14 * ad->scale;
+       info_layout_landscape->padding_bottom = 12 * ad->scale;
+       info_layout_landscape->n_per_rows = 3;
+       info_layout_landscape->child_w = 0; //409;
+       info_layout_landscape->child_h = 0; //400;
+       info_layout_landscape->scale = ad->scale;
+
+       gridbox = elm_box_add(parent);
+       evas_object_size_hint_weight_set(gridbox, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(gridbox, EVAS_HINT_FILL, EVAS_HINT_FILL);
+
+       if (ad->angle == 270 || ad->angle == 90)
+               elm_box_layout_set(gridbox, _gridbox_layout, info_layout_landscape,
+                               NULL);
+       else
+               elm_box_layout_set(gridbox, _gridbox_layout, info_layout_portrait,
+                               NULL);
+
+       evas_object_ref(gridbox);
+       evas_object_show(gridbox);
+
+       evas_object_data_set(gridbox, E_DATA_LAYOUT_PORTRAIT, info_layout_portrait);
+       evas_object_data_set(gridbox, E_DATA_LAYOUT_LANDSCAPE,
+                       info_layout_landscape);
+       evas_object_data_set(gridbox, E_DATA_CB_DELETE_ITEM, NULL);
+       evas_object_data_set(gridbox, E_DATA_APP_DATA, ad);
+
+       return gridbox;
+}
+
+void gridbox_remove(Evas_Object *gridbox) {
+
+       retif(gridbox == NULL, , "invalid parameter");
+
+       gridbox_info_layout *info_layout_portrait = evas_object_data_get(gridbox,
+                       E_DATA_LAYOUT_PORTRAIT);
+       gridbox_info_layout *info_layout_landscape = evas_object_data_get(gridbox,
+                       E_DATA_LAYOUT_LANDSCAPE);
+
+       gridbox_remove_all_item(gridbox, 0);
+       evas_object_data_del(gridbox, E_DATA_LAYOUT_PORTRAIT);
+       evas_object_data_del(gridbox, E_DATA_LAYOUT_LANDSCAPE);
+       evas_object_data_del(gridbox, E_DATA_CB_DELETE_ITEM);
+       evas_object_data_del(gridbox, E_DATA_APP_DATA);
+       evas_object_unref(gridbox);
+       evas_object_del(gridbox);
+
+       if (info_layout_portrait != NULL)
+               free(info_layout_portrait);
+       if (info_layout_landscape != NULL)
+               free(info_layout_landscape);
+}
+
+void gridbox_set_item_deleted_cb(Evas_Object *gridbox,
+               void(*deleted_cb)(void *data, Evas_Object *obj)) {
+       retif(gridbox == NULL, , "invalid parameter");
+       retif(deleted_cb == NULL, , "invalid parameter");
+
+       evas_object_data_set(gridbox, E_DATA_CB_DELETE_ITEM, deleted_cb);
+}
+
+static void _gridbox_call_item_deleted_cb(Evas_Object *gridbox, void *data,
+               Evas_Object *obj) {
+       retif(gridbox == NULL, , "invalid parameter");
+
+       void (*deleted_cb)(void *data, Evas_Object *obj) = NULL;
+
+       deleted_cb = evas_object_data_get(gridbox, E_DATA_CB_DELETE_ITEM);
+
+       if (deleted_cb != NULL) {
+               deleted_cb(data, obj);
+       }
+}
+
+void gridbox_add_item(Evas_Object *gridbox, Evas_Object *item, int is_prepend) {
+       const char *signal = NULL;
+
+       retif(gridbox == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+
+       struct appdata *ad = evas_object_data_get(gridbox, E_DATA_APP_DATA);
+
+       if (ad != NULL) {
+               if (ad->angle == 270 || ad->angle == 90) {
+                       signal = "box.landscape";
+               } else {
+                       signal = "box.portrait";
+               }
+       }
+
+       DBG("set to %s, %x", signal, item);
+
+       elm_object_signal_emit(item, signal, "box.prog");
+       edje_object_message_signal_process(_EDJ(item));
+       elm_layout_sizing_eval(item);
+
+       if (is_prepend == GRIDBOX_PREPEND)
+               elm_box_pack_start(gridbox, item);
+       else
+               elm_box_pack_end(gridbox, item);
+}
+
+static void _gridbox_remove_item_anim_cb(void *data, Elm_Transit *transit) {
+       DBG("");
+       retif(data == NULL, , "invalid parameter");
+       retif(transit == NULL, , "invalid parameter");
+
+       gridbox_info_animation *info_animation = data;
+
+       retif(info_animation->gridbox == NULL, , "invalid parameter");
+       retif(info_animation->item == NULL, , "invalid parameter");
+
+       DBG("remove:%p", info_animation->item);
+
+       elm_box_unpack(info_animation->gridbox, info_animation->item);
+
+       _gridbox_call_item_deleted_cb(info_animation->gridbox,
+                       noti_box_node_get(info_animation->item), info_animation->item);
+       noti_box_remove(info_animation->item);
+
+       if (info_animation->update_cb != NULL) {
+               retif(info_animation->container == NULL, , "invalid parameter");
+               retif(info_animation->noti == NULL, , "invalid parameter");
+
+               info_animation->update_cb(info_animation->container,
+                               info_animation->noti, info_animation->pos);
+       }
+
+       free(info_animation);
+       info_animation = NULL;
+}
+
+void gridbox_remove_item(Evas_Object *gridbox, Evas_Object *item, int with_animation) {
+       DBG("remove:%p", item);
+       retif(gridbox == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+
+       if (noti_box_get_status(item) == STATE_DELETING) {
+               return ;
+       }
+       noti_box_set_status(item, STATE_DELETING);
+
+       if (with_animation == 1) {
+               gridbox_info_animation *info_animation = (gridbox_info_animation *) malloc(
+                               sizeof(gridbox_info_animation));
+               if (info_animation == NULL)
+                       return;
+               info_animation->gridbox = gridbox;
+               info_animation->item = item;
+               info_animation->update_cb = NULL;
+               info_animation->container = NULL;
+               info_animation->noti = NULL;
+               info_animation->pos = 0;
+
+               Elm_Transit *transit = elm_transit_add();
+               //Fade in and out with layout object.
+               elm_transit_object_add(transit, item);
+               elm_transit_effect_fade_add(transit);
+               elm_transit_duration_set(transit, 0.7);
+               elm_transit_del_cb_set(transit, _gridbox_remove_item_anim_cb,
+                               info_animation);
+               elm_transit_go(transit);
+       } else {
+               _gridbox_call_item_deleted_cb(gridbox,
+                               noti_box_node_get(item), item);
+               elm_box_unpack(gridbox, item);
+               noti_box_remove(item);
+       }
+}
+
+void gridbox_remove_all_item(Evas_Object *gridbox, int with_animation) {
+       DBG("");
+       retif(gridbox == NULL, , "invalid parameter");
+
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj;
+       Eina_List *item_list = elm_box_children_get(gridbox);
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj)
+       {
+               if (obj != NULL) {
+                       // call deleted callback
+                       gridbox_remove_item(gridbox, obj, with_animation);
+               }
+       }
+}
+
+void gridbox_update_item(Evas_Object *gridbox, Evas_Object *item) {
+
+       retif(gridbox == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+}
+
+void gridbox_remove_and_add_item(Evas_Object *gridbox, Evas_Object *item
+               ,void (*update_cb)(Evas_Object *list, void *data, int is_prepend)
+               ,void *container, void *data, int pos) {
+
+       retif(gridbox == NULL, , "invalid parameter");
+       retif(item == NULL, , "invalid parameter");
+       retif(update_cb == NULL, , "invalid parameter");
+       retif(container == NULL, , "invalid parameter");
+       retif(data == NULL, , "invalid parameter");
+
+       if (noti_box_get_status(item) == STATE_DELETING) {
+               return ;
+       }
+       noti_box_set_status(item, STATE_DELETING);
+
+       gridbox_info_animation *info_animation = (gridbox_info_animation *) malloc(
+                       sizeof(gridbox_info_animation));
+       if (info_animation == NULL)
+               return;
+       info_animation->gridbox = gridbox;
+       info_animation->item = item;
+       info_animation->update_cb = update_cb;
+       info_animation->container = container;
+       info_animation->noti = data;
+       info_animation->pos = pos;
+
+       Elm_Transit *transit = elm_transit_add();
+       //Fade in and out with layout object.
+       elm_transit_object_add(transit, item);
+       elm_transit_effect_fade_add(transit);
+       elm_transit_duration_set(transit, 0.4);
+       elm_transit_del_cb_set(transit, _gridbox_remove_item_anim_cb,
+                       info_animation);
+       elm_transit_go(transit);
+}
+
+void gridbox_finalize_rotation_cb(void *data) {
+       retif(data == NULL, , "invalid parameter");
+       Evas_Object *gridbox = data;
+
+       elm_box_recalculate(gridbox);
+}
+
+void gridbox_rotation(Evas_Object *gridbox, int angle) {
+       const char *signal = NULL;
+
+       retif(gridbox == NULL, , "invalid parameter");
+
+       gridbox_info_layout *info_layout_portrait = evas_object_data_get(gridbox,
+                       E_DATA_LAYOUT_PORTRAIT);
+       gridbox_info_layout *info_layout_landscape = evas_object_data_get(gridbox,
+                       E_DATA_LAYOUT_LANDSCAPE);
+
+       retif(info_layout_portrait == NULL || info_layout_landscape == NULL, ,
+                       "gridbox is crashed");
+
+       Eina_List *l;
+       Eina_List *l_next;
+       Evas_Object *obj;
+       Eina_List *item_list = elm_box_children_get(gridbox);
+
+       if (angle == 270 || angle == 90) {
+               signal = "box.landscape";
+       } else {
+               signal = "box.portrait";
+       }
+
+       DBG("all count:%d", eina_list_count (item_list));
+
+       EINA_LIST_FOREACH_SAFE(item_list, l, l_next, obj)
+       {
+               if (obj != NULL) {
+                       elm_object_signal_emit(obj, signal, "box.prog");
+                       edje_object_message_signal_process(_EDJ(obj));
+                       elm_layout_sizing_eval(obj);
+                       DBG("set to %s, %x", signal, obj);
+               }
+       }
+
+       if (angle == 270 || angle == 90) {
+               elm_box_layout_set(gridbox, _gridbox_layout, info_layout_landscape,
+                               NULL);
+
+#if 0
+               layout_data = elm_box_transition_new(0.0, _gridbox_layout,
+                               info_layout_portrait, NULL, _gridbox_layout,
+                               info_layout_landscape, NULL, gridbox_finalize_rotation_cb,
+                               gridbox);
+#endif
+       } else {
+               elm_box_layout_set(gridbox, _gridbox_layout, info_layout_portrait,
+                               NULL);
+#if 0
+               layout_data = elm_box_transition_new(0.0, _gridbox_layout,
+                               info_layout_landscape, NULL, _gridbox_layout,
+                               info_layout_portrait, NULL, gridbox_finalize_rotation_cb,
+                               gridbox);
+#endif
+       }
+
+#if 0
+       elm_box_layout_set(gridbox, elm_box_layout_transition, layout_data,
+                       elm_box_transition_free);
+#endif
+       DBG("Angle  Rotation  is %d", angle);
+}
diff --git a/daemon/notifications/noti_gridbox.h b/daemon/notifications/noti_gridbox.h
new file mode 100755 (executable)
index 0000000..03b2eb4
--- /dev/null
@@ -0,0 +1,34 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QUICKPANEL_GRIDBOX_H__
+#define __QUICKPANEL_GRIDBOX_H__
+
+#define GRIDBOX_PREPEND 1
+#define GRIDBOX_APPEND 0
+
+Evas_Object *gridbox_create(Evas_Object *parent, void *data);
+void gridbox_remove(Evas_Object *gridbox);
+void gridbox_add_item(Evas_Object *gridbox, Evas_Object *item, int is_prepend);
+void gridbox_remove_item(Evas_Object *gridbox, Evas_Object *item, int with_animation);
+void gridbox_rotation(Evas_Object *gridbox, int angle);
+void gridbox_remove_and_add_item(Evas_Object *gridbox, Evas_Object *item
+               ,void (*update_cb)(Evas_Object *list, void *data, int is_prepend)
+               ,void *container, void *data, int pos);
+void gridbox_remove_all_item(Evas_Object *gridbox, int with_animation);
+void gridbox_set_item_deleted_cb(Evas_Object *gridbox,
+               void(*deleted_cb)(void *data, Evas_Object *obj));
+#endif
diff --git a/daemon/notifications/noti_node.c b/daemon/notifications/noti_node.c
new file mode 100755 (executable)
index 0000000..440af1b
--- /dev/null
@@ -0,0 +1,146 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 "quickpanel-ui.h"
+#include "common.h"
+#include "list_util.h"
+#include "noti_node.h"
+
+static void _noti_node_free(noti_node_item *node);
+
+void noti_node_create(noti_node **handle)
+{
+       retif(handle == NULL, , "Invalid parameter!");
+
+       *handle = (noti_node *)malloc(sizeof(noti_node));
+
+       if (*handle != NULL) {
+               (*handle)->table = g_hash_table_new_full(g_direct_hash, g_direct_equal,
+                                                       NULL,
+                                                       (GDestroyNotify)_noti_node_free);
+
+               (*handle)->n_ongoing = 0;
+               (*handle)->n_noti = 0;
+       } else {
+               *handle = NULL;
+       }
+}
+
+void noti_node_destroy(noti_node **handle)
+{
+       retif(handle == NULL, , "Invalid parameter!");
+       retif(*handle == NULL, , "Invalid parameter!");
+
+       g_hash_table_remove_all((*handle)->table);
+       g_hash_table_destroy((*handle)->table);
+       (*handle)->table = NULL;
+
+       free((*handle));
+       *handle = NULL;
+}
+
+noti_node_item *noti_node_add(noti_node *handle, notification_h noti, void *view)
+{
+       int priv_id = 0;
+       notification_type_e noti_type = NOTIFICATION_TYPE_NONE;
+       noti_node_item *node = NULL;
+
+       retif(handle == NULL || noti == NULL, NULL, "Invalid parameter!");
+
+       if (notification_get_id(noti, NULL, &priv_id) == NOTIFICATION_ERROR_NONE) {
+               node = malloc(sizeof(noti_node_item));
+               if (!node) {
+                       ERR("fail to alloc item");
+                       return NULL;
+               }
+
+               node->noti = noti;
+               node->view = view;
+
+               g_hash_table_insert(handle->table, GINT_TO_POINTER(priv_id), (gpointer *)node);
+
+               notification_get_type(noti, &noti_type);
+
+               if (noti_type == NOTIFICATION_TYPE_NOTI)
+                       handle->n_noti++;
+               else if (noti_type == NOTIFICATION_TYPE_ONGOING)
+                       handle->n_ongoing++;
+
+               return node;
+       }
+
+       return NULL;
+}
+
+void noti_node_remove(noti_node *handle, int priv_id)
+{
+       notification_type_e noti_type = NOTIFICATION_TYPE_NONE;
+
+       retif(handle == NULL, , "Invalid parameter!");
+       retif(handle->table == NULL, , "Invalid parameter!");
+
+       noti_node_item *item = noti_node_get(handle, priv_id);
+
+       if (item != NULL) {
+               if (item->noti != NULL) {
+                       notification_get_type(item->noti, &noti_type);
+
+                       if (noti_type == NOTIFICATION_TYPE_NOTI)
+                               handle->n_noti--;
+                       else if (noti_type == NOTIFICATION_TYPE_ONGOING)
+                               handle->n_ongoing--;
+               }
+
+               notification_free(item->noti);
+               item->noti = NULL;
+               item->view = NULL;
+
+               if (g_hash_table_remove(handle->table, GINT_TO_POINTER(priv_id)))
+               {
+                       INFO("success to remove %d", priv_id);
+               }
+       }
+}
+
+noti_node_item *noti_node_get(noti_node *handle, int priv_id)
+{
+       retif(handle == NULL, NULL, "Invalid parameter!");
+       retif(handle->table == NULL, NULL, "Invalid parameter!");
+
+       return (noti_node_item *)g_hash_table_lookup
+                       (handle->table, GINT_TO_POINTER(priv_id));
+}
+
+int noti_node_get_item_count(noti_node *handle, notification_type_e noti_type)
+{
+       retif(handle == NULL, 0, "Invalid parameter!");
+
+       if (noti_type == NOTIFICATION_TYPE_NOTI)
+               return handle->n_noti;
+       else if (noti_type == NOTIFICATION_TYPE_ONGOING)
+               return handle->n_ongoing;
+
+       return 0;
+}
+
+static void _noti_node_free(noti_node_item *node)
+{
+       retif(node == NULL, , "Invalid parameter!");
+
+       DBG("item_node is freed:%p", node);
+
+       free(node);
+}
diff --git a/daemon/notifications/noti_node.h b/daemon/notifications/noti_node.h
new file mode 100755 (executable)
index 0000000..00debbc
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QUICKPANEL_NOTI_NODE_H__
+#define __QUICKPANEL_NOTI_NODE_H__
+
+#include <glib.h>
+#include <notification.h>
+
+typedef struct _noti_node {
+       GHashTable *table;
+       int n_ongoing;
+       int n_noti;
+} noti_node;
+
+typedef struct _noti_node_item {
+       notification_h noti;
+       void *view;
+} noti_node_item;
+
+void noti_node_create(noti_node **handle);
+void noti_node_destroy(noti_node **handle);
+noti_node_item *noti_node_add(noti_node *handle, notification_h noti, void *view);
+void noti_node_remove(noti_node *handle, int priv_id);
+noti_node_item *noti_node_get(noti_node *handle, int priv_id);
+int noti_node_get_item_count(noti_node *handle, notification_type_e noti_type);
+
+#endif
diff --git a/daemon/notifications/noti_win.c b/daemon/notifications/noti_win.c
new file mode 100755 (executable)
index 0000000..fa8330f
--- /dev/null
@@ -0,0 +1,314 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Elementary.h>
+#include <utilX.h>
+
+#define NOTI_HEIGHT 50
+#ifndef __UNUSED__
+#define __UNUSED__ __attribute__((unused))
+#endif
+/* Using this macro to emphasize that some portion like stacking and
+rotation handling are implemented for X based platform
+*/
+
+#ifdef HAVE_X
+#include <Ecore_X.h>
+#endif
+#include "common.h"
+#include "noti_win.h"
+
+struct Internal_Data {
+       Evas_Object *content;
+       Ecore_Event_Handler *rotation_event_handler;
+       Evas_Coord w;
+       Evas_Coord h;
+       int angle;
+       enum Noti_Orient orient;
+};
+
+static const char *data_key = "_data";
+
+static void _set_win_type_notification_level(Evas_Object *win)
+{
+       retif(win == NULL, , "invalid parameter");
+
+       Ecore_X_Window w = elm_win_xwindow_get(win);
+
+       if (w > 0) {
+               ecore_x_icccm_hints_set(w, 0, ECORE_X_WINDOW_STATE_HINT_NONE, 0, 0,
+                       0, 0, 0);
+               ecore_x_netwm_opacity_set(w, 0);
+
+               ecore_x_netwm_window_type_set(w,
+                               ECORE_X_WINDOW_TYPE_NOTIFICATION);
+               utilx_set_system_notification_level(ecore_x_display_get(), w,
+                               UTILX_NOTIFICATION_LEVEL_HIGH);
+       }
+}
+
+static void _show(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj,
+       void *event_info __UNUSED__)
+{
+       struct Internal_Data *wd = evas_object_data_get(obj, data_key);
+
+       if (!wd)
+               return;
+       if (wd->content)
+               evas_object_show(wd->content);
+}
+
+static void _content_hide(void *data, Evas *e __UNUSED__,
+       Evas_Object *obj __UNUSED__, void *event_info __UNUSED__)
+{
+       evas_object_hide(data);
+}
+
+static void _content_changed_size_hints(void *data, Evas *e __UNUSED__,
+       Evas_Object *obj, void *event_info __UNUSED__)
+{
+       Evas_Coord h;
+       struct Internal_Data *wd = evas_object_data_get(data, data_key);
+
+       if (!wd)
+               return;
+
+       evas_object_size_hint_min_get(obj, NULL, &h);
+       if ((h > 0)) {
+               wd->h = h;
+               evas_object_size_hint_min_set(obj, wd->w, wd->h);
+               evas_object_size_hint_min_set(data, wd->w, wd->h);
+               evas_object_resize(data, wd->w, wd->h);
+       }
+}
+
+static void _sub_del(void *data __UNUSED__, Evas_Object *obj, void *event_info)
+{
+       struct Internal_Data *wd = evas_object_data_get(obj, data_key);
+       Evas_Object *sub = event_info;
+
+       if (!wd)
+               return;
+       if (sub == wd->content) {
+               evas_object_event_callback_del(wd->content, EVAS_CALLBACK_HIDE,
+                       _content_hide);
+               evas_object_event_callback_del(wd->content,
+                       EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                       _content_changed_size_hints);
+               wd->content = NULL;
+       }
+}
+
+static void _del(void *data __UNUSED__, Evas *e __UNUSED__, Evas_Object *obj,
+       void *event_info __UNUSED__)
+{
+       struct Internal_Data *wd = evas_object_data_get(obj, data_key);
+
+       if (!wd)
+               return;
+       if (wd->rotation_event_handler)
+               ecore_event_handler_del(wd->rotation_event_handler);
+       evas_object_data_set(data, data_key, NULL);
+       free(wd);
+}
+
+#ifdef HAVE_X
+static void _update_geometry_on_rotation(Evas_Object *obj, int angle,
+               int *x, int *y, int *w)
+{
+       Evas_Coord root_w, root_h;
+       struct Internal_Data *wd = evas_object_data_get(obj, data_key);
+
+       if (!wd)
+               return;
+
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &root_w,
+               &root_h);
+
+       /* rotate window */
+       switch (angle) {
+       case 90:
+               *w = root_h;
+               if (wd->orient == NOTI_ORIENT_BOTTOM)
+                       *x = root_w - wd->h;
+               break;
+       case 270:
+               *w = root_h;
+               if (!(wd->orient == NOTI_ORIENT_BOTTOM))
+                       *x = root_w - wd->h;
+               break;
+       case 180:
+               *w = root_w;
+               if (!wd->orient == NOTI_ORIENT_BOTTOM)
+                       *y = root_h - wd->h;
+               break;
+       case 0:
+       default:
+               *w = root_w;
+               if (wd->orient == NOTI_ORIENT_BOTTOM)
+                       *y = root_h - wd->h;
+               break;
+       }
+}
+
+static void _win_rotated(Evas_Object *obj)
+{
+       int x = 0;
+       int y = 0;
+       int w = 0;
+       int angle = 0;
+       struct Internal_Data *wd =  evas_object_data_get(obj, data_key);
+
+       if (!wd)
+               return;
+       angle = elm_win_rotation_get(obj);
+       if (angle % 90)
+               return;
+       angle %= 360;
+       if (angle < 0)
+               angle += 360;
+       wd->angle = angle;
+
+       _update_geometry_on_rotation(obj, wd->angle, &x, &y, &w);
+
+       evas_object_move(obj, x, y);
+       wd->w = w;
+       evas_object_resize(obj, wd->w, wd->h);
+}
+
+static Eina_Bool _prop_change(void *data, int type __UNUSED__, void *event)
+{
+       Ecore_X_Event_Window_Property *ev;
+       struct Internal_Data *wd = evas_object_data_get(data, data_key);
+
+       if (!wd)
+               return ECORE_CALLBACK_PASS_ON;
+       ev = event;
+       if (ev->atom == ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE)
+               if (ev->win == elm_win_xwindow_get(data))
+                       _win_rotated(data);
+       return ECORE_CALLBACK_PASS_ON;
+}
+#endif
+
+Evas_Object *noti_win_add(Evas_Object *parent)
+{
+       Evas_Object *win;
+       Evas_Object *bg;
+       struct Internal_Data *wd;
+       Evas_Coord w = 0;
+
+       win = elm_win_add(parent, "noti_win", ELM_WIN_NOTIFICATION);
+       elm_win_alpha_set(win, EINA_TRUE);
+
+       if (!win)
+               return NULL;
+       elm_win_title_set(win, "noti_win");
+       elm_win_borderless_set(win, EINA_TRUE);
+       elm_win_autodel_set(win, EINA_TRUE);
+       evas_object_size_hint_weight_set(win, EVAS_HINT_EXPAND,
+               EVAS_HINT_EXPAND);
+       evas_object_size_hint_align_set(win, EVAS_HINT_FILL, EVAS_HINT_FILL);
+       bg = elm_bg_add(win);
+       evas_object_size_hint_weight_set(bg, EVAS_HINT_EXPAND,
+               EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(win, bg);
+       evas_object_show(bg);
+
+       _set_win_type_notification_level(win);
+
+       wd = (struct Internal_Data *) calloc(1, sizeof(struct Internal_Data));
+       if (!wd)
+               return NULL;
+       evas_object_data_set(win, data_key, wd);
+       wd->angle = 0;
+       wd->orient = NOTI_ORIENT_TOP;
+       evas_object_move(win, 0, 0);
+#ifdef HAVE_X
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, NULL);
+       evas_object_resize(win, w, NOTI_HEIGHT);
+       wd->rotation_event_handler = ecore_event_handler_add(
+               ECORE_X_EVENT_WINDOW_PROPERTY, _prop_change, win);
+#endif
+       wd->w = w;
+       wd->h = NOTI_HEIGHT;
+       evas_object_smart_callback_add(win, "sub-object-del", _sub_del, NULL);
+       evas_object_event_callback_add(win, EVAS_CALLBACK_SHOW, _show, NULL);
+       evas_object_event_callback_add(win, EVAS_CALLBACK_DEL, _del, NULL);
+       return win;
+}
+
+void noti_win_content_set(Evas_Object *obj, Evas_Object *content)
+{
+       Evas_Coord h;
+       struct Internal_Data *wd;
+
+       if (!obj)
+               return;
+       wd = evas_object_data_get(obj, data_key);
+       if (!wd)
+               return;
+       if (wd->content)
+               evas_object_del(content);
+       wd->content = content;
+       if (content) {
+               evas_object_size_hint_weight_set(wd->content, EVAS_HINT_EXPAND,
+                       EVAS_HINT_EXPAND);
+               elm_win_resize_object_add(obj, wd->content);
+               evas_object_size_hint_min_get(wd->content, NULL, &h);
+               if (h)
+                       wd->h = h;
+               evas_object_size_hint_min_set(wd->content, wd->w, wd->h);
+               evas_object_resize(obj, wd->w, wd->h);
+               evas_object_event_callback_add(wd->content, EVAS_CALLBACK_HIDE,
+                               _content_hide, obj);
+               evas_object_event_callback_add(wd->content,
+                               EVAS_CALLBACK_CHANGED_SIZE_HINTS,
+                               _content_changed_size_hints, obj);
+       }
+}
+
+void noti_win_orient_set(Evas_Object *obj, enum Noti_Orient orient)
+{
+#ifdef HAVE_X
+       Evas_Coord root_w, root_h;
+#endif
+       struct Internal_Data *wd = evas_object_data_get(obj, data_key);
+
+       if (!wd)
+               return;
+       if (orient >= NOTI_ORIENT_LAST)
+               return;
+#ifdef HAVE_X
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &root_w,
+               &root_h);
+#endif
+       switch (orient) {
+       case NOTI_ORIENT_BOTTOM:
+#ifdef HAVE_X
+               evas_object_move(obj, 0, root_h - wd->h);
+#endif
+               wd->orient = NOTI_ORIENT_BOTTOM;
+               break;
+       case NOTI_ORIENT_TOP:
+       default:
+#ifdef HAVE_X
+               evas_object_move(obj, 0, 0);
+#endif
+               wd->orient = NOTI_ORIENT_TOP;
+               break;
+       }
+}
diff --git a/daemon/notifications/noti_win.h b/daemon/notifications/noti_win.h
new file mode 100755 (executable)
index 0000000..951ac06
--- /dev/null
@@ -0,0 +1,41 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __NOTI_WIN_H__
+#define __NOTI_WIN_H__
+#include <Evas.h>
+
+enum Noti_Orient {
+       NOTI_ORIENT_TOP = 0,
+       NOTI_ORIENT_BOTTOM,
+       NOTI_ORIENT_LAST
+       } ;
+
+/* Creates and return a new window (of widget type elm_win) of width equal to
+root window
+*/
+Evas_Object *noti_win_add(Evas_Object *parent);
+
+/* Sets an Evas Object as content of the notification window created using
+noti_win_add
+*/
+void noti_win_content_set(Evas_Object *obj, Evas_Object *content);
+
+/* Sets the orientation of the notification window, this can be of type
+Noti_Orient
+*/
+void noti_win_orient_set(Evas_Object *obj, enum Noti_Orient orient);
+#endif
diff --git a/daemon/notifications/status_msg.c b/daemon/notifications/status_msg.c
new file mode 100755 (executable)
index 0000000..898d7e4
--- /dev/null
@@ -0,0 +1,315 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <vconf.h>
+#include <notification.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "noti_win.h"
+
+#define QP_STATUS_DURATION     3
+#define QP_STATUS_DETAIL_DURATION 6
+
+#define STATUS_MSG_LEN                         1024
+#define DEFAULT_ICON ICONDIR           "/quickpanel_icon_default.png"
+
+#define E_DATA_STATUS_DETAIL "detail"
+
+static Evas_Object *g_status_win;
+static Ecore_Timer *g_status_timer;
+static int g_noti_height;
+
+static int quickpanel_status_init(void *data);
+static int quickpanel_status_fini(void *data);
+static void quickpanel_status_reflesh(void *data);
+
+QP_Module ticker_status = {
+       .name = "ticker_status",
+       .init = quickpanel_status_init,
+       .fini = quickpanel_status_fini,
+       .hib_enter = NULL,
+       .hib_leave = NULL,
+       .lang_changed = NULL,
+       .refresh = quickpanel_status_reflesh
+};
+
+/*****************************************************************************
+ *
+ * (Static) Util functions
+ *
+ *****************************************************************************/
+static void _quickpanel_status_hide(void *data)
+{
+       if (g_status_win) {
+               evas_object_hide(g_status_win);
+               evas_object_del(g_status_win);
+               g_status_win = NULL;
+       }
+}
+
+static void _quickpanel_status_set_text(Evas_Object *detail, const char *message) {
+       retif(detail == NULL, , "Invalid parameter!");
+       retif(message == NULL, , "Invalid parameter!");
+
+       elm_object_part_text_set(detail, "elm.text", message);
+}
+
+static Eina_Bool _quickpanel_status_timeout_cb(void *data)
+{
+       DBG("");
+
+       g_status_timer = NULL;
+
+       _quickpanel_status_hide(data);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _quickpanel_status_detail_hide_cb(void *data, Evas *e,
+                                       Evas_Object *obj,
+                                       void *event_info)
+{
+       if (g_status_timer) {
+               ecore_timer_del(g_status_timer);
+               g_status_timer = NULL;
+       }
+}
+
+static void _quickpanel_status_detail_show_cb(void *data, Evas *e,
+                                       Evas_Object *obj,
+                                       void *event_info)
+{
+       DBG("");
+}
+
+static void _quickpanel_status_clicked_cb(void *data, Evas_Object *obj,
+                                       void *event_info)
+{
+       _quickpanel_status_hide(data);
+}
+
+static void _noti_hide_cb(void *data, Evas_Object *obj,
+                       const char *emission, const char *source)
+{
+       DBG("");
+
+       if (g_status_timer) {
+               ecore_timer_del(g_status_timer);
+               g_status_timer = NULL;
+       }
+}
+
+static Evas_Object *_quickpanel_status_create_status_noti(const char *message, void *data)
+{
+       Evas_Object *status_noti = NULL;
+       Evas_Object *detail = NULL;
+       const char *data_win_height = NULL;
+       int noti_height = 0;
+
+       retif(message == NULL, NULL, "Invalid parameter!");
+
+       status_noti = noti_win_add(NULL);
+       retif(status_noti == NULL, NULL, "Failed to add elm status_noti.");
+
+       detail = elm_layout_add(status_noti);
+       if (!detail) {
+               ERR("Failed to get detailview.");
+               evas_object_del(status_noti);
+               return NULL;
+       }
+       elm_layout_theme_set(detail, "tickernoti", "base", "textonly");
+       elm_object_signal_callback_add(detail, "request,hide", "",
+                               _noti_hide_cb, NULL);
+
+       data_win_height = (char *)elm_layout_data_get(detail, "height");
+       if (data_win_height != NULL && elm_config_scale_get() > 0.0)
+               noti_height = (int)(elm_config_scale_get()
+                                       * atoi(data_win_height));
+       evas_object_size_hint_min_set(detail, 1, noti_height);
+       g_noti_height = noti_height;
+       DBG("height:%d", g_noti_height);
+
+       noti_win_content_set(status_noti, detail);
+
+       _quickpanel_status_set_text(detail, message);
+       /* Use style "default" for detailview mode and
+        * "info" for text only mode
+        */
+       elm_object_style_set(status_noti, "textonly");
+       evas_object_data_set(status_noti, E_DATA_STATUS_DETAIL, detail);
+
+       return status_noti;
+}
+
+static int _quickpanel_status_get_angle(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Ecore_X_Window xwin, root;
+       int ret = 0, angle = 0, count = 0;
+       unsigned char *prop_data = NULL;
+
+       xwin = elm_win_xwindow_get(ad->win);
+       root = ecore_x_window_root_get(xwin);
+
+       ret = ecore_x_window_prop_property_get(root,
+                               ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE,
+                               ECORE_X_ATOM_CARDINAL, 32,
+                               &prop_data, &count);
+
+       if (ret && prop_data) {
+               memcpy(&angle, prop_data, sizeof(int));
+
+               if (prop_data)
+                       free(prop_data);
+
+               return angle;
+       } else {
+               ERR("Fail to get angle");
+               if (prop_data)
+                       free(prop_data);
+
+               return -1;
+       }
+}
+
+static void _quickpanel_status_update_geometry_on_rotation(void *data, int *x, int *y, int *w, int *h) {
+       int angle = 0;
+
+       if (!data)
+               return;
+
+       angle = _quickpanel_status_get_angle(data);
+       Evas_Coord root_w, root_h;
+
+       /*
+        * manually calculate win_status_noti_indi window position & size
+        *  - win_indi is not full size window
+        */
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &root_w, &root_h);
+
+       // rotate win
+       switch(angle)
+       {
+               case 90:
+                       *w = g_noti_height;
+                       *h = root_h;
+                       break;
+               case 270:
+                       *w = g_noti_height;
+                       *h = root_h;
+                       *x = root_w - g_noti_height;
+                       break;
+               case 180:
+                       *w = root_w;
+                       *h = g_noti_height;
+                       *y = root_h - g_noti_height;
+                       break;
+               case 0:
+               default:
+                       *w = root_w;
+                       *h = g_noti_height;
+                       break;
+       }
+       elm_win_rotation_set(g_status_win, angle);
+}
+
+static void _quickpanel_status_win_rotated(void *data) {
+       retif(data == NULL, ,"data is NULL");
+
+       struct appdata *ad = data;
+       int x = 0, y = 0, w = 0, h = 0;
+
+       _quickpanel_status_update_geometry_on_rotation(ad, &x, &y, &w, &h);
+
+       if (g_status_win != NULL) {
+               evas_object_move(g_status_win, x, y);
+               evas_object_resize(g_status_win, w, h);
+       }
+}
+
+static void _quickpanel_status_cb(const char *message, void *data)
+{
+       DBG("");
+       retif(message == NULL, ,"message is NULL");
+       retif(data == NULL, ,"data is NULL");
+
+       if (g_status_timer)
+               ecore_timer_del(g_status_timer);
+
+       /* Skip if previous status is still shown */
+       if (g_status_win != NULL) {
+               Evas_Object *detail = evas_object_data_get(g_status_win, E_DATA_STATUS_DETAIL);
+               _quickpanel_status_set_text(detail, message);
+               elm_win_activate(g_status_win);
+       } else {
+               g_status_win = _quickpanel_status_create_status_noti(message, data);
+               if (g_status_win == NULL) {
+                       ERR("Fail to create status_noti");
+                       return;
+               }
+
+               _quickpanel_status_win_rotated(data);
+               evas_object_show(g_status_win);
+
+               evas_object_event_callback_add(g_status_win, EVAS_CALLBACK_SHOW,
+                                       _quickpanel_status_detail_show_cb,
+                                       g_status_win);
+               evas_object_event_callback_add(g_status_win, EVAS_CALLBACK_HIDE,
+                                       _quickpanel_status_detail_hide_cb,
+                                       g_status_win);
+               evas_object_smart_callback_add(g_status_win, "clicked",
+                                       _quickpanel_status_clicked_cb,
+                                       g_status_win);
+       }
+
+       g_status_timer = ecore_timer_add(QP_STATUS_DURATION,
+                       _quickpanel_status_timeout_cb, NULL);
+}
+
+/*****************************************************************************
+ *
+ * Util functions
+ *
+ *****************************************************************************/
+static int quickpanel_status_init(void *data)
+{
+       int ret = QP_OK;
+
+       ret = notification_status_monitor_message_cb_set(_quickpanel_status_cb, data);
+
+       return ret;
+}
+
+static int quickpanel_status_fini(void *data)
+{
+       int ret = 0;
+       _quickpanel_status_hide(NULL);
+
+       ret = notification_status_monitor_message_cb_unset();
+
+       return ret;
+}
+
+static void quickpanel_status_reflesh(void *data)
+{
+       retif(data == NULL, , "Invalid parameter!");
+
+       if (g_status_win != NULL) {
+               _quickpanel_status_win_rotated(data);
+       }
+}
diff --git a/daemon/notifications/ticker.c b/daemon/notifications/ticker.c
new file mode 100755 (executable)
index 0000000..60952df
--- /dev/null
@@ -0,0 +1,726 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an "AS IS" BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+#include <Elementary.h>
+#include <Ecore_X.h>
+#include <appcore-common.h>
+#include <vconf.h>
+#include <appsvc.h>
+#include <app_service.h>
+#include <notification.h>
+#include <time.h>
+#include <feedback.h>
+
+#include "quickpanel-ui.h"
+#include "common.h"
+#include "noti_win.h"
+
+#define QP_TICKER_DURATION     5
+#define QP_TICKER_DETAIL_DURATION 6
+
+#define TICKER_MSG_LEN                         1024
+#define DEFAULT_ICON ICONDIR           "/quickpanel_icon_default.png"
+
+static Evas_Object *g_window;
+static Evas_Object *g_ticker;
+static Ecore_Timer *g_timer;
+static int g_noti_height;
+
+static int quickpanel_ticker_init(void *data);
+static int quickpanel_ticker_fini(void *data);
+static int quickpanel_ticker_enter_hib(void *data);
+static int quickpanel_ticker_leave_hib(void *data);
+static void quickpanel_ticker_reflesh(void *data);
+
+QP_Module ticker = {
+       .name = "ticker",
+       .init = quickpanel_ticker_init,
+       .fini = quickpanel_ticker_fini,
+       .hib_enter = quickpanel_ticker_enter_hib,
+       .hib_leave = quickpanel_ticker_leave_hib,
+       .lang_changed = NULL,
+       .refresh = quickpanel_ticker_reflesh
+};
+
+static int latest_inserted_time;
+
+/*****************************************************************************
+ *
+ * (Static) Util functions
+ *
+ *****************************************************************************/
+
+static int _quickpanel_ticker_check_ticker_off(notification_h noti)
+{
+       char *pkgname = NULL;
+       int ret = 0;
+       int boolval = 0;
+
+       notification_get_application(noti, &pkgname);
+
+       if (pkgname == NULL)
+               notification_get_pkgname(noti, &pkgname);
+
+       if (pkgname == NULL)
+               return 1;       /* Ticker is not displaying. */
+
+       if (!strcmp(pkgname, VENDOR".message")) {
+               ret = vconf_get_bool(
+                       VCONFKEY_SETAPPL_STATE_TICKER_NOTI_MESSAGES_BOOL,
+                       &boolval);
+               if (ret == 0 && boolval == 0)
+                       return 1;
+       } else if (!strcmp(pkgname, VENDOR".email")) {
+               ret = vconf_get_bool(
+                       VCONFKEY_SETAPPL_STATE_TICKER_NOTI_EMAIL_BOOL,
+                       &boolval);
+               if (ret == 0 && boolval == 0)
+                       return 1;
+       } else if (!strcmp(pkgname, VENDOR".ims-syspopup")) {
+               ret = vconf_get_bool(
+                               VCONFKEY_SETAPPL_STATE_TICKER_NOTI_IM_BOOL,
+                       &boolval);
+               if (ret == 0 && boolval == 0)
+                       return 1;
+       }
+
+       /* Displaying ticker! */
+       return 0;
+}
+
+static int _quickpanel_ticker_check_displaying_contents_off(notification_h noti)
+{
+       char *pkgname = NULL;
+       int ret = 0;
+       int boolval = 0;
+
+       notification_get_application(noti, &pkgname);
+
+       if (pkgname == NULL)
+               notification_get_pkgname(noti, &pkgname);
+
+       if (pkgname == NULL)
+               return 0;       /* Ticker is not displaying. */
+
+       if (!strcmp(pkgname, VENDOR".message")) {
+               ret = vconf_get_bool(
+                       VCONFKEY_TICKER_NOTI_DISPLAY_CONTENT_MESSASGES,
+                       &boolval);
+               if (ret == 0 && boolval == 0)
+                       return 1;
+       } else if (!strcmp(pkgname, VENDOR".email")) {
+               ret = vconf_get_bool(
+                       VCONFKEY_TICKER_NOTI_DISPLAY_CONTENT_EMAIL,
+                       &boolval);
+               if (ret == 0 && boolval == 0)
+                       return 1;
+       } else if (!strcmp(pkgname, VENDOR".ims-syspopup")) {
+               ret = vconf_get_bool(
+                       VCONFKEY_TICKER_NOTI_DISPLAY_CONTENT_IM,
+                       &boolval);
+               if (ret == 0 && boolval == 0)
+                       return 1;
+       }
+
+       /* Displaying ticker! */
+       return 0;
+}
+
+static inline void __ticker_only_noti_del(notification_h noti)
+{
+       int applist = NOTIFICATION_DISPLAY_APP_ALL;
+
+       retif(noti == NULL, ,"noti is null");
+
+       notification_get_display_applist(noti, &applist);
+       if (applist & NOTIFICATION_DISPLAY_APP_TICKER) {
+               if (!(applist & NOTIFICATION_DISPLAY_APP_NOTIFICATION_TRAY)) {
+                       char *pkgname = NULL;
+                       int priv_id = 0;
+
+                       notification_get_pkgname(noti, &pkgname);
+                       notification_get_id(noti, NULL, &priv_id);
+                       notification_delete_by_priv_id(pkgname,
+                                               NOTIFICATION_TYPE_NONE,
+                                               priv_id);
+               }
+       }
+}
+
+static void _quickpanel_ticker_hide(void *data)
+{
+       if (g_ticker) {
+               evas_object_hide(g_ticker);
+               evas_object_del(g_ticker);
+               g_ticker = NULL;
+       }
+}
+
+static Eina_Bool _quickpanel_ticker_timeout_cb(void *data)
+{
+       DBG("");
+
+       g_timer = NULL;
+
+       _quickpanel_ticker_hide(data);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void _quickpanel_ticker_detail_hide_cb(void *data, Evas *e,
+                                       Evas_Object *obj,
+                                       void *event_info)
+{
+       DBG("");
+       notification_h noti = (notification_h) data;
+
+       if (g_timer) {
+               ecore_timer_del(g_timer);
+               g_timer = NULL;
+       }
+
+       retif(noti == NULL, , "Invalid parameter!");
+
+       __ticker_only_noti_del(noti);
+       notification_free(noti);
+}
+
+static void _quickpanel_ticker_detail_show_cb(void *data, Evas *e,
+                                       Evas_Object *obj,
+                                       void *event_info)
+{
+       DBG("");
+}
+
+static void _quickpanel_ticker_clicked_cb(void *data, Evas_Object *obj,
+                                       void *event_info)
+{
+       notification_h noti = (notification_h) data;
+       char *caller_pkgname = NULL;
+       char *pkgname = NULL;
+       bundle *args = NULL;
+       bundle *single_service_handle = NULL;
+       int priv_id = 0;
+       int flags = 0;
+       int ret = 0;
+       int val = 0;
+       int flag_launch = 0;
+       int flag_delete = 0;
+       int type = NOTIFICATION_TYPE_NONE;
+
+       DBG("");
+
+       retif(noti == NULL, , "Invalid parameter!");
+
+       /* Check idle lock state */
+       ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val);
+
+       /* If Lock state, there is not any action when clicked. */
+       if (ret != 0 || val == VCONFKEY_IDLE_LOCK)
+               return;
+
+       notification_get_pkgname(noti, &caller_pkgname);
+       notification_get_application(noti, &pkgname);
+       if (pkgname == NULL)
+               pkgname = caller_pkgname;
+
+       notification_get_id(noti, NULL, &priv_id);
+       notification_get_property(noti, &flags);
+       notification_get_type(noti, &type);
+
+       if (flags & NOTIFICATION_PROP_DISABLE_APP_LAUNCH)
+               flag_launch = 0;
+       else
+               flag_launch = 1;
+
+       if (flags & NOTIFICATION_PROP_DISABLE_AUTO_DELETE)
+               flag_delete = 0;
+       else
+               flag_delete = 1;
+
+       notification_get_execute_option(noti,
+                               NOTIFICATION_EXECUTE_TYPE_SINGLE_LAUNCH,
+                               NULL, &single_service_handle);
+
+       if (flag_launch == 1) {
+               if (single_service_handle != NULL)
+                       appsvc_run_service(single_service_handle, 0, NULL,
+                                          NULL);
+               else {
+                       notification_get_args(noti, &args, NULL);
+                       quickpanel_launch_app(pkgname, args);
+               }
+
+               /* Hide quickpanel */
+               Ecore_X_Window zone;
+               zone = ecore_x_e_illume_zone_get(elm_win_xwindow_get(g_window));
+               ecore_x_e_illume_quickpanel_state_send(zone,
+                               ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
+       }
+
+       if (flag_delete == 1 && type == NOTIFICATION_TYPE_NOTI) {
+               notification_delete_by_priv_id(caller_pkgname,
+                                               NOTIFICATION_TYPE_NOTI,
+                                               priv_id);
+       }
+}
+
+static void _quickpanel_ticker_button_clicked_cb(void *data, Evas_Object *obj,
+                                       void *event_info)
+{
+       DBG("");
+
+       if (g_timer) {
+               ecore_timer_del(g_timer);
+               g_timer = NULL;
+       }
+
+       _quickpanel_ticker_hide(data);
+}
+
+static Evas_Object *_quickpanel_ticker_create_button(Evas_Object *parent,
+                                               notification_h noti)
+{
+       Evas_Object *button = NULL;
+       int ret = 0;
+       int val = 0;
+
+       retif(noti == NULL || parent == NULL, NULL, "Invalid parameter!");
+
+       /* Check idle lock state */
+       ret = vconf_get_int(VCONFKEY_IDLE_LOCK_STATE, &val);
+       /* If Lock state, button is diabled */
+       if (ret != 0 || val == VCONFKEY_IDLE_LOCK)
+               return NULL;
+
+       button = elm_button_add(parent);
+       elm_object_style_set(button, "tickernoti");
+       elm_object_text_set(button, _S("IDS_COM_BODY_CLOSE"));
+       evas_object_smart_callback_add(button, "clicked",
+                               _quickpanel_ticker_button_clicked_cb, noti);
+
+       return button;
+}
+
+static Evas_Object *_quickpanel_ticker_create_icon(Evas_Object *parent,
+                                               notification_h noti)
+{
+       char *icon_path = NULL;
+       Evas_Object *icon = NULL;
+
+       retif(noti == NULL || parent == NULL, NULL, "Invalid parameter!");
+
+       notification_get_image(noti, NOTIFICATION_IMAGE_TYPE_ICON, &icon_path);
+       icon = elm_image_add(parent);
+
+       if (icon_path == NULL
+           || (elm_image_file_set(icon, icon_path, NULL) == EINA_FALSE)) {
+               elm_image_file_set(icon, DEFAULT_ICON, NULL);
+               elm_image_resizable_set(icon, EINA_TRUE, EINA_TRUE);
+       }
+
+       return icon;
+}
+
+static char *_quickpanel_ticker_get_label(notification_h noti)
+{
+       char buf[TICKER_MSG_LEN] = { 0, };
+       int len = 0;
+       char *domain = NULL;
+       char *dir = NULL;
+       char *result_title = NULL;
+       char *result_content = NULL;
+       char *title_utf8 = NULL;
+       char *content_utf8 = NULL;
+       notification_error_e noti_err = NOTIFICATION_ERROR_NONE;
+
+       retif(noti == NULL, NULL, "Invalid parameter!");
+
+       notification_get_text_domain(noti, &domain, &dir);
+       if (domain != NULL && dir != NULL)
+               bindtextdomain(domain, dir);
+
+       noti_err = notification_get_text(noti, NOTIFICATION_TEXT_TYPE_TITLE,
+                       &result_title);
+       if (noti_err == NOTIFICATION_ERROR_NONE && result_title)
+               title_utf8 = elm_entry_utf8_to_markup(result_title);
+
+       if (_quickpanel_ticker_check_displaying_contents_off(noti) == 1) {
+               noti_err = notification_get_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT_FOR_DISPLAY_OPTION_IS_OFF,
+                               &result_content);
+       }
+       else {
+               noti_err = notification_get_text(noti, NOTIFICATION_TEXT_TYPE_CONTENT,
+                               &result_content);
+       }
+
+       if (noti_err == NOTIFICATION_ERROR_NONE && result_content)
+               content_utf8 = elm_entry_utf8_to_markup(result_content);
+
+       if (title_utf8 && content_utf8) {
+               len = snprintf(buf, sizeof(buf),
+                       "<font_size=26><color=#BABABA>%s</color></font>"
+                       "<br><font_size=29><color=#F4F4F4>%s</color></font>",
+                       title_utf8, content_utf8);
+       } else if (title_utf8) {
+               len = snprintf(buf, sizeof(buf),
+                       "<font_size=29><color=#BABABA>%s</color></font>",
+                       title_utf8);
+       }
+
+       if (title_utf8)
+               free(title_utf8);
+
+       if (content_utf8)
+               free(content_utf8);
+
+       if (len > 0)
+               return strdup(buf);
+
+       return NULL;
+}
+
+static void _noti_hide_cb(void *data, Evas_Object *obj,
+                       const char *emission, const char *source)
+{
+       DBG("");
+
+       if (g_timer) {
+               ecore_timer_del(g_timer);
+               g_timer = NULL;
+       }
+
+       _quickpanel_ticker_hide(data);
+}
+
+static Evas_Object *_quickpanel_ticker_create_tickernoti(void *data)
+{
+       notification_h noti = (notification_h) data;
+       Evas_Object *tickernoti = NULL;
+       Evas_Object *icon = NULL;
+       Evas_Object *detail = NULL;
+       Evas_Object *button = NULL;
+       char *buf = NULL;
+       const char *data_win_height = NULL;
+       int noti_height = 0;
+
+       retif(noti == NULL, NULL, "Invalid parameter!");
+
+       tickernoti = noti_win_add(NULL);
+       retif(tickernoti == NULL, NULL, "Failed to add elm tickernoti.");
+
+       detail = elm_layout_add(tickernoti);
+       if (!detail) {
+               ERR("Failed to get detailview.");
+               evas_object_del(tickernoti);
+               return NULL;
+       }
+       elm_layout_theme_set(detail, "tickernoti", "base", "default");
+       elm_object_signal_callback_add(detail, "request,hide", "",
+                               _noti_hide_cb, noti);
+
+       data_win_height = (char *)elm_layout_data_get(detail, "height");
+       if (data_win_height != NULL && elm_config_scale_get() > 0.0)
+               noti_height = (int)(elm_config_scale_get()
+                                       * atoi(data_win_height));
+       evas_object_size_hint_min_set(detail, 1, noti_height);
+       g_noti_height = noti_height;
+
+       noti_win_content_set(tickernoti, detail);
+
+       icon = _quickpanel_ticker_create_icon(detail, noti);
+       if (icon != NULL)
+               elm_object_part_content_set(detail, "icon", icon);
+
+       button = _quickpanel_ticker_create_button(detail, noti);
+       if (button != NULL)
+               elm_object_part_content_set(detail, "button", button);
+
+       buf = _quickpanel_ticker_get_label(noti);
+       if (buf != NULL) {
+               elm_object_part_text_set(detail, "elm.text", buf);
+               free(buf);
+       }
+
+       /* Use style "default" for detailview mode and
+        * "info" for text only mode
+        */
+       elm_object_style_set(tickernoti, "default");
+
+       return tickernoti;
+}
+
+static int _quickpanel_ticker_get_angle(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+       Ecore_X_Window xwin, root;
+       int ret = 0, angle = 0, count = 0;
+       unsigned char *prop_data = NULL;
+
+       xwin = elm_win_xwindow_get(ad->win);
+       root = ecore_x_window_root_get(xwin);
+
+       ret = ecore_x_window_prop_property_get(root,
+                               ECORE_X_ATOM_E_ILLUME_ROTATE_ROOT_ANGLE,
+                               ECORE_X_ATOM_CARDINAL, 32,
+                               &prop_data, &count);
+
+       if (ret && prop_data) {
+               memcpy(&angle, prop_data, sizeof(int));
+
+               if (prop_data)
+                       free(prop_data);
+
+               return angle;
+       } else {
+               ERR("Fail to get angle");
+               if (prop_data)
+                       free(prop_data);
+
+               return -1;
+       }
+}
+
+static void _quickpanel_ticker_update_geometry_on_rotation(void *data, int *x, int *y, int *w, int *h) {
+       int angle = 0;
+
+       if (!data)
+               return;
+       angle = _quickpanel_ticker_get_angle(data);
+       Evas_Coord root_w, root_h;
+
+       /*
+        * manually calculate win_tickernoti_indi window position & size
+        *  - win_indi is not full size window
+        */
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &root_w, &root_h);
+
+       // rotate win
+       switch(angle)
+       {
+               case 90:
+                       *w = g_noti_height;
+                       *h = root_h;
+                       break;
+               case 270:
+                       *w = g_noti_height;
+                       *h = root_h;
+                       *x = root_w - g_noti_height;
+                       break;
+               case 180:
+                       *w = root_w;
+                       *h = g_noti_height;
+                       *y = root_h - g_noti_height;
+                       break;
+               case 0:
+               default:
+                       *w = root_w;
+                       *h = g_noti_height;
+                       break;
+       }
+       elm_win_rotation_set(g_ticker, angle);
+}
+
+static void _quickpanel_ticker_win_rotated(void *data) {
+       retif(data == NULL, ,"data is NULL");
+       struct appdata *ad = data;
+       int x = 0, y = 0, w = 0, h = 0;
+
+       _quickpanel_ticker_update_geometry_on_rotation(ad, &x, &y, &w, &h);
+
+       if (g_ticker != NULL) {
+               evas_object_move(g_ticker, x, y);
+               evas_object_resize(g_ticker, w, h);
+       }
+}
+
+static void _quickpanel_ticker_noti_detailed_changed_cb(void *data, notification_type_e type, notification_op *op_list, int num_op)
+{
+       notification_h noti = NULL;
+       int flags = 0;
+       int applist = NOTIFICATION_DISPLAY_APP_ALL;
+       int ret = 0;
+       int op_type = 0;
+       int priv_id = 0;
+
+       INFO("_quickpanel_ticker_noti_changed_cb");
+
+       retif(op_list == NULL, ,"op_list is NULL");
+
+       if (num_op == 1) {
+               notification_op_get_data(op_list, NOTIFICATION_OP_DATA_TYPE, &op_type);
+               notification_op_get_data(op_list, NOTIFICATION_OP_DATA_PRIV_ID, &priv_id);
+               DBG("op_type:%d", op_type);
+               DBG("op_priv_id:%d", priv_id);
+
+               if (op_type == NOTIFICATION_OP_INSERT) {
+                       noti = notification_load(NULL, priv_id);
+               } else if (op_type == NOTIFICATION_OP_UPDATE) {
+                       noti = notification_load(NULL, priv_id);
+               } else {
+                       return ;
+               }
+       } else {
+               return ;
+       }
+
+       retif(noti == NULL, ,"noti is NULL");
+
+       notification_get_display_applist(noti, &applist);
+       if (!(applist & NOTIFICATION_DISPLAY_APP_TICKER)) {
+               DBG("No Ticker Msg");
+               notification_free(noti);
+               return ;
+       }
+
+       /* Check setting's event notification */
+       ret = _quickpanel_ticker_check_ticker_off(noti);
+       if (ret == 1) {
+               INFO("Disable tickernoti ret : %d", ret);
+               /* delete temporary here only ticker noti display item */
+               __ticker_only_noti_del(noti);
+               notification_free(noti);
+
+               return;
+       }
+
+       /* Play sound */
+       notification_sound_type_e nsound_type = NOTIFICATION_SOUND_TYPE_NONE;
+       const char *nsound_path = NULL;
+
+       notification_get_sound(noti, &nsound_type, &nsound_path);
+       DBG("Sound : %d, %s", nsound_type, nsound_path);
+       if (nsound_type > NOTIFICATION_SOUND_TYPE_NONE
+           || nsound_type < NOTIFICATION_SOUND_TYPE_MAX) {
+
+               switch (nsound_type) {
+               case NOTIFICATION_SOUND_TYPE_DEFAULT:
+                       feedback_play_type(FEEDBACK_TYPE_SOUND, FEEDBACK_PATTERN_UNLOCK);
+                       break;
+               case NOTIFICATION_SOUND_TYPE_USER_DATA:
+                       quickpanel_player_play(SOUND_TYPE_NOTIFICATION, nsound_path);
+                       break;
+               default:
+                       break;
+               }
+       }
+       /* Play Vibration */
+       notification_vibration_type_e nvibration_type =
+           NOTIFICATION_VIBRATION_TYPE_NONE;
+       const char *nvibration_path = NULL;
+
+       notification_get_vibration(noti, &nvibration_type, &nvibration_path);
+       DBG("Vibration : %d, %s", nvibration_type, nvibration_path);
+       if (nvibration_type > NOTIFICATION_VIBRATION_TYPE_NONE
+           || nvibration_type < NOTIFICATION_VIBRATION_TYPE_MAX) {
+
+               switch (nvibration_type) {
+               case NOTIFICATION_SOUND_TYPE_DEFAULT:
+                       feedback_play_type(FEEDBACK_TYPE_VIBRATION, FEEDBACK_PATTERN_GENERAL);
+                       break;
+               case NOTIFICATION_SOUND_TYPE_USER_DATA:
+                       break;
+               default:
+                       break;
+               }
+       }
+
+       /* Skip if previous ticker is still shown */
+       if (g_ticker != NULL) {
+               _quickpanel_ticker_hide(NULL);
+       }
+
+       /* Check tickernoti flag */
+       notification_get_property(noti, &flags);
+
+       if (flags & NOTIFICATION_PROP_DISABLE_TICKERNOTI) {
+               INFO("NOTIFICATION_PROP_DISABLE_TICKERNOTI");
+               __ticker_only_noti_del(noti);
+               notification_free(noti);
+       } else if (applist & NOTIFICATION_DISPLAY_APP_TICKER) {
+               /* Display ticker */
+               if (g_timer)
+                       ecore_timer_del(g_timer);
+
+               g_ticker = _quickpanel_ticker_create_tickernoti(noti);
+               if (g_ticker == NULL) {
+                       ERR("Fail to create tickernoti");
+                       __ticker_only_noti_del(noti);
+                       notification_free(noti);
+                       return;
+               }
+
+               g_timer = ecore_timer_add(QP_TICKER_DURATION,
+                               _quickpanel_ticker_timeout_cb, noti);
+
+               _quickpanel_ticker_win_rotated(data);
+               evas_object_show(g_ticker);
+
+               evas_object_event_callback_add(g_ticker, EVAS_CALLBACK_SHOW,
+                                       _quickpanel_ticker_detail_show_cb,
+                                       g_ticker);
+               evas_object_event_callback_add(g_ticker, EVAS_CALLBACK_HIDE,
+                                       _quickpanel_ticker_detail_hide_cb,
+                                       noti);
+               evas_object_smart_callback_add(g_ticker, "clicked",
+                                       _quickpanel_ticker_clicked_cb,
+                                       noti);
+       }
+}
+
+/*****************************************************************************
+ *
+ * Util functions
+ *
+ *****************************************************************************/
+static int quickpanel_ticker_init(void *data)
+{
+       struct appdata *ad = (struct appdata *)data;
+
+       latest_inserted_time = time(NULL);
+       g_window = ad->win;
+
+       notification_register_detailed_changed_cb(_quickpanel_ticker_noti_detailed_changed_cb,
+                                       data);
+
+       return QP_OK;
+}
+
+static int quickpanel_ticker_fini(void *data)
+{
+       _quickpanel_ticker_hide(NULL);
+
+       return QP_OK;
+}
+
+static int quickpanel_ticker_enter_hib(void *data)
+{
+       return QP_OK;
+}
+
+static int quickpanel_ticker_leave_hib(void *data)
+{
+       return QP_OK;
+}
+
+static void quickpanel_ticker_reflesh(void *data)
+{
+       retif(data == NULL, , "Invalid parameter!");
+
+       if (g_ticker != NULL) {
+               _quickpanel_ticker_win_rotated(data);
+       }
+}
diff --git a/daemon/quickpanel-ui.c b/daemon/quickpanel-ui.c
new file mode 100755 (executable)
index 0000000..4deb6d5
--- /dev/null
@@ -0,0 +1,1156 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 <signal.h>
+#include <app.h>
+#include <system_info.h>
+#include <sys/utsname.h>
+#include <X11/Xlib.h>
+#include <X11/Xatom.h>
+#include <utilX.h>
+#include <Ecore_X.h>
+#include <Ecore_Input.h>
+#include <heynoti.h>
+#include <vconf.h>
+#include <unistd.h>
+#include <privilege-control.h>
+#include <bundle.h>
+#include <feedback.h>
+
+#include "common.h"
+#include "quickpanel-ui.h"
+#include "modules.h"
+#include "notifications/noti_display_app.h"
+#include "quickpanel_def.h"
+
+#define HIBERNATION_ENTER_NOTI "HIBERNATION_ENTER"
+#define HIBERNATION_LEAVE_NOTI "HIBERNATION_LEAVE"
+
+#define QP_WINDOW_PRIO 300
+#define QP_PLAY_DURATION_LIMIT 15
+
+/* heynoti handle */
+static int g_hdl_heynoti;
+static player_h g_sound_player;
+static Ecore_Timer *g_sound_player_timer;
+struct appdata *g_app_data = NULL;
+
+/* binary information */
+#define QP_EMUL_STR            "Emulator"
+
+static int common_cache_flush(void *evas);
+
+/*****************************************************************************
+  *
+  * HIBERNATION
+  *
+  ****************************************************************************/
+static void _hibernation_enter_cb(void *data)
+{
+       struct appdata *ad = data;
+
+       INFO(" >>>>>>>>>>>>>>> ENTER HIBERNATION!! <<<<<<<<<<<<<<<< ");
+       hib_enter_modules(data);
+       if (ad)
+               common_cache_flush(ad->evas);
+}
+
+static void _hibernation_leave_cb(void *data)
+{
+       hib_leave_modules(data);
+       INFO(" >>>>>>>>>>>>>>> LEAVE HIBERNATION!! <<<<<<<<<<<<<<<< ");
+}
+
+/******************************************************************************
+  *
+  * UI
+  *
+  ****************************************************************************/
+static Eina_Bool quickpanel_ui_refresh_cb(void *data)
+{
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, QP_FAIL, "Invalid parameter!");
+       ad = data;
+
+       INFO(" >>>>>>>>>>>>>>> Refresh QP modules!! <<<<<<<<<<<<<<<< ");
+       refresh_modules(data);
+
+       if (ad->list) {
+               elm_genlist_realized_items_update(ad->list);
+       }
+
+       quickpanel_init_size_genlist(ad);
+       quickpanel_ui_update_height(ad);
+
+       return EINA_FALSE;
+}
+
+static int common_cache_flush(void *evas)
+{
+       int file_cache;
+       int collection_cache;
+       int image_cache;
+       int font_cache;
+
+       retif(evas == NULL, QP_FAIL, "Evas is NULL\n");
+
+       file_cache = edje_file_cache_get();
+       collection_cache = edje_collection_cache_get();
+       image_cache = evas_image_cache_get(evas);
+       font_cache = evas_font_cache_get(evas);
+
+       edje_file_cache_set(file_cache);
+       edje_collection_cache_set(collection_cache);
+       evas_image_cache_set(evas, 0);
+       evas_font_cache_set(evas, 0);
+
+       evas_image_cache_flush(evas);
+       evas_render_idle_flush(evas);
+       evas_font_cache_flush(evas);
+
+       edje_file_cache_flush();
+       edje_collection_cache_flush();
+
+       edje_file_cache_set(file_cache);
+       edje_collection_cache_set(collection_cache);
+       evas_image_cache_set(evas, image_cache);
+       evas_font_cache_set(evas, font_cache);
+
+       return QP_OK;
+}
+
+static int _resize_noti_win(void *data, int new_angle)
+{
+       struct appdata *ad = (struct appdata *)data;
+       int w = 0, h = 0;
+       int tot_h = 0;
+       int diff = 0;
+
+       diff = (ad->angle > new_angle) ?
+           (ad->angle - new_angle) : (new_angle - ad->angle);
+
+#if 0
+       int tot_h = QP_HANDLE_H * ad->scale;
+
+       /* get indicator height */
+       ecore_x_e_illume_indicator_geometry_get(ecore_x_window_root_first_get(),
+                                               NULL, NULL, NULL, &h);
+       if (h <= 0)
+               h = (int)(QP_INDICATOR_H * ad->scale);
+
+       tot_h += h;
+       INFO("tot_h[%d], scale[%lf],indi[%d]", tot_h, ad->scale, h);
+#else
+       tot_h = 0;
+       INFO("tot_h[%d], scale[%lf]", tot_h, ad->scale);
+#endif
+
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+       if (diff % 180 != 0) {
+               int width = 0;
+               int height = 0;
+               if (ad->angle % 180 == 0) {
+                       width = w - tot_h;
+                       height = h;
+               } else {
+                       width = h - tot_h;
+                       height = w;
+               }
+               INFO("win[%dx%d], Resize[%dx%d] diff[%d], angle[%d]",
+                       w, h, width, height, diff, ad->angle);
+               evas_object_resize(ad->win, (int)width-1, (int)height-1); //workaround
+               evas_object_resize(ad->win, (int)width, (int)height);
+       }
+       return 0;
+}
+
+static Eina_Bool quickpanel_hardkey_cb(void *data, int type, void *event)
+{
+       struct appdata *ad = NULL;
+       Ecore_Event_Key *key_event = NULL;
+       Ecore_X_Window xwin;
+
+       retif(data == NULL || event == NULL,
+               EINA_FALSE, "Invalid parameter!");
+       ad = data;
+       key_event = event;
+
+       if (!strcmp(key_event->keyname, KEY_SELECT)) {
+               xwin = elm_win_xwindow_get(ad->win);
+               if (xwin != 0)
+                       ecore_x_e_illume_quickpanel_state_send(ecore_x_e_illume_zone_get(xwin),ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
+       }
+       return EINA_FALSE;
+}
+
+static Eina_Bool quickpanel_ui_client_message_cb(void *data, int type,
+                                                void *event)
+{
+       struct appdata *ad = data;
+       Ecore_X_Event_Client_Message *ev = event;
+       int new_angle;
+
+       retif(data == NULL || event == NULL,
+               ECORE_CALLBACK_RENEW, "Invalid parameter!");
+
+       if (ev->message_type == ECORE_X_ATOM_E_ILLUME_ROTATE_WINDOW_ANGLE) {
+               new_angle = ev->data.l[0];
+
+               if (new_angle == 0 || new_angle == 90 || new_angle == 180 || new_angle == 270) {
+                       if (new_angle != ad->angle) {
+                               INFO("ROTATION: new:%d old:%d", new_angle, ad->angle);
+                               _resize_noti_win(ad, new_angle);
+
+                               elm_win_rotation_with_resize_set(ad->win,
+                                                                new_angle);
+                               ad->angle = new_angle;
+
+                               quickpanel_ui_set_indicator_cover(ad);
+                       }
+               }
+               ecore_idler_add(quickpanel_ui_refresh_cb, ad);
+       } else if (ev->message_type == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_STATE) {
+               if (ev->data.l[0] == ECORE_X_ATOM_E_ILLUME_QUICKPANEL_ON) {
+                       qp_opened_modules(data);
+               } else {
+                       qp_closed_modules(data);
+               }
+       }
+       return ECORE_CALLBACK_RENEW;
+}
+
+static Evas_Object *_quickpanel_ui_window_add(const char *name, int prio)
+{
+       Evas_Object *eo = NULL;
+       Ecore_X_Window xwin;
+
+       eo = elm_win_add(NULL, name, ELM_WIN_BASIC);
+
+       if (eo != NULL) {
+               elm_win_alpha_set(eo, EINA_TRUE);
+               elm_win_indicator_mode_set(eo, ELM_WIN_INDICATOR_SHOW);
+               elm_win_title_set(eo, name);
+               elm_win_borderless_set(eo, EINA_TRUE);
+               elm_win_autodel_set(eo, EINA_TRUE);
+
+               /* set this window as a quickpanel */
+               elm_win_quickpanel_set(eo, 1);
+               elm_win_quickpanel_priority_major_set(eo, prio);
+
+               /* icccm name class set */
+               xwin = elm_win_xwindow_get(eo);
+               ecore_x_icccm_name_class_set(xwin, "QUICKPANEL", "QUICKPANEL");
+               evas_object_show(eo);
+       }
+
+       return eo;
+}
+
+Evas_Object *quickpanel_ui_load_edj(Evas_Object * parent, const char *file,
+                                           const char *group, int is_just_load)
+{
+       Eina_Bool r;
+       Evas_Object *eo = NULL;
+
+       retif(parent == NULL, NULL, "Invalid parameter!");
+
+       eo = elm_layout_add(parent);
+       retif(eo == NULL, NULL, "Failed to add layout object!");
+
+       r = elm_layout_file_set(eo, file, group);
+       retif(r != EINA_TRUE, NULL,
+               "Failed to set edje object file[%s-%s]!", file, group);
+
+       evas_object_size_hint_weight_set(eo,
+                                        EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+
+       if (is_just_load == 1) {
+               elm_win_resize_object_add(parent, eo);
+       }
+       evas_object_show(eo);
+
+       return eo;
+}
+
+static void _quickpanel_ui_close_quickpanel(void *data, Evas_Object *o,
+               const char *emission, const char *source) {
+
+       Ecore_X_Window xwin = 0;
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, , "data is NULL");
+       ad = data;
+
+       DBG("close quick panel");
+
+       xwin = elm_win_xwindow_get(ad->win);
+
+       if (xwin != 0)
+               ecore_x_e_illume_quickpanel_state_send(ecore_x_e_illume_zone_get(xwin),ECORE_X_ILLUME_QUICKPANEL_STATE_OFF);
+}
+
+static int _quickpanel_ui_create_win(void *data)
+{
+       struct appdata *ad = data;
+       int w = 0;
+       int h = 0;
+
+       retif(data == NULL, QP_FAIL, "Invialid parameter!");
+
+       ad->win = _quickpanel_ui_window_add("Quickpanel Window",
+                                       QP_WINDOW_PRIO);
+       if (ad->win == NULL) {
+               ERR("ui create : failed to create window.");
+               return -1;
+       }
+#ifdef QP_INDICATOR_WIDGET_ENABLE
+       ad->comformant = elm_conformant_add(ad->win);
+       elm_object_style_set(ad->comformant, "nokeypad");
+
+       ad->ly = quickpanel_ui_load_edj(ad->comformant,
+                               DEFAULT_EDJ, "quickpanel/gl_base", 0);
+       if (ad->ly == NULL)
+               return -1;
+
+       evas_object_size_hint_weight_set(ad->comformant,
+                                        EVAS_HINT_EXPAND, EVAS_HINT_EXPAND);
+       elm_win_resize_object_add(ad->win, ad->comformant);
+       evas_object_show(ad->comformant);
+       elm_object_content_set(ad->comformant, ad->ly);
+
+#else
+       ad->ly = quickpanel_ui_load_edj(ad->win,
+                               DEFAULT_EDJ, "quickpanel/gl_base", 0);
+       if (ad->ly == NULL)
+               return -1;
+#endif
+
+       /* get noti evas */
+       ad->evas = evas_object_evas_get(ad->win);
+
+       ad->list = elm_genlist_add(ad->ly);
+       if (!ad->list) {
+               ERR("failed to elm_genlist_add");
+               evas_object_del(ad->ly);
+               evas_object_del(ad->win);
+               ad->ly = NULL;
+               ad->win = NULL;
+               ad->evas = NULL;
+               return -1;
+       }
+       elm_genlist_homogeneous_set(ad->list, EINA_FALSE);
+       elm_scroller_policy_set(ad->list, ELM_SCROLLER_POLICY_OFF, ELM_SCROLLER_POLICY_OFF);
+       elm_object_part_content_set(ad->ly, "qp.gl_base.gl.swallow", ad->list);
+
+       ecore_x_window_size_get(ecore_x_window_root_first_get(), &w, &h);
+       evas_object_resize(ad->win, w, h);
+
+       ad->win_width = w;
+       ad->win_height = h;
+
+       edje_object_signal_callback_add(_EDJ(ad->ly),
+                       "close.quickpanel", "*", _quickpanel_ui_close_quickpanel,
+                       ad);
+
+       quickpanel_init_size_genlist(ad);
+
+       quickpanel_ui_set_indicator_cover(ad);
+
+       /* key grab */
+       utilx_grab_key(ecore_x_display_get(), elm_win_xwindow_get(ad->win), KEY_SELECT, SHARED_GRAB);
+
+       return 0;
+}
+
+
+void quickpanel_ui_set_indicator_cover(void *data)
+{
+       retif(data == NULL, , "data is NULL");
+       struct appdata *ad = data;
+
+       int x_1 = 0, y_1 = 0;
+       int x_2 = 0, y_2 = 0;
+       int angle = ad->angle;
+
+       int width = INDICATOR_COVER_W * ad->scale;
+       int height = INDICATOR_COVER_H * ad->scale;
+
+       switch (angle) {
+               case 0:
+                       x_1 = 0;
+                       y_1 = 0;
+                       x_2 = ad->win_width - width;
+                       y_2 = 0;
+                       break;
+               case 90:
+                       x_1 = 0;
+                       y_1 = 0;
+                       x_2 = ad->win_height - width;
+                       y_2 = 0;
+                       break;
+               case 180:
+                       x_1 = 0;
+                       y_1 = 0;
+                       x_2 = ad->win_width - width;
+                       y_2 = 0;
+                       break;
+               case 270:
+                       x_1 = 0;
+                       y_1 = 0;
+                       x_2 = ad->win_height - width;
+                       y_2 = 0;
+                       break;
+       }
+
+       if (ad->cover_indicator_left == NULL) {
+               Evas_Object *bg = evas_object_rectangle_add(ad->evas);
+               evas_object_color_set(bg, 52, 52, 50, 255); // opaque white background
+               evas_object_repeat_events_set(bg, EINA_FALSE);
+               evas_object_resize(bg, width, height); // covers full canvas
+               evas_object_move(bg, x_1, y_1);
+               evas_object_show(bg);
+               ad->cover_indicator_left = bg;
+       } else {
+               evas_object_move(ad->cover_indicator_left, x_1, y_1);
+       }
+       if (ad->cover_indicator_right == NULL) {
+               Evas_Object *bg = evas_object_rectangle_add(ad->evas);
+               evas_object_color_set(bg, 52, 52, 50, 255); // opaque white background
+               evas_object_repeat_events_set(bg, EINA_FALSE);
+               evas_object_resize(bg, width, height); // covers full canvas
+               evas_object_move(bg, x_2, y_2);
+               evas_object_show(bg);
+               ad->cover_indicator_right = bg;
+       } else {
+               evas_object_move(ad->cover_indicator_right, x_2, y_2);
+       }
+}
+
+void quickpanel_ui_window_set_input_region(void *data, int contents_height)
+{
+       struct appdata *ad = NULL;
+       Ecore_X_Window xwin;
+       Ecore_X_Atom atom_window_input_region = 0;
+       unsigned int window_input_region[4] = {0,};
+
+       retif(data == NULL,  , "Invialid parameter!");
+       ad = data;
+
+       xwin = elm_win_xwindow_get(ad->win);
+
+       DBG("angle:%d", ad->angle);
+       switch (ad->angle) {
+               case 0:
+                       window_input_region[0] = 0; //X
+                       window_input_region[1] = contents_height; // Y
+                       window_input_region[2] = ad->win_width; // Width
+                       window_input_region[3] = ad->scale * QP_HANDLE_H; // height
+                       break;
+               case 90:
+                       window_input_region[0] = contents_height; //X
+                       window_input_region[1] = 0; // Y
+                       window_input_region[2] = ad->scale * QP_HANDLE_H; // Width
+                       window_input_region[3] = ad->win_height; // height
+                       break;
+               case 180:
+                       window_input_region[0] = 0; //X
+                       window_input_region[1] = ad->win_height - contents_height - ad->scale * QP_HANDLE_H; // Y
+                       window_input_region[2] = ad->win_width; // Width
+                       window_input_region[3] = ad->scale * QP_HANDLE_H; // height
+                       break;
+               case 270:
+                       window_input_region[0] = ad->win_width - contents_height - ad->scale * QP_HANDLE_H ; //X
+                       window_input_region[1] = 0; // Y
+                       window_input_region[2] = ad->scale * QP_HANDLE_H; // Width
+                       window_input_region[3] = ad->win_height; // height
+                       break;
+       }
+
+       DBG("win_input_0:%d\nwin_input_1:%d\nwin_input_2:%d\nwin_input_3:%d\n"
+                       ,window_input_region[0]
+                       ,window_input_region[1]
+                       ,window_input_region[2]
+                   ,window_input_region[3]
+                       );
+
+       atom_window_input_region = ecore_x_atom_get(STR_ATOM_WINDOW_INPUT_REGION);
+       ecore_x_window_prop_card32_set(xwin, atom_window_input_region, window_input_region, 4);
+}
+
+void quickpanel_ui_window_set_content_region(void *data, int contents_height)
+{
+       struct appdata *ad = NULL;
+       Ecore_X_Window xwin;
+       Ecore_X_Atom atom_window_contents_region = 0;
+       unsigned int window_contents_region[4] = {0,};
+
+       retif(data == NULL,  , "Invialid parameter!");
+       ad = data;
+
+       xwin = elm_win_xwindow_get(ad->win);
+
+       DBG("angle:%d", ad->angle);
+       switch (ad->angle) {
+               case 0:
+                       window_contents_region[0] = 0; //X
+                       window_contents_region[1] = 0; // Y
+                       window_contents_region[2] = ad->win_width; // Width
+                       window_contents_region[3] = contents_height; // height
+                       break;
+               case 90:
+                       window_contents_region[0] = 0; //X
+                       window_contents_region[1] = 0; // Y
+                       window_contents_region[2] = contents_height; // Width
+                       window_contents_region[3] = ad->win_height; // height
+                       break;
+               case 180:
+                       window_contents_region[0] = 0; //X
+                       window_contents_region[1] = ad->win_height - contents_height; // Y
+                       window_contents_region[2] = ad->win_width; // Width
+                       window_contents_region[3] = contents_height; // height
+                       break;
+               case 270:
+                       window_contents_region[0] = ad->win_width - contents_height ; //X
+                       window_contents_region[1] = 0; // Y
+                       window_contents_region[2] = contents_height; // Width
+                       window_contents_region[3] = ad->win_height; // height
+                       break;
+       }
+
+       DBG("win_contents_0:%d\nwin_contents_1:%d\nwin_contents_2:%d\nwin_contents_3:%d\n"
+                       ,window_contents_region[0]
+                       ,window_contents_region[1]
+                       ,window_contents_region[2]
+                   ,window_contents_region[3]
+                       );
+
+    atom_window_contents_region = ecore_x_atom_get(STR_ATOM_WINDOW_CONTENTS_REGION);
+    ecore_x_window_prop_card32_set(xwin, atom_window_contents_region, window_contents_region, 4);
+}
+
+static void _quickpanel_move_data_to_service(const char *key, const char *val, void *data)
+{
+       retif(data == NULL || key == NULL || val == NULL, , "Invialid parameter!");
+
+       service_h service = data;
+       service_add_extra_data(service, key, val);
+}
+
+int quickpanel_launch_app(char *app_id, void *data)
+{
+       int ret = SERVICE_ERROR_NONE;
+       service_h service = NULL;
+
+       retif(app_id == NULL, SERVICE_ERROR_INVALID_PARAMETER, "Invialid parameter!");
+
+       ret = service_create(&service);
+       if (ret != SERVICE_ERROR_NONE) {
+               DBG("service_create() return error : %d", ret);
+               return ret;
+       }
+       retif(service == NULL, SERVICE_ERROR_INVALID_PARAMETER, "fail to create service handle!");
+
+       service_set_operation(service, SERVICE_OPERATION_DEFAULT);
+       service_set_app_id(service, app_id);
+
+       if (data != NULL) {
+               bundle_iterate((bundle *)data, _quickpanel_move_data_to_service, service);
+       }
+
+       ret = service_send_launch_request(service, NULL, NULL);
+       if (ret != SERVICE_ERROR_NONE) {
+               DBG("service_send_launch_request() is failed : %d", ret);
+               service_destroy(service);
+               return ret;
+       }
+       service_destroy(service);
+       return ret;
+}
+
+static void _quickpanel_player_free(player_h *sound_player)
+{
+       retif(sound_player == NULL, , "invalid parameter");
+
+       player_state_e state = PLAYER_STATE_NONE;
+
+       if (*sound_player != NULL) {
+               if (player_get_state(*sound_player, &state) == PLAYER_ERROR_NONE) {
+
+                       DBG("state of player %d", state);
+
+                       if (state == PLAYER_STATE_PLAYING) {
+                               player_stop(*sound_player);
+                               player_unprepare(*sound_player);
+                       }
+                       if (state == PLAYER_STATE_READY) {
+                               player_unprepare(*sound_player);
+                       }
+               }
+               player_destroy(*sound_player);
+               *sound_player = NULL;
+       }
+}
+
+static void
+_quickpanel_player_del_timeout_timer(void)
+{
+       if (g_sound_player_timer) {
+               ecore_timer_del(g_sound_player_timer);
+               g_sound_player_timer = NULL;
+       }
+}
+
+static Eina_Bool _quickpanel_player_timeout_cb(void *data)
+{
+       g_sound_player_timer = NULL;
+
+       retif(data == NULL, ECORE_CALLBACK_CANCEL, "invalid parameter");
+       player_h *sound_player = data;
+
+       _quickpanel_player_free(sound_player);
+
+       return ECORE_CALLBACK_CANCEL;
+}
+
+static void
+_quickpanel_player_completed_cb(void *user_data)
+{
+       retif(user_data == NULL, , "invalid parameter");
+       player_h *sound_player = user_data;
+
+       _quickpanel_player_del_timeout_timer();
+       _quickpanel_player_free(sound_player);
+}
+
+static void
+_quickpanel_player_interrupted_cb(player_interrupted_code_e code, void *user_data)
+{
+       retif(user_data == NULL, , "invalid parameter");
+       player_h *sound_player = user_data;
+
+       _quickpanel_player_del_timeout_timer();
+       _quickpanel_player_free(sound_player);
+}
+
+static void
+_quickpanel_player_error_cb(int error_code, void *user_data)
+{
+       retif(user_data == NULL, , "invalid parameter");
+       player_h *sound_player = user_data;
+
+       _quickpanel_player_del_timeout_timer();
+       _quickpanel_player_free(sound_player);
+}
+
+void quickpanel_player_play(sound_type_e sound_type, const char *sound_file)
+{
+       player_h *sound_player = &g_sound_player;
+
+       int ret = PLAYER_ERROR_NONE;
+       player_state_e state = PLAYER_STATE_NONE;
+
+       _quickpanel_player_del_timeout_timer();
+
+       if (*sound_player != NULL) {
+               _quickpanel_player_free(sound_player);
+       }
+
+       ret = player_create(sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               ERR("creating the player handle failed[%d]", ret);
+               player_destroy(*sound_player);
+       }
+
+       ret = player_set_sound_type(*sound_player, SOUND_TYPE_MEDIA);
+       if (ret != PLAYER_ERROR_NONE) {
+               ERR("player_set_sound_type() ERR: %x!!!!", ret);
+               _quickpanel_player_free(sound_player);
+               return ;
+       }
+
+       player_get_state(*sound_player, &state);
+       if (state > PLAYER_STATE_READY) {
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+
+       ret = player_set_uri(*sound_player, sound_file);
+       if (ret != PLAYER_ERROR_NONE) {
+               DBG("set attribute---profile_uri[%d]", ret);
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+
+       ret = player_prepare(*sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               DBG("realizing the player handle failed[%d]", ret);
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+
+       player_get_state(*sound_player, &state);
+       if (state != PLAYER_STATE_READY) {
+               DBG("state of player is invalid %d", state);
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+
+       /* register callback */
+       ret = player_set_completed_cb(*sound_player, _quickpanel_player_completed_cb, sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               DBG("player_set_completed_cb() ERR: %x!!!!", ret);
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+
+       ret = player_set_interrupted_cb(*sound_player, _quickpanel_player_interrupted_cb, sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+
+       ret = player_set_error_cb(*sound_player, _quickpanel_player_error_cb, sound_player);
+       if (ret != PLAYER_ERROR_NONE) {
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+
+       ret = player_start(*sound_player);
+       if (ret != PLAYER_ERROR_NONE) { /* if directly return retor.. */
+               DBG("player_start [%d]", ret);
+               _quickpanel_player_free(sound_player);
+               return;
+       }
+
+       g_sound_player_timer = ecore_timer_add(QP_PLAY_DURATION_LIMIT,
+                       _quickpanel_player_timeout_cb, sound_player);
+}
+
+static int _quickpanel_ui_delete_win(void *data)
+{
+       struct appdata *ad = data;
+       retif(data == NULL, QP_FAIL, "Invialid parameter!");
+
+       if (ad->ly != NULL) {
+               evas_object_del(ad->ly);
+               ad->ly = NULL;
+       }
+       if (ad->win != NULL) {
+               evas_object_del(ad->win);
+               ad->win = NULL;
+       }
+
+       return QP_OK;
+}
+
+static void _quickpanel_ui_init_heynoti(struct appdata *ad)
+{
+       int ret = 0;
+
+       /* init heynoti */
+       g_hdl_heynoti = heynoti_init();
+       if (g_hdl_heynoti == -1) {
+               ERR("ui init heynoti : fail to heynoti_init.");
+               g_hdl_heynoti = 0;
+               return;
+       }
+
+       /* subscribe hibernation */
+       heynoti_subscribe(g_hdl_heynoti, HIBERNATION_ENTER_NOTI,
+                         _hibernation_enter_cb, (void *)ad);
+       heynoti_subscribe(g_hdl_heynoti, HIBERNATION_LEAVE_NOTI,
+                         _hibernation_leave_cb, (void *)ad);
+
+       ret = heynoti_attach_handler(g_hdl_heynoti);
+       if (ret == -1) {
+               ERR("ui init heynoti : fail to heynoti_attach_handler.");
+               return;
+       }
+}
+
+static void _quickpanel_ui_fini_heynoti(void)
+{
+       if (g_hdl_heynoti != 0) {
+               /* unsubscribe hibernation */
+               heynoti_unsubscribe(g_hdl_heynoti, HIBERNATION_ENTER_NOTI,
+                                   _hibernation_enter_cb);
+               heynoti_unsubscribe(g_hdl_heynoti, HIBERNATION_LEAVE_NOTI,
+                                   _hibernation_leave_cb);
+
+               /* close heynoti */
+               heynoti_close(g_hdl_heynoti);
+               g_hdl_heynoti = 0;
+       }
+}
+
+static void _quickpanel_ui_init_ecore_event(struct appdata *ad)
+{
+       Ecore_Event_Handler *hdl = NULL;
+       Ecore_Event_Handler *hdl_key = NULL;
+
+       /* Register window rotate event */
+       hdl = ecore_event_handler_add(ECORE_X_EVENT_CLIENT_MESSAGE,
+                               quickpanel_ui_client_message_cb, ad);
+       if (hdl == NULL)
+               ERR("failed to add handler(ECORE_X_EVENT_CLIENT_MESSAGE)");
+
+       ad->hdl_client_message = hdl;
+
+       hdl_key = ecore_event_handler_add(ECORE_EVENT_KEY_DOWN, quickpanel_hardkey_cb, ad);
+       if (hdl_key == NULL)
+               ERR("failed to add handler(ECORE_EVENT_KEY_UP)");
+
+       ad->hdl_hardkey = hdl_key;
+}
+
+static void _quickpanel_ui_fini_ecore_event(struct appdata *ad)
+{
+       if (ad->hdl_client_message != NULL) {
+               ecore_event_handler_del(ad->hdl_client_message);
+               ad->hdl_client_message = NULL;
+       }
+       if (ad->hdl_hardkey != NULL) {
+               ecore_event_handler_del(ad->hdl_hardkey);
+               ad->hdl_hardkey = NULL;
+       }
+}
+int quickpanel_ui_check_emul(void)
+{
+       int is_emul = 0;
+       char *info = NULL;
+
+       if (system_info_get_value_string(SYSTEM_INFO_KEY_MODEL, &info) == 0) {
+               if (info == NULL) return 0;
+               if (!strncmp(QP_EMUL_STR, info, strlen(info))) {
+                       is_emul = 1;
+               }
+       }
+
+       if (info != NULL) free(info);
+
+       return is_emul;
+}
+
+static void _quickpanel_ui_setting_show(struct appdata *ad, int show)
+{
+       if (!ad)
+               return;
+
+       if (!ad->ly)
+               return;
+
+       ad->show_setting = 1;
+
+}
+
+#ifdef QP_BRIGHTNESS_ENABLE
+/* toggle */
+extern QP_Module brightness_ctrl;
+#endif /* QP_BRIGHTNESS_ENABLE */
+#ifdef QP_MINICTRL_ENABLE
+extern QP_Module minictrl;
+#endif /* QP_MINICTRL_ENABLE */
+extern QP_Module noti;
+
+static void _quickpanel_ui_update_height(void *data)
+{
+       int contents_height = 0;
+       int height_genlist = 0;
+
+       struct appdata *ad = NULL;
+
+       retif(data == NULL, , "data is NULL");
+       ad = data;
+
+       DBG("current item count:%d", elm_genlist_items_count(ad->list));
+
+       height_genlist += noti.get_height(data);
+#ifdef QP_BRIGHTNESS_ENABLE
+       height_genlist += brightness_ctrl.get_height(data);
+#endif
+#ifdef QP_MINICTRL_ENABLE
+       height_genlist += minictrl.get_height(data);
+#endif
+
+       height_genlist = ad->gl_limit_height;
+
+       contents_height = ad->gl_distance_from_top + height_genlist + ad->gl_distance_to_bottom - ad->scale * QP_HANDLE_H;
+
+       DBG("height_genlist:%d\n gl_distance_from_top:%d\n gl_distance_to_bottom:%d\n gl_limit_height:%d\nnew_height:%d"
+                       ,height_genlist
+                       ,ad->gl_distance_from_top
+                       ,ad->gl_distance_to_bottom
+                       ,ad->gl_limit_height
+                       ,contents_height
+                       );
+
+       quickpanel_ui_window_set_input_region(ad, contents_height);
+       quickpanel_ui_window_set_content_region(ad, contents_height);
+}
+
+void quickpanel_ui_update_height(void *data)
+{
+       _quickpanel_ui_update_height(data);
+}
+
+void quickpanel_init_size_genlist(void *data)
+{
+       struct appdata *ad = NULL;
+       int max_height_window = 0;
+       Evas_Coord genlist_y = 0;
+       Evas_Coord spn_height = 0;
+
+       retif(data == NULL, , "data is NULL");
+       ad = data;
+
+       if (ad->angle == 90 || ad->angle == 270 )
+               max_height_window = ad->win_width;
+       else
+               max_height_window = ad->win_height;
+
+       edje_object_part_geometry_get(_EDJ(ad->ly), "qp.gl_base.gl.swallow", NULL, &genlist_y, NULL, NULL);
+       DBG("quickpanel, qp.gl_base.gl.swallow y: %d",genlist_y);
+
+       edje_object_part_geometry_get(_EDJ(ad->ly), "qp.base.spn.swallow", NULL, NULL, NULL, &spn_height);
+       DBG("quickpanel, to spn_height: %d",spn_height);
+
+       ad->gl_distance_from_top = genlist_y;
+       ad->gl_distance_to_bottom = spn_height + (1 * ad->scale) + (ad->scale*QP_HANDLE_H) ;
+       ad->gl_limit_height = max_height_window - ad->gl_distance_from_top - ad->gl_distance_to_bottom;
+}
+
+void *quickpanel_get_app_data(void)
+{
+       return g_app_data;
+}
+
+/*****************************************************************************
+  *
+  * App efl main interface
+  *
+  ****************************************************************************/
+
+static void _signal_handler(int signum, siginfo_t *info, void *unused)
+{
+       DBG("Terminated...");
+       app_efl_exit();
+}
+
+static void _heynoti_event_power_off(void *data)
+{
+       DBG("Terminated...");
+       app_efl_exit();
+}
+
+static bool quickpanel_app_create(void *data)
+{
+       DBG("");
+
+       pid_t pid;
+       int r;
+
+       // signal handler
+       struct sigaction act;
+       act.sa_sigaction = _signal_handler;
+       act.sa_flags = SA_SIGINFO;
+
+       int ret = sigemptyset(&act.sa_mask);
+       if (ret < 0) {
+               ERR("Failed to sigemptyset[%s]", strerror(errno));
+       }
+       ret = sigaddset(&act.sa_mask, SIGTERM);
+       if (ret < 0) {
+               ERR("Failed to sigaddset[%s]", strerror(errno));
+       }
+       ret = sigaction(SIGTERM, &act, NULL);
+       if (ret < 0) {
+               ERR("Failed to sigaction[%s]", strerror(errno));
+       }
+
+       pid = setsid();
+       if (pid < 0)
+               WARN("Failed to set session id!");
+
+       r = nice(2);
+       if (r == -1)
+               WARN("Failed to set nice value!");
+
+       return TRUE;
+}
+
+static void quickpanel_app_terminate(void *data)
+{
+       DBG("");
+
+       struct appdata *ad = data;
+       retif(ad == NULL, , "invalid data.");
+
+       /* fini quickpanel modules */
+       fini_modules(ad);
+
+       common_cache_flush(ad->evas);
+
+       feedback_deinitialize();
+
+       /* unregister system event callback */
+       _quickpanel_ui_fini_heynoti();
+
+       notification_daemon_shutdown();
+
+       _quickpanel_ui_fini_ecore_event(ad);
+
+       if (ad->cover_indicator_left != NULL) {
+               evas_object_del(ad->cover_indicator_left);
+               ad->cover_indicator_left = NULL;
+       }
+       if (ad->cover_indicator_right != NULL) {
+               evas_object_del(ad->cover_indicator_right);
+               ad->cover_indicator_right = NULL;
+       }
+       /* delete quickpanel window */
+       _quickpanel_ui_delete_win(ad);
+
+       INFO(" >>>>>>>>>>>>>>> QUICKPANEL IS TERMINATED!! <<<<<<<<<<<<<<<< ");
+}
+
+static void quickpanel_app_pause(void *data)
+{
+       DBG("");
+
+       struct appdata *ad = data;
+       retif(ad == NULL,, "invalid data.");
+
+       suspend_modules(ad);
+
+       common_cache_flush(ad->evas);
+}
+
+static void quickpanel_app_resume(void *data)
+{
+       DBG("");
+
+       struct appdata *ad = data;
+       retif(ad == NULL,, "invalid data.");
+
+       resume_modules(data);
+}
+
+static void quickpanel_app_service(service_h service, void *data)
+{
+       struct appdata *ad = data;
+       int ret = 0;
+
+       retif(ad == NULL, , "Invialid parameter!");
+
+       INFO(" >>>>>>>>>>>>>>> QUICKPANEL IS STARTED!! <<<<<<<<<<<<<<<< ");
+
+       /* Check emulator */
+       ad->is_emul = quickpanel_ui_check_emul();
+       INFO("quickpanel run in %s", ad->is_emul ? "Emul" : "Device");
+
+       ad->scale = elm_config_scale_get();
+       if (ad->scale < 0)
+               ad->scale = 1.0;
+
+       /* Get theme */
+       elm_theme_extension_add(NULL, DEFAULT_THEME_EDJ);
+
+       /* create quickpanel window */
+       ret = _quickpanel_ui_create_win(ad);
+       retif(ret != QP_OK, , "Failed to create window!");
+
+       /* init internationalization */
+       notification_daemon_win_set(ad->win);
+
+       _quickpanel_ui_init_ecore_event(ad);
+
+       _quickpanel_ui_init_heynoti(ad);
+
+       feedback_initialize();
+
+#ifdef QP_SETTING_ENABLE
+       _quickpanel_ui_setting_show(ad, 1);
+#else /* QP_SETTING_ENABLE */
+       _quickpanel_ui_setting_show(ad, 0);
+#endif /* QP_SETTING_ENABLE */
+
+       /* init quickpanel modules */
+       init_modules(ad);
+
+       ecore_idler_add(quickpanel_ui_refresh_cb, ad);
+}
+
+static void quickpanel_app_language_changed_cb(void *data)
+{
+       retif(data == NULL, , "Invalid parameter!");
+
+       INFO(" >>>>>>>>>>>>>>> LANGUAGE CHANGED!! <<<<<<<<<<<<<<<< ");
+       lang_change_modules(data);
+}
+
+static void quickpanel_app_region_format_changed_cb(void *data)
+{
+       INFO(" >>>>>>>>>>>>>>> region_format CHANGED!! <<<<<<<<<<<<<<<< ");
+}
+
+int main(int argc, char *argv[])
+{
+       int r = 0;
+       struct appdata ad;
+       app_event_callback_s app_callback = {0,};
+
+       r = control_privilege();
+        if (r != 0) {
+                WARN("Failed to control privilege!");
+        }
+
+       int heyfd = heynoti_init();
+       if (heyfd > 0) {
+               int ret = heynoti_subscribe(heyfd, "power_off_start", _heynoti_event_power_off, NULL);
+               if (ret > 0) {
+                       ret = heynoti_attach_handler(heyfd);
+                       if (ret < 0) {
+                               ERR("Failed to heynoti_attach_handler[%d]", ret);
+                       }
+               } else {
+                       ERR("Failed to heynoti_subscribe[%d]", ret);
+               }
+       } else {
+               ERR("Failed to heynoti_init[%d]", heyfd);
+       }
+
+       app_callback.create = quickpanel_app_create;
+       app_callback.terminate = quickpanel_app_terminate;
+       app_callback.pause = quickpanel_app_pause;
+       app_callback.resume = quickpanel_app_resume;
+       app_callback.service = quickpanel_app_service;
+       app_callback.low_memory = NULL;
+       app_callback.low_battery = NULL;
+       app_callback.device_orientation = NULL;
+       app_callback.language_changed = quickpanel_app_language_changed_cb;
+       app_callback.region_format_changed = quickpanel_app_region_format_changed_cb;
+
+       memset(&ad, 0x0, sizeof(struct appdata));
+
+       notification_daemon_init();
+
+       g_app_data = &ad;
+
+       DBG("start main");
+       return app_efl_main(&argc, &argv, &app_callback, (void *)&ad);
+}
diff --git a/daemon/quickpanel-ui.h b/daemon/quickpanel-ui.h
new file mode 100755 (executable)
index 0000000..e3ec9cf
--- /dev/null
@@ -0,0 +1,123 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QUICKPANEL_UI_H__
+#define __QUICKPANEL_UI_H__
+
+#include <Elementary.h>
+#include <player.h>
+
+#if !defined(VENDOR)
+#  define VENDOR "org.tizen"
+#endif
+#if !defined(PACKAGE)
+#  define PACKAGE                      "quickpanel"
+#endif
+
+#if !defined(LOCALEDIR)
+#  define LOCALEDIR                    "/usr/apps/"VENDOR"."PACKAGE"/res/locale"
+#endif
+
+#if !defined(EDJDIR)
+#  define EDJDIR                       "/usr/apps/"VENDOR"."PACKAGE"/res/edje"
+#endif
+
+/* EDJ theme */
+#define DEFAULT_EDJ            EDJDIR"/"PACKAGE".edj"
+#define DEFAULT_THEME_EDJ      EDJDIR"/"PACKAGE"_theme.edj"
+
+#define _EDJ(o) elm_layout_edje_get(o)
+#define _S(str)        dgettext("sys_string", str)
+#undef _
+#define _(str) gettext(str)
+#define _NOT_LOCALIZED(str) (str)
+
+#define STR_ATOM_WINDOW_INPUT_REGION    "_E_COMP_WINDOW_INPUT_REGION"
+#define STR_ATOM_WINDOW_CONTENTS_REGION "_E_COMP_WINDOW_CONTENTS_REGION"
+
+#define MAX_NAM_LEN 4096
+
+#define INDICATOR_COVER_W 82
+#define INDICATOR_COVER_H 60
+
+#define QP_SETTING_PKG_SETTING VENDOR".setting"
+#define QP_SETTING_PKG_SETTING_EMUL    "kto5jikgul.Settings"
+
+struct appdata {
+       Evas_Object *win;
+#ifdef QP_INDICATOR_WIDGET_ENABLE
+       Evas_Object *comformant;
+#endif
+       Evas_Object *ly;
+       Evas *evas;
+
+       Evas_Object *list;
+       int angle;
+       double scale;
+       char *theme;
+
+       int win_width;
+       int win_height;
+       int gl_limit_height;
+       int gl_distance_from_top;
+       int gl_distance_to_bottom;
+
+       int is_emul; /* 0 : target, 1 : emul */
+       int show_setting;
+
+       Ecore_Event_Handler *hdl_client_message;
+       Ecore_Event_Handler *hdl_hardkey;
+
+       E_DBus_Connection *dbus_connection;
+       E_DBus_Signal_Handler *dbus_handler_size;
+       E_DBus_Signal_Handler *dbus_handler_progress;
+       E_DBus_Signal_Handler *dbus_handler_content;
+
+       Evas_Object *cover_indicator_left;
+       Evas_Object *cover_indicator_right;
+};
+
+typedef struct _QP_Module {
+       char *name;
+       /* func */
+       int (*init) (void *);
+       int (*fini) (void *);
+       int (*suspend) (void *);
+       int (*resume) (void *);
+       int (*hib_enter) (void *);
+       int (*hib_leave) (void *);
+       void (*lang_changed) (void *);
+       void (*refresh) (void *);
+       unsigned int (*get_height) (void *);
+       void (*qp_opened) (void *);
+       void (*qp_closed) (void *);
+
+       /* do not modify this area */
+       /* internal data */
+       Eina_Bool state;
+} QP_Module;
+
+void quickpanel_player_play(sound_type_e sound_type, const char *sound_file);
+int quickpanel_launch_app(char *app_id, void *data);
+int quickpanel_ui_check_emul(void);
+void quickpanel_init_size_genlist(void *data);
+void quickpanel_ui_update_height(void *data);
+void *quickpanel_get_app_data(void);
+Evas_Object *quickpanel_ui_load_edj(Evas_Object * parent, const char *file,
+                                           const char *group, int is_just_load);
+void quickpanel_ui_set_indicator_cover(void *data);
+
+#endif                         /* __QUICKPANEL_UI_H__ */
diff --git a/data/CMakeLists.txt b/data/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..dcb59c2
--- /dev/null
@@ -0,0 +1,33 @@
+#CONFIGURE_FILE(${PROJECT_NAME}.desktop.in ${CMAKE_CURRENT_BINARY_DIR}/${VENDOR}.${PROJECT_NAME}.desktop)
+#INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${VENDOR}.${PROJECT_NAME}.desktop DESTINATION ${DESKTOPDIR})
+CONFIGURE_FILE(${PROJECT_NAME}.xml.in ${CMAKE_CURRENT_BINARY_DIR}/${VENDOR}.${PROJECT_NAME}.xml)
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${VENDOR}.${PROJECT_NAME}.xml DESTINATION ${MANIFESTXMLDIR})
+
+CONFIGURE_FILE(${PROJECT_NAME}.sh.in ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${PROJECT_NAME} DESTINATION /etc/init.d/)
+
+#CONFIGURE_FILE(${PROJECT_NAME}.png ${CMAKE_CURRENT_BINARY_DIR}/${VENDOR}.${PROJECT_NAME}.png COPYONLY)
+#INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/${VENDOR}.${PROJECT_NAME}.png DESTINATION "/usr/share/icons/default/small")
+
+INSTALL(FILES ${CMAKE_CURRENT_SOURCE_DIR}/sip.wav DESTINATION "${DATADIR}")
+
+ADD_CUSTOM_TARGET(quickpanel.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/icons  -id ${CMAKE_CURRENT_SOURCE_DIR}/images
+               ${CMAKE_CURRENT_SOURCE_DIR}/quickpanel.edc
+               ${CMAKE_CURRENT_BINARY_DIR}/quickpanel.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/quickpanel.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} quickpanel.edj)
+
+ADD_CUSTOM_TARGET(quickpanel_theme.edj
+               COMMAND edje_cc -id ${CMAKE_CURRENT_SOURCE_DIR}/icons -id ${CMAKE_CURRENT_SOURCE_DIR}/images
+               ${CMAKE_CURRENT_SOURCE_DIR}/quickpanel_theme.edc
+               ${CMAKE_CURRENT_BINARY_DIR}/quickpanel_theme.edj
+               DEPENDS ${CMAKE_CURRENT_SOURCE_DIR}/quickpanel_theme.edc
+)
+ADD_DEPENDENCIES(${PROJECT_NAME} quickpanel_theme.edj)
+
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/quickpanel.edj DESTINATION ${EDJDIR})
+INSTALL(FILES ${CMAKE_CURRENT_BINARY_DIR}/quickpanel_theme.edj DESTINATION ${EDJDIR})
+INSTALL(DIRECTORY ${CMAKE_CURRENT_SOURCE_DIR}/icons DESTINATION ${RESDIR} FILES_MATCHING PATTERN "*.png")
+
diff --git a/data/icons/Q02_Notification_brightness.png b/data/icons/Q02_Notification_brightness.png
new file mode 100755 (executable)
index 0000000..e2c8cf8
Binary files /dev/null and b/data/icons/Q02_Notification_brightness.png differ
diff --git a/data/icons/quick_standard_btn_nor.png b/data/icons/quick_standard_btn_nor.png
new file mode 100755 (executable)
index 0000000..007f08f
Binary files /dev/null and b/data/icons/quick_standard_btn_nor.png differ
diff --git a/data/icons/quick_standard_btn_press.png b/data/icons/quick_standard_btn_press.png
new file mode 100755 (executable)
index 0000000..1657576
Binary files /dev/null and b/data/icons/quick_standard_btn_press.png differ
diff --git a/data/images/00_check_bg.png b/data/images/00_check_bg.png
new file mode 100755 (executable)
index 0000000..4105992
Binary files /dev/null and b/data/images/00_check_bg.png differ
diff --git a/data/images/00_check_bg_dim.png b/data/images/00_check_bg_dim.png
new file mode 100755 (executable)
index 0000000..4105992
Binary files /dev/null and b/data/images/00_check_bg_dim.png differ
diff --git a/data/images/00_check_bg_press.png b/data/images/00_check_bg_press.png
new file mode 100755 (executable)
index 0000000..365a256
Binary files /dev/null and b/data/images/00_check_bg_press.png differ
diff --git a/data/images/00_check_checking.png b/data/images/00_check_checking.png
new file mode 100755 (executable)
index 0000000..45fbafe
Binary files /dev/null and b/data/images/00_check_checking.png differ
diff --git a/data/images/00_check_checking_dim.png b/data/images/00_check_checking_dim.png
new file mode 100755 (executable)
index 0000000..45fbafe
Binary files /dev/null and b/data/images/00_check_checking_dim.png differ
diff --git a/data/images/00_divider_line.png b/data/images/00_divider_line.png
new file mode 100755 (executable)
index 0000000..fa2f19e
Binary files /dev/null and b/data/images/00_divider_line.png differ
diff --git a/data/images/00_progress_bar.png b/data/images/00_progress_bar.png
new file mode 100755 (executable)
index 0000000..1675b22
Binary files /dev/null and b/data/images/00_progress_bar.png differ
diff --git a/data/images/00_progress_bg.png b/data/images/00_progress_bg.png
new file mode 100755 (executable)
index 0000000..452e1d7
Binary files /dev/null and b/data/images/00_progress_bg.png differ
diff --git a/data/images/00_slider_handle.png b/data/images/00_slider_handle.png
new file mode 100755 (executable)
index 0000000..829373d
Binary files /dev/null and b/data/images/00_slider_handle.png differ
diff --git a/data/images/00_slider_handle_dim.png b/data/images/00_slider_handle_dim.png
new file mode 100755 (executable)
index 0000000..746f632
Binary files /dev/null and b/data/images/00_slider_handle_dim.png differ
diff --git a/data/images/00_slider_handle_press.png b/data/images/00_slider_handle_press.png
new file mode 100755 (executable)
index 0000000..8475715
Binary files /dev/null and b/data/images/00_slider_handle_press.png differ
diff --git a/data/images/Q02_quickpanel_button_nomal_01_center.png b/data/images/Q02_quickpanel_button_nomal_01_center.png
new file mode 100755 (executable)
index 0000000..69c5b73
Binary files /dev/null and b/data/images/Q02_quickpanel_button_nomal_01_center.png differ
diff --git a/data/images/Q02_quickpanel_button_nomal_01_left.png b/data/images/Q02_quickpanel_button_nomal_01_left.png
new file mode 100755 (executable)
index 0000000..4d35a98
Binary files /dev/null and b/data/images/Q02_quickpanel_button_nomal_01_left.png differ
diff --git a/data/images/Q02_quickpanel_button_nomal_01_right.png b/data/images/Q02_quickpanel_button_nomal_01_right.png
new file mode 100755 (executable)
index 0000000..ef53ed9
Binary files /dev/null and b/data/images/Q02_quickpanel_button_nomal_01_right.png differ
diff --git a/data/images/Q02_quickpanel_button_press_01_center.png b/data/images/Q02_quickpanel_button_press_01_center.png
new file mode 100755 (executable)
index 0000000..fcd401b
Binary files /dev/null and b/data/images/Q02_quickpanel_button_press_01_center.png differ
diff --git a/data/images/Q02_quickpanel_button_press_01_left.png b/data/images/Q02_quickpanel_button_press_01_left.png
new file mode 100755 (executable)
index 0000000..585e850
Binary files /dev/null and b/data/images/Q02_quickpanel_button_press_01_left.png differ
diff --git a/data/images/Q02_quickpanel_button_press_01_right.png b/data/images/Q02_quickpanel_button_press_01_right.png
new file mode 100755 (executable)
index 0000000..1e848c7
Binary files /dev/null and b/data/images/Q02_quickpanel_button_press_01_right.png differ
diff --git a/data/images/bg_pattern.png b/data/images/bg_pattern.png
new file mode 100755 (executable)
index 0000000..5ad9848
Binary files /dev/null and b/data/images/bg_pattern.png differ
diff --git a/data/images/notification_bg.png b/data/images/notification_bg.png
new file mode 100755 (executable)
index 0000000..5cf6c0d
Binary files /dev/null and b/data/images/notification_bg.png differ
diff --git a/data/images/quick_btn_close_dim.png b/data/images/quick_btn_close_dim.png
new file mode 100755 (executable)
index 0000000..af02c5d
Binary files /dev/null and b/data/images/quick_btn_close_dim.png differ
diff --git a/data/images/quick_btn_close_nor.png b/data/images/quick_btn_close_nor.png
new file mode 100755 (executable)
index 0000000..9041e29
Binary files /dev/null and b/data/images/quick_btn_close_nor.png differ
diff --git a/data/images/quick_btn_close_press.png b/data/images/quick_btn_close_press.png
new file mode 100755 (executable)
index 0000000..8eb09b8
Binary files /dev/null and b/data/images/quick_btn_close_press.png differ
diff --git a/data/images/quick_handle.png b/data/images/quick_handle.png
new file mode 100755 (executable)
index 0000000..296eb4f
Binary files /dev/null and b/data/images/quick_handle.png differ
diff --git a/data/images/quick_icon_bg_01.png b/data/images/quick_icon_bg_01.png
new file mode 100755 (executable)
index 0000000..9621f32
Binary files /dev/null and b/data/images/quick_icon_bg_01.png differ
diff --git a/data/images/quick_icon_bg_02.png b/data/images/quick_icon_bg_02.png
new file mode 100755 (executable)
index 0000000..7ed9e7d
Binary files /dev/null and b/data/images/quick_icon_bg_02.png differ
diff --git a/data/images/quick_icon_bg_small.png b/data/images/quick_icon_bg_small.png
new file mode 100755 (executable)
index 0000000..974be6f
Binary files /dev/null and b/data/images/quick_icon_bg_small.png differ
diff --git a/data/images/quick_image_dimmed_land.png b/data/images/quick_image_dimmed_land.png
new file mode 100755 (executable)
index 0000000..0b445b8
Binary files /dev/null and b/data/images/quick_image_dimmed_land.png differ
diff --git a/data/images/quick_image_dimmed_port.png b/data/images/quick_image_dimmed_port.png
new file mode 100755 (executable)
index 0000000..ec11f45
Binary files /dev/null and b/data/images/quick_image_dimmed_port.png differ
diff --git a/data/images/quick_progress.9.png b/data/images/quick_progress.9.png
new file mode 100755 (executable)
index 0000000..1675b22
Binary files /dev/null and b/data/images/quick_progress.9.png differ
diff --git a/data/images/quick_progress_bg.9.png b/data/images/quick_progress_bg.9.png
new file mode 100755 (executable)
index 0000000..452e1d7
Binary files /dev/null and b/data/images/quick_progress_bg.9.png differ
diff --git a/data/images/quick_progress_unknown_port_01.png b/data/images/quick_progress_unknown_port_01.png
new file mode 100755 (executable)
index 0000000..87a8a35
Binary files /dev/null and b/data/images/quick_progress_unknown_port_01.png differ
diff --git a/data/images/quick_progress_unknown_port_02.png b/data/images/quick_progress_unknown_port_02.png
new file mode 100755 (executable)
index 0000000..2d9b954
Binary files /dev/null and b/data/images/quick_progress_unknown_port_02.png differ
diff --git a/data/quickpanel.desktop.in b/data/quickpanel.desktop.in
new file mode 100644 (file)
index 0000000..654043c
--- /dev/null
@@ -0,0 +1,14 @@
+[Desktop Entry]
+Encoding=UTF-8
+Name=@PROJECT_NAME@
+Comment=@PROJECT_NAME@
+Exec=@BINDIR@/@PROJECT_NAME@
+Icon=@PKGNAME@.png
+Terminal=false
+Type=Application
+Categories=Application;Utility;
+Version=0.1.0
+Nodisplay=True
+X-TIZEN-TaskManage=False
+X-TIZEN-Multiple=False
+X-TIZEN-Removable=False
diff --git a/data/quickpanel.edc b/data/quickpanel.edc
new file mode 100755 (executable)
index 0000000..b024f9b
--- /dev/null
@@ -0,0 +1,174 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 "quickpanel_def.h"
+#include "quickpanel_theme_def.h"
+
+#define QP_SETTING_H 134
+#define QP_SETTING_SEPERATOR_H 0
+#define QP_SEPERATOR_H 12
+#define QP_TOGGLE_H_MIN 110
+
+images {
+       image: "notification_bg.png" COMP;
+       image: "quick_handle.png" COMP;
+}
+
+collections {
+       group { name: "quickpanel/gl_base";
+               parts {
+                       part {
+                               name: "background";
+                               type: RECT;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       color: QP_BG_COLOR;
+                                       visible: QP_BG_VISIBILITY;
+                               }
+                       }
+                       part{
+                               name: "background.wallpaper";
+                               type:IMAGE;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                       }
+                                       image {
+                                               normal:"notification_bg.png";
+                                       }
+                                       align:0 0;
+                                       visible: 1;
+                               }
+                       }
+                       part{
+                               name: "qp.base.indicator";
+                               type:RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_INDICATOR_H;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "background";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 0.0;
+                                               to: "background";
+                                       }
+                                       align: 0.0 0.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+                       part{
+                               name: "qp.base.spn.swallow";
+                               type: SWALLOW;
+                               scale: 1;
+                               mouse_events: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       min: 0 QP_SPN_H;
+                                       rel1 {
+                                               to_y, "qp.base.indicator";
+                                               relative: 0.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_y, "qp.base.indicator";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part {
+                               name: "qp.gl_base.gl.swallow";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 0;
+                                       rel1 {
+                                               to_y:"qp.base.spn.swallow";
+                                               relative: 0.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_y:"qp.base.handler";
+                                               relative: 1.0 0.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part{
+                               name: "qp.base.handler.bg";
+                               type:IMAGE;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_HANDLE_TOTAL_H;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                       }
+                                       image {
+                                               normal:"quick_handle.png";
+                                               border: 1 1 1 1;
+                                               border_scale: 1;
+                                       }
+                                       align: 0.0 1.0;
+                               }
+                       }
+                       part{
+                               name: "qp.base.handler";
+                               type:RECT;
+                               scale:1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 QP_HANDLE_H;
+                                       rel1 {
+                                               relative: 0.0 1.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 1.0;
+                                       color: 0 0 0 0;
+                               }
+                       }
+               }
+               programs {
+                       program {
+                               name: "background.touch";
+                               action: SIGNAL_EMIT "close.quickpanel" "";
+                               signal: "mouse,down,1";
+                               source: "background";
+                       }
+               }
+       }
+#include "quickpanel_noti.edc"
+#include "quickpanel_spn.edc"
+#include "quickpanel_notibox.edc"
+}
diff --git a/data/quickpanel.png b/data/quickpanel.png
new file mode 100644 (file)
index 0000000..ef74fd1
Binary files /dev/null and b/data/quickpanel.png differ
diff --git a/data/quickpanel.sh.in b/data/quickpanel.sh.in
new file mode 100644 (file)
index 0000000..cf77090
--- /dev/null
@@ -0,0 +1 @@
+@BINDIR@/@PROJECT_NAME@ &
diff --git a/data/quickpanel.xml.in b/data/quickpanel.xml.in
new file mode 100755 (executable)
index 0000000..341733c
--- /dev/null
@@ -0,0 +1,11 @@
+<?xml version="1.0" encoding="utf-8"?>
+<manifest xmlns="http://tizen.org/ns/packages" package="@PKGNAME@" version="0.3.8-1" install-location="internal-only">
+       <label>@PROJECT_NAME@</label>
+       <author email="yjoo93.park@samsung.com" href="www.samsung.com">Youngjoo Park</author>
+       <author email="seungtaek.chung@samsung.com" href="www.samsung.com">seungtaek chung</author>
+       <author email="ys4610.ko@samsung.com" href="www.samsung.com">Youngsub Ko</author>
+       <description>@PROJECT_NAME@</description>
+       <ui-application appid="@PKGNAME@" exec="@BINDIR@/@PROJECT_NAME@" nodisplay="true" multiple="false" type="capp" taskmanage="false">
+               <label>@PROJECT_NAME@</label>
+       </ui-application>
+</manifest>
diff --git a/data/quickpanel_def.h b/data/quickpanel_def.h
new file mode 100755 (executable)
index 0000000..aa31f93
--- /dev/null
@@ -0,0 +1,32 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QUICKPANEL_EDC_DEF_H__
+#define __QUICKPANEL_EDC_DEF_H__
+
+#define QP_INDICATOR_H 0
+#define QP_INDICATOR_COMPENSATE_H      50
+
+#define QP_HANDLE_H    64
+#define QP_HANDLE_TOTAL_H      120
+#define QP_SPN_H 80
+
+#define QP_BG_VISIBILITY       0
+#define QP_BG_COLOR    255 255 255 255
+#define QP_SETTING_BG_COLOR 0 0 0 255
+#define QP_SETTING_ICON_BG_COLOR 28 29 30 255
+#define QP_SETTING_ICON_CRACK_COLOR 77 77 77 255
+#endif /*__QUICKPANEL_EDC_DEF_H__*/
diff --git a/data/quickpanel_noti.edc b/data/quickpanel_noti.edc
new file mode 100755 (executable)
index 0000000..c693f3c
--- /dev/null
@@ -0,0 +1,262 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+group {
+       name: "quickpanel/noti";
+       parts {
+               part {
+                       name: "background";
+                       type: RECT;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               color: QP_BG_COLOR;
+                               visible: QP_BG_VISIBILITY;
+                       }
+               }
+
+               part {
+                       name: "qp.noti.padding.top";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               fixed: 0 1;
+                               rel2.relative: 1.0 0.0;
+                               align: 0.5 0.0;
+                               visible: 0;
+                       }
+               }
+
+               part {
+                       name: "qp.noti.padding.left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               fixed: 1 0;
+                               rel2.relative: 0.0 1.0;
+                               align: 0.0 0.5;
+                               visible: 0;
+                       }
+               }
+
+               part {
+                       name: "qp.noti.padding.right";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 0;
+                               fixed: 1 0;
+                               rel1.relative: 1.0 0.0;
+                               align: 1.0 0.5;
+                               visible: 0;
+                       }
+               }
+
+               ///////////////////////////////////////////////////////////////////////////////////////
+               //
+               // Toggle AREA
+               //
+               ///////////////////////////////////////////////////////////////////////////////////////
+
+               part{
+                       name: "qp.noti.swallow.toggle";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 1 1;
+                               rel1 {
+                                       relative: 1.0 1.0;
+                                       to_x: "qp.noti.padding.left";
+                                       to_y: "qp.noti.padding.top";
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                                       to_x: "qp.noti.padding.right";
+                                       to_y: "qp.noti.padding.top";
+                               }
+                               align: 0.5 0.0;
+                       }
+               }
+
+               ///////////////////////////////////////////////////////////////////////////////////////
+               //
+               // NOTIFICATION LIST AREA
+               //
+               ///////////////////////////////////////////////////////////////////////////////////////
+
+               part {
+                       name: "qp.noti.rect.noti";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       relative: 1.0 1.0;
+                                       to_x: "qp.noti.padding.left";
+                                       to_y: "qp.noti.swallow.toggle";
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                                       to_x: "qp.noti.padding.right";
+                                       to_y: "qp.noti.rect.spn";
+                               }
+                               visible: 0;
+                       }
+               }
+
+               ////////////////////////////////////////////////////////////////////////////////
+               //
+               // LIST AREA
+               //
+               ///////////////////////////////////////////////////////////////////////////////
+
+               part {
+                       name: "qp.noti.swallow.notilist";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1.to: "qp.noti.rect.noti";
+                               rel2.to: "qp.noti.rect.noti";
+                               align: 0.5 0.0;
+                       }
+               }
+
+               ///////////////////////////////////////////////////////////////////////////////////////
+               //
+               // IDLE TEXT
+               //
+               ///////////////////////////////////////////////////////////////////////////////////////
+
+               part {
+                       name: "qp.noti.spn.padding.left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 20 0;
+                               fixed: 1 0;
+                               rel2.relative: 0.0 1.0;
+                               align: 0.0 0.5;
+                               visible: 0;
+                       }
+               }
+
+               part {
+                       name: "qp.noti.spn.padding.right";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 20 0;
+                               fixed: 1 0;
+                               rel1.relative: 1.0 0.0;
+                               align: 1.0 0.5;
+                               visible: 0;
+                       }
+               }
+
+               part {
+                       name: "qp.noti.rect.spn";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 44;
+                               fixed: 0 1;
+                               align: 0.5 1.0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                                       to: "qp.noti.padding.bottom";
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                                       to: "qp.noti.padding.bottom";
+                               }
+                               color: QP_BG_COLOR;
+                               visible: QP_BG_VISIBILITY;
+                       }
+               }
+
+               part {
+                       name: "qp.noti.spn.padding.top";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to_y: "qp.noti.swallow.spn";
+                               }
+                               rel2 {
+                                       to_y: "qp.noti.rect.spn";
+                               }
+                               color: QP_BG_COLOR;
+                               visible: QP_BG_VISIBILITY;
+                       }
+               }
+
+               part {
+                       name: "qp.noti.swallow.spn";
+                       type: SWALLOW;
+                       scale: 1;
+                       mouse_events: 0;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                                       to_x: "qp.noti.spn.padding.left";
+                                       to_y: "qp.noti.rect.spn";
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                                       to_x: "qp.noti.spn.padding.right";
+                                       to_y: "qp.noti.rect.spn";
+                               }
+                               align: 0.5 1.0;
+                       }
+               }
+
+               ///////////////////////////////////////////////////////////////////////////////////////
+               //
+               // BOTTOM PADDING
+               //
+               ///////////////////////////////////////////////////////////////////////////////////////
+               part {
+                       name: "qp.noti.padding.bottom";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 1;
+                               min: 0 0;
+                               align: 0.5 1.0;
+                               rel1 { relative: 0.0 1.0; }
+                               color: QP_BG_COLOR;
+                               visible: QP_BG_VISIBILITY;
+                       }
+               }
+       }
+
+
+}
+
diff --git a/data/quickpanel_notibox.edc b/data/quickpanel_notibox.edc
new file mode 100755 (executable)
index 0000000..4f5ce68
--- /dev/null
@@ -0,0 +1,2566 @@
+#define BOX_COLOR_BG 28 29 30 255
+#define BOX_WIDTH_P 340
+#define BOX_HEIGHT_P 400
+#define BOX_WIDTH_L 409
+#define BOX_HEIGHT_L 400
+
+#define BOX_MARGIN_TEXT_H 14
+#define BOX_TEXT_CONTENTS_HEIGHT 40
+#define BOX_TEXT_INFO_HEIGHT 36
+#define BOX_TEXT_SUB_WIDTH 120
+#define BOX_TEXT_SUB_PADDING_WIDTH 10
+
+//#define DEBUG
+//#define DEBUG_TEXT
+
+images {
+       image: "quick_icon_bg_01.png" COMP;
+       image: "quick_btn_close_press.png" COMP;
+       image: "quick_btn_close_dim.png" COMP;
+       image: "quick_btn_close_nor.png" COMP;
+       image: "quick_image_dimmed_port.png" COMP;
+       image: "quick_image_dimmed_land.png" COMP;
+       image: "quick_icon_bg_small.png" COMP;
+}
+
+#define BOX_CONTENTS_FONT "Tizen:style=Regular"
+#define BOX_CONTENTS_FONT_SIZE 28
+#define BOX_CONTENTS_FONT_COLOR 248 246 239 255
+
+#define BOX_FONT_SHADOW_COLOR 0 0 0 191
+#define BOX_FONT_OUTLINE_COLOR 0 0 0 191
+#define BOX_INFO_FONT "Tizen:style=Regular"
+#define BOX_INFO_FONT_SIZE 28
+#define BOX_INFO_FONT_COLOR 248 246 239 255
+
+#define BOX_INFO_SUB_FONT "Tizen:style=Regular"
+#define BOX_INFO_SUB_FONT_SIZE 28
+#define BOX_INFO_SUB_FONT_COLOR 248 246 239 255
+
+#define BOX_INFO_COUNT_FONT "Tizen:style=Regular"
+#define BOX_INFO_COUNT_FONT_SIZE 58
+#define BOX_INFO_COUNT_FONT_COLOR 248 246 239 255
+
+#define TEXT_CLASS_TIZEN "tizen"
+
+styles {
+       style {
+               name: "notibox_title";
+               base: "font=Tizen:style=Regular text_class=tizen font_size=36 color=#F8F6EF wrap=mixed style=soft_shadow shadow_color=#000000BF";
+               tag: "br" "\n";
+       }
+}
+
+group {
+       name: "quickpanel/notibox/single_multi";
+
+       script {
+               public g_is_cloase_button_disabled;
+               public g_is_show_dim_bg;
+
+               public init_variables() {
+                       set_int(g_is_cloase_button_disabled, 0);
+                       set_int(g_is_show_dim_bg, 0);
+               }
+       }
+
+       parts {
+               part {
+                       name: "background";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_WIDTH_P BOX_HEIGHT_P;
+                               color: BOX_COLOR_BG;
+                               align: 0.0 0.0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: BOX_WIDTH_L BOX_HEIGHT_L;
+                       }
+               }
+
+               //section layout for margin
+
+               part {
+                       name: "margin.left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_MARGIN_TEXT_H 0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.right";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_MARGIN_TEXT_H 0;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.right.icon";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 6 0;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 0 255 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.top.icon";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 44;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 255 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.top.text";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 20;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.bottom";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 22;
+                               rel1 {
+                                       relative: 0.0 1.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 0 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               //section layout for elements
+               //section layout for icon
+               part {
+                       name: "rect.icon.bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 124 124;
+                               rel1 {
+                                       to_x:"margin.right.icon";
+                                       to_y:"margin.top.icon";
+                                       relative: 0.0 1.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right.icon";
+                                       to_y:"margin.top.icon";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 255 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.icon";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 124 124;
+                               rel1 {
+                                       to:"rect.icon.bg";
+                                       relative: 0.5 0.5;
+                               }
+                               rel2 {
+                                       to:"rect.icon.bg";
+                                       relative: 0.5 0.5;
+                               }
+                               align: 0.5 0.5;
+#ifdef DEBUG
+                               color: 205 205 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.icon.sub.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 12;
+                               rel1 {
+                                       to:"rect.icon.bg";
+                                       relative: 0.0 1.0;
+                               }
+                               rel2 {
+                                       to:"rect.icon.bg";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 235 215 235 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.icon.sub";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 56 56;
+                               rel1 {
+                                       to:"rect.icon.sub.padding";
+                                       relative: 1.0 1.0;
+                               }
+                               rel2 {
+                                       to:"rect.icon.sub.padding";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 1.0 1.0;
+#ifdef DEBUG
+                               color: 255 0 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               //section layout for close button
+               part {
+                       name: "rect.button.close";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 38 38;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 255 255 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               //section layout for texts
+               part {
+                       name: "rect.text.title";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 124;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"margin.top.text";
+                                       relative: 1.0 1.0;
+                               }
+                               rel2 {
+                                       to_x:"rect.icon.bg";
+                                       to_y:"margin.top.text";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 100 100 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               part {
+                       name: "rect.text.info.2";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 BOX_TEXT_INFO_HEIGHT;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"margin.bottom";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 100 100 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.info.sub.2";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_TEXT_SUB_WIDTH BOX_TEXT_INFO_HEIGHT;
+                               rel1 {
+                                       to_x:"margin.right";
+                                       to_y:"margin.bottom";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"margin.bottom";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 1.0 1.0;
+#ifdef DEBUG
+                               color: 76 76 76 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.info.sub.2.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_TEXT_SUB_PADDING_WIDTH 0;
+                               rel1 {
+                                       to:"rect.text.info.sub.2";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       to:"rect.text.info.sub.2";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 1.0 1.0;
+#ifdef DEBUG
+                               color: 90 90 90 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.info.2.short";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.info.2";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"rect.text.info.sub.2.padding";
+                                       to_y:"rect.text.info.2";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 102 103 104 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.info.1";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 BOX_TEXT_INFO_HEIGHT;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.info.2";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.text.info.2";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 100 150 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.info.sub.1";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_TEXT_SUB_WIDTH BOX_TEXT_INFO_HEIGHT;
+                               rel1 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.text.info.2";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.text.info.2";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 1.0 1.0;
+#ifdef DEBUG
+                               color: 76 76 76 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.info.sub.1.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_TEXT_SUB_PADDING_WIDTH 0;
+                               rel1 {
+                                       to:"rect.text.info.sub.1";
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       to:"rect.text.info.sub.1";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 1.0 1.0;
+#ifdef DEBUG
+                               color: 90 90 90 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.info.1.short";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.info.1";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"rect.text.info.sub.1.padding";
+                                       to_y:"rect.text.info.1";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 102 103 104 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.margin.contents";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 20;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.info.1";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.text.info.1";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 255 255 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.contents";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 BOX_TEXT_CONTENTS_HEIGHT;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 100 150 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.count";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 40 58;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 190 190 190 255;
+#else
+                               visible:0;
+#endif
+                       }
+                       description {
+                               state: "count1" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "count2" 0.0;
+                               inherit: "default" 0.0;
+                               min: 72 58;
+                       }
+                       description {
+                               state: "count3" 0.0;
+                               inherit: "default" 0.0;
+                               min: 103 58;
+                       }
+                       description {
+                               state: "count4" 0.0;
+                               inherit: "default" 0.0;
+                               min: 137 58;
+                       }
+                       description {
+                               state: "count5" 0.0;
+                               inherit: "default" 0.0;
+                               min: 167 58;
+                       }
+               }
+               part {
+                       name: "rect.text.count.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 10 58;
+                               rel1 {
+                                       to:"rect.text.count";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to:"rect.text.count";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.contents.short";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 BOX_TEXT_CONTENTS_HEIGHT;
+                               rel1 {
+                                       to_x:"rect.text.count.padding";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 40 255 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               //section objects
+               part{
+                       name: "object.icon.background";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "background";}
+                               rel2 {to: "background";}
+                       }
+               }
+               part{
+                       name: "object.icon.bg";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.icon.bg";}
+                               rel2 {to: "rect.icon.bg";}
+                               image {
+                                       normal:"quick_icon_bg_01.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "show" 0.0;
+                               inherit: "default" 0.0;
+                               visible:1;
+                       }
+                       description {
+                               state: "hide" 0.0;
+                               inherit: "default" 0.0;
+                               visible:0;
+                       }
+               }
+               part{
+                       name: "object.icon.bg.dim";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "background";}
+                               rel2 {to: "background";}
+                               image {
+                                       normal:"quick_image_dimmed_port.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible:0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_image_dimmed_port.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible:1;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_image_dimmed_land.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible:1;
+                       }
+               }
+               part{
+                       name: "object.icon";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.icon";}
+                               rel2 {to: "rect.icon";}
+                       }
+               }
+               part{
+                       name: "object.icon.sub.bg";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.icon.sub";}
+                               rel2 {to: "rect.icon.sub";}
+                               image {
+                                       normal:"quick_icon_bg_small.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible:0;
+                       }
+                       description {
+                               state: "show" 0.0;
+                               inherit: "default" 0.0;
+                               visible:1;
+                       }
+                       description {
+                               state: "hide" 0.0;
+                               inherit: "default" 0.0;
+                               visible:0;
+                       }
+               }
+               part{
+                       name: "object.icon.sub";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.icon.sub";}
+                               rel2 {to: "rect.icon.sub";}
+                       }
+               }
+
+               part {
+                       name: "object.text.title";
+                       scale: 1;
+                       type: TEXTBLOCK;
+                       effect: SOFT_SHADOW;
+                       multiline: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.title";}
+                               rel2 {to: "rect.text.title";}
+                               text {
+                                       style: "notibox_title";
+                                       align: 0.0 0.0;
+#ifdef DEBUG_TEXT
+                                       text: "some string of text to display";
+#endif
+                               }
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                       }
+               }
+
+               part {
+                       name: "object.text.contents";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.contents";}
+                               rel2 {to: "rect.text.contents";}
+                               color: BOX_CONTENTS_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_CONTENTS_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_CONTENTS_FONT_SIZE;
+                                       align: 0.0 0.5;
+#ifdef DEBUG_TEXT
+                                       text: "some string of text to display";
+#endif
+                               }
+                       }
+               }
+               part {
+                       name: "object.text.contents.short";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.contents.short";}
+                               rel2 {to: "rect.text.contents.short";}
+                               color: BOX_CONTENTS_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_CONTENTS_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_CONTENTS_FONT_SIZE;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+
+               part {
+                       name: "object.text.count";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.count";}
+                               rel2 {to: "rect.text.count";}
+                               color: BOX_INFO_COUNT_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_INFO_COUNT_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_INFO_COUNT_FONT_SIZE;
+                                       align: 0.0 0.5;
+#ifdef DEBUG_TEXT
+                                       text: "3";
+#endif
+                               }
+                       }
+               }
+
+               part {
+                       name: "object.text.info.1";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.info.1";}
+                               rel2 {to: "rect.text.info.1";}
+                               color: BOX_INFO_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_INFO_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_INFO_FONT_SIZE;
+                                       align: 0.0 0.5;
+#ifdef DEBUG_TEXT
+                                       text: "some string of text to display";
+#endif
+                               }
+                       }
+               }
+               part {
+                       name: "object.text.info.1.short";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.info.1.short";}
+                               rel2 {to: "rect.text.info.1.short";}
+                               color: BOX_INFO_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_INFO_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_INFO_FONT_SIZE;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "object.text.info.sub.1";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.info.sub.1";}
+                               rel2 {to: "rect.text.info.sub.1";}
+                               color: BOX_INFO_SUB_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_INFO_SUB_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_INFO_SUB_FONT_SIZE;
+                                       align: 0.0 0.5;
+#ifdef DEBUG_TEXT
+                                       text: "some string of text to display";
+#endif
+                               }
+                       }
+               }
+
+               part {
+                       name: "object.text.info.2";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.info.2";}
+                               rel2 {to: "rect.text.info.2";}
+                               color: BOX_INFO_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_INFO_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_INFO_FONT_SIZE;
+                                       align: 0.0 0.5;
+#ifdef DEBUG_TEXT
+                                       text: "some string of text to display";
+#endif
+                               }
+                       }
+               }
+               part {
+                       name: "object.text.info.2.short";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.info.2.short";}
+                               rel2 {to: "rect.text.info.2.short";}
+                               color: BOX_INFO_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_INFO_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_INFO_FONT_SIZE;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+               part {
+                       name: "object.text.info.sub.2";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.info.sub.2";}
+                               rel2 {to: "rect.text.info.sub.2";}
+                               color: BOX_INFO_SUB_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_INFO_SUB_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_INFO_SUB_FONT_SIZE;
+                                       align: 0.0 0.5;
+#ifdef DEBUG_TEXT
+                                       text: "some string of text to display";
+#endif
+                               }
+                       }
+               }
+               part {
+                       name: "object.layer.touch";
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "background";}
+                               rel2 {to: "background";}
+                               color: 0 0 0 0;
+                       }
+               }
+               part{
+                       name: "object.button.close";
+                       type:RECT;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               min:100 100;
+                               rel1 {
+                                       to: "rect.button.close";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to: "rect.button.close";
+                                       relative: 1.0 0.0;
+                               }
+                               color: 0 0 0 0;
+                               align: 1.0 0.0;
+                       }
+               }
+               part{
+                       name: "object.image.button.close";
+                       type:IMAGE;
+                       scale:1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.button.close";}
+                               rel2 {to: "rect.button.close";}
+                               image {
+                                       normal:"quick_btn_close_nor.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               align: 0.0 1.0;
+                       }
+                       description {
+                               state: "normal" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "pressed" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_btn_close_press.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               align: 0.0 1.0;
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_btn_close_dim.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               align: 0.0 1.0;
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "init.layout";
+                       signal: "load";
+                       source: "";
+                       in: 0.0 0.0;
+                       script{
+                               init_variables();
+                       }
+               }
+               program{
+                       name: "box.show.dim";
+                       signal: "box.show.dim";
+                       source: "box.prog";
+                       script {
+                               set_int(g_is_show_dim_bg, 1);
+                       }
+               }
+               program{
+                       name: "box.hide.dim";
+                       signal: "box.hide.dim";
+                       source: "box.prog";
+                       script {
+                               set_int(g_is_show_dim_bg, 0);
+                       }
+               }
+               program{
+                       name: "box.portrait";
+                       signal: "box.portrait";
+                       source: "box.prog";
+                       action: STATE_SET "portrait" 0.0;
+                       target: "background";
+                       after: "box.portrait.custom";
+               }
+               program{
+                       name: "box.landscape";
+                       signal: "box.landscape";
+                       source: "box.prog";
+                       action: STATE_SET "landscape" 0.0;
+                       target: "background";
+                       after: "box.landscape.custom";
+               }
+               program{
+                       name: "box.portrait.custom";
+                       source: "box.prog";
+                       script {
+                               if (get_int(g_is_show_dim_bg) == 1) {
+                                       set_state(PART:"object.icon.bg.dim", "portrait", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "box.landscape.custom";
+                       source: "box.prog";
+                       script {
+                               if (get_int(g_is_show_dim_bg) == 1) {
+                                       set_state(PART:"object.icon.bg.dim", "landscape", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "box.touch.down";
+                       signal: "mouse,clicked,1";
+                       source: "object.layer.touch";
+                       action: SIGNAL_EMIT "selected" "object.layer.touch";
+               }
+               program{
+                       name: "box.button.close.1";
+                       signal: "mouse,down,1";
+                       source: "object.button.close";
+                       script {
+                               if (get_int(g_is_cloase_button_disabled) == 0) {
+                                       set_state(PART:"object.image.button.close", "pressed", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "box.button.close.2";
+                       signal: "mouse,up,1";
+                       source: "object.button.close";
+                       script {
+                               set_state(PART:"object.image.button.close", "normal", 0.0);
+                       }
+               }
+               program{
+                       name: "box.button.close.3";
+                       signal: "mouse,clicked,1";
+                       source: "object.button.close";
+                       script {
+                               if (get_int(g_is_cloase_button_disabled) == 0) {
+                                       set_state(PART:"object.image.button.close", "normal", 0.0);
+                                       emit("deleted", "object.layer.touch");
+                               }
+                       }
+               }
+               program{
+                       name: "box.button.close.4";
+                       signal: "disabled";
+                       source: "object.button.close";
+                       script {
+                               set_state(PART:"object.image.button.close", "disabled", 0.0);
+                               set_int(g_is_cloase_button_disabled, 1);
+                       }
+               }
+               program{
+                       name: "box.show.icon.bg";
+                       signal: "box.show.icon.bg";
+                       source: "box.prog";
+                       action: STATE_SET "show" 0.0;
+                       target: "object.icon.bg";
+               }
+               program{
+                       name: "box.hide.icon.bg";
+                       signal: "box.hide.icon.bg";
+                       source: "box.prog";
+                       action: STATE_SET "hide" 0.0;
+                       target: "object.icon.bg";
+               }
+               program{
+                       name: "box.show.icon.sub.bg";
+                       signal: "box.show.sub.bg";
+                       source: "box.prog";
+                       action: STATE_SET "show" 0.0;
+                       target: "object.icon.sub.bg";
+               }
+               program{
+                       name: "box.hide.icon.sub.bg";
+                       signal: "box.hide.sub.bg";
+                       source: "box.prog";
+                       action: STATE_SET "hide" 0.0;
+                       target: "object.icon.sub.bg";
+               }
+               program{
+                       name: "box.count.1";
+                       signal: "box.count.1";
+                       source: "box.prog";
+                       action: STATE_SET "count1" 0.0;
+                       target: "rect.text.count";
+               }
+               program{
+                       name: "box.count.2";
+                       signal: "box.count.2";
+                       source: "box.prog";
+                       action: STATE_SET "count2" 0.0;
+                       target: "rect.text.count";
+               }
+               program{
+                       name: "box.count.3";
+                       signal: "box.count.3";
+                       source: "box.prog";
+                       action: STATE_SET "count3" 0.0;
+                       target: "rect.text.count";
+               }
+               program{
+                       name: "box.count.4";
+                       signal: "box.count.4";
+                       source: "box.prog";
+                       action: STATE_SET "count4" 0.0;
+                       target: "rect.text.count";
+               }
+               program{
+                       name: "box.count.5";
+                       signal: "box.count.5";
+                       source: "box.prog";
+                       action: STATE_SET "count5" 0.0;
+                       target: "rect.text.count";
+               }
+       }
+}
+
+
+group {
+       name: "quickpanel/notibox/thumbnail";
+
+       script {
+               public g_is_cloase_button_disabled;
+               public g_is_show_dim_bg;
+
+               public init_variables() {
+                       set_int(g_is_cloase_button_disabled, 0);
+                       set_int(g_is_show_dim_bg, 0);
+               }
+       }
+
+       parts {
+               part {
+                       name: "background";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_WIDTH_P BOX_HEIGHT_P;
+                               color: BOX_COLOR_BG;
+                               align: 0.0 0.0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: BOX_WIDTH_L BOX_HEIGHT_L;
+                       }
+               }
+
+               //section layout for margin
+
+               part {
+                       name: "margin.left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_MARGIN_TEXT_H 0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.right";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: BOX_MARGIN_TEXT_H 0;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.left.thumnail";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 15 0;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 0.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 25 0 60 255;
+#else
+                               visible:0;
+#endif
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: 14 0;
+                       }
+               }
+               part {
+                       name: "margin.right.thumnail";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 15 0;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 25 0 60 255;
+#else
+                               visible:0;
+#endif
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: 14 0;
+                       }
+               }
+               part {
+                       name: "margin.right.icon";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 6 0;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 0 255 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.top.icon";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 44;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 255 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.top.text";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 20;
+                               rel1 {
+                                       relative: 0.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "margin.bottom";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 26;
+                               rel1 {
+                                       relative: 0.0 1.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 0 0 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               //section layout for elements
+               //section layout for icon
+               part {
+                       name: "rect.icon.bg";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 124 124;
+                               rel1 {
+                                       to_x:"margin.right.icon";
+                                       to_y:"margin.top.icon";
+                                       relative: 0.0 1.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right.icon";
+                                       to_y:"margin.top.icon";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 255 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.icon";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 124 124;
+                               rel1 {
+                                       to:"rect.icon.bg";
+                                       relative: 0.5 0.5;
+                               }
+                               rel2 {
+                                       to:"rect.icon.bg";
+                                       relative: 0.5 0.5;
+                               }
+                               align: 0.5 0.5;
+#ifdef DEBUG
+                               color: 205 205 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.icon.sub.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 12;
+                               rel1 {
+                                       to:"rect.icon.bg";
+                                       relative: 0.0 1.0;
+                               }
+                               rel2 {
+                                       to:"rect.icon.bg";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 235 215 235 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.icon.sub";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 56 56;
+                               rel1 {
+                                       to:"rect.icon.sub.padding";
+                                       relative: 1.0 1.0;
+                               }
+                               rel2 {
+                                       to:"rect.icon.sub.padding";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 1.0 1.0;
+#ifdef DEBUG
+                               color: 255 0 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               //section layout for close button
+               part {
+                       name: "rect.button.close";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 38 38;
+                               rel1 {
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       relative: 1.0 0.0;
+                               }
+                               align: 1.0 0.0;
+#ifdef DEBUG
+                               color: 255 255 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               //section layout for texts
+               part {
+                       name: "rect.text.title";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 124;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"margin.top.text";
+                                       relative: 1.0 1.0;
+                               }
+                               rel2 {
+                                       to_x:"rect.icon.bg";
+                                       to_y:"margin.top.text";
+                                       relative: 0.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 100 100 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+
+               part {
+                       name: "rect.text.margin.contents";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 20;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.thumbnail.list.1";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.thumbnail.list.1";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 255 255 255 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.contents";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 BOX_TEXT_CONTENTS_HEIGHT;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 100 150 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.count";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 58 58;
+                               rel1 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.left";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 190 190 190 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.count.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 10 58;
+                               rel1 {
+                                       to:"rect.text.count";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to:"rect.text.count";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.text.contents.short";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 BOX_TEXT_CONTENTS_HEIGHT;
+                               rel1 {
+                                       to_x:"rect.text.count.padding";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.right";
+                                       to_y:"rect.text.margin.contents";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 40 255 100 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+
+               //section layout for thumbnail
+               part {
+                       name: "rect.thumbnail.list.1";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 70 70;
+                               rel1 {
+                                       to_x:"margin.left.thumnail";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"margin.left.thumnail";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 255 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.thumbnail.list.1.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 10 0;
+                               rel1 {
+                                       to:"rect.thumbnail.list.1";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to:"rect.thumbnail.list.1";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: 8 0;
+                       }
+               }
+               part {
+                       name: "rect.thumbnail.list.2";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 70 70;
+                               rel1 {
+                                       to_x:"rect.thumbnail.list.1.padding";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"rect.thumbnail.list.1.padding";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 255 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.thumbnail.list.2.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 10 0;
+                               rel1 {
+                                       to:"rect.thumbnail.list.2";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to:"rect.thumbnail.list.2";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: 8 0;
+                       }
+               }
+               part {
+                       name: "rect.thumbnail.list.3";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 70 70;
+                               rel1 {
+                                       to_x:"rect.thumbnail.list.2.padding";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"rect.thumbnail.list.2.padding";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 255 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.thumbnail.list.3.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 10 0;
+                               rel1 {
+                                       to:"rect.thumbnail.list.3";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to:"rect.thumbnail.list.3";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: 8 0;
+                       }
+               }
+               part {
+                       name: "rect.thumbnail.list.4";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 70 70;
+                               rel1 {
+                                       to_x:"rect.thumbnail.list.3.padding";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"rect.thumbnail.list.3.padding";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 255 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+               }
+               part {
+                       name: "rect.thumbnail.list.4.padding";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 10 0;
+                               rel1 {
+                                       to:"rect.thumbnail.list.4";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to:"rect.thumbnail.list.4";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+#ifdef DEBUG
+                               color: 0 0 0 255;
+#else
+                               visible:0;
+#endif
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               min: 8 0;
+                       }
+               }
+               part {
+                       name: "rect.thumbnail.list.5";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 70 70;
+                               rel1 {
+                                       to_x:"rect.thumbnail.list.4.padding";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x:"rect.thumbnail.list.4.padding";
+                                       to_y:"margin.bottom";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 0.0 1.0;
+#ifdef DEBUG
+                               color: 255 0 0 255;
+#else
+                               visible:0;
+#endif
+
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               visible:1;
+                       }
+               }
+
+               part{
+                       name: "object.icon.background";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "background";}
+                               rel2 {to: "background";}
+                       }
+               }
+               part{
+                       name: "object.icon.bg";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.icon.bg";}
+                               rel2 {to: "rect.icon.bg";}
+                               image {
+                                       normal:"quick_icon_bg_01.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                       }
+                       description {
+                               state: "show" 0.0;
+                               inherit: "default" 0.0;
+                               visible:1;
+                       }
+                       description {
+                               state: "hide" 0.0;
+                               inherit: "default" 0.0;
+                               visible:0;
+                       }
+               }
+               part{
+                       name: "object.icon.bg.dim";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "background";}
+                               rel2 {to: "background";}
+                               image {
+                                       normal:"quick_image_dimmed_port.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible:0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_image_dimmed_port.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible:1;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_image_dimmed_land.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible:1;
+                       }
+               }
+               part{
+                       name: "object.icon";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.icon";}
+                               rel2 {to: "rect.icon";}
+                       }
+               }
+               part{
+                       name: "object.icon.sub.bg";
+                       type:IMAGE;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.icon.sub";}
+                               rel2 {to: "rect.icon.sub";}
+                               image {
+                                       normal:"quick_icon_bg_small.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               visible:0;
+                       }
+                       description {
+                               state: "show" 0.0;
+                               inherit: "default" 0.0;
+                               visible:1;
+                       }
+                       description {
+                               state: "hide" 0.0;
+                               inherit: "default" 0.0;
+                               visible:0;
+                       }
+               }
+               part{
+                       name: "object.icon.sub";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.icon.sub";}
+                               rel2 {to: "rect.icon.sub";}
+                       }
+               }
+
+               //section thumbnail
+               part{
+                       name: "object.thumbnail.list.1";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.thumbnail.list.1";}
+                               rel2 {to: "rect.thumbnail.list.1";}
+                       }
+               }
+               part{
+                       name: "object.thumbnail.list.2";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.thumbnail.list.2";}
+                               rel2 {to: "rect.thumbnail.list.2";}
+                       }
+               }
+               part{
+                       name: "object.thumbnail.list.3";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.thumbnail.list.3";}
+                               rel2 {to: "rect.thumbnail.list.3";}
+                       }
+               }
+               part{
+                       name: "object.thumbnail.list.4";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.thumbnail.list.4";}
+                               rel2 {to: "rect.thumbnail.list.4";}
+                       }
+               }
+               part{
+                       name: "object.thumbnail.list.5";
+                       type:SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               fixed: 0 0;
+                               rel1 {to: "rect.thumbnail.list.5";}
+                               rel2 {to: "rect.thumbnail.list.5";}
+                               visible: 0;
+                       }
+                       description {
+                               state: "portrait" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "landscape" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+
+               part {
+                       name: "object.text.title";
+                       scale: 1;
+                       type: TEXTBLOCK;
+                       effect: SOFT_SHADOW;
+                       multiline: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.title";}
+                               rel2 {to: "rect.text.title";}
+                               text {
+                                       style: "notibox_title";
+                                       align: 0.0 0.0;
+#ifdef DEBUG_TEXT
+                                       text: "some string of text to display";
+#endif
+                               }
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                       }
+               }
+
+               part {
+                       name: "object.text.contents";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.contents";}
+                               rel2 {to: "rect.text.contents";}
+                               color: BOX_CONTENTS_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_CONTENTS_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_CONTENTS_FONT_SIZE;
+                                       align: 0.0 0.5;
+#ifdef DEBUG_TEXT
+                                       text: "some string of text to display";
+#endif
+                               }
+                       }
+               }
+               part {
+                       name: "object.text.contents.short";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.contents.short";}
+                               rel2 {to: "rect.text.contents.short";}
+                               color: BOX_CONTENTS_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_CONTENTS_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_CONTENTS_FONT_SIZE;
+                                       align: 0.0 0.5;
+                               }
+                       }
+               }
+
+               part {
+                       name: "object.text.count";
+                       scale: 1;
+                       type: TEXT;
+                       effect: SOFT_SHADOW;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.text.count";}
+                               rel2 {to: "rect.text.count";}
+                               color: BOX_INFO_COUNT_FONT_COLOR;
+                               color2: BOX_FONT_SHADOW_COLOR;
+                               color3: BOX_FONT_OUTLINE_COLOR;
+                               text {
+                                       font: BOX_INFO_COUNT_FONT;
+                                       text_class: TEXT_CLASS_TIZEN;
+                                       size: BOX_INFO_COUNT_FONT_SIZE;
+                                       align: 0.0 0.5;
+#ifdef DEBUG_TEXT
+                                       text: "3";
+#endif
+                               }
+                       }
+               }
+               part {
+                       name: "object.layer.touch";
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       scale: 1;
+                       type: RECT;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "background";}
+                               rel2 {to: "background";}
+                               color: 0 0 0 0;
+                       }
+               }
+               part{
+                       name: "object.button.close";
+                       type:RECT;
+                       scale:1;
+                       description {
+                               state: "default" 0.0;
+                               min:64 64;
+                               rel1 {
+                                       to: "rect.button.close";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to: "rect.button.close";
+                                       relative: 1.0 0.0;
+                               }
+                               align: 1.0 0.0;
+                               color: 0 0 0 0;
+                       }
+               }
+               part{
+                       name: "object.image.button.close";
+                       type:IMAGE;
+                       scale:1;
+                       repeat_events: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {to: "rect.button.close";}
+                               rel2 {to: "rect.button.close";}
+                               image {
+                                       normal:"quick_btn_close_nor.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               align: 0.0 1.0;
+                       }
+                       description {
+                               state: "normal" 0.0;
+                               inherit: "default" 0.0;
+                       }
+                       description {
+                               state: "pressed" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_btn_close_press.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               align: 0.0 1.0;
+                       }
+                       description {
+                               state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               image {
+                                       normal:"quick_btn_close_dim.png";
+                                       border: 0 0 0 0;
+                                       border_scale: 1;
+                               }
+                               align: 0.0 1.0;
+                       }
+               }
+       }
+
+       programs {
+               program {
+                       name: "init.layout";
+                       signal: "load";
+                       source: "";
+                       in: 0.0 0.0;
+                       script{
+                               init_variables();
+                       }
+               }
+               program{
+                       name: "box.show.dim";
+                       signal: "box.show.dim";
+                       source: "box.prog";
+                       script {
+                               set_int(g_is_show_dim_bg, 1);
+                       }
+               }
+               program{
+                       name: "box.hide.dim";
+                       signal: "box.hide.dim";
+                       source: "box.prog";
+                       script {
+                               set_int(g_is_show_dim_bg, 0);
+                       }
+               }
+               program{
+                       name: "box.portrait";
+                       signal: "box.portrait";
+                       source: "box.prog";
+                       action: STATE_SET "portrait" 0.0;
+                       target: "background";
+                       target: "margin.left.thumnail";
+                       target: "margin.right.thumnail";
+                       target: "rect.thumbnail.list.1.padding";
+                       target: "rect.thumbnail.list.2.padding";
+                       target: "rect.thumbnail.list.3.padding";
+                       target: "rect.thumbnail.list.4.padding";
+                       target: "rect.thumbnail.list.5";
+                       target: "object.thumbnail.list.5";
+                       after: "box.portrait.custom";
+               }
+               program{
+                       name: "box.landscape";
+                       signal: "box.landscape";
+                       source: "box.prog";
+                       action: STATE_SET "landscape" 0.0;
+                       target: "background";
+                       target: "margin.left.thumnail";
+                       target: "margin.right.thumnail";
+                       target: "rect.thumbnail.list.1.padding";
+                       target: "rect.thumbnail.list.2.padding";
+                       target: "rect.thumbnail.list.3.padding";
+                       target: "rect.thumbnail.list.4.padding";
+                       target: "rect.thumbnail.list.5";
+                       target: "object.thumbnail.list.5";
+                       after: "box.landscape.custom";
+               }
+               program{
+                       name: "box.portrait.custom";
+                       source: "box.prog";
+                       script {
+                               if (get_int(g_is_show_dim_bg) == 1) {
+                                       set_state(PART:"object.icon.bg.dim", "portrait", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "box.landscape.custom";
+                       source: "box.prog";
+                       script {
+                               if (get_int(g_is_show_dim_bg) == 1) {
+                                       set_state(PART:"object.icon.bg.dim", "landscape", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "box.touch.down";
+                       signal: "mouse,clicked,1";
+                       source: "object.layer.touch";
+                       action: SIGNAL_EMIT "selected" "object.layer.touch";
+               }
+               program{
+                       name: "box.button.close.1";
+                       signal: "mouse,down,1";
+                       source: "object.button.close";
+                       script {
+                               if (get_int(g_is_cloase_button_disabled) == 0) {
+                                       set_state(PART:"object.image.button.close", "pressed", 0.0);
+                               }
+                       }
+               }
+               program{
+                       name: "box.button.close.2";
+                       signal: "mouse,up,1";
+                       source: "object.button.close";
+                       script {
+                               set_state(PART:"object.image.button.close", "normal", 0.0);
+                       }
+               }
+               program{
+                       name: "box.button.close.3";
+                       signal: "mouse,clicked,1";
+                       source: "object.button.close";
+                       script {
+                               if (get_int(g_is_cloase_button_disabled) == 0) {
+                                       set_state(PART:"object.image.button.close", "normal", 0.0);
+                                       emit("deleted", "object.layer.touch");
+                               }
+                       }
+               }
+               program{
+                       name: "box.button.close.4";
+                       signal: "disabled";
+                       source: "object.button.close";
+                       script {
+                               set_state(PART:"object.image.button.close", "disabled", 0.0);
+                               set_int(g_is_cloase_button_disabled, 1);
+                       }
+               }
+               program{
+                       name: "box.show.icon.bg";
+                       signal: "box.show.icon.bg";
+                       source: "box.prog";
+                       action: STATE_SET "show" 0.0;
+                       target: "object.icon.bg";
+               }
+               program{
+                       name: "box.hide.icon.bg";
+                       signal: "box.hide.icon.bg";
+                       source: "box.prog";
+                       action: STATE_SET "hide" 0.0;
+                       target: "object.icon.bg";
+               }
+               program{
+                       name: "box.show.icon.sub.bg";
+                       signal: "box.show.sub.bg";
+                       source: "box.prog";
+                       action: STATE_SET "show" 0.0;
+                       target: "object.icon.sub.bg";
+               }
+               program{
+                       name: "box.hide.icon.sub.bg";
+                       signal: "box.hide.sub.bg";
+                       source: "box.prog";
+                       action: STATE_SET "hide" 0.0;
+                       target: "object.icon.sub.bg";
+               }
+       }
+}
\ No newline at end of file
diff --git a/data/quickpanel_spn.edc b/data/quickpanel_spn.edc
new file mode 100755 (executable)
index 0000000..ac2b3b2
--- /dev/null
@@ -0,0 +1,153 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://floralicense.org/license/
+ *
+ * Unless required by applicable law or agreed to in writing, software
+ * distributed under the License is distributed on an AS IS BASIS,
+ * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
+ * See the License for the specific language governing permissions and
+ * limitations under the License.
+ */
+
+group {
+       name: "quickpanel/spn";
+       parts {
+               part { name: "base";
+                       type: RECT;
+                       repeat_events: 1;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 QP_SPN_H;
+                               color: QP_BG_COLOR;
+                               visible: QP_BG_VISIBILITY;
+                       }
+               }
+               part { name: "elm.padding.left";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 26 0;
+                               fixed: 1 0;
+                               visible: 0;
+                               rel1.relative: 0.0 0.0;
+                               rel2.relative: 0.0 1.0;
+                               align: 0.0 0.0;
+                       }
+               }
+               part { name: "elm.padding.right";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 14 0;
+                               fixed: 1 0;
+                               visible: 0;
+                               rel1.relative: 1.0 0.0;
+                               rel2.relative: 1.0 0.0;
+                               align: 1.0 0.0;
+                       }
+               }
+               part { name: "elm.padding.top";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 11;
+                               fixed: 0 1;
+                               visible: 0;
+                               rel1.relative: 0.0 0.0;
+                               rel2.relative: 1.0 0.0;
+                               align: 0.0 0.0;
+                       }
+               }
+               part { name: "elm.padding.bottom";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 0 11;
+                               fixed: 0 1;
+                               visible: 0;
+                               rel1.relative: 0.0 1.0;
+                               rel2.relative: 1.0 1.0;
+                               align: 0.0 1.0;
+                       }
+               }
+
+               part { name: "elm.rect.spn";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 400 0;
+                               fixed: 1 0;
+                               rel1 {
+                                       to_x: "elm.padding.left";
+                                       relative: 1.0 0.0;
+                               }
+                               rel2 {
+                                       to_x: "elm.padding.left";
+                                       relative: 1.0 1.0;
+                               }
+                               align: 0.0 0.0;
+                               visible:0;
+                       }
+               }
+               part { name: "qp.spn.swallow";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to: "elm.rect.spn";
+                               }
+                               rel2 {
+                                       to: "elm.rect.spn";
+                               }
+                       }
+               }
+
+               part { name: "elm.rect.icon";
+                       type: RECT;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               min: 158 58;
+                               fixed: 1 1;
+                               rel1 {
+                                       to_x: "elm.padding.right";
+                                       to_y: "elm.padding.top";
+                                       relative: 0.0 1.0;
+                               }
+                               rel2 {
+                                       to_x: "elm.padding.right";
+                                       to_y: "elm.padding.bottom";
+                                       relative: 0.0 0.0;
+                               }
+                               align: 1.0 0.5;
+                               visible: 0;
+                       }
+               }
+               part { name: "qp.button.swallow";
+                       type: SWALLOW;
+                       scale: 1;
+                       description {
+                               state: "default" 0.0;
+                               rel1 {
+                                       to: "elm.rect.icon";
+                               }
+                               rel2 {
+                                       to: "elm.rect.icon";
+                               }
+                       }
+               }
+       }
+}
+
diff --git a/data/quickpanel_theme.edc b/data/quickpanel_theme.edc
new file mode 100755 (executable)
index 0000000..94749fa
--- /dev/null
@@ -0,0 +1,1848 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 "quickpanel_theme_def.h"
+
+collections {
+       #include "quickpanel_theme_element.edc"
+
+       styles {
+               style {
+                       name: "checkbox_text";
+                       base: "font=Tizen:style=Regular text_class=tizen font_size=26 color=#FFFFFFFF ellipsis=0.0 wrap=mixed";
+               }
+               style {
+                       name: "button_text";
+                       base: "font=Tizen:style=Regular text_class=tizen align=center font_size=28 color=#FFFFFFFF ellipsis=0.0 wrap=mixed";
+               }
+       }
+
+       group { name: "elm/genlist/item/qp_item/default/default";
+
+               data.item: "stacking" "above";
+               data.item: "selectraise" "on";
+               data.item: "texts" "elm.text";
+               data.item: "contents" "elm.icon";
+               data.item: "treesize" "20";
+
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                       }
+
+                       part { name: "bg_image";
+                               clip_to: "disclip";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                       }
+                       part { name: "elm.padding.left";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       visible: 0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       part { name: "elm.padding.right";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       visible: 0;
+                                       rel1.relative: 1.0  0.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.top";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                               state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.bottom";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel1.relative: 0.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+
+                       part { name: "elm.icon";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.5 0.5;
+                                       rel1 {
+                                               relative: 1 1;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.top";
+                                       }
+                                       rel2 {
+                                               relative: 0 0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "disclip";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       rel1.to: "base";
+                                       rel2.to: "base";
+                               }
+                               description { state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 255 255 255 64;
+                               }
+                       }
+
+               }
+               programs {
+                       program { name: "go_active";
+                               signal: "elm,state,selected";
+                               source: "elm";
+                               action: STATE_SET "selected" 0.0;
+                               target: "bg_image";
+                       }
+                       program { name: "go_passive";
+                               signal: "elm,state,unselected";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "bg_image";
+                               transition: LINEAR 0.1;
+                       }
+                       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";
+                       }
+               }
+       }
+
+       group { name: "elm/genlist/item/minicontrol/default/default";
+               alias: "elm/genlist/item_odd/minicontrol/default/default";
+
+               data.item: "stacking" "above";
+               data.item: "selectraise" "on";
+               data.item: "texts" "elm.text";
+               data.item: "contents" "elm.icon";
+               data.item: "treesize" "20";
+
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT + QP_THEME_LIST_ITEM_MINICONTR_SEPERATOR_HEIGHT;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+
+                       part { name: "bg_image";
+                               clip_to: "disclip";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                       }
+                       part { name: "elm.padding.left";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.padding.right";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 1.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.padding.top";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                               state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_MINICONTR_SEPERATOR_HEIGHT;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.padding.bottom";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 1.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+
+                       part { name: "elm.icon";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.top";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "disclip";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       rel1.to: "base";
+                                       rel2.to: "base";
+                               }
+                               description { state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 255 255 255 64;
+                               }
+                       }
+               }
+               programs {
+                       program { name: "go_active";
+                               signal: "elm,state,selected";
+                               source: "elm";
+                               action: STATE_SET "selected" 0.0;
+                               target: "bg_image";
+                       }
+                       program { name: "go_passive";
+                               signal: "elm,state,unselected";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "bg_image";
+                               transition: LINEAR 0.1;
+                       }
+                       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";
+                       }
+               }
+       }
+
+       group { name: "elm/genlist/item/brightness_controller/default/default";
+               alias: "elm/genlist/item_odd/brightness_controller/default/default";
+
+               data.item: "stacking" "above";
+               data.item: "selectraise" "on";
+               data.item: "texts" "elm.text.label elm.check.text";
+               data.item: "contents" "elm.swallow.thumbnail elm.swallow.slider elm.check.swallow";
+               data.item: "states" "elm.check.swallow";
+
+               script {
+                       public ctnt_shown;
+                       public time_shown;
+               }
+
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "bg_image";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                       }
+                       part { name: "elm.padding.top";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 20;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.padding.left.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       rel2.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.padding.right.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.content.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to_x:"elm.padding.left.bg";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to_x:"elm.padding.right.bg";
+                                               relative: 0.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                       }
+                       part { name: "elm.padding.left";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 28 0;
+                                       fixed: 1 0;
+                                       rel2.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.padding.right";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 28 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.padding.bottom.check.text";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 28;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.padding.bottom";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 12;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.text.label.rect";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 0 1;
+                                       min: 0 60;
+                                       rel1 {
+                                               to_x:"elm.padding.left";
+                                               to_y:"elm.padding.top";
+                                               relative: 1.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_x:"elm.check.rect";
+                                               to_y:"elm.padding.top";
+                                               relative: 0.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.text.label";
+                               clip_to: "disclip";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       rel1 {
+                                               to: "elm.text.label.rect";
+                                       }
+                                       rel2 {
+                                               to: "elm.text.label.rect";
+                                       }
+                                       color: 248 246 239 255;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               size: 44;
+                                               align: 0.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.thumbnail";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 80;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel1 {
+                                               to_x:"elm.padding.left";
+                                               to_y:"elm.padding.top";
+                                               relative: 1.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_x:"elm.padding.left";
+                                               to_y:"elm.padding.top";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part { name: "elm.rect.thumbnail";
+                               clip_to: "disclip";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 52 52;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to_x:"elm.padding.left";
+                                               to_y:"elm.padding.thumbnail";
+                                               relative: 1.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_x:"elm.padding.left";
+                                               to_y:"elm.padding.thumbnail";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part { name: "elm.swallow.thumbnail";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                               }
+                       }
+                       part { name: "elm.padding.thumbnail.x";
+                               clip_to: "disclip";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 6 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to:"elm.rect.thumbnail";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to:"elm.rect.thumbnail";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.rect.slider";
+                               clip_to: "disclip";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 20;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to_x: "elm.padding.thumbnail.x";
+                                               to_y: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.slider.padding.x";
+                                               to_y: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.0 0.5;
+                                       visible:0;
+                               }
+                       }
+                       part { name: "elm.swallow.slider";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description { 
+                                       state: "default" 0.0;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "elm.rect.slider";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.slider";
+                                       }
+                               }
+                       }
+                       part { name: "elm.slider.padding.x";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to: "elm.check.rect";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to: "elm.check.rect";
+                                       }
+                                       align: 1.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.check.rect";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 48 48;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.check.text.padding.x";
+                                               to_y: "elm.padding.bottom.check.text";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.check.text.padding.x";
+                                               to_y: "elm.padding.bottom.check.text";
+                                       }
+                                       align: 1.0 1.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.check.swallow";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "elm.check.rect";
+                                       }
+                                       rel2 {
+                                               to: "elm.check.rect";
+                                       }
+                               }
+                       }
+                       part { name: "elm.check.text.padding.x";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 8 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.check.text.rect";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.check.text.rect";
+                                       }
+                                       align: 1.0 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part { name: "elm.check.text.rect";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 1 1;
+                                       min: 90 96;
+                                       max: 90 96;
+                                       rel1 {
+                                               relative: 0.0 0.5;
+                                               to_x:"elm.padding.right.bg";
+                                               to_y:"elm.check.rect";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.5;
+                                               to_x:"elm.padding.right.bg";
+                                               to_y:"elm.check.rect";
+                                       }
+                                       align: 1.0 0.5;
+                                       visible:0;
+                               }
+                       }
+                       part { name: "elm.check.text";
+                               clip_to: "disclip";
+                               type: TEXTBLOCK;
+                               multiline: 1;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       rel1 {
+                                               to: "elm.check.text.rect";
+                                       }
+                                       rel2 {
+                                               to: "elm.check.text.rect";
+                                       }
+                                       text {
+                                               style: "checkbox_text";
+                                               align: 0.0 0.5;
+                                       }
+                               }
+                       }
+                       part { name: "disclip";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                               }
+                               description {
+                                       state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 255 255 255 64;
+                               }
+                       }
+               }
+
+               programs {
+                       program { name: "show_content";
+                               signal: "elm,state,elm.swallow.slider,active";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"elm.swallow.slider", "show", 0.0);
+                                       set_int(ctnt_shown, 1);
+                               }
+                       }
+                       program { name: "go_active";
+                               signal: "elm,state,selected";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"bg_image", "selected", 0.0);
+                                       set_state(PART:"elm.check.text", "selected", 0.0);
+                                       if (get_int(ctnt_shown) == 1)
+                                       set_state(PART:"elm.swallow.slider", "selected", 0.0);
+                               }
+                       }
+                       program { name: "go_passive";
+                               signal: "elm,state,unselected";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"bg_image", "default", 0.0);
+                                       set_state(PART:"elm.check.text", "default", 0.0);
+                                       if (get_int(ctnt_shown) == 1)
+                                       set_state(PART:"elm.swallow.slider", "show", 0.0);
+                               }
+                       }
+                       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";
+                       }
+               }
+       }
+
+       group { name: "elm/genlist/item/qp_group_title/default";
+               alias: "elm/genlist/item_odd/qp_group_title/default";
+               data.item: "stacking" "above";
+               data.item: "selectraise" "on";
+               data.item: "texts" "elm.text.text";
+               data.item: "contents" "elm.swallow.icon";
+               data.item: "treesize" "20";
+
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_GROUP_HEIGHT;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.padding.left";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 26 0;
+                                       fixed: 1 0;
+                                       visible: 0;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.right";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       visible: 0;
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.top";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 11;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.bottom";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 11;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+
+                       part { name: "elm.rect.text";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 400 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               to_x: "elm.padding.left";
+                                               relative: 1.0 0.0;
+                                       }
+                                       rel2 {
+                                               to_x: "elm.padding.left";
+                                               relative: 1.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible:0;
+                               }
+                       }
+                       part { name: "elm.text.text";
+                               type: TEXT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               to: "elm.rect.text";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.text";
+                                       }
+                                       color: QP_THEME_LIST_TITLE_FONT_COLOR;
+                                       text {
+                                               font: QP_THEME_LIST_TITLE_FONT_NAME;
+                                               text_class: "tizen";
+                                               size: QP_THEME_LIST_TITLE_FONT_SIZE;
+                                               align: 0.0 0.5;
+                                       }
+                               }
+                       }
+
+                       part { name: "elm.rect.icon";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 158 58;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.top";
+                                               relative: 0.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom";
+                                               relative: 0.0 0.0;
+                                       }
+                                       align: 1.0 0.5;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.swallow.icon";
+                               type: SWALLOW;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               to: "elm.rect.icon";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.icon";
+                                       }
+                               }
+                       }
+               }
+       }
+
+       group { name: "elm/genlist/item/notification_ongoing_item/default";
+               alias: "elm/genlist/item_odd/notification_ongoing_item/default";
+
+               data.item: "stacking" "above";
+               data.item: "selectraise" "on";
+               data.item: "texts" "elm.text.title elm.text.content elm.text.badge elm.text.time";
+               data.item: "contents" "elm.swallow.icon elm.swallow.thumbnail elm.swallow.progress";
+               data.item: "states" "elm.text.content elm.text.time";
+
+               images {
+                       image: "quick_icon_bg_02.png" COMP;
+               }
+
+               script {
+                       public ctnt_shown;
+                       public time_shown;
+               }
+
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_ONGOING_HEIGHT + QP_THEME_LIST_ITEM_ONGOING_SEPERATOR_HEIGHT;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "bg_image";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                       }
+                       part { name: "elm.padding.top";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 20 + QP_THEME_LIST_ITEM_ONGOING_SEPERATOR_HEIGHT;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.bottom";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 25;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel1.relative: 0.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+                       part { name: "elm.padding.bottom.progress";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 62;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.padding.bottom.icon";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 37;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 1.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 0.0 1.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.padding.left.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.padding.right.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 14 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.padding.top.bg";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 QP_THEME_LIST_ITEM_ONGOING_SEPERATOR_HEIGHT;
+                                       fixed: 0 1;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.content.bg";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       rel1 {
+                                               to_x:"elm.padding.left.bg";
+                                               to_y:"elm.padding.top.bg";
+                                               relative: 1.0 1.0;
+                                       }
+                                       rel2 {
+                                               to_x:"elm.padding.right.bg";
+                                               to_y:"base";
+                                               relative: 0.0 1.0;
+                                       }
+                                       align: 0.0 0.0;
+                                       visible: 1;
+                                       color: QP_THEME_NOTI_BG_COLOR;
+                               }
+                       }
+                       part { name: "elm.padding.left";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 28 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 0.0 0.0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.padding.right";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 18 0;
+                                       fixed: 1 0;
+                                       rel1.relative: 1.0 0.0;
+                                       rel2.relative: 1.0 1.0;
+                                       align: 1.0 0.0;
+                                       visible: 0;
+                               }
+                       }
+
+                       part { name: "elm.rect.thumbnail";
+                               clip_to: "disclip";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 128 128;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom.icon";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom.icon";
+                                       }
+                                       align: 1.0 1.0;
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.thumbnail.bg";
+                               clip_to: "disclip";
+                               type: IMAGE;
+                               mouse_events: 0;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 0 0;
+                                       rel1 {to: "elm.rect.thumbnail";}
+                                       rel2 {to: "elm.rect.thumbnail";}
+                                       image {
+                                               normal:"quick_icon_bg_02.png";
+                                               border: 0 0 0 0;
+                                               border_scale: 1;
+                                       }
+                               }
+                       }
+                       part { name: "elm.swallow.thumbnail";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 0.5 0.5;
+                               }
+                       }
+                       part { name: "elm.swallow.icon";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 40 40;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                               to: "elm.rect.thumbnail";
+                                       }
+                                       align: 1.0 1.0;
+                               }
+                       }
+
+                       part { name: "elm.padding.after.icon.right";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 174 0;
+                                       fixed: 1 0;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.right";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.right";
+                                       }
+                                       visible: 0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part { name: "elm.text.title";
+                               clip_to: "disclip";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 50;
+                                       align: 0.0 0.0;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.top";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.after.icon.right";
+                                               to_y: "elm.padding.top";
+                                       }
+                                       color: 248 246 239 255;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: 44;
+                                               fit: 0 1;
+                                               ellipsis: 0.0;
+                                               align: 0.0 0.5;
+                                               size_range: 34 44;
+                                       }
+                               }
+                               description { state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 248 246 239 255;
+                               }
+                       }
+                       part { name: "elm.text.time";
+                               clip_to: "disclip";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       fixed: 0 1;
+                                       min: 0 42;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.text.title";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.after.icon.right";
+                                               to_y: "elm.text.title";
+                                       }
+                                       color: 248 246 239 255;
+                                       text {
+                                               font: "Tizen:style=Regular";
+                                               text_class: "tizen";
+                                               size: 38;
+                                               align: 1.0 0.0;
+                                       }
+                               }
+                               description { state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 248 246 239 255;
+                               }
+                       }
+                       part { name: "elm.rect.content";
+                               clip_to: "disclip";
+                               type: RECT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       min: 0 42;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 1.0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.text.title";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 1.0;
+                                               to_x: "elm.padding.after.icon.right";
+                                               to_y: "elm.text.title";
+                                       }
+                                       visible: 0;
+                               }
+                       }
+                       part { name: "elm.text.content";
+                               clip_to: "disclip";
+                               type: TEXT;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       align: 0.0 0.0;
+                                       min: 0 42;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               to: "elm.rect.content";
+                                       }
+                                       rel2 {
+                                               to: "elm.rect.content";
+                                       }
+                                       color: 130 131 132 255;
+                                       text {
+                                               font: "Tizen:style=Medium";
+                                               text_class: "tizen";
+                                               size: 30;
+                                               min: 1 0;
+                                               align: 0.0 0.0;
+                                       }
+                               }
+                               description { state: "show" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                               description { state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 130 131 132 255;
+                               }
+                       }
+
+                       part { name: "elm.swallow.progress";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 0;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 20;
+                                       fixed: 0 1;
+                                       rel1 {
+                                               relative: 1.0 0.0;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.bottom.progress";
+                                       }
+                                       rel2 {
+                                               relative: 0.0 0.0;
+                                               to_x: "elm.padding.after.icon.right";
+                                               to_y: "elm.padding.bottom.progress";
+                                       }
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       part { name: "disclip";
+                               type: RECT;
+                               description {
+                                       state: "default" 0.0;
+                               }
+                               description {
+                                       state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 255 255 255 64;
+                               }
+                       }
+               }
+
+               programs {
+                       program { name: "show_content";
+                               signal: "elm,state,elm.text.content,active";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"elm.text.content", "show", 0.0);
+                                       set_int(ctnt_shown, 1);
+                               }
+                       }
+                       program { name: "go_active";
+                               signal: "elm,state,selected";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"bg_image", "selected", 0.0);
+                                       set_state(PART:"elm.text.title", "selected", 0.0);
+                                       set_state(PART:"elm.text.time", "selected", 0.0);
+                                       if (get_int(ctnt_shown) == 1)
+                                       set_state(PART:"elm.text.content", "selected", 0.0);
+                               }
+                       }
+                       program { name: "go_passive";
+                               signal: "elm,state,unselected";
+                               source: "elm";
+                               script {
+                                       set_state(PART:"bg_image", "default", 0.0);
+                                       set_state(PART:"elm.text.title", "default", 0.0);
+                                       set_state(PART:"elm.text.time", "show", 0.0);
+                                       if (get_int(ctnt_shown) == 1)
+                                       set_state(PART:"elm.text.content", "show", 0.0);
+                               }
+                       }
+                       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";
+                       }
+               }
+       }
+
+       group { name: "elm/genlist/item/qp_notibox/default/default";
+               data.item: "stacking" "above";
+               data.item: "selectraise" "on";
+               data.item: "texts" "elm.text";
+               data.item: "contents" "elm.icon";
+               data.item: "treesize" "20";
+
+               parts {
+                       part { name: "base";
+                               type: RECT;
+                               repeat_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+
+                       part { name: "bg_image";
+                               clip_to: "disclip";
+                               mouse_events: 0;
+                               description {
+                                       state: "default" 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                               description {
+                                       state: "selected" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: QP_THEME_BG_COLOR;
+                                       visible: QP_THEME_BG_VISIBILITY;
+                               }
+                       }
+                       part { name: "elm.padding.left";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       visible: 0;
+                                       rel2.relative: 0.0 1.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+
+                       part { name: "elm.padding.right";
+                               type: RECT;
+                               scale: 1;
+                               description { state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 1 0;
+                                       visible: 0;
+                                       rel1.relative: 1.0  0.0;
+                                       align: 1.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.top";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                               state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel2.relative: 1.0 0.0;
+                                       align: 0.0 0.0;
+                               }
+                       }
+                       part { name: "elm.padding.bottom";
+                               type: RECT;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       min: 0 0;
+                                       fixed: 0 1;
+                                       visible: 0;
+                                       rel1.relative: 0.0 1.0;
+                                       align: 0.0 1.0;
+                               }
+                       }
+
+                       part { name: "elm.icon";
+                               clip_to: "disclip";
+                               type: SWALLOW;
+                               mouse_events: 1;
+                               scale: 1;
+                               description {
+                                       state: "default" 0.0;
+                                       fixed: 1 0;
+                                       align: 0.0 0.0;
+                                       rel1 {
+                                               relative: 1 1;
+                                               to_x: "elm.padding.left";
+                                               to_y: "elm.padding.top";
+                                       }
+                                       rel2 {
+                                               relative: 0 0;
+                                               to_x: "elm.padding.right";
+                                               to_y: "elm.padding.bottom";
+                                       }
+                               }
+                       }
+                       part {
+                               name: "disclip";
+                               type: RECT;
+                               description { state: "default" 0.0;
+                                       rel1.to: "base";
+                                       rel2.to: "base";
+                               }
+                               description { state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                                       color: 255 255 255 64;
+                               }
+                       }
+               }
+               programs {
+                       program { name: "go_active";
+                               signal: "elm,state,selected";
+                               source: "elm";
+                               action: STATE_SET "selected" 0.0;
+                               target: "bg_image";
+                       }
+                       program { name: "go_passive";
+                               signal: "elm,state,unselected";
+                               source: "elm";
+                               action: STATE_SET "default" 0.0;
+                               target: "bg_image";
+                               transition: LINEAR 0.1;
+                       }
+                       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";
+                       }
+               }
+       }
+///////////////////////////////////////////////////////////////////////////////////////
+
+#define NOTI_BUTTON_STATE_ENABLED 0
+#define NOTI_BUTTON_STATE_DISABLED 1
+
+       group { name: "elm/button/base/quickpanel_standard";
+               images {
+                       image: "quick_standard_btn_press.png" COMP;
+                       image: "quick_standard_btn_nor.png" COMP;
+               }
+
+               script {
+                       public button_state = NOTI_BUTTON_STATE_ENABLED;
+               }
+               parts {
+                       part { name: "button_image";
+                               type: IMAGE;
+                               mouse_events: 1;
+                               scale: 1;
+                               description { 
+                                       state: "default" 0.0;
+                                       min: 145 59;
+                                       fixed: 1 1;
+                                       rel1 {
+                                               relative: 0.0 0.0;
+                                       }
+                                       rel2 {
+                                               relative: 1.0 1.0;
+                                       }
+                                       image {
+                                               normal: "quick_standard_btn_nor.png";
+                                               border: 10 10 0 0;
+                                       }
+                               }
+                               description { state: "clicked" 0.0;
+                                       inherit: "default" 0.0;
+                                       image {
+                                               normal: "quick_standard_btn_press.png";
+                                               border: 10 10 0 0;
+                                       }
+                               }
+                               description { state: "disabled" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                               description { state: "focused" 0.0;
+                                       inherit: "default" 0.0;
+                               }
+                       }
+               part {   name: "elm.text.rect";
+                       type: RECT;
+                       mouse_events: 0;
+                       scale: 1;
+                       description { state: "default" 0.0;
+                               visible: 0;
+                               fixed: 1 1;
+                               align: 0.5 0.5;
+                                       rel1 {
+                                               relative: 0.05 0.05;
+                                               to: "button_image";
+                                       }
+                                       rel2 {
+                                               relative: 0.95 0.95;
+                                               to: "button_image";
+                                       }
+                       }
+               }
+               part {   name: "elm.text";
+                       type: TEXTBLOCK;
+                       mouse_events: 0;
+                       scale: 1;
+                       multiline: 1;
+                       description { state: "default" 0.0;
+                               visible: 0;
+                               fixed: 1 1;
+                               color: 149 148 148 255;
+                                       rel1 {
+                                               to: "elm.text.rect";
+                                       }
+                                       rel2 {
+                                               to: "elm.text.rect";
+                                       }
+                               text {
+                                               style: "button_text";
+                                               align: 0.5 0.5;
+                                               fit: 0 1;
+                                               size_range: 22 28;
+                               }
+                       }
+                       description { state: "visible" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                               min: 1 1;
+                       }
+                       description { state: "clicked" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                               min: 1 1;
+                               color: 255 255 255 255;
+                       }
+                       description { state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               color: 0 0 0 128;
+                       }
+                       description { state: "disabled_visible" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                               min: 1 1;
+                       }
+                       description { state: "focused" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                               min: 1 1;
+                               color: 255 255 255 255;
+                       }
+               }
+               part { name: "over1";
+                       mouse_events: 0;
+                       description { state: "default" 0.0;
+                               rel2.relative: 1.0 0.5;
+                       }
+               }
+               part { name: "over2";
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       ignore_flags: ON_HOLD;
+                       description { state: "default" 0.0;
+                               rel1.to: "button_image";
+                               rel2.to: "button_image";
+                       }
+               }
+               part { name: "over3";
+                       mouse_events: 1;
+                       repeat_events: 1;
+                       description { state: "default" 0.0;
+                               rel1.to: "button_image";
+                               rel2.to: "button_image";
+                               color: 0 0 0 0;
+                       }
+               }
+               part { name: "disabler";
+                       type: RECT;
+                       description { state: "default" 0.0;
+                               rel1.to: "button_image";
+                               rel2.to: "button_image";
+                               color: 0 0 0 0;
+                               visible: 0;
+                       }
+                       description { state: "disabled" 0.0;
+                               inherit: "default" 0.0;
+                               visible: 1;
+                       }
+               }
+       }
+       programs {
+               program { name: "button_click";
+                       signal: "mouse,down,1";
+                       source: "over2";
+                       action: SIGNAL_EMIT "elm,action,press" "";
+                       after: "button_click_anim";
+               }
+               program { name: "button_click_anim";
+                       action: STATE_SET "clicked" 0.0;
+                       target: "button_image";
+                       target: "elm.text";
+               }
+               program { name: "button_unpress";
+                       action: SIGNAL_EMIT "elm,action,unpress" "";
+               }
+               program { name: "button_mouseout_clicked";
+                       signal: "mouse,up,1";
+                       source: "over3";
+                       script {
+                               new st[31];
+                               new Float:vl;
+                               get_state(PART:"elm.text", st, 30, vl);
+                               if (!strcmp(st, "clicked") || !strcmp(st, "focused"))
+                               {
+                                       emit("elm,action,default,text,set", "");
+                                       set_state(PART:"elm.text", "visible", 0.0);
+                               }
+                               if(get_int(button_state) != NOTI_BUTTON_STATE_DISABLED)
+                               {
+                                       set_state(PART:"button_image", "default", 0.0);
+                               }
+                       }
+                       after: button_unpress;
+               }
+               program { name: "button_unclick3";
+                       signal: "mouse,clicked,1";
+                       source: "over2";
+                       action: SIGNAL_EMIT "elm,action,click" "";
+               }
+               program { name: "text_show";
+                       signal: "elm,state,text,visible";
+                       source: "elm";
+                       script {
+                               if(get_int(button_state) != NOTI_BUTTON_STATE_DISABLED)
+                                       set_state(PART:"elm.text", "visible", 0.0);
+                               else
+                                       set_state(PART:"elm.text", "disabled_visible", 0.0);
+                       }
+               }
+               program { name: "text_hide";
+                       signal: "elm,state,text,hidden";
+                       source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       target: "elm.text";
+               }
+
+               program { name: "disable";
+                       signal: "elm,state,disabled";
+                       source: "elm";
+                       action: STATE_SET "disabled" 0.0;
+                       target: "button_image";
+                       target: "disabler";
+                       after: "disable_text";
+               }
+               program { name: "disable_text";
+                       script {
+                               new st[31];
+                               new Float:vl;
+                               get_state(PART:"elm.text", st, 30, vl);
+                               if (!strcmp(st, "visible"))
+                                       set_state(PART:"elm.text", "disabled_visible", 0.0);
+                               else
+                                       set_state(PART:"elm.text", "disabled", 0.0);
+                               set_int(button_state, NOTI_BUTTON_STATE_DISABLED);
+                       }
+               }
+               program { name: "enable";
+                       signal: "elm,state,enabled";
+                       source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       target: "button_image";
+                       target: "disabler";
+                       after: "enable_text";
+               }
+               program { name: "enable_text";
+                       script {
+                               new st[31];
+                               new Float:vl;
+                               get_state(PART:"elm.text", st, 30, vl);
+                               if (!strcmp(st, "disabled_visible"))
+                                       set_state(PART:"elm.text", "visible", 0.0);
+                               else
+                                       set_state(PART:"elm.text", "default", 0.0);
+                               set_int(button_state, NOTI_BUTTON_STATE_ENABLED);
+                       }
+               }
+               program { name: "focused";
+                       //signal: "elm,action,focus";
+                       //source: "elm";
+                       action: STATE_SET "focused" 0.0;
+                       target: "button_image";
+                       target: "elm.text";
+               }
+               program { name: "unfocused";
+                       //signal: "elm,action,unfocus";
+                       //source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       target: "button_image";
+                       action: STATE_SET "visible" 0.0;
+                       target: "elm.text";
+               }
+               program { name: "reset_button_state";
+                       signal: "elm,action,button,reset";
+                       source: "elm";
+                       action: STATE_SET "default" 0.0;
+                       target: "button_image";
+               }
+       }
+}
diff --git a/data/quickpanel_theme_def.h b/data/quickpanel_theme_def.h
new file mode 100755 (executable)
index 0000000..ad5d26e
--- /dev/null
@@ -0,0 +1,36 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the License);
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QUICKPANEL_THEME_DEF_H__
+#define __QUICKPANEL_THEME_DEF_H__
+
+#define QP_THEME_BG_VISIBILITY                         0
+#define QP_THEME_BG_COLOR                              255 255 255 255
+#define QP_THEME_NOTI_BG_COLOR                         28 29 30 255
+
+#define QP_THEME_LIST_ITEM_GROUP_HEIGHT 80
+#define QP_THEME_LIST_ITEM_NOTI_HEIGHT 130
+#define QP_THEME_LIST_ITEM_MINICONTRL_HEIGHT 178
+#define QP_THEME_LIST_ITEM_MINICONTR_SEPERATOR_HEIGHT 12
+#define QP_THEME_LIST_ITEM_ONGOING_HEIGHT 178
+#define QP_THEME_LIST_ITEM_ONGOING_SEPERATOR_HEIGHT 12
+#define QP_THEME_LIST_ITEM_BRIGHTNESS_HEIGHT 178
+
+#define QP_THEME_LIST_TITLE_FONT_NAME                  "Tizen:style=Medium"
+#define QP_THEME_LIST_TITLE_FONT_COLOR                 149 148 148 255
+#define QP_THEME_LIST_TITLE_FONT_SIZE                  36
+
+#endif /*__QUICKPANEL_THEME_DEF_H__*/
diff --git a/data/quickpanel_theme_element.edc b/data/quickpanel_theme_element.edc
new file mode 100755 (executable)
index 0000000..f4619a8
--- /dev/null
@@ -0,0 +1,1454 @@
+#define SLIDER_INDICATOR_TEXT_COLOR_INC      255 255 255 255
+#define SLIDER_UNITS_TEXT_COLOR_INC      0 0 0 255
+#define SLIDER_UNITS_TEXT_SIZE_INC  30
+#define SLIDER_INDICATOR_TEXT_SIZE_INC  26
+#define SLIDER_BASE_HEIGHT_INC  16
+#define SLIDER_BASE_MIN_WIDTH_INC 375
+#define SLIDER_BASE_HEIGHT_INC  16
+#define SLIDER_SWALLOW_BAR_MIN_WIDTH_INC  20
+#define SLIDER_SWALLOW_BAR_HEIGHT_INC  72
+#define SLIDER_INDICATOR_MAX_WIDTH_INC 52
+#define SLIDER_INDICATOR_WIDTH_INC 52
+#define SLIDER_INDICATOR_HEIGHT_INC 72
+
+   group { name: "elm/slider/horizontal/indicator/default";
+           alias: "elm/slider/horizontal/indicator/disabled";
+           alias: "elm/slider/vertical/indicator/default";
+           alias: "elm/slider/vertical/indicator/disabled";
+           alias: "elm/slider/horizontal/indicator/tap_to_drag";
+      images {
+         image: "00_slider_handle.png" COMP;
+         image: "00_slider_handle_dim.png" COMP;
+         image: "00_slider_handle_press.png" COMP;
+      }
+      parts {
+         part { name: "button_events";
+            type: RECT;
+            mouse_events: 1;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: 2*SLIDER_INDICATOR_WIDTH_INC 1.5*SLIDER_INDICATOR_HEIGHT_INC;
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+               color: 0 0 0 0;
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+            }
+         }
+         part { name: "button0";
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               min: SLIDER_INDICATOR_WIDTH_INC SLIDER_INDICATOR_HEIGHT_INC;
+               max: SLIDER_INDICATOR_MAX_WIDTH_INC SLIDER_INDICATOR_HEIGHT_INC;
+               rel1 {
+                  to: "elm.indicator";
+                  offset: 0 0;
+               }
+               rel2 {
+                  to: "elm.indicator";
+                  offset: 0 0;
+               }
+               image {
+                  normal: "00_slider_handle.png";
+                  border: 1 1 1 1;
+                  border_scale: 1;
+               }
+            }
+            description { state: "pressed" 0.0;
+               inherit: "default" 0.0;
+               image {
+                  normal: "00_slider_handle_press.png";
+               }
+            }
+            description { state: "disabled" 0.0;
+               inherit: "default" 0.0;
+               image {
+                  normal: "00_slider_handle_dim.png";
+               }
+            }
+         }
+         part { name: "elm.indicator";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 1;
+               color: SLIDER_INDICATOR_TEXT_COLOR_INC;
+               text {
+                  font: "Tizen:style=Medium";
+                  size: SLIDER_INDICATOR_TEXT_SIZE_INC;
+                  min: 1 1;
+                  align: 0.5 0.5;
+                  text_class: "tizen";
+               }
+            }
+            description { state: "hide" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+             }
+         }
+      }
+      programs {
+         program { name: "set_val_show";
+            signal: "elm,state,val,show";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.indicator";
+         }
+         program { name: "set_val_hide";
+            signal: "elm,state,val,hide";
+            source: "elm";
+            action:  STATE_SET "hide" 0.0;
+            target: "elm.indicator";
+         }
+         program { name: "slider_disable";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action:  STATE_SET "disabled" 0.0;
+            target: "button0";
+            target: "button_events";
+         }
+         program { name: "slider_enable";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "button0";
+            target: "button_events";
+         }
+         program { name: "mouse_down";
+            signal: "mouse,down,*";
+            source: "button_events";
+            action:  STATE_SET "pressed" 0.0;
+            target: "button0";
+         }
+         program { name: "mouse_up";
+            signal: "mouse,up,*";
+            source: "button_events";
+            action:  STATE_SET "default" 0.0;
+            target: "button0";
+         }
+      }
+   }
+
+   group { name: "elm/slider/horizontal/quickpanel";
+           alias: "elm/slider/horizontal/disabled";
+      images {
+         image: "00_progress_bg.png" COMP;
+         image: "00_progress_bar.png" COMP;
+      }
+      script {
+         public invert_on = 0;
+         public set_invert_on() {
+            set_state(PART:"level", "inverted", 0.0);
+            set_state(PART:"level2", "inverted", 0.0);
+            set_int(invert_on, 1);
+         }
+         public set_invert_off() {
+            set_state(PART:"level", "default", 0.0);
+            set_state(PART:"level2", "default", 0.0);
+            set_int(invert_on, 0);
+         }
+         public thumb_down() {
+            if(get_int(invert_on) == 0)
+               set_state(PART:"level", "pressed", 0.0);
+            else if(get_int(invert_on) == 1)
+               set_state(PART:"level2", "pressed", 0.0);
+            }
+         public thumb_up() {
+            if(get_int(invert_on) == 0)
+               set_state(PART:"level", "default", 0.0);
+            else if(get_int(invert_on) == 1)
+               set_state(PART:"level2", "inverted", 0.0);
+            }
+         }
+         parts {
+            part { name: "base";
+               mouse_events: 0;
+               scale: 1;
+               description { state: "default" 0.0;
+                  max: 99999 SLIDER_BASE_HEIGHT_INC;
+                  rel1.to: "bg";
+                  rel2.to: "bg";
+                  image.normal: "00_progress_bg.png";
+                  image.border: 10 10 0 0;
+                  image.border_scale: 1;
+               }
+            }
+            part { name: "level";
+               mouse_events: 0;
+               scale: 1;
+               clip_to: "clipper";
+               description { state: "default" 0.0;
+                  fixed: 1 1;
+                  rel1.to: "base";
+                  rel2 {
+                     to_y: "base";
+                     to_x: "elm.dragable.slider";
+                     relative: 0.5 1.0;
+                  }
+                  image.normal: "00_progress_bar.png";
+                  image.border: 10 10 0 0;
+                  image.border_scale: 1;
+               }
+               description { state: "inverted" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 0;
+               }
+               description { state: "pressed" 0.0;
+                  inherit: "default" 0.0;
+                  image.normal: "00_progress_bar.png";
+               }
+            }
+            part { name: "level2";
+               mouse_events: 0;
+               scale: 1;
+               clip_to: "clipper";
+               description { state: "default" 0.0;
+                  fixed: 1 1;
+                  visible: 0;
+                  rel1 {
+                     to_y: "base";
+                     to_x: "elm.dragable.slider";
+                     relative: 0.5 0.0;
+                  }
+                  rel2.to: "base";
+                  image.normal: "00_progress_bar.png";
+                  image.border: 0 0 4 4;
+                  image.border_scale: 1;
+               }
+               description { state: "inverted" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 1;
+               }
+               description { state: "pressed" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 1;
+                  image.normal: "00_progress_bar.png";
+               }
+            }
+            part { name: "bg";
+               type: RECT;
+               mouse_events: 0;
+               scale: 1;
+               description { state: "default" 0.0;
+                  visible: 0;
+                  rel1.to: "elm.swallow.bar";
+                  rel2.to: "elm.swallow.bar";
+               }
+            }
+            part { name: "elm.swallow.bar";
+               type: SWALLOW;
+               mouse_events: 0;
+               scale: 1;
+               description { state: "default" 0.0;
+                  min: SLIDER_SWALLOW_BAR_MIN_WIDTH_INC SLIDER_SWALLOW_BAR_HEIGHT_INC;
+                  max: 99999 SLIDER_SWALLOW_BAR_HEIGHT_INC;
+                  align: 1.0 0.5;
+                  rel1 {
+                     to_x: "bar_left_padding";
+                     relative: 1.0 0.0;
+                  }
+                  rel2 {
+                     to_x: "bar_right_padding";
+                     relative: 0.0 1.0;
+                  }
+               }
+            }
+            part {
+               name: "bar_left_padding";
+               type: RECT;
+               scale: 1;
+               description {
+                  state: "default" 0.0;
+                  visible: 0;
+                  min: 16 0;
+                  fixed: 1 1;
+                  rel1 {
+                     relative: 1.0  0.5;
+                     to_x: "elm.text";
+                  }
+                  rel2 {
+                     relative: 1.0  0.5;
+                     to_x: "elm.text";
+                  }
+                  align: 0.0 0.5;
+               }
+            }
+            part {
+               name: "bar_right_padding";
+               type: RECT;
+               scale: 1;
+               description {
+                  state: "default" 0.0;
+                  visible: 0;
+                  min: 16 0;
+                  fixed: 1 1;
+                  rel1 {
+                     relative: 0.0  0.5;
+                     to_x: "elm.units";
+                  }
+                  rel2 {
+                     relative: 0.0  0.5;
+                     to_x: "elm.units";
+                  }
+                  align: 1.0 0.5;
+               }
+            }
+            part { name: "elm.swallow.icon";
+               type: SWALLOW;
+               scale: 1;
+               description { state: "default" 0.0;
+                  visible: 0;
+                  align: 0.0 0.5;
+                  rel1 {
+                     to_y: "elm.swallow.bar";
+                  }
+                  rel2 {
+                     relative: 0.0 1.0;
+                     to_y: "elm.swallow.bar";
+                  }
+               }
+               description { state: "visible" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 1;
+                  aspect: 1.0 1.0;
+                  aspect_preference: VERTICAL;
+               }
+            }
+            part { name: "elm.text";
+               type: TEXT;
+               mouse_events: 0;
+               scale: 1;
+               description { state: "default" 0.0;
+                  visible: 0;
+                  fixed: 1 1;
+                  align: 0.0 0.5;
+                  rel1.to_x: "elm.swallow.icon";
+                  rel1.relative: 1.0 0.0;
+                  rel2.to_x: "elm.swallow.icon";
+                  color: SLIDER_UNITS_TEXT_COLOR_INC;
+                  text {
+                     font: "Tizen:style=Medium";
+                     size: SLIDER_UNITS_TEXT_SIZE_INC;
+                     min: 0 0;
+                     align: 0.0 0.5;
+                     text_class: "tizen";
+                  }
+               }
+               description { state: "visible" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 1;
+                  text.min: 1 1;
+               }
+            }
+            part { name: "elm.swallow.end";
+               type: SWALLOW;
+               scale: 1;
+               description { state: "default" 0.0;
+                  visible: 0;
+                  align: 1.0 0.5;
+                  rel1 {
+                     relative: 1.0 0.0;
+                     to_y: "elm.swallow.bar";
+                  }
+                  rel2 {
+                     relative: 1.0 1.0;
+                     to_y: "elm.swallow.bar";
+                  }
+               }
+               description { state: "visible" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 1;
+                  aspect: 1.0 1.0;
+                  aspect_preference: VERTICAL;
+               }
+            }
+            part { name: "units";
+               mouse_events: 0;
+               scale: 1;
+               description { state: "default" 0.0;
+                  visible: 0;
+                  rel1 {
+                     to_x: "elm.units";
+                  }
+               }
+               description { state: "visible" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 1;
+               }
+            }
+            part { name: "elm.units";
+               type: TEXT;
+               mouse_events: 0;
+               scale: 1;
+               description { state: "default" 0.0;
+                  visible: 0;
+                  fixed: 1 1;
+                  align: 1.0 0.5;
+                  rel1.to_x: "elm.swallow.end";
+                  rel2.relative: 0.0 1.0;
+                  rel2.to_x: "elm.swallow.end";
+                  color: SLIDER_UNITS_TEXT_COLOR_INC;
+                  text {
+                     font: "Tizen:style=Bold";
+                     size: SLIDER_UNITS_TEXT_SIZE_INC;
+                     min: 0 0;
+                     align: 0.0 0.5;
+                     text_class: "tizen";
+                  }
+               }
+               description { state: "visible" 0.0;
+                  inherit: "default" 0.0;
+                  fixed: 1 1;
+                  visible: 1;
+                  text.min: 1 1;
+               }
+            }
+            part { name: "elm.dragable.slider";
+               type: GROUP;
+               source: "elm/slider/horizontal/indicator/default";
+               mouse_events: 1;
+               scale: 1;
+               dragable {
+                  x: 1 1 0;
+                  y: 0 0 0;
+                  confine: "bg";
+               }
+               description { state: "default" 0.0;
+                  min: SLIDER_INDICATOR_WIDTH_INC SLIDER_INDICATOR_HEIGHT_INC;
+                  fixed: 1 1;
+                  align: 0.5 0.5;
+                  color: 0 0 0 0;
+               }
+            }
+            part { name: "disabler";
+               type: RECT;
+               mouse_events: 1;
+               repeat_events: 0;
+               scale: 1;
+               description { state: "default" 0.0;
+                  visible: 0;
+                  color: 0 0 0 0;
+               }
+               description { state: "disabled" 0.0;
+                  inherit: "default" 0.0;
+                  visible: 1;
+               }
+            }
+            part { name: "clipper";
+               type: RECT;
+               description { state: "default" 0.0;
+                  color: 255 255 255 255;
+               }
+               description { state: "disabled" 0.0;
+                  color: 255 255 255 102;
+               }
+            }
+         }
+         programs {
+            program { name: "text_show";
+            signal: "elm,state,text,visible";
+            source: "elm";
+            action:  STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+         program { name: "text_hide";
+            signal: "elm,state,text,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.text";
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            action:  STATE_SET "visible" 0.0;
+            target: "elm.swallow.icon";
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.swallow.icon";
+         }
+         program { name: "end_show";
+            signal: "elm,state,end,visible";
+            source: "elm";
+            action:  STATE_SET "visible" 0.0;
+            target: "elm.swallow.end";
+         }
+         program { name: "end_hide";
+            signal: "elm,state,end,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.swallow.end";
+         }
+         program { name: "units_show";
+            signal: "elm,state,units,visible";
+            source: "elm";
+            action:  STATE_SET "visible" 0.0;
+            target: "elm.units";
+            target: "units";
+         }
+         program { name: "units_hide";
+            signal: "elm,state,units,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.units";
+            target: "units";
+         }
+         program { name: "invert_on";
+            signal: "elm,state,inverted,on";
+            source: "elm";
+            script {
+               set_invert_on();
+            }
+         }
+         program { name: "invert_off";
+            signal: "elm,state,inverted,off";
+            source: "elm";
+            script {
+               set_invert_off();
+            }
+         }
+         program { name: "val_show";
+            signal: "mouse,down,*";
+            source: "elm.dragable.slider";
+            script {
+               thumb_down();
+            }
+         }
+         program { name: "val_hide";
+            signal: "mouse,up,*";
+            source: "elm.dragable.slider";
+            script {
+               thumb_up();
+            }
+         }
+         program { name: "slider_disable";
+            signal: "elm,state,disabled";
+            source: "elm";
+            action:  STATE_SET "disabled" 0.0;
+            target: "disabler";
+            target: "clipper";
+         }
+         program { name: "slider_enable";
+            signal: "elm,state,enabled";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "disabler";
+            target: "clipper";
+         }
+      }
+   }
+
+#define CHECK_STATE_DEFAULT 0
+#define CHECK_STATE_VISIBLE 1
+#define CHECK_STATE_DISABLED_VISIBLE 2
+#define CHECK_STATE_DISABLED 3
+
+#define CHECK_DEFAULT_TEXT_NORMAL_COLOR_INC        50 50 50 255
+#define CHECK_DEFAULT_TEXT_PRESSED_COLOR_INC      248 246 239 255
+#define CHECK_DEFAULT_TEXT_DISABLED_COLOR_INC          50 50 50 76
+#define CHECK_DISCLIP_NORMAL_COLOR_INC             255 255 255 255
+#define CHECK_DISCLIP_DISABLED_COLOR_INC           255 255 255 76
+
+#define CHECK_HIDE 0
+#define CHECK_SHOW 1
+
+#define CHECK_STYLE_DEFAULT_BG_NORMAL_MIN_MAX_INC 48 48
+
+////////////////////////////////////////////////////////////////////////////////
+#define CHECK_STYLE_DEFAULT(style_name, min_width, min_height) \
+   group { name: "elm/check/base/"style_name; \
+      images { \
+         image: "00_check_bg.png" COMP; \
+         image: "00_check_bg_press.png" COMP; \
+         image: "00_check_bg_dim.png" COMP; \
+         image: "00_check_checking.png" COMP; \
+         image: "00_check_checking_dim.png" COMP; \
+      } \
+      script { \
+         public check_state = CHECK_STATE_DEFAULT; \
+         public check_visible = CHECK_HIDE; \
+      } \
+      parts { \
+         part { name: "back_bg"; \
+            type: RECT; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               rel2.relative: 0.0 1.0; \
+               align: 0 0.5; \
+               min: min_width min_height; \
+               fixed: 1 0; \
+               color: 0 0 0 0; \
+            } \
+         } \
+         part { name: "bg"; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               min: CHECK_STYLE_DEFAULT_BG_NORMAL_MIN_MAX_INC; \
+               max: CHECK_STYLE_DEFAULT_BG_NORMAL_MIN_MAX_INC; \
+               fixed: 1 1; \
+               rel1.to: "back_bg"; \
+               rel2.to: "back_bg"; \
+               image.normal: "00_check_bg.png"; \
+               fill.smooth : 0; \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "pressed" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_check_bg_press.png"; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               image.normal: "00_check_bg_dim.png"; \
+            } \
+         } \
+         part { name: "check"; \
+            clip_to: "sequence_clip"; \
+            mouse_events: 0; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               rel1.to: "bg"; \
+               rel2.to: "bg"; \
+               visible: 0; \
+               image.normal: "00_check_checking.png"; \
+               color: 255 255 255 0; \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+               color: 255 255 255 255; \
+            } \
+            description { state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+               image.normal: "00_check_checking_dim.png"; \
+            } \
+         } \
+         part { name: "sequence_clip"; \
+            type: RECT; \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               rel2.relative: 0.0 1.0; \
+               color: 255 255 255 255; \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               rel2.relative: 1.0 1.0; \
+            } \
+         } \
+         part { name: "elm.swallow.content"; \
+            type: SWALLOW; \
+            clip_to: "disclip"; \
+            description { state: "default" 0.0; \
+               fixed: 1 0; \
+               visible: 0; \
+               align: 0.0 0.5; \
+               rel1 { \
+                  to_x: "bg"; \
+                  relative: 1.0 0.0; \
+                  offset: 1 1; \
+               } \
+               rel2 { \
+                  to_x: "bg"; \
+                  relative: 1.0 1.0; \
+                  offset: 2 -2; \
+               } \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               fixed: 1 1; \
+               visible: 1; \
+               aspect: 1.0 1.0; \
+               aspect_preference: VERTICAL; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               fixed: 1 1; \
+               visible: 1; \
+               aspect: 1.0 1.0; \
+            } \
+         } \
+         part { name: "elm.text"; \
+            type: TEXTBLOCK; \
+            mouse_events: 0; \
+            clip_to: "disclip"; \
+            scale: 1; \
+            description { state: "default" 0.0; \
+               visible: 0; \
+               fixed: 0 1; \
+               rel1 { \
+                  relative: 1.0 0.5; \
+                  offset: 1 1; \
+                  to_x: "elm.swallow.content"; \
+               } \
+               rel2 { \
+                  relative: 1.0 0.5; \
+                  offset: -2 -2; \
+               } \
+               align: 0.0 0.5; \
+               text { \
+                  style: "check_label_textblock_style"; \
+                  min: 0 0; \
+               } \
+               color: CHECK_DEFAULT_TEXT_NORMAL_COLOR_INC; \
+            } \
+            description { state: "visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+               text.min: 1 1; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+            } \
+            description { state: "disabled_visible" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+               text.min: 1 1; \
+               color: CHECK_DEFAULT_TEXT_DISABLED_COLOR_INC; \
+            } \
+         } \
+         part { name: "events1"; \
+            type: RECT; \
+            ignore_flags: ON_HOLD; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         } \
+         part { name: "events2"; \
+            type: RECT; \
+            repeat_events: 1; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+            } \
+         } \
+         part { name: "disclip"; \
+            type: RECT; \
+            mouse_events: 0; \
+            description { state: "default" 0.0; \
+               color: CHECK_DISCLIP_NORMAL_COLOR_INC; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               color: CHECK_DISCLIP_DISABLED_COLOR_INC; \
+            } \
+         } \
+         part { name: "disabler"; \
+            type: RECT; \
+            description { state: "default" 0.0; \
+               color: 0 0 0 0; \
+               visible: 0; \
+            } \
+            description { state: "disabled" 0.0; \
+               inherit: "default" 0.0; \
+               visible: 1; \
+            } \
+         } \
+      } \
+      programs { \
+         program { name: "show"; \
+            signal: "show"; \
+            script { \
+               set_int(check_visible, CHECK_SHOW); \
+            } \
+         } \
+         program { name: "hide"; \
+            signal: "hide"; \
+            script { \
+               set_int(check_visible, CHECK_HIDE); \
+            } \
+         } \
+         program { name: "click"; \
+            signal: "mouse,clicked,1"; \
+            source: "events1"; \
+            action: SIGNAL_EMIT "elm,action,check,toggle" ""; \
+         } \
+         program { name: "bg_normal"; \
+            signal: "mouse,up,1"; \
+            source: "events2"; \
+            action: STATE_SET "default" 0.0; \
+            target: "bg"; \
+         } \
+         program { name: "pressed"; \
+            signal: "mouse,down,1"; \
+            source: "events2"; \
+            action: STATE_SET "pressed" 0.0; \
+            target: "bg"; \
+         } \
+         program { name: "mouse,out"; \
+            signal: "mouse,out"; \
+            source: "events2"; \
+            script { \
+               if (get_int(check_state) == CHECK_STATE_VISIBLE) \
+                 { \
+                    set_state(PART:"check", "visible", 0.0); \
+                    set_state(PART:"sequence_clip", "visible", 0.0); \
+                 } \
+               else \
+                 { \
+                    set_state(PART:"check", "default", 0.0); \
+                    set_state(PART:"sequence_clip", "default", 0.0); \
+                 } \
+            } \
+         } \
+         program { name: "check_on"; \
+            signal: "elm,state,check,on"; \
+            source: "elm"; \
+            script { \
+               set_int(check_state, CHECK_STATE_VISIBLE); \
+               if (get_int(check_visible) == CHECK_SHOW) \
+                 { \
+                    run_program(PROGRAM:"check_show_effect"); \
+                    run_program(PROGRAM:"check_draw_effect"); \
+                 } \
+               else \
+                 { \
+                    set_state(PART:"check", "visible", 0.0); \
+                    set_state(PART:"sequence_clip", "visible", 0.0); \
+                 } \
+            } \
+         } \
+         program { name: "check_off"; \
+            signal: "elm,state,check,off"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "check"; \
+            script { \
+               if (get_int(check_state) == CHECK_STATE_VISIBLE) \
+                 { \
+                    set_int(check_state, CHECK_STATE_DEFAULT); \
+                    set_state(PART:"check", "default", 0.0); \
+                    set_state(PART:"sequence_clip", "default", 0.0); \
+                 } \
+            } \
+         } \
+         program { name: "check_show_effect"; \
+            action: STATE_SET "visible" 0.0; \
+            transition: LINEAR 0.233; \
+            target: "check"; \
+         } \
+         program { name: "check_draw_effect"; \
+            action: STATE_SET "visible" 0.0; \
+            transition: LINEAR 0.267; \
+            target: "sequence_clip"; \
+         } \
+         program { name: "text_show"; \
+            signal: "elm,state,text,visible"; \
+            source: "elm"; \
+            action: STATE_SET "visible" 0.0; \
+            target: "elm.text"; \
+         } \
+         program { name: "text_hide"; \
+            signal: "elm,state,text,hidden"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "elm.text"; \
+         } \
+         program { name: "icon_show"; \
+            signal: "elm,state,icon,visible"; \
+            source: "elm"; \
+            action: STATE_SET "visible" 0.0; \
+            target: "elm.swallow.content"; \
+         } \
+         program { name: "icon_hide"; \
+            signal: "elm,state,icon,hidden"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "elm.swallow.content"; \
+         } \
+         program { name: "disable"; \
+            signal: "elm,state,disabled"; \
+            source: "elm"; \
+            action: STATE_SET "disabled" 0.0; \
+            target: "disabler"; \
+            target: "disclip"; \
+            target: "bg"; \
+            after: "disable_text"; \
+         } \
+         program { name: "disable_text"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"elm.text", st, 30, vl); \
+               if (!strcmp(st, "visible")) \
+                 set_state(PART:"elm.text", "disabled_visible", 0.0); \
+               else \
+                 set_state(PART:"elm.text", "disabled", 0.0); \
+               get_state(PART:"elm.swallow.content", st, 30, vl); \
+               if (!strcmp(st, "visible")) \
+                 set_state(PART:"elm.swallow.content", "disabled_visible", 0.0); \
+               else \
+                 set_state(PART:"elm.swallow.content", "disabled", 0.0); \
+               get_state(PART:"check", st, 30, vl); \
+               if (!strcmp(st, "visible")) \
+                 { \
+                    set_state(PART:"check", "disabled_visible", 0.0); \
+                    set_int(check_state, CHECK_STATE_DISABLED_VISIBLE); \
+                 } \
+            } \
+         } \
+         program { name: "enable"; \
+            signal: "elm,state,enabled"; \
+            source: "elm"; \
+            action: STATE_SET "default" 0.0; \
+            target: "disabler"; \
+            target: "disclip"; \
+            target: "bg"; \
+            after: "enable_text"; \
+         } \
+         program { name: "enable_text"; \
+            script { \
+               new st[31]; \
+               new Float:vl; \
+               get_state(PART:"elm.text", st, 30, vl); \
+               if (!strcmp(st, "disabled_visible")) \
+                 set_state(PART:"elm.text", "visible", 0.0); \
+               else \
+                 set_state(PART:"elm.text", "default", 0.0); \
+               get_state(PART:"elm.swallow.content", st, 30, vl); \
+               if (!strcmp(st, "visible")) \
+                 set_state(PART:"elm.swallow.content", "visible", 0.0); \
+               else \
+                 set_state(PART:"elm.swallow.content", "default", 0.0); \
+               get_state(PART:"check", st, 30, vl); \
+               if (!strcmp(st, "disabled_visible")) \
+                 { \
+                    set_state(PART:"check", "visible", 0.0); \
+                    set_state(PART:"sequence_clip", "visible", 0.0); \
+                    set_int(check_state, CHECK_STATE_VISIBLE); \
+                 } \
+               else \
+                 set_int(check_state, CHECK_STATE_DEFAULT); \
+            } \
+         } \
+      } \
+   }\
+
+CHECK_STYLE_DEFAULT("quickpanel", 48, 48)
+
+#define PROGRESSBAR_STATUS_TEXT_FONT_SIZE_INC 20
+#define PROGRESSBAR_LIST_PROGRESS_STYLE_TEXT_COLOR_INC          128 128 128 255
+#define PROGRESSBAR_LIST_PROGRESS_STYLE_STATUS_TEXT_COLOR_INC          128 128 128 255
+#define PROGRESSBAR_LIST_PROGRESS_HEIGHT_INC 20
+
+   group { name: "elm/progressbar/horizontal/quickpanel/list_progress";
+      images {
+         image: "quick_progress.9.png" COMP;
+         image: "quick_progress_bg.9.png" COMP;
+      }
+      parts {
+         part { name: "elm.padding.left";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 0.0  0.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 0.0  1.0;
+                  offset: 0 0;
+               }
+               visible: 0;
+               align: 0.0 0.0;
+            }
+         }
+         part { name: "elm.padding.right";
+            type: RECT;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 0;
+               rel1 {
+                  relative: 1.0  0.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 1.0  1.0;
+                  offset:   0   0;
+               }
+               visible: 0;
+               align: 1.0 0.0;
+            }
+         }
+         part { name: "elm.background.progressbar";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1 {
+                  to_x: "elm.padding.left";
+                  relative: 1.0 0.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  to_x: "elm.padding.right";
+                  relative: 0.0 1.0;
+                  offset: 0 0;
+               }
+            }
+         }
+         part { name: "elm.swallow.bar";
+            mouse_events: 0;
+            scale: 1;
+            type: SWALLOW;
+            description {
+               min: 1 PROGRESSBAR_LIST_PROGRESS_HEIGHT_INC;
+               max: 99999 PROGRESSBAR_LIST_PROGRESS_HEIGHT_INC;
+               state: "default" 0.0;
+               rel1 {
+                  to: "elm.background.progressbar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "elm.background.progressbar";
+                  relative: 1.0 1.0;
+               }
+            }
+         }
+         part { name: "elm.swallow.content";
+            type: SWALLOW;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               align: 0.0 0.5;
+               rel1 {
+                  offset: 0 0;
+                  to_y: "elm.background.progressbar";
+               }
+               rel2 {
+                  offset: 0 -1;
+                  relative: 0.0 1.0;
+                  to_y: "elm.background.progressbar";
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 1;
+               aspect: 1.0 1.0;
+               aspect_preference: VERTICAL;
+               rel2.offset: 4 -1;
+            }
+         }
+         part { name: "elm.text";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               visible: 0;
+               fixed: 1 1;
+               align: 0.0 0.5;
+               rel1.to_x: "elm.swallow.content";
+               rel1.relative: 1.0 0.0;
+               rel2.to_x: "elm.swallow.content";
+               rel2.relative: 1.0 1.0;
+               color: PROGRESSBAR_LIST_PROGRESS_STYLE_TEXT_COLOR_INC;
+               text {
+                  font: "Tizen:style=Medium";
+                  size: PROGRESSBAR_STATUS_TEXT_FONT_SIZE_INC;
+                  min: 0 0;
+                  align: 0.0 0.5;
+                  text_class: "tizen";
+               }
+            }
+            description { state: "visible" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+               text.min: 1 1;
+            }
+         }
+         part { name: "background";
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "elm.background.progressbar";
+            description {
+               state: "default" 0.0;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 1.0 1.0;
+               }
+               image {
+                  normal: "quick_progress_bg.9.png";
+                  border: 10 10 0 0;
+               }
+            }
+         }
+         part { name: "elm.text.status";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            description { state: "default" 0.0;
+               fixed: 1 1;
+               visible: 0;
+               rel1 {
+                  to: "background";
+                  relative: 0.5 0.5;
+               }
+               rel2 {
+                  to: "background";
+                  relative: 0.5 0.5;
+               }
+               text {
+                  font: "Tizen:style=Medium";
+                  size: PROGRESSBAR_STATUS_TEXT_FONT_SIZE_INC;
+                  min: 0 0;
+                  align: 0.5 0.0;
+                  text_class: "tizen";
+               }
+               color: PROGRESSBAR_LIST_PROGRESS_STYLE_TEXT_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+               text.min: 1 1;
+            }
+         }
+         part { name: "elm.progress.progressbar";
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "elm.background.progressbar";
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 1;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to_y: "elm.swallow.bar";
+                  to_x: "elm.cur.progressbar";
+                  offset: -1 -1;
+               }
+               image {
+                  normal: "quick_progress.9.png";
+                  border: 10 10 0 0;
+               }
+            }
+            description {
+               state: "invert" 0.0;
+               inherit: "default" 0.0;
+               rel1 {
+                  to_y: "elm.swallow.bar";
+                  to_x: "elm.cur.progressbar";
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 1.0 1.0;
+               }
+            }
+            description {
+               state: "state_begin" 0.0;
+               inherit: "default" 0.0;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 0.1 1.0;
+               }
+            }
+            description {
+               state: "state_end" 0.0;
+               inherit: "default" 0.0;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.9 0.0;
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 1.0 1.0;
+               }
+            }
+         }
+         part { name: "text-bar";
+            type: TEXT;
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "progress-rect";
+            //effect: SOFT_SHADOW;
+            scale: 0;
+            description { state: "default" 0.0;
+               align: 0.0 0.0;
+               fixed: 1 1;
+               visible: 0;
+               rel1.to: "elm.text.status";
+               rel1.offset: -1 -1;
+               rel2.to: "elm.text.status";
+               text {
+                  text_source: "elm.text.status";
+                  font: "Tizen:style=Medium";
+                  size: PROGRESSBAR_STATUS_TEXT_FONT_SIZE_INC;
+                  min: 0 0;
+                  align: 0.0 0.0;
+                  text_class: "tizen";
+               }
+               color: PROGRESSBAR_LIST_PROGRESS_STYLE_STATUS_TEXT_COLOR_INC;
+            }
+            description { state: "show" 0.0;
+               inherit: "default" 0.0;
+               visible: 0;
+               text.min: 1 1;
+            }
+         }
+         part { name: "elm.cur.progressbar";
+            mouse_events: 0;
+            scale: 1;
+            dragable {
+               confine: "background";
+               x: 1 1 1;
+               y: 0 0 0;
+            }
+            description { state: "default" 0.0;
+               min: 0 28;
+               fixed: 1 1;
+               visible: 0;
+               rel1 {
+                  to: "background";
+                  relative: 0 0;
+               }
+               rel2.to: "background";
+           }
+         }
+         part { name: "progress-rect";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1.to: "elm.progress.progressbar";
+               rel2.to: "elm.progress.progressbar";
+            }
+         }
+      }
+      programs {
+         program { name: "label_show";
+            signal: "elm,state,text,visible";
+            source: "elm";
+            action:  STATE_SET "visible" 0.0;
+            target: "elm.text";
+         }
+         program { name: "label_hide";
+            signal: "elm,state,text,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.text";
+         }
+         program { name: "icon_show";
+            signal: "elm,state,icon,visible";
+            source: "elm";
+            action:  STATE_SET "visible" 0.0;
+            target: "elm.swallow.content";
+         }
+         program { name: "icon_hide";
+            signal: "elm,state,icon,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.swallow.content";
+         }
+         program { name: "units_show";
+            signal: "elm,state,units,visible";
+            source: "elm";
+            action:  STATE_SET "show" 0.0;
+            target: "text-bar";
+            target: "elm.text.status";
+         }
+         program { name: "units_hide";
+            signal: "elm,state,units,hidden";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "text-bar";
+            target: "elm.text.status";
+         }
+         program { name: "slide_to_end";
+            action:  STATE_SET "state_end" 0.0;
+            transition: LINEAR 0.5;
+            target: "elm.progress.progressbar";
+            after: "slide_to_begin";
+         }
+         program { name: "slide_to_begin";
+            signal: "elm,state,slide,begin";
+            action: STATE_SET "state_begin" 0.0;
+            target: "elm.progress.progressbar";
+            transition: LINEAR 0.5;
+            after: "slide_to_end";
+         }
+         program { name: "start_pulse";
+            signal: "elm,state,pulse,start";
+            source: "elm";
+           // after: "slide_to_end";
+         }
+         program { name: "stop_pulse";
+            signal: "elm,state,pulse,stop";
+            source: "elm";
+            action: ACTION_STOP;
+            target: "slide_to_begin";
+            target: "slide_to_end";
+            target: "start_pulse";
+            //after: "state_pulse";
+         }
+         program { name: "state_pulse";
+            signal: "elm,state,pulse";
+            source: "elm";
+            action: STATE_SET "state_begin" 0.0;
+            target: "elm.progress.progressbar";
+            after: "units_hide";
+         }
+         program { name: "state_fraction";
+            signal: "elm,state,fraction";
+            source: "elm";
+            action: ACTION_STOP;
+            target: "slide_to_begin";
+            target: "slide_to_end";
+            target: "start_pulse";
+            action: STATE_SET "default" 0.0;
+            target: "elm.progress.progressbar";
+         }
+         program { name: "set_invert_on";
+            signal: "elm,state,inverted,on";
+            source: "elm";
+            action:  STATE_SET "invert" 0.0;
+            target: "elm.progress.progressbar";
+         }
+         program { name: "set_invert_off";
+            signal: "elm,state,inverted,off";
+            source: "elm";
+            action:  STATE_SET "default" 0.0;
+            target: "elm.progress.progressbar";
+         }
+      }
+   }
+
+#define PROGRESSBAR_LIST_PENDING_HEIGHT_INC 20
+
+   group { name: "elm/progressbar/horizontal/quickpanel/pending_list";
+      images {
+         image: "quick_progress_unknown_port_01.png" COMP;
+         image: "quick_progress_unknown_port_02.png" COMP;
+      }
+      parts {
+         part { name: "elm.background.progressbar";
+            type: RECT;
+            mouse_events: 0;
+            scale: 1;
+            description {
+               state: "default" 0.0;
+               rel1 {
+                  relative: 0.0 0.0;
+                  offset: 0 0;
+               }
+               rel2 {
+                  relative: 1.0 1.0;
+               }
+            }
+         }
+         part { name: "elm.swallow.bar";
+            mouse_events: 0;
+            scale: 1;
+            type: SWALLOW;
+            description {
+               min: 1 PROGRESSBAR_LIST_PENDING_HEIGHT_INC;
+               max: 99999 PROGRESSBAR_LIST_PENDING_HEIGHT_INC;
+               state: "default" 0.0;
+               rel1 {
+                  to: "elm.background.progressbar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "elm.background.progressbar";
+                  relative: 1.0 1.0;
+               }
+            }
+         }
+         part { name: "elm.progress.progressbar";
+            mouse_events: 0;
+            scale: 1;
+            clip_to: "elm.background.progressbar";
+            description {
+               state: "default" 0.0;
+               min: 0 0;
+               fixed: 1 1;
+               rel1 {
+                  to: "elm.swallow.bar";
+                  relative: 0.0 0.0;
+               }
+               rel2 {
+                  to: "elm.swallow.bar";
+                  relative: 1.0 1.0;
+                  offset: -1 -1;
+               }
+               image {
+                  normal: "quick_progress_unknown_port_01.png";
+                  border: 7 7 0 0;
+               }
+            }
+            description {
+               state: "state_begin" 0.0;
+               inherit: "default" 0.0;
+            }
+            description {
+               state: "state_end" 0.0;
+               inherit: "default" 0.0;
+               image {
+                  normal: "quick_progress_unknown_port_02.png";
+                  border: 7 7 0 0;
+               }
+            }
+         }
+      }
+      programs {
+         program { name: "slide_to_end";
+            action:  STATE_SET "state_end" 0.0;
+            in: 0.3 0.0;
+            target: "elm.progress.progressbar";
+            after: "slide_to_begin";
+         }
+         program { name: "slide_to_begin";
+            signal: "elm,state,slide,begin";
+            action: STATE_SET "state_begin" 0.0;
+            target: "elm.progress.progressbar";
+            in: 0.3 0.0;
+            after: "slide_to_end";
+         }
+         program { name: "start_pulse";
+            signal: "elm,state,pulse,start";
+            source: "elm";
+            after: "slide_to_end";
+         }
+         program { name: "stop_pulse";
+            signal: "elm,state,pulse,stop";
+            source: "elm";
+            action: ACTION_STOP;
+            target: "slide_to_begin";
+            target: "slide_to_end";
+            target: "start_pulse";
+            after: "init_pulse";
+         }
+         program { name: "init_pulse";
+            action: STATE_SET "default" 0.0;
+            target: "elm.progress.progressbar";
+         }
+      }
+   }
diff --git a/data/sip.wav b/data/sip.wav
new file mode 100644 (file)
index 0000000..a4394bf
Binary files /dev/null and b/data/sip.wav differ
diff --git a/debian/changelog b/debian/changelog
new file mode 100755 (executable)
index 0000000..f370e99
--- /dev/null
@@ -0,0 +1,8 @@
+quickpanel (0.1.1-112) unstable; urgency=low
+
+  * update boilerplate
+  * Git: pkgs/q/quickpanel
+  * Tag: quickpanel_0.1.1-112
+
+ -- Jeonghoon Park <jh1979.park@samsung.com>  Wed, 02 May 2012 17:45:20 +0900
+
diff --git a/debian/compat b/debian/compat
new file mode 100755 (executable)
index 0000000..7ed6ff8
--- /dev/null
@@ -0,0 +1 @@
+5
diff --git a/debian/control b/debian/control
new file mode 100755 (executable)
index 0000000..58806f9
--- /dev/null
@@ -0,0 +1,17 @@
+Source: quickpanel
+Section: devel
+Priority: extra
+Maintainer: Jeonghoon Park <jh1979.park@samsung.com>, Youngjoo Park <yjoo93.park@samsung.com> 
+Build-Depends: debhelper (>= 5), libnotification-dev, libaul-1-dev, libelm-dev, libappcore-efl-dev, libappcore-common-dev, dlog-dev, libslp-setting-dev, libheynoti-dev, libsvi-dev, libprivilege-control-dev, libecore-dev, libedbus-dev, libevas-dev, libedje-dev, libmm-sound-dev, libicu-dev, libappsvc-dev, iniparser-dev, syspopup-caller-dev
+Standards-Version: 3.7.2
+
+Package: org.tizen.quickpanel
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, libappcore-efl-0, libelm-bin, libaul-1, libnotification-0, libsvi-0, libicu
+Description: Quickpanel Application
+
+Package: org.tizen.quickpanel-dbg
+Section: debug
+Architecture: any
+Depends: ${shlibs:Depends}, ${misc:Depends}, org.tizen.quickpanel (= ${Source-Version})
+Description: Quickpanel Application
diff --git a/debian/org.tizen.quickpanel.install.in b/debian/org.tizen.quickpanel.install.in
new file mode 100755 (executable)
index 0000000..fb4746c
--- /dev/null
@@ -0,0 +1,6 @@
+@PREFIX@/bin/*
+@PREFIX@/res/locale/*
+@PREFIX@/res/edje/*
+@PREFIX@/data
+/opt/share/applications/*
+/etc/init.d/*
diff --git a/debian/org.tizen.quickpanel.postinst.in b/debian/org.tizen.quickpanel.postinst.in
new file mode 100755 (executable)
index 0000000..aabc3cb
--- /dev/null
@@ -0,0 +1,13 @@
+#!/bin/sh
+
+
+if [ ${USER} = "root" ]
+then
+       chown -R 5000:5000 @PREFIX@/data
+fi
+
+chmod 755 /etc/init.d/quickpanel
+mkdir -p /etc/rc.d/rc5.d/
+mkdir -p /etc/rc.d/rc3.d/
+ln -s  /etc/init.d/quickpanel /etc/rc.d/rc5.d/S51quickpanel
+ln -s  /etc/init.d/quickpanel /etc/rc.d/rc3.d/S51quickpanel
diff --git a/debian/rules b/debian/rules
new file mode 100755 (executable)
index 0000000..b0c2d9f
--- /dev/null
@@ -0,0 +1,114 @@
+#!/usr/bin/make -f
+# -*- makefile -*-
+# Sample debian/rules that uses debhelper.
+# This file was originally written by Joey Hess and Craig Small.
+# As a special exception, when this file is copied by dh-make into a
+# dh-make output file, you may use that output file without restriction.
+# This special exception was added by Craig Small in version 0.37 of dh-make.
+
+# Uncomment this to turn on verbose mode.
+#export DH_VERBOSE=1
+
+CFLAGS ?= -Wall -g
+LDFLAGS ?=
+PREFIX ?= /opt/apps/org.tizen.quickpanel
+RESDIR ?= $(PREFIX)/res
+DATADIR ?= $(PREFIX)/data
+
+ifneq (,$(findstring noopt,$(DEB_BUILD_OPTIONS)))
+       CFLAGS += -O0
+else
+       CFLAGS += -O2
+endif
+
+LDFLAGS += -Wl,--rpath=$(PREFIX)/lib -Wl,--as-needed
+
+CMAKE_BUILD_DIR ?= $(CURDIR)/cmake_build_tmp
+
+configure: configure-stamp
+configure-stamp:
+       dh_testdir
+       # Add here commands to configure the package.
+       mkdir -p $(CMAKE_BUILD_DIR) && cd $(CMAKE_BUILD_DIR) && \
+       CFLAGS="$(CFLAGS)" LDFLAGS="$(LDFLAGS)" cmake .. -DCMAKE_INSTALL_PREFIX="$(PREFIX)"
+
+       touch configure-stamp
+
+build: build-stamp
+
+build-stamp: configure-stamp 
+       dh_testdir
+
+       # Add here commands to compile the package.
+       cd $(CMAKE_BUILD_DIR) && $(MAKE)
+
+       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+               cat $$f > $${f%.in}; \
+               sed -i -e "s#@PREFIX@#$(PREFIX)#g" $${f%.in}; \
+               sed -i -e "s#@RESDIR@#$(RESDIR)#g" $${f%.in}; \
+               sed -i -e "s#@DATADIR@#$(DATADIR)#g" $${f%.in}; \
+       done
+
+       touch $@
+
+clean:
+       dh_testdir
+       dh_testroot
+       rm -f build-stamp configure-stamp
+
+       # Add here commands to clean up after the build process.
+       rm -rf $(CMAKE_BUILD_DIR)
+
+       for f in `find $(CURDIR)/debian/ -name "*.in"`; do \
+               rm -f $${f%.in}; \
+       done
+
+       dh_clean 
+
+install: build
+       dh_testdir
+       dh_testroot
+       dh_clean -k 
+       dh_installdirs
+
+       # Add here commands to install the package into debian/wavplayer.
+       cd $(CMAKE_BUILD_DIR) && $(MAKE) DESTDIR=$(CURDIR)/debian/tmp install
+
+
+# Build architecture-independent files here.
+binary-indep: build install
+# We have nothing to do by default.
+
+# Build architecture-dependent files here.
+binary-arch: build install
+       dh_testdir
+       dh_testroot
+#      dh_installchangelogs 
+#      dh_installdocs
+#      dh_installexamples
+       dh_install --sourcedir=debian/tmp
+#      dh_installmenu
+#      dh_installdebconf       
+#      dh_installlogrotate
+#      dh_installemacsen
+#      dh_installpam
+#      dh_installmime
+#      dh_python
+#      dh_installinit
+#      dh_installcron
+#      dh_installinfo
+       dh_installman
+       dh_link
+       dh_strip --dbg-package=org.tizen.quickpanel-dbg
+       dh_compress
+       dh_fixperms
+#      dh_perl
+       dh_makeshlibs
+       dh_installdeb
+       dh_shlibdeps
+       dh_gencontrol
+       dh_md5sums
+       dh_builddeb
+
+binary: binary-indep binary-arch
+.PHONY: build clean binary-indep binary-arch binary install configure
diff --git a/icons/quickpanel_icon_default.png b/icons/quickpanel_icon_default.png
new file mode 100644 (file)
index 0000000..ef74fd1
Binary files /dev/null and b/icons/quickpanel_icon_default.png differ
diff --git a/org.tizen.quickpanel.manifest b/org.tizen.quickpanel.manifest
new file mode 100755 (executable)
index 0000000..3abe39e
--- /dev/null
@@ -0,0 +1,23 @@
+<manifest>
+    <define>
+        <domain name="org.tizen.quickpanel"/>
+        <request>
+            <smack request="system::vconf" type="arwxt"/>
+            <smack request="system::homedir" type="arwxt"/>
+            <smack request="dbus" type="w"/>
+            <smack request="notification::db" type="rw"/>
+        </request>
+        <permit>
+            <smack permit="dbus" type="w"/>
+        </permit>
+    </define>
+    <assign>
+        <filesystem path="/usr/share/applications/org.tizen.quickpanel.desktop" label="_"/>
+        <filesystem path="/etc/init.d/quickpanel" label="_" exec_label="none"/>
+        <filesystem path="/etc/rc.d/rc3.d/S51quickpanel" label="_" exec_label="none"/>
+        <filesystem path="/etc/rc.d/rc5.d/S51quickpanel" label="_" exec_label="none"/>
+    </assign>
+    <request>
+        <domain name="org.tizen.quickpanel"/>
+    </request>
+</manifest>
diff --git a/packaging/org.tizen.quickpanel.spec b/packaging/org.tizen.quickpanel.spec
new file mode 100755 (executable)
index 0000000..007f705
--- /dev/null
@@ -0,0 +1,96 @@
+%define PREFIX    /usr/apps/%{name}
+%define RESDIR    %{PREFIX}/res
+%define DATADIR    %{PREFIX}/data
+
+Name:       org.tizen.quickpanel
+Summary:    Quick Panel
+Version:    0.3.8
+Release:    1
+Group:      util
+License:    Flora Software License
+Source0:    %{name}-%{version}.tar.gz
+Source101:  quickpanel.service
+
+BuildRequires: pkgconfig(capi-appfw-application)
+BuildRequires: pkgconfig(capi-appfw-app-manager)
+BuildRequires: pkgconfig(capi-system-runtime-info)
+BuildRequires: pkgconfig(capi-system-info)
+BuildRequires: pkgconfig(capi-system-device)
+BuildRequires: pkgconfig(capi-network-tethering)
+BuildRequires: pkgconfig(capi-media-player)
+BuildRequires: pkgconfig(feedback)
+BuildRequires: pkgconfig(appcore-common)
+BuildRequires: pkgconfig(heynoti)
+BuildRequires: pkgconfig(notification)
+BuildRequires: pkgconfig(vconf)
+BuildRequires: pkgconfig(appsvc)
+BuildRequires: pkgconfig(devman_haptic)
+BuildRequires: pkgconfig(libprivilege-control)
+BuildRequires: pkgconfig(ecore-x)
+BuildRequires: pkgconfig(edbus)
+BuildRequires: pkgconfig(evas)
+BuildRequires: pkgconfig(ecore)
+BuildRequires: pkgconfig(edje)
+BuildRequires: pkgconfig(icu-i18n)
+BuildRequires: pkgconfig(dlog)
+BuildRequires: pkgconfig(elementary)
+BuildRequires: pkgconfig(syspopup-caller)
+BuildRequires: pkgconfig(minicontrol-viewer)
+BuildRequires: pkgconfig(minicontrol-monitor)
+BuildRequires: pkgconfig(utilX)
+BuildRequires: gettext-tools
+BuildRequires: cmake
+BuildRequires: edje-tools
+
+Requires(post): /usr/bin/vconftool
+Requires: e17
+%description
+Quick Panel
+
+%prep
+%setup -q
+
+
+%build
+LDFLAGS+="-Wl,--rpath=%{PREFIX}/lib -Wl,--as-needed";export LDFLAGS
+cmake . -DCMAKE_INSTALL_PREFIX=%{PREFIX}
+make %{?jobs:-j%jobs}
+
+%install
+rm -rf %{buildroot}
+%make_install
+mkdir -p %{buildroot}/%{_sysconfdir}/rc.d/rc5.d/
+mkdir -p %{buildroot}/%{_sysconfdir}/rc.d/rc3.d/
+ln -s ../../init.d/quickpanel %{buildroot}/%{_sysconfdir}/rc.d/rc5.d/S51quickpanel
+ln -s ../../init.d/quickpanel %{buildroot}/%{_sysconfdir}/rc.d/rc3.d/S51quickpanel
+
+mkdir -p %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants
+install -m 0644 %SOURCE101 %{buildroot}%{_libdir}/systemd/user/
+ln -s ../quickpanel.service %{buildroot}%{_libdir}/systemd/user/core-efl.target.wants/quickpanel.service
+
+mkdir -p %{buildroot}/usr/share/license
+cp -f LICENSE.Flora %{buildroot}/usr/share/license/%{name}
+
+%post
+vconftool set -t bool db/setting/rotate_lock 0 -u 5000
+vconftool set -t bool db/setting/drivingmode/drivingmode 0 -u 5000
+vconftool set -t bool memory/private/%{name}/started 0 -i -u 5000
+vconftool set -t bool memory/private/%{name}/enable_ask 1 -i -u 5000
+vconftool set -t bool memory/private/%{name}/disable_ask 1 -i -u 5000
+vconftool set -t bool memory/private/%{name}/hotspot/enable_ask 1 -i -u 5000
+
+%files
+%manifest org.tizen.quickpanel.manifest
+%defattr(-,root,root,-)
+%attr(755,-,-) %{_sysconfdir}/init.d/quickpanel
+%attr(775,app,app) %{DATADIR}
+%{DATADIR}/*
+%{PREFIX}/bin/*
+%{RESDIR}/*
+/usr/share/packages/%{name}.xml
+%{_sysconfdir}/rc.d/rc3.d/S51quickpanel
+%{_sysconfdir}/rc.d/rc5.d/S51quickpanel
+%{_sysconfdir}/init.d/quickpanel
+%{_libdir}/systemd/user/quickpanel.service
+%{_libdir}/systemd/user/core-efl.target.wants/quickpanel.service
+/usr/share/license/%{name}
diff --git a/packaging/quickpanel.service b/packaging/quickpanel.service
new file mode 100644 (file)
index 0000000..5dc7424
--- /dev/null
@@ -0,0 +1,12 @@
+
+[Unit]
+Description=Start the Quickpanel
+Before=core-efl.target
+After=xorg.target starter.service e17.service
+Requires=starter.service
+
+[Service]
+ExecStart=/usr/apps/org.tizen.quickpanel/bin/quickpanel
+
+[Install]
+WantedBy=tizen-mobile.target
diff --git a/po/CMakeLists.txt b/po/CMakeLists.txt
new file mode 100755 (executable)
index 0000000..5495a31
--- /dev/null
@@ -0,0 +1,24 @@
+# for i18n
+
+SET(POFILES ar.po az.po bg.po ca.po cs.po da.po de_DE.po el_GR.po en.po en_PH.po en_US.po es_ES.po es_MX.po et.po eu.po fi.po fr_CA.po fr_FR.po ga.po gl.po hi.po hr.po hu.po hy.po is.po it_IT.po ja_JP.po ka.po kk.po ko_KR.po lt.po lv.po mk.po nb.po nl_NL.po pl.po pt_BR.po pt_PT.po ro.po ru_RU.po sk.po sl.po sr.po sv.po tr_TR.po uk.po uz.po zh_CN.po zh_HK.po zh_SG.po zh_TW.po)
+
+SET(MSGFMT "/usr/bin/msgfmt")
+
+FOREACH(pofile ${POFILES})
+       SET(pofile ${CMAKE_CURRENT_SOURCE_DIR}/${pofile})
+       MESSAGE("PO: ${pofile}")
+       GET_FILENAME_COMPONENT(absPofile ${pofile} ABSOLUTE)
+       GET_FILENAME_COMPONENT(lang ${absPofile} NAME_WE)
+       SET(moFile ${CMAKE_CURRENT_BINARY_DIR}/${lang}.mo)
+       ADD_CUSTOM_COMMAND(
+                       OUTPUT ${moFile}
+                       COMMAND ${MSGFMT} -o ${moFile} ${absPofile}
+                       DEPENDS ${absPofile}
+       )
+       INSTALL(FILES ${moFile}
+                       DESTINATION ${LOCALEDIR}/${lang}/LC_MESSAGES RENAME ${PROJECT_NAME}.mo)
+       SET(moFiles ${moFiles} ${moFile})
+ENDFOREACH(pofile)
+
+MESSAGE(".mo files: ${moFiles}")
+ADD_CUSTOM_TARGET(po ALL DEPENDS ${moFiles})
diff --git a/po/ar.po b/po/ar.po
new file mode 100755 (executable)
index 0000000..badb90d
--- /dev/null
+++ b/po/ar.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "إخطارات"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "مكالمات طوارئ فقط"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "تدوير"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "إخطارات (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "الاهتزاز"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "صوت واهتزاز"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "تدوير تلقائي"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "قفل التدوير"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "وضع التخزين كبير السعة"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "تعطيل"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "تفعيل"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "غير مدعوم"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "قم بإدخال البطاقة للنفاذ إلى خدمات الشبكة"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "عدم السؤال مرة أخرى"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "إدخال بطاقة SIM وإعادة تشغيل الجهاز لاستخدام التقييد"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "الاتصال من خلال حزم البيانات قد تتطلب تكاليف إضافية. متابعة؟"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "تلقائي"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "توفير الطاقة"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "تقييد"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "بيانات الهاتف المحمول"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "وضع القيادة"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "يتعذر الاتصال بشبكات الهاتف المحمول أثناء تفعيل وضع الطيران. اتصل بشبكة Wi-Fi بدلا من ذلك أو قم بإلغاء تفعيل وضع الطيران، ثم أعد المحاولة"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "يستهلك تقييد Wi-Fi‬ الكثير من طاقة البطارية وتزيد من استخدام البيانات. هل تريد المتابعة؟"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "إلغاء تفعيل التقييد لاستخدام Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "لتفعيل وضع توفير الطاقة، قم بتفعيل وظيفة واحدة ذات صلة"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "إيقاف تشغيل التقييد لاستخدام Wi-Fi"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "لا يمكن تنشيط كل من Wi-Fi وMobile AP في الوقت نفسه. هل تريد إلغاء تنشيط Mobile AP؟"
+
diff --git a/po/az.po b/po/az.po
new file mode 100755 (executable)
index 0000000..eb473f5
--- /dev/null
+++ b/po/az.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Bildirişlər"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Yalnız fövqəladə zənglər üçün"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Fırlatma"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Bildirişlər (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibrasiya"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Səs və titrəmə"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Avto fırlatma"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Fırlanma kilidi"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Kütləvi yaddaş rejimi"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Söndür"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Qoş"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Dəstəklənmədi"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Şəbəkə xidmətlərinə daxil olmaq üçün SİM kartı daxil edin"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Bir də soruşma"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "SIM kartı daxil edin və bağlanmadan istifadə etmək üçün cihazı yenidən başladın"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Paket məlumatları vasitəsilə qoşulma əlavə qiymət tətbiq edə bilər. Davam edilsin?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Avtomatik"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Enerji qorunması"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Bağlanma"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobil məlumatlar"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Sürücülük rejimi"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Uçuş rejimi aktiv olduqda mobil şəbəkələrə qoşulmaq mümkün deyil. Əvəzinə Wi-Fi şəbəkəsinə qoşulun və ya Uçuş rejimini qeyri-aktiv edin və yenidən cəhd edin"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi bağlanma daha çox batareyadan istifadə edir və verilənlərdən istifadənizi artırır. Davam etsin?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wi-Fi-dan istifadə etmək üçün bağlanmanı söndür"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Enerji qorunması rejimini aktivləşdirmək üçün ən azı bir müvafiq funksiyanı aktivəşdirin"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Bağlanmadan istifadə etmək üçün Wi-Fi-ı söndür"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi və Mobile AP eyni zamanda aktivləşdirilə bilməz. Mobile AP qeyri-aktiv edilsin?"
+
diff --git a/po/bg.po b/po/bg.po
new file mode 100755 (executable)
index 0000000..7ff54de
--- /dev/null
+++ b/po/bg.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Уведомления"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Само спешни повиквания"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Въртене"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Уведомления (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Вибрация"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Звънене и вибрация"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Автом. завърт."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Заключв. завъртане"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Режим запам. устройство"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Забрани"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Разрешаване"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Не се поддържа"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Поставете SIM картата, за да получите достъп до услуги на мрежата"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Не питай повече"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Поставете SIM карта и рестартирайте устройството, за да използвате привързване"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "При свързване за пакетни данни може да се начислят допълнителни такси. Продължаване?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Пестене на енергия"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Привързване"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Мобилни данни"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Режим Шофиране"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Не може да се свърже към мобилни мрежи, когато е активиран режим Полет. Вместо това се свържете към Wi-Fi мрежа или деактивирайте режим Полет и опитайте отново"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi привързване изразходва повече енергия от батерията и увеличава потреблението на данни. Продължаване?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Деактивирайте привързване, за да използвате Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "За да активирате режим Пестене на енергия, активирайте поне една релевантна функция"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Изключете Wi-Fi, за да използвате привързване"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi и Mobile AP не могат да бъдат активирани едновременно.. Деактивиране на Mobile AP?"
+
diff --git a/po/ca.po b/po/ca.po
new file mode 100755 (executable)
index 0000000..4fecc6f
--- /dev/null
+++ b/po/ca.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notificacions"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Només trucades d'emergència"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotació"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notificacions (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibració"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "So i vibració"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotació auto."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Bloq de rotació"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Mode emmagatzemat massiu"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Desactiv"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "No s'admet"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insereixi la targeta SIM per a accedir als serveis de xarxa"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "No ho tornis a preguntar"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Insereixi una targeta SIM i reiniciï el dispositiu per utilitzar tethering"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "La connexió mitjançant paquet de dades pot suposar un cost addicional. Vol continuar?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Estalvi d'energia"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Dades mòbils"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Mode de conducció"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "No es pot connectar a xarxes mòbils mentre el mode Vol està habilitat. Connecti a una xarxa Wi-Fi en el seu lloc, o deshabiliti el mode Vol i torni-ho a intentar"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "El tethering Wi-Fi consumeix més bateria i augmenta el consum de dades. Continuar?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Deshabilitar tethering per utilitzar Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Per habilitar el mode d'estalvi d'energia, habiliti almenys una funció rellevant"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Desactivar el Wi-Fi per utilitzar tethering"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "No es poden activar els punt d'accés Wi-Fi i mòbil al mateix temps. Desactivar al punt d'accés mòbil?"
+
diff --git a/po/cs.po b/po/cs.po
new file mode 100755 (executable)
index 0000000..b436e05
--- /dev/null
+++ b/po/cs.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Oznámení"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Pouze tísňová volání"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Otočení"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Oznámení (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibrace"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Zvuk a vibrace"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Automat. otočení"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Zámek otočení"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Režim velkokap. pam. zař."
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Vypnout"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Povolit"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Není podporováno"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Chcete-li používat síťové služby, vložte SIM kartu"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Příště se neptat"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Chcete-li použít sdílení připojení, vložte SIM kartu a restartujte zařízení"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Připojení prostřednictvím datových paketů může zahrnovat další poplatky. Chcete pokračovat?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automaticky"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Úsporný režim"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Sdílení internetového připojení"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobilní data"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Režim Vozidlo"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "V režimu Letadlo není možné se připojit k mobilním sítím. Připojte se pomocí sítě Wi-Fi, nebo vypněte režim Letadlo a opakujte akci"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Sdílení připojení Wi-Fi spotřebovává více energie z baterie a zvyšuje využívání dat. Pokračovat?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Chcete-li použít Wi-Fi, vypněte sdílení připojení k Intern."
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Chcete-li zapnout Úsporný režim, zapněte alespoň jednu související funkci"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Chcete použít sdílení připojení k Internetu, vypněte Wi-Fi"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi a mobilní přístupový bod nelze aktivovat současně. Chcete deaktivovat mobilní přístupový bod?"
+
diff --git a/po/da.po b/po/da.po
new file mode 100755 (executable)
index 0000000..9783e94
--- /dev/null
+++ b/po/da.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Meddelelser"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Kun nødopkald"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotation"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Meddelelser (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibration"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Lyd og vibration"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Auto rotation"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Lås rotation"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Masselager-tilstand"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Deaktivér"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Aktivér"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Understøttes ikke"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Indsæt SIM-kortet for at få adgang til netværkstjenesterne"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Spørg ikke igen"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Isæt SIM-kort, og genstart enhed for at bruge deling"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Tilslutning via pakkedata kan medføre ekstra gebyrer. Fortsæt?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Strøm\n-besparelse"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Internetdeling"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobildata"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Køretilstand"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Kan ikke oprette forbindelse til mobile netværk, da Flytilstand er aktiveret. Opret forbindelse til Wi-Fi-netværk i stedet, eller deaktivér Flytilstand og prøv igen"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi-deling bruger mere batteri og forøger dit dataforbrug. Fortsæt?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Deaktivér deling for at bruge Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Aktiver mindst én relevant funktion for at aktivere Strømsparetilstand"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Sluk for Wi-Fi for at bruge deling"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Både Wi-Fi og mobilt adgangspunkt kan ikke være aktiveret på samme tid. Deaktivér mobilt adgangspunkt?"
+
diff --git a/po/de_DE.po b/po/de_DE.po
new file mode 100755 (executable)
index 0000000..6bbf4b3
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Benachricht."
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Nur Notrufe"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Drehung"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Benachrichtigungen (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibration"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Ton & Vibration"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Automat.\nAusrichten"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Automat.\nAusrichten"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Massenspeichermodus"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Deaktiv."
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Aktivieren"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nicht unterstützt"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "Sie können Datenanwendungen, wie Browser, E-Mail oder YouTube, nicht mehr über das mobile Netzwerk verwenden. Anrufe und Textnachrichten sind weiterhin möglich. Fortfahren?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "SIM-Karte einsetzen, um auf Netzdienste zuzugreifen"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Nicht erneut fragen"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "SIM-Karte einsetzen und Gerät neu starten, um Tethering zu verwenden."
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Die Verbindung über Paketdaten kann zusätzliche Kosten erzeugen. Fortfahren?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Energiesparmodus"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobile Datenverbindung"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Fahrzeugmodus"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Bei aktiviertem Offline-Modus kann keine Verbindung mit mobilen Netzwerken hergestellt werden. Verbinden Sie sich stattdessen mit WLAN oder deaktivieren Sie den Offline-Modus und versuchen Sie es erneut."
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "WLAN-Tethering verbraucht mehr Akkuleistung und erhöht Ihre Datenverarbeitung. Fortfahren?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Tethering deaktivieren, um WLAN zu verwenden"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Energiesparmodus durch Aktivierung mindestens einer relevanten Funktion aktivieren."
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "WLAN ausschalten, um Tethering zu verwenden"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "WLAN und Mobile AP können nicht zur gleichen Zeit aktiviert werden. Mobile AP deaktivieren?"
+
diff --git a/po/el_GR.po b/po/el_GR.po
new file mode 100755 (executable)
index 0000000..c9d9468
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Ειδοποιήσεις"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Μόνο επείγουσες κλήσεις"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Περιστρ."
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Ειδοποιήσεις (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Δόνηση"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Ήχος & δόνηση"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Αυτόμ. περιστρ."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Κλείδ. περιστρ."
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Λειτ. μαζικής αποθήκευσης"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Απενεργ."
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Ενεργό"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Δεν υποστηρίζεται"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Εισάγετε την κάρτα SIM για παροχή πρόσβασης στις υπηρεσίες δικτύου"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Να μην ερωτηθώ ξανά"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Εισαγάγετε την κάρτα SIM και επανεκκινήστε τη συσκευή για να χρησιμοποιήσετε τη λειτουργία tethering"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Ενδέχεται να υπάρχουν επιπλέον χρεώσεις για τη σύνδεση μέσω πακέτου δεδομένων. Συνέχεια;"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Αυτόματο"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Εξοικονόμηση ενέργειας"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Δεδομ. κινητής συσκ."
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Λειτουργία οδήγησης"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Δεν είναι δυνατή η σύνδεση σε δίκτυα κινητής τηλεφωνίας όσο είναι ενεργοποιημένη η λειτουργία πτήσης. Συνδεθείτε σε δίκτυο Wi-Fi ή απενεργοποιήστε τη λειτουργία πτήσης και δοκιμάστε ξανά"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Το tethering μέσω Wi-Fi καταναλώνει περισσότερη ισχύ μπαταρίας και αυξάνει τη χρήση δεδομένων. Συνέχεια;"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Απενεργοποιήστε τη λειτουργία tethering για χρήση του Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Για την ενεργοποίηση της λειτουργίας εξοικονόμησης ενέργειας, ενεργοποιήστε τουλάχιστον μία σχετική λειτουργία"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Απενεργοποιήστε το Wi-Fi για χρήση της λειτουργίας tethering"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Τόσο το Wi-Fi όσο και το AP για κινητά δεν μπορούν να ενεργοποιηθούν ταυτόχρονα. Απενεργοποίηση AP για κινητά;"
+
diff --git a/po/en.po b/po/en.po
new file mode 100755 (executable)
index 0000000..7b5baf6
--- /dev/null
+++ b/po/en.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notifications"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Emergency calls only"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotation"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notifications (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibration"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Sound & vibration"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Auto rotation"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Rotation lock"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Mass storage mode"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Disable"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Enable"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Unsupported"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insert SIM card to access network services"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Do not ask again"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Insert SIM card and restart device to use tethering"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Connecting via packet data may incur additional charges. Continue?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Power saving"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobile data"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Driving mode"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Unable to connect to mobile networks while Flight mode is enabled. Connect to Wi-Fi network instead, or disable Flight mode and try again"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi tethering consumes more battery power and increases your data usage. Continue?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Disable tethering to use Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "To enable Power saving mode, enable at least one relevant function"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Turn off Wi-Fi to use tethering"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Both Wi-Fi and mobile AP cannot be activated at the same time. Deactivate mobile AP?"
+
diff --git a/po/en_PH.po b/po/en_PH.po
new file mode 100755 (executable)
index 0000000..08776c6
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notifications"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Emergency calls only"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotation"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notifications (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibration"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Sound & vibration"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Auto rotation"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Rotation lock"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Mass storage mode"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Disable"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Enable"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Unsupported"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insert SIM card to access network services"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Do not ask again"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Insert SIM card and restart device to use tethering"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Connecting via packet data may incur additional charges. Continue?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Power saving"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobile data"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Driving mode"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Unable to connect to mobile network while Flight mode is enabled. Connect to Wi-Fi network instead, or disable Flight mode and try again"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi tethering consumes more battery power and increases your data usage. Continue?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Disable tethering to use Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "To enable Power saving mode, enable at least one relevant function"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Turn off Wi-Fi to use tethering"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Both Wi-Fi and Mobile AP cannot be activated at the same time. Deactivate Mobile AP?"
+
diff --git a/po/en_US.po b/po/en_US.po
new file mode 100755 (executable)
index 0000000..45da433
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notifications"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Emergency calls only"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotation"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notifications (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibration"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Sound & vibration"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Auto rotation"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Rotation lock"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Mass storage mode"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Disable"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Enable"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Unsupported"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insert SIM card to access network services"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Do not ask again"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Insert SIM card and restart device to use tethering"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Connecting via packet data may incur additional charges. Continue?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Power saving"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobile data"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Driving mode"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Unable to connect to mobile networks while Airplane mode is enabled. Connect to Wi-Fi network instead, or disable Airplane mode and try again"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi tethering consumes more battery power and increases your data usage. Continue?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Disable tethering to use Wi-Fi."
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "To enable Power saving mode, enable at least one relevant function."
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Turn off Wi-Fi to use tethering."
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Both Wi-Fi and Mobile AP cannot be activated at the same time. Deactivate Mobile AP?"
+
diff --git a/po/es_ES.po b/po/es_ES.po
new file mode 100755 (executable)
index 0000000..ec8754b
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notificación"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Sólo llamadas de emergencia"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotación"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notificaciones (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibración"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Sonido y vibración"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotación autom"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Bloq rotación"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Modo almacenam masivo"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Desactiv"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Habilitar"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "No admitido"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "Ya no podrá utilizar aplicaciones de datos como el navegador, el correo electrónico o YouTube mediante la conexión móvil. Las llamadas y los mensajes de texto seguirán funcionando. ¿Continuar?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Inserte la tarjeta SIM para acceder a los servicios de red"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "No preguntar de nuevo"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Introduzca la tarjeta SIM y reinicie el dispositivo para utilizar anclaje a red"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "La conexión mediante paquetes de datos puede suponer gastos adicionales. ¿Continuar?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Ahorro de energía"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Módem USB"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Datos móviles"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Modo de conducción"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "No se puede conectar a redes móviles mientras el modo Avión está activado. Conecte a una red Wi-Fi en su lugar o desactive el modo Avión y vuelva a intentarlo"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "El anclaje a red Wi-Fi consume mucha batería y aumenta el uso de datos. ¿Continuar?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Desactive el anclaje a red para usar Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Para habilitar el modo de ahorro de energía, active al menos una función relevante"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Apague el Wi-Fi para usar anclaje a red"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Las conexiones Wi-Fi y Mobile AP no se pueden activar al mismo tiempo. ¿Desactivar Mobile AP?"
+
diff --git a/po/es_MX.po b/po/es_MX.po
new file mode 100755 (executable)
index 0000000..c9f490c
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notific."
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Sólo llamadas de emergencia"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotación"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notificaciones (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibración"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Sonido y vibración"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotación auto."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Bloq rotación"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Modo de almacenamiento masivo"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Desactiv."
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "No compatible"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "Ya no podrá utilizar aplicaciones de datos como el navegador, el correo o YouTube mediante la conexión móvil. Las llamadas y los mensajes de texto seguirán funcionando. ¿Continuar?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insertar tarjeta SIM para acceder a los servicios de red"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "No volver a preguntar"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Inserte tarjeta SIM y reinicie el dispositivo para usar la redirección"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "La conexión mediante paquete de datos puede suponer gastos adicionales. ¿Continuar?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Ahorro de energía"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Anclaje a red"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Datos móviles"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Perfil Manejo"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "No se puede conectar a las redes móviles mientras que el perfil Fuera de línea está activado. Conéctese a una red Wi-Fi o desactive el perfil Fuera de línea e inténtelo de nuevo"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "La redirección de Wi-Fi consume más batería y aumenta el uso de datos. ¿Continuar?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Desactive la redirección para usar Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Para activar el Modo de ahorro de energía, active, al menos, una función importante"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Desactive Wi-Fi para usar la redirección"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Las conexiones Wi-Fi y Mobile AP no se pueden activar al mismo tiempo. ¿Desactivar Mobile AP?"
+
diff --git a/po/et.po b/po/et.po
new file mode 100755 (executable)
index 0000000..2755f84
--- /dev/null
+++ b/po/et.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Teavitused"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Ainult hädaabikõned"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Pööram."
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Teavitused (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Värin"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Heli ja värin"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Autom. pööram."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Pööramise lukk"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Massmälurežiim"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Desaktiv."
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Luba"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Toetuseta"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Sisestage SIM-kaart, et pääseda ligi võrguteenustele"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ära küsi enam"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Vahendamiseks sisestage SIM-kaart ja taaskäivitage seade"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Pakettandmesideühenduse loomisel võivad rakenduda lisatasud. Kas jätkata?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automaatne"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Energia säästmine"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Mobiilse internetiga ühendamine"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobiilne andmeside"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Sõidurežiim"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Mobiilsete võrkudega ei saa ühendust luua, kui lennurežiim on aktiveeritud. Looge selle asemel ühendus Wi-Fi võrguga või desaktiveerige lennurežiim ja proovige uuesti"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi kaudu vahendamine tarbib rohkem akutoidet ja suurendab andmekasutust. Kas jätkata?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wi-Fi kasutamiseks desaktiveerige modem"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Energiasäästurežiimi aktiveerimiseks aktiveerige vähemalt üks asjakohane funktsioon"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Modemi kasutamiseks lülitage Wi-Fi välja"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fit ja Mobile AP-d ei saa aktiveerida samaaegselt. Kas desaktiveerida Mobile AP?"
+
diff --git a/po/eu.po b/po/eu.po
new file mode 100755 (executable)
index 0000000..51629cd
--- /dev/null
+++ b/po/eu.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Jakinarazpenak"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Larrialdi deiak bakarrik"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Biraketa"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Jakinarazpenak (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Bibrazioa"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Soinu & bibrazioa"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Errotaz. autom."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Biraketa blokeoa"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Biltegiratze masibo modua"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Ezgaitu"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Gaitu"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Ez bateragarria"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Sartu SIM txartela sare zerbitzuetara sartzeko"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ez galdetu berriz"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Sartu SIM txartela eta berrabiarazi gailua ainguraketa erabiltzeko"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Litekeena da pakete datuen bidez konektatzeak kosturen bat izatea. Jarraitu?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Bateria aurreztea"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Sare ainguraketa"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Datu mugikorrak"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Gidatze modua"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Ezin da sare mugikorretara konektatu Hegaldi modua gaituta dagoen bitartean. Konektatu Wi-Fi sarera bestela, edo ezgaitu Hegaldi modua eta saiatu berriz"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi ainguraketak bateria gehiago kontsumitzen du eta zure datuen erabilera areagotzen du. Jarraitu?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Desgaitu ainguraketa Wi-Fi erabiltzeko"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Bateria aurrezteko modua gaitzeko, gaitu funtzio nagusi bat gutxienez"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Itzali Wi-Fia ainguraketa erabiltzeko"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi eta Mobile AP ezin dira aldi berean aktibatu. Desaktibatu Mobile AP?"
+
diff --git a/po/fi.po b/po/fi.po
new file mode 100755 (executable)
index 0000000..3e21e58
--- /dev/null
+++ b/po/fi.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Ilmoitukset"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Vain hätäpuhelut"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Kierto"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Ilmoitukset (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Värinä"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Ääni ja värinä"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Autom. kierto"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Kierron lukitus"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Massamuistitila"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Ei käyt."
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Päälle"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Ei tuettu"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Pääset verkkopalveluihin asettamalla SIM-kortin paikalleen"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Älä kysy uudelleen"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Aseta SIM-kortti ja käynnistä laite uudelleen yhteyden jakamista varten"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Pakettidatan kautta yhdistämisestä voidaan periä lisämaksuja. Jatketaanko?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automaattinen"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Virransäästö"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Yhteyden jako"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobiilidata"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Ajotila"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Matkapuhelinverkkoihin ei voi ottaa yhteyttä, kun lentotila on käytössä. Muodosta sen sijaan yhteys Wi-Fi-verkon kautta tai poista lentotila käytöstä ja yritä uudelleen"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi-yhteyden jakaminen kuluttaa enemmän virtaa ja lisää datan käyttöä. Jatketaanko?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Poista yhdistäminen käytöstä Wi-Fin käyttöä varten"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Jos haluat ottaa virransäästötilan käyttöön, ota ainakin yksi olennainen toiminto käyttöön"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Poista Wi-Fi käytöstä yhdistämisen käyttöä varten"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fiä ja mobiilitukiasemaa ei voi ottaa käyttöön samaan aikaan. Haluatko poistaa mobiilitukiaseman käytöstä?"
+
diff --git a/po/fr_CA.po b/po/fr_CA.po
new file mode 100755 (executable)
index 0000000..5797aa5
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notifications"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Appels d'urgence uniquement"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotation"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notifications (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibreur"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Son et vibreur"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotation auto"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Verr. rotation"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Mode stockage de masse"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Désactiver"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Activer"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Non pris en charge"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "Vous ne pourrez plus utiliser les applications de données telles que le navigateur, la messagerie et YouTube via le réseau mobile. Les appels et les SMS seront toujours opérationnels. Continuer?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insérez une carte SIM pour accéder aux services réseau"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ne plus demander"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Insérez une carte SIM et redémarrez l'appareil pour utiliser le modem"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "La connexion via des données par paquet peut entrainer des frais supplémentaires. Continuer ?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Économie d'énergie"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Fonction modem"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Données mobiles"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Mode Voiture"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Impossible de se connecter aux réseaux mobiles lorsque le mode Hors-ligne est activé. Connectez-vous au réseau Wifi à la place ou désactivez le mode Hors-ligne et réessayez"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Le modem Wifi consomme plus d'énergie et augmente l'utilisation des données. Continuer ?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Désactivez le modem pour utiliser le Wifi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Pour activer le mode Économie d'énergie, activez au moins une fonction appropriée"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Désactivez le Wifi pour utiliser le modem"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Activation simultanée de wifi et du point d'accès mobile impossible. Désactiver le point d'accès mobile ?"
+
diff --git a/po/fr_FR.po b/po/fr_FR.po
new file mode 100755 (executable)
index 0000000..842efa6
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notifications"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Appels d'urgence uniquement"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotation"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notifications (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibreur"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Son et vibreur"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotation auto"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Désactiver\nrotation"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Mode stockage de masse"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Désactiv."
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Activer"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Non pris en charge"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "Vous ne pourrez plus utiliser les applications de données telles que le navigateur, la messagerie et YouTube via le réseau mobile. Les appels et les SMS seront toujours opérationnels. Continuer ?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insérez une carte SIM pour accéder aux services réseau"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ne plus demander"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Insérez une carte SIM et redémarrez l'appareil pour utiliser le modem"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Les connexions de données peuvent entraîner des frais supplémentaires. Continuer ?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto."
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Économie d'énergie"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Fonction modem"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Données mobiles"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Profil Voiture"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Impossible de se connecter aux réseaux mobiles lorsque le mode Hors-ligne est activé. Connectez-vous au réseau Wi-Fi à la place ou désactivez le mode Hors-ligne et réessayez"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Le modem Wi-Fi consomme plus d'énergie et augmente l'utilisation des données. Continuer ?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Désactivez le modem pour utiliser le Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Pour activer le mode Économie d'énergie, activez au moins une fonction appropriée"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Désactivez le Wi-Fi pour utiliser le modem"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Activation simultanée du Wi-Fi et du point d'accès mobile impossible. Désactiver le point d'accès mobile ?"
+
diff --git a/po/ga.po b/po/ga.po
new file mode 100755 (executable)
index 0000000..4cff800
--- /dev/null
+++ b/po/ga.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Fógraí"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Glaonna éigeandála amháin"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rothlú"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Fógraí (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Crith"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Fuaim & crith"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Uathrothlú"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Glas rothl."
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Mód ollstórála"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Díchumasú"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Cumasaigh"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Gan tacú"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Ionsáigh cárta SIM le seirbhísí líonra a rochtain"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ná hiarr arís"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Ionsáigh cárta SIM agus atosaigh an gléas le nascaireacht a úsáid"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Is féidir go ngearrfar táillí breise ar nascadh le sonraí pacáiste. Ar aghaidh?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Uath-"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Coigilt chumhachta"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Ag déanamh teaghráin"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Sonraí móibíleacha"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Mód tiomána"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Ní féidir nascadh le líonraí móibíleacha agus mód Eitilte cumasaithe. Nasc le líonra Wi-Fi, nó díchumasaigh mód Eitilte agus triail arís é"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Ídíonn nascaireacht Wi-Fi níos mó cumhacht ceallra agus méadaíonn úsáid do shonraí. Ar aghaidh?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Díchumasaigh nascaireacht le Wi-Fi a úsáid"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Cumasaigh feidhm ábhartha amháin ar a laghad le Mód coigilte cumhachta a chumasú"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Cas as Wi-Fi le nascaireacht a úsáid"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Ní féidir Wi-Fi agus AP Móibíleach a chur i ngníomh ag an am céanna. Díghníomhachtaigh AP Móibíleach?"
+
diff --git a/po/gl.po b/po/gl.po
new file mode 100755 (executable)
index 0000000..418df11
--- /dev/null
+++ b/po/gl.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notificacións"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Só chamadas de urxencia"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotación"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notificacións (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibración"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Son e vibración"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotación aut"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Reloxo de rotación"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Modo almacenamento masivo"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Desactivar"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Non admitido"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insira a tarxeta SIM para acceder aos servizos de rede"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Non preguntar outra vez"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Insire a tarxeta SIM e reinicia o dispositivo para usar a ancoraxe á rede"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Conectarse a través do paquete de datos pode carrexar custos adicionais. Continuar?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Aforro de enerxía"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Ancoraxe á rede"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Datos móbiles"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Modo conducir"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Non se pode conectar con redes móbiles co modo de avión activado. Conéctate a unha rede Wi-Fi no seu lugar ou desactiva o modo de avión e téntao de novo"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "A ancoraxe á rede Wi-Fi consume máis batería e incrementa o uso de información. Continuar?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Desactiva a ancoraxe á rede para usar a Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Para activar o modo de aforro de enerxía, activa polo menos unha función relevante"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Desactiva a Wi-Fi para usar a ancoraxe á rede"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "O Wi-Fi e AP Móbil non poden activarse ao mesmo tempo. Desactivar AP Móbil?"
+
diff --git a/po/hi.po b/po/hi.po
new file mode 100755 (executable)
index 0000000..bea018c
--- /dev/null
+++ b/po/hi.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "अधिसूचनाएँ"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "केवल आपात कॉलें"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "रोटेशन"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "सूचनाएँ (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "कंपन"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "साउंड और कंपन"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "ऑटो रोटेशन"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "रोटेशन लॉक"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "मास स्टोरेज मोड"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "अक्षम करें"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "सक्षम"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "असमर्थित"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "नेटवर्क सेवाएँ प्राप्त करने के लिए SIM कार्ड डालें"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "दोबारा न पूछें"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "टेथरिंग का उपयोग करने के लिए SIM कार्ड सम्मिलित करें और डिवाइस रीस्टार्ट करें"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "पैकेट डाटा द्वारा कनेक्ट करने के लिए अतिरिक्त शुल्क लग सकते हैं। जारी रखें?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "स्वतः"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "पॉवर बचत"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "टेथरिंग"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "मोबाइल डाटा"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "ड्राइविंग मोड"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "फ़्लाइट मोड सक्षम होने के दौरान मोबाइल नेटवर्क से कनेक्ट करने में अक्षम। इसके बजाय Wi-Fi नेटवर्क से कनेक्ट करें, या फ़्लाइट मोड अक्षम करें और फिर से प्रयास करें"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi टेथरिंग बैटरी पॉवर की ज्यादा खपत करता है और आपके डाटा उपयोग को बढ़ाता है। जारी रखें?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wi-Fi का उपयोग करने के लिए टेथरिंग अक्षम करें"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "पॉवर सेविंग मोड सक्षम करने के लिए, कम से कम एक संबंधित फ़ंक्‍शन सक्षम करें"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "टेथरिंग का उपयोग करने के लिए Wi-Fi बंद करें"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "एक ही समय में Wi-Fi और Mobile AP सक्रिय नहीं कर सकते हैं। Mobile AP निष्क्रिय करें?"
+
diff --git a/po/hr.po b/po/hr.po
new file mode 100755 (executable)
index 0000000..ce065b0
--- /dev/null
+++ b/po/hr.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Obavijesti"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Samo SOS pozivi"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotacija"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Obavijesti (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibracija"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Zvuk i vibracije"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Auto. rotacija"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Zaklj. rotacije"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Način masovne memorije"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Isključi"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Uključi"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nepodržano"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Umetnite SIM karticu za pristup mrežnim uslugama"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Više ne pitaj"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Umetnite SIM karticu i pokrenite uređaj da biste koristili dijeljenje"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Spajanje preko paketnih podataka može izazvati dodatne troškove. Nastaviti?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Štednja baterije"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Dijeljenje veze"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobilni podaci"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "U vožnji"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Nemoguće spojiti se na mobilne mreže dok je uključen profil Bez mreže. Umjesto toga spojite se na Wi-Fi mrežu ili isključite profil Bez mreže i pokušajte ponovno"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi dijeljenje povećava potrošnju baterije i količinu prijenosa podataka. Nastavak?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Isključite dijeljenje da biste koristili Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Da biste uključili štednju baterije, uključite najmanje jednu odgovarajuću funkciju"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Isključite Wi-Fi da biste koristili dijeljenje"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Istodobno ne možete uključiti Wi-Fi i Mobile AP. Isključiti Mobilnu pristupnu točku?"
+
diff --git a/po/hu.po b/po/hu.po
new file mode 100755 (executable)
index 0000000..c7912c9
--- /dev/null
+++ b/po/hu.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Értesítések"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Csak segélyhívás indítható"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Forgatás"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Értesítések (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Rezgés"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Hang és rezgés"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Aut. elforg."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Tájolás rögz."
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Háttértár mód"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Kikapcsol"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Engedélyezés"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nem támogatott"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Hálózati szolgáltatások eléréséhez helyezze be a SIM kártyát"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Máskor ne legyen kérdés"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Az internetmegosztás használatához helyezzen be SIM kártyát, és indítsa újra az eszközt"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Az adatkapcsolatért a szolgáltató további költségeket számíthat fel. Folytatja?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto."
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Energiatakarékosság"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Internetmegosztás"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobil adatok"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Vezetés mód"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Amíg a Repülő üzemmód be van kapcsolva, nem lehet a mobilhálózathoz kapcsolódni. Kapcsolódjon Wi-Fi hálózathoz, vagy tiltsa le a Repülő üzemmódot, és próbálja újra"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "A Wi-Fi internetmegosztás használata gyorsan meríti az akkumulátort, és nagyobb adatforgalmat eredményez. Folytatja?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "A Wi-Fi használatához tiltsa le az internetmegosztást"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Az Energiatakarékos mód engedélyezéséhez legalább egy releváns funkciót engedélyezzen"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Az internetmegosztás használatához kapcsolja ki a Wi-Fi-t"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "A Wi-Fi és a Mobil AP-nem lehet egyszerre aktív. Kikapcsolja a Mobil AP-t?"
+
diff --git a/po/hy.po b/po/hy.po
new file mode 100755 (executable)
index 0000000..cb595cf
--- /dev/null
+++ b/po/hy.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Ծանուցումներ"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Միայն հրատապ կանչեր"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Պտտում"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Ծանուցումներ (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Թրթռում"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Ձայն և թրթռում"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Ինքնապտտում"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Պտտման կողպում"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Զանգվածային պահոցի ռեժիմ"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Կասեցնել"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Ակտիվացնլ"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Չսատարվող"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Տեղադրեք SIM քարտը՝ ցանցային ծառայություններ մտնելու համար"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Այլևս չհարցնել"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Մտցնել SIM քարտ և վերագործարկել սարքը՝ տեղակապում օգտագործելու համար"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Փաթեթային տվյալների միջոցով միացումը կարող է լրացուցիչ վճար պահանջել: Շարունակե՞լ:"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Ավտոմատ"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Էներգիայի խնայում"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Տեղակապում"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Շարժական տվյալներ"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Վարման ռեժիմ"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Անհնար է միանալ շարժական կապի ցանցերին, երբ Թռիչքային ռեժիմն ընձեռված է: Փոխարենը միացեք Wi-Fi ցանցին կամ կասեցրեք Թռիչքային ռեժիմն ու նորից փորձեք"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi տեղակապումը մարտկոցի ավելի շատ էներգիա է սպառում և ավելացնում է տվյալների օգտագործումը. շարունակե՞լ:"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Կասեցրեք տեղակապումը՝ Wi-Fi-ից օգտվելու համար"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Էներգիայի խնայման ռեժիմն ընձեռելու համար ընձեռեք առնվազն մեկ համապատասխան գործառույթ"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Անջատեք Wi-Fi-ը՝ տեղակապում օգտագործելու համար"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi-ն ու Mobile AP-ն չեն կարող միաժամանակ ակտիվացվել: Ապաակտիվացնե՞լ Mobile AP-ն:"
+
diff --git a/po/is.po b/po/is.po
new file mode 100755 (executable)
index 0000000..7e37473
--- /dev/null
+++ b/po/is.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Tilkynningar"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Aðeins neyðarhringingar"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Snúa"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Tilkynningar (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Titringur"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Hljóð og titringur"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Sjálfv. snún."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Snún.lás"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Gagnageymslustilling"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Slökkva"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Gera virkt"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Óstutt"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Setjið SIM kort í til að fá aðgang að netþjónustu"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ekki spyrja aftur"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Settu inn SIM-kort og endurræstu tækið til að nota tjóðrun"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Gjald kann að vera tekið fyrir pakkagagnatengingu. Viltu halda áfram?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Sjálfvirkt"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Orkusparnaður"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Sími sem netaðgangsstaður"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Farsímagögn"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Akstursstilling"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Ekki hægt að tengjast farsímagögnum þegar kveikt er á flugstillingu. Tengdu við Wi-Fit net í staðinn, eða slökktu á flugstillingu og reyndu aftur"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi tjóðrun notar meiri orku og eykur gagnaflutning. Halda áfram?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Slökktu á tjóðrun til að nota Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Til að kveikja á orkusparnaðarstillingu þarftu að kveikja á minnst einni tengdri aðgerð"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Slökktu á Wi-Fi til að nota tjóðrun"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Það er ekki hægt að nota Wi-Fi og farsímaaðgangsstað á sama tíma. Viltu loka farsímaaðgangsstaðnum?"
+
diff --git a/po/it_IT.po b/po/it_IT.po
new file mode 100755 (executable)
index 0000000..442aab7
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notifiche"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Solo chiamate di emergenza"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Ruota"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notifiche (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibraz."
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Suono e vibraz."
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotazione\nauto"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Blocco rotazione"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Modalità archiv. di massa"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Disattiva"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Attiva"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Non supportato"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "Non sarà più possibile utilizzare applicazioni di dati quali Browser, E-mail e YouTube con rete mobile. Le chiamate e gli SMS continueranno a funzionare. Continuare?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Inserite una scheda SIM per accedere ai servizi di rete"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Non chiedere di nuovo"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Inserire la scheda SIM e riavviare il dispositivo per utilizzare il tethering"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "La connessione a pacchetti dati può determinare costi aggiuntivi. Continuare?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automatica"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Risparmio energetico"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Connessione dati"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Modalità alla guida"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Impossibile connettersi alle reti mobili se la modalità Offline è attivata. Connettersi alla rete Wi-Fi o disattivare la modalità Offline e riprovare"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Il tethering Wi-Fi aumenta il consumo della batteria e l'uso dei dati. Continuare?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Per utilizzare il Wi-Fi, disattivate il tethering"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Per attivare la modalità Risparmio energetico, attivate almeno una funzione pertinente"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Per utilizzare il tethering, disattivate il Wi-Fi"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Impossibile attivare contemporaneamente sia Wi-Fi che Router Wi-Fi. Disattivare Router Wi-Fi?"
+
diff --git a/po/ja_JP.po b/po/ja_JP.po
new file mode 100755 (executable)
index 0000000..37ed5fb
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "通知"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "緊急通報のみ発信可能です。"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "回転"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "通知(%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "バイブ"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "サウンドとバイブ"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "画面回転"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "回転ロック"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "マスストレージモード"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "無効"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "有効"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "未対応です"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "ネットワークサービスにアクセスするにはSIMカードを挿入してください。"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "今後表示しない"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "テザリングを使用するには、SIMカードを挿入し、端末を再起動してください。"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "モバイルデータ接続では、高額の料金が発生する場合があります。続行しますか?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "省電力"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "テザリング"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "モバイルデータ"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "スピーチモード"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "機内モードが有効な間は、モバイルネットワークに接続できません。代わりにWi-Fiネットワークに接続するか、機内モードを無効にして、再度実行してください。"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fiテザリングはバッテリーをより多く消費し、データ使用量が増加します。続行しますか?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wi-Fiを使用するには、テザリングを無効にしてください。"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "省電力モードを有効にするには、少なくとも1つの関連機能を選択してください。"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "テザリングを使用するには、Wi-FiをOFFにしてください。"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-FiとWi-Fiテザリング両方は同時起動できません。Wi-Fiテザリングを無効にしますか?"
+
diff --git a/po/ka.po b/po/ka.po
new file mode 100755 (executable)
index 0000000..2ebdee0
--- /dev/null
+++ b/po/ka.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "შეტყობინებები"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "მხოლოდ გადაუდებელი ზარები"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "ბრუნვა"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "შეტყობინებები (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "ვიბრაცია"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "ხმა და ვიბრაცია"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "ავტო. მობრუნება"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "ბრუნვის დაბლოკვა"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "მასიური მეხსიერების რეჟ."
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "გამორთვა"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "გააქტიურება"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "გაუთვალისწინებელი"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "ქსელის მომსახურების მისაღებად ჩასვით SIM ბარათი"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "აღარ მკითხო"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "ჩადეთ SIM და გადატვირთეთ აპარატი, რომ გამოიყენოთ მობილური ინტერნეტი კომპიუტერში"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "მონაცემთა პაკეტით კავშირისთვის შეიძლება დამატებითი გადასახადი იყოს. განაგრძობთ?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "ავტომატური"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "ენერგიის დაზოგვა"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "მიბმა"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "მობილური მონაცემები"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "მანქანის მართვის რეჟიმი"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "მობილურ ქსელებს ვერ დაუკავშირდებით, სანამ ჩართულია ფრენის რეჟიმი. სანაცვლოდ, დაუკავშირდით Wi-Fi ქსელს, ან გამორთეთ ფრენის რეჟიმი და ისევ ცადეთ"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi მობილური ინტერნეტი ხარჯავს უფო მეტ ენერგიას და ზრდის მონაცემთა გამოყენებას. განაგრძობთ?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "გამორთეთ მობილური ინტერნეტი კომპიუტერში, რომ ჩართოთ Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "ენერგიის დაზოგვის რეჟიმის გასააქტიურებლად, ჩართეთ მინიმუმ ერთი შესაბამისი ფუნქცია"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "გამორთეთ Wi-Fi, რომ გამოიყენოთ მობილური ინტერნეტი კომპიუტერში"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi და Mobile AP ვერ გააქტიურდება ერთიდაიმავე დროს. გამოირთოს Mobile AP?"
+
diff --git a/po/kk.po b/po/kk.po
new file mode 100755 (executable)
index 0000000..dcf88e0
--- /dev/null
+++ b/po/kk.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Хабарландыру"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Тек жедел қоңырау  үшін"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Бұру"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Мәлімдемелер (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Діріл"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Дыбыс және діріл"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Авто бұру"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Бұруды құлыптау"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Жалпы сақтау режимі"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Өшіру"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Қосу"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Қолдаусыз"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Желі қызметтеріне өту үшін SIM картасына салу"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Қайтадан сұрамаңыз"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "SIM картасын салып, байланыстыруды пайдалану үшін құрылғыны өшіріп қосыңыз"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Пакет деректері арқылы қосылуға қосымша ақылардың алынуы мүмкін. Жалғастыру керек пе?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Қуат үнемдеу"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Шектеу"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Ұялы деректер"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Жүргізу режимі"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Ұшу режимі қосылғанда ұялы байланыс желілеріне қосылу мүмкін емес. Оның орнына Wi-Fi желісіне қосылыңыз немесе ұшу режимін өшіріңіз, сосын әрекетті қайталап көріңіз"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi байланыстыру батарея зарядын көп пайдаланып, деректеріңіздің пайдаланылуын арттырады. Жалғастыру керек пе?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wi-Fi пайдалану үшін байланыстыруды өшіріңіз"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Қуат үнемдеу режимін қосу үшін кемінде бір тиісті функцияны қосыңыз"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Байланыстыруды пайдалану үшін Wi-Fi өшіріңіз"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi және Mobile AP екеуін де бір уақытта іске қосу мүмкін емес. Mobile AP мүмкіндігін өшіру керек пе?"
+
diff --git a/po/ko_KR.po b/po/ko_KR.po
new file mode 100755 (executable)
index 0000000..b2cf617
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "알림"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "긴급전화만 가능합니다"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "회전"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "알림(%d개)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "진동"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "소리 및\n진동"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "자동 회전"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "회전 잠금"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "이동식 메모리 모드"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "차단"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "허용"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "지원되지 않습니다"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "모바일 네트워크로는 브라우저, 이메일, YouTube와 같은 데이터 애플리케이션을 사용할 수 없게 됩니다. 전화 및 문자 메시지는 계속 사용할 수 있습니다. 계속할까요?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "네트워크 서비스를 이용하려면 SIM을 삽입하세요"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "다시 묻지 않기"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "테더링을 이용하려면 SIM 카드를 삽입하고 디바이스를 다시 시작하세요"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "패킷 데이터로 연결하면 요금이 발생할 수 있습니다. 계속할까요?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "자동"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "절전 모드"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "테더링"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "모바일 데이터"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "운전 모드"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "비행기 탑승 모드가 실행 중에는 모바일 네트워크에 연결할 수 없습니다. Wi-Fi 네트워크에 연결하거나 비행기 탑승 모드를 해제한 후 다시 시도하세요"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi 테더링을 사용하면 배터리가 많이 소모되며 데이터 사용량이 증가합니다. 계속할까요?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wi-Fi를 사용하려면 테더링을 끄세요"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "절전 모드를 실행하려면 최소 하나 이상의 관련 기능을 선택하세요"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "테더링을 사용하려면 Wi-Fi를 끄세요"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi와 모바일 AP를 동시에 실행할 수 없습니다. 모바일 AP를 해제할까요?"
+
diff --git a/po/lt.po b/po/lt.po
new file mode 100755 (executable)
index 0000000..e813277
--- /dev/null
+++ b/po/lt.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Pranešimai"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Tik pagalbos skambučiai"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotacija"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Pranešimai (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibracija"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Garsas ir vibrac."
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Aut. suk."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Sukamasis užraktas"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Duomenų saugyklos režimas"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Išjungti"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Įjungti"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nepalaikoma"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Įdėkite SIM kortelę, kad galėtumėte  naudotis tinklo paslaugomis"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Neklauskite dar kartą"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Norėdami naudoti siejimą, įdėkite SIM kortelę ir paleiskite įrenginį iš naujo"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Jungiantis paketinių duomenų perdavimo ryšiu gali būti taikomi papildomi mokesčiai. Tęsti?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automatinis"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Energijos taupymas"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Siejama"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobilieji duomenys"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Vairavimo režimas"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Neįmanoma prisijungti prie mobiliųjų tinklų, kol įjungtas skrydžio režimas. Vietoj to prisijunkite prie „Wi-Fi“ tinklo arba išjunkite skrydžio režimą ir pabandykite dar kartą"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Esant įjungtam „Wi-Fi“ siejimui, suvartojama daugiau akumuliatoriaus energijos ir padidėja duomenų naudojimas. Tęsti?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Išjunkite siejimą, kad galėtumėte naudoti „Wi-Fi“"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Jei norite įjungti energijos taupymo režimą, suaktyvinkite bent vieną atitinkamą funkciją"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Išjunkite „Wi-Fi“, kad galėtumėte naudoti siejimą"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Tuo pat metu negalima suaktyvinti ir „Wi-Fi“, ir „Mobile AP“. Išjungti „Mobile AP“?"
+
diff --git a/po/lv.po b/po/lv.po
new file mode 100755 (executable)
index 0000000..52b30b4
--- /dev/null
+++ b/po/lv.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Paziņojumi"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Tikai ārkārtas zvani"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Pagrieš."
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Paziņojumi (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibrācija"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Skaņa un vibrācija"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Autom. pagriezt"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Pagr. bloķ."
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Lielapjoma atmiņas režīms"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Deaktiviz."
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Aktivizēt"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Neatbalstīts"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Lai piekļūtu tīkla pakalpojumiem, ievietojiet SIM karti"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Vairs nevaicāt"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Lai lietotu piesaisti, Ievietojiet SIM karti un restartējiet tālruni"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Par savienojuma izveidi, izmantojot pakešu datus, var tikt piemērota papildu maksa. Vai turpināt?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automātiski"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Enerģijas taupīšana"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Ierīces piesaiste tālrunim"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobilie dati"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Braukšanas režīms"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Nevar izveidot savienojumu ar mobilajiem tīkliem, kamēr ir aktivizēts lidojuma režīms. Tā vietā izveidojiet savienojumu ar Wi-Fi tīklu vai deaktivizējiet lidojuma režīmu un mēģiniet vēlreiz"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi piesaiste patērē daudz akumulatora enerģijas un palielina datu lietošanas apjomu. Vai turpināt?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Lai izmantotu Wi-Fi, deaktivizējiet piesaisti"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Lai aktivizētu enerģijas taupīšanas režīmu, aktivizējiet vismaz vienu atbilstošu funkciju"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Lai izmantotu piesaisti, izslēdziet Wi-Fi"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Vienlaikus nevar aktivizēt Wi-Fi un Mobile AP. Vai deaktivizēt Mobile AP?"
+
diff --git a/po/mk.po b/po/mk.po
new file mode 100755 (executable)
index 0000000..b79442f
--- /dev/null
+++ b/po/mk.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Известувања"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Само итни повици"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Заврт."
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Известувања (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Вибрации"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Звук и вибрации"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Автом. вртење"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Закл. вртење"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Режим за надвор. меморија"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Исклучи"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Вклучи"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Неподдржано"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Вметнете SIM-картичка за да пристапите кон мрежните услуги"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Не прашувај веќе"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Вметнете SIM-картичка и рестартирајте го уредот за да го користите делењето"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "За поврзување преку пакетни податоци може да се наплаќа дополнително. Сепак продолжи?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Автоматски"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Штедење енергија"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Ограничен опсег"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Мобилни податоци"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Режим за возење"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Не може да се поврзе со мобилни мрежи додека е вклучен режим за летало. Поврзете се со мрежа Wi-Fi или исклучете го режимот за летало и обидете се повторно"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Делењето Wi-Fi троши повеќе батерија и го зголемува користењето податоци. Сепак продолжи?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Исклучете делење за да користите Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "За да вклучите Режим за штедење енергија, вклучете барем една релевантна функција"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Исклучете го Wi-Fi за да користите делење"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Не може истовремено да се активни и Wi-Fi и мобилна пристапна точка. Да се исклучи мобилната пристапна точка?"
+
diff --git a/po/nb.po b/po/nb.po
new file mode 100755 (executable)
index 0000000..efe3701
--- /dev/null
+++ b/po/nb.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Varsler"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Kun nødanrop"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotasjon"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Varsler (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibrasjon"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Lyd og vibrasjon"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Auto- rotasjon"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Rotasjons-lås"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Masselagringsmodus"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Deaktiver"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Aktiver"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Støttes ikke"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Sett inn SIM-kort for å få tilgang til nettverkstjenester"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ikke spør på nytt"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Sett inn SIM-kort og start enheten på nytt for å bruke Internettdeling"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Ved tilkobling via pakkedata kan det oppstå ekstra kostnader. Fortsette?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Strømsparing"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Internettdeling"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobildata"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Kjøremodus"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Kan ikke koble til mobilnettverk mens Offlinemodus er aktivert. Koble til Wi-Fi-nettverk i stedet, eller deaktiver Offlinemodus og prøv på nytt"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi-Internettdeling forbruker mer batteristrøm og øker databruken. Fortsette?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Deaktiver Internettdeling for å bruke Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "For å aktivere strømsparingsmodus må du aktivere minst én relevant funksjon"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Slå av Wi-Fi for å bruke Internettdeling"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Både Wi-Fi og mobilt tilgangspunkt kan ikke aktiveres samtidig. Deaktivere mobilt tilgangspunkt?"
+
diff --git a/po/nl_NL.po b/po/nl_NL.po
new file mode 100755 (executable)
index 0000000..1289c48
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Meldingen"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Alleen noodoproepen"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotatie"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Meldingen (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Trillen"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Geluid en trillen"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Autom. draaien"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Rotatie vergrend."
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Massaopslagmodus"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Uitzetten"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Aanzetten"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Niet ondersteund"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Plaats de SIM-kaart voor netwerkdiensten"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Niet nogmaals vragen"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "SIM-kaart plaatsen en apparaat opnieuw opstarten om tethering te gebruiken"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Aan verbinding via pakketgegevens zijn mogelijk extra kosten verbonden. Doorgaan?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automatisch"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Spaarstand"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobiele gegevens"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Autostand"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Kan niet verbinden met mobiele netwerken als Vliegtuigstand is ingeschakeld. Maak in plaats daarvan verbinding via Wi-Fi-netwerk of schakel Vliegtuigstand uit en probeer het opnieuw"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi-tethering verbruikt meer voeding en verhoogt uw gegevensgebruik. Doorgaan?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Tethering uitschakelen om Wi-Fi te gebruiken"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Schakel ten minste één relevante functie in om de spaarstand in te schakelen"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Wi-Fi uitschakelen om tethering te gebruiken"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi en mobiel access point kunnen niet tegelijkertijd zijn geactiveerd. Mobiel access point uitschakelen?"
+
diff --git a/po/pl.po b/po/pl.po
new file mode 100755 (executable)
index 0000000..29c2835
--- /dev/null
+++ b/po/pl.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Powiadomienia"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Tylko połączenia alarmowe"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Obrót"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Powiadomienia (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Wibracja"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Dźwięk i wibracja"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Automat. obrót"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Blokada obrotu"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Tryb pamięci masowej"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Wyłącz"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Włącz"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nieobsługiwane"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Włóż kartę SIM, aby uzyskać dostęp do usług sieciowych"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Nie pokazuj ponownie"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Włóż kartę SIM i uruchom urządzenie ponownie, aby korzystać z udostępniania"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Połączenie przez sieć może spowodować naliczenie dodatkowych opłat. Kontynuować?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automatyczny"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Oszczędzanie energii"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Udost. poł. internetowego"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Sieć komórkowa"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Tryb Samochód"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Kiedy tryb Offline jest włączony, nie można korzystać z sieci komórkowych. Połącz się z siecią Wi-Fi lub wyłącz tryb Offline i spróbuj ponownie"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Router Wi-Fi zwiększa zużycie baterii i danych. Kontynuować?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wyłącz router, aby korzystać z sieci Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Aby włączyć tryb Oszczędzanie energii, włącz przynajmniej jedną związaną z nim funkcję"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Wyłącz sieć Wi-Fi, aby korzystać z routera"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Sieć Wi-Fi i Router Wi-Fi nie mogą być uruchomione jednocześnie. Wyłączyć Router Wi-Fi?"
+
diff --git a/po/pt_BR.po b/po/pt_BR.po
new file mode 100755 (executable)
index 0000000..36b2d61
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notificações"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Somente chamadas de emergência"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotação"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notificações (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibração"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Som e vibração"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotação autom."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Bloquear rotação"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Modo de armaz. em massa"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Desativar"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Ativar"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Não suportado"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insira um cartão SIM para acessar serviços de rede"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Não perguntar mais"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Insira o cartão SIM e reinicie o dispositivo para usar a ancoragem"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "O acesso à rede através de pacotes de dados pode implicar em cobrança de taxas adicionais. Continuar?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Economia de energia"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Ancoragem"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Dados móveis"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Modo de condução"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Não é possível conectar-se à rede de dados móveis enquanto o modo Offline está ativado. Conecte-se à rede Wi-Fi ou desative o modo Offline e tente novamente"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "A ancoragem Wi-Fi consome mais bateria e aumenta o seu uso de dados. Continuar?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Desativar compartilhamento de rede via Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Para ativar o modo de Economia de energia, ative pelo menos uma função relevante"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Desligar Wi-Fi para usar compartilhamento de rede"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Impossível utilizar Wi-Fi ou AllShare com o Roteador Wi-Fi simultaneamente. Desativar o Roteador Wi-Fi?"
+
diff --git a/po/pt_PT.po b/po/pt_PT.po
new file mode 100755 (executable)
index 0000000..191034a
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notificações"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Apenas chamadas de emergência"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotação"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notificações (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibração"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Som e vibração"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotação autom."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Bloqueio rotação"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Modo armazenamento massa"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Desactivar"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Activar"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Não suportado"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Insira o cartão SIM para aceder aos serviços de rede"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Não voltar a perguntar"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Inserir cartão SIM e reiniciar o dispositivo para utilizar a ancoragem"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "O acesso à rede através de pacotes de dados pode implicar a cobrança de taxas adicionais. Continuar?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automático"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Economia de energia"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Partilha de Internet"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Dados móveis"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Modo de condução"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Impossível ligar às redes móveis enquanto o modo de Voo está activado. Ligue à rede Wi-Fi em substituição ou desactive o modo de Voo e tente novamente"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "A ancoragem Wi-Fi consome mais bateria e aumenta a utilização de dados. Continuar?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Desactive a ancoragem para utilizar o Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Para activar o Modo de economia de energia, active pelo menos uma função relevante"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Desligar o Wi-Fi para utilizar a ancoragem"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Impossível activar Wi-Fi e PA Móvel em simultâneo. Desactivar PA Móvel?"
+
diff --git a/po/ro.po b/po/ro.po
new file mode 100755 (executable)
index 0000000..a94c3ec
--- /dev/null
+++ b/po/ro.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Notificări"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Numai apeluri de urgenţă"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotire"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Notificări (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibraţie"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Sunet şi vibraţie"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Rotire auto."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Blocare rotire"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Mod de stocare în masă"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Dezactiv."
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Activare"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Neacceptat"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Introduceţi cartela SIM pentru a accesa serviciile de reţea"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Nu întreba din nou"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Introduceţi cartela SIM şi reporniţi dispozitivul pentru a utiliza furnizarea accesului la Internet"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Conectarea folosind pachetele de date poate genera costuri suplimentare. Continuaţi?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automat"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Economisire energie"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Date mobile"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Mod la volan"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Imposibil de conectat la reţelele mobile când modul Avion este activat. Conectaţi-vă utilizând reţeaua Wi-Fi sau dezactivaţi modul Avion şi încercaţi din nou"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Furnizarea accesului la Internet prin Wi-Fi consumă mai mult din energia bateriei şi creşte volumul de date utilizat. Continuaţi?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Dezact. furnizarea accesului la internet pt. a utiliza Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Pentru activarea modului Economisire energie, activaţi cel puţin o funcţie relevantă"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Opriţi Wi-Fi pentru a utiliza furnizarea accesului la internet"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi şi PA mobil nu pot fi activate simultan. Dezactivaţi PA mobil?"
+
diff --git a/po/ru_RU.po b/po/ru_RU.po
new file mode 100755 (executable)
index 0000000..ee98ccb
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Уведомления"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Только экстренные вызовы"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Поворот"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Уведомления (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Вибрация"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Звук и вибрация"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Авто поворот"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Блокир. поворот"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Режим съемного устройства"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Выключить"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Включить"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Не поддерживается"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Вставьте SIM-карту для доступа к услугам сети"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Больше не спрашивать"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Чтобы воспользоваться модемом, вставьте SIM-карту и перезагрузите устройство"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "За передачу данных может взиматься дополнительная плата в соответствии с тарифным планом. Продолжить?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Экономия энергии"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Модем"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Мобильные данные"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Режим Вождение"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Невозможно подключиться к мобильной сети в автономном режиме. Подключитесь к сети Wi-Fi или отключите автономный режим и повторите попытку"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "При использовании модема Wi-Fi быстро расходуется заряд батареи и увеличивается объем передаваемых данных. Продолжить?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Отключите модем для использования Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Чтобы использовать режим энергосбережения, включите по крайней мере одну функцию"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Отключите Wi-Fi, чтобы использовать модем"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Нельзя активировать одновременно Wi-Fi и Mobile AP. Отключить Mobile AP?"
+
diff --git a/po/sk.po b/po/sk.po
new file mode 100755 (executable)
index 0000000..ec018dd
--- /dev/null
+++ b/po/sk.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Oznámenia"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Len tiesňové volania"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Otočenie"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Oznámenia (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibrácia"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Zvuk a vibrácia"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Autom. otáčanie"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Zamknutie otáčania"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Režim veľkokapac. pamäte"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Zakázať"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Povoliť"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nie je podporované"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Vložte SIM kartu na prístup k službám siete"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Už sa nepýtať"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Pred použitím zdieľania pripojenia vložte kartu SIM a reštartujte zariadenie"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Paketové dátové pripojenie môže vyžadovať ďalšie poplatky. Pokračovať?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automaticky"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Šetrenie energie"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Zdieľanie pripojenia"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobilné dáta"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Jazdný režim"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Keď je zapnutý letový režim, nedá sa pripojiť k mobilným sieťam. Pripojte sa namiesto toho k sieti Wi-Fi alebo vypnite letový režim a skúste to znova"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Zdieľanie pripojenia Wi-Fi spotrebúva viac energie batérie a zvyšuje používanie dátových prenosov. Pokračovať?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Pred použitím siete Wi-Fi vypnite zdieľanie pripojenia"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Ak chcete zapnúť režim šetrenia energie, zapnite aspoň jednu relevantnú funkciu"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Pred použitím zdieľania pripojenia vypnite sieť Wi-Fi"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi a mobilný prístupový bod sa nedajú aktivovať súčasne. Deaktivovať mobilný prístupový bod?"
+
diff --git a/po/sl.po b/po/sl.po
new file mode 100755 (executable)
index 0000000..e2f7596
--- /dev/null
+++ b/po/sl.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Obvestila"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Samo klici v sili"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Zasuk"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Obvestila (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibr."
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Zvok in vibrir."
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Samodej. vrtenje"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Zaklep. sukanja"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Način shranjevanja"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Onemogoči"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Omogoči"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Ni podprto"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Za dostop do omrežnih storitev vstavite kartico SIM"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ne vprašaj znova"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Vstavite kartico SIM in znova zaženite napravo, če želite uporabljati telefon kot modem"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Povezovanje preko paketnega prenosa podatkov lahko povzroči dodatne stroške. Nadaljujem?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Samodejno"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Varčevanje z energijo"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Tethering"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobilni podatki"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Način vožnje"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Ko je omogočen način letenja, povezava z mobilnimi omrežji ni mogoča. Povežite se z omrežjem Wi-Fi ali onemogočite način letenja in poskusite znova"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Uporaba telefona kot modema prek omrežja Wi-Fi porabi več baterije in poveča uporabo podatkov. Želite nadaljevati?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Za uporabo Wi-Fi onemogočite uporabo telefona kot modema"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Če želite omogočiti Način za varčevanje z energijo, morate omogočiti vsaj eno ustrezno funkcijo"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Izklopite Wi-Fi, če želite uporabljati telefon kot modem"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi in mobilna DT ne moreta biti vklopljeni hkrati. Izklopim mobilno DT?"
+
diff --git a/po/sr.po b/po/sr.po
new file mode 100755 (executable)
index 0000000..677cf0e
--- /dev/null
+++ b/po/sr.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Obaveštenja"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Samo pozivi u hitnim slučajevima"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotacija"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Obaveštenja (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibracija"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Zvuk i vibracija"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Autom. rotacija"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Zaklj. pri rotac."
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Režim masovne memorije"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Onemogući"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Omogući"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Nepodržano"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Ubaci SIM karticu za pristup mrežnim uslugama"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Ne pitaj ponovo"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Ubaci SIM karticu i restartuj uređaj da bi koristio/la vezivanje"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Povezivanje putem paketnih podataka može izazvati dodatne troškove. Nastavak?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Automatski"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Štednja energije"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Vezivanje"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Podaci za mob. uređaje"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Režim vožnje"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Povezivanje na mobilne mreže nije moguć kada je omogućen režim letenja. Umesto toga, poveži se na Wi-Fi mrežu ili onemogući režim letenja i pokušaj ponovo"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi vezivanje troši više energije i povećava upotrebu podataka. Nastaviti?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Onemogući vezivanje da bi koristio/la Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Da bi omogućio/la režim štednje energije, omogući barem jednu važnu funkciju"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Isključi Wi-Fi da bi koristio/la vezivanje"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi i mobilna pristupna tačka se ne mogu uključiti istovremeno. Isključi mobilnu pristupnu tačku?"
+
diff --git a/po/sv.po b/po/sv.po
new file mode 100755 (executable)
index 0000000..2f09b38
--- /dev/null
+++ b/po/sv.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Meddelanden"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Endast nödsamtal"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Rotation"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Meddelanden (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibration"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Ljud och vibration"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Auto-rotering"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Roteringslås"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Masslagringsläge"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Inaktivera"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Aktivera"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Stöds inte"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Sätt in SIM-kort för att få tillgång till nätverkstjänster"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Fråga inte igen"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Sätt i ett SIM-kort och starta om enheten för att använda Internetdelning"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Anslutning via paketdata kan medföra ytterligare kostnader. Vill du fortsätta?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Auto"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Energisparläge"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Internetdelning"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobil data"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Billäge"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Det går inte att ansluta till mobila nätverk eftersom Flygläge är aktiverat. Anslut till ett Wi-Fi-nätverk istället eller inaktivera Flygläge och gör ett nytt försök"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Vid användning av Wi-Fi-internetdelning förbrukas mer batteri och dataanvändningen ökar. Fortsätta?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Inaktivera Internetdelning för att använda Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Aktivera minst en relevant funktion för att aktivera energisparläget"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Stäng av Wi-Fi för att använda internetdelning"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Det går inte att aktivera både Wi-Fi och Mobile AP samtidigt. Avaktivera Mobile AP?"
+
diff --git a/po/tr_TR.po b/po/tr_TR.po
new file mode 100755 (executable)
index 0000000..2bc9893
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Bildirimler"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Yalnızca acil aramalar"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Döndürme"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Bildirimler (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Titreşim"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Ses ve titreşim"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Otomatk döndürme"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Döndürme kilidi"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Yığın depolama modu"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Devre dışı"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Etkin"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Desteklenmiyor"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Şebeke servislerine erişmek için SIM kartını takın"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Tekrar sorma"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Bağlantıyı kullanmak için SIM kartı takın ve cihazı tekrar başlatın"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Paket verisi kanalıyla bağlanmak ek ücretlere neden olabilir devam edilsin mi?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Otomatik"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Güç tasarrufu"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Bağlantı"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobil veri"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Sürüş modu"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Uçuş modu etkinken, mobil ağlara bağlanamıyor. Bunun yerine Wi-Fi ağına bağlanın veya mobil veriyi devre dışı bırakın ve tekrar deneyin"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi bağlantısı daha fazla pil gücü tüketir ve veri kullanımınızı arttırır. Devam edilsin mi?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wi-Fi'yi kullanmak için bağlanmayı devre dışı bırakın"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Güç tasarrufu modunu etkinleştirmek için en az bir uygun fonksiyonu etkinleştirin"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Bağlanmayı kullanmak için Wi-Fi'yi kapatın"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Hem Wi-Fi hem de Mobil AP aynı anda etkinleştirilemez. Mobil AP devre dışı bırakılsın mı?"
+
diff --git a/po/uk.po b/po/uk.po
new file mode 100755 (executable)
index 0000000..a7c1fe7
--- /dev/null
+++ b/po/uk.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Сповіщення"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Лише екстрені виклики"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Обертан."
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Сповіщення (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Вібрація"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Звук і вібрація"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Автооберт."
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Блок. обертання"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Режим накопичувача"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "Вимкнути"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Увімкнути"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Не підтримується"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Щоб отримати доступ до послуг мережі, вставте SIM-картку"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Надалі не запитувати"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Вставте SIM-картку та перезавантажте пристрій, щоб скористатися прив'язкою"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Підключення з використанням пакетних даних може потребувати додаткової оплати. Продовжити?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Авто"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Енергозбереження"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Прив’язка"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Мобільні дані"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Режим За кермом"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Неможливо підключитися до мобільної мережі у разі ввімкненого режиму без зв'язку. Підключіться до мережі Wi-Fi або вимкніть режим без зв'язку та спробуйте ще раз"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Прив'язка Wi-Fi використовує більше заряду акумулятора та збільшує використання даних. Продовжити?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Вимкніть прив'язку, щоб скористатися Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Щоб ввімкнути режим енергозбереження, увімкніть принаймні одну відповідну функцію"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Вимкніть Wi-Fi, щоб скористатися прив'язкою"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Мережі Wi-Fi та Mobile AP не можна активувати одночасно. Вимкнути Mobile AP?"
+
diff --git a/po/uz.po b/po/uz.po
new file mode 100755 (executable)
index 0000000..960ab4e
--- /dev/null
+++ b/po/uz.po
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "Bildirishnoma"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "Faqat favqulodda qo‘ng‘iroqlar"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "Aylant."
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "Eslatmalar (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "Vibrats"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "Ovoz & vibratsiya"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "Avto. aylantirish"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "Aylantirish bloki"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "Katta hajmli xot. rejimi"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "O‘chirish"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "Yoqish"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "Qo‘llab-quvvatlanmaydigan"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "Tarmoq xizmatlariga kirish uchun SIM-karta kiriting"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "Boshqa so‘ralmasin"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "Bog‘lanishdan foydalanish uchun, SIM-kartani kiriting va qurilmani qayta ishga tushiring"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "Paketli ma’lumot orqali ulanish uchun qo‘shimcha to‘lov olinishi mumkin. Davom ettirilsinmi?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "Avtomatik"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "Quvvat tejash"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "Bog‘lash"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "Mobile data"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "Mashina rejimi"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "Uchish rejimi yoqilganda, mobil tarmoqlarga ulanib bo‘lmaydi. Uning o‘rniga Wi-Fi tarmoqqa ulaning yoki Uchish rejimini yoqing va qayta urinib ko‘ring"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi bog‘lanish ko‘proq batareya quvvatini sarflaydi va ma’lumot ishlatilishini oshiradi. Davom ettirilsinmi?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "Wi-Fidan foydalanish uchun bog‘lanishni o‘chiring"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "Quvvat tejash rejimini yoqish uchun kamida bitta mos funksiyani yoqing"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "Bog‘lanishdan foydalanish uchun Wi-Fini o‘chiring"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Bir vaqtning o‘zida Wi-Fi va Mobile APni faollashtirib bo‘lmaydi. Mobile AP o‘chirilsinmi?"
+
diff --git a/po/zh_CN.po b/po/zh_CN.po
new file mode 100755 (executable)
index 0000000..c67891b
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "通知"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "仅限紧急通话"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "转动"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "通知 (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "振动"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "声音和振动"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "自动旋转"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "旋转锁定"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "大容量存储模式"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "禁用"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "启动"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "不支持"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "您不能再通过移动网络使用数据应用程序,如浏览器、电子邮件和YouTube。通话和短信可继续使用。继续?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "插入SIM卡以访问网络服务"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "不再询问"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "插入 SIM 卡并重启设备以使用网络共享"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "通过分组数据连接可能产生额外费用。继续?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "自动"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "省电模式"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "网络分享"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "移动数据"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "驾驶模式"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "飞行模式启用时无法连接至移动网络。连接至 Wi-Fi 网络,或禁用飞行模式并重试"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi 网络共享消耗更多电池电力并增加您的数据使用量。是否继续?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "禁用网络共享以使用 Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "若要启用节电模式,至少启用一个相关功能"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "关闭 Wi-Fi 以使用网络共享"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi和移动接入无法同时启动。取消移动接入?"
+
diff --git a/po/zh_HK.po b/po/zh_HK.po
new file mode 100755 (executable)
index 0000000..05a485f
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "通知"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "只限緊急通話"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "旋轉"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "通知(%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "震動"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "聲音和震動"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "自動旋轉"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "旋轉鎖定"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "大容量儲存裝置模式"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "關閉"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "啟用"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "不支援"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "請插入 SIM 卡以存取服務"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "不再詢問"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "插入 SIM 卡並重新啟動裝置以使用網絡共用"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "透過分組數據連接可能會產生額外費用。要繼續嗎?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "省電模式"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "網絡共享"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "流動數據"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "駕駛模式"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "飛行模式啟用時無法連接至流動網絡。請連接 Wi-Fi 網絡或停用飛行模式並重試"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi 網絡共用會消耗更多電力並增加您的數據使用量。繼續嗎?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "停用網絡共享以使用 Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "若要啟用省電模式,請至少啟用一項相關功能"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "關閉 Wi-Fi 以使用網絡共享"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi和Mobile AP不可同時啟動。關閉Mobile AP嗎?"
+
diff --git a/po/zh_SG.po b/po/zh_SG.po
new file mode 100755 (executable)
index 0000000..e68370b
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "通知"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "仅限紧急通话"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "转动"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "通知 (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "振动"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "声音和振动"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "自动旋转"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "旋转锁定"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "大容量存储模式"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "关闭"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "启动"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "不支持"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "您不能再通过移动网络使用数据应用程序,如浏览器、电子邮件和YouTube。通话和短信可继续使用。继续?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "要使用网络服务须先插入SIM卡"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "不再询问"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "插入 SIM 卡并重启设备以使用网络共享"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "通过分组数据连接可能产生额外费用。继续?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "自动"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "省电"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "网络分享"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "移动数据"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "驾驶模式"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "飞行模式启用时无法连接至移动网络。连接至WLAN网络,或禁用飞行模式并重试"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "WLAN网络共享消耗更多电池电力并增加您的数据使用量。是否继续?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "禁用网络共享以使用 Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "若要启用节电模式,至少启用一个相关功能"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "关闭 Wi-Fi 以使用网络共享"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi-Fi和移动AP无法同时启动。取消移动AP?"
+
diff --git a/po/zh_TW.po b/po/zh_TW.po
new file mode 100755 (executable)
index 0000000..1641831
--- /dev/null
@@ -0,0 +1,87 @@
+msgid "IDS_QP_BODY_NOTIFICATIONS_ABB2"
+msgstr "通知"
+
+msgid "IDS_WIFI_BODY_ALLSHARE_CAST"
+msgstr "AllShare Cast"
+
+msgid "IDS_CALL_POP_CALLING_EMERG_ONLY"
+msgstr "僅限緊急通話"
+
+msgid "IDS_QP_BUTTON_ROTATION"
+msgstr "旋轉"
+
+msgid "IDS_QP_BODY_NOTIFICATIONS_HPD"
+msgstr "通知 (%d)"
+
+msgid "IDS_QP_BUTTON_VIBRATION"
+msgstr "震動"
+
+msgid "IDS_QP_BUTTON2_SOUND_N_VIBRATION"
+msgstr "聲音與震動"
+
+msgid "IDS_QP_TAB4_AUTO_ROTATION"
+msgstr "自動旋轉"
+
+msgid "IDS_QP_BUTTON2_ROTATION_LOCK"
+msgstr "旋轉鎖定"
+
+msgid "IDS_QP_BODY_MASS_STORAGE_MODE"
+msgstr "大容量儲存裝置模式"
+
+msgid "IDS_QP_BUTTON_DISABLE"
+msgstr "停用"
+
+msgid "IDS_QP_BUTTON_ENABLE"
+msgstr "啟用"
+
+msgid "IDS_COM_POP_UNSUPPORTED"
+msgstr "不支援"
+
+msgid "IDS_QP_BODY_YOU_WILL_NO_LONGER_BE_ABLE_TO_USE_DATA_APPLICATIONS_SUCH_AS_BROWSER_EMAIL_AND_YOUTUBE_VIA_MOBILE_NETWORK_CALLS_AND_TEXT_MESSAGES_WILL_CONTINUE_TO_FUNCTION_CONTINUE_Q_VZW"
+msgstr "You will no longer be able to use data applications such as Browser, Email and YouTube via mobile network. Calls and text messages will continue to function. Continue?"
+
+msgid "IDS_COM_POP_PELASE_INSERT_SIM_CARD_TO_ACCESS_NETWORK_SERVICES"
+msgstr "請插入 SIM 卡以存取網路服務"
+
+msgid "IDS_COM_BODY_DO_NOT_ASK_AGAIN"
+msgstr "不再詢問"
+
+msgid "IDS_QP_POP_INSERT_SIM_CARD_AND_RESTART_DEVICE_TO_USE_TETHERING"
+msgstr "插入 SIM 卡並重新啟動裝置以使用網路共享"
+
+msgid "IDS_QP_POP_CONNECTING_VIA_PACKET_DATA_MAY_INCUR_ADDITIONAL_CHARGES_CONTINUE_Q"
+msgstr "透過數據傳輸連線可能會產生額外費用。要繼續嗎?"
+
+msgid "IDS_QP_BODY_AUTO"
+msgstr "自動"
+
+msgid "IDS_QP_TAB_POWER_SAVING"
+msgstr "省電"
+
+msgid "IDS_QP_TAB_TETHERING"
+msgstr "網路共享"
+
+msgid "IDS_QP_TAB_MOBILE_DATA"
+msgstr "行動數據"
+
+msgid "IDS_QP_TAB_DRIVING_MODE"
+msgstr "駕駛模式"
+
+msgid "IDS_COM_POP_UNABLE_TO_CONNECT_TO_MOBILE_NETWORK_WHILE_FLIGHT_MODE_IS_ENABLED_MSG"
+msgstr "啟用飛航模式時無法連接行動網路。請連接 Wi-Fi 網路或停用飛航模式再重試"
+
+msgid "IDS_QP_POP_WI_FI_TETHERING_CONSUMES_MORE_BATTERY_POWER_AND_INCREASES_YOUR_DATA_USAGE_CONTINUE_Q"
+msgstr "Wi-Fi 網路共享會消耗更多電力並增加您的資料用量。繼續嗎?"
+
+msgid "IDS_QP_POP_DISABLE_TETHERING_TO_USE_WI_FI"
+msgstr "停用網路共享以使用 Wi-Fi"
+
+msgid "IDS_QP_POP_TO_ENABLE_POWER_SAVING_MODE_ENABLE_AT_LEAST_ONE_RELEVANT_FUNCTION"
+msgstr "若要啟用省電模式,請至少啟用一項相關功能"
+
+msgid "IDS_QP_POP_TURN_OFF_WI_FI_TO_USE_TETHERING"
+msgstr "關閉 Wi-Fi 以使用網路共享"
+
+msgid "IDS_WIFI_POP_BOTH_WI_FI_AND_MOBILE_AP_CANNOT_BE_ACTIVATED_AT_THE_SAME_TIME_DEACTIVATE_MOBILE_AP_Q"
+msgstr "Wi - Fi和行動AP不能在同一時間被啟動。停用行動AP?"
+
diff --git a/test/quickpanel_debug_util.c b/test/quickpanel_debug_util.c
new file mode 100755 (executable)
index 0000000..3974d01
--- /dev/null
@@ -0,0 +1,93 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 <sys/stat.h>
+#include <fcntl.h>
+#include <unistd.h>
+#include <stdarg.h>
+#include <stdlib.h>
+#include <string.h>
+#include <stdio.h>
+#include <time.h>
+#include <common.h>
+#include <glib.h>
+
+#define LINEMAX 256
+#define MAXFILELEN     1048576 /* 32000 */
+#define LOGFILE "/tmp/quickpanel.log"
+
+void debug_printf(char *fmt, ...) {
+       va_list ap;
+       FILE *fd = 0;
+       char buf[LINEMAX] = { 0, };
+       char debugString[LINEMAX] = { 0, };
+
+       va_start(ap, fmt);
+       vsnprintf(buf, sizeof(buf), fmt, ap);
+       va_end(ap);
+       int fileLen = 0;
+       struct tm local_t;
+       time_t current_time = 0;
+       bzero((char *) &debugString, LINEMAX);
+       time(&current_time);
+       /* local_t = gmtime(&current_time); */
+       gmtime_r(&current_time, &local_t); /* for prevent 53555 */
+       int len = snprintf(debugString, sizeof(debugString),
+                       "[%d-%02d-%02d, %02d:%02d:%02d]: ", local_t.tm_year + 1900,
+                       local_t.tm_mon + 1, local_t.tm_mday, local_t.tm_hour,
+                       local_t.tm_min, local_t.tm_sec);
+       if (len == -1) {
+               return;
+       } else {
+               debugString[len] = '\0';
+       }
+       len = g_strlcat(debugString, buf, LINEMAX);
+       if (len >= LINEMAX) {
+               /* TODO:ERROR handling */
+               return;
+       } else {
+               debugString[len] = '\n';
+       }
+       /* FIXME this is for permission.. later we should fix and remove this... */
+       /* system("chmod 666 "LOGFILE); */
+       if ((fd = fopen(LOGFILE, "at+")) == NULL) {
+               DBG("File fopen fail for writing Pwlock information");
+       } else {
+               int pid = -1;
+               if (fwrite(debugString, strlen(debugString), 1, fd) < 1) {
+                       DBG("File fwrite fail for writing Pwlock information");
+                       fclose(fd);
+                       if ((pid = fork()) < 0) {
+                       } else if (pid == 0) {
+                               execl("/bin/rm", "rm", "-f", LOGFILE, (char *) 0);
+                       }
+                       /* system("rm -rf "LOGFILE);  */
+               } else {
+                       fseek(fd, 0l, SEEK_END);
+                       fileLen = ftell(fd);
+                       if (fileLen > MAXFILELEN) {
+                               fclose(fd);
+                               if ((pid = fork()) < 0) {
+                                       return;
+                               } else if (pid == 0) {
+                                       execl("/bin/rm", "rm", "-f", LOGFILE, (char *) 0);
+                               }
+                               /* system("rm -rf "LOGFILE); */
+                       } else
+                               fclose(fd);
+               }
+       }
+}
diff --git a/test/quickpanel_debug_util.h b/test/quickpanel_debug_util.h
new file mode 100755 (executable)
index 0000000..593cd38
--- /dev/null
@@ -0,0 +1,22 @@
+/*
+ * Copyright 2012  Samsung Electronics Co., Ltd
+ *
+ * Licensed under the Flora License, Version 1.0 (the "License");
+ * you may not use this file except in compliance with the License.
+ * You may obtain a copy of the License at
+ *
+ *  http://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 __QUICKPANEL_DEBUG_UTIL_H_
+#define __QUICKPANEL_DEBUG_UTIL_H_
+
+void debug_printf(char *fmt, ...);
+
+#endif                         /* __QUICKPANEL_DEBUG_UTIL_H_ */